@bgord/tools 1.4.7 → 1.4.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/dist/age-years.vo.d.ts +12 -0
- package/dist/age-years.vo.d.ts.map +1 -0
- package/dist/age-years.vo.js +7 -0
- package/dist/age-years.vo.js.map +1 -0
- package/dist/age.vo.d.ts +29 -0
- package/dist/age.vo.d.ts.map +1 -0
- package/dist/age.vo.js +52 -0
- package/dist/age.vo.js.map +1 -0
- package/dist/api-key.vo.d.ts +8 -0
- package/dist/api-key.vo.d.ts.map +1 -0
- package/dist/api-key.vo.js +8 -0
- package/dist/api-key.vo.js.map +1 -0
- package/dist/basename.vo.d.ts +13 -0
- package/dist/basename.vo.d.ts.map +1 -0
- package/dist/basename.vo.js +23 -0
- package/dist/basename.vo.js.map +1 -0
- package/dist/batch.d.ts +3 -0
- package/dist/batch.d.ts.map +1 -0
- package/dist/batch.js +4 -0
- package/dist/batch.js.map +1 -0
- package/dist/date-calculator.service.d.ts +11 -0
- package/dist/date-calculator.service.d.ts.map +1 -0
- package/dist/date-calculator.service.js +13 -0
- package/dist/date-calculator.service.js.map +1 -0
- package/dist/date-formatter.service.d.ts +10 -0
- package/dist/date-formatter.service.d.ts.map +1 -0
- package/dist/date-formatter.service.js +16 -0
- package/dist/date-formatter.service.js.map +1 -0
- package/dist/date-range.vo.d.ts +22 -0
- package/dist/date-range.vo.d.ts.map +1 -0
- package/dist/date-range.vo.js +36 -0
- package/dist/date-range.vo.js.map +1 -0
- package/dist/day-iso-id.vo.d.ts +10 -0
- package/dist/day-iso-id.vo.d.ts.map +1 -0
- package/dist/day-iso-id.vo.js +13 -0
- package/dist/day-iso-id.vo.js.map +1 -0
- package/dist/day.vo.d.ts +17 -0
- package/dist/day.vo.d.ts.map +1 -0
- package/dist/day.vo.js +44 -0
- package/dist/day.vo.js.map +1 -0
- package/dist/directory-path-absolute.vo.d.ts +13 -0
- package/dist/directory-path-absolute.vo.d.ts.map +1 -0
- package/dist/directory-path-absolute.vo.js +21 -0
- package/dist/directory-path-absolute.vo.js.map +1 -0
- package/dist/directory-path-relative.vo.d.ts +13 -0
- package/dist/directory-path-relative.vo.d.ts.map +1 -0
- package/dist/directory-path-relative.vo.js +18 -0
- package/dist/directory-path-relative.vo.js.map +1 -0
- package/dist/distance-value.vo.d.ts +8 -0
- package/dist/distance-value.vo.d.ts.map +1 -0
- package/dist/distance-value.vo.js +6 -0
- package/dist/distance-value.vo.js.map +1 -0
- package/dist/distance.vo.d.ts +24 -0
- package/dist/distance.vo.d.ts.map +1 -0
- package/dist/distance.vo.js +54 -0
- package/dist/distance.vo.js.map +1 -0
- package/dist/division-factor.vo.d.ts +8 -0
- package/dist/division-factor.vo.d.ts.map +1 -0
- package/dist/division-factor.vo.js +6 -0
- package/dist/division-factor.vo.js.map +1 -0
- package/dist/dll.service.d.ts +30 -0
- package/dist/dll.service.d.ts.map +1 -0
- package/dist/dll.service.js +149 -0
- package/dist/dll.service.js.map +1 -0
- package/dist/duration-ms.vo.d.ts +7 -0
- package/dist/duration-ms.vo.d.ts.map +1 -0
- package/dist/duration-ms.vo.js +6 -0
- package/dist/duration-ms.vo.js.map +1 -0
- package/dist/duration.service.d.ts +38 -0
- package/dist/duration.service.d.ts.map +1 -0
- package/dist/duration.service.js +88 -0
- package/dist/duration.service.js.map +1 -0
- package/dist/email-mask.service.d.ts +5 -0
- package/dist/email-mask.service.d.ts.map +1 -0
- package/dist/email-mask.service.js +13 -0
- package/dist/email-mask.service.js.map +1 -0
- package/dist/email.vo.d.ts +7 -0
- package/dist/email.vo.d.ts.map +1 -0
- package/dist/email.vo.js +5 -0
- package/dist/email.vo.js.map +1 -0
- package/dist/etags.vo.d.ts +24 -0
- package/dist/etags.vo.d.ts.map +1 -0
- package/dist/etags.vo.js +38 -0
- package/dist/etags.vo.js.map +1 -0
- package/dist/extension.vo.d.ts +10 -0
- package/dist/extension.vo.d.ts.map +1 -0
- package/dist/extension.vo.js +16 -0
- package/dist/extension.vo.js.map +1 -0
- package/dist/feature-flag-value.vo.d.ts +11 -0
- package/dist/feature-flag-value.vo.d.ts.map +1 -0
- package/dist/feature-flag-value.vo.js +9 -0
- package/dist/feature-flag-value.vo.js.map +1 -0
- package/dist/feature-flag.vo.d.ts +6 -0
- package/dist/feature-flag.vo.d.ts.map +1 -0
- package/dist/feature-flag.vo.js +10 -0
- package/dist/feature-flag.vo.js.map +1 -0
- package/dist/file-path-absolute-schema.vo.d.ts +18 -0
- package/dist/file-path-absolute-schema.vo.d.ts.map +1 -0
- package/dist/file-path-absolute-schema.vo.js +21 -0
- package/dist/file-path-absolute-schema.vo.js.map +1 -0
- package/dist/file-path-relative-schema.vo.d.ts +18 -0
- package/dist/file-path-relative-schema.vo.d.ts.map +1 -0
- package/dist/file-path-relative-schema.vo.js +21 -0
- package/dist/file-path-relative-schema.vo.js.map +1 -0
- package/dist/file-path.vo.d.ts +32 -0
- package/dist/file-path.vo.d.ts.map +1 -0
- package/dist/file-path.vo.js +82 -0
- package/dist/file-path.vo.js.map +1 -0
- package/dist/filename-affix.vo.d.ts +14 -0
- package/dist/filename-affix.vo.d.ts.map +1 -0
- package/dist/filename-affix.vo.js +18 -0
- package/dist/filename-affix.vo.js.map +1 -0
- package/dist/filename-from-string.vo.d.ts +11 -0
- package/dist/filename-from-string.vo.d.ts.map +1 -0
- package/dist/filename-from-string.vo.js +18 -0
- package/dist/filename-from-string.vo.js.map +1 -0
- package/dist/filename.vo.d.ts +25 -0
- package/dist/filename.vo.d.ts.map +1 -0
- package/dist/filename.vo.js +70 -0
- package/dist/filename.vo.js.map +1 -0
- package/dist/height-milimiters.vo.d.ts +8 -0
- package/dist/height-milimiters.vo.d.ts.map +1 -0
- package/dist/height-milimiters.vo.js +9 -0
- package/dist/height-milimiters.vo.js.map +1 -0
- package/dist/height.vo.d.ts +22 -0
- package/dist/height.vo.d.ts.map +1 -0
- package/dist/height.vo.js +52 -0
- package/dist/height.vo.js.map +1 -0
- package/dist/hour-value.vo.d.ts +8 -0
- package/dist/hour-value.vo.d.ts.map +1 -0
- package/dist/hour-value.vo.js +6 -0
- package/dist/hour-value.vo.js.map +1 -0
- package/dist/hour.vo.d.ts +21 -0
- package/dist/hour.vo.d.ts.map +1 -0
- package/dist/hour.vo.js +49 -0
- package/dist/hour.vo.js.map +1 -0
- package/dist/iban-mask.service.d.ts +5 -0
- package/dist/iban-mask.service.d.ts.map +1 -0
- package/dist/iban-mask.service.js +13 -0
- package/dist/iban-mask.service.js.map +1 -0
- package/dist/iban-schema.vo.d.ts +8 -0
- package/dist/iban-schema.vo.d.ts.map +1 -0
- package/dist/iban-schema.vo.js +8 -0
- package/dist/iban-schema.vo.js.map +1 -0
- package/dist/iban.vo.d.ts +10 -0
- package/dist/iban.vo.d.ts.map +1 -0
- package/dist/iban.vo.js +24 -0
- package/dist/iban.vo.js.map +1 -0
- package/dist/image.vo.d.ts +14 -0
- package/dist/image.vo.d.ts.map +1 -0
- package/dist/image.vo.js +11 -0
- package/dist/image.vo.js.map +1 -0
- package/dist/index.d.ts +111 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +111 -0
- package/dist/index.js.map +1 -0
- package/dist/int.vo.d.ts +9 -0
- package/dist/int.vo.d.ts.map +1 -0
- package/dist/int.vo.js +16 -0
- package/dist/int.vo.js.map +1 -0
- package/dist/integer-non-negative.vo.d.ts +8 -0
- package/dist/integer-non-negative.vo.d.ts.map +1 -0
- package/dist/integer-non-negative.vo.js +9 -0
- package/dist/integer-non-negative.vo.js.map +1 -0
- package/dist/integer-positive.vo.d.ts +8 -0
- package/dist/integer-positive.vo.d.ts.map +1 -0
- package/dist/integer-positive.vo.js +6 -0
- package/dist/integer-positive.vo.js.map +1 -0
- package/dist/integer.vo.d.ts +7 -0
- package/dist/integer.vo.d.ts.map +1 -0
- package/dist/integer.vo.js +5 -0
- package/dist/integer.vo.js.map +1 -0
- package/dist/language.vo.d.ts +8 -0
- package/dist/language.vo.d.ts.map +1 -0
- package/dist/language.vo.js +6 -0
- package/dist/language.vo.js.map +1 -0
- package/dist/linear-regression.service.d.ts +28 -0
- package/dist/linear-regression.service.d.ts.map +1 -0
- package/dist/linear-regression.service.js +59 -0
- package/dist/linear-regression.service.js.map +1 -0
- package/dist/mean.service.d.ts +9 -0
- package/dist/mean.service.d.ts.map +1 -0
- package/dist/mean.service.js +14 -0
- package/dist/mean.service.js.map +1 -0
- package/dist/mime-registry-entry.vo.d.ts +8 -0
- package/dist/mime-registry-entry.vo.d.ts.map +1 -0
- package/dist/mime-registry-entry.vo.js +9 -0
- package/dist/mime-registry-entry.vo.js.map +1 -0
- package/dist/mime-registry.service.d.ts +17 -0
- package/dist/mime-registry.service.d.ts.map +1 -0
- package/dist/mime-registry.service.js +32 -0
- package/dist/mime-registry.service.js.map +1 -0
- package/dist/mime-value.vo.d.ts +8 -0
- package/dist/mime-value.vo.d.ts.map +1 -0
- package/dist/mime-value.vo.js +8 -0
- package/dist/mime-value.vo.js.map +1 -0
- package/dist/mime.vo.d.ts +13 -0
- package/dist/mime.vo.d.ts.map +1 -0
- package/dist/mime.vo.js +27 -0
- package/dist/mime.vo.js.map +1 -0
- package/dist/mimes.d.ts +14 -0
- package/dist/mimes.d.ts.map +1 -0
- package/dist/mimes.js +20 -0
- package/dist/mimes.js.map +1 -0
- package/dist/min-max-scaler.service.d.ts +47 -0
- package/dist/min-max-scaler.service.d.ts.map +1 -0
- package/dist/min-max-scaler.service.js +62 -0
- package/dist/min-max-scaler.service.js.map +1 -0
- package/dist/minute-value.vo.d.ts +8 -0
- package/dist/minute-value.vo.d.ts.map +1 -0
- package/dist/minute-value.vo.js +6 -0
- package/dist/minute-value.vo.js.map +1 -0
- package/dist/minute.vo.d.ts +21 -0
- package/dist/minute.vo.d.ts.map +1 -0
- package/dist/minute.vo.js +49 -0
- package/dist/minute.vo.js.map +1 -0
- package/dist/money-amount.vo.d.ts +8 -0
- package/dist/money-amount.vo.d.ts.map +1 -0
- package/dist/money-amount.vo.js +6 -0
- package/dist/money-amount.vo.js.map +1 -0
- package/dist/money.vo.d.ts +27 -0
- package/dist/money.vo.d.ts.map +1 -0
- package/dist/money.vo.js +57 -0
- package/dist/money.vo.js.map +1 -0
- package/dist/month-iso-id.vo.d.ts +9 -0
- package/dist/month-iso-id.vo.d.ts.map +1 -0
- package/dist/month-iso-id.vo.js +15 -0
- package/dist/month-iso-id.vo.js.map +1 -0
- package/dist/month.vo.d.ts +17 -0
- package/dist/month.vo.d.ts.map +1 -0
- package/dist/month.vo.js +41 -0
- package/dist/month.vo.js.map +1 -0
- package/dist/multiplication-factor.vo.d.ts +8 -0
- package/dist/multiplication-factor.vo.d.ts.map +1 -0
- package/dist/multiplication-factor.vo.js +9 -0
- package/dist/multiplication-factor.vo.js.map +1 -0
- package/dist/noop.service.d.ts +3 -0
- package/dist/noop.service.d.ts.map +1 -0
- package/dist/noop.service.js +3 -0
- package/dist/noop.service.js.map +1 -0
- package/dist/object-key.vo.d.ts +12 -0
- package/dist/object-key.vo.d.ts.map +1 -0
- package/dist/object-key.vo.js +20 -0
- package/dist/object-key.vo.js.map +1 -0
- package/dist/outlier-detector.service.d.ts +10 -0
- package/dist/outlier-detector.service.d.ts.map +1 -0
- package/dist/outlier-detector.service.js +17 -0
- package/dist/outlier-detector.service.js.map +1 -0
- package/dist/package-version-schema.vo.d.ts +9 -0
- package/dist/package-version-schema.vo.d.ts.map +1 -0
- package/dist/package-version-schema.vo.js +11 -0
- package/dist/package-version-schema.vo.js.map +1 -0
- package/dist/package-version.vo.d.ts +23 -0
- package/dist/package-version.vo.d.ts.map +1 -0
- package/dist/package-version.vo.js +59 -0
- package/dist/package-version.vo.js.map +1 -0
- package/dist/pagination-page.vo.d.ts +7 -0
- package/dist/pagination-page.vo.d.ts.map +1 -0
- package/dist/pagination-page.vo.js +4 -0
- package/dist/pagination-page.vo.js.map +1 -0
- package/dist/pagination-skip.vo.d.ts +8 -0
- package/dist/pagination-skip.vo.d.ts.map +1 -0
- package/dist/pagination-skip.vo.js +4 -0
- package/dist/pagination-skip.vo.js.map +1 -0
- package/dist/pagination-take.vo.d.ts +8 -0
- package/dist/pagination-take.vo.d.ts.map +1 -0
- package/dist/pagination-take.vo.js +4 -0
- package/dist/pagination-take.vo.js.map +1 -0
- package/dist/pagination.service.d.ts +54 -0
- package/dist/pagination.service.d.ts.map +1 -0
- package/dist/pagination.service.js +45 -0
- package/dist/pagination.service.js.map +1 -0
- package/dist/percentage.service.d.ts +8 -0
- package/dist/percentage.service.d.ts.map +1 -0
- package/dist/percentage.service.js +10 -0
- package/dist/percentage.service.js.map +1 -0
- package/dist/population-standard-deviation.service.d.ts +8 -0
- package/dist/population-standard-deviation.service.d.ts.map +1 -0
- package/dist/population-standard-deviation.service.js +18 -0
- package/dist/population-standard-deviation.service.js.map +1 -0
- package/dist/quarter-iso-id.vo.d.ts +9 -0
- package/dist/quarter-iso-id.vo.d.ts.map +1 -0
- package/dist/quarter-iso-id.vo.js +8 -0
- package/dist/quarter-iso-id.vo.js.map +1 -0
- package/dist/quarter.vo.d.ts +13 -0
- package/dist/quarter.vo.d.ts.map +1 -0
- package/dist/quarter.vo.js +31 -0
- package/dist/quarter.vo.js.map +1 -0
- package/dist/random.service.d.ts +14 -0
- package/dist/random.service.d.ts.map +1 -0
- package/dist/random.service.js +14 -0
- package/dist/random.service.js.map +1 -0
- package/dist/rate-limiter.service.d.ts +18 -0
- package/dist/rate-limiter.service.d.ts.map +1 -0
- package/dist/rate-limiter.service.js +20 -0
- package/dist/rate-limiter.service.js.map +1 -0
- package/dist/relative-date.vo.d.ts +14 -0
- package/dist/relative-date.vo.d.ts.map +1 -0
- package/dist/relative-date.vo.js +15 -0
- package/dist/relative-date.vo.js.map +1 -0
- package/dist/reordering-item-position-value.vo.d.ts +7 -0
- package/dist/reordering-item-position-value.vo.d.ts.map +1 -0
- package/dist/reordering-item-position-value.vo.js +4 -0
- package/dist/reordering-item-position-value.vo.js.map +1 -0
- package/dist/reordering.service.d.ts +64 -0
- package/dist/reordering.service.d.ts.map +1 -0
- package/dist/reordering.service.js +136 -0
- package/dist/reordering.service.js.map +1 -0
- package/dist/repeat.d.ts +2 -0
- package/dist/repeat.d.ts.map +1 -0
- package/dist/repeat.js +4 -0
- package/dist/repeat.js.map +1 -0
- package/dist/revision-value.vo.d.ts +8 -0
- package/dist/revision-value.vo.d.ts.map +1 -0
- package/dist/revision-value.vo.js +4 -0
- package/dist/revision-value.vo.js.map +1 -0
- package/dist/revision.vo.d.ts +19 -0
- package/dist/revision.vo.d.ts.map +1 -0
- package/dist/revision.vo.js +37 -0
- package/dist/revision.vo.js.map +1 -0
- package/dist/rounding-decimal.strategy.d.ts +13 -0
- package/dist/rounding-decimal.strategy.d.ts.map +1 -0
- package/dist/rounding-decimal.strategy.js +15 -0
- package/dist/rounding-decimal.strategy.js.map +1 -0
- package/dist/rounding-down.strategy.d.ts +5 -0
- package/dist/rounding-down.strategy.d.ts.map +1 -0
- package/dist/rounding-down.strategy.js +6 -0
- package/dist/rounding-down.strategy.js.map +1 -0
- package/dist/rounding-to-nearest.strategy.d.ts +5 -0
- package/dist/rounding-to-nearest.strategy.d.ts.map +1 -0
- package/dist/rounding-to-nearest.strategy.js +6 -0
- package/dist/rounding-to-nearest.strategy.js.map +1 -0
- package/dist/rounding-up.strategy.d.ts +5 -0
- package/dist/rounding-up.strategy.d.ts.map +1 -0
- package/dist/rounding-up.strategy.js +6 -0
- package/dist/rounding-up.strategy.js.map +1 -0
- package/dist/rounding.strategy.d.ts +4 -0
- package/dist/rounding.strategy.d.ts.map +1 -0
- package/dist/rounding.strategy.js +2 -0
- package/dist/rounding.strategy.js.map +1 -0
- package/dist/size-bytes.vo.d.ts +7 -0
- package/dist/size-bytes.vo.d.ts.map +1 -0
- package/dist/size-bytes.vo.js +6 -0
- package/dist/size-bytes.vo.js.map +1 -0
- package/dist/size.vo.d.ts +42 -0
- package/dist/size.vo.d.ts.map +1 -0
- package/dist/size.vo.js +92 -0
- package/dist/size.vo.js.map +1 -0
- package/dist/slug.service.d.ts +5 -0
- package/dist/slug.service.d.ts.map +1 -0
- package/dist/slug.service.js +16 -0
- package/dist/slug.service.js.map +1 -0
- package/dist/sms-body.vo.d.ts +9 -0
- package/dist/sms-body.vo.d.ts.map +1 -0
- package/dist/sms-body.vo.js +10 -0
- package/dist/sms-body.vo.js.map +1 -0
- package/dist/sms-message.vo.d.ts +14 -0
- package/dist/sms-message.vo.d.ts.map +1 -0
- package/dist/sms-message.vo.js +14 -0
- package/dist/sms-message.vo.js.map +1 -0
- package/dist/sum.service.d.ts +5 -0
- package/dist/sum.service.d.ts.map +1 -0
- package/dist/sum.service.js +17 -0
- package/dist/sum.service.js.map +1 -0
- package/dist/telephone-number.vo.d.ts +8 -0
- package/dist/telephone-number.vo.d.ts.map +1 -0
- package/dist/telephone-number.vo.js +11 -0
- package/dist/telephone-number.vo.js.map +1 -0
- package/dist/thousands-separator.service.d.ts +5 -0
- package/dist/thousands-separator.service.d.ts.map +1 -0
- package/dist/thousands-separator.service.js +10 -0
- package/dist/thousands-separator.service.js.map +1 -0
- package/dist/time-zone-offset-value.vo.d.ts +9 -0
- package/dist/time-zone-offset-value.vo.d.ts.map +1 -0
- package/dist/time-zone-offset-value.vo.js +14 -0
- package/dist/time-zone-offset-value.vo.js.map +1 -0
- package/dist/timestamp-value.vo.d.ts +7 -0
- package/dist/timestamp-value.vo.d.ts.map +1 -0
- package/dist/timestamp-value.vo.js +6 -0
- package/dist/timestamp-value.vo.js.map +1 -0
- package/dist/timestamp.vo.d.ts +22 -0
- package/dist/timestamp.vo.d.ts.map +1 -0
- package/dist/timestamp.vo.js +55 -0
- package/dist/timestamp.vo.js.map +1 -0
- package/dist/timezone.vo.d.ts +10 -0
- package/dist/timezone.vo.d.ts.map +1 -0
- package/dist/timezone.vo.js +21 -0
- package/dist/timezone.vo.js.map +1 -0
- package/dist/ts-utils.d.ts +4 -0
- package/dist/ts-utils.d.ts.map +1 -0
- package/dist/ts-utils.js +2 -0
- package/dist/ts-utils.js.map +1 -0
- package/dist/url-with-slash.vo.d.ts +7 -0
- package/dist/url-with-slash.vo.d.ts.map +1 -0
- package/dist/url-with-slash.vo.js +6 -0
- package/dist/url-with-slash.vo.js.map +1 -0
- package/dist/url-without-slash.vo.d.ts +7 -0
- package/dist/url-without-slash.vo.d.ts.map +1 -0
- package/dist/url-without-slash.vo.js +6 -0
- package/dist/url-without-slash.vo.js.map +1 -0
- package/dist/visually-unambiguous-characters-generator.service.d.ts +5 -0
- package/dist/visually-unambiguous-characters-generator.service.d.ts.map +1 -0
- package/dist/visually-unambiguous-characters-generator.service.js +33 -0
- package/dist/visually-unambiguous-characters-generator.service.js.map +1 -0
- package/dist/week-iso-id.vo.d.ts +9 -0
- package/dist/week-iso-id.vo.d.ts.map +1 -0
- package/dist/week-iso-id.vo.js +20 -0
- package/dist/week-iso-id.vo.js.map +1 -0
- package/dist/week.vo.d.ts +17 -0
- package/dist/week.vo.d.ts.map +1 -0
- package/dist/week.vo.js +46 -0
- package/dist/week.vo.js.map +1 -0
- package/dist/weekday-iso-id.vo.d.ts +8 -0
- package/dist/weekday-iso-id.vo.d.ts.map +1 -0
- package/dist/weekday-iso-id.vo.js +6 -0
- package/dist/weekday-iso-id.vo.js.map +1 -0
- package/dist/weekday.vo.d.ts +29 -0
- package/dist/weekday.vo.d.ts.map +1 -0
- package/dist/weekday.vo.js +61 -0
- package/dist/weekday.vo.js.map +1 -0
- package/dist/weight-grams.vo.d.ts +8 -0
- package/dist/weight-grams.vo.d.ts.map +1 -0
- package/dist/weight-grams.vo.js +6 -0
- package/dist/weight-grams.vo.js.map +1 -0
- package/dist/weight.vo.d.ts +26 -0
- package/dist/weight.vo.d.ts.map +1 -0
- package/dist/weight.vo.js +66 -0
- package/dist/weight.vo.js.map +1 -0
- package/dist/year-iso-id.vo.d.ts +8 -0
- package/dist/year-iso-id.vo.d.ts.map +1 -0
- package/dist/year-iso-id.vo.js +8 -0
- package/dist/year-iso-id.vo.js.map +1 -0
- package/dist/year.vo.d.ts +19 -0
- package/dist/year.vo.d.ts.map +1 -0
- package/dist/year.vo.js +51 -0
- package/dist/year.vo.js.map +1 -0
- package/dist/z-score.service.d.ts +12 -0
- package/dist/z-score.service.d.ts.map +1 -0
- package/dist/z-score.service.js +20 -0
- package/dist/z-score.service.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"percentage.service.d.ts","sourceRoot":"","sources":["../src/percentage.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,eAAO,MAAM,eAAe;;CAA2D,CAAC;AAExF,qBAAa,UAAU;IACrB,MAAM,CAAC,EAAE,CACP,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,gBAAkD,GAC3D,MAAM;CAIV"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RoundingToNearestStrategy } from "./rounding-to-nearest.strategy";
|
|
2
|
+
export const PercentageError = { InvalidDenominator: "percentage.invalid.denominator" };
|
|
3
|
+
export class Percentage {
|
|
4
|
+
static of(numerator, denominator, rounding = new RoundingToNearestStrategy()) {
|
|
5
|
+
if (denominator === 0)
|
|
6
|
+
throw new Error(PercentageError.InvalidDenominator);
|
|
7
|
+
return rounding.round((numerator / denominator) * 100);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=percentage.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"percentage.service.js","sourceRoot":"","sources":["../src/percentage.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,CAAC;AAExF,MAAM,OAAO,UAAU;IACrB,MAAM,CAAC,EAAE,CACP,SAAiB,EACjB,WAAmB,EACnB,WAA6B,IAAI,yBAAyB,EAAE;QAE5D,IAAI,WAAW,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;QAC3E,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RoundingStrategy } from "./rounding.strategy";
|
|
2
|
+
export declare const PopulationStandardDeviationError: {
|
|
3
|
+
NotEnoughValues: string;
|
|
4
|
+
};
|
|
5
|
+
export declare class PopulationStandardDeviation {
|
|
6
|
+
static calculate(values: ReadonlyArray<number>, rounding?: RoundingStrategy): number;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=population-standard-deviation.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"population-standard-deviation.service.d.ts","sourceRoot":"","sources":["../src/population-standard-deviation.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAI5D,eAAO,MAAM,gCAAgC;;CAE5C,CAAC;AAEF,qBAAa,2BAA2B;IACtC,MAAM,CAAC,SAAS,CACd,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,QAAQ,GAAE,gBAAiD,GAC1D,MAAM;CAYV"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Mean } from "./mean.service";
|
|
2
|
+
import { RoundingDecimalStrategy } from "./rounding-decimal.strategy";
|
|
3
|
+
import { Sum } from "./sum.service";
|
|
4
|
+
export const PopulationStandardDeviationError = {
|
|
5
|
+
NotEnoughValues: "population.standard.deviation.not.enough.values",
|
|
6
|
+
};
|
|
7
|
+
export class PopulationStandardDeviation {
|
|
8
|
+
static calculate(values, rounding = new RoundingDecimalStrategy(2)) {
|
|
9
|
+
if (values.length < 2)
|
|
10
|
+
throw new Error(PopulationStandardDeviationError.NotEnoughValues);
|
|
11
|
+
const mean = Mean.calculate(values);
|
|
12
|
+
const count = values.length;
|
|
13
|
+
const squaredDifferences = values.map((value) => (value - mean) ** 2);
|
|
14
|
+
const variance = Sum.of(squaredDifferences) / count;
|
|
15
|
+
return rounding.round(Math.sqrt(variance));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=population-standard-deviation.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"population-standard-deviation.service.js","sourceRoot":"","sources":["../src/population-standard-deviation.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,eAAe,EAAE,iDAAiD;CACnE,CAAC;AAEF,MAAM,OAAO,2BAA2B;IACtC,MAAM,CAAC,SAAS,CACd,MAA6B,EAC7B,WAA6B,IAAI,uBAAuB,CAAC,CAAC,CAAC;QAE3D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,eAAe,CAAC,CAAC;QAEzF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtE,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC;QAEpD,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export declare const QuarterIsoIdError: {
|
|
3
|
+
Type: string;
|
|
4
|
+
BadChars: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const QUARTER_ISO_ID_CHARS_WHITELIST: RegExp;
|
|
7
|
+
export declare const QuarterIsoId: v.SchemaWithPipe<readonly [v.StringSchema<string>, v.RegexAction<string, string>, v.BrandAction<string, "QuarterIsoId">]>;
|
|
8
|
+
export type QuarterIsoIdType = v.InferOutput<typeof QuarterIsoId>;
|
|
9
|
+
//# sourceMappingURL=quarter-iso-id.vo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quarter-iso-id.vo.d.ts","sourceRoot":"","sources":["../src/quarter-iso-id.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,eAAO,MAAM,iBAAiB;;;CAAwE,CAAC;AAGvG,eAAO,MAAM,8BAA8B,QAAmB,CAAC;AAE/D,eAAO,MAAM,YAAY,2HAKxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export const QuarterIsoIdError = { Type: "quarter.iso.id.type", BadChars: "quarter.iso.id.bad.chars" };
|
|
3
|
+
// 4 digits, hyphen, Q, digits from 1 to 4
|
|
4
|
+
export const QUARTER_ISO_ID_CHARS_WHITELIST = /^\d{4}-Q[1-4]$/;
|
|
5
|
+
export const QuarterIsoId = v.pipe(v.string(QuarterIsoIdError.Type), v.regex(QUARTER_ISO_ID_CHARS_WHITELIST, QuarterIsoIdError.BadChars),
|
|
6
|
+
// Stryker disable next-line StringLiteral
|
|
7
|
+
v.brand("QuarterIsoId"));
|
|
8
|
+
//# sourceMappingURL=quarter-iso-id.vo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quarter-iso-id.vo.js","sourceRoot":"","sources":["../src/quarter-iso-id.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAC;AAEvG,0CAA0C;AAC1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,gBAAgB,CAAC;AAE/D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAChC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAChC,CAAC,CAAC,KAAK,CAAC,8BAA8B,EAAE,iBAAiB,CAAC,QAAQ,CAAC;AACnE,0CAA0C;AAC1C,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CACxB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DateRange } from "./date-range.vo";
|
|
2
|
+
import { type QuarterIsoIdType } from "./quarter-iso-id.vo";
|
|
3
|
+
import { Timestamp } from "./timestamp.vo";
|
|
4
|
+
import type { TimestampValueType } from "./timestamp-value.vo";
|
|
5
|
+
export declare class Quarter extends DateRange {
|
|
6
|
+
static fromTimestamp(timestamp: Timestamp): Quarter;
|
|
7
|
+
static fromTimestampValue(timestamp: TimestampValueType): Quarter;
|
|
8
|
+
static fromNow(now: Timestamp): Quarter;
|
|
9
|
+
static fromIsoId(isoId: QuarterIsoIdType): Quarter;
|
|
10
|
+
toIsoId(): QuarterIsoIdType;
|
|
11
|
+
toString(): string;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=quarter.vo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quarter.vo.d.ts","sourceRoot":"","sources":["../src/quarter.vo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,qBAAa,OAAQ,SAAQ,SAAS;IACpC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAOnD,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO;IAIjE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAIvC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO;IAMlD,OAAO,IAAI,gBAAgB;IAO3B,QAAQ,IAAI,MAAM;CAGnB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { endOfQuarter, getQuarter, getYear, startOfQuarter } from "date-fns";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
import { DateRange } from "./date-range.vo";
|
|
4
|
+
import { QuarterIsoId } from "./quarter-iso-id.vo";
|
|
5
|
+
import { Timestamp } from "./timestamp.vo";
|
|
6
|
+
export class Quarter extends DateRange {
|
|
7
|
+
static fromTimestamp(timestamp) {
|
|
8
|
+
const start = Timestamp.fromNumber(startOfQuarter(timestamp.ms).getTime());
|
|
9
|
+
const end = Timestamp.fromNumber(endOfQuarter(timestamp.ms).getTime());
|
|
10
|
+
return new Quarter(start, end);
|
|
11
|
+
}
|
|
12
|
+
static fromTimestampValue(timestamp) {
|
|
13
|
+
return Quarter.fromTimestamp(Timestamp.fromValue(timestamp));
|
|
14
|
+
}
|
|
15
|
+
static fromNow(now) {
|
|
16
|
+
return Quarter.fromTimestamp(now);
|
|
17
|
+
}
|
|
18
|
+
static fromIsoId(isoId) {
|
|
19
|
+
const [year, quarter] = v.parse(QuarterIsoId, isoId).split("-Q").map(Number);
|
|
20
|
+
return Quarter.fromTimestamp(Timestamp.fromNumber(Date.UTC(year, (quarter - 1) * 3, 1)));
|
|
21
|
+
}
|
|
22
|
+
toIsoId() {
|
|
23
|
+
const year = getYear(this.getStart().ms);
|
|
24
|
+
const quarter = getQuarter(this.getStart().ms);
|
|
25
|
+
return v.parse(QuarterIsoId, `${year}-Q${quarter}`);
|
|
26
|
+
}
|
|
27
|
+
toString() {
|
|
28
|
+
return this.toIsoId();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=quarter.vo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quarter.vo.js","sourceRoot":"","sources":["../src/quarter.vo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAyB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,OAAO,OAAQ,SAAQ,SAAS;IACpC,MAAM,CAAC,aAAa,CAAC,SAAoB;QACvC,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAEvE,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,SAA6B;QACrD,OAAO,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,GAAc;QAC3B,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAuB;QACtC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAqB,CAAC;QAEjG,OAAO,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO;QACL,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAE/C,OAAO,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type RandomGenerateConfigType = {
|
|
2
|
+
min: number;
|
|
3
|
+
max: number;
|
|
4
|
+
};
|
|
5
|
+
export declare const RandomError: {
|
|
6
|
+
MinMax: string;
|
|
7
|
+
};
|
|
8
|
+
export declare class Random {
|
|
9
|
+
private static readonly DEFAULT_MIN;
|
|
10
|
+
private static readonly DEFAULT_MAX;
|
|
11
|
+
static generate(config?: RandomGenerateConfigType): number;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=random.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random.service.d.ts","sourceRoot":"","sources":["../src/random.service.ts"],"names":[],"mappings":"AAEA,KAAK,wBAAwB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,eAAO,MAAM,WAAW;;CAA+B,CAAC;AAExD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IAExC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,wBAAwB,GAAG,MAAM;CAQ3D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RoundingDownStrategy } from "./rounding-down.strategy";
|
|
2
|
+
export const RandomError = { MinMax: "random.min.max" };
|
|
3
|
+
export class Random {
|
|
4
|
+
static DEFAULT_MIN = 0;
|
|
5
|
+
static DEFAULT_MAX = 1;
|
|
6
|
+
static generate(config) {
|
|
7
|
+
const min = config ? config.min : Random.DEFAULT_MIN;
|
|
8
|
+
const max = config ? config.max : Random.DEFAULT_MAX;
|
|
9
|
+
if (min >= max)
|
|
10
|
+
throw new Error(RandomError.MinMax);
|
|
11
|
+
return new RoundingDownStrategy().round(Math.random() * (max - min + 1)) + min;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=random.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random.service.js","sourceRoot":"","sources":["../src/random.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIhE,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;AAExD,MAAM,OAAO,MAAM;IACT,MAAM,CAAU,WAAW,GAAG,CAAC,CAAC;IAChC,MAAM,CAAU,WAAW,GAAG,CAAC,CAAC;IAExC,MAAM,CAAC,QAAQ,CAAC,MAAiC;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QACrD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAErD,IAAI,GAAG,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEpD,OAAO,IAAI,oBAAoB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACjF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Duration } from "./duration.service";
|
|
2
|
+
import type { Timestamp } from "./timestamp.vo";
|
|
3
|
+
type RateLimiterResultSuccessType = {
|
|
4
|
+
allowed: true;
|
|
5
|
+
};
|
|
6
|
+
type RateLimiterResultErrorType = {
|
|
7
|
+
allowed: false;
|
|
8
|
+
remaining: Duration;
|
|
9
|
+
};
|
|
10
|
+
type RateLimiterResultType = RateLimiterResultSuccessType | RateLimiterResultErrorType;
|
|
11
|
+
export declare class RateLimiter {
|
|
12
|
+
private readonly duration;
|
|
13
|
+
private lastInvocation;
|
|
14
|
+
constructor(duration: Duration);
|
|
15
|
+
verify(now: Timestamp): RateLimiterResultType;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=rate-limiter.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.service.d.ts","sourceRoot":"","sources":["../src/rate-limiter.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,KAAK,4BAA4B,GAAG;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC;AACtD,KAAK,0BAA0B,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,QAAQ,CAAA;CAAE,CAAC;AAC1E,KAAK,qBAAqB,GAAG,4BAA4B,GAAG,0BAA0B,CAAC;AAEvF,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,cAAc,CAA0B;gBAEnB,QAAQ,EAAE,QAAQ;IAE/C,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,qBAAqB;CAiB9C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class RateLimiter {
|
|
2
|
+
duration;
|
|
3
|
+
lastInvocation = null;
|
|
4
|
+
constructor(duration) {
|
|
5
|
+
this.duration = duration;
|
|
6
|
+
}
|
|
7
|
+
verify(now) {
|
|
8
|
+
if (this.lastInvocation == null) {
|
|
9
|
+
this.lastInvocation = now;
|
|
10
|
+
return { allowed: true };
|
|
11
|
+
}
|
|
12
|
+
const nextAllowedTimestamp = this.lastInvocation.add(this.duration);
|
|
13
|
+
if (nextAllowedTimestamp.isBeforeOrEqual(now)) {
|
|
14
|
+
this.lastInvocation = now;
|
|
15
|
+
return { allowed: true };
|
|
16
|
+
}
|
|
17
|
+
return { allowed: false, remaining: nextAllowedTimestamp.difference(now) };
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=rate-limiter.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.service.js","sourceRoot":"","sources":["../src/rate-limiter.service.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,WAAW;IAGO;IAFrB,cAAc,GAAqB,IAAI,CAAC;IAEhD,YAA6B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD,MAAM,CAAC,GAAc;QACnB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;YAE1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpE,IAAI,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;YAE1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7E,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Timestamp } from "./timestamp.vo";
|
|
2
|
+
import type { TimestampValueType } from "./timestamp-value.vo";
|
|
3
|
+
import type { Falsy } from "./ts-utils";
|
|
4
|
+
type RelativeDateType = {
|
|
5
|
+
raw: TimestampValueType;
|
|
6
|
+
relative: string;
|
|
7
|
+
};
|
|
8
|
+
export declare class RelativeDate {
|
|
9
|
+
static truthy(timestamp: Timestamp): RelativeDateType;
|
|
10
|
+
static falsy(timestamp: Falsy<Timestamp>): RelativeDateType | null;
|
|
11
|
+
private static _format;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=relative-date.vo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-date.vo.d.ts","sourceRoot":"","sources":["../src/relative-date.vo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,KAAK,gBAAgB,GAAG;IAAE,GAAG,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,qBAAa,YAAY;IACvB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB;IAIrD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,gBAAgB,GAAG,IAAI;IAKlE,OAAO,CAAC,MAAM,CAAC,OAAO;CAGvB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DateFormatters } from "./date-formatter.service";
|
|
2
|
+
export class RelativeDate {
|
|
3
|
+
static truthy(timestamp) {
|
|
4
|
+
return RelativeDate._format(timestamp);
|
|
5
|
+
}
|
|
6
|
+
static falsy(timestamp) {
|
|
7
|
+
if (!timestamp)
|
|
8
|
+
return null;
|
|
9
|
+
return RelativeDate._format(timestamp);
|
|
10
|
+
}
|
|
11
|
+
static _format(timestamp) {
|
|
12
|
+
return { raw: timestamp.ms, relative: DateFormatters.relative(timestamp.ms) };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=relative-date.vo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-date.vo.js","sourceRoot":"","sources":["../src/relative-date.vo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAO1D,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,MAAM,CAAC,SAAoB;QAChC,OAAO,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,SAA2B;QACtC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,OAAO,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAEO,MAAM,CAAC,OAAO,CAAC,SAAoB;QACzC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export declare const ReorderingItemPositionValueError: {
|
|
3
|
+
Invalid: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const ReorderingItemPositionValue: v.SchemaWithPipe<readonly [v.NumberSchema<string>, v.IntegerAction<number, string>, v.MinValueAction<number, 0, string>]>;
|
|
6
|
+
export type ReorderingItemPositionValueType = v.InferOutput<typeof ReorderingItemPositionValue>;
|
|
7
|
+
//# sourceMappingURL=reordering-item-position-value.vo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reordering-item-position-value.vo.d.ts","sourceRoot":"","sources":["../src/reordering-item-position-value.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,eAAO,MAAM,gCAAgC;;CAA0C,CAAC;AAExF,eAAO,MAAM,2BAA2B,2HAIvC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export const ReorderingItemPositionValueError = { Invalid: "reordering.position.type" };
|
|
3
|
+
export const ReorderingItemPositionValue = v.pipe(v.number(ReorderingItemPositionValueError.Invalid), v.integer(ReorderingItemPositionValueError.Invalid), v.minValue(0, ReorderingItemPositionValueError.Invalid));
|
|
4
|
+
//# sourceMappingURL=reordering-item-position-value.vo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reordering-item-position-value.vo.js","sourceRoot":"","sources":["../src/reordering-item-position-value.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAExF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAC/C,CAAC,CAAC,MAAM,CAAC,gCAAgC,CAAC,OAAO,CAAC,EAClD,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,OAAO,CAAC,EACnD,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,gCAAgC,CAAC,OAAO,CAAC,CACxD,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import { type ReorderingItemPositionValueType } from "./reordering-item-position-value.vo";
|
|
3
|
+
export declare const ReorderingError: {
|
|
4
|
+
CannotFindItem: string;
|
|
5
|
+
CannotFindCurrent: string;
|
|
6
|
+
CannotFindTarget: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const ReorderingId: v.SchemaWithPipe<readonly [v.StringSchema<string>, v.MinLengthAction<string, 1, string>]>;
|
|
9
|
+
export type ReorderingItemIdType = v.InferOutput<typeof ReorderingId>;
|
|
10
|
+
export declare const Reordering: v.ObjectSchema<{
|
|
11
|
+
readonly correlationId: v.SchemaWithPipe<readonly [v.StringSchema<string>, v.MinLengthAction<string, 1, string>]>;
|
|
12
|
+
readonly id: v.SchemaWithPipe<readonly [v.StringSchema<string>, v.MinLengthAction<string, 1, string>]>;
|
|
13
|
+
readonly position: v.SchemaWithPipe<readonly [v.NumberSchema<string>, v.IntegerAction<number, string>, v.MinValueAction<number, 0, string>]>;
|
|
14
|
+
}, undefined>;
|
|
15
|
+
export type ReorderingType = v.InferOutput<typeof Reordering>;
|
|
16
|
+
export type WithReorderingPositionValue<T> = T & {
|
|
17
|
+
position: ReorderingItemPositionValueType;
|
|
18
|
+
};
|
|
19
|
+
export declare class ReorderingPosition {
|
|
20
|
+
readonly value: ReorderingItemPositionValueType;
|
|
21
|
+
constructor(value: ReorderingItemPositionValueType);
|
|
22
|
+
eq(another: ReorderingPosition): boolean;
|
|
23
|
+
}
|
|
24
|
+
declare class ReorderingItem {
|
|
25
|
+
readonly id: ReorderingItemIdType;
|
|
26
|
+
readonly position: ReorderingPosition;
|
|
27
|
+
constructor(id: ReorderingItemIdType, position: ReorderingPosition);
|
|
28
|
+
eq(anotherItemId: ReorderingItem["id"]): boolean;
|
|
29
|
+
}
|
|
30
|
+
declare enum ReorderingTransferDirection {
|
|
31
|
+
upwards = "upwards",
|
|
32
|
+
downwards = "downwards",
|
|
33
|
+
noop = "noop"
|
|
34
|
+
}
|
|
35
|
+
export declare class ReorderingTransfer {
|
|
36
|
+
readonly id: ReorderingItem["id"];
|
|
37
|
+
readonly to: ReorderingPosition;
|
|
38
|
+
constructor(config: {
|
|
39
|
+
id: ReorderingItem["id"];
|
|
40
|
+
to: ReorderingItemPositionValueType;
|
|
41
|
+
});
|
|
42
|
+
getDirection(currentPosition: ReorderingPosition): ReorderingTransferDirection;
|
|
43
|
+
}
|
|
44
|
+
export declare class ReorderingCalculator {
|
|
45
|
+
private dll;
|
|
46
|
+
constructor();
|
|
47
|
+
static fromArray(ids: ReadonlyArray<ReorderingItem["id"]>): ReorderingCalculator;
|
|
48
|
+
add(id: ReorderingItem["id"]): ReorderingItem;
|
|
49
|
+
delete(id: ReorderingItem["id"]): void;
|
|
50
|
+
transfer(transfer: ReorderingTransfer): ReturnType<ReorderingCalculator["read"]>;
|
|
51
|
+
read(): {
|
|
52
|
+
ids: string[];
|
|
53
|
+
items: ReorderingItem[];
|
|
54
|
+
};
|
|
55
|
+
private recalculate;
|
|
56
|
+
}
|
|
57
|
+
export declare class ReorderingIntegrator {
|
|
58
|
+
static appendPosition(reordering: ReadonlyArray<ReorderingType>): <T extends {
|
|
59
|
+
id: ReorderingItemIdType;
|
|
60
|
+
}>(item: T) => WithReorderingPositionValue<T>;
|
|
61
|
+
static sortByPosition(): (a: WithReorderingPositionValue<unknown>, b: WithReorderingPositionValue<unknown>) => number;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=reordering.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reordering.service.d.ts","sourceRoot":"","sources":["../src/reordering.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,qCAAqC,CAAC;AAE7C,eAAO,MAAM,eAAe;;;;CAI3B,CAAC;AAIF,eAAO,MAAM,YAAY,2FAAmF,CAAC;AAC7G,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,YAAY,CAAC,CAAC;AAEtE,eAAO,MAAM,UAAU;;;;aAIrB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9D,MAAM,MAAM,2BAA2B,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,EAAE,+BAA+B,CAAA;CAAE,CAAC;AAE/F,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,KAAK,EAAE,+BAA+B,CAAC;gBAEpC,KAAK,EAAE,+BAA+B;IAIlD,EAAE,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO;CAGzC;AAED,cAAM,cAAc;IAEhB,QAAQ,CAAC,EAAE,EAAE,oBAAoB;IACjC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB;gBAD5B,EAAE,EAAE,oBAAoB,EACxB,QAAQ,EAAE,kBAAkB;IAGvC,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO;CAGjD;AAED,aAAK,2BAA2B;IAC9B,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,IAAI,SAAS;CACd;AAED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC;gBAEpB,MAAM,EAAE;QAAE,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QAAC,EAAE,EAAE,+BAA+B,CAAA;KAAE;IAQrF,YAAY,CAAC,eAAe,EAAE,kBAAkB,GAAG,2BAA2B;CAK/E;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,GAAG,CAAmC;;IAM9C,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAQzD,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,cAAc;IAS7C,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC;IAQ/B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAuBhF,IAAI;;;;IAMJ,OAAO,CAAC,WAAW;CASpB;AAED,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,IAC5C,CAAC,SAAS;QAAE,EAAE,EAAE,oBAAoB,CAAA;KAAE,EAAE,MAAM,CAAC,KAAG,2BAA2B,CAAC,CAAC,CAAC;IAOnG,MAAM,CAAC,cAAc,KACX,GAAG,2BAA2B,CAAC,OAAO,CAAC,EAAE,GAAG,2BAA2B,CAAC,OAAO,CAAC;CAG3F"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// Stryker disable all
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
import { DoublyLinkedList, Node } from "./dll.service";
|
|
4
|
+
import { ReorderingItemPositionValue, } from "./reordering-item-position-value.vo";
|
|
5
|
+
export const ReorderingError = {
|
|
6
|
+
CannotFindItem: "reordering.cannot.find.item",
|
|
7
|
+
CannotFindCurrent: "reordering.cannot.find.current",
|
|
8
|
+
CannotFindTarget: "reordering.cannot.find.target",
|
|
9
|
+
};
|
|
10
|
+
const ReorderingIdError = { Type: "reordering.id.type" };
|
|
11
|
+
export const ReorderingId = v.pipe(v.string(ReorderingIdError.Type), v.minLength(1, ReorderingIdError.Type));
|
|
12
|
+
export const Reordering = v.object({
|
|
13
|
+
correlationId: ReorderingId,
|
|
14
|
+
id: ReorderingId,
|
|
15
|
+
position: ReorderingItemPositionValue,
|
|
16
|
+
});
|
|
17
|
+
export class ReorderingPosition {
|
|
18
|
+
value;
|
|
19
|
+
constructor(value) {
|
|
20
|
+
this.value = v.parse(ReorderingItemPositionValue, value);
|
|
21
|
+
}
|
|
22
|
+
eq(another) {
|
|
23
|
+
return this.value === another.value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
class ReorderingItem {
|
|
27
|
+
id;
|
|
28
|
+
position;
|
|
29
|
+
constructor(id, position) {
|
|
30
|
+
this.id = id;
|
|
31
|
+
this.position = position;
|
|
32
|
+
}
|
|
33
|
+
eq(anotherItemId) {
|
|
34
|
+
return this.id === anotherItemId;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
var ReorderingTransferDirection;
|
|
38
|
+
(function (ReorderingTransferDirection) {
|
|
39
|
+
ReorderingTransferDirection["upwards"] = "upwards";
|
|
40
|
+
ReorderingTransferDirection["downwards"] = "downwards";
|
|
41
|
+
ReorderingTransferDirection["noop"] = "noop";
|
|
42
|
+
})(ReorderingTransferDirection || (ReorderingTransferDirection = {}));
|
|
43
|
+
export class ReorderingTransfer {
|
|
44
|
+
id;
|
|
45
|
+
to;
|
|
46
|
+
constructor(config) {
|
|
47
|
+
const id = config.id;
|
|
48
|
+
const to = new ReorderingPosition(config.to);
|
|
49
|
+
this.id = id;
|
|
50
|
+
this.to = to;
|
|
51
|
+
}
|
|
52
|
+
getDirection(currentPosition) {
|
|
53
|
+
if (this.to.value === currentPosition.value)
|
|
54
|
+
return ReorderingTransferDirection.noop;
|
|
55
|
+
if (this.to.value > currentPosition.value)
|
|
56
|
+
return ReorderingTransferDirection.downwards;
|
|
57
|
+
return ReorderingTransferDirection.upwards;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export class ReorderingCalculator {
|
|
61
|
+
dll;
|
|
62
|
+
constructor() {
|
|
63
|
+
this.dll = DoublyLinkedList.fromArray([]);
|
|
64
|
+
}
|
|
65
|
+
static fromArray(ids) {
|
|
66
|
+
const reordering = new ReorderingCalculator();
|
|
67
|
+
for (const id of ids) {
|
|
68
|
+
reordering.add(id);
|
|
69
|
+
}
|
|
70
|
+
return reordering;
|
|
71
|
+
}
|
|
72
|
+
add(id) {
|
|
73
|
+
const size = this.dll.getSize();
|
|
74
|
+
const position = new ReorderingPosition(v.parse(ReorderingItemPositionValue, size));
|
|
75
|
+
const item = new ReorderingItem(id, position);
|
|
76
|
+
const node = new Node(item);
|
|
77
|
+
this.dll.append(node);
|
|
78
|
+
return item;
|
|
79
|
+
}
|
|
80
|
+
delete(id) {
|
|
81
|
+
const node = this.dll.find((x) => x.data.eq(id));
|
|
82
|
+
if (!node)
|
|
83
|
+
throw new Error(ReorderingError.CannotFindItem);
|
|
84
|
+
this.dll.remove(node);
|
|
85
|
+
this.recalculate();
|
|
86
|
+
}
|
|
87
|
+
transfer(transfer) {
|
|
88
|
+
const current = this.dll.find((node) => node.data.eq(transfer.id));
|
|
89
|
+
if (!current)
|
|
90
|
+
throw new Error(ReorderingError.CannotFindCurrent);
|
|
91
|
+
const target = this.dll.find((node) => node.data.position.eq(transfer.to));
|
|
92
|
+
if (!target)
|
|
93
|
+
throw new Error(ReorderingError.CannotFindTarget);
|
|
94
|
+
const direction = transfer.getDirection(current.data.position);
|
|
95
|
+
if (direction === ReorderingTransferDirection.noop)
|
|
96
|
+
return this.read();
|
|
97
|
+
// remove first to avoid temporary invalid duplicates of positions
|
|
98
|
+
this.dll.remove(current);
|
|
99
|
+
if (direction === ReorderingTransferDirection.upwards) {
|
|
100
|
+
this.dll.insertBefore(current, target);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.dll.insertAfter(current, target);
|
|
104
|
+
}
|
|
105
|
+
this.recalculate();
|
|
106
|
+
return this.read();
|
|
107
|
+
}
|
|
108
|
+
read() {
|
|
109
|
+
const ids = Array.from(this.dll).map((node) => node.data.id);
|
|
110
|
+
const items = Array.from(this.dll).map((node) => node.data);
|
|
111
|
+
return { ids, items };
|
|
112
|
+
}
|
|
113
|
+
recalculate() {
|
|
114
|
+
let index = 0;
|
|
115
|
+
for (const node of this.dll) {
|
|
116
|
+
const id = node.data.id;
|
|
117
|
+
const position = new ReorderingPosition(v.parse(ReorderingItemPositionValue, index));
|
|
118
|
+
node.data = new ReorderingItem(id, position);
|
|
119
|
+
index += 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export class ReorderingIntegrator {
|
|
124
|
+
static appendPosition(reordering) {
|
|
125
|
+
return function (item) {
|
|
126
|
+
const found = reordering.find((x) => x.id === item.id);
|
|
127
|
+
const positionValue = v.parse(ReorderingItemPositionValue, found?.position ?? 0);
|
|
128
|
+
return { ...item, position: positionValue };
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
static sortByPosition() {
|
|
132
|
+
return (a, b) => a.position - b.position;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Stryker restore all
|
|
136
|
+
//# sourceMappingURL=reordering.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reordering.service.js","sourceRoot":"","sources":["../src/reordering.service.ts"],"names":[],"mappings":"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"}
|
package/dist/repeat.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repeat.d.ts","sourceRoot":"","sources":["../src/repeat.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAE3D"}
|
package/dist/repeat.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repeat.js","sourceRoot":"","sources":["../src/repeat.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAI,KAAQ,EAAE,KAAa;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export declare const RevisionValueError: {
|
|
3
|
+
Type: string;
|
|
4
|
+
Invalid: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const RevisionValue: v.SchemaWithPipe<readonly [v.NumberSchema<string>, v.IntegerAction<number, string>, v.MinValueAction<number, 0, string>]>;
|
|
7
|
+
export type RevisionValueType = v.InferOutput<typeof RevisionValue>;
|
|
8
|
+
//# sourceMappingURL=revision-value.vo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision-value.vo.d.ts","sourceRoot":"","sources":["../src/revision-value.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,eAAO,MAAM,kBAAkB;;;CAAqE,CAAC;AAErG,eAAO,MAAM,aAAa,2HAIzB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export const RevisionValueError = { Type: "revision.value.type", Invalid: "revision.value.invalid" };
|
|
3
|
+
export const RevisionValue = v.pipe(v.number(RevisionValueError.Type), v.integer(RevisionValueError.Type), v.minValue(0, RevisionValueError.Invalid));
|
|
4
|
+
//# sourceMappingURL=revision-value.vo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision-value.vo.js","sourceRoot":"","sources":["../src/revision-value.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;AAErG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CACjC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,EACjC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAClC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAC1C,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ETag, WeakETag } from "./etags.vo";
|
|
2
|
+
import { type RevisionValueType } from "./revision-value.vo";
|
|
3
|
+
export declare const RevisionError: {
|
|
4
|
+
Missing: string;
|
|
5
|
+
Mismatch: string;
|
|
6
|
+
};
|
|
7
|
+
export declare class Revision {
|
|
8
|
+
static readonly INITIAL: RevisionValueType;
|
|
9
|
+
readonly value: RevisionValueType;
|
|
10
|
+
constructor(value: unknown);
|
|
11
|
+
equals(another: RevisionValueType): boolean;
|
|
12
|
+
validate(another: RevisionValueType): void;
|
|
13
|
+
next(): Revision;
|
|
14
|
+
static fromETag(etag: ETag | null): Revision;
|
|
15
|
+
static fromWeakETag(weakEtag: WeakETag | null): Revision;
|
|
16
|
+
toString(): string;
|
|
17
|
+
toJSON(): number;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=revision.vo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision.vo.d.ts","sourceRoot":"","sources":["../src/revision.vo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,eAAO,MAAM,aAAa;;;CAAiE,CAAC;AAE5F,qBAAa,QAAQ;IACnB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAA6B;IAEvE,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;gBAEtB,KAAK,EAAE,OAAO;IAI1B,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAI3C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI1C,IAAI,IAAI,QAAQ;IAIhB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,QAAQ;IAK5C,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,QAAQ;IAKxD,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,MAAM;CAGjB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import { RevisionValue } from "./revision-value.vo";
|
|
3
|
+
export const RevisionError = { Missing: "revision.missing", Mismatch: "revision.mismatch" };
|
|
4
|
+
export class Revision {
|
|
5
|
+
static INITIAL = v.parse(RevisionValue, 0);
|
|
6
|
+
value;
|
|
7
|
+
constructor(value) {
|
|
8
|
+
this.value = v.parse(RevisionValue, value);
|
|
9
|
+
}
|
|
10
|
+
equals(another) {
|
|
11
|
+
return this.value === another;
|
|
12
|
+
}
|
|
13
|
+
validate(another) {
|
|
14
|
+
if (!this.equals(another))
|
|
15
|
+
throw new Error(RevisionError.Mismatch);
|
|
16
|
+
}
|
|
17
|
+
next() {
|
|
18
|
+
return new Revision(this.value + 1);
|
|
19
|
+
}
|
|
20
|
+
static fromETag(etag) {
|
|
21
|
+
if (!etag)
|
|
22
|
+
throw new Error(RevisionError.Missing);
|
|
23
|
+
return new Revision(etag.revision);
|
|
24
|
+
}
|
|
25
|
+
static fromWeakETag(weakEtag) {
|
|
26
|
+
if (!weakEtag)
|
|
27
|
+
throw new Error(RevisionError.Missing);
|
|
28
|
+
return new Revision(weakEtag.revision);
|
|
29
|
+
}
|
|
30
|
+
toString() {
|
|
31
|
+
return this.value.toString();
|
|
32
|
+
}
|
|
33
|
+
toJSON() {
|
|
34
|
+
return this.value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=revision.vo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revision.vo.js","sourceRoot":"","sources":["../src/revision.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,aAAa,EAA0B,MAAM,qBAAqB,CAAC;AAE5E,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;AAE5F,MAAM,OAAO,QAAQ;IACnB,MAAM,CAAU,OAAO,GAAsB,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAE9D,KAAK,CAAoB;IAElC,YAAY,KAAc;QACxB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,OAA0B;QAC/B,OAAO,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC;IAChC,CAAC;IAED,QAAQ,CAAC,OAA0B;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,IAAI;QACF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAiB;QAC/B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,QAAyB;QAC3C,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC"}
|