@duplojs/agents-kit 0.0.0-stage → 0.1.0-beta.10
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 +81 -2
- package/dist/bin/index.d.ts +2 -0
- package/dist/bin/index.mjs +7 -0
- package/dist/bin/packagePath.d.ts +2 -0
- package/dist/bin/packagePath.mjs +12 -0
- package/dist/bin/setup/index.d.ts +12 -0
- package/dist/bin/setup/index.mjs +33 -0
- package/dist/bin/setup/instructions.d.ts +8 -0
- package/dist/bin/setup/instructions.mjs +27 -0
- package/dist/bin/skills/index.d.ts +5 -0
- package/dist/bin/skills/index.mjs +11 -0
- package/dist/bin/skills/install.d.ts +2 -0
- package/dist/bin/skills/install.mjs +25 -0
- package/dist/bin/skills/skill.d.ts +35 -0
- package/dist/bin/skills/skill.mjs +60 -0
- package/dist/bin/skills/update.d.ts +2 -0
- package/dist/bin/skills/update.mjs +19 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +0 -0
- package/docs/API/10-lang/10-array/10-at.ts +65 -0
- package/docs/API/10-lang/10-array/10-chunk.ts +42 -0
- package/docs/API/10-lang/10-array/10-coalescing.ts +20 -0
- package/docs/API/10-lang/10-array/10-concat.ts +34 -0
- package/docs/API/10-lang/10-array/10-copyWithin.ts +34 -0
- package/docs/API/10-lang/10-array/10-every.ts +25 -0
- package/docs/API/10-lang/10-array/10-fill.ts +34 -0
- package/docs/API/10-lang/10-array/10-fillAll.ts +34 -0
- package/docs/API/10-lang/10-array/10-filter.ts +43 -0
- package/docs/API/10-lang/10-array/10-find.ts +33 -0
- package/docs/API/10-lang/10-array/10-findAndReplace.ts +35 -0
- package/docs/API/10-lang/10-array/10-findAndSpliceDelete.ts +35 -0
- package/docs/API/10-lang/10-array/10-findAndSpliceInsert.ts +35 -0
- package/docs/API/10-lang/10-array/10-findAndSpliceReplace.ts +24 -0
- package/docs/API/10-lang/10-array/10-findDuplicates.ts +19 -0
- package/docs/API/10-lang/10-array/10-findIndex.ts +25 -0
- package/docs/API/10-lang/10-array/10-findLast.ts +33 -0
- package/docs/API/10-lang/10-array/10-findLastIndex.ts +25 -0
- package/docs/API/10-lang/10-array/10-first.ts +21 -0
- package/docs/API/10-lang/10-array/10-flat.ts +22 -0
- package/docs/API/10-lang/10-array/10-flatMap.ts +24 -0
- package/docs/API/10-lang/10-array/10-from.ts +25 -0
- package/docs/API/10-lang/10-array/10-group.ts +27 -0
- package/docs/API/10-lang/10-array/10-groupOutput.ts +30 -0
- package/docs/API/10-lang/10-array/10-includes.ts +24 -0
- package/docs/API/10-lang/10-array/10-indexOf.ts +24 -0
- package/docs/API/10-lang/10-array/10-insert.ts +34 -0
- package/docs/API/10-lang/10-array/10-is.ts +29 -0
- package/docs/API/10-lang/10-array/10-isLastIndex.ts +24 -0
- package/docs/API/10-lang/10-array/10-last.ts +21 -0
- package/docs/API/10-lang/10-array/10-lastIndexOf.ts +24 -0
- package/docs/API/10-lang/10-array/10-length.ts +28 -0
- package/docs/API/10-lang/10-array/10-lengthEqual.ts +39 -0
- package/docs/API/10-lang/10-array/10-map.ts +34 -0
- package/docs/API/10-lang/10-array/10-maxElements.ts +44 -0
- package/docs/API/10-lang/10-array/10-minElements.ts +44 -0
- package/docs/API/10-lang/10-array/10-notIncludes.ts +24 -0
- package/docs/API/10-lang/10-array/10-pop.ts +23 -0
- package/docs/API/10-lang/10-array/10-prepend.ts +34 -0
- package/docs/API/10-lang/10-array/10-push.ts +34 -0
- package/docs/API/10-lang/10-array/10-reduce.ts +28 -0
- package/docs/API/10-lang/10-array/10-reduceFrom.ts +16 -0
- package/docs/API/10-lang/10-array/10-reduceRight.ts +28 -0
- package/docs/API/10-lang/10-array/10-reverse.ts +25 -0
- package/docs/API/10-lang/10-array/10-select.ts +26 -0
- package/docs/API/10-lang/10-array/10-set.ts +24 -0
- package/docs/API/10-lang/10-array/10-shift.ts +23 -0
- package/docs/API/10-lang/10-array/10-slice.ts +24 -0
- package/docs/API/10-lang/10-array/10-some.ts +25 -0
- package/docs/API/10-lang/10-array/10-sort.ts +34 -0
- package/docs/API/10-lang/10-array/10-spliceDelete.ts +34 -0
- package/docs/API/10-lang/10-array/10-spliceInsert.ts +34 -0
- package/docs/API/10-lang/10-array/10-spliceReplace.ts +24 -0
- package/docs/API/10-lang/10-array/10-unshift.ts +34 -0
- package/docs/API/10-lang/10-array/index.llms.md +220 -0
- package/docs/API/10-lang/10-array/index.md +3 -0
- package/docs/API/10-lang/10-chrono/10-addDays.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-addHours.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-addMilliseconds.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-addMinutes.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-addMonths.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-addSeconds.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-addTime.ts +38 -0
- package/docs/API/10-lang/10-chrono/10-addWeeks.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-addYears.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-applyTimezone.ts +29 -0
- package/docs/API/10-lang/10-chrono/10-betweenThanDate.ts +27 -0
- package/docs/API/10-lang/10-chrono/10-betweenThanOrEqualDate.ts +27 -0
- package/docs/API/10-lang/10-chrono/10-betweenThanOrEqualTime.ts +27 -0
- package/docs/API/10-lang/10-chrono/10-betweenThanTime.ts +27 -0
- package/docs/API/10-lang/10-chrono/10-closestTo.ts +45 -0
- package/docs/API/10-lang/10-chrono/10-computeTime.ts +35 -0
- package/docs/API/10-lang/10-chrono/10-createDate.ts +122 -0
- package/docs/API/10-lang/10-chrono/10-createDateOrThrow.ts +39 -0
- package/docs/API/10-lang/10-chrono/10-createTime.ts +86 -0
- package/docs/API/10-lang/10-chrono/10-createTimeOrThrow.ts +28 -0
- package/docs/API/10-lang/10-chrono/10-eachDate.ts +67 -0
- package/docs/API/10-lang/10-chrono/10-equalDate.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-equalTime.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-formatDate.ts +43 -0
- package/docs/API/10-lang/10-chrono/10-formatTime.ts +37 -0
- package/docs/API/10-lang/10-chrono/10-getDayOfMonth.ts +37 -0
- package/docs/API/10-lang/10-chrono/10-getDayOfWeek.ts +30 -0
- package/docs/API/10-lang/10-chrono/10-getDayOfYear.ts +28 -0
- package/docs/API/10-lang/10-chrono/10-getDifference.ts +29 -0
- package/docs/API/10-lang/10-chrono/10-getFirstDayOfMonth.ts +24 -0
- package/docs/API/10-lang/10-chrono/10-getFirstDayOfWeek.ts +24 -0
- package/docs/API/10-lang/10-chrono/10-getHour.ts +28 -0
- package/docs/API/10-lang/10-chrono/10-getLastDayOfMonth.ts +24 -0
- package/docs/API/10-lang/10-chrono/10-getLastDayOfWeek.ts +24 -0
- package/docs/API/10-lang/10-chrono/10-getMilliseconds.ts +24 -0
- package/docs/API/10-lang/10-chrono/10-getMinute.ts +27 -0
- package/docs/API/10-lang/10-chrono/10-getMonth.ts +27 -0
- package/docs/API/10-lang/10-chrono/10-getSecond.ts +27 -0
- package/docs/API/10-lang/10-chrono/10-getTimezoneOffset.ts +28 -0
- package/docs/API/10-lang/10-chrono/10-getWeekOfYear.ts +27 -0
- package/docs/API/10-lang/10-chrono/10-getYear.ts +27 -0
- package/docs/API/10-lang/10-chrono/10-greaterThanDate.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-greaterThanOrEqualDate.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-greaterThanOrEqualTime.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-greaterThanTime.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-isDate.ts +36 -0
- package/docs/API/10-lang/10-chrono/10-isSafeTimeValue.ts +19 -0
- package/docs/API/10-lang/10-chrono/10-isSafeTimestamp.ts +19 -0
- package/docs/API/10-lang/10-chrono/10-isSerializedTheDate.ts +41 -0
- package/docs/API/10-lang/10-chrono/10-isSerializedTheTime.ts +41 -0
- package/docs/API/10-lang/10-chrono/10-isTime.ts +36 -0
- package/docs/API/10-lang/10-chrono/10-lessThanDate.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-lessThanOrEqualDate.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-lessThanOrEqualTime.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-lessThanTime.ts +26 -0
- package/docs/API/10-lang/10-chrono/10-makeSafeTimeValue.ts +19 -0
- package/docs/API/10-lang/10-chrono/10-makeSafeTimestamp.ts +19 -0
- package/docs/API/10-lang/10-chrono/10-maxDate.ts +19 -0
- package/docs/API/10-lang/10-chrono/10-maxTime.ts +19 -0
- package/docs/API/10-lang/10-chrono/10-minDate.ts +19 -0
- package/docs/API/10-lang/10-chrono/10-minTime.ts +19 -0
- package/docs/API/10-lang/10-chrono/10-now.ts +13 -0
- package/docs/API/10-lang/10-chrono/10-round.ts +41 -0
- package/docs/API/10-lang/10-chrono/10-serialize.ts +23 -0
- package/docs/API/10-lang/10-chrono/10-sortDates.ts +30 -0
- package/docs/API/10-lang/10-chrono/10-sortTimes.ts +29 -0
- package/docs/API/10-lang/10-chrono/10-subtractDays.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-subtractHours.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-subtractMilliseconds.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-subtractMinutes.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-subtractMonths.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-subtractSeconds.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-subtractTime.ts +38 -0
- package/docs/API/10-lang/10-chrono/10-subtractWeeks.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-subtractYears.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-toDateISOString.ts +17 -0
- package/docs/API/10-lang/10-chrono/10-toNative.ts +25 -0
- package/docs/API/10-lang/10-chrono/10-toTimeValue.ts +17 -0
- package/docs/API/10-lang/10-chrono/10-toTimestamp.ts +17 -0
- package/docs/API/10-lang/10-chrono/10-today.ts +13 -0
- package/docs/API/10-lang/10-chrono/10-tomorrow.ts +13 -0
- package/docs/API/10-lang/10-chrono/10-yesterday.ts +13 -0
- package/docs/API/10-lang/10-chrono/index.llms.md +332 -0
- package/docs/API/10-lang/10-chrono/index.md +3 -0
- package/docs/API/10-lang/10-common/10-and.ts +51 -0
- package/docs/API/10-lang/10-common/10-asserts.ts +13 -0
- package/docs/API/10-lang/10-common/10-asyncInnerPipe.ts +23 -0
- package/docs/API/10-lang/10-common/10-asyncLoop.ts +23 -0
- package/docs/API/10-lang/10-common/10-asyncLoopAccumulator.ts +40 -0
- package/docs/API/10-lang/10-common/10-asyncPipe.ts +21 -0
- package/docs/API/10-lang/10-common/10-callThen.ts +22 -0
- package/docs/API/10-lang/10-common/10-cast.ts +16 -0
- package/docs/API/10-lang/10-common/10-clone.ts +12 -0
- package/docs/API/10-lang/10-common/10-createAsyncRetry.ts +34 -0
- package/docs/API/10-lang/10-common/10-createBuilder.ts +19 -0
- package/docs/API/10-lang/10-common/10-createEnum.ts +25 -0
- package/docs/API/10-lang/10-common/10-createExternalPromise.ts +13 -0
- package/docs/API/10-lang/10-common/10-createFormData.ts +16 -0
- package/docs/API/10-lang/10-common/10-createInterpolation.ts +12 -0
- package/docs/API/10-lang/10-common/10-createQueue.ts +17 -0
- package/docs/API/10-lang/10-common/10-createTransformer.ts +16 -0
- package/docs/API/10-lang/10-common/10-detachObjectMethod.ts +20 -0
- package/docs/API/10-lang/10-common/10-equal.ts +37 -0
- package/docs/API/10-lang/10-common/10-escapeRegExp.ts +11 -0
- package/docs/API/10-lang/10-common/10-falsy.ts +31 -0
- package/docs/API/10-lang/10-common/10-forward.ts +11 -0
- package/docs/API/10-lang/10-common/10-forwardAsserts.ts +17 -0
- package/docs/API/10-lang/10-common/10-forwardLog.ts +11 -0
- package/docs/API/10-lang/10-common/10-infer.ts +16 -0
- package/docs/API/10-lang/10-common/10-innerPipe.ts +23 -0
- package/docs/API/10-lang/10-common/10-instanceOf.ts +34 -0
- package/docs/API/10-lang/10-common/10-isType.ts +35 -0
- package/docs/API/10-lang/10-common/10-justExec.ts +28 -0
- package/docs/API/10-lang/10-common/10-justReturn.ts +19 -0
- package/docs/API/10-lang/10-common/10-loop.ts +18 -0
- package/docs/API/10-lang/10-common/10-loopAccumulator.ts +35 -0
- package/docs/API/10-lang/10-common/10-loopAccumulatorFrom.ts +29 -0
- package/docs/API/10-lang/10-common/10-memo.ts +12 -0
- package/docs/API/10-lang/10-common/10-memoObject.ts +11 -0
- package/docs/API/10-lang/10-common/10-memoPromise.ts +16 -0
- package/docs/API/10-lang/10-common/10-or.ts +43 -0
- package/docs/API/10-lang/10-common/10-pipe.ts +21 -0
- package/docs/API/10-lang/10-common/10-pipeCall.ts +20 -0
- package/docs/API/10-lang/10-common/10-prepareAsyncPipe.ts +20 -0
- package/docs/API/10-lang/10-common/10-preparePipe.ts +20 -0
- package/docs/API/10-lang/10-common/10-promiseAll.ts +16 -0
- package/docs/API/10-lang/10-common/10-promiseObject.ts +22 -0
- package/docs/API/10-lang/10-common/10-removeConstraint.ts +13 -0
- package/docs/API/10-lang/10-common/10-shameOnYou.ts +20 -0
- package/docs/API/10-lang/10-common/10-simpleClone.ts +12 -0
- package/docs/API/10-lang/10-common/10-stringToBytes.ts +16 -0
- package/docs/API/10-lang/10-common/10-stringToMillisecond.ts +17 -0
- package/docs/API/10-lang/10-common/10-tap.ts +28 -0
- package/docs/API/10-lang/10-common/10-timeout.ts +11 -0
- package/docs/API/10-lang/10-common/10-toCurriedPredicate.ts +28 -0
- package/docs/API/10-lang/10-common/10-toJSON.ts +15 -0
- package/docs/API/10-lang/10-common/10-toNative.ts +15 -0
- package/docs/API/10-lang/10-common/10-toRegExp.ts +17 -0
- package/docs/API/10-lang/10-common/10-transformer.ts +21 -0
- package/docs/API/10-lang/10-common/10-truthy.ts +31 -0
- package/docs/API/10-lang/10-common/10-useAsyncRetry.ts +31 -0
- package/docs/API/10-lang/10-common/10-when.ts +27 -0
- package/docs/API/10-lang/10-common/10-whenElse.ts +28 -0
- package/docs/API/10-lang/10-common/10-whenNot.ts +57 -0
- package/docs/API/10-lang/10-common/index.llms.md +244 -0
- package/docs/API/10-lang/10-common/index.md +3 -0
- package/docs/API/10-lang/10-dataStructure/10-absolutePath.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-allowedCharacters.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-array.ts +23 -0
- package/docs/API/10-lang/10-dataStructure/10-arrayLengthEqual.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-betweenThan.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-betweenThanOrEqual.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-bigint.ts +22 -0
- package/docs/API/10-lang/10-dataStructure/10-boolean.ts +22 -0
- package/docs/API/10-lang/10-dataStructure/10-createCodec.ts +45 -0
- package/docs/API/10-lang/10-dataStructure/10-createCodecs.ts +134 -0
- package/docs/API/10-lang/10-dataStructure/10-createErrorInterpreter.ts +74 -0
- package/docs/API/10-lang/10-dataStructure/10-date.ts +23 -0
- package/docs/API/10-lang/10-dataStructure/10-email.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-endsWith.ts +24 -0
- package/docs/API/10-lang/10-dataStructure/10-even.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-extend.ts +27 -0
- package/docs/API/10-lang/10-dataStructure/10-greaterThan.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-greaterThanOrEqual.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-include.ts +24 -0
- package/docs/API/10-lang/10-dataStructure/10-integer.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-isNullStructure.ts +12 -0
- package/docs/API/10-lang/10-dataStructure/10-isNullable.ts +12 -0
- package/docs/API/10-lang/10-dataStructure/10-isOptional.ts +12 -0
- package/docs/API/10-lang/10-dataStructure/10-isUndefinedStructure.ts +12 -0
- package/docs/API/10-lang/10-dataStructure/10-lazy.ts +23 -0
- package/docs/API/10-lang/10-dataStructure/10-lessThan.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-lessThanOrEqual.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-literal.ts +19 -0
- package/docs/API/10-lang/10-dataStructure/10-maxCharacters.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-maxElements.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-minCharacters.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-minElements.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-multipleOf.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-negative.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-notEmpty.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-notZero.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-null.ts +22 -0
- package/docs/API/10-lang/10-dataStructure/10-nullable.ts +19 -0
- package/docs/API/10-lang/10-dataStructure/10-number.ts +22 -0
- package/docs/API/10-lang/10-dataStructure/10-numberInString.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-object.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-odd.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-optional.ts +19 -0
- package/docs/API/10-lang/10-dataStructure/10-partial.ts +23 -0
- package/docs/API/10-lang/10-dataStructure/10-path.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-positive.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-record.ts +22 -0
- package/docs/API/10-lang/10-dataStructure/10-refine.ts +27 -0
- package/docs/API/10-lang/10-dataStructure/10-regex.ts +24 -0
- package/docs/API/10-lang/10-dataStructure/10-required.ts +21 -0
- package/docs/API/10-lang/10-dataStructure/10-safe.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-segmentPath.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-startsWith.ts +24 -0
- package/docs/API/10-lang/10-dataStructure/10-strictNegative.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-strictPositive.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-string.ts +22 -0
- package/docs/API/10-lang/10-dataStructure/10-stringLengthEqual.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-time.ts +23 -0
- package/docs/API/10-lang/10-dataStructure/10-trimmed.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-typeStructureIdentifier.ts +33 -0
- package/docs/API/10-lang/10-dataStructure/10-undefined.ts +22 -0
- package/docs/API/10-lang/10-dataStructure/10-union.ts +24 -0
- package/docs/API/10-lang/10-dataStructure/10-unwrapLazy.ts +17 -0
- package/docs/API/10-lang/10-dataStructure/10-url.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/10-uuid.ts +25 -0
- package/docs/API/10-lang/10-dataStructure/index.llms.md +264 -0
- package/docs/API/10-lang/10-dataStructure/index.md +3 -0
- package/docs/API/10-lang/10-either/10-asyncGroup.ts +44 -0
- package/docs/API/10-lang/10-either/10-asyncSafeCallback.ts +25 -0
- package/docs/API/10-lang/10-either/10-error.ts +12 -0
- package/docs/API/10-lang/10-either/10-expect.ts +13 -0
- package/docs/API/10-lang/10-either/10-extractErrorInLeft.ts +45 -0
- package/docs/API/10-lang/10-either/10-fail.ts +12 -0
- package/docs/API/10-lang/10-either/10-forwardAssertsSelection.ts +28 -0
- package/docs/API/10-lang/10-either/10-group.ts +58 -0
- package/docs/API/10-lang/10-either/10-hasInformation.ts +30 -0
- package/docs/API/10-lang/10-either/10-isLeft.ts +25 -0
- package/docs/API/10-lang/10-either/10-isRight.ts +25 -0
- package/docs/API/10-lang/10-either/10-isSelected.ts +41 -0
- package/docs/API/10-lang/10-either/10-keepAsRightByInformation.ts +29 -0
- package/docs/API/10-lang/10-either/10-keepAsRightSelection.ts +23 -0
- package/docs/API/10-lang/10-either/10-left.ts +13 -0
- package/docs/API/10-lang/10-either/10-matchInformation.ts +28 -0
- 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 +29 -0
- package/docs/API/10-lang/10-either/10-none.ts +12 -0
- package/docs/API/10-lang/10-either/10-ok.ts +12 -0
- package/docs/API/10-lang/10-either/10-result.ts +18 -0
- package/docs/API/10-lang/10-either/10-rewriteInformation.ts +24 -0
- package/docs/API/10-lang/10-either/10-right.ts +13 -0
- package/docs/API/10-lang/10-either/10-rightAsyncPipe.ts +70 -0
- package/docs/API/10-lang/10-either/10-rightPipe.ts +72 -0
- package/docs/API/10-lang/10-either/10-safeCallback.ts +29 -0
- package/docs/API/10-lang/10-either/10-some.ts +12 -0
- package/docs/API/10-lang/10-either/10-success.ts +12 -0
- package/docs/API/10-lang/10-either/10-toMaybe.ts +53 -0
- package/docs/API/10-lang/10-either/10-unwrapByInformation.ts +20 -0
- package/docs/API/10-lang/10-either/10-unwrapByInformationOrThrow.ts +19 -0
- package/docs/API/10-lang/10-either/10-unwrapLeft.ts +14 -0
- package/docs/API/10-lang/10-either/10-unwrapLeftOrThrow.ts +17 -0
- package/docs/API/10-lang/10-either/10-unwrapOr.ts +17 -0
- package/docs/API/10-lang/10-either/10-unwrapOtherwise.ts +20 -0
- package/docs/API/10-lang/10-either/10-unwrapRight.ts +14 -0
- package/docs/API/10-lang/10-either/10-unwrapRightOrThrow.ts +17 -0
- package/docs/API/10-lang/10-either/10-unwrapSelection.ts +26 -0
- package/docs/API/10-lang/10-either/10-unwrapSelectionOrThrow.ts +19 -0
- package/docs/API/10-lang/10-either/10-whenHasInformation.ts +36 -0
- package/docs/API/10-lang/10-either/10-whenHasInformationOtherwise.ts +29 -0
- package/docs/API/10-lang/10-either/10-whenIsLeft.ts +20 -0
- package/docs/API/10-lang/10-either/10-whenIsLeftOtherwise.ts +27 -0
- package/docs/API/10-lang/10-either/10-whenIsRight.ts +20 -0
- package/docs/API/10-lang/10-either/10-whenIsRightOtherwise.ts +26 -0
- package/docs/API/10-lang/10-either/10-whenIsSelected.ts +33 -0
- package/docs/API/10-lang/10-either/10-whenIsSelectedOtherwise.ts +35 -0
- package/docs/API/10-lang/10-either/index.llms.md +196 -0
- package/docs/API/10-lang/10-either/index.md +3 -0
- package/docs/API/10-lang/10-generator/10-asyncChunk.ts +55 -0
- package/docs/API/10-lang/10-generator/10-asyncConcat.ts +43 -0
- package/docs/API/10-lang/10-generator/10-asyncFilter.ts +41 -0
- package/docs/API/10-lang/10-generator/10-asyncFlat.ts +37 -0
- package/docs/API/10-lang/10-generator/10-asyncGroup.ts +65 -0
- package/docs/API/10-lang/10-generator/10-asyncLoop.ts +50 -0
- package/docs/API/10-lang/10-generator/10-asyncLoopAccumulator.ts +40 -0
- package/docs/API/10-lang/10-generator/10-asyncMap.ts +48 -0
- package/docs/API/10-lang/10-generator/10-asyncReduce.ts +63 -0
- package/docs/API/10-lang/10-generator/10-chunk.ts +44 -0
- package/docs/API/10-lang/10-generator/10-concat.ts +37 -0
- package/docs/API/10-lang/10-generator/10-createExternalAsyncGenerator.ts +29 -0
- package/docs/API/10-lang/10-generator/10-execute.ts +44 -0
- package/docs/API/10-lang/10-generator/10-filter.ts +35 -0
- package/docs/API/10-lang/10-generator/10-flat.ts +25 -0
- package/docs/API/10-lang/10-generator/10-group.ts +44 -0
- package/docs/API/10-lang/10-generator/10-groupOutput.ts +48 -0
- package/docs/API/10-lang/10-generator/10-loop.ts +46 -0
- package/docs/API/10-lang/10-generator/10-loopAccumulator.ts +33 -0
- package/docs/API/10-lang/10-generator/10-loopAccumulatorFrom.ts +30 -0
- package/docs/API/10-lang/10-generator/10-map.ts +35 -0
- package/docs/API/10-lang/10-generator/10-reduce.ts +51 -0
- package/docs/API/10-lang/10-generator/10-reduceFrom.ts +30 -0
- package/docs/API/10-lang/10-generator/index.llms.md +96 -0
- package/docs/API/10-lang/10-generator/index.md +3 -0
- 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-deepOverride.ts +35 -0
- package/docs/API/10-lang/10-object/10-discriminate.ts +102 -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 +88 -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-primitives.md +19 -0
- package/docs/API/10-lang/10-printer/10-renderLine.ts +36 -0
- package/docs/API/10-lang/10-printer/10-renderParagraph.ts +37 -0
- package/docs/API/10-lang/10-printer/index.llms.md +29 -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/10-lang/index.md +3 -0
- package/docs/API/20-server/10-file/10-appendFile.ts +50 -0
- package/docs/API/20-server/10-file/10-appendTextFile.ts +49 -0
- package/docs/API/20-server/10-file/10-copy.ts +50 -0
- package/docs/API/20-server/10-file/10-createEntryInterface.ts +13 -0
- package/docs/API/20-server/10-file/10-createFileInterface.ts +22 -0
- package/docs/API/20-server/10-file/10-createFolderInterface.ts +20 -0
- package/docs/API/20-server/10-file/10-createUnknownEntryInterface.ts +13 -0
- package/docs/API/20-server/10-file/10-ensureDirectory.ts +39 -0
- package/docs/API/20-server/10-file/10-ensureFile.ts +40 -0
- package/docs/API/20-server/10-file/10-exists.ts +36 -0
- package/docs/API/20-server/10-file/10-link.ts +51 -0
- package/docs/API/20-server/10-file/10-linkStat.ts +37 -0
- package/docs/API/20-server/10-file/10-makeDirectory.ts +41 -0
- package/docs/API/20-server/10-file/10-makeTemporaryDirectory.ts +35 -0
- package/docs/API/20-server/10-file/10-makeTemporaryFile.ts +40 -0
- package/docs/API/20-server/10-file/10-move.ts +51 -0
- package/docs/API/20-server/10-file/10-readDirectory.ts +52 -0
- package/docs/API/20-server/10-file/10-readFile.ts +38 -0
- package/docs/API/20-server/10-file/10-readJsonFile.ts +38 -0
- package/docs/API/20-server/10-file/10-readLink.ts +37 -0
- package/docs/API/20-server/10-file/10-readTextFile.ts +38 -0
- package/docs/API/20-server/10-file/10-realPath.ts +36 -0
- package/docs/API/20-server/10-file/10-relocate.ts +51 -0
- package/docs/API/20-server/10-file/10-remove.ts +40 -0
- package/docs/API/20-server/10-file/10-rename.ts +43 -0
- package/docs/API/20-server/10-file/10-setMode.ts +37 -0
- package/docs/API/20-server/10-file/10-setOwner.ts +38 -0
- package/docs/API/20-server/10-file/10-setTime.ts +42 -0
- package/docs/API/20-server/10-file/10-stat.ts +37 -0
- package/docs/API/20-server/10-file/10-symlink.ts +49 -0
- package/docs/API/20-server/10-file/10-truncate.ts +41 -0
- package/docs/API/20-server/10-file/10-walkDirectory.ts +75 -0
- package/docs/API/20-server/10-file/10-writeFile.ts +50 -0
- package/docs/API/20-server/10-file/10-writeJsonFile.ts +41 -0
- package/docs/API/20-server/10-file/10-writeTextFile.ts +49 -0
- package/docs/API/20-server/10-file/index.llms.md +144 -0
- package/docs/API/20-server/10-file/index.md +3 -0
- package/docs/API/20-server/20-common/10-environmentVariable.ts +57 -0
- package/docs/API/20-server/20-common/10-environmentVariableOrThrow.ts +21 -0
- package/docs/API/20-server/20-common/10-exitProcess.ts +9 -0
- package/docs/API/20-server/20-common/10-getCurrentDirectoryName.ts +10 -0
- package/docs/API/20-server/20-common/10-getCurrentWorkDirectory.ts +10 -0
- package/docs/API/20-server/20-common/10-getCurrentWorkDirectoryOrThrow.ts +10 -0
- package/docs/API/20-server/20-common/10-getProcessArguments.ts +10 -0
- package/docs/API/20-server/20-common/10-setCurrentWorkingDirectory.ts +14 -0
- package/docs/API/20-server/20-common/10-setCurrentWorkingDirectoryOrThrow.ts +12 -0
- package/docs/API/20-server/20-common/index.llms.md +40 -0
- package/docs/API/20-server/20-common/index.md +3 -0
- package/docs/API/20-server/30-dataStructure/10-file.ts +14 -0
- package/docs/API/20-server/30-dataStructure/10-fileExist.ts +27 -0
- package/docs/API/20-server/30-dataStructure/10-folder.ts +14 -0
- package/docs/API/20-server/30-dataStructure/10-folderExist.ts +14 -0
- package/docs/API/20-server/30-dataStructure/10-mimeType.ts +14 -0
- package/docs/API/20-server/30-dataStructure/10-size.ts +32 -0
- package/docs/API/20-server/30-dataStructure/index.llms.md +28 -0
- package/docs/API/20-server/30-dataStructure/index.md +3 -0
- package/docs/API/20-server/40-command/10-create.ts +39 -0
- package/docs/API/20-server/40-command/10-createArgument.ts +39 -0
- package/docs/API/20-server/40-command/10-createArrayOption.ts +36 -0
- package/docs/API/20-server/40-command/10-createBooleanOption.ts +28 -0
- package/docs/API/20-server/40-command/10-createOption.ts +46 -0
- package/docs/API/20-server/40-command/10-exec.ts +51 -0
- package/docs/API/20-server/40-command/10-execOptions.ts +30 -0
- package/docs/API/20-server/40-command/index.llms.md +32 -0
- package/docs/API/20-server/40-command/index.md +3 -0
- package/docs/API/20-server/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/index.md +3 -0
- package/docs/API.llms.md +135 -0
- package/docs/concepts/01-fundamental/01-constraint/01-use.ts +22 -0
- package/docs/concepts/01-fundamental/01-constraint/10-built-in-constraint.ts +37 -0
- package/docs/concepts/01-fundamental/01-constraint/20-manipulation.ts +41 -0
- package/docs/concepts/01-fundamental/01-constraint/30-cast.ts +66 -0
- package/docs/concepts/01-fundamental/01-constraint/40-custom-constraint.ts +45 -0
- package/docs/concepts/01-fundamental/01-constraint/index.md +3 -0
- package/docs/concepts/01-fundamental/02-currying/01-use.ts +38 -0
- package/docs/concepts/01-fundamental/02-currying/10-built-in-function.ts +190 -0
- package/docs/concepts/01-fundamental/02-currying/20-inner-pipe.ts +48 -0
- package/docs/concepts/01-fundamental/02-currying/30-async-pipe.ts +51 -0
- package/docs/concepts/01-fundamental/02-currying/index.md +3 -0
- package/docs/concepts/01-fundamental/03-either/01-use.ts +21 -0
- package/docs/concepts/01-fundamental/03-either/10-discrimination.ts +90 -0
- package/docs/concepts/01-fundamental/03-either/20-exhaustive-handling.ts +90 -0
- package/docs/concepts/01-fundamental/03-either/30-composition.ts +80 -0
- package/docs/concepts/01-fundamental/03-either/40-result-adaptation.ts +46 -0
- package/docs/concepts/01-fundamental/03-either/50-external-results.ts +72 -0
- package/docs/concepts/01-fundamental/03-either/60-contextual-state.ts +40 -0
- package/docs/concepts/01-fundamental/03-either/index.md +3 -0
- package/docs/concepts/01-fundamental/04-data-structure/01-use.ts +22 -0
- package/docs/concepts/01-fundamental/04-data-structure/10-structure.ts +244 -0
- package/docs/concepts/01-fundamental/04-data-structure/20-constraint.ts +86 -0
- package/docs/concepts/01-fundamental/04-data-structure/30-validation.ts +104 -0
- package/docs/concepts/01-fundamental/04-data-structure/40-codecs.ts +162 -0
- package/docs/concepts/01-fundamental/04-data-structure/50-recursive.ts +57 -0
- package/docs/concepts/01-fundamental/04-data-structure/60-interpret-error.ts +123 -0
- package/docs/concepts/01-fundamental/04-data-structure/index.md +3 -0
- package/docs/concepts/01-fundamental/05-chrono/01-use.ts +14 -0
- package/docs/concepts/01-fundamental/05-chrono/10-creation.ts +85 -0
- package/docs/concepts/01-fundamental/05-chrono/20-manipulation.ts +110 -0
- package/docs/concepts/01-fundamental/05-chrono/30-serialized.ts +89 -0
- package/docs/concepts/01-fundamental/05-chrono/40-timezone.ts +85 -0
- package/docs/concepts/01-fundamental/05-chrono/index.md +3 -0
- package/docs/concepts/01-fundamental/06-modeling/10-new-type.ts +42 -0
- package/docs/concepts/01-fundamental/06-modeling/20-entity.ts +191 -0
- package/docs/concepts/01-fundamental/06-modeling/30-tagged-object.ts +204 -0
- package/docs/concepts/01-fundamental/06-modeling/40-entity-lifecycle.ts +272 -0
- package/docs/concepts/01-fundamental/06-modeling/50-evidence.ts +94 -0
- package/docs/concepts/01-fundamental/06-modeling/60-signed-function.ts +26 -0
- package/docs/concepts/01-fundamental/06-modeling/index.md +3 -0
- package/docs/concepts/01-fundamental/07-discrimination/10-entity.ts +136 -0
- package/docs/concepts/01-fundamental/07-discrimination/20-fact.ts +158 -0
- package/docs/concepts/01-fundamental/07-discrimination/30-tagged-object.ts +137 -0
- package/docs/concepts/01-fundamental/07-discrimination/40-error.ts +73 -0
- package/docs/concepts/01-fundamental/07-discrimination/50-literal.ts +106 -0
- package/docs/concepts/01-fundamental/07-discrimination/60-shape.ts +160 -0
- package/docs/concepts/01-fundamental/07-discrimination/70-predicate.ts +101 -0
- package/docs/concepts/01-fundamental/07-discrimination/index.md +3 -0
- 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/01-fundamental/index.md +1 -0
- package/docs/concepts/02-server/10-file/10-manipulation.ts +52 -0
- package/docs/concepts/02-server/10-file/20-path.ts +72 -0
- package/docs/concepts/02-server/10-file/index.md +3 -0
- package/docs/concepts/02-server/20-http/10-init.ts +23 -0
- package/docs/concepts/02-server/20-http/20-route.ts +182 -0
- package/docs/concepts/02-server/20-http/30-routine.ts +188 -0
- package/docs/concepts/02-server/20-http/40-jwt.ts +149 -0
- package/docs/concepts/02-server/20-http/50-open-api.ts +44 -0
- package/docs/concepts/02-server/20-http/index.md +3 -0
- package/docs/concepts/02-server/30-environment/10-platform.ts +47 -0
- package/docs/concepts/02-server/30-environment/20-variable.ts +47 -0
- package/docs/concepts/02-server/30-environment/index.md +3 -0
- package/docs/concepts/02-server/40-command/10-use.ts +112 -0
- package/docs/concepts/02-server/40-command/20-sub-command.ts +48 -0
- package/docs/concepts/02-server/40-command/index.md +3 -0
- package/docs/concepts/02-server/index.md +1 -0
- package/docs/concepts/03-client/10-http/10-init.ts +52 -0
- package/docs/concepts/03-client/10-http/20-request.ts +254 -0
- package/docs/concepts/03-client/10-http/30-hook.ts +139 -0
- package/docs/concepts/03-client/10-http/index.md +3 -0
- package/docs/concepts/03-client/20-form/10-init.ts +98 -0
- package/docs/concepts/03-client/20-form/20-input.ts +103 -0
- package/docs/concepts/03-client/20-form/30-layout.ts +155 -0
- package/docs/concepts/03-client/20-form/40-template.ts +94 -0
- 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/03-client/20-form/index.md +3 -0
- package/docs/concepts/03-client/index.md +1 -0
- package/docs/concepts/04-tests/01-unit/10-either.ts +136 -0
- package/docs/concepts/04-tests/01-unit/20-server-mocking.ts +53 -0
- package/docs/concepts/04-tests/01-unit/index.md +3 -0
- package/docs/concepts/04-tests/02-e2e/10-init.ts +80 -0
- package/docs/concepts/04-tests/02-e2e/20-architecture.ts +76 -0
- package/docs/concepts/04-tests/02-e2e/30-testing.ts +90 -0
- package/docs/concepts/04-tests/02-e2e/index.md +3 -0
- package/docs/concepts/04-tests/index.md +1 -0
- package/docs/concepts/05-type-driven-design/01-architecture/10-boundaries.md +44 -0
- package/docs/concepts/05-type-driven-design/01-architecture/index.md +3 -0
- package/docs/concepts/05-type-driven-design/02-domains/10-entities.md +50 -0
- package/docs/concepts/05-type-driven-design/02-domains/20-aggregates.md +65 -0
- package/docs/concepts/05-type-driven-design/02-domains/30-repositories.md +35 -0
- 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 +3 -0
- package/docs/concepts/05-type-driven-design/03-applications/10-use-case.md +62 -0
- 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 +3 -0
- package/docs/concepts/05-type-driven-design/04-infrastructure/10-implementation.md +47 -0
- package/docs/concepts/05-type-driven-design/04-infrastructure/index.md +3 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/index.ts +2 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/book.ts +10 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/client.ts +10 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/email.ts +7 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/index.ts +4 -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 +45 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientRentBook.ts +31 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/createBook.ts +32 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/index.ts +4 -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 +74 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientRentBook.ts +42 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/createBook.ts +33 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/index.ts +4 -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 +33 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/index.ts +5 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/rental.ts +31 -0
- 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 +32 -0
- 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 +118 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/giveBackBook.ts +35 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/index.ts +2 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/rentBook.ts +32 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/index.ts +59 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/index.ts +3 -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 +4 -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 +16 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/client.ts +7 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/email.ts +12 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/index.ts +4 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/waitingListEntry.ts +19 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/index.ts +2 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/command/clientRentBook.ts +62 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/command/index.ts +11 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/bookExist.ts +19 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/clientExist.ts +19 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/index.ts +2 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/main.ts +19 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientGiveBackBook.ts +46 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientRentBook.ts +45 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/index.ts +2 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/book.ts +25 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/client.ts +7 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/email.ts +10 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/index.ts +4 -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 +13 -0
- package/docs/concepts/05-type-driven-design/index.md +3 -0
- package/docs/concepts.llms.md +521 -0
- package/instructions/coding-conventions.md +8 -0
- package/package.json +99 -3
- package/skills/command/SKILL.md +63 -0
- package/skills/command/references/examples/cli.ts +22 -0
- package/skills/command/references/examples/options-only.ts +27 -0
- package/skills/command/references/examples/preview-command.ts +57 -0
- package/skills/command/references/execution.md +31 -0
- package/skills/command/references/inputs.md +27 -0
- package/skills/fundamental/SKILL.md +80 -0
- package/skills/fundamental/references/composition.md +19 -0
- package/skills/fundamental/references/constraints-and-validation.md +24 -0
- package/skills/fundamental/references/examples/async-composition.ts +15 -0
- package/skills/fundamental/references/examples/cast.ts +18 -0
- package/skills/fundamental/references/examples/composition.ts +40 -0
- package/skills/fundamental/references/examples/environment-initialization.ts +19 -0
- package/skills/fundamental/references/examples/error-propagation.ts +24 -0
- package/skills/fundamental/references/examples/generic-inference.ts +31 -0
- package/skills/fundamental/references/examples/guaranteed-array-access.ts +31 -0
- package/skills/fundamental/references/examples/independent-inputs.ts +18 -0
- package/skills/fundamental/references/examples/infer.ts +21 -0
- package/skills/fundamental/references/examples/input-validation.ts +37 -0
- package/skills/fundamental/references/examples/iterations.ts +112 -0
- package/skills/fundamental/references/examples/result-selection.ts +65 -0
- package/skills/fundamental/references/examples/safe-declarations.ts +25 -0
- package/skills/fundamental/references/iterations.md +24 -0
- package/skills/fundamental/references/results-and-errors.md +34 -0
- package/skills/http-client/SKILL.md +50 -0
- package/skills/http-client/references/configuration.md +11 -0
- package/skills/http-client/references/examples/client-expectations.ts +85 -0
- package/skills/http-client/references/examples/client-streams.ts +74 -0
- package/skills/http-client/references/examples/external-client.ts +78 -0
- package/skills/http-client/references/hooks.md +7 -0
- package/skills/http-client/references/responses.md +39 -0
- package/skills/http-client/references/streams.md +10 -0
- package/skills/http-server/SKILL.md +61 -0
- package/skills/http-server/references/examples/authentication.ts +42 -0
- package/skills/http-server/references/examples/contracts.ts +19 -0
- package/skills/http-server/references/examples/inferred-client.ts +54 -0
- package/skills/http-server/references/examples/initialize.ts +29 -0
- package/skills/http-server/references/examples/minimal-route.ts +17 -0
- package/skills/http-server/references/examples/protected-route.ts +29 -0
- package/skills/http-server/references/examples/rename-user-route.ts +52 -0
- package/skills/http-server/references/examples/user-checker.ts +26 -0
- package/skills/http-server/references/examples/user-route.ts +45 -0
- package/skills/http-server/references/initialization.md +33 -0
- package/skills/http-server/references/reusable-flows.md +40 -0
- package/skills/http-server/references/routes-and-floor.md +46 -0
- package/skills/modeling/SKILL.md +76 -0
- package/skills/modeling/references/domain.md +33 -0
- package/skills/modeling/references/orchestration.md +36 -0
- package/skills/server/SKILL.md +55 -0
- package/skills/server/references/environment.md +30 -0
- package/skills/server/references/examples/environment.ts +41 -0
- package/skills/server/references/examples/file-structure.ts +26 -0
- package/skills/server/references/examples/files.ts +52 -0
- package/skills/server/references/files.md +38 -0
- package/skills/server/references/structures.md +15 -0
- package/skills/test/SKILL.md +70 -0
- package/skills/test/references/examples/results.ts +95 -0
- package/skills/test/references/examples/server.ts +59 -0
- package/skills/test/references/results.md +21 -0
- package/skills/test/references/server.md +17 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Entités métier et hydratation.
|
|
3
|
+
*
|
|
4
|
+
* Déclarer les propriétés métier, hydrater les données externes et mettre à jour les valeurs typées.
|
|
5
|
+
*/
|
|
6
|
+
import * as DEither from "@duplojs/lang/either";
|
|
7
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
8
|
+
import * as DModeling from "@duplojs/lang/modeling";
|
|
9
|
+
import * as DArray from "@duplojs/lang/array";
|
|
10
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
11
|
+
import type * as DString from "@duplojs/lang/string";
|
|
12
|
+
import type * as DNumber from "@duplojs/lang/number";
|
|
13
|
+
|
|
14
|
+
// Une Entity représente un objet métier doté d’une identité explicite.
|
|
15
|
+
// Ses valeurs primitives sont définies par des NewType qui associent un sens métier
|
|
16
|
+
// et des contraintes à leur représentation. Des collections, objets imbriqués,
|
|
17
|
+
// autres Entity ou TaggedObject peuvent également composer la shape.
|
|
18
|
+
export namespace User {
|
|
19
|
+
// Un namespace d'entité permet de regrouper la définition de l'entité
|
|
20
|
+
// et de ses `NewType`.
|
|
21
|
+
//
|
|
22
|
+
// Les noms des `NewType` créés avec ce namespace sont automatiquement
|
|
23
|
+
// préfixés par le nom de l'entité.
|
|
24
|
+
const namespace = DModeling.createEntityNamespace("User");
|
|
25
|
+
|
|
26
|
+
export const Id = namespace.createNewType(
|
|
27
|
+
"Id",
|
|
28
|
+
DDataStructure.string(),
|
|
29
|
+
[DDataStructure.uuid()],
|
|
30
|
+
);
|
|
31
|
+
export type Id = DDataStructure.StructureValue<typeof Id>;
|
|
32
|
+
type _CheckId = DCommon.ExpectType<Id, string & DModeling.NewType<"UserId", DString.Uuid>, "strict">;
|
|
33
|
+
|
|
34
|
+
export const Age = namespace.createNewType(
|
|
35
|
+
"Age",
|
|
36
|
+
DDataStructure.number(),
|
|
37
|
+
[
|
|
38
|
+
DDataStructure.integer(),
|
|
39
|
+
DDataStructure.positive(),
|
|
40
|
+
],
|
|
41
|
+
);
|
|
42
|
+
export type Age = DDataStructure.StructureValue<typeof Age>;
|
|
43
|
+
type _CheckAge = DCommon.ExpectType<
|
|
44
|
+
Age,
|
|
45
|
+
number & DModeling.NewType<"UserAge", DNumber.Integer | DNumber.Positive>,
|
|
46
|
+
"strict"
|
|
47
|
+
>;
|
|
48
|
+
|
|
49
|
+
export const Name = namespace.createNewType(
|
|
50
|
+
"Name",
|
|
51
|
+
DDataStructure.string(),
|
|
52
|
+
[
|
|
53
|
+
DDataStructure.trimmed(),
|
|
54
|
+
DDataStructure.minCharacters(3),
|
|
55
|
+
DDataStructure.maxCharacters(45),
|
|
56
|
+
],
|
|
57
|
+
);
|
|
58
|
+
export type Name = DDataStructure.StructureValue<typeof Name>;
|
|
59
|
+
type _CheckName = DCommon.ExpectType<
|
|
60
|
+
Name,
|
|
61
|
+
string & DModeling.NewType<"UserName", DString.Trimmed | DString.MinCharacters<3> | DString.MaxCharacters<45>>,
|
|
62
|
+
"strict"
|
|
63
|
+
>;
|
|
64
|
+
|
|
65
|
+
export const Tag = namespace.createNewType(
|
|
66
|
+
"Tag",
|
|
67
|
+
DDataStructure.string(),
|
|
68
|
+
[
|
|
69
|
+
DDataStructure.trimmed(),
|
|
70
|
+
DDataStructure.minCharacters(2),
|
|
71
|
+
DDataStructure.maxCharacters(20),
|
|
72
|
+
],
|
|
73
|
+
);
|
|
74
|
+
export type Tag = DDataStructure.StructureValue<typeof Tag>;
|
|
75
|
+
type _CheckTag = DCommon.ExpectType<Tag, string & DModeling.NewType<"UserTag", DString.Trimmed | DString.MinCharacters<2> | DString.MaxCharacters<20>>, "strict">;
|
|
76
|
+
|
|
77
|
+
// L'entité est ensuite déclarée à partir de ses différentes propriétés.
|
|
78
|
+
//
|
|
79
|
+
export const Entity = namespace.createEntity(
|
|
80
|
+
() => ({
|
|
81
|
+
id: Id,
|
|
82
|
+
age: Age,
|
|
83
|
+
name: Name,
|
|
84
|
+
tags: DDataStructure.array(Tag),
|
|
85
|
+
}),
|
|
86
|
+
);
|
|
87
|
+
export type Entity = DDataStructure.StructureValue<typeof Entity>;
|
|
88
|
+
type _CheckEntity = DCommon.ExpectType<Entity, DModeling.Entity<"User"> & {
|
|
89
|
+
readonly id: Id;
|
|
90
|
+
readonly age: Age;
|
|
91
|
+
readonly name: Name;
|
|
92
|
+
readonly tags: readonly Tag[];
|
|
93
|
+
}, "strict">;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// L’hydratation fait entrer dans le modèle métier des données de repository ou de base de données.
|
|
97
|
+
// Une donnée provenant d’un système externe possède généralement un typage
|
|
98
|
+
// amoindri par rapport au modèle métier.
|
|
99
|
+
//
|
|
100
|
+
// Les contraintes et les `NewType` ne sont plus présents, mais les types
|
|
101
|
+
// primitifs restent connus.
|
|
102
|
+
//
|
|
103
|
+
// `map` permet d'hydrater l'entité depuis cette représentation.
|
|
104
|
+
//
|
|
105
|
+
// Les contraintes sont vérifiées pendant cette opération.
|
|
106
|
+
// Le mapping pouvant échouer, son résultat est représenté par un `Either`.
|
|
107
|
+
|
|
108
|
+
const maybeMapUser = User.Entity.map({
|
|
109
|
+
id: "invalid-id",
|
|
110
|
+
name: "SuperName",
|
|
111
|
+
age: 12,
|
|
112
|
+
tags: ["superTag"],
|
|
113
|
+
});
|
|
114
|
+
type _CheckMaybeMapUser = DCommon.ExpectType<typeof maybeMapUser, DEither.Left<"async-error", DDataStructure.ErrorPromise> | DEither.Left<"map-error", DDataStructure.Error> | DEither.Right<"map-success", User.Entity>, "strict">;
|
|
115
|
+
|
|
116
|
+
// `decodeMap` applique le même principe à une donnée encodée.
|
|
117
|
+
//
|
|
118
|
+
// La représentation demandée en entrée dépend des codecs utilisés.
|
|
119
|
+
// Avec `codecsString`, les types fondamentaux qui possèdent une représentation
|
|
120
|
+
// string sont attendus sous cette forme.
|
|
121
|
+
//
|
|
122
|
+
// L'âge de l'entité est donc ici fourni dans sa représentation encodée
|
|
123
|
+
// plutôt que directement comme un `number`.
|
|
124
|
+
|
|
125
|
+
const maybeDecodeMapUser = User.Entity.decodeMap(DDataStructure.codecsString, {
|
|
126
|
+
id: "550e8400-e29b-41d4-a716-446655440000",
|
|
127
|
+
name: "SuperName",
|
|
128
|
+
age: DCommon.cast("12"),
|
|
129
|
+
tags: ["superTag"],
|
|
130
|
+
});
|
|
131
|
+
type _CheckMaybeDecodeMapUser = DCommon.ExpectType<typeof maybeDecodeMapUser, DEither.Left<"async-error", DDataStructure.ErrorPromise> | DEither.Left<"map-error", DDataStructure.Error> | DEither.Right<"map-success", User.Entity>, "strict">;
|
|
132
|
+
|
|
133
|
+
// `new` est utilisé lorsque les propriétés possèdent déjà leur typage métier.
|
|
134
|
+
//
|
|
135
|
+
// Ici, chaque `NewType` est d'abord hydraté individuellement avec `map`.
|
|
136
|
+
// `DEither.group` regroupe ensuite les différentes opérations avant de fournir
|
|
137
|
+
// leurs valeurs à `User.Entity.new`.
|
|
138
|
+
//
|
|
139
|
+
// `new` n'effectue donc pas lui-même le mapping des propriétés.
|
|
140
|
+
// Il construit l'entité à partir de valeurs déjà correctement typées.
|
|
141
|
+
//
|
|
142
|
+
// Le résultat du `rightPipe` conserve la monade `Success` produite après
|
|
143
|
+
// regroupement des différentes validations.
|
|
144
|
+
|
|
145
|
+
const maybeUser = DEither.rightPipe(
|
|
146
|
+
DEither.group({
|
|
147
|
+
id: User.Id.map("550e8400-e29b-41d4-a716-446655440000"),
|
|
148
|
+
name: User.Name.map("SuperName"),
|
|
149
|
+
age: User.Age.map(24),
|
|
150
|
+
tags: DEither.rightPipe(
|
|
151
|
+
User.Tag.map("superTag"),
|
|
152
|
+
DArray.coalescing,
|
|
153
|
+
),
|
|
154
|
+
}),
|
|
155
|
+
User.Entity.new,
|
|
156
|
+
);
|
|
157
|
+
type _CheckMaybeUser = DCommon.ExpectType<typeof maybeUser, DEither.Left<"async-error", DDataStructure.ErrorPromise> | DEither.Left<"map-error", DDataStructure.Error> | DEither.Success<DModeling.Entity<"User"> & {
|
|
158
|
+
readonly id: User.Id;
|
|
159
|
+
readonly name: User.Name;
|
|
160
|
+
readonly age: User.Age;
|
|
161
|
+
readonly tags: readonly [User.Tag];
|
|
162
|
+
}>, "strict">;
|
|
163
|
+
|
|
164
|
+
declare const user: User.Entity;
|
|
165
|
+
declare const maybeAge: User.Age | undefined;
|
|
166
|
+
|
|
167
|
+
const updatedUser = User.Entity.update(
|
|
168
|
+
user,
|
|
169
|
+
{
|
|
170
|
+
age: maybeAge,
|
|
171
|
+
},
|
|
172
|
+
);
|
|
173
|
+
type _CheckUpdatedUser = DCommon.ExpectType<typeof updatedUser, User.Entity, "strict">;
|
|
174
|
+
|
|
175
|
+
// `update` retourne une nouvelle entité en remplaçant uniquement
|
|
176
|
+
// les propriétés dont la nouvelle valeur n'est pas `undefined`.
|
|
177
|
+
//
|
|
178
|
+
// Contrairement à un spread classique, une valeur `undefined`
|
|
179
|
+
// n'écrase donc pas la valeur déjà présente sur l'entité.
|
|
180
|
+
//
|
|
181
|
+
// Si `maybeAge` vaut `undefined`, `user.age` est conservé.
|
|
182
|
+
// Sinon, sa valeur remplace l'âge existant.
|
|
183
|
+
//
|
|
184
|
+
// Les nouvelles valeurs ne sont pas validées par `update` :
|
|
185
|
+
// elles doivent déjà posséder le typage métier attendu.
|
|
186
|
+
|
|
187
|
+
// `map` et `decodeMap` existent aussi sur les `NewType`.
|
|
188
|
+
// Ces opérations ne sont donc pas spécifiques aux entités.
|
|
189
|
+
//
|
|
190
|
+
// Les variantes `asyncMap` et `asyncDecodeMap` permettent la même hydratation
|
|
191
|
+
// lorsque la structure contient des traitements asynchrones.
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Objets taggés et unions discriminées.
|
|
3
|
+
*
|
|
4
|
+
* Identité transportable, distinction des formes d’un objet et hydratation des données brutes.
|
|
5
|
+
*/
|
|
6
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
7
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
8
|
+
import * as DModeling from "@duplojs/lang/modeling";
|
|
9
|
+
import * as DPattern from "@duplojs/lang/pattern";
|
|
10
|
+
import * as DEither from "@duplojs/lang/either";
|
|
11
|
+
|
|
12
|
+
// Sans `TaggedObject`, une union discriminée serait généralement construite
|
|
13
|
+
// en ajoutant soi-même une propriété comme `type` ou `kind`.
|
|
14
|
+
//
|
|
15
|
+
// `createTaggedObject` normalise cette identité.
|
|
16
|
+
// Le code métier n'a pas à choisir ni à manipuler la clé utilisée pour
|
|
17
|
+
// enregistrer le tag.
|
|
18
|
+
//
|
|
19
|
+
const EmailNotification = DModeling.createTaggedObject(
|
|
20
|
+
"EmailNotification",
|
|
21
|
+
{
|
|
22
|
+
email: DDataStructure.string(),
|
|
23
|
+
subject: DDataStructure.string(),
|
|
24
|
+
},
|
|
25
|
+
);
|
|
26
|
+
type EmailNotification = DDataStructure.StructureValue<typeof EmailNotification>;
|
|
27
|
+
type _CheckEmailNotification = DCommon.ExpectType<
|
|
28
|
+
EmailNotification,
|
|
29
|
+
DModeling.ObjectTag<"EmailNotification"> & {
|
|
30
|
+
readonly email: string;
|
|
31
|
+
readonly subject: string;
|
|
32
|
+
},
|
|
33
|
+
"strict"
|
|
34
|
+
>;
|
|
35
|
+
|
|
36
|
+
// Les propriétés peuvent être définies directement avec des `DataStructure`.
|
|
37
|
+
//
|
|
38
|
+
// Contrairement à une `Entity`, un `TaggedObject` n'impose pas que ses
|
|
39
|
+
// propriétés soient des `NewType`.
|
|
40
|
+
//
|
|
41
|
+
const SmsNotification = DModeling.createTaggedObject(
|
|
42
|
+
"SmsNotification",
|
|
43
|
+
{
|
|
44
|
+
phone: DDataStructure.string(),
|
|
45
|
+
message: DDataStructure.string(),
|
|
46
|
+
attempts: DDataStructure.number(),
|
|
47
|
+
},
|
|
48
|
+
);
|
|
49
|
+
type SmsNotification = DDataStructure.StructureValue<typeof SmsNotification>;
|
|
50
|
+
type _CheckSmsNotification = DCommon.ExpectType<SmsNotification, DModeling.ObjectTag<"SmsNotification"> & {
|
|
51
|
+
readonly phone: string;
|
|
52
|
+
readonly message: string;
|
|
53
|
+
readonly attempts: number;
|
|
54
|
+
}, "strict">;
|
|
55
|
+
|
|
56
|
+
// Plusieurs `TaggedObject` peuvent former une union discriminée.
|
|
57
|
+
//
|
|
58
|
+
// Leur identité permet de retrouver précisément la forme correspondante
|
|
59
|
+
// sans ajouter manuellement une propriété discriminante au modèle.
|
|
60
|
+
type Notification =
|
|
61
|
+
| EmailNotification
|
|
62
|
+
| SmsNotification;
|
|
63
|
+
|
|
64
|
+
declare const notification: Notification;
|
|
65
|
+
|
|
66
|
+
// `matchWithTaggedObject` discrimine directement l'union à partir du tag.
|
|
67
|
+
//
|
|
68
|
+
// Chaque callback reçoit la forme exacte associée à son identité.
|
|
69
|
+
const destination = DPattern.matchWithTaggedObject(
|
|
70
|
+
notification,
|
|
71
|
+
{
|
|
72
|
+
EmailNotification: (emailNotification) => emailNotification.email,
|
|
73
|
+
SmsNotification: (smsNotification) => smsNotification.phone,
|
|
74
|
+
},
|
|
75
|
+
);
|
|
76
|
+
type _CheckDestination = DCommon.ExpectType<typeof destination, string, "strict">;
|
|
77
|
+
|
|
78
|
+
// L'identité peut également être récupérée directement.
|
|
79
|
+
//
|
|
80
|
+
const notificationType = DModeling.getTagValue(notification);
|
|
81
|
+
type _CheckNotificationType = DCommon.ExpectType<
|
|
82
|
+
typeof notificationType,
|
|
83
|
+
"EmailNotification" | "SmsNotification",
|
|
84
|
+
"strict"
|
|
85
|
+
>;
|
|
86
|
+
|
|
87
|
+
// `hasTagValue` permet de tester une identité et affine simultanément
|
|
88
|
+
// le type de la valeur.
|
|
89
|
+
//
|
|
90
|
+
// Dans cette branche, `notification` est précisément un `EmailNotification`.
|
|
91
|
+
if (DModeling.hasTagValue(notification, "EmailNotification")) {
|
|
92
|
+
type _CheckEmailBranch = DCommon.ExpectType<typeof notification, EmailNotification, "strict">;
|
|
93
|
+
const subject = notification.subject;
|
|
94
|
+
type _CheckSubject = DCommon.ExpectType<typeof subject, string, "strict">;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// `new` est utilisé lorsque les propriétés possèdent déjà le typage attendu.
|
|
98
|
+
//
|
|
99
|
+
// Il construit le `TaggedObject` et lui associe son identité.
|
|
100
|
+
//
|
|
101
|
+
const emailNotification = EmailNotification.new({
|
|
102
|
+
email: "user@example.com",
|
|
103
|
+
subject: "Account created",
|
|
104
|
+
});
|
|
105
|
+
type _CheckEmailNotificationValue = DCommon.ExpectType<typeof emailNotification, EmailNotification, "strict">;
|
|
106
|
+
|
|
107
|
+
// L'identité fait partie de la structure du `TaggedObject`.
|
|
108
|
+
//
|
|
109
|
+
// Les opérations génériques comme `check`, `is`, `encode` ou `decode`
|
|
110
|
+
// travaillent donc avec une valeur qui possède déjà cette identité.
|
|
111
|
+
//
|
|
112
|
+
// Une donnée brute provenant d'une base de données, d'une API externe
|
|
113
|
+
// ou d'un autre système ne la possède généralement pas encore.
|
|
114
|
+
declare const externalEmailNotification: {
|
|
115
|
+
email: string;
|
|
116
|
+
subject: string;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// `map` sert à hydrater cette donnée lorsqu'elle entre dans le domaine.
|
|
120
|
+
//
|
|
121
|
+
// Le mapping ajoute l'identité du `TaggedObject`, vérifie sa structure
|
|
122
|
+
// et ses contraintes, puis retourne la valeur correctement typée.
|
|
123
|
+
//
|
|
124
|
+
// Le type demandé en entrée est volontairement moins précis que le type
|
|
125
|
+
// métier final afin de représenter les données provenant de systèmes externes.
|
|
126
|
+
//
|
|
127
|
+
// L'hydratation peut échouer, son résultat est donc représenté par un `Either`.
|
|
128
|
+
|
|
129
|
+
const maybeEmailNotification = EmailNotification.map(
|
|
130
|
+
externalEmailNotification,
|
|
131
|
+
);
|
|
132
|
+
type _CheckMaybeEmailNotificationLine121 = DCommon.ExpectType<
|
|
133
|
+
typeof maybeEmailNotification,
|
|
134
|
+
DEither.Left<"async-error", DDataStructure.ErrorPromise>
|
|
135
|
+
| DEither.Left<"map-error", DDataStructure.Error>
|
|
136
|
+
| DEither.Right<"map-success", EmailNotification>,
|
|
137
|
+
"strict"
|
|
138
|
+
>;
|
|
139
|
+
|
|
140
|
+
// Une fois hydraté, le tag fait partie de la donnée.
|
|
141
|
+
//
|
|
142
|
+
// Si ce `TaggedObject` est ensuite sérialisé et transporté vers un autre
|
|
143
|
+
// consommateur, son identité est conservée.
|
|
144
|
+
// Il n'a donc pas besoin d'être hydraté une seconde fois simplement
|
|
145
|
+
// parce qu'il traverse une frontière entre deux services.
|
|
146
|
+
//
|
|
147
|
+
const mappedEmailNotification = DCommon.pipe(
|
|
148
|
+
EmailNotification.map({
|
|
149
|
+
email: "user@example.com",
|
|
150
|
+
subject: "Account created",
|
|
151
|
+
}),
|
|
152
|
+
DEither.unwrapRight,
|
|
153
|
+
);
|
|
154
|
+
type _CheckMappedEmailNotification = DCommon.ExpectType<
|
|
155
|
+
typeof mappedEmailNotification,
|
|
156
|
+
DEither.Left<"async-error", DDataStructure.ErrorPromise>
|
|
157
|
+
| DEither.Left<"map-error", DDataStructure.Error>
|
|
158
|
+
| DModeling.ObjectTag<"EmailNotification"> & {
|
|
159
|
+
readonly email: string;
|
|
160
|
+
readonly subject: string;
|
|
161
|
+
},
|
|
162
|
+
"strict"
|
|
163
|
+
>;
|
|
164
|
+
|
|
165
|
+
// `decodeMap` suit le même principe que `map`, mais commence par décoder
|
|
166
|
+
// la représentation externe avec les codecs fournis.
|
|
167
|
+
//
|
|
168
|
+
// Ici, `attempts` provient par exemple d'une représentation string avant
|
|
169
|
+
// de retrouver son type métier `number`.
|
|
170
|
+
|
|
171
|
+
const maybeSmsNotification = SmsNotification.decodeMap(
|
|
172
|
+
DDataStructure.codecsString,
|
|
173
|
+
{
|
|
174
|
+
phone: "+33600000000",
|
|
175
|
+
message: "Account created",
|
|
176
|
+
attempts: DCommon.cast("1"),
|
|
177
|
+
},
|
|
178
|
+
);
|
|
179
|
+
type _CheckMaybeSmsNotificationLine155 = DCommon.ExpectType<
|
|
180
|
+
typeof maybeSmsNotification,
|
|
181
|
+
DEither.Left<"async-error", DDataStructure.ErrorPromise>
|
|
182
|
+
| DEither.Left<"map-error", DDataStructure.Error>
|
|
183
|
+
| DEither.Right<"map-success", SmsNotification>,
|
|
184
|
+
"strict"
|
|
185
|
+
>;
|
|
186
|
+
|
|
187
|
+
// `update` reconstruit un `TaggedObject` possédant la même identité
|
|
188
|
+
// en remplaçant uniquement les propriétés fournies.
|
|
189
|
+
//
|
|
190
|
+
// Comme pour les autres structures de modeling, `undefined` ne remplace
|
|
191
|
+
// pas une propriété déjà présente.
|
|
192
|
+
const updatedSmsNotification = SmsNotification.update(
|
|
193
|
+
SmsNotification.new({
|
|
194
|
+
phone: "+33600000000",
|
|
195
|
+
message: "Account created",
|
|
196
|
+
attempts: 1,
|
|
197
|
+
}),
|
|
198
|
+
{
|
|
199
|
+
attempts: 2,
|
|
200
|
+
},
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
// Les variantes `asyncMap` et `asyncDecodeMap` permettent la même
|
|
204
|
+
// hydratation lorsqu'une structure contient des traitements asynchrones.
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Cycle de vie des entités.
|
|
3
|
+
*
|
|
4
|
+
* États, préconditions et transitions métier représentés par des Flag et des Fact.
|
|
5
|
+
*/
|
|
6
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
7
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
8
|
+
import * as DModeling from "@duplojs/lang/modeling";
|
|
9
|
+
import * as DChrono from "@duplojs/lang/chrono";
|
|
10
|
+
import * as DPattern from "@duplojs/lang/pattern";
|
|
11
|
+
import * as DEither from "@duplojs/lang/either";
|
|
12
|
+
|
|
13
|
+
// Le modèle et les signatures expriment les états possibles, leurs preuves et les événements
|
|
14
|
+
// qui font évoluer l’entité. Les préconditions deviennent des exigences de typage.
|
|
15
|
+
export namespace User {
|
|
16
|
+
const namespace = DModeling.createEntityNamespace("User");
|
|
17
|
+
|
|
18
|
+
export const Id = namespace.createNewType(
|
|
19
|
+
"Id",
|
|
20
|
+
DDataStructure.string(),
|
|
21
|
+
[DDataStructure.uuid()],
|
|
22
|
+
);
|
|
23
|
+
export type Id = DDataStructure.StructureValue<typeof Id>;
|
|
24
|
+
|
|
25
|
+
export const Age = namespace.createNewType(
|
|
26
|
+
"Age",
|
|
27
|
+
DDataStructure.number(),
|
|
28
|
+
[
|
|
29
|
+
DDataStructure.integer(),
|
|
30
|
+
DDataStructure.positive(),
|
|
31
|
+
],
|
|
32
|
+
);
|
|
33
|
+
export type Age = DDataStructure.StructureValue<typeof Age>;
|
|
34
|
+
|
|
35
|
+
export const Name = namespace.createNewType(
|
|
36
|
+
"Name",
|
|
37
|
+
DDataStructure.string(),
|
|
38
|
+
[
|
|
39
|
+
DDataStructure.trimmed(),
|
|
40
|
+
DDataStructure.minCharacters(3),
|
|
41
|
+
DDataStructure.maxCharacters(45),
|
|
42
|
+
],
|
|
43
|
+
);
|
|
44
|
+
export type Name = DDataStructure.StructureValue<typeof Name>;
|
|
45
|
+
|
|
46
|
+
// Les `TaggedObject` décrivent les propriétés propres à chaque état.
|
|
47
|
+
// Leur tag permet de discriminer ces formes ; leur fonctionnement est détaillé
|
|
48
|
+
// dans le concept consacré aux objets taggés.
|
|
49
|
+
export const AwaitingValidationState = DModeling.createTaggedObject(
|
|
50
|
+
"AwaitingValidationState",
|
|
51
|
+
{
|
|
52
|
+
sendValidationAt: DDataStructure.date(),
|
|
53
|
+
},
|
|
54
|
+
);
|
|
55
|
+
export type AwaitingValidationState = DDataStructure.StructureValue<typeof AwaitingValidationState>;
|
|
56
|
+
|
|
57
|
+
export const Address = namespace.createNewType("Address", DDataStructure.string());
|
|
58
|
+
export type Address = DDataStructure.StructureValue<typeof Address>;
|
|
59
|
+
|
|
60
|
+
export const ValidateState = DModeling.createTaggedObject(
|
|
61
|
+
"ValidateState",
|
|
62
|
+
{
|
|
63
|
+
address: Address,
|
|
64
|
+
validateAt: DDataStructure.date(),
|
|
65
|
+
},
|
|
66
|
+
);
|
|
67
|
+
export type ValidateState = DDataStructure.StructureValue<typeof ValidateState>;
|
|
68
|
+
|
|
69
|
+
// La shape de l'entité reste fixe pendant son cycle de vie.
|
|
70
|
+
// Les propriétés dont la forme varie sont modélisées par des unions : ici,
|
|
71
|
+
// `state` contient soit `AwaitingValidationState`, soit `ValidateState`.
|
|
72
|
+
export const Entity = namespace.createEntity(
|
|
73
|
+
() => ({
|
|
74
|
+
id: Id,
|
|
75
|
+
age: Age,
|
|
76
|
+
name: Name,
|
|
77
|
+
state: DDataStructure.union([
|
|
78
|
+
AwaitingValidationState,
|
|
79
|
+
ValidateState,
|
|
80
|
+
]),
|
|
81
|
+
}),
|
|
82
|
+
);
|
|
83
|
+
export type Entity = DDataStructure.StructureValue<typeof Entity>;
|
|
84
|
+
|
|
85
|
+
// Un `Flag` certifie une condition sur l'entité actuelle : état, capacité ou relation.
|
|
86
|
+
// Plusieurs flags compatibles peuvent coexister, indépendamment des variantes de `state`.
|
|
87
|
+
// Ici, chacun porte au runtime la payload de l'état qu'il certifie.
|
|
88
|
+
// Une fonction exigeant `User.Entity & User.AwaitingValidationFlag` reçoit ainsi
|
|
89
|
+
// une entité dont l'état d'attente est prouvé, avec son `AwaitingValidationState`.
|
|
90
|
+
// Déclarer d'abord la factory avec le nom, la payload et la structure d'entité,
|
|
91
|
+
// puis en dériver le type avec `GetFlag`.
|
|
92
|
+
export const AwaitingValidationFlag = DModeling.createFlag<
|
|
93
|
+
"AwaitingValidation",
|
|
94
|
+
AwaitingValidationState,
|
|
95
|
+
typeof Entity
|
|
96
|
+
>("AwaitingValidation");
|
|
97
|
+
export type AwaitingValidationFlag = DModeling.GetFlag<typeof AwaitingValidationFlag>;
|
|
98
|
+
|
|
99
|
+
export const ValidateFlag = DModeling.createFlag<
|
|
100
|
+
"Validate",
|
|
101
|
+
ValidateState,
|
|
102
|
+
typeof Entity
|
|
103
|
+
>("Validate");
|
|
104
|
+
export type ValidateFlag = DModeling.GetFlag<typeof ValidateFlag>;
|
|
105
|
+
|
|
106
|
+
// Après hydratation, `state` reste typé comme l'union des états possibles.
|
|
107
|
+
// `refineState` inspecte sa valeur et ajoute le flag correspondant sans modifier
|
|
108
|
+
// les propriétés métier. Chaque branche retourne un Result : elle constate l'état,
|
|
109
|
+
// sans décider si celui-ci autorise l'opération envisagée par l'appelant.
|
|
110
|
+
export function refineState<
|
|
111
|
+
GenericEntity extends Entity,
|
|
112
|
+
>(entity: GenericEntity) {
|
|
113
|
+
return DPattern.matchWithTaggedObject(
|
|
114
|
+
entity.state,
|
|
115
|
+
{
|
|
116
|
+
AwaitingValidationState: (state) => DEither.result(
|
|
117
|
+
"AwaitingValidation",
|
|
118
|
+
AwaitingValidationFlag.append(entity, state),
|
|
119
|
+
),
|
|
120
|
+
ValidateState: (state) => DEither.result(
|
|
121
|
+
"Validate",
|
|
122
|
+
ValidateFlag.append(entity, state),
|
|
123
|
+
),
|
|
124
|
+
},
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Une `Fact` représente une création ou une modification métier de l'entité,
|
|
130
|
+
// y compris un changement de propriété qui conserve le même état nommé.
|
|
131
|
+
// Sa payload décrit l'événement et reste portée par l'entité après application du fait.
|
|
132
|
+
// Ici, la création place toujours l'utilisateur en attente de validation.
|
|
133
|
+
// `createFact` reçoit les mêmes trois génériques que `createFlag`, puis construit `run`
|
|
134
|
+
// dans un second appel. `GetFact` extrait le type du fait depuis cette factory.
|
|
135
|
+
export const UserCreateFact = DModeling.createFact<
|
|
136
|
+
"UserCreated",
|
|
137
|
+
{
|
|
138
|
+
id: User.Id;
|
|
139
|
+
age: User.Age;
|
|
140
|
+
name: User.Name;
|
|
141
|
+
state: User.AwaitingValidationState;
|
|
142
|
+
},
|
|
143
|
+
typeof User.Entity
|
|
144
|
+
>("UserCreated")(
|
|
145
|
+
({ applyFact }) => (
|
|
146
|
+
params: {
|
|
147
|
+
id: User.Id;
|
|
148
|
+
age: User.Age;
|
|
149
|
+
name: User.Name;
|
|
150
|
+
},
|
|
151
|
+
) => {
|
|
152
|
+
// La payload décrit complètement le fait qui vient de se produire.
|
|
153
|
+
//
|
|
154
|
+
// Elle contient notamment l'état produit par cette étape du cycle de vie,
|
|
155
|
+
// ce qui permet de conserver cette information avec la `Fact`.
|
|
156
|
+
const payload = {
|
|
157
|
+
id: params.id,
|
|
158
|
+
age: params.age,
|
|
159
|
+
name: params.name,
|
|
160
|
+
state: User.AwaitingValidationState.new({
|
|
161
|
+
sendValidationAt: DChrono.now(),
|
|
162
|
+
}),
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
// La création exprime plusieurs propriétés métier en une seule opération :
|
|
166
|
+
//
|
|
167
|
+
// - l'entité est créée avec `AwaitingValidationState` ;
|
|
168
|
+
// - le `AwaitingValidationFlag` prouve immédiatement cet état ;
|
|
169
|
+
// - `UserCreated` est apposée comme fait courant sur l'entité.
|
|
170
|
+
return DCommon.pipe(
|
|
171
|
+
payload,
|
|
172
|
+
User.Entity.new,
|
|
173
|
+
User.AwaitingValidationFlag.append(payload.state),
|
|
174
|
+
applyFact(payload),
|
|
175
|
+
);
|
|
176
|
+
},
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
export type UserCreateFact = DModeling.GetFact<typeof UserCreateFact>;
|
|
180
|
+
|
|
181
|
+
// Cette `Fact` représente la transition entre l'attente de validation
|
|
182
|
+
// et l'état validé.
|
|
183
|
+
//
|
|
184
|
+
// Sa signature fait elle-même partie de la règle métier :
|
|
185
|
+
// seules les entités possédant `AwaitingValidationFlag` peuvent effectuer
|
|
186
|
+
// cette transition.
|
|
187
|
+
export const ValidateUserFact = DModeling.createFact<
|
|
188
|
+
"ValidateUserFact",
|
|
189
|
+
{
|
|
190
|
+
state: User.ValidateState;
|
|
191
|
+
},
|
|
192
|
+
typeof User.Entity
|
|
193
|
+
>("ValidateUserFact")(
|
|
194
|
+
({ applyFact }) => (
|
|
195
|
+
user: User.Entity & User.AwaitingValidationFlag,
|
|
196
|
+
params: {
|
|
197
|
+
address: User.Address;
|
|
198
|
+
},
|
|
199
|
+
) => {
|
|
200
|
+
// Le nouvel état appartient à la payload du fait.
|
|
201
|
+
//
|
|
202
|
+
// Le fait `ValidateUserFact` conserve donc également les informations
|
|
203
|
+
// produites lors de cette transition.
|
|
204
|
+
const payload = {
|
|
205
|
+
state: User.ValidateState.new({
|
|
206
|
+
address: params.address,
|
|
207
|
+
validateAt: DChrono.now(),
|
|
208
|
+
}),
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
// `Entity.update` reconstruit l'entité à partir de sa shape déclarée.
|
|
212
|
+
//
|
|
213
|
+
// Les anciens `Flag` et la précédente `Fact` ne sont donc pas conservés.
|
|
214
|
+
// La transition repart de l'entité dans son nouvel état, puis :
|
|
215
|
+
//
|
|
216
|
+
// - ajoute `ValidateFlag` pour prouver ce nouvel état ;
|
|
217
|
+
// - applique `ValidateUserFact` comme nouveau fait courant.
|
|
218
|
+
return DCommon.pipe(
|
|
219
|
+
user,
|
|
220
|
+
User.Entity.update({ state: payload.state }),
|
|
221
|
+
User.ValidateFlag.append(payload.state),
|
|
222
|
+
applyFact(payload),
|
|
223
|
+
);
|
|
224
|
+
},
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
export type ValidateUserFact = DModeling.GetFact<typeof ValidateUserFact>;
|
|
228
|
+
|
|
229
|
+
declare const id: User.Id;
|
|
230
|
+
declare const age: User.Age;
|
|
231
|
+
declare const name: User.Name;
|
|
232
|
+
|
|
233
|
+
const createdUser = DCommon.pipe(
|
|
234
|
+
UserCreateFact.run({
|
|
235
|
+
id,
|
|
236
|
+
age,
|
|
237
|
+
name,
|
|
238
|
+
}),
|
|
239
|
+
DEither.unwrapRight,
|
|
240
|
+
);
|
|
241
|
+
type _CheckCreatedUser = DCommon.ExpectType<
|
|
242
|
+
typeof createdUser.state,
|
|
243
|
+
User.AwaitingValidationState,
|
|
244
|
+
"strict"
|
|
245
|
+
>;
|
|
246
|
+
|
|
247
|
+
declare const address: User.Address;
|
|
248
|
+
|
|
249
|
+
// Le type de `createdUser` prouve qu'il possède
|
|
250
|
+
// `AwaitingValidationFlag`.
|
|
251
|
+
//
|
|
252
|
+
// Cette preuve satisfait directement la précondition de `ValidateUserFact`.
|
|
253
|
+
// Aucun contrôle supplémentaire de l'état n'est nécessaire ici.
|
|
254
|
+
|
|
255
|
+
// Après la transition :
|
|
256
|
+
// - `state` est précisément `ValidateState` ;
|
|
257
|
+
// - `AwaitingValidationFlag` a disparu ;
|
|
258
|
+
// - `ValidateFlag` prouve le nouvel état ;
|
|
259
|
+
// - `UserCreated` a été remplacée par `ValidateUserFact`.
|
|
260
|
+
//
|
|
261
|
+
const validateUser = DCommon.pipe(
|
|
262
|
+
ValidateUserFact.run(
|
|
263
|
+
createdUser,
|
|
264
|
+
{ address },
|
|
265
|
+
),
|
|
266
|
+
DEither.unwrapRight,
|
|
267
|
+
);
|
|
268
|
+
type _CheckValidatedUser = DCommon.ExpectType<
|
|
269
|
+
typeof validateUser.state,
|
|
270
|
+
User.ValidateState,
|
|
271
|
+
"strict"
|
|
272
|
+
>;
|