@bgord/tools 1.3.23 → 1.4.0
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/src/age-years.vo.d.ts +11 -0
- package/dist/src/age-years.vo.js +6 -0
- package/dist/{age.vo.js → src/age.vo.js} +2 -1
- package/dist/src/api-key.vo.d.ts +7 -0
- package/dist/src/api-key.vo.js +7 -0
- package/dist/src/basename.vo.d.ts +12 -0
- package/dist/src/basename.vo.js +22 -0
- package/dist/src/day-iso-id.vo.d.ts +9 -0
- package/dist/{day-iso-id.vo.js → src/day-iso-id.vo.js} +4 -8
- package/dist/{day.vo.js → src/day.vo.js} +7 -6
- package/dist/src/directory-path-absolute.vo.d.ts +12 -0
- package/dist/{directory-path-absolute.vo.js → src/directory-path-absolute.vo.js} +5 -12
- package/dist/src/directory-path-relative.vo.d.ts +12 -0
- package/dist/{directory-path-relative.vo.js → src/directory-path-relative.vo.js} +5 -12
- package/dist/src/distance-value.vo.d.ts +7 -0
- package/dist/src/distance-value.vo.js +5 -0
- package/dist/{distance.vo.js → src/distance.vo.js} +7 -6
- package/dist/src/division-factor.vo.d.ts +7 -0
- package/dist/src/division-factor.vo.js +5 -0
- package/dist/src/duration-ms.vo.d.ts +6 -0
- package/dist/src/duration-ms.vo.js +5 -0
- package/dist/{duration.service.js → src/duration.service.js} +2 -1
- package/dist/src/email.vo.d.ts +6 -0
- package/dist/src/email.vo.js +4 -0
- package/dist/{etags.vo.js → src/etags.vo.js} +3 -2
- package/dist/src/extension.vo.d.ts +9 -0
- package/dist/src/extension.vo.js +15 -0
- package/dist/src/feature-flag-value.vo.d.ts +10 -0
- package/dist/{feature-flag-value.vo.js → src/feature-flag-value.vo.js} +2 -2
- package/dist/src/file-path-absolute-schema.vo.d.ts +17 -0
- package/dist/{file-path-absolute-schema.vo.js → src/file-path-absolute-schema.vo.js} +6 -13
- package/dist/src/file-path-relative-schema.vo.d.ts +17 -0
- package/dist/{file-path-relative-schema.vo.js → src/file-path-relative-schema.vo.js} +6 -13
- package/dist/{file-path.vo.js → src/file-path.vo.js} +5 -4
- package/dist/src/filename-affix.vo.d.ts +13 -0
- package/dist/{filename-affix.vo.js → src/filename-affix.vo.js} +4 -9
- package/dist/src/filename-from-string.vo.d.ts +10 -0
- package/dist/{filename-from-string.vo.js → src/filename-from-string.vo.js} +5 -8
- package/dist/{filename.vo.js → src/filename.vo.js} +8 -7
- package/dist/src/height-milimiters.vo.d.ts +7 -0
- package/dist/src/height-milimiters.vo.js +8 -0
- package/dist/{height.vo.js → src/height.vo.js} +4 -3
- package/dist/src/hour-value.vo.d.ts +7 -0
- package/dist/src/hour-value.vo.js +5 -0
- package/dist/{hour.vo.js → src/hour.vo.js} +3 -2
- package/dist/src/iban-schema.vo.d.ts +7 -0
- package/dist/src/iban-schema.vo.js +7 -0
- package/dist/{iban.vo.js → src/iban.vo.js} +2 -1
- package/dist/src/image.vo.d.ts +13 -0
- package/dist/src/image.vo.js +10 -0
- package/dist/src/integer-non-negative.vo.d.ts +7 -0
- package/dist/src/integer-non-negative.vo.js +8 -0
- package/dist/src/integer-positive.vo.d.ts +7 -0
- package/dist/src/integer-positive.vo.js +5 -0
- package/dist/src/integer.vo.d.ts +6 -0
- package/dist/src/integer.vo.js +4 -0
- package/dist/src/language.vo.d.ts +7 -0
- package/dist/src/language.vo.js +5 -0
- package/dist/src/mime-value.vo.d.ts +7 -0
- package/dist/{mime-value.vo.js → src/mime-value.vo.js} +4 -7
- package/dist/{mime.vo.js → src/mime.vo.js} +2 -1
- package/dist/src/mimes.js +19 -0
- package/dist/src/minute-value.vo.d.ts +7 -0
- package/dist/src/minute-value.vo.js +5 -0
- package/dist/{minute.vo.js → src/minute.vo.js} +3 -2
- package/dist/src/money-amount.vo.d.ts +7 -0
- package/dist/src/money-amount.vo.js +5 -0
- package/dist/{money.vo.js → src/money.vo.js} +7 -6
- package/dist/src/month-iso-id.vo.d.ts +8 -0
- package/dist/{month-iso-id.vo.js → src/month-iso-id.vo.js} +5 -9
- package/dist/{month.vo.js → src/month.vo.js} +5 -4
- package/dist/src/multiplication-factor.vo.d.ts +7 -0
- package/dist/src/multiplication-factor.vo.js +8 -0
- package/dist/src/object-key.vo.d.ts +11 -0
- package/dist/src/object-key.vo.js +19 -0
- package/dist/src/package-version-schema.vo.d.ts +8 -0
- package/dist/{package-version-schema.vo.js → src/package-version-schema.vo.js} +4 -7
- package/dist/{package-version.vo.js → src/package-version.vo.js} +3 -4
- package/dist/src/pagination-page.vo.d.ts +6 -0
- package/dist/src/pagination-page.vo.js +3 -0
- package/dist/src/pagination-skip.vo.d.ts +7 -0
- package/dist/src/pagination-skip.vo.js +3 -0
- package/dist/src/pagination-take.vo.d.ts +7 -0
- package/dist/src/pagination-take.vo.js +3 -0
- package/dist/{pagination.service.js → src/pagination.service.js} +8 -7
- package/dist/src/quarter-iso-id.vo.d.ts +8 -0
- package/dist/src/quarter-iso-id.vo.js +7 -0
- package/dist/{quarter.vo.js → src/quarter.vo.js} +3 -2
- package/dist/src/reordering-item-position-value.vo.d.ts +6 -0
- package/dist/src/reordering-item-position-value.vo.js +3 -0
- package/dist/{reordering.service.d.ts → src/reordering.service.d.ts} +9 -9
- package/dist/{reordering.service.js → src/reordering.service.js} +7 -7
- package/dist/src/revision-value.vo.d.ts +7 -0
- package/dist/src/revision-value.vo.js +3 -0
- package/dist/{revision.vo.js → src/revision.vo.js} +3 -2
- package/dist/{rounding-decimal.strategy.d.ts → src/rounding-decimal.strategy.d.ts} +2 -2
- package/dist/src/rounding-decimal.strategy.js +14 -0
- package/dist/src/size-bytes.vo.d.ts +6 -0
- package/dist/src/size-bytes.vo.js +5 -0
- package/dist/{size.vo.js → src/size.vo.js} +5 -4
- package/dist/src/time-zone-offset-value.vo.d.ts +8 -0
- package/dist/src/time-zone-offset-value.vo.js +13 -0
- package/dist/src/timestamp-value.vo.d.ts +6 -0
- package/dist/src/timestamp-value.vo.js +5 -0
- package/dist/{timestamp.vo.js → src/timestamp.vo.js} +2 -1
- package/dist/src/timezone.vo.d.ts +9 -0
- package/dist/{timezone.vo.js → src/timezone.vo.js} +7 -10
- package/dist/src/url-with-slash.vo.d.ts +6 -0
- package/dist/src/url-with-slash.vo.js +5 -0
- package/dist/src/url-without-slash.vo.d.ts +6 -0
- package/dist/src/url-without-slash.vo.js +5 -0
- package/dist/src/week-iso-id.vo.d.ts +8 -0
- package/dist/{week-iso-id.vo.js → src/week-iso-id.vo.js} +5 -9
- package/dist/{week.vo.js → src/week.vo.js} +5 -4
- package/dist/src/weekday-iso-id.vo.d.ts +7 -0
- package/dist/src/weekday-iso-id.vo.js +5 -0
- package/dist/{weekday.vo.js → src/weekday.vo.js} +9 -8
- package/dist/src/weight-grams.vo.d.ts +7 -0
- package/dist/src/weight-grams.vo.js +5 -0
- package/dist/{weight.vo.js → src/weight.vo.js} +8 -7
- package/dist/src/year-iso-id.vo.d.ts +7 -0
- package/dist/src/year-iso-id.vo.js +7 -0
- package/dist/{year.vo.js → src/year.vo.js} +6 -5
- package/dist/tests/age-years.vo.test.d.ts +1 -0
- package/dist/tests/age-years.vo.test.js +24 -0
- package/dist/tests/age.vo.test.d.ts +1 -0
- package/dist/tests/age.vo.test.js +106 -0
- package/dist/tests/api-key.vo.test.d.ts +1 -0
- package/dist/tests/api-key.vo.test.js +24 -0
- package/dist/tests/basename.vo.test.d.ts +1 -0
- package/dist/tests/basename.vo.test.js +53 -0
- package/dist/tests/batch.test.d.ts +1 -0
- package/dist/tests/batch.test.js +24 -0
- package/dist/tests/date-calculator.service.test.d.ts +1 -0
- package/dist/tests/date-calculator.service.test.js +32 -0
- package/dist/tests/date-formatter.service.test.d.ts +1 -0
- package/dist/tests/date-formatter.service.test.js +22 -0
- package/dist/tests/date-range.vo.test.d.ts +1 -0
- package/dist/tests/date-range.vo.test.js +49 -0
- package/dist/tests/day-iso-id.vo.test.d.ts +1 -0
- package/dist/tests/day-iso-id.vo.test.js +36 -0
- package/dist/tests/day.vo.test.d.ts +1 -0
- package/dist/tests/day.vo.test.js +68 -0
- package/dist/tests/directory-path-absolute.vo.test.d.ts +1 -0
- package/dist/tests/directory-path-absolute.vo.test.js +47 -0
- package/dist/tests/directory-path-relative.vo.test.d.ts +1 -0
- package/dist/tests/directory-path-relative.vo.test.js +44 -0
- package/dist/tests/distance-value.vo.test.d.ts +1 -0
- package/dist/tests/distance-value.vo.test.js +21 -0
- package/dist/tests/distance.vo.test.d.ts +1 -0
- package/dist/tests/distance.vo.test.js +74 -0
- package/dist/tests/division-factor.vo.test.d.ts +1 -0
- package/dist/tests/division-factor.vo.test.js +21 -0
- package/dist/tests/dll.service.test.d.ts +1 -0
- package/dist/tests/dll.service.test.js +381 -0
- package/dist/tests/duration-ms.vo.test.d.ts +1 -0
- package/dist/tests/duration-ms.vo.test.js +18 -0
- package/dist/tests/duration.service.test.d.ts +1 -0
- package/dist/tests/duration.service.test.js +126 -0
- package/dist/tests/email-mask.service.test.d.ts +1 -0
- package/dist/tests/email-mask.service.test.js +15 -0
- package/dist/tests/email.vo.test.d.ts +1 -0
- package/dist/tests/email.vo.test.js +17 -0
- package/dist/tests/etags.vo.test.d.ts +1 -0
- package/dist/tests/etags.vo.test.js +54 -0
- package/dist/tests/extension.vo.test.d.ts +1 -0
- package/dist/tests/extension.vo.test.js +51 -0
- package/dist/tests/feature-flag-value.vo.test.d.ts +1 -0
- package/dist/tests/feature-flag-value.vo.test.js +12 -0
- package/dist/tests/feature-flag.vo.test.d.ts +1 -0
- package/dist/tests/feature-flag.vo.test.js +13 -0
- package/dist/tests/file-path-absolute-schema.vo.test.d.ts +1 -0
- package/dist/tests/file-path-absolute-schema.vo.test.js +53 -0
- package/dist/tests/file-path-relative-schema.vo.test.d.ts +1 -0
- package/dist/tests/file-path-relative-schema.vo.test.js +52 -0
- package/dist/tests/file-path.vo.test.d.ts +1 -0
- package/dist/tests/file-path.vo.test.js +74 -0
- package/dist/tests/filename-affix.vo.test.d.ts +1 -0
- package/dist/tests/filename-affix.vo.test.js +30 -0
- package/dist/tests/filename-from-string.vo.test.d.ts +1 -0
- package/dist/tests/filename-from-string.vo.test.js +37 -0
- package/dist/tests/filename.vo.test.d.ts +1 -0
- package/dist/tests/filename.vo.test.js +93 -0
- package/dist/tests/height-milimiters.vo.test.d.ts +1 -0
- package/dist/tests/height-milimiters.vo.test.js +21 -0
- package/dist/tests/height.vo.test.d.ts +1 -0
- package/dist/tests/height.vo.test.js +64 -0
- package/dist/tests/hour-value.vo.test.d.ts +1 -0
- package/dist/tests/hour-value.vo.test.js +24 -0
- package/dist/tests/hour.vo.test.d.ts +1 -0
- package/dist/tests/hour.vo.test.js +64 -0
- package/dist/tests/iban-mask.service.test.d.ts +1 -0
- package/dist/tests/iban-mask.service.test.js +13 -0
- package/dist/tests/iban-schema.vo.test.d.ts +1 -0
- package/dist/tests/iban-schema.vo.test.js +43 -0
- package/dist/tests/iban.vo.test.d.ts +1 -0
- package/dist/tests/iban.vo.test.js +46 -0
- package/dist/tests/image.vo.test.d.ts +1 -0
- package/dist/tests/image.vo.test.js +41 -0
- package/dist/tests/integer-non-negative.vo.test.d.ts +1 -0
- package/dist/tests/integer-non-negative.vo.test.js +22 -0
- package/dist/tests/integer-positive.vo.test.d.ts +1 -0
- package/dist/tests/integer-positive.vo.test.js +21 -0
- package/dist/tests/integer.vo.test.d.ts +1 -0
- package/dist/tests/integer.vo.test.js +21 -0
- package/dist/tests/language.vo.test.d.ts +1 -0
- package/dist/tests/language.vo.test.js +28 -0
- package/dist/tests/linear-regression.service.test.d.ts +1 -0
- package/dist/tests/linear-regression.service.test.js +111 -0
- package/dist/tests/mean.service.test.d.ts +1 -0
- package/dist/tests/mean.service.test.js +23 -0
- package/dist/tests/mime-registry-entry.vo.test.d.ts +1 -0
- package/dist/tests/mime-registry-entry.vo.test.js +15 -0
- package/dist/tests/mime-registry.service.test.d.ts +1 -0
- package/dist/tests/mime-registry.service.test.js +45 -0
- package/dist/tests/mime-value.vo.test.d.ts +1 -0
- package/dist/tests/mime-value.vo.test.js +49 -0
- package/dist/tests/mime.vo.test.d.ts +1 -0
- package/dist/tests/mime.vo.test.js +53 -0
- package/dist/tests/mimes.test.d.ts +1 -0
- package/dist/tests/mimes.test.js +28 -0
- package/dist/tests/min-max-scaler.service.test.d.ts +1 -0
- package/dist/tests/min-max-scaler.service.test.js +116 -0
- package/dist/tests/minute-value.vo.test.d.ts +1 -0
- package/dist/tests/minute-value.vo.test.js +24 -0
- package/dist/tests/minute.vo.test.d.ts +1 -0
- package/dist/tests/minute.vo.test.js +64 -0
- package/dist/tests/mocks.d.ts +6 -0
- package/dist/tests/mocks.js +7 -0
- package/dist/tests/money-amount.vo.test.d.ts +1 -0
- package/dist/tests/money-amount.vo.test.js +21 -0
- package/dist/tests/money.vo.test.d.ts +1 -0
- package/dist/tests/money.vo.test.js +90 -0
- package/dist/tests/month-iso-id.vo.test.d.ts +1 -0
- package/dist/tests/month-iso-id.vo.test.js +36 -0
- package/dist/tests/month.vo.test.d.ts +1 -0
- package/dist/tests/month.vo.test.js +65 -0
- package/dist/tests/multiplication-factor.vo.test.d.ts +1 -0
- package/dist/tests/multiplication-factor.vo.test.js +19 -0
- package/dist/tests/noop.test.d.ts +1 -0
- package/dist/tests/noop.test.js +12 -0
- package/dist/tests/object-key.vo.test.d.ts +1 -0
- package/dist/tests/object-key.vo.test.js +56 -0
- package/dist/tests/outlier-detector.service.test.d.ts +1 -0
- package/dist/tests/outlier-detector.service.test.js +35 -0
- package/dist/tests/package-version-schema.vo.test.d.ts +1 -0
- package/dist/tests/package-version-schema.vo.test.js +32 -0
- package/dist/tests/package-version.vo.test.d.ts +1 -0
- package/dist/tests/package-version.vo.test.js +138 -0
- package/dist/tests/pagination-page.vo.test.d.ts +1 -0
- package/dist/tests/pagination-page.vo.test.js +26 -0
- package/dist/tests/pagination-skip.vo.test.d.ts +1 -0
- package/dist/tests/pagination-skip.vo.test.js +23 -0
- package/dist/tests/pagination-take.vo.test.d.ts +1 -0
- package/dist/tests/pagination-take.vo.test.js +25 -0
- package/dist/tests/pagination.service.test.d.ts +1 -0
- package/dist/tests/pagination.service.test.js +92 -0
- package/dist/tests/percentage.service.test.d.ts +1 -0
- package/dist/tests/percentage.service.test.js +16 -0
- package/dist/tests/population-standard-deviation.service.test.d.ts +1 -0
- package/dist/tests/population-standard-deviation.service.test.js +20 -0
- package/dist/tests/quarter-iso-id.vo.test.d.ts +1 -0
- package/dist/tests/quarter-iso-id.vo.test.js +30 -0
- package/dist/tests/quarter.vo.test.d.ts +1 -0
- package/dist/tests/quarter.vo.test.js +54 -0
- package/dist/tests/random.service.test.d.ts +1 -0
- package/dist/tests/random.service.test.js +93 -0
- package/dist/tests/rate-limiter.service.test.d.ts +1 -0
- package/dist/tests/rate-limiter.service.test.js +39 -0
- package/dist/tests/relative-date.vo.test.d.ts +1 -0
- package/dist/tests/relative-date.vo.test.js +22 -0
- package/dist/tests/reordering-item-position-value.vo.test.d.ts +1 -0
- package/dist/tests/reordering-item-position-value.vo.test.js +21 -0
- package/dist/tests/reordering.service.test.d.ts +1 -0
- package/dist/tests/reordering.service.test.js +76 -0
- package/dist/tests/repeat.test.d.ts +1 -0
- package/dist/tests/repeat.test.js +8 -0
- package/dist/tests/revision-value.vo.test.d.ts +1 -0
- package/dist/tests/revision-value.vo.test.js +21 -0
- package/dist/tests/revision.vo.test.d.ts +1 -0
- package/dist/tests/revision.vo.test.js +52 -0
- package/dist/tests/rounding-decimal.strategy.test.d.ts +1 -0
- package/dist/tests/rounding-decimal.strategy.test.js +17 -0
- package/dist/tests/rounding-down.strategy.test.d.ts +1 -0
- package/dist/tests/rounding-down.strategy.test.js +9 -0
- package/dist/tests/rounding-to-nearest.strategy.test.d.ts +1 -0
- package/dist/tests/rounding-to-nearest.strategy.test.js +9 -0
- package/dist/tests/rounding-up.strategy.test.d.ts +1 -0
- package/dist/tests/rounding-up.strategy.test.js +9 -0
- package/dist/tests/size-bytes.vo.test.d.ts +1 -0
- package/dist/tests/size-bytes.vo.test.js +21 -0
- package/dist/tests/size.vo.test.d.ts +1 -0
- package/dist/tests/size.vo.test.js +93 -0
- package/dist/tests/slug.service.test.d.ts +1 -0
- package/dist/tests/slug.service.test.js +45 -0
- package/dist/tests/sum.service.test.d.ts +1 -0
- package/dist/tests/sum.service.test.js +22 -0
- package/dist/tests/thousands-separator.service.test.d.ts +1 -0
- package/dist/tests/thousands-separator.service.test.js +27 -0
- package/dist/tests/time-zone-offset-value.test.d.ts +1 -0
- package/dist/tests/time-zone-offset-value.test.js +27 -0
- package/dist/tests/timestamp-value.vo.test.d.ts +1 -0
- package/dist/tests/timestamp-value.vo.test.js +21 -0
- package/dist/tests/timestamp.vo.test.d.ts +1 -0
- package/dist/tests/timestamp.vo.test.js +73 -0
- package/dist/tests/timezone.vo.test.d.ts +1 -0
- package/dist/tests/timezone.vo.test.js +29 -0
- package/dist/tests/url-with-slash.vo.test.d.ts +1 -0
- package/dist/tests/url-with-slash.vo.test.js +24 -0
- package/dist/tests/url-without-slash.vo.test.d.ts +1 -0
- package/dist/tests/url-without-slash.vo.test.js +25 -0
- package/dist/tests/visually-unambiguous-characters-generator.service.test.d.ts +1 -0
- package/dist/tests/visually-unambiguous-characters-generator.service.test.js +89 -0
- package/dist/tests/week-iso-id.vo.test.d.ts +1 -0
- package/dist/tests/week-iso-id.vo.test.js +37 -0
- package/dist/tests/week.vo.test.d.ts +1 -0
- package/dist/tests/week.vo.test.js +64 -0
- package/dist/tests/weekday-iso-id.vo.test.d.ts +1 -0
- package/dist/tests/weekday-iso-id.vo.test.js +24 -0
- package/dist/tests/weekday.vo.test.d.ts +1 -0
- package/dist/tests/weekday.vo.test.js +51 -0
- package/dist/tests/weight-grams.vo.test.d.ts +1 -0
- package/dist/tests/weight-grams.vo.test.js +21 -0
- package/dist/tests/weight.vo.test.d.ts +1 -0
- package/dist/tests/weight.vo.test.js +66 -0
- package/dist/tests/year-iso-id.vo.test.d.ts +1 -0
- package/dist/tests/year-iso-id.vo.test.js +23 -0
- package/dist/tests/year.vo.test.d.ts +1 -0
- package/dist/tests/year.vo.test.js +79 -0
- package/dist/tests/z-score.service.test.d.ts +1 -0
- package/dist/tests/z-score.service.test.js +26 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -12
- package/dist/age-years.vo.d.ts +0 -11
- package/dist/age-years.vo.js +0 -11
- package/dist/api-key.vo.d.ts +0 -8
- package/dist/api-key.vo.js +0 -11
- package/dist/basename.vo.d.ts +0 -12
- package/dist/basename.vo.js +0 -27
- package/dist/day-iso-id.vo.d.ts +0 -9
- package/dist/directory-path-absolute.vo.d.ts +0 -12
- package/dist/directory-path-relative.vo.d.ts +0 -12
- package/dist/distance-value.vo.d.ts +0 -7
- package/dist/distance-value.vo.js +0 -9
- package/dist/division-factor.vo.d.ts +0 -7
- package/dist/division-factor.vo.js +0 -8
- package/dist/duration-ms.vo.d.ts +0 -6
- package/dist/duration-ms.vo.js +0 -4
- package/dist/email.vo.d.ts +0 -6
- package/dist/email.vo.js +0 -4
- package/dist/extension.vo.d.ts +0 -9
- package/dist/extension.vo.js +0 -21
- package/dist/feature-flag-value.vo.d.ts +0 -10
- package/dist/file-path-absolute-schema.vo.d.ts +0 -14
- package/dist/file-path-relative-schema.vo.d.ts +0 -14
- package/dist/filename-affix.vo.d.ts +0 -13
- package/dist/filename-from-string.vo.d.ts +0 -10
- package/dist/height-milimiters.vo.d.ts +0 -7
- package/dist/height-milimiters.vo.js +0 -12
- package/dist/hour-value.vo.d.ts +0 -7
- package/dist/hour-value.vo.js +0 -10
- package/dist/iban-schema.vo.d.ts +0 -7
- package/dist/iban-schema.vo.js +0 -12
- package/dist/image.vo.d.ts +0 -13
- package/dist/image.vo.js +0 -20
- package/dist/integer-non-negative.vo.d.ts +0 -7
- package/dist/integer-non-negative.vo.js +0 -12
- package/dist/integer-positive.vo.d.ts +0 -7
- package/dist/integer-positive.vo.js +0 -9
- package/dist/integer.vo.d.ts +0 -6
- package/dist/integer.vo.js +0 -4
- package/dist/language.vo.d.ts +0 -8
- package/dist/language.vo.js +0 -11
- package/dist/mime-value.vo.d.ts +0 -6
- package/dist/mimes.js +0 -18
- package/dist/minute-value.vo.d.ts +0 -7
- package/dist/minute-value.vo.js +0 -10
- package/dist/money-amount.vo.d.ts +0 -7
- package/dist/money-amount.vo.js +0 -9
- package/dist/month-iso-id.vo.d.ts +0 -8
- package/dist/multiplication-factor.vo.d.ts +0 -7
- package/dist/multiplication-factor.vo.js +0 -11
- package/dist/object-key.vo.d.ts +0 -11
- package/dist/object-key.vo.js +0 -24
- package/dist/package-version-schema.vo.d.ts +0 -8
- package/dist/pagination-page.vo.d.ts +0 -6
- package/dist/pagination-page.vo.js +0 -7
- package/dist/pagination-skip.vo.d.ts +0 -7
- package/dist/pagination-skip.vo.js +0 -6
- package/dist/pagination-take.vo.d.ts +0 -7
- package/dist/pagination-take.vo.js +0 -6
- package/dist/quarter-iso-id.vo.d.ts +0 -7
- package/dist/quarter-iso-id.vo.js +0 -11
- package/dist/reordering-item-position-value.vo.d.ts +0 -6
- package/dist/reordering-item-position-value.vo.js +0 -6
- package/dist/revision-value.vo.d.ts +0 -7
- package/dist/revision-value.vo.js +0 -6
- package/dist/rounding-decimal.strategy.js +0 -19
- package/dist/size-bytes.vo.d.ts +0 -6
- package/dist/size-bytes.vo.js +0 -9
- package/dist/time-zone-offset-value.vo.d.ts +0 -8
- package/dist/time-zone-offset-value.vo.js +0 -17
- package/dist/timestamp-value.vo.d.ts +0 -6
- package/dist/timestamp-value.vo.js +0 -9
- package/dist/timezone.vo.d.ts +0 -9
- package/dist/url-with-slash.vo.d.ts +0 -6
- package/dist/url-with-slash.vo.js +0 -8
- package/dist/url-without-slash.vo.d.ts +0 -6
- package/dist/url-without-slash.vo.js +0 -8
- package/dist/week-iso-id.vo.d.ts +0 -8
- package/dist/weekday-iso-id.vo.d.ts +0 -7
- package/dist/weekday-iso-id.vo.js +0 -10
- package/dist/weight-grams.vo.d.ts +0 -7
- package/dist/weight-grams.vo.js +0 -9
- package/dist/year-iso-id.vo.d.ts +0 -7
- package/dist/year-iso-id.vo.js +0 -10
- package/dist/{age.vo.d.ts → src/age.vo.d.ts} +0 -0
- package/dist/{batch.d.ts → src/batch.d.ts} +0 -0
- package/dist/{batch.js → src/batch.js} +0 -0
- package/dist/{date-calculator.service.d.ts → src/date-calculator.service.d.ts} +0 -0
- package/dist/{date-calculator.service.js → src/date-calculator.service.js} +0 -0
- package/dist/{date-formatter.service.d.ts → src/date-formatter.service.d.ts} +0 -0
- package/dist/{date-formatter.service.js → src/date-formatter.service.js} +0 -0
- package/dist/{date-range.vo.d.ts → src/date-range.vo.d.ts} +0 -0
- package/dist/{date-range.vo.js → src/date-range.vo.js} +0 -0
- package/dist/{day.vo.d.ts → src/day.vo.d.ts} +1 -1
- /package/dist/{distance.vo.d.ts → src/distance.vo.d.ts} +0 -0
- /package/dist/{dll.service.d.ts → src/dll.service.d.ts} +0 -0
- /package/dist/{dll.service.js → src/dll.service.js} +0 -0
- /package/dist/{duration.service.d.ts → src/duration.service.d.ts} +0 -0
- /package/dist/{email-mask.service.d.ts → src/email-mask.service.d.ts} +0 -0
- /package/dist/{email-mask.service.js → src/email-mask.service.js} +0 -0
- /package/dist/{etags.vo.d.ts → src/etags.vo.d.ts} +0 -0
- /package/dist/{feature-flag.vo.d.ts → src/feature-flag.vo.d.ts} +0 -0
- /package/dist/{feature-flag.vo.js → src/feature-flag.vo.js} +0 -0
- /package/dist/{file-path.vo.d.ts → src/file-path.vo.d.ts} +0 -0
- /package/dist/{filename.vo.d.ts → src/filename.vo.d.ts} +0 -0
- /package/dist/{height.vo.d.ts → src/height.vo.d.ts} +0 -0
- /package/dist/{hour.vo.d.ts → src/hour.vo.d.ts} +0 -0
- /package/dist/{iban-mask.service.d.ts → src/iban-mask.service.d.ts} +0 -0
- /package/dist/{iban-mask.service.js → src/iban-mask.service.js} +0 -0
- /package/dist/{iban.vo.d.ts → src/iban.vo.d.ts} +0 -0
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{linear-regression.service.d.ts → src/linear-regression.service.d.ts} +0 -0
- /package/dist/{linear-regression.service.js → src/linear-regression.service.js} +0 -0
- /package/dist/{mean.service.d.ts → src/mean.service.d.ts} +0 -0
- /package/dist/{mean.service.js → src/mean.service.js} +0 -0
- /package/dist/{mime-registry-entry.vo.d.ts → src/mime-registry-entry.vo.d.ts} +0 -0
- /package/dist/{mime-registry-entry.vo.js → src/mime-registry-entry.vo.js} +0 -0
- /package/dist/{mime-registry.service.d.ts → src/mime-registry.service.d.ts} +0 -0
- /package/dist/{mime-registry.service.js → src/mime-registry.service.js} +0 -0
- /package/dist/{mime.vo.d.ts → src/mime.vo.d.ts} +0 -0
- /package/dist/{mimes.d.ts → src/mimes.d.ts} +0 -0
- /package/dist/{min-max-scaler.service.d.ts → src/min-max-scaler.service.d.ts} +0 -0
- /package/dist/{min-max-scaler.service.js → src/min-max-scaler.service.js} +0 -0
- /package/dist/{minute.vo.d.ts → src/minute.vo.d.ts} +0 -0
- /package/dist/{money.vo.d.ts → src/money.vo.d.ts} +0 -0
- /package/dist/{month.vo.d.ts → src/month.vo.d.ts} +0 -0
- /package/dist/{noop.service.d.ts → src/noop.service.d.ts} +0 -0
- /package/dist/{noop.service.js → src/noop.service.js} +0 -0
- /package/dist/{outlier-detector.service.d.ts → src/outlier-detector.service.d.ts} +0 -0
- /package/dist/{outlier-detector.service.js → src/outlier-detector.service.js} +0 -0
- /package/dist/{package-version.vo.d.ts → src/package-version.vo.d.ts} +0 -0
- /package/dist/{pagination.service.d.ts → src/pagination.service.d.ts} +0 -0
- /package/dist/{percentage.service.d.ts → src/percentage.service.d.ts} +0 -0
- /package/dist/{percentage.service.js → src/percentage.service.js} +0 -0
- /package/dist/{population-standard-deviation.service.d.ts → src/population-standard-deviation.service.d.ts} +0 -0
- /package/dist/{population-standard-deviation.service.js → src/population-standard-deviation.service.js} +0 -0
- /package/dist/{quarter.vo.d.ts → src/quarter.vo.d.ts} +0 -0
- /package/dist/{random.service.d.ts → src/random.service.d.ts} +0 -0
- /package/dist/{random.service.js → src/random.service.js} +0 -0
- /package/dist/{rate-limiter.service.d.ts → src/rate-limiter.service.d.ts} +0 -0
- /package/dist/{rate-limiter.service.js → src/rate-limiter.service.js} +0 -0
- /package/dist/{relative-date.vo.d.ts → src/relative-date.vo.d.ts} +0 -0
- /package/dist/{relative-date.vo.js → src/relative-date.vo.js} +0 -0
- /package/dist/{repeat.d.ts → src/repeat.d.ts} +0 -0
- /package/dist/{repeat.js → src/repeat.js} +0 -0
- /package/dist/{revision.vo.d.ts → src/revision.vo.d.ts} +0 -0
- /package/dist/{rounding-down.strategy.d.ts → src/rounding-down.strategy.d.ts} +0 -0
- /package/dist/{rounding-down.strategy.js → src/rounding-down.strategy.js} +0 -0
- /package/dist/{rounding-to-nearest.strategy.d.ts → src/rounding-to-nearest.strategy.d.ts} +0 -0
- /package/dist/{rounding-to-nearest.strategy.js → src/rounding-to-nearest.strategy.js} +0 -0
- /package/dist/{rounding-up.strategy.d.ts → src/rounding-up.strategy.d.ts} +0 -0
- /package/dist/{rounding-up.strategy.js → src/rounding-up.strategy.js} +0 -0
- /package/dist/{rounding.strategy.d.ts → src/rounding.strategy.d.ts} +0 -0
- /package/dist/{rounding.strategy.js → src/rounding.strategy.js} +0 -0
- /package/dist/{size.vo.d.ts → src/size.vo.d.ts} +0 -0
- /package/dist/{slug.service.d.ts → src/slug.service.d.ts} +0 -0
- /package/dist/{slug.service.js → src/slug.service.js} +0 -0
- /package/dist/{sum.service.d.ts → src/sum.service.d.ts} +0 -0
- /package/dist/{sum.service.js → src/sum.service.js} +0 -0
- /package/dist/{thousands-separator.service.d.ts → src/thousands-separator.service.d.ts} +0 -0
- /package/dist/{thousands-separator.service.js → src/thousands-separator.service.js} +0 -0
- /package/dist/{timestamp.vo.d.ts → src/timestamp.vo.d.ts} +0 -0
- /package/dist/{ts-utils.d.ts → src/ts-utils.d.ts} +0 -0
- /package/dist/{ts-utils.js → src/ts-utils.js} +0 -0
- /package/dist/{visually-unambiguous-characters-generator.service.d.ts → src/visually-unambiguous-characters-generator.service.d.ts} +0 -0
- /package/dist/{visually-unambiguous-characters-generator.service.js → src/visually-unambiguous-characters-generator.service.js} +0 -0
- /package/dist/{week.vo.d.ts → src/week.vo.d.ts} +0 -0
- /package/dist/{weekday.vo.d.ts → src/weekday.vo.d.ts} +0 -0
- /package/dist/{weight.vo.d.ts → src/weight.vo.d.ts} +0 -0
- /package/dist/{year.vo.d.ts → src/year.vo.d.ts} +0 -0
- /package/dist/{z-score.service.d.ts → src/z-score.service.d.ts} +0 -0
- /package/dist/{z-score.service.js → src/z-score.service.js} +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
import { Distance } from "../src/distance.vo";
|
|
4
|
+
import { DistanceValue } from "../src/distance-value.vo";
|
|
5
|
+
import { RoundingDecimalStrategy } from "../src/rounding-decimal.strategy";
|
|
6
|
+
describe("Distance", () => {
|
|
7
|
+
test("happy path", () => {
|
|
8
|
+
expect(Distance.fromMeters(0).get()).toEqual(v.parse(DistanceValue, 0));
|
|
9
|
+
expect(Distance.fromMeters(100).get()).toEqual(v.parse(DistanceValue, 100));
|
|
10
|
+
});
|
|
11
|
+
test("throws on invalid input", () => {
|
|
12
|
+
expect(() => Distance.fromMeters(100.5)).toThrow("distance.value.type");
|
|
13
|
+
});
|
|
14
|
+
test("fromMetersSafe", () => {
|
|
15
|
+
expect(Distance.fromMetersSafe(v.parse(DistanceValue, 1)).get()).toEqual(v.parse(DistanceValue, 1));
|
|
16
|
+
});
|
|
17
|
+
test("fromKilometers", () => {
|
|
18
|
+
expect(Distance.fromKilometers(1).get()).toEqual(v.parse(DistanceValue, 1000));
|
|
19
|
+
expect(Distance.fromKilometers(1.5).get()).toEqual(v.parse(DistanceValue, 1500));
|
|
20
|
+
expect(Distance.fromKilometers(0.123456789).get()).toEqual(v.parse(DistanceValue, 123));
|
|
21
|
+
});
|
|
22
|
+
test("fromKilometers - throws on invalid input", () => {
|
|
23
|
+
expect(() => Distance.fromKilometers(0.123456789, new RoundingDecimalStrategy(5))).toThrow("distance.value.type");
|
|
24
|
+
});
|
|
25
|
+
test("fromMiles", () => {
|
|
26
|
+
expect(Distance.fromMiles(1).get()).toEqual(v.parse(DistanceValue, 1609));
|
|
27
|
+
expect(Distance.fromMiles(1.5).get()).toEqual(v.parse(DistanceValue, 2414));
|
|
28
|
+
expect(Distance.fromMiles(0.123456789).get()).toEqual(v.parse(DistanceValue, 199));
|
|
29
|
+
});
|
|
30
|
+
test("fromMiles - throws on invalid input", () => {
|
|
31
|
+
expect(() => Distance.fromMiles(1, new RoundingDecimalStrategy(1))).toThrow("distance.value.type");
|
|
32
|
+
});
|
|
33
|
+
test("add", () => {
|
|
34
|
+
expect(Distance.fromMeters(100).add(Distance.fromMeters(0)).get()).toEqual(v.parse(DistanceValue, 100));
|
|
35
|
+
expect(Distance.fromMeters(15).add(Distance.fromMeters(10)).get()).toEqual(v.parse(DistanceValue, 25));
|
|
36
|
+
});
|
|
37
|
+
test("subtract - result more than zero", () => {
|
|
38
|
+
expect(Distance.fromMeters(100).subtract(Distance.fromMeters(20)).get()).toEqual(v.parse(DistanceValue, 80));
|
|
39
|
+
});
|
|
40
|
+
test("subtract - result zero", () => {
|
|
41
|
+
expect(Distance.fromMeters(100).subtract(Distance.fromMeters(100)).isZero()).toEqual(true);
|
|
42
|
+
});
|
|
43
|
+
test("subtract - result less than zero", () => {
|
|
44
|
+
expect(() => Distance.fromMeters(100).subtract(Distance.fromMeters(120)).get()).toThrow("distance.subtract.result.less.than.zero");
|
|
45
|
+
});
|
|
46
|
+
test("equals", () => {
|
|
47
|
+
const oneHundred = Distance.fromMeters(100);
|
|
48
|
+
const twoHundred = Distance.fromMeters(200);
|
|
49
|
+
expect(oneHundred.equals(oneHundred)).toEqual(true);
|
|
50
|
+
expect(oneHundred.equals(twoHundred)).toEqual(false);
|
|
51
|
+
});
|
|
52
|
+
test("isLongerThan", () => {
|
|
53
|
+
const oneHundred = Distance.fromMeters(100);
|
|
54
|
+
const twoHundred = Distance.fromMeters(200);
|
|
55
|
+
expect(oneHundred.isLongerThan(oneHundred)).toEqual(false);
|
|
56
|
+
expect(twoHundred.isLongerThan(oneHundred)).toEqual(true);
|
|
57
|
+
});
|
|
58
|
+
test("isShorterThan", () => {
|
|
59
|
+
const oneHundred = Distance.fromMeters(100);
|
|
60
|
+
const twoHundred = Distance.fromMeters(200);
|
|
61
|
+
expect(oneHundred.isShorterThan(oneHundred)).toEqual(false);
|
|
62
|
+
expect(oneHundred.isShorterThan(twoHundred)).toEqual(true);
|
|
63
|
+
});
|
|
64
|
+
test("isZero", () => {
|
|
65
|
+
expect(Distance.fromMeters(0).isZero()).toEqual(true);
|
|
66
|
+
expect(Distance.fromMeters(1).isZero()).toEqual(false);
|
|
67
|
+
});
|
|
68
|
+
test("toString", () => {
|
|
69
|
+
expect(Distance.fromMeters(5).toString()).toEqual("5");
|
|
70
|
+
});
|
|
71
|
+
test("toJSON", () => {
|
|
72
|
+
expect(Distance.fromMeters(5).toJSON()).toEqual(5);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
import { DivisionFactor } from "../src/division-factor.vo";
|
|
4
|
+
describe("DivisionFactor", () => {
|
|
5
|
+
test("happy path", () => {
|
|
6
|
+
expect(v.safeParse(DivisionFactor, 10).success).toEqual(true);
|
|
7
|
+
expect(v.safeParse(DivisionFactor, 1.5).success).toEqual(true);
|
|
8
|
+
});
|
|
9
|
+
test("rejects non-number - null", () => {
|
|
10
|
+
expect(() => v.parse(DivisionFactor, null)).toThrow("division.factor.type");
|
|
11
|
+
});
|
|
12
|
+
test("rejects non-number - string", () => {
|
|
13
|
+
expect(() => v.parse(DivisionFactor, "123")).toThrow("division.factor.type");
|
|
14
|
+
});
|
|
15
|
+
test("rejects zero", () => {
|
|
16
|
+
expect(() => v.parse(DivisionFactor, 0)).toThrow("division.factor.invalid");
|
|
17
|
+
});
|
|
18
|
+
test("rejects negative numbers", () => {
|
|
19
|
+
expect(() => v.parse(DivisionFactor, -1)).toThrow("division.factor.invalid");
|
|
20
|
+
});
|
|
21
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import { DoublyLinkedList, Node } from "../src/dll.service";
|
|
3
|
+
class Token {
|
|
4
|
+
value;
|
|
5
|
+
constructor(value) {
|
|
6
|
+
this.value = value;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
const token = new Token("test");
|
|
10
|
+
describe("DLL", () => {
|
|
11
|
+
test("creates an empty List", () => {
|
|
12
|
+
const dll = new DoublyLinkedList();
|
|
13
|
+
expect(dll.getSize()).toEqual(0);
|
|
14
|
+
expect(dll.getHead()).toEqual(null);
|
|
15
|
+
expect(dll.getTail()).toEqual(null);
|
|
16
|
+
});
|
|
17
|
+
test("isEmpty", () => {
|
|
18
|
+
const dll = new DoublyLinkedList();
|
|
19
|
+
expect(dll.isEmpty()).toEqual(true);
|
|
20
|
+
dll.append(new Node(token));
|
|
21
|
+
expect(dll.isEmpty()).toEqual(false);
|
|
22
|
+
});
|
|
23
|
+
test("appends the first Node", () => {
|
|
24
|
+
const dll = new DoublyLinkedList();
|
|
25
|
+
const node = new Node(token);
|
|
26
|
+
dll.append(node);
|
|
27
|
+
expect(dll.getSize()).toEqual(1);
|
|
28
|
+
expect(dll.getHead()).toEqual(node);
|
|
29
|
+
expect(dll.getTail()).toEqual(node);
|
|
30
|
+
});
|
|
31
|
+
test("appends two Nodes", () => {
|
|
32
|
+
const dll = new DoublyLinkedList();
|
|
33
|
+
const firstNode = new Node(token);
|
|
34
|
+
const secondNode = new Node(token);
|
|
35
|
+
dll.append(firstNode);
|
|
36
|
+
expect(dll.getSize()).toEqual(1);
|
|
37
|
+
expect(dll.getHead()).toEqual(firstNode);
|
|
38
|
+
expect(dll.getTail()).toEqual(firstNode);
|
|
39
|
+
dll.append(secondNode);
|
|
40
|
+
expect(dll.getSize()).toEqual(2);
|
|
41
|
+
expect(dll.getHead()).toEqual(firstNode);
|
|
42
|
+
expect(dll.getTail()).toEqual(secondNode);
|
|
43
|
+
expect(firstNode.backward(1)).toEqual(null);
|
|
44
|
+
expect(firstNode.forward(1)).toEqual(secondNode);
|
|
45
|
+
expect(secondNode.backward(1)).toEqual(firstNode);
|
|
46
|
+
expect(secondNode.forward(1)).toEqual(null);
|
|
47
|
+
});
|
|
48
|
+
test("appends three Nodes", () => {
|
|
49
|
+
const dll = new DoublyLinkedList();
|
|
50
|
+
const firstNode = new Node(token);
|
|
51
|
+
const secondNode = new Node(token);
|
|
52
|
+
const thirdNode = new Node(token);
|
|
53
|
+
dll.append(firstNode);
|
|
54
|
+
expect(dll.getSize()).toEqual(1);
|
|
55
|
+
expect(dll.getHead()).toEqual(firstNode);
|
|
56
|
+
expect(dll.getTail()).toEqual(firstNode);
|
|
57
|
+
dll.append(secondNode);
|
|
58
|
+
expect(dll.getSize()).toEqual(2);
|
|
59
|
+
expect(dll.getHead()).toEqual(firstNode);
|
|
60
|
+
expect(dll.getTail()).toEqual(secondNode);
|
|
61
|
+
expect(firstNode.backward(1)).toEqual(null);
|
|
62
|
+
expect(firstNode.forward(1)).toEqual(secondNode);
|
|
63
|
+
expect(secondNode.backward(1)).toEqual(firstNode);
|
|
64
|
+
expect(secondNode.forward(1)).toEqual(null);
|
|
65
|
+
dll.append(thirdNode);
|
|
66
|
+
expect(dll.getSize()).toEqual(3);
|
|
67
|
+
expect(dll.getHead()).toEqual(firstNode);
|
|
68
|
+
expect(dll.getTail()).toEqual(thirdNode);
|
|
69
|
+
expect(firstNode.backward(1)).toEqual(null);
|
|
70
|
+
expect(firstNode.forward(1)).toEqual(secondNode);
|
|
71
|
+
expect(secondNode.backward(1)).toEqual(firstNode);
|
|
72
|
+
expect(secondNode.forward(1)).toEqual(thirdNode);
|
|
73
|
+
expect(thirdNode.backward(1)).toEqual(secondNode);
|
|
74
|
+
expect(thirdNode.forward(1)).toEqual(null);
|
|
75
|
+
});
|
|
76
|
+
test("appends four Nodes", () => {
|
|
77
|
+
const dll = new DoublyLinkedList();
|
|
78
|
+
const firstNode = new Node(token);
|
|
79
|
+
const secondNode = new Node(token);
|
|
80
|
+
const thirdNode = new Node(token);
|
|
81
|
+
const fourthNode = new Node(token);
|
|
82
|
+
dll.append(firstNode);
|
|
83
|
+
expect(dll.getSize()).toEqual(1);
|
|
84
|
+
expect(dll.getHead()).toEqual(firstNode);
|
|
85
|
+
expect(dll.getTail()).toEqual(firstNode);
|
|
86
|
+
dll.append(secondNode);
|
|
87
|
+
expect(dll.getSize()).toEqual(2);
|
|
88
|
+
expect(dll.getHead()).toEqual(firstNode);
|
|
89
|
+
expect(dll.getTail()).toEqual(secondNode);
|
|
90
|
+
expect(firstNode.backward(1)).toEqual(null);
|
|
91
|
+
expect(firstNode.forward(1)).toEqual(secondNode);
|
|
92
|
+
expect(secondNode.backward(1)).toEqual(firstNode);
|
|
93
|
+
expect(secondNode.forward(1)).toEqual(null);
|
|
94
|
+
dll.append(thirdNode);
|
|
95
|
+
expect(dll.getSize()).toEqual(3);
|
|
96
|
+
expect(dll.getHead()).toEqual(firstNode);
|
|
97
|
+
expect(dll.getTail()).toEqual(thirdNode);
|
|
98
|
+
expect(firstNode.backward(1)).toEqual(null);
|
|
99
|
+
expect(firstNode.forward(1)).toEqual(secondNode);
|
|
100
|
+
expect(secondNode.backward(1)).toEqual(firstNode);
|
|
101
|
+
expect(secondNode.forward(1)).toEqual(thirdNode);
|
|
102
|
+
expect(thirdNode.backward(1)).toEqual(secondNode);
|
|
103
|
+
expect(thirdNode.forward(1)).toEqual(null);
|
|
104
|
+
dll.append(fourthNode);
|
|
105
|
+
expect(dll.getSize()).toEqual(4);
|
|
106
|
+
expect(dll.getHead()).toEqual(firstNode);
|
|
107
|
+
expect(dll.getTail()).toEqual(fourthNode);
|
|
108
|
+
expect(firstNode.backward(1)).toEqual(null);
|
|
109
|
+
expect(firstNode.forward(1)).toEqual(secondNode);
|
|
110
|
+
expect(secondNode.backward(1)).toEqual(firstNode);
|
|
111
|
+
expect(secondNode.forward(1)).toEqual(thirdNode);
|
|
112
|
+
expect(thirdNode.backward(1)).toEqual(secondNode);
|
|
113
|
+
expect(thirdNode.forward(1)).toEqual(fourthNode);
|
|
114
|
+
expect(fourthNode.backward(1)).toEqual(thirdNode);
|
|
115
|
+
expect(fourthNode.forward(1)).toEqual(null);
|
|
116
|
+
});
|
|
117
|
+
test("prepend on empty dll", () => {
|
|
118
|
+
const dll = new DoublyLinkedList();
|
|
119
|
+
const node1 = new Node(token);
|
|
120
|
+
expect(dll.getSize()).toEqual(0);
|
|
121
|
+
expect(dll.getHead()).toEqual(null);
|
|
122
|
+
expect(dll.getTail()).toEqual(null);
|
|
123
|
+
dll.prepend(node1);
|
|
124
|
+
expect(dll.getSize()).toEqual(1);
|
|
125
|
+
expect(dll.getHead()).toEqual(node1);
|
|
126
|
+
expect(dll.getTail()).toEqual(node1);
|
|
127
|
+
});
|
|
128
|
+
test("prepend one node", () => {
|
|
129
|
+
const dll = new DoublyLinkedList();
|
|
130
|
+
const node1 = new Node(token);
|
|
131
|
+
const node2 = new Node(token);
|
|
132
|
+
dll.append(node1);
|
|
133
|
+
expect(dll.getSize()).toEqual(1);
|
|
134
|
+
expect(dll.getHead()).toEqual(node1);
|
|
135
|
+
expect(dll.getTail()).toEqual(node1);
|
|
136
|
+
dll.prepend(node2);
|
|
137
|
+
expect(dll.getSize()).toEqual(2);
|
|
138
|
+
expect(dll.getHead()).toEqual(node2);
|
|
139
|
+
expect(dll.getTail()).toEqual(node1);
|
|
140
|
+
});
|
|
141
|
+
test("prepend two node", () => {
|
|
142
|
+
const dll = new DoublyLinkedList();
|
|
143
|
+
const node1 = new Node(token);
|
|
144
|
+
const node2 = new Node(token);
|
|
145
|
+
const node3 = new Node(token);
|
|
146
|
+
dll.append(node1);
|
|
147
|
+
expect(dll.getSize()).toEqual(1);
|
|
148
|
+
expect(dll.getHead()).toEqual(node1);
|
|
149
|
+
expect(dll.getTail()).toEqual(node1);
|
|
150
|
+
dll.prepend(node2);
|
|
151
|
+
expect(dll.getSize()).toEqual(2);
|
|
152
|
+
expect(dll.getHead()).toEqual(node2);
|
|
153
|
+
expect(dll.getTail()).toEqual(node1);
|
|
154
|
+
dll.prepend(node3);
|
|
155
|
+
expect(dll.getSize()).toEqual(3);
|
|
156
|
+
expect(dll.getHead()).toEqual(node3);
|
|
157
|
+
expect(dll.getHead()?.next).toEqual(node2);
|
|
158
|
+
expect(dll.getHead()?.next?.next).toEqual(node1);
|
|
159
|
+
expect(dll.getTail()).toEqual(node1);
|
|
160
|
+
});
|
|
161
|
+
test("clear", () => {
|
|
162
|
+
const dll = new DoublyLinkedList();
|
|
163
|
+
const node = new Node(token);
|
|
164
|
+
dll.append(node);
|
|
165
|
+
expect(dll.getSize()).toEqual(1);
|
|
166
|
+
expect(dll.getHead()).toEqual(node);
|
|
167
|
+
expect(dll.getTail()).toEqual(node);
|
|
168
|
+
dll.clear();
|
|
169
|
+
expect(dll.getSize()).toEqual(0);
|
|
170
|
+
expect(dll.getHead()).toEqual(null);
|
|
171
|
+
expect(dll.getTail()).toEqual(null);
|
|
172
|
+
});
|
|
173
|
+
test("remove - head", () => {
|
|
174
|
+
const dll = new DoublyLinkedList();
|
|
175
|
+
const node1 = new Node(token);
|
|
176
|
+
const node2 = new Node(token);
|
|
177
|
+
const node3 = new Node(token);
|
|
178
|
+
dll.append(node1);
|
|
179
|
+
dll.append(node2);
|
|
180
|
+
dll.append(node3);
|
|
181
|
+
expect(dll.getSize()).toEqual(3);
|
|
182
|
+
dll.remove(node1);
|
|
183
|
+
expect(dll.getSize()).toEqual(2);
|
|
184
|
+
expect(dll.getHead()).toEqual(node2);
|
|
185
|
+
expect(dll.getHead()?.next).toEqual(node3);
|
|
186
|
+
expect(dll.getTail()).toEqual(node3);
|
|
187
|
+
});
|
|
188
|
+
test("remove - tail", () => {
|
|
189
|
+
const dll = new DoublyLinkedList();
|
|
190
|
+
const node1 = new Node(token);
|
|
191
|
+
const node2 = new Node(token);
|
|
192
|
+
const node3 = new Node(token);
|
|
193
|
+
dll.append(node1);
|
|
194
|
+
dll.append(node2);
|
|
195
|
+
dll.append(node3);
|
|
196
|
+
expect(dll.getSize()).toEqual(3);
|
|
197
|
+
dll.remove(node3);
|
|
198
|
+
expect(dll.getSize()).toEqual(2);
|
|
199
|
+
expect(dll.getHead()).toEqual(node1);
|
|
200
|
+
expect(dll.getHead()?.next).toEqual(node2);
|
|
201
|
+
expect(dll.getTail()).toEqual(node2);
|
|
202
|
+
});
|
|
203
|
+
test("remove - in between", () => {
|
|
204
|
+
const dll = new DoublyLinkedList();
|
|
205
|
+
const node1 = new Node(token);
|
|
206
|
+
const node2 = new Node(token);
|
|
207
|
+
const node3 = new Node(token);
|
|
208
|
+
dll.append(node1);
|
|
209
|
+
dll.append(node2);
|
|
210
|
+
dll.append(node3);
|
|
211
|
+
expect(dll.getSize()).toEqual(3);
|
|
212
|
+
dll.remove(node2);
|
|
213
|
+
expect(dll.getSize()).toEqual(2);
|
|
214
|
+
expect(dll.getHead()).toEqual(node1);
|
|
215
|
+
expect(dll.getHead()?.next).toEqual(node3);
|
|
216
|
+
expect(node3.prev).toEqual(node1);
|
|
217
|
+
expect(dll.getTail()).toEqual(node3);
|
|
218
|
+
});
|
|
219
|
+
test("insertAfter - head", () => {
|
|
220
|
+
const dll = new DoublyLinkedList();
|
|
221
|
+
const node1 = new Node(token);
|
|
222
|
+
const node2 = new Node(token);
|
|
223
|
+
dll.append(node1);
|
|
224
|
+
expect(dll.getSize()).toEqual(1);
|
|
225
|
+
dll.insertAfter(node2, node1);
|
|
226
|
+
expect(dll.getSize()).toEqual(2);
|
|
227
|
+
expect(dll.getHead()).toEqual(node1);
|
|
228
|
+
expect(dll.getTail()).toEqual(node2);
|
|
229
|
+
});
|
|
230
|
+
test("insertAfter - tail", () => {
|
|
231
|
+
const dll = new DoublyLinkedList();
|
|
232
|
+
const node1 = new Node(token);
|
|
233
|
+
const node2 = new Node(token);
|
|
234
|
+
const node3 = new Node(token);
|
|
235
|
+
dll.append(node1);
|
|
236
|
+
dll.append(node2);
|
|
237
|
+
expect(dll.getSize()).toEqual(2);
|
|
238
|
+
dll.insertAfter(node3, node2);
|
|
239
|
+
expect(dll.getSize()).toEqual(3);
|
|
240
|
+
expect(dll.getHead()).toEqual(node1);
|
|
241
|
+
expect(dll.getHead()?.next).toEqual(node2);
|
|
242
|
+
expect(dll.getHead()?.next?.next).toEqual(node3);
|
|
243
|
+
expect(dll.getTail()).toEqual(node3);
|
|
244
|
+
});
|
|
245
|
+
test("insertAfter - node in between", () => {
|
|
246
|
+
const dll = new DoublyLinkedList();
|
|
247
|
+
const node1 = new Node(token);
|
|
248
|
+
const node2 = new Node(token);
|
|
249
|
+
const node3 = new Node(token);
|
|
250
|
+
dll.append(node1);
|
|
251
|
+
dll.append(node2);
|
|
252
|
+
expect(dll.getSize()).toEqual(2);
|
|
253
|
+
dll.insertAfter(node3, node1);
|
|
254
|
+
expect(dll.getSize()).toEqual(3);
|
|
255
|
+
expect(dll.getHead()).toEqual(node1);
|
|
256
|
+
expect(dll.getHead()?.next).toEqual(node3);
|
|
257
|
+
expect(dll.getHead()?.next?.next).toEqual(node2);
|
|
258
|
+
expect(dll.getTail()).toEqual(node2);
|
|
259
|
+
});
|
|
260
|
+
test("insertBefore - head", () => {
|
|
261
|
+
const dll = new DoublyLinkedList();
|
|
262
|
+
const node1 = new Node(token);
|
|
263
|
+
const node2 = new Node(token);
|
|
264
|
+
dll.append(node1);
|
|
265
|
+
expect(dll.getSize()).toEqual(1);
|
|
266
|
+
dll.insertBefore(node2, node1);
|
|
267
|
+
expect(dll.getSize()).toEqual(2);
|
|
268
|
+
expect(dll.getHead()).toEqual(node2);
|
|
269
|
+
expect(dll.getTail()).toEqual(node1);
|
|
270
|
+
});
|
|
271
|
+
test("insertBefore - tail", () => {
|
|
272
|
+
const dll = new DoublyLinkedList();
|
|
273
|
+
const node1 = new Node(token);
|
|
274
|
+
const node2 = new Node(token);
|
|
275
|
+
const node3 = new Node(token);
|
|
276
|
+
dll.append(node1);
|
|
277
|
+
dll.append(node2);
|
|
278
|
+
expect(dll.getSize()).toEqual(2);
|
|
279
|
+
dll.insertBefore(node3, node2);
|
|
280
|
+
expect(dll.getSize()).toEqual(3);
|
|
281
|
+
expect(dll.getHead()).toEqual(node1);
|
|
282
|
+
expect(dll.getHead()?.next).toEqual(node3);
|
|
283
|
+
expect(dll.getHead()?.next?.next).toEqual(node2);
|
|
284
|
+
expect(dll.getTail()).toEqual(node2);
|
|
285
|
+
});
|
|
286
|
+
test("insertBefore - node in between", () => {
|
|
287
|
+
const dll = new DoublyLinkedList();
|
|
288
|
+
const node1 = new Node(token);
|
|
289
|
+
const node2 = new Node(token);
|
|
290
|
+
const node3 = new Node(token);
|
|
291
|
+
dll.append(node1);
|
|
292
|
+
dll.append(node2);
|
|
293
|
+
expect(dll.getSize()).toEqual(2);
|
|
294
|
+
dll.insertBefore(node3, node1);
|
|
295
|
+
expect(dll.getSize()).toEqual(3);
|
|
296
|
+
expect(dll.getHead()).toEqual(node3);
|
|
297
|
+
expect(dll.getHead()?.next).toEqual(node1);
|
|
298
|
+
expect(dll.getHead()?.next?.next).toEqual(node2);
|
|
299
|
+
expect(dll.getTail()).toEqual(node2);
|
|
300
|
+
});
|
|
301
|
+
test("find", () => {
|
|
302
|
+
const dll = new DoublyLinkedList();
|
|
303
|
+
const node1 = new Node(token);
|
|
304
|
+
const node2 = new Node(token);
|
|
305
|
+
const node3 = new Node(token);
|
|
306
|
+
dll.append(node1);
|
|
307
|
+
dll.append(node2);
|
|
308
|
+
dll.append(node3);
|
|
309
|
+
expect(dll.getSize()).toEqual(3);
|
|
310
|
+
expect(dll.find((node) => node === dll.getHead())).toEqual(node1);
|
|
311
|
+
expect(dll.find((node) => node === dll.getTail())).toEqual(node3);
|
|
312
|
+
expect(dll.find((node) => node.data.value === "ok")).toEqual(null);
|
|
313
|
+
});
|
|
314
|
+
test("fromArray", () => {
|
|
315
|
+
const data = [token, token, token];
|
|
316
|
+
const dll = DoublyLinkedList.fromArray(data);
|
|
317
|
+
expect(dll.getSize()).toEqual(3);
|
|
318
|
+
expect(dll.getHead()?.backward(1)).toEqual(null);
|
|
319
|
+
expect(dll.getHead()?.forward(1)).not.toEqual(null);
|
|
320
|
+
expect(dll.getHead()?.forward(2)).not.toEqual(null);
|
|
321
|
+
expect(dll.getHead()?.forward(3)).toEqual(null);
|
|
322
|
+
expect(dll.getTail()?.forward(1)).toEqual(null);
|
|
323
|
+
expect(dll.getTail()?.backward(1)).not.toEqual(null);
|
|
324
|
+
expect(dll.getTail()?.backward(2)).not.toEqual(null);
|
|
325
|
+
expect(dll.getTail()?.backward(3)).toEqual(null);
|
|
326
|
+
});
|
|
327
|
+
test("toArray", () => {
|
|
328
|
+
const data = [token, token, token];
|
|
329
|
+
const dll = DoublyLinkedList.fromArray(data);
|
|
330
|
+
expect(dll.getSize()).toEqual(3);
|
|
331
|
+
expect(dll.toArray().length).toEqual(3);
|
|
332
|
+
expect(dll?.toArray?.()?.[0]?.data).toEqual(data[0]);
|
|
333
|
+
expect(dll?.toArray?.()?.[1]?.data).toEqual(data[1]);
|
|
334
|
+
expect(dll?.toArray?.()?.[2]?.data).toEqual(data[2]);
|
|
335
|
+
});
|
|
336
|
+
test("reverse", () => {
|
|
337
|
+
const token1 = new Token("test1");
|
|
338
|
+
const token2 = new Token("test2");
|
|
339
|
+
const token3 = new Token("test3");
|
|
340
|
+
const token4 = new Token("test4");
|
|
341
|
+
const dll = new DoublyLinkedList();
|
|
342
|
+
const node1 = new Node(token1);
|
|
343
|
+
const node2 = new Node(token2);
|
|
344
|
+
const node3 = new Node(token3);
|
|
345
|
+
const node4 = new Node(token4);
|
|
346
|
+
dll.append(node1);
|
|
347
|
+
dll.append(node2);
|
|
348
|
+
dll.append(node3);
|
|
349
|
+
dll.append(node4);
|
|
350
|
+
expect(dll.getSize()).toEqual(4);
|
|
351
|
+
dll.reverse();
|
|
352
|
+
expect(dll.getSize()).toEqual(4);
|
|
353
|
+
expect(dll.getHead()).toEqual(node4);
|
|
354
|
+
expect(dll.getHead()?.next).toEqual(node3);
|
|
355
|
+
expect(dll.getHead()?.next?.next).toEqual(node2);
|
|
356
|
+
expect(dll.getHead()?.next?.next?.next).toEqual(node1);
|
|
357
|
+
expect(dll.getTail()).toEqual(node1);
|
|
358
|
+
});
|
|
359
|
+
test("Symbol.iterator", () => {
|
|
360
|
+
const dll = new DoublyLinkedList();
|
|
361
|
+
const firstToken = new Token("first");
|
|
362
|
+
const firstNode = new Node(firstToken);
|
|
363
|
+
const secondToken = new Token("second");
|
|
364
|
+
const secondNode = new Node(secondToken);
|
|
365
|
+
const thirdToken = new Token("third");
|
|
366
|
+
const thirdNode = new Node(thirdToken);
|
|
367
|
+
dll.append(firstNode);
|
|
368
|
+
dll.append(secondNode);
|
|
369
|
+
dll.append(thirdNode);
|
|
370
|
+
let index = 0;
|
|
371
|
+
for (const node of dll) {
|
|
372
|
+
if (index === 0)
|
|
373
|
+
expect(node.data).toEqual(firstToken);
|
|
374
|
+
if (index === 1)
|
|
375
|
+
expect(node.data).toEqual(secondToken);
|
|
376
|
+
if (index === 2)
|
|
377
|
+
expect(node.data).toEqual(thirdToken);
|
|
378
|
+
index += 1;
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
import { DurationMs } from "../src/duration-ms.vo";
|
|
4
|
+
describe("DurationMs", () => {
|
|
5
|
+
test("happy path", () => {
|
|
6
|
+
expect(v.safeParse(DurationMs, 0).success).toEqual(true);
|
|
7
|
+
expect(v.safeParse(DurationMs, 10_000).success).toEqual(true);
|
|
8
|
+
});
|
|
9
|
+
test("rejects non-number - null", () => {
|
|
10
|
+
expect(() => v.parse(DurationMs, null)).toThrow("duration.invalid");
|
|
11
|
+
});
|
|
12
|
+
test("rejects non-number - string", () => {
|
|
13
|
+
expect(() => v.parse(DurationMs, "123")).toThrow("duration.invalid");
|
|
14
|
+
});
|
|
15
|
+
test("rejects fractions", () => {
|
|
16
|
+
expect(() => v.parse(DurationMs, 1.5)).toThrow("duration.invalid");
|
|
17
|
+
});
|
|
18
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
import { Duration } from "../src/duration.service";
|
|
4
|
+
import { DurationMs } from "../src/duration-ms.vo";
|
|
5
|
+
import { MultiplicationFactor } from "../src/multiplication-factor.vo";
|
|
6
|
+
describe("Duration", () => {
|
|
7
|
+
test("weeks", () => {
|
|
8
|
+
const weeks = Duration.Weeks(2);
|
|
9
|
+
expect(weeks.days).toEqual(14);
|
|
10
|
+
expect(weeks.hours).toEqual(336);
|
|
11
|
+
expect(weeks.minutes).toEqual(20160);
|
|
12
|
+
expect(weeks.seconds).toEqual(1209600);
|
|
13
|
+
expect(weeks.ms).toEqual(v.parse(DurationMs, 1_209_600_000));
|
|
14
|
+
expect(weeks.ns).toEqual(1_209_600_000_000_000);
|
|
15
|
+
});
|
|
16
|
+
test("days", () => {
|
|
17
|
+
const days = Duration.Days(2);
|
|
18
|
+
expect(days.weeks).toEqual(0.29);
|
|
19
|
+
expect(days.days).toEqual(2);
|
|
20
|
+
expect(days.hours).toEqual(48);
|
|
21
|
+
expect(days.minutes).toEqual(2880);
|
|
22
|
+
expect(days.seconds).toEqual(172800);
|
|
23
|
+
expect(days.ms).toEqual(v.parse(DurationMs, 172_800_000));
|
|
24
|
+
expect(days.ns).toEqual(172_800_000_000_000);
|
|
25
|
+
});
|
|
26
|
+
test("hours", () => {
|
|
27
|
+
const hours = Duration.Hours(3);
|
|
28
|
+
expect(hours.weeks).toEqual(0.02);
|
|
29
|
+
expect(hours.days).toEqual(0.13);
|
|
30
|
+
expect(hours.hours).toEqual(3);
|
|
31
|
+
expect(hours.minutes).toEqual(180);
|
|
32
|
+
expect(hours.seconds).toEqual(10_800);
|
|
33
|
+
expect(hours.ms).toEqual(v.parse(DurationMs, 10_800_000));
|
|
34
|
+
expect(hours.ns).toEqual(10_800_000_000_000);
|
|
35
|
+
});
|
|
36
|
+
test("minutes", () => {
|
|
37
|
+
const minutes = Duration.Minutes(30);
|
|
38
|
+
expect(minutes.weeks).toEqual(0);
|
|
39
|
+
expect(minutes.days).toEqual(0.02);
|
|
40
|
+
expect(minutes.hours).toEqual(0.5);
|
|
41
|
+
expect(minutes.minutes).toEqual(30);
|
|
42
|
+
expect(minutes.seconds).toEqual(1_800);
|
|
43
|
+
expect(minutes.ms).toEqual(v.parse(DurationMs, 1_800_000));
|
|
44
|
+
expect(minutes.ns).toEqual(1_800_000_000_000);
|
|
45
|
+
});
|
|
46
|
+
test("seconds", () => {
|
|
47
|
+
const seconds = Duration.Seconds(120);
|
|
48
|
+
expect(seconds.weeks).toEqual(0);
|
|
49
|
+
expect(seconds.days).toEqual(0);
|
|
50
|
+
expect(seconds.hours).toEqual(0.03);
|
|
51
|
+
expect(seconds.minutes).toEqual(2);
|
|
52
|
+
expect(seconds.seconds).toEqual(120);
|
|
53
|
+
expect(seconds.ms).toEqual(v.parse(DurationMs, 120_000));
|
|
54
|
+
expect(seconds.ns).toEqual(120_000_000_000);
|
|
55
|
+
});
|
|
56
|
+
test("ms", () => {
|
|
57
|
+
const ms = Duration.Ms(500);
|
|
58
|
+
expect(ms.weeks).toEqual(0);
|
|
59
|
+
expect(ms.days).toEqual(0);
|
|
60
|
+
expect(ms.hours).toEqual(0);
|
|
61
|
+
expect(ms.minutes).toEqual(0.01);
|
|
62
|
+
expect(ms.seconds).toEqual(0.5);
|
|
63
|
+
expect(ms.ms).toEqual(v.parse(DurationMs, 500));
|
|
64
|
+
expect(ms.ns).toEqual(500_000_000);
|
|
65
|
+
});
|
|
66
|
+
test("ns", () => {
|
|
67
|
+
const ns = Duration.Ns(5_499_999);
|
|
68
|
+
expect(ns.weeks).toEqual(0);
|
|
69
|
+
expect(ns.days).toEqual(0);
|
|
70
|
+
expect(ns.hours).toEqual(0);
|
|
71
|
+
expect(ns.minutes).toEqual(0);
|
|
72
|
+
expect(ns.seconds).toEqual(0.01);
|
|
73
|
+
expect(ns.ms).toEqual(v.parse(DurationMs, 5));
|
|
74
|
+
expect(ns.ns).toEqual(5_000_000);
|
|
75
|
+
});
|
|
76
|
+
test("add/subtract", () => {
|
|
77
|
+
const base = Duration.Seconds(10);
|
|
78
|
+
const added = base.add(Duration.Seconds(5));
|
|
79
|
+
const subtracted = base.subtract(Duration.Seconds(3));
|
|
80
|
+
expect(added.seconds).toEqual(15);
|
|
81
|
+
expect(subtracted.seconds).toEqual(7);
|
|
82
|
+
});
|
|
83
|
+
test("times", () => {
|
|
84
|
+
const base = Duration.Ms(10);
|
|
85
|
+
const factor = v.parse(MultiplicationFactor, 1.5);
|
|
86
|
+
const result = base.times(factor);
|
|
87
|
+
expect(result.ms).toEqual(v.parse(DurationMs, 15));
|
|
88
|
+
});
|
|
89
|
+
test("times - rounding", () => {
|
|
90
|
+
const base = Duration.Ms(7);
|
|
91
|
+
const factor = v.parse(MultiplicationFactor, 1.29);
|
|
92
|
+
const result = base.times(factor);
|
|
93
|
+
expect(result.ms).toEqual(v.parse(DurationMs, 9));
|
|
94
|
+
});
|
|
95
|
+
test("equals", () => {
|
|
96
|
+
const a = Duration.Ms(1_000);
|
|
97
|
+
const b = Duration.Ms(2_000);
|
|
98
|
+
expect(a.equals(a)).toEqual(true);
|
|
99
|
+
expect(a.equals(b)).toEqual(false);
|
|
100
|
+
});
|
|
101
|
+
test("isLongerThan", () => {
|
|
102
|
+
const a = Duration.Ms(2_000);
|
|
103
|
+
const b = Duration.Ms(1_000);
|
|
104
|
+
expect(a.isLongerThan(b)).toEqual(true);
|
|
105
|
+
expect(a.isLongerThan(a)).toEqual(false);
|
|
106
|
+
});
|
|
107
|
+
test("isShorterThan", () => {
|
|
108
|
+
const a = Duration.Ms(1_000);
|
|
109
|
+
const b = Duration.Ms(2_000);
|
|
110
|
+
expect(a.isShorterThan(b)).toEqual(true);
|
|
111
|
+
expect(a.isShorterThan(a)).toEqual(false);
|
|
112
|
+
});
|
|
113
|
+
test("toAbsolute", () => {
|
|
114
|
+
expect(Duration.Ms(1000).toAbsolute()).toEqual(Duration.Ms(1000));
|
|
115
|
+
expect(Duration.Ms(-1000).toAbsolute()).toEqual(Duration.Ms(1000));
|
|
116
|
+
});
|
|
117
|
+
test("MIN", () => {
|
|
118
|
+
expect(Duration.MIN.ms).toEqual(v.parse(DurationMs, 1));
|
|
119
|
+
});
|
|
120
|
+
test("toString", () => {
|
|
121
|
+
expect(Duration.MIN.toString()).toEqual("1");
|
|
122
|
+
});
|
|
123
|
+
test("toJSON", () => {
|
|
124
|
+
expect(Duration.MIN.toJSON()).toEqual(1);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
import { Email } from "../src/email.vo";
|
|
4
|
+
import { EmailMask } from "../src/email-mask.service";
|
|
5
|
+
describe("EmailMask", () => {
|
|
6
|
+
test("works for 1 char", () => {
|
|
7
|
+
expect(EmailMask.censor(v.parse(Email, "t@example.com"))).toEqual("*@example.com");
|
|
8
|
+
});
|
|
9
|
+
test("works for 2 chars", () => {
|
|
10
|
+
expect(EmailMask.censor(v.parse(Email, "te@example.com"))).toEqual("**@example.com");
|
|
11
|
+
});
|
|
12
|
+
test("works for more than 2 chars", () => {
|
|
13
|
+
expect(EmailMask.censor(v.parse(Email, "testing@example.com"))).toEqual("t*****g@example.com");
|
|
14
|
+
});
|
|
15
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
import { Email } from "../src/email.vo";
|
|
4
|
+
describe("Email", () => {
|
|
5
|
+
test("happy path", () => {
|
|
6
|
+
expect(v.safeParse(Email, "user@example.com").success).toEqual(true);
|
|
7
|
+
});
|
|
8
|
+
test("rejects empty", () => {
|
|
9
|
+
expect(() => v.parse(Email, "")).toThrow("email.invalid");
|
|
10
|
+
});
|
|
11
|
+
test("rejects non-string - null", () => {
|
|
12
|
+
expect(() => v.parse(Email, null)).toThrow("email.invalid");
|
|
13
|
+
});
|
|
14
|
+
test("rejects non-string - number", () => {
|
|
15
|
+
expect(() => v.parse(Email, 123)).toThrow("email.invalid");
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|