@wisemen/datewise 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +307 -0
- package/dist/common/constants.d.ts +9 -0
- package/dist/common/constants.js +10 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/date-period.enum.d.ts +7 -0
- package/dist/common/date-period.enum.js +15 -0
- package/dist/common/date-period.enum.js.map +1 -0
- package/dist/common/exhaustive-check.helper.d.ts +1 -0
- package/dist/common/exhaustive-check.helper.js +4 -0
- package/dist/common/exhaustive-check.helper.js.map +1 -0
- package/dist/common/inclusivity.d.ts +8 -0
- package/dist/common/inclusivity.js +23 -0
- package/dist/common/inclusivity.js.map +1 -0
- package/dist/common/index.d.ts +4 -0
- package/dist/common/index.js +5 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/init-dayjs.d.ts +1 -0
- package/dist/common/init-dayjs.js +31 -0
- package/dist/common/init-dayjs.js.map +1 -0
- package/dist/common/month.d.ts +15 -0
- package/dist/common/month.js +21 -0
- package/dist/common/month.js.map +1 -0
- package/dist/common/timezone.d.ts +600 -0
- package/dist/common/timezone.js +614 -0
- package/dist/common/timezone.js.map +1 -0
- package/dist/common/typeorm/adjacent-to.d.ts +5 -0
- package/dist/common/typeorm/adjacent-to.js +7 -0
- package/dist/common/typeorm/adjacent-to.js.map +1 -0
- package/dist/common/typeorm/ends-before.d.ts +5 -0
- package/dist/common/typeorm/ends-before.js +7 -0
- package/dist/common/typeorm/ends-before.js.map +1 -0
- package/dist/common/typeorm/index.d.ts +10 -0
- package/dist/common/typeorm/index.js +11 -0
- package/dist/common/typeorm/index.js.map +1 -0
- package/dist/common/typeorm/is-preceded-by.d.ts +5 -0
- package/dist/common/typeorm/is-preceded-by.js +7 -0
- package/dist/common/typeorm/is-preceded-by.js.map +1 -0
- package/dist/common/typeorm/is-succeeded-by.d.ts +5 -0
- package/dist/common/typeorm/is-succeeded-by.js +7 -0
- package/dist/common/typeorm/is-succeeded-by.js.map +1 -0
- package/dist/common/typeorm/overlaps-with.d.ts +5 -0
- package/dist/common/typeorm/overlaps-with.js +7 -0
- package/dist/common/typeorm/overlaps-with.js.map +1 -0
- package/dist/common/typeorm/precedes.d.ts +5 -0
- package/dist/common/typeorm/precedes.js +7 -0
- package/dist/common/typeorm/precedes.js.map +1 -0
- package/dist/common/typeorm/starts-after.d.ts +5 -0
- package/dist/common/typeorm/starts-after.js +7 -0
- package/dist/common/typeorm/starts-after.js.map +1 -0
- package/dist/common/typeorm/strictly-left-of.d.ts +5 -0
- package/dist/common/typeorm/strictly-left-of.js +7 -0
- package/dist/common/typeorm/strictly-left-of.js.map +1 -0
- package/dist/common/typeorm/strictly-right-of.d.ts +5 -0
- package/dist/common/typeorm/strictly-right-of.js +7 -0
- package/dist/common/typeorm/strictly-right-of.js.map +1 -0
- package/dist/common/typeorm/succeeds.d.ts +5 -0
- package/dist/common/typeorm/succeeds.js +7 -0
- package/dist/common/typeorm/succeeds.js.map +1 -0
- package/dist/date-range/date-range-errors.d.ts +9 -0
- package/dist/date-range/date-range-errors.js +17 -0
- package/dist/date-range/date-range-errors.js.map +1 -0
- package/dist/date-range/date-range.d.ts +43 -0
- package/dist/date-range/date-range.dto-builder.d.ts +8 -0
- package/dist/date-range/date-range.dto-builder.js +21 -0
- package/dist/date-range/date-range.dto-builder.js.map +1 -0
- package/dist/date-range/date-range.dto.d.ts +7 -0
- package/dist/date-range/date-range.dto.js +31 -0
- package/dist/date-range/date-range.dto.js.map +1 -0
- package/dist/date-range/date-range.js +153 -0
- package/dist/date-range/date-range.js.map +1 -0
- package/dist/date-range/date-range.response.d.ts +6 -0
- package/dist/date-range/date-range.response.js +27 -0
- package/dist/date-range/date-range.response.js.map +1 -0
- package/dist/date-range/index.d.ts +7 -0
- package/dist/date-range/index.js +8 -0
- package/dist/date-range/index.js.map +1 -0
- package/dist/date-range/is-date-range.decorator.d.ts +19 -0
- package/dist/date-range/is-date-range.decorator.js +68 -0
- package/dist/date-range/is-date-range.decorator.js.map +1 -0
- package/dist/date-range/tests/date-range.unit.test.d.ts +1 -0
- package/dist/date-range/tests/date-range.unit.test.js +412 -0
- package/dist/date-range/tests/date-range.unit.test.js.map +1 -0
- package/dist/date-range/tests/is-date-range.decorator.unit.test.d.ts +1 -0
- package/dist/date-range/tests/is-date-range.decorator.unit.test.js +120 -0
- package/dist/date-range/tests/is-date-range.decorator.unit.test.js.map +1 -0
- package/dist/date-range/typeorm/contains-plain-date.d.ts +4 -0
- package/dist/date-range/typeorm/contains-plain-date.js +8 -0
- package/dist/date-range/typeorm/contains-plain-date.js.map +1 -0
- package/dist/date-range/typeorm/date-range-column.d.ts +11 -0
- package/dist/date-range/typeorm/date-range-column.js +32 -0
- package/dist/date-range/typeorm/date-range-column.js.map +1 -0
- package/dist/date-range/typeorm/index.d.ts +2 -0
- package/dist/date-range/typeorm/index.js +3 -0
- package/dist/date-range/typeorm/index.js.map +1 -0
- package/dist/date-time-range/date-time-range.command-builder.d.ts +8 -0
- package/dist/date-time-range/date-time-range.command-builder.js +21 -0
- package/dist/date-time-range/date-time-range.command-builder.js.map +1 -0
- package/dist/date-time-range/date-time-range.command.d.ts +7 -0
- package/dist/date-time-range/date-time-range.command.js +30 -0
- package/dist/date-time-range/date-time-range.command.js.map +1 -0
- package/dist/date-time-range/date-time-range.d.ts +93 -0
- package/dist/date-time-range/date-time-range.errors.d.ts +10 -0
- package/dist/date-time-range/date-time-range.errors.js +19 -0
- package/dist/date-time-range/date-time-range.errors.js.map +1 -0
- package/dist/date-time-range/date-time-range.js +205 -0
- package/dist/date-time-range/date-time-range.js.map +1 -0
- package/dist/date-time-range/date-time-range.response.d.ts +6 -0
- package/dist/date-time-range/date-time-range.response.js +27 -0
- package/dist/date-time-range/date-time-range.response.js.map +1 -0
- package/dist/date-time-range/index.d.ts +7 -0
- package/dist/date-time-range/index.js +8 -0
- package/dist/date-time-range/index.js.map +1 -0
- package/dist/date-time-range/is-date-time-range.decorator.d.ts +15 -0
- package/dist/date-time-range/is-date-time-range.decorator.js +58 -0
- package/dist/date-time-range/is-date-time-range.decorator.js.map +1 -0
- package/dist/date-time-range/tests/date-time-range.column.integration.test.d.ts +1 -0
- package/dist/date-time-range/tests/date-time-range.column.integration.test.js +442 -0
- package/dist/date-time-range/tests/date-time-range.column.integration.test.js.map +1 -0
- package/dist/date-time-range/tests/date-time-range.unit.test.d.ts +1 -0
- package/dist/date-time-range/tests/date-time-range.unit.test.js +775 -0
- package/dist/date-time-range/tests/date-time-range.unit.test.js.map +1 -0
- package/dist/date-time-range/tests/is-date-time-range.decorator.unit.test.d.ts +1 -0
- package/dist/date-time-range/tests/is-date-time-range.decorator.unit.test.js +74 -0
- package/dist/date-time-range/tests/is-date-time-range.decorator.unit.test.js.map +1 -0
- package/dist/date-time-range/tests/sql/datasource.d.ts +2 -0
- package/dist/date-time-range/tests/sql/datasource.js +16 -0
- package/dist/date-time-range/tests/sql/datasource.js.map +1 -0
- package/dist/date-time-range/tests/sql/date-time-range-test.entity.d.ts +5 -0
- package/dist/date-time-range/tests/sql/date-time-range-test.entity.js +29 -0
- package/dist/date-time-range/tests/sql/date-time-range-test.entity.js.map +1 -0
- package/dist/date-time-range/tests/sql/multi-date-time-range-test.entity.d.ts +5 -0
- package/dist/date-time-range/tests/sql/multi-date-time-range-test.entity.js +28 -0
- package/dist/date-time-range/tests/sql/multi-date-time-range-test.entity.js.map +1 -0
- package/dist/date-time-range/typeorm/contains-timestamp.d.ts +4 -0
- package/dist/date-time-range/typeorm/contains-timestamp.js +8 -0
- package/dist/date-time-range/typeorm/contains-timestamp.js.map +1 -0
- package/dist/date-time-range/typeorm/date-time-range-column.d.ts +11 -0
- package/dist/date-time-range/typeorm/date-time-range-column.js +32 -0
- package/dist/date-time-range/typeorm/date-time-range-column.js.map +1 -0
- package/dist/date-time-range/typeorm/index.d.ts +3 -0
- package/dist/date-time-range/typeorm/index.js +4 -0
- package/dist/date-time-range/typeorm/index.js.map +1 -0
- package/dist/date-time-range/typeorm/multi-date-time-range.column.d.ts +3 -0
- package/dist/date-time-range/typeorm/multi-date-time-range.column.js +47 -0
- package/dist/date-time-range/typeorm/multi-date-time-range.column.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/multi-date-time-range/multi-date-time-range.d.ts +20 -0
- package/dist/multi-date-time-range/multi-date-time-range.js +51 -0
- package/dist/multi-date-time-range/multi-date-time-range.js.map +1 -0
- package/dist/multi-date-time-range/tests/multi-date-time-range.unit.test.d.ts +1 -0
- package/dist/multi-date-time-range/tests/multi-date-time-range.unit.test.js +129 -0
- package/dist/multi-date-time-range/tests/multi-date-time-range.unit.test.js.map +1 -0
- package/dist/plain-date/api-property/index.d.ts +1 -0
- package/dist/plain-date/api-property/index.js +2 -0
- package/dist/plain-date/api-property/index.js.map +1 -0
- package/dist/plain-date/api-property/plain-date.api-property.d.ts +2 -0
- package/dist/plain-date/api-property/plain-date.api-property.js +12 -0
- package/dist/plain-date/api-property/plain-date.api-property.js.map +1 -0
- package/dist/plain-date/dayjs-plain-date.d.ts +57 -0
- package/dist/plain-date/dayjs-plain-date.js +170 -0
- package/dist/plain-date/dayjs-plain-date.js.map +1 -0
- package/dist/plain-date/future-infinity-date.d.ts +38 -0
- package/dist/plain-date/future-infinity-date.js +100 -0
- package/dist/plain-date/future-infinity-date.js.map +1 -0
- package/dist/plain-date/index.d.ts +8 -0
- package/dist/plain-date/index.js +9 -0
- package/dist/plain-date/index.js.map +1 -0
- package/dist/plain-date/invalid-date.d.ts +5 -0
- package/dist/plain-date/invalid-date.js +8 -0
- package/dist/plain-date/invalid-date.js.map +1 -0
- package/dist/plain-date/max.d.ts +2 -0
- package/dist/plain-date/max.js +15 -0
- package/dist/plain-date/max.js.map +1 -0
- package/dist/plain-date/min.d.ts +2 -0
- package/dist/plain-date/min.js +16 -0
- package/dist/plain-date/min.js.map +1 -0
- package/dist/plain-date/past-infinity-date.d.ts +39 -0
- package/dist/plain-date/past-infinity-date.js +100 -0
- package/dist/plain-date/past-infinity-date.js.map +1 -0
- package/dist/plain-date/plain-date-object.d.ts +6 -0
- package/dist/plain-date/plain-date-object.js +2 -0
- package/dist/plain-date/plain-date-object.js.map +1 -0
- package/dist/plain-date/plain-date.d.ts +44 -0
- package/dist/plain-date/plain-date.factory.d.ts +16 -0
- package/dist/plain-date/plain-date.factory.js +41 -0
- package/dist/plain-date/plain-date.factory.js.map +1 -0
- package/dist/plain-date/plain-date.fn.d.ts +16 -0
- package/dist/plain-date/plain-date.fn.js +14 -0
- package/dist/plain-date/plain-date.fn.js.map +1 -0
- package/dist/plain-date/plain-date.js +2 -0
- package/dist/plain-date/plain-date.js.map +1 -0
- package/dist/plain-date/plain-date.units.d.ts +4 -0
- package/dist/plain-date/plain-date.units.js +2 -0
- package/dist/plain-date/plain-date.units.js.map +1 -0
- package/dist/plain-date/tests/plain-date.accessors.unit.test.d.ts +1 -0
- package/dist/plain-date/tests/plain-date.accessors.unit.test.js +22 -0
- package/dist/plain-date/tests/plain-date.accessors.unit.test.js.map +1 -0
- package/dist/plain-date/tests/plain-date.constructor.unit.test.d.ts +1 -0
- package/dist/plain-date/tests/plain-date.constructor.unit.test.js +40 -0
- package/dist/plain-date/tests/plain-date.constructor.unit.test.js.map +1 -0
- package/dist/plain-date/tests/plain-date.factory.unit.test.d.ts +1 -0
- package/dist/plain-date/tests/plain-date.factory.unit.test.js +136 -0
- package/dist/plain-date/tests/plain-date.factory.unit.test.js.map +1 -0
- package/dist/plain-date/tests/plain-date.manipulation.unit.test.d.ts +1 -0
- package/dist/plain-date/tests/plain-date.manipulation.unit.test.js +93 -0
- package/dist/plain-date/tests/plain-date.manipulation.unit.test.js.map +1 -0
- package/dist/plain-date/tests/wise-date.ordering.unit.test.d.ts +1 -0
- package/dist/plain-date/tests/wise-date.ordering.unit.test.js +174 -0
- package/dist/plain-date/tests/wise-date.ordering.unit.test.js.map +1 -0
- package/dist/plain-date/typeorm/index.d.ts +1 -0
- package/dist/plain-date/typeorm/index.js +2 -0
- package/dist/plain-date/typeorm/index.js.map +1 -0
- package/dist/plain-date/typeorm/plain-date.column.d.ts +3 -0
- package/dist/plain-date/typeorm/plain-date.column.js +24 -0
- package/dist/plain-date/typeorm/plain-date.column.js.map +1 -0
- package/dist/plain-date/validators/index.d.ts +1 -0
- package/dist/plain-date/validators/index.js +2 -0
- package/dist/plain-date/validators/index.js.map +1 -0
- package/dist/plain-date/validators/is-plain-date.validator.d.ts +7 -0
- package/dist/plain-date/validators/is-plain-date.validator.js +34 -0
- package/dist/plain-date/validators/is-plain-date.validator.js.map +1 -0
- package/dist/plain-time/api-property/index.d.ts +1 -0
- package/dist/plain-time/api-property/index.js +2 -0
- package/dist/plain-time/api-property/index.js.map +1 -0
- package/dist/plain-time/api-property/plain-time.api-property.d.ts +2 -0
- package/dist/plain-time/api-property/plain-time.api-property.js +5 -0
- package/dist/plain-time/api-property/plain-time.api-property.js.map +1 -0
- package/dist/plain-time/constants.d.ts +4 -0
- package/dist/plain-time/constants.js +5 -0
- package/dist/plain-time/constants.js.map +1 -0
- package/dist/plain-time/index.d.ts +8 -0
- package/dist/plain-time/index.js +8 -0
- package/dist/plain-time/index.js.map +1 -0
- package/dist/plain-time/is-valid-time-string.d.ts +2 -0
- package/dist/plain-time/is-valid-time-string.js +5 -0
- package/dist/plain-time/is-valid-time-string.js.map +1 -0
- package/dist/plain-time/max.d.ts +2 -0
- package/dist/plain-time/max.js +15 -0
- package/dist/plain-time/max.js.map +1 -0
- package/dist/plain-time/min.d.ts +2 -0
- package/dist/plain-time/min.js +15 -0
- package/dist/plain-time/min.js.map +1 -0
- package/dist/plain-time/plain-time-entry.d.ts +18 -0
- package/dist/plain-time/plain-time-entry.js +11 -0
- package/dist/plain-time/plain-time-entry.js.map +1 -0
- package/dist/plain-time/plain-time-error.d.ts +12 -0
- package/dist/plain-time/plain-time-error.js +19 -0
- package/dist/plain-time/plain-time-error.js.map +1 -0
- package/dist/plain-time/plain-time-object.type.d.ts +6 -0
- package/dist/plain-time/plain-time-object.type.js +2 -0
- package/dist/plain-time/plain-time-object.type.js.map +1 -0
- package/dist/plain-time/plain-time.d.ts +44 -0
- package/dist/plain-time/plain-time.factory.d.ts +12 -0
- package/dist/plain-time/plain-time.factory.js +10 -0
- package/dist/plain-time/plain-time.factory.js.map +1 -0
- package/dist/plain-time/plain-time.js +160 -0
- package/dist/plain-time/plain-time.js.map +1 -0
- package/dist/plain-time/seconds-in-unit.d.ts +11 -0
- package/dist/plain-time/seconds-in-unit.js +13 -0
- package/dist/plain-time/seconds-in-unit.js.map +1 -0
- package/dist/plain-time/tests/is-plain-time-after.validator.test.d.ts +1 -0
- package/dist/plain-time/tests/is-plain-time-after.validator.test.js +49 -0
- package/dist/plain-time/tests/is-plain-time-after.validator.test.js.map +1 -0
- package/dist/plain-time/tests/is-plain-time.validator.test.d.ts +1 -0
- package/dist/plain-time/tests/is-plain-time.validator.test.js +45 -0
- package/dist/plain-time/tests/is-plain-time.validator.test.js.map +1 -0
- package/dist/plain-time/tests/plain-time.unit.test.d.ts +1 -0
- package/dist/plain-time/tests/plain-time.unit.test.js +323 -0
- package/dist/plain-time/tests/plain-time.unit.test.js.map +1 -0
- package/dist/plain-time/time-unit.d.ts +1 -0
- package/dist/plain-time/time-unit.js +2 -0
- package/dist/plain-time/time-unit.js.map +1 -0
- package/dist/plain-time/typeorm/index.d.ts +1 -0
- package/dist/plain-time/typeorm/index.js +2 -0
- package/dist/plain-time/typeorm/index.js.map +1 -0
- package/dist/plain-time/typeorm/plain-time-column.d.ts +3 -0
- package/dist/plain-time/typeorm/plain-time-column.js +26 -0
- package/dist/plain-time/typeorm/plain-time-column.js.map +1 -0
- package/dist/plain-time/validators/index.d.ts +6 -0
- package/dist/plain-time/validators/index.js +7 -0
- package/dist/plain-time/validators/index.js.map +1 -0
- package/dist/plain-time/validators/is-plain-time-after.validator.d.ts +5 -0
- package/dist/plain-time/validators/is-plain-time-after.validator.js +47 -0
- package/dist/plain-time/validators/is-plain-time-after.validator.js.map +1 -0
- package/dist/plain-time/validators/is-plain-time-before.validator.d.ts +5 -0
- package/dist/plain-time/validators/is-plain-time-before.validator.js +47 -0
- package/dist/plain-time/validators/is-plain-time-before.validator.js.map +1 -0
- package/dist/plain-time/validators/is-plain-time-between.validator.d.ts +6 -0
- package/dist/plain-time/validators/is-plain-time-between.validator.js +52 -0
- package/dist/plain-time/validators/is-plain-time-between.validator.js.map +1 -0
- package/dist/plain-time/validators/is-plain-time-same-or-after.validator.d.ts +5 -0
- package/dist/plain-time/validators/is-plain-time-same-or-after.validator.js +47 -0
- package/dist/plain-time/validators/is-plain-time-same-or-after.validator.js.map +1 -0
- package/dist/plain-time/validators/is-plain-time-same-or-before.validator.d.ts +5 -0
- package/dist/plain-time/validators/is-plain-time-same-or-before.validator.js +47 -0
- package/dist/plain-time/validators/is-plain-time-same-or-before.validator.js.map +1 -0
- package/dist/plain-time/validators/is-plain-time.validator.d.ts +3 -0
- package/dist/plain-time/validators/is-plain-time.validator.js +7 -0
- package/dist/plain-time/validators/is-plain-time.validator.js.map +1 -0
- package/dist/rrule/frequency.d.ts +12 -0
- package/dist/rrule/frequency.js +25 -0
- package/dist/rrule/frequency.js.map +1 -0
- package/dist/rrule/index.d.ts +16 -0
- package/dist/rrule/index.js +7 -0
- package/dist/rrule/index.js.map +1 -0
- package/dist/rrule/rrule.d.ts +23 -0
- package/dist/rrule/rrule.factory.d.ts +20 -0
- package/dist/rrule/rrule.factory.js +8 -0
- package/dist/rrule/rrule.factory.js.map +1 -0
- package/dist/rrule/rrule.js +114 -0
- package/dist/rrule/rrule.js.map +1 -0
- package/dist/rrule/rrule.once.d.ts +14 -0
- package/dist/rrule/rrule.once.js +19 -0
- package/dist/rrule/rrule.once.js.map +1 -0
- package/dist/rrule/tests/rrule.once.unit.test.d.ts +1 -0
- package/dist/rrule/tests/rrule.once.unit.test.js +19 -0
- package/dist/rrule/tests/rrule.once.unit.test.js.map +1 -0
- package/dist/rrule/tests/rrule.unit.test.d.ts +1 -0
- package/dist/rrule/tests/rrule.unit.test.js +202 -0
- package/dist/rrule/tests/rrule.unit.test.js.map +1 -0
- package/dist/rrule/typeorm/index.d.ts +1 -0
- package/dist/rrule/typeorm/index.js +2 -0
- package/dist/rrule/typeorm/index.js.map +1 -0
- package/dist/rrule/typeorm/rrule-column.d.ts +2 -0
- package/dist/rrule/typeorm/rrule-column.js +6 -0
- package/dist/rrule/typeorm/rrule-column.js.map +1 -0
- package/dist/timestamp/api-property/index.d.ts +1 -0
- package/dist/timestamp/api-property/index.js +2 -0
- package/dist/timestamp/api-property/index.js.map +1 -0
- package/dist/timestamp/api-property/timestamp.api-property.d.ts +2 -0
- package/dist/timestamp/api-property/timestamp.api-property.js +12 -0
- package/dist/timestamp/api-property/timestamp.api-property.js.map +1 -0
- package/dist/timestamp/dayjs-timestamp.d.ts +59 -0
- package/dist/timestamp/dayjs-timestamp.js +205 -0
- package/dist/timestamp/dayjs-timestamp.js.map +1 -0
- package/dist/timestamp/future-infinity.d.ts +48 -0
- package/dist/timestamp/future-infinity.js +128 -0
- package/dist/timestamp/future-infinity.js.map +1 -0
- package/dist/timestamp/index.d.ts +30 -0
- package/dist/timestamp/index.js +15 -0
- package/dist/timestamp/index.js.map +1 -0
- package/dist/timestamp/max.d.ts +2 -0
- package/dist/timestamp/max.js +15 -0
- package/dist/timestamp/max.js.map +1 -0
- package/dist/timestamp/min.d.ts +2 -0
- package/dist/timestamp/min.js +15 -0
- package/dist/timestamp/min.js.map +1 -0
- package/dist/timestamp/past-infinity.d.ts +48 -0
- package/dist/timestamp/past-infinity.js +128 -0
- package/dist/timestamp/past-infinity.js.map +1 -0
- package/dist/timestamp/tests/dayjs-timestamp.unit.test.d.ts +1 -0
- package/dist/timestamp/tests/dayjs-timestamp.unit.test.js +18 -0
- package/dist/timestamp/tests/dayjs-timestamp.unit.test.js.map +1 -0
- package/dist/timestamp/tests/timestamp.factory.unit.test.d.ts +1 -0
- package/dist/timestamp/tests/timestamp.factory.unit.test.js +16 -0
- package/dist/timestamp/tests/timestamp.factory.unit.test.js.map +1 -0
- package/dist/timestamp/timestamp.d.ts +83 -0
- package/dist/timestamp/timestamp.factory.d.ts +18 -0
- package/dist/timestamp/timestamp.factory.js +36 -0
- package/dist/timestamp/timestamp.factory.js.map +1 -0
- package/dist/timestamp/timestamp.js +2 -0
- package/dist/timestamp/timestamp.js.map +1 -0
- package/dist/timestamp/typeorm/index.d.ts +1 -0
- package/dist/timestamp/typeorm/index.js +2 -0
- package/dist/timestamp/typeorm/index.js.map +1 -0
- package/dist/timestamp/typeorm/timestamp.column.d.ts +3 -0
- package/dist/timestamp/typeorm/timestamp.column.js +25 -0
- package/dist/timestamp/typeorm/timestamp.column.js.map +1 -0
- package/dist/timestamp/validators/index.d.ts +1 -0
- package/dist/timestamp/validators/index.js +2 -0
- package/dist/timestamp/validators/index.js.map +1 -0
- package/dist/timestamp/validators/is-timestamp.validator.d.ts +7 -0
- package/dist/timestamp/validators/is-timestamp.validator.js +34 -0
- package/dist/timestamp/validators/is-timestamp.validator.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { describe, it } from 'node:test';
|
|
11
|
+
import { plainToInstance } from 'class-transformer';
|
|
12
|
+
import { validate } from 'class-validator';
|
|
13
|
+
import { expect } from 'expect';
|
|
14
|
+
import { IsDateRange } from '../is-date-range.decorator.js';
|
|
15
|
+
import { DateRangeDto } from '../date-range.dto.js';
|
|
16
|
+
import { FutureInfinityDate } from '../../plain-date/future-infinity-date.js';
|
|
17
|
+
import { plainDate } from '../../plain-date/index.js';
|
|
18
|
+
describe('is date range decorator tests', () => {
|
|
19
|
+
describe('starts after option', () => {
|
|
20
|
+
class StartsAfterTestDto {
|
|
21
|
+
range;
|
|
22
|
+
}
|
|
23
|
+
__decorate([
|
|
24
|
+
IsDateRange({ startsAfter: () => plainDate.today() }),
|
|
25
|
+
__metadata("design:type", DateRangeDto)
|
|
26
|
+
], StartsAfterTestDto.prototype, "range", void 0);
|
|
27
|
+
it('detects validation errors when the date does not start after today', async () => {
|
|
28
|
+
const dto = plainToInstance(StartsAfterTestDto, { range: {
|
|
29
|
+
startDate: plainDate.today().toString(),
|
|
30
|
+
endDate: new FutureInfinityDate().toString()
|
|
31
|
+
} });
|
|
32
|
+
const errors = await validate(dto);
|
|
33
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
34
|
+
});
|
|
35
|
+
it('passes a date range which starts after today', async () => {
|
|
36
|
+
const dto = plainToInstance(StartsAfterTestDto, { range: {
|
|
37
|
+
startDate: plainDate.tomorrow().toString(),
|
|
38
|
+
endDate: new FutureInfinityDate().toString()
|
|
39
|
+
} });
|
|
40
|
+
const errors = await validate(dto);
|
|
41
|
+
expect(errors).toHaveLength(0);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('ends before option', () => {
|
|
45
|
+
class EndsBeforeTestDto {
|
|
46
|
+
range;
|
|
47
|
+
}
|
|
48
|
+
__decorate([
|
|
49
|
+
IsDateRange({ endsBefore: () => plainDate.futureInfinity() }),
|
|
50
|
+
__metadata("design:type", DateRangeDto)
|
|
51
|
+
], EndsBeforeTestDto.prototype, "range", void 0);
|
|
52
|
+
it('detects validation errors when the range does not end before infinity', async () => {
|
|
53
|
+
const dto = plainToInstance(EndsBeforeTestDto, { range: {
|
|
54
|
+
startDate: plainDate.today().toString(),
|
|
55
|
+
endDate: plainDate.futureInfinity().toString()
|
|
56
|
+
} });
|
|
57
|
+
const errors = await validate(dto);
|
|
58
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
59
|
+
});
|
|
60
|
+
it('passes a date range which ends before infinity', async () => {
|
|
61
|
+
const dto = plainToInstance(EndsBeforeTestDto, { range: {
|
|
62
|
+
startDate: plainDate.tomorrow().toString(),
|
|
63
|
+
endDate: plainDate.tomorrow().toString()
|
|
64
|
+
} });
|
|
65
|
+
const errors = await validate(dto);
|
|
66
|
+
expect(errors).toHaveLength(0);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('starts before option', () => {
|
|
70
|
+
class StartsBeforeTestDto {
|
|
71
|
+
range;
|
|
72
|
+
}
|
|
73
|
+
__decorate([
|
|
74
|
+
IsDateRange({ startsBefore: () => plainDate.tomorrow() }),
|
|
75
|
+
__metadata("design:type", DateRangeDto)
|
|
76
|
+
], StartsBeforeTestDto.prototype, "range", void 0);
|
|
77
|
+
it('detects validation errors when the date does not start before tomorrow', async () => {
|
|
78
|
+
const dto = plainToInstance(StartsBeforeTestDto, { range: {
|
|
79
|
+
startDate: plainDate.tomorrow().toString(),
|
|
80
|
+
endDate: new FutureInfinityDate().toString()
|
|
81
|
+
} });
|
|
82
|
+
const errors = await validate(dto);
|
|
83
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
84
|
+
});
|
|
85
|
+
it('passes a date range which starts before tomorrow', async () => {
|
|
86
|
+
const dto = plainToInstance(StartsBeforeTestDto, { range: {
|
|
87
|
+
startDate: plainDate.today().toString(),
|
|
88
|
+
endDate: new FutureInfinityDate().toString()
|
|
89
|
+
} });
|
|
90
|
+
const errors = await validate(dto);
|
|
91
|
+
expect(errors).toHaveLength(0);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('ends after option', () => {
|
|
95
|
+
class EndsAfterTestDto {
|
|
96
|
+
range;
|
|
97
|
+
}
|
|
98
|
+
__decorate([
|
|
99
|
+
IsDateRange({ endsAfter: () => plainDate.today() }),
|
|
100
|
+
__metadata("design:type", DateRangeDto)
|
|
101
|
+
], EndsAfterTestDto.prototype, "range", void 0);
|
|
102
|
+
it('detects validation errors when the range does not end after today', async () => {
|
|
103
|
+
const dto = plainToInstance(EndsAfterTestDto, { range: {
|
|
104
|
+
startDate: plainDate.today().toString(),
|
|
105
|
+
endDate: plainDate.today().toString()
|
|
106
|
+
} });
|
|
107
|
+
const errors = await validate(dto);
|
|
108
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
109
|
+
});
|
|
110
|
+
it('passes a date range which ends after today', async () => {
|
|
111
|
+
const dto = plainToInstance(EndsAfterTestDto, { range: {
|
|
112
|
+
startDate: plainDate.today().toString(),
|
|
113
|
+
endDate: plainDate.tomorrow().toString()
|
|
114
|
+
} });
|
|
115
|
+
const errors = await validate(dto);
|
|
116
|
+
expect(errors).toHaveLength(0);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=is-date-range.decorator.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-date-range.decorator.unit.test.js","sourceRoot":"","sources":["../../../lib/date-range/tests/is-date-range.decorator.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { Raw } from 'typeorm';
|
|
3
|
+
import { plainDate } from '../../plain-date/index.js';
|
|
4
|
+
export function ContainsPlainDate(date) {
|
|
5
|
+
const paramName = randomUUID().replaceAll('-', '');
|
|
6
|
+
return Raw((alias) => `${alias} @> :${paramName}::date`, { [paramName]: plainDate(date).toString() });
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=contains-plain-date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contains-plain-date.js","sourceRoot":"","sources":["../../../lib/date-range/typeorm/contains-plain-date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAgB,GAAG,EAAE,MAAM,SAAS,CAAA;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,MAAM,UAAU,iBAAiB,CAAE,IAAoB;IACrD,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAElD,OAAO,GAAG,CACR,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,SAAS,QAAQ,EACpD,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CACjB,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ColumnOptions } from 'typeorm';
|
|
2
|
+
import { DateRange } from '../date-range.js';
|
|
3
|
+
export type DateRangeColumnOptions = Omit<ColumnOptions, 'type' | 'transformer'>;
|
|
4
|
+
export declare function DateRangeColumn(options?: DateRangeColumnOptions): PropertyDecorator;
|
|
5
|
+
export declare class DateRangeTransformer {
|
|
6
|
+
private static instance;
|
|
7
|
+
static getInstance(): DateRangeTransformer;
|
|
8
|
+
private constructor();
|
|
9
|
+
from(value: string | null): DateRange | null;
|
|
10
|
+
to(value: DateRange | null): string | null;
|
|
11
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { applyDecorators } from '@nestjs/common';
|
|
2
|
+
import { Column } from 'typeorm';
|
|
3
|
+
import { DateRange } from '../date-range.js';
|
|
4
|
+
import { plainDate } from '../../plain-date/index.js';
|
|
5
|
+
export function DateRangeColumn(options) {
|
|
6
|
+
return applyDecorators(Column({
|
|
7
|
+
...options,
|
|
8
|
+
type: 'daterange',
|
|
9
|
+
transformer: DateRangeTransformer.getInstance()
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
export class DateRangeTransformer {
|
|
13
|
+
static instance;
|
|
14
|
+
static getInstance() {
|
|
15
|
+
DateRangeTransformer.instance ??= new DateRangeTransformer();
|
|
16
|
+
return DateRangeTransformer.instance;
|
|
17
|
+
}
|
|
18
|
+
constructor() { }
|
|
19
|
+
from(value) {
|
|
20
|
+
if (value === null) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
// Expected format (2020-01-01,2020-01-02]
|
|
24
|
+
const { 0: leftBracket, [value.length - 1]: rightBracket } = value;
|
|
25
|
+
const [startDate, endDate] = value.substring(1, value.length - 1).split(',');
|
|
26
|
+
return new DateRange(plainDate(startDate), plainDate(endDate), leftBracket + rightBracket);
|
|
27
|
+
}
|
|
28
|
+
to(value) {
|
|
29
|
+
return value?.toString() ?? null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=date-range-column.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-range-column.js","sourceRoot":"","sources":["../../../lib/date-range/typeorm/date-range-column.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAKrD,MAAM,UAAU,eAAe,CAAE,OAAgC;IAC/D,OAAO,eAAe,CACpB,MAAM,CAAC;QACL,GAAG,OAAO;QACV,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,oBAAoB,CAAC,WAAW,EAAE;KAChD,CAAC,CACH,CAAA;AACH,CAAC;AAED,MAAM,OAAO,oBAAoB;IACvB,MAAM,CAAC,QAAQ,CAAkC;IAElD,MAAM,CAAC,WAAW;QACvB,oBAAoB,CAAC,QAAQ,KAAK,IAAI,oBAAoB,EAAE,CAAA;QAE5D,OAAO,oBAAoB,CAAC,QAAQ,CAAA;IACtC,CAAC;IAED,gBAAwB,CAAC;IAEzB,IAAI,CAAE,KAAoB;QACxB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,0CAA0C;QAC1C,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,KAAK,CAAA;QAClE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAE5E,OAAO,IAAI,SAAS,CAClB,SAAS,CAAC,SAAS,CAAC,EACpB,SAAS,CAAC,OAAO,CAAC,EAClB,WAAW,GAAG,YAAiC,CAChD,CAAA;IACH,CAAC;IAED,EAAE,CAAE,KAAuB;QACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAA;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/date-range/typeorm/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DateTimeRangeDto } from './date-time-range.command.js';
|
|
2
|
+
export class DateTimeRangeCommandBuilder {
|
|
3
|
+
command;
|
|
4
|
+
constructor() {
|
|
5
|
+
this.command = new DateTimeRangeDto();
|
|
6
|
+
this.command.startDate = '-infinity';
|
|
7
|
+
this.command.endDate = 'infinity';
|
|
8
|
+
}
|
|
9
|
+
withFrom(date) {
|
|
10
|
+
this.command.from = date;
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
withUntil(date) {
|
|
14
|
+
this.command.until = date;
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
build() {
|
|
18
|
+
return this.command;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=date-time-range.command-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-range.command-builder.js","sourceRoot":"","sources":["../../lib/date-time-range/date-time-range.command-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE/D,MAAM,OAAO,2BAA2B;IACrB,OAAO,CAAkB;IAE1C;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAA;QACrC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAA;QACpC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,UAAU,CAAA;IACnC,CAAC;IAED,QAAQ,CAAE,IAAY;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;QAExB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,SAAS,CAAE,IAAY;QACrB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAA;QAEzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { FilterQuery } from '@wisemen/pagination';
|
|
11
|
+
import { IsTimestamp, TimestampApiProperty } from '../timestamp/index.js';
|
|
12
|
+
import { DateTimeRange } from './date-time-range.js';
|
|
13
|
+
export class DateTimeRangeDto extends FilterQuery {
|
|
14
|
+
from;
|
|
15
|
+
until;
|
|
16
|
+
parse() {
|
|
17
|
+
return new DateTimeRange(this.from, this.until);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
__decorate([
|
|
21
|
+
TimestampApiProperty({ description: 'start of the range, inclusive' }),
|
|
22
|
+
IsTimestamp(),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], DateTimeRangeDto.prototype, "from", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
TimestampApiProperty({ description: 'end of the range, exclusive' }),
|
|
27
|
+
IsTimestamp(),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], DateTimeRangeDto.prototype, "until", void 0);
|
|
30
|
+
//# sourceMappingURL=date-time-range.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-range.command.js","sourceRoot":"","sources":["../../lib/date-time-range/date-time-range.command.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAG/C,IAAI,CAAQ;IAIZ,KAAK,CAAQ;IAEb,KAAK;QACH,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACjD,CAAC;CACF;AATC;IAFC,oBAAoB,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IACtE,WAAW,EAAE;;8CACF;AAIZ;IAFC,oBAAoB,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IACpE,WAAW,EAAE;;+CACD"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Inclusivity, InclusivityString } from '../common/inclusivity.js';
|
|
2
|
+
import { Timestamp, TimestampInput } from '../timestamp/timestamp.js';
|
|
3
|
+
import { MultiDateTimeRange } from '../multi-date-time-range/multi-date-time-range.js';
|
|
4
|
+
/**
|
|
5
|
+
* DateTimeRange only works with inclusive ranges internally, except for infinities
|
|
6
|
+
* When an exclusive date is given, this date is mapped to the next or previous inclusive date
|
|
7
|
+
* for the upper and lower bound respectively
|
|
8
|
+
*
|
|
9
|
+
* As a result, empty ranges cannot be represented.
|
|
10
|
+
* DateTimeRange uses a maximum precision of milliseconds.
|
|
11
|
+
*/
|
|
12
|
+
export declare class DateTimeRange {
|
|
13
|
+
readonly from: Timestamp;
|
|
14
|
+
readonly until: Timestamp;
|
|
15
|
+
/**
|
|
16
|
+
* @param from inclusive start of the range
|
|
17
|
+
* @param until exclusive end of the range
|
|
18
|
+
*/
|
|
19
|
+
constructor(from: TimestampInput, until: TimestampInput);
|
|
20
|
+
/**
|
|
21
|
+
* @param from start of the range
|
|
22
|
+
* @param until end of the range
|
|
23
|
+
* @param inclusivity inclusivity for both ends of the range
|
|
24
|
+
*/
|
|
25
|
+
constructor(from: TimestampInput, until: TimestampInput, inclusivity: InclusivityString);
|
|
26
|
+
/**
|
|
27
|
+
* @param from start of the range
|
|
28
|
+
* @param until end of the range
|
|
29
|
+
* @param lowerBoundInclusivity inclusivity for the start of the range (from)
|
|
30
|
+
* @param lowerBoundInclusivity inclusivity for the end of the range (until)
|
|
31
|
+
*/
|
|
32
|
+
constructor(from: TimestampInput, until: TimestampInput, lowerBoundInclusivity: Inclusivity, upperBoundInclusivity: Inclusivity);
|
|
33
|
+
/** Returns the number of whole years in the range. */
|
|
34
|
+
get years(): number;
|
|
35
|
+
/** Returns the number of whole months in the range. */
|
|
36
|
+
get months(): number;
|
|
37
|
+
/** Returns the number of whole weeks in the range. */
|
|
38
|
+
get weeks(): number;
|
|
39
|
+
/** Returns the number of whole days in the range. */
|
|
40
|
+
get days(): number;
|
|
41
|
+
/** Returns the number of whole hours in the range. */
|
|
42
|
+
get hours(): number;
|
|
43
|
+
/** Returns the number of whole minutes in the range. */
|
|
44
|
+
get minutes(): number;
|
|
45
|
+
/** Returns the number of whole seconds in the range. */
|
|
46
|
+
get seconds(): number;
|
|
47
|
+
/** Returns the number of whole milliseconds in the range. */
|
|
48
|
+
get milliseconds(): number;
|
|
49
|
+
/** Checks if the given date falls within the range. */
|
|
50
|
+
contains(date: TimestampInput): boolean;
|
|
51
|
+
/** Checks if the given range is entirely contained within this range */
|
|
52
|
+
containsRange(range: DateTimeRange): boolean;
|
|
53
|
+
/** Returns true if the range starts after the given date. */
|
|
54
|
+
startsAfter(date: Timestamp | Date): boolean;
|
|
55
|
+
/** Returns true if the range ends before the given date. */
|
|
56
|
+
endsBefore(date: Timestamp | Date): boolean;
|
|
57
|
+
/** Returns true if the range overlaps with another DateTimeRange. */
|
|
58
|
+
overlaps(withRange: DateTimeRange): boolean;
|
|
59
|
+
/** Returns the overlapping range with another DateTimeRange, or throws if none. */
|
|
60
|
+
overlap(withRange: DateTimeRange): DateTimeRange;
|
|
61
|
+
/** Returns the portions of the range not covered by another DateTimeRange as an array. */
|
|
62
|
+
diff(withRange: DateTimeRange): MultiDateTimeRange;
|
|
63
|
+
/** Checks if both ranges have the same boundaries. */
|
|
64
|
+
isSame(otherRange: DateTimeRange): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Returns a string representation of the range, indicating inclusivity and bounds in ISO format.
|
|
67
|
+
* @example "(-infinity, 2025-10-17T14:22:14.768+00)"
|
|
68
|
+
*/
|
|
69
|
+
toString(): string;
|
|
70
|
+
toJSON(): string;
|
|
71
|
+
/** Returns a new DateTimeRange with updated end boundary. */
|
|
72
|
+
setUntil(until: TimestampInput): DateTimeRange;
|
|
73
|
+
/** Returns a new DateTimeRange with updated start boundary. */
|
|
74
|
+
setFrom(from: TimestampInput): DateTimeRange;
|
|
75
|
+
/** Returns true if this range ends immediately before the other range starts. */
|
|
76
|
+
precedes(other: DateTimeRange): boolean;
|
|
77
|
+
/** Returns true if this range is immediately preceded by the other range. */
|
|
78
|
+
isPrecededBy(other: DateTimeRange): boolean;
|
|
79
|
+
/** Returns true if this range starts immediately after the other range ends. */
|
|
80
|
+
succeeds(other: DateTimeRange): boolean;
|
|
81
|
+
/** Returns true if this range is immediately succeeded by the other range. */
|
|
82
|
+
isSucceededBy(other: DateTimeRange): boolean;
|
|
83
|
+
/** Returns true if the ranges are directly adjacent (preceding or succeeding). */
|
|
84
|
+
isAdjacentTo(other: DateTimeRange): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Merges two overlapping or adjacent ranges into a new range which consists of the
|
|
87
|
+
* earliest timestamp until the latest timestamp of both ranges
|
|
88
|
+
* @throws when ranges do not overlap
|
|
89
|
+
*/
|
|
90
|
+
merge(withOther: DateTimeRange): DateTimeRange;
|
|
91
|
+
/** Merges two adjacent ranges into one; throws if not adjacent. */
|
|
92
|
+
mergeAdjacent(withOther: DateTimeRange): DateTimeRange;
|
|
93
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DateTimeRange } from './date-time-range.js';
|
|
2
|
+
export declare class InvalidDateTimeRangeBounds extends Error {
|
|
3
|
+
private dateRange;
|
|
4
|
+
constructor(dateRange: DateTimeRange);
|
|
5
|
+
}
|
|
6
|
+
export declare class NoDateTimeRangeOverlap extends Error {
|
|
7
|
+
firstRange: DateTimeRange;
|
|
8
|
+
secondRange: DateTimeRange;
|
|
9
|
+
constructor(firstRange: DateTimeRange, secondRange: DateTimeRange);
|
|
10
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class InvalidDateTimeRangeBounds extends Error {
|
|
2
|
+
dateRange;
|
|
3
|
+
constructor(dateRange) {
|
|
4
|
+
const startDate = dateRange.from.toISOString();
|
|
5
|
+
const endDate = dateRange.until.toISOString();
|
|
6
|
+
super(`[DateTimeRange] start date ${startDate} must lie before end date ${endDate}`);
|
|
7
|
+
this.dateRange = dateRange;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class NoDateTimeRangeOverlap extends Error {
|
|
11
|
+
firstRange;
|
|
12
|
+
secondRange;
|
|
13
|
+
constructor(firstRange, secondRange) {
|
|
14
|
+
super();
|
|
15
|
+
this.firstRange = firstRange;
|
|
16
|
+
this.secondRange = secondRange;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=date-time-range.errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-range.errors.js","sourceRoot":"","sources":["../../lib/date-time-range/date-time-range.errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAEzC;IADV,YACU,SAAwB;QAEhC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;QAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;QAE7C,KAAK,CAAC,8BAA8B,SAAS,6BAA6B,OAAO,EAAE,CAAC,CAAA;QAL5E,cAAS,GAAT,SAAS,CAAe;IAMlC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAEtC;IACA;IAFT,YACS,UAAyB,EACzB,WAA0B;QAEjC,KAAK,EAAE,CAAA;QAHA,eAAU,GAAV,UAAU,CAAe;QACzB,gBAAW,GAAX,WAAW,CAAe;IAGnC,CAAC;CACF"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { isDate } from 'util/types';
|
|
2
|
+
import { Inclusivity, mapToInclusivity, isInclusive } from '../common/inclusivity.js';
|
|
3
|
+
import { timestamp } from '../timestamp/index.js';
|
|
4
|
+
import { MultiDateTimeRange } from '../multi-date-time-range/multi-date-time-range.js';
|
|
5
|
+
import { InvalidDateTimeRangeBounds, NoDateTimeRangeOverlap } from './date-time-range.errors.js';
|
|
6
|
+
/**
|
|
7
|
+
* DateTimeRange only works with inclusive ranges internally, except for infinities
|
|
8
|
+
* When an exclusive date is given, this date is mapped to the next or previous inclusive date
|
|
9
|
+
* for the upper and lower bound respectively
|
|
10
|
+
*
|
|
11
|
+
* As a result, empty ranges cannot be represented.
|
|
12
|
+
* DateTimeRange uses a maximum precision of milliseconds.
|
|
13
|
+
*/
|
|
14
|
+
export class DateTimeRange {
|
|
15
|
+
from;
|
|
16
|
+
until;
|
|
17
|
+
constructor(from, until, lowerBoundOrBoundsInclusivity = Inclusivity.INCLUSIVE, upperBoundInclusivity = Inclusivity.EXCLUSIVE) {
|
|
18
|
+
from = timestamp(from);
|
|
19
|
+
until = timestamp(until);
|
|
20
|
+
if (typeof lowerBoundOrBoundsInclusivity === 'string') {
|
|
21
|
+
const [lower, upper] = mapToInclusivity(lowerBoundOrBoundsInclusivity);
|
|
22
|
+
lowerBoundOrBoundsInclusivity = lower;
|
|
23
|
+
upperBoundInclusivity = upper;
|
|
24
|
+
}
|
|
25
|
+
else if (upperBoundInclusivity === undefined) {
|
|
26
|
+
upperBoundInclusivity = lowerBoundOrBoundsInclusivity;
|
|
27
|
+
}
|
|
28
|
+
if (!isInclusive(lowerBoundOrBoundsInclusivity)) {
|
|
29
|
+
from = from.add(1, 'ms');
|
|
30
|
+
}
|
|
31
|
+
if (isInclusive(upperBoundInclusivity)) {
|
|
32
|
+
until = until.add(1, 'ms');
|
|
33
|
+
}
|
|
34
|
+
this.from = from;
|
|
35
|
+
this.until = until;
|
|
36
|
+
if (until.isSameOrBefore(from) && from.isSameOrAfter(until)) {
|
|
37
|
+
throw new InvalidDateTimeRangeBounds(this);
|
|
38
|
+
}
|
|
39
|
+
if (from.isFutureInfinity() && until.isFutureInfinity()) {
|
|
40
|
+
throw new InvalidDateTimeRangeBounds(this);
|
|
41
|
+
}
|
|
42
|
+
if (from.isPastInfinity() && until.isPastInfinity()) {
|
|
43
|
+
throw new InvalidDateTimeRangeBounds(this);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Returns the number of whole years in the range. */
|
|
47
|
+
get years() {
|
|
48
|
+
return this.until.diff(this.from, 'years');
|
|
49
|
+
}
|
|
50
|
+
/** Returns the number of whole months in the range. */
|
|
51
|
+
get months() {
|
|
52
|
+
return this.until.diff(this.from, 'months');
|
|
53
|
+
}
|
|
54
|
+
/** Returns the number of whole weeks in the range. */
|
|
55
|
+
get weeks() {
|
|
56
|
+
return this.until.diff(this.from, 'weeks');
|
|
57
|
+
}
|
|
58
|
+
/** Returns the number of whole days in the range. */
|
|
59
|
+
get days() {
|
|
60
|
+
return this.until.diff(this.from, 'days');
|
|
61
|
+
}
|
|
62
|
+
/** Returns the number of whole hours in the range. */
|
|
63
|
+
get hours() {
|
|
64
|
+
return this.until.diff(this.from, 'hours');
|
|
65
|
+
}
|
|
66
|
+
/** Returns the number of whole minutes in the range. */
|
|
67
|
+
get minutes() {
|
|
68
|
+
return this.until.diff(this.from, 'minutes');
|
|
69
|
+
}
|
|
70
|
+
/** Returns the number of whole seconds in the range. */
|
|
71
|
+
get seconds() {
|
|
72
|
+
return this.until.diff(this.from, 'seconds');
|
|
73
|
+
}
|
|
74
|
+
/** Returns the number of whole milliseconds in the range. */
|
|
75
|
+
get milliseconds() {
|
|
76
|
+
return this.until.diff(this.from, 'milliseconds');
|
|
77
|
+
}
|
|
78
|
+
/** Checks if the given date falls within the range. */
|
|
79
|
+
contains(date) {
|
|
80
|
+
date = timestamp(date);
|
|
81
|
+
return !date.isPastInfinity() && !date.isFutureInfinity()
|
|
82
|
+
&& date.isSameOrAfter(this.from) && this.until.isAfter(date);
|
|
83
|
+
}
|
|
84
|
+
/** Checks if the given range is entirely contained within this range */
|
|
85
|
+
containsRange(range) {
|
|
86
|
+
return this.from.isSameOrBefore(range.from) && this.until.isSameOrAfter(range.until);
|
|
87
|
+
}
|
|
88
|
+
/** Returns true if the range starts after the given date. */
|
|
89
|
+
startsAfter(date) {
|
|
90
|
+
if (isDate(date)) {
|
|
91
|
+
date = timestamp(date);
|
|
92
|
+
}
|
|
93
|
+
return date.isBefore(this.from);
|
|
94
|
+
}
|
|
95
|
+
/** Returns true if the range ends before the given date. */
|
|
96
|
+
endsBefore(date) {
|
|
97
|
+
if (isDate(date)) {
|
|
98
|
+
date = timestamp(date);
|
|
99
|
+
}
|
|
100
|
+
return date.isSameOrAfter(this.until);
|
|
101
|
+
}
|
|
102
|
+
/** Returns true if the range overlaps with another DateTimeRange. */
|
|
103
|
+
overlaps(withRange) {
|
|
104
|
+
return this.from.isBefore(withRange.until) && this.until.isAfter(withRange.from);
|
|
105
|
+
}
|
|
106
|
+
/** Returns the overlapping range with another DateTimeRange, or throws if none. */
|
|
107
|
+
overlap(withRange) {
|
|
108
|
+
if (!this.overlaps(withRange)) {
|
|
109
|
+
throw new NoDateTimeRangeOverlap(this, withRange);
|
|
110
|
+
}
|
|
111
|
+
const { from: startA, until: endA } = this;
|
|
112
|
+
const { from: startB, until: endB } = withRange;
|
|
113
|
+
return new DateTimeRange(timestamp.max(startA, startB), timestamp.min(endA, endB));
|
|
114
|
+
}
|
|
115
|
+
/** Returns the portions of the range not covered by another DateTimeRange as an array. */
|
|
116
|
+
diff(withRange) {
|
|
117
|
+
if (!this.overlaps(withRange)) {
|
|
118
|
+
return new MultiDateTimeRange([this]);
|
|
119
|
+
}
|
|
120
|
+
const overlap = this.overlap(withRange);
|
|
121
|
+
const difference = [];
|
|
122
|
+
if (overlap.from.isAfter(this.from)) {
|
|
123
|
+
difference.push(new DateTimeRange(this.from, overlap.from));
|
|
124
|
+
}
|
|
125
|
+
if (overlap.until.isBefore(this.until)) {
|
|
126
|
+
difference.push(new DateTimeRange(overlap.until, this.until));
|
|
127
|
+
}
|
|
128
|
+
return new MultiDateTimeRange(difference);
|
|
129
|
+
}
|
|
130
|
+
/** Checks if both ranges have the same boundaries. */
|
|
131
|
+
isSame(otherRange) {
|
|
132
|
+
return this.from.isSame(otherRange.from)
|
|
133
|
+
&& this.until.isSame(otherRange.until);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Returns a string representation of the range, indicating inclusivity and bounds in ISO format.
|
|
137
|
+
* @example "(-infinity, 2025-10-17T14:22:14.768+00)"
|
|
138
|
+
*/
|
|
139
|
+
toString() {
|
|
140
|
+
const startInclusivity = this.from.isInfinity() ? `(` : '[';
|
|
141
|
+
return startInclusivity + this.from.toISOString() + ',' + this.until.toISOString() + ')';
|
|
142
|
+
}
|
|
143
|
+
toJSON() {
|
|
144
|
+
return this.toString();
|
|
145
|
+
}
|
|
146
|
+
/** Returns a new DateTimeRange with updated end boundary. */
|
|
147
|
+
setUntil(until) {
|
|
148
|
+
until = timestamp(until);
|
|
149
|
+
return new DateTimeRange(this.from, until);
|
|
150
|
+
}
|
|
151
|
+
/** Returns a new DateTimeRange with updated start boundary. */
|
|
152
|
+
setFrom(from) {
|
|
153
|
+
from = timestamp(from);
|
|
154
|
+
return new DateTimeRange(from, this.until);
|
|
155
|
+
}
|
|
156
|
+
/** Returns true if this range ends immediately before the other range starts. */
|
|
157
|
+
precedes(other) {
|
|
158
|
+
return (!this.until.isFutureInfinity())
|
|
159
|
+
&& (this.until.isSame(other.from));
|
|
160
|
+
}
|
|
161
|
+
/** Returns true if this range is immediately preceded by the other range. */
|
|
162
|
+
isPrecededBy(other) {
|
|
163
|
+
return other.precedes(this);
|
|
164
|
+
}
|
|
165
|
+
/** Returns true if this range starts immediately after the other range ends. */
|
|
166
|
+
succeeds(other) {
|
|
167
|
+
return (!this.from.isPastInfinity())
|
|
168
|
+
&& (this.from.isSame(other.until));
|
|
169
|
+
}
|
|
170
|
+
/** Returns true if this range is immediately succeeded by the other range. */
|
|
171
|
+
isSucceededBy(other) {
|
|
172
|
+
return other.succeeds(this);
|
|
173
|
+
}
|
|
174
|
+
/** Returns true if the ranges are directly adjacent (preceding or succeeding). */
|
|
175
|
+
isAdjacentTo(other) {
|
|
176
|
+
return this.precedes(other) || this.succeeds(other);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Merges two overlapping or adjacent ranges into a new range which consists of the
|
|
180
|
+
* earliest timestamp until the latest timestamp of both ranges
|
|
181
|
+
* @throws when ranges do not overlap
|
|
182
|
+
*/
|
|
183
|
+
merge(withOther) {
|
|
184
|
+
if (this.isAdjacentTo(withOther)) {
|
|
185
|
+
return this.mergeAdjacent(withOther);
|
|
186
|
+
}
|
|
187
|
+
if (!this.overlaps(withOther)) {
|
|
188
|
+
throw new Error('Invalid argument: no overlap with given range');
|
|
189
|
+
}
|
|
190
|
+
return new DateTimeRange(timestamp.min(this.from, withOther.from), timestamp.max(this.until, withOther.until));
|
|
191
|
+
}
|
|
192
|
+
/** Merges two adjacent ranges into one; throws if not adjacent. */
|
|
193
|
+
mergeAdjacent(withOther) {
|
|
194
|
+
if (this.isPrecededBy(withOther)) {
|
|
195
|
+
return this.setFrom(withOther.from);
|
|
196
|
+
}
|
|
197
|
+
else if (this.isSucceededBy(withOther)) {
|
|
198
|
+
return this.setUntil(withOther.until);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
throw new Error('cannot merge non adjacent date time ranges');
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=date-time-range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time-range.js","sourceRoot":"","sources":["../../lib/date-time-range/date-time-range.ts"],"names":[],"mappings":"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"}
|