@duplojs/utils 1.3.23 → 1.3.25

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.
Files changed (69) hide show
  1. package/dist/array/index.cjs +2 -0
  2. package/dist/array/index.d.ts +1 -0
  3. package/dist/array/index.mjs +1 -0
  4. package/dist/array/join.d.ts +3 -7
  5. package/dist/array/lengthEqual.cjs +12 -0
  6. package/dist/array/lengthEqual.d.ts +3 -0
  7. package/dist/array/lengthEqual.mjs +10 -0
  8. package/dist/array/types/createTuple.d.ts +1 -1
  9. package/dist/array/types/index.d.ts +1 -0
  10. package/dist/array/types/joinTuple.d.ts +6 -0
  11. package/dist/date/create.d.ts +12 -5
  12. package/dist/date/operators/addDays.cjs +1 -2
  13. package/dist/date/operators/addDays.d.ts +2 -3
  14. package/dist/date/operators/addDays.mjs +1 -2
  15. package/dist/date/operators/addHours.cjs +1 -2
  16. package/dist/date/operators/addHours.d.ts +2 -3
  17. package/dist/date/operators/addHours.mjs +1 -2
  18. package/dist/date/operators/addMilliseconds.cjs +1 -2
  19. package/dist/date/operators/addMilliseconds.d.ts +2 -3
  20. package/dist/date/operators/addMilliseconds.mjs +1 -2
  21. package/dist/date/operators/addMinutes.cjs +1 -2
  22. package/dist/date/operators/addMinutes.d.ts +2 -3
  23. package/dist/date/operators/addMinutes.mjs +1 -2
  24. package/dist/date/operators/addMonths.cjs +1 -2
  25. package/dist/date/operators/addMonths.d.ts +2 -3
  26. package/dist/date/operators/addMonths.mjs +1 -2
  27. package/dist/date/operators/addSeconds.cjs +1 -2
  28. package/dist/date/operators/addSeconds.d.ts +2 -3
  29. package/dist/date/operators/addSeconds.mjs +1 -2
  30. package/dist/date/operators/addWeeks.cjs +1 -2
  31. package/dist/date/operators/addWeeks.d.ts +2 -3
  32. package/dist/date/operators/addWeeks.mjs +1 -2
  33. package/dist/date/operators/addYears.cjs +1 -2
  34. package/dist/date/operators/addYears.d.ts +2 -3
  35. package/dist/date/operators/addYears.mjs +1 -2
  36. package/dist/date/operators/subtractDays.cjs +1 -2
  37. package/dist/date/operators/subtractDays.d.ts +2 -3
  38. package/dist/date/operators/subtractDays.mjs +1 -2
  39. package/dist/date/operators/subtractHours.cjs +1 -2
  40. package/dist/date/operators/subtractHours.d.ts +2 -3
  41. package/dist/date/operators/subtractHours.mjs +1 -2
  42. package/dist/date/operators/subtractMilliseconds.cjs +1 -2
  43. package/dist/date/operators/subtractMilliseconds.d.ts +2 -3
  44. package/dist/date/operators/subtractMilliseconds.mjs +1 -2
  45. package/dist/date/operators/subtractMinutes.cjs +1 -2
  46. package/dist/date/operators/subtractMinutes.d.ts +2 -3
  47. package/dist/date/operators/subtractMinutes.mjs +1 -2
  48. package/dist/date/operators/subtractMonths.cjs +1 -2
  49. package/dist/date/operators/subtractMonths.d.ts +2 -3
  50. package/dist/date/operators/subtractMonths.mjs +1 -2
  51. package/dist/date/operators/subtractSeconds.cjs +1 -2
  52. package/dist/date/operators/subtractSeconds.d.ts +2 -3
  53. package/dist/date/operators/subtractSeconds.mjs +1 -2
  54. package/dist/date/operators/subtractWeeks.cjs +1 -2
  55. package/dist/date/operators/subtractWeeks.d.ts +2 -3
  56. package/dist/date/operators/subtractWeeks.mjs +1 -2
  57. package/dist/date/operators/subtractYears.cjs +1 -2
  58. package/dist/date/operators/subtractYears.d.ts +2 -3
  59. package/dist/date/operators/subtractYears.mjs +1 -2
  60. package/dist/date/types/index.d.ts +1 -0
  61. package/dist/date/types/isLeapYear.d.ts +3 -3
  62. package/dist/date/types/isSafeYear.d.ts +53 -0
  63. package/dist/metadata.json +22 -1
  64. package/dist/number/types/absolute.d.ts +5 -0
  65. package/dist/number/types/forbiddenNegative.d.ts +6 -0
  66. package/dist/number/types/index.d.ts +3 -1
  67. package/dist/number/types/isPositive.d.ts +3 -0
  68. package/package.json +1 -1
  69. package/dist/number/types/positiveNumber.d.ts +0 -1
@@ -43,6 +43,7 @@ var chunk = require('./chunk.cjs');
43
43
  var insert$2 = require('./insert.cjs');
44
44
  var isLastIndex = require('./isLastIndex.cjs');
45
45
  var select = require('./select.cjs');
46
+ var lengthEqual = require('./lengthEqual.cjs');
46
47
  var _delete = require('./splice/delete.cjs');
47
48
  var insert = require('./splice/insert.cjs');
48
49
  var replace = require('./splice/replace.cjs');
@@ -104,6 +105,7 @@ exports.insert = insert$2.insert;
104
105
  exports.isLastIndex = isLastIndex.isLastIndex;
105
106
  exports.select = select.select;
106
107
  exports.selectTools = select.selectTools;
108
+ exports.lengthEqual = lengthEqual.lengthEqual;
107
109
  exports.spliceDelete = _delete.spliceDelete;
108
110
  exports.spliceInsert = insert.spliceInsert;
109
111
  exports.spliceReplace = replace.spliceReplace;
@@ -46,3 +46,4 @@ export * from "./chunk";
46
46
  export * from "./insert";
47
47
  export * from "./isLastIndex";
48
48
  export * from "./select";
49
+ export * from "./lengthEqual";
@@ -41,6 +41,7 @@ export { chunk } from './chunk.mjs';
41
41
  export { insert } from './insert.mjs';
42
42
  export { isLastIndex } from './isLastIndex.mjs';
43
43
  export { select, selectTools } from './select.mjs';
44
+ export { lengthEqual } from './lengthEqual.mjs';
44
45
  export { spliceDelete } from './splice/delete.mjs';
45
46
  export { spliceInsert } from './splice/insert.mjs';
46
47
  export { spliceReplace } from './splice/replace.mjs';
@@ -1,8 +1,4 @@
1
- import { type IsEqual } from "../common";
2
- import { type Adaptor } from "../common/types/adaptor";
3
1
  import { type AnyTuple } from "../common/types/anyTuple";
4
- import { type ShiftTuple } from "./types";
5
- type ComputeResult<GenericArray extends readonly string[], GenericSeparator extends string, Depth extends readonly unknown[] = []> = Depth["length"] extends 40 ? string : GenericArray extends AnyTuple ? IsEqual<GenericArray["length"], 1> extends true ? GenericArray[0] : `${GenericArray[0]}${GenericSeparator}${ComputeResult<Adaptor<ShiftTuple<GenericArray>, readonly string[]>, GenericSeparator, [...Depth, 0]>}` : string;
6
- export declare function join<GenericArray extends readonly string[], GenericSeparator extends string>(separator: GenericSeparator): (array: GenericArray) => GenericArray extends AnyTuple ? ComputeResult<GenericArray, GenericSeparator> : string;
7
- export declare function join<GenericArray extends readonly string[], GenericSeparator extends string>(array: GenericArray, separator: GenericSeparator): GenericArray extends AnyTuple ? ComputeResult<GenericArray, GenericSeparator> : string;
8
- export {};
2
+ import { type JoinTuple } from "./types";
3
+ export declare function join<GenericArray extends readonly string[], GenericSeparator extends string>(separator: GenericSeparator): (array: GenericArray) => GenericArray extends AnyTuple ? JoinTuple<GenericArray, GenericSeparator> : string;
4
+ export declare function join<GenericArray extends readonly string[], GenericSeparator extends string>(array: GenericArray, separator: GenericSeparator): GenericArray extends AnyTuple ? JoinTuple<GenericArray, GenericSeparator> : string;
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ function lengthEqual(...args) {
4
+ if (args.length === 1) {
5
+ const [minLength] = args;
6
+ return (array) => lengthEqual(array, minLength);
7
+ }
8
+ const [array, minLength] = args;
9
+ return array.length === minLength;
10
+ }
11
+
12
+ exports.lengthEqual = lengthEqual;
@@ -0,0 +1,3 @@
1
+ import { type CreateTuple } from "./types";
2
+ export declare function lengthEqual<GenericArray extends readonly unknown[], GenericLength extends number>(length: GenericLength): (array: GenericArray) => array is CreateTuple<GenericArray[number], GenericLength>;
3
+ export declare function lengthEqual<GenericArray extends readonly unknown[], GenericLength extends number>(array: GenericArray, length: GenericLength): array is CreateTuple<GenericArray[number], GenericLength>;
@@ -0,0 +1,10 @@
1
+ function lengthEqual(...args) {
2
+ if (args.length === 1) {
3
+ const [minLength] = args;
4
+ return (array) => lengthEqual(array, minLength);
5
+ }
6
+ const [array, minLength] = args;
7
+ return array.length === minLength;
8
+ }
9
+
10
+ export { lengthEqual };
@@ -1,2 +1,2 @@
1
1
  import { type IsEqual } from "../../common/types/isEqual";
2
- export type CreateTuple<GenericValue extends unknown, GenericLength extends number, GenericLastTuple extends unknown[] = []> = IsEqual<GenericLength, number> extends true ? GenericValue[] : [...GenericLastTuple, GenericValue] extends infer InferredResult extends any[] ? IsEqual<InferredResult["length"], GenericLength> extends true ? InferredResult : IsEqual<InferredResult["length"], 1000> extends true ? [...InferredResult, ...GenericValue[]] : CreateTuple<GenericValue, GenericLength, InferredResult> : never;
2
+ export type CreateTuple<GenericValue extends unknown, GenericLength extends number, GenericLastTuple extends unknown[] = []> = IsEqual<GenericLength, number> extends true ? GenericValue[] : IsEqual<GenericLength, 0> extends true ? [] : [...GenericLastTuple, GenericValue] extends infer InferredResult extends any[] ? IsEqual<InferredResult["length"], GenericLength> extends true ? InferredResult : IsEqual<InferredResult["length"], 1000> extends true ? [...InferredResult, ...GenericValue[]] : CreateTuple<GenericValue, GenericLength, InferredResult> : never;
@@ -8,3 +8,4 @@ export * from "./extractTuple";
8
8
  export * from "./excludeTuple";
9
9
  export * from "./createTuple";
10
10
  export * from "./ArrayCoalescing";
11
+ export * from "./joinTuple";
@@ -0,0 +1,6 @@
1
+ import { type AnyTuple, type IsEqual } from "../../common";
2
+ import { type ShiftTuple } from "./shiftTuple";
3
+ export type JoinTuple<GenericArray extends AnyTuple<string> | readonly [], GenericSeparator extends string, GenericDepth extends readonly unknown[] = []> = GenericArray extends AnyTuple<string> ? IsEqual<GenericDepth["length"], 100> extends true ? string : ShiftTuple<GenericArray> extends infer InferredRest extends readonly string[] ? InferredRest extends AnyTuple<string> ? JoinTuple<InferredRest, GenericSeparator, [
4
+ ...GenericDepth,
5
+ 0
6
+ ]> extends infer InferredRestResult extends string ? `${GenericArray[0]}${GenericSeparator}${InferredRestResult}` : never : InferredRest extends readonly [] ? GenericArray[0] : `${GenericArray[0]}${GenericSeparator}${string}` : never : "";
@@ -1,8 +1,17 @@
1
- import type { Hour, IsLeapYear, Millisecond, Minute, Second, TheDate } from "./types";
1
+ import type { Hour, IsLeapYear, IsSafeYear, Millisecond, Minute, Second, TheDate } from "./types";
2
2
  import { type EitherLeft, type EitherRight } from "../either";
3
3
  import { type MonthWithDay } from "./types/month";
4
+ import type * as DString from "../string";
4
5
  export type MayBe = EitherRight<"date-created", TheDate> | EitherLeft<"date-created-error", null>;
5
- declare const SymbolErrorIsNotLeapYear: unique symbol;
6
+ type SafeDate = `${number}-${MonthWithDay}`;
7
+ declare const SymbolForbiddenDate: unique symbol;
8
+ type ForbiddenDate<GenericDate extends SafeDate> = ((DString.Includes<GenericDate, "."> extends true ? {
9
+ [SymbolForbiddenDate]: "Year can't be includes a float number.";
10
+ } : GenericDate) & (GenericDate extends `${infer InferredYear extends number}-02-29` ? IsLeapYear<InferredYear> extends true ? GenericDate : {
11
+ [SymbolForbiddenDate]: "Is not a leap year.";
12
+ } : GenericDate) & (GenericDate extends `${infer InferredYear extends number}-${MonthWithDay}` ? IsSafeYear<InferredYear> extends true ? GenericDate : {
13
+ [SymbolForbiddenDate]: "Support that the years between -271820 and 275759.";
14
+ } : GenericDate));
6
15
  interface SafeDateParams {
7
16
  hour?: Hour;
8
17
  minute?: Minute;
@@ -10,7 +19,5 @@ interface SafeDateParams {
10
19
  millisecond?: Millisecond;
11
20
  }
12
21
  export declare function create<GenericInput extends TheDate | Date | number>(input: GenericInput): MayBe;
13
- export declare function create<GenericInput extends `${"-" | ""}${number}-${MonthWithDay}`>(input: GenericInput & (GenericInput extends `${"-" | ""}${infer InferredYear extends `${number}`}-02-29` ? IsLeapYear<InferredYear> extends true ? GenericInput : {
14
- [SymbolErrorIsNotLeapYear]: "Is not a leap year.";
15
- } : GenericInput), params?: SafeDateParams): TheDate;
22
+ export declare function create<GenericInput extends SafeDate>(input: GenericInput & ForbiddenDate<GenericInput>, params?: SafeDateParams): TheDate;
16
23
  export {};
@@ -9,9 +9,8 @@ function addDays(...args) {
9
9
  return (input) => addDays(input, day);
10
10
  }
11
11
  const [input, day] = args;
12
- const absoluteDay = Math.abs(day);
13
12
  const date = toNative.toNative(input);
14
- date.setTime(date.getTime() + (absoluteDay * constants.millisecondsInOneDay));
13
+ date.setTime(date.getTime() + (day * constants.millisecondsInOneDay));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function addDays<GenericInput extends TheDate, GenericDay extends number>(day: PositiveNumber<GenericDay>): (input: GenericInput) => TheDate;
4
- export declare function addDays<GenericInput extends TheDate, GenericDay extends number>(input: GenericInput, day: PositiveNumber<GenericDay>): TheDate;
2
+ export declare function addDays<GenericInput extends TheDate, GenericDay extends number>(day: GenericDay): (input: GenericInput) => TheDate;
3
+ export declare function addDays<GenericInput extends TheDate, GenericDay extends number>(input: GenericInput, day: GenericDay): TheDate;
@@ -7,9 +7,8 @@ function addDays(...args) {
7
7
  return (input) => addDays(input, day);
8
8
  }
9
9
  const [input, day] = args;
10
- const absoluteDay = Math.abs(day);
11
10
  const date = toNative(input);
12
- date.setTime(date.getTime() + (absoluteDay * millisecondsInOneDay));
11
+ date.setTime(date.getTime() + (day * millisecondsInOneDay));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -9,9 +9,8 @@ function addHours(...args) {
9
9
  return (input) => addHours(input, hour);
10
10
  }
11
11
  const [input, hour] = args;
12
- const absoluteHour = Math.abs(hour);
13
12
  const date = toNative.toNative(input);
14
- date.setTime(date.getTime() + (absoluteHour * constants.millisecondInOneHour));
13
+ date.setTime(date.getTime() + (hour * constants.millisecondInOneHour));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function addHours<GenericInput extends TheDate, GenericHour extends number>(hour: PositiveNumber<GenericHour>): (input: GenericInput) => TheDate;
4
- export declare function addHours<GenericInput extends TheDate, GenericHour extends number>(input: GenericInput, hour: PositiveNumber<GenericHour>): TheDate;
2
+ export declare function addHours<GenericInput extends TheDate, GenericHour extends number>(hour: GenericHour): (input: GenericInput) => TheDate;
3
+ export declare function addHours<GenericInput extends TheDate, GenericHour extends number>(input: GenericInput, hour: GenericHour): TheDate;
@@ -7,9 +7,8 @@ function addHours(...args) {
7
7
  return (input) => addHours(input, hour);
8
8
  }
9
9
  const [input, hour] = args;
10
- const absoluteHour = Math.abs(hour);
11
10
  const date = toNative(input);
12
- date.setTime(date.getTime() + (absoluteHour * millisecondInOneHour));
11
+ date.setTime(date.getTime() + (hour * millisecondInOneHour));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -8,9 +8,8 @@ function addMilliseconds(...args) {
8
8
  return (input) => addMilliseconds(input, millisecond);
9
9
  }
10
10
  const [input, millisecond] = args;
11
- const absoluteMilliseconds = Math.abs(millisecond);
12
11
  const date = toNative.toNative(input);
13
- date.setTime(date.getTime() + absoluteMilliseconds);
12
+ date.setTime(date.getTime() + millisecond);
14
13
  const timestamp = date.getTime();
15
14
  const isNegative = timestamp < 0;
16
15
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function addMilliseconds<GenericInput extends TheDate, GenericMillisecond extends number>(millisecond: PositiveNumber<GenericMillisecond>): (input: GenericInput) => TheDate;
4
- export declare function addMilliseconds<GenericInput extends TheDate, GenericMillisecond extends number>(input: GenericInput, millisecond: PositiveNumber<GenericMillisecond>): TheDate;
2
+ export declare function addMilliseconds<GenericInput extends TheDate, GenericMillisecond extends number>(millisecond: GenericMillisecond): (input: GenericInput) => TheDate;
3
+ export declare function addMilliseconds<GenericInput extends TheDate, GenericMillisecond extends number>(input: GenericInput, millisecond: GenericMillisecond): TheDate;
@@ -6,9 +6,8 @@ function addMilliseconds(...args) {
6
6
  return (input) => addMilliseconds(input, millisecond);
7
7
  }
8
8
  const [input, millisecond] = args;
9
- const absoluteMilliseconds = Math.abs(millisecond);
10
9
  const date = toNative(input);
11
- date.setTime(date.getTime() + absoluteMilliseconds);
10
+ date.setTime(date.getTime() + millisecond);
12
11
  const timestamp = date.getTime();
13
12
  const isNegative = timestamp < 0;
14
13
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -9,9 +9,8 @@ function addMinutes(...args) {
9
9
  return (input) => addMinutes(input, minute);
10
10
  }
11
11
  const [input, minute] = args;
12
- const absoluteMinute = Math.abs(minute);
13
12
  const date = toNative.toNative(input);
14
- date.setTime(date.getTime() + (absoluteMinute * constants.millisecondInOneMinute));
13
+ date.setTime(date.getTime() + (minute * constants.millisecondInOneMinute));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function addMinutes<GenericInput extends TheDate, GenericMinute extends number>(minute: PositiveNumber<GenericMinute>): (input: GenericInput) => TheDate;
4
- export declare function addMinutes<GenericInput extends TheDate, GenericMinute extends number>(input: GenericInput, minute: PositiveNumber<GenericMinute>): TheDate;
2
+ export declare function addMinutes<GenericInput extends TheDate, GenericMinute extends number>(minute: GenericMinute): (input: GenericInput) => TheDate;
3
+ export declare function addMinutes<GenericInput extends TheDate, GenericMinute extends number>(input: GenericInput, minute: GenericMinute): TheDate;
@@ -7,9 +7,8 @@ function addMinutes(...args) {
7
7
  return (input) => addMinutes(input, minute);
8
8
  }
9
9
  const [input, minute] = args;
10
- const absoluteMinute = Math.abs(minute);
11
10
  const date = toNative(input);
12
- date.setTime(date.getTime() + (absoluteMinute * millisecondInOneMinute));
11
+ date.setTime(date.getTime() + (minute * millisecondInOneMinute));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -8,9 +8,8 @@ function addMonths(...args) {
8
8
  return (input) => addMonths(input, month);
9
9
  }
10
10
  const [input, month] = args;
11
- const absoluteMonth = Math.abs(month);
12
11
  const date = toNative.toNative(input);
13
- date.setUTCMonth(date.getUTCMonth() + absoluteMonth);
12
+ date.setUTCMonth(date.getUTCMonth() + month);
14
13
  const timestamp = date.getTime();
15
14
  const isNegative = timestamp < 0;
16
15
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function addMonths<GenericInput extends TheDate, GenericMonth extends number>(month: PositiveNumber<GenericMonth>): (input: GenericInput) => TheDate;
4
- export declare function addMonths<GenericInput extends TheDate, GenericMonth extends number>(input: GenericInput, month: PositiveNumber<GenericMonth>): TheDate;
2
+ export declare function addMonths<GenericInput extends TheDate, GenericMonth extends number>(month: GenericMonth): (input: GenericInput) => TheDate;
3
+ export declare function addMonths<GenericInput extends TheDate, GenericMonth extends number>(input: GenericInput, month: GenericMonth): TheDate;
@@ -6,9 +6,8 @@ function addMonths(...args) {
6
6
  return (input) => addMonths(input, month);
7
7
  }
8
8
  const [input, month] = args;
9
- const absoluteMonth = Math.abs(month);
10
9
  const date = toNative(input);
11
- date.setUTCMonth(date.getUTCMonth() + absoluteMonth);
10
+ date.setUTCMonth(date.getUTCMonth() + month);
12
11
  const timestamp = date.getTime();
13
12
  const isNegative = timestamp < 0;
14
13
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -9,9 +9,8 @@ function addSeconds(...args) {
9
9
  return (input) => addSeconds(input, second);
10
10
  }
11
11
  const [input, second] = args;
12
- const absoluteSecond = Math.abs(second);
13
12
  const date = toNative.toNative(input);
14
- date.setTime(date.getTime() + (absoluteSecond * constants.millisecondsInOneSecond));
13
+ date.setTime(date.getTime() + (second * constants.millisecondsInOneSecond));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function addSeconds<GenericInput extends TheDate, GenericSecond extends number>(second: PositiveNumber<GenericSecond>): (input: GenericInput) => TheDate;
4
- export declare function addSeconds<GenericInput extends TheDate, GenericSecond extends number>(input: GenericInput, second: PositiveNumber<GenericSecond>): TheDate;
2
+ export declare function addSeconds<GenericInput extends TheDate, GenericSecond extends number>(second: GenericSecond): (input: GenericInput) => TheDate;
3
+ export declare function addSeconds<GenericInput extends TheDate, GenericSecond extends number>(input: GenericInput, second: GenericSecond): TheDate;
@@ -7,9 +7,8 @@ function addSeconds(...args) {
7
7
  return (input) => addSeconds(input, second);
8
8
  }
9
9
  const [input, second] = args;
10
- const absoluteSecond = Math.abs(second);
11
10
  const date = toNative(input);
12
- date.setTime(date.getTime() + (absoluteSecond * millisecondsInOneSecond));
11
+ date.setTime(date.getTime() + (second * millisecondsInOneSecond));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -9,9 +9,8 @@ function addWeeks(...args) {
9
9
  return (input) => addWeeks(input, week);
10
10
  }
11
11
  const [input, week] = args;
12
- const absoluteWeek = Math.abs(week);
13
12
  const date = toNative.toNative(input);
14
- date.setTime(date.getTime() + (absoluteWeek * constants.millisecondInOneWeek));
13
+ date.setTime(date.getTime() + (week * constants.millisecondInOneWeek));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function addWeeks<GenericInput extends TheDate, GenericWeek extends number>(week: PositiveNumber<GenericWeek>): (input: GenericInput) => TheDate;
4
- export declare function addWeeks<GenericInput extends TheDate, GenericWeek extends number>(input: GenericInput, week: PositiveNumber<GenericWeek>): TheDate;
2
+ export declare function addWeeks<GenericInput extends TheDate, GenericWeek extends number>(week: GenericWeek): (input: GenericInput) => TheDate;
3
+ export declare function addWeeks<GenericInput extends TheDate, GenericWeek extends number>(input: GenericInput, week: GenericWeek): TheDate;
@@ -7,9 +7,8 @@ function addWeeks(...args) {
7
7
  return (input) => addWeeks(input, week);
8
8
  }
9
9
  const [input, week] = args;
10
- const absoluteWeek = Math.abs(week);
11
10
  const date = toNative(input);
12
- date.setTime(date.getTime() + (absoluteWeek * millisecondInOneWeek));
11
+ date.setTime(date.getTime() + (week * millisecondInOneWeek));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -8,9 +8,8 @@ function addYears(...args) {
8
8
  return (input) => addYears(input, year);
9
9
  }
10
10
  const [input, year] = args;
11
- const absoluteYear = Math.abs(year);
12
11
  const date = toNative.toNative(input);
13
- date.setUTCFullYear(date.getUTCFullYear() + absoluteYear);
12
+ date.setUTCFullYear(date.getUTCFullYear() + year);
14
13
  const timestamp = date.getTime();
15
14
  const isNegative = timestamp < 0;
16
15
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function addYears<GenericInput extends TheDate, GenericYear extends number>(year: PositiveNumber<GenericYear>): (input: GenericInput) => TheDate;
4
- export declare function addYears<GenericInput extends TheDate, GenericYear extends number>(input: GenericInput, year: PositiveNumber<GenericYear>): TheDate;
2
+ export declare function addYears<GenericInput extends TheDate, GenericYear extends number>(year: GenericYear): (input: GenericInput) => TheDate;
3
+ export declare function addYears<GenericInput extends TheDate, GenericYear extends number>(input: GenericInput, year: GenericYear): TheDate;
@@ -6,9 +6,8 @@ function addYears(...args) {
6
6
  return (input) => addYears(input, year);
7
7
  }
8
8
  const [input, year] = args;
9
- const absoluteYear = Math.abs(year);
10
9
  const date = toNative(input);
11
- date.setUTCFullYear(date.getUTCFullYear() + absoluteYear);
10
+ date.setUTCFullYear(date.getUTCFullYear() + year);
12
11
  const timestamp = date.getTime();
13
12
  const isNegative = timestamp < 0;
14
13
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -10,8 +10,7 @@ function subtractDays(...args) {
10
10
  }
11
11
  const [input, day] = args;
12
12
  const date = toNative.toNative(input);
13
- const absoluteDay = Math.abs(day);
14
- date.setTime(date.getTime() - (absoluteDay * constants.millisecondsInOneDay));
13
+ date.setTime(date.getTime() - (day * constants.millisecondsInOneDay));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function subtractDays<GenericInput extends TheDate, GenericDay extends number>(day: PositiveNumber<GenericDay>): (input: GenericInput) => TheDate;
4
- export declare function subtractDays<GenericInput extends TheDate, GenericDay extends number>(input: GenericInput, day: PositiveNumber<GenericDay>): TheDate;
2
+ export declare function subtractDays<GenericInput extends TheDate, GenericDay extends number>(day: GenericDay): (input: GenericInput) => TheDate;
3
+ export declare function subtractDays<GenericInput extends TheDate, GenericDay extends number>(input: GenericInput, day: GenericDay): TheDate;
@@ -8,8 +8,7 @@ function subtractDays(...args) {
8
8
  }
9
9
  const [input, day] = args;
10
10
  const date = toNative(input);
11
- const absoluteDay = Math.abs(day);
12
- date.setTime(date.getTime() - (absoluteDay * millisecondsInOneDay));
11
+ date.setTime(date.getTime() - (day * millisecondsInOneDay));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -10,8 +10,7 @@ function subtractHours(...args) {
10
10
  }
11
11
  const [input, hour] = args;
12
12
  const date = toNative.toNative(input);
13
- const absoluteHour = Math.abs(hour);
14
- date.setTime(date.getTime() - (absoluteHour * constants.millisecondInOneHour));
13
+ date.setTime(date.getTime() - (hour * constants.millisecondInOneHour));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function subtractHours<GenericInput extends TheDate, GenericHour extends number>(hour: PositiveNumber<GenericHour>): (input: GenericInput) => TheDate;
4
- export declare function subtractHours<GenericInput extends TheDate, GenericHour extends number>(input: GenericInput, hour: PositiveNumber<GenericHour>): TheDate;
2
+ export declare function subtractHours<GenericInput extends TheDate, GenericHour extends number>(hour: GenericHour): (input: GenericInput) => TheDate;
3
+ export declare function subtractHours<GenericInput extends TheDate, GenericHour extends number>(input: GenericInput, hour: GenericHour): TheDate;
@@ -8,8 +8,7 @@ function subtractHours(...args) {
8
8
  }
9
9
  const [input, hour] = args;
10
10
  const date = toNative(input);
11
- const absoluteHour = Math.abs(hour);
12
- date.setTime(date.getTime() - (absoluteHour * millisecondInOneHour));
11
+ date.setTime(date.getTime() - (hour * millisecondInOneHour));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -9,8 +9,7 @@ function subtractMilliseconds(...args) {
9
9
  }
10
10
  const [input, millisecond] = args;
11
11
  const date = toNative.toNative(input);
12
- const absoluteMillisecond = Math.abs(millisecond);
13
- date.setTime(date.getTime() - absoluteMillisecond);
12
+ date.setTime(date.getTime() - millisecond);
14
13
  const timestamp = date.getTime();
15
14
  const isNegative = timestamp < 0;
16
15
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function subtractMilliseconds<GenericInput extends TheDate, GenericMillisecond extends number>(millisecond: PositiveNumber<GenericMillisecond>): (input: GenericInput) => TheDate;
4
- export declare function subtractMilliseconds<GenericInput extends TheDate, GenericMillisecond extends number>(input: GenericInput, millisecond: PositiveNumber<GenericMillisecond>): TheDate;
2
+ export declare function subtractMilliseconds<GenericInput extends TheDate, GenericMillisecond extends number>(millisecond: GenericMillisecond): (input: GenericInput) => TheDate;
3
+ export declare function subtractMilliseconds<GenericInput extends TheDate, GenericMillisecond extends number>(input: GenericInput, millisecond: GenericMillisecond): TheDate;
@@ -7,8 +7,7 @@ function subtractMilliseconds(...args) {
7
7
  }
8
8
  const [input, millisecond] = args;
9
9
  const date = toNative(input);
10
- const absoluteMillisecond = Math.abs(millisecond);
11
- date.setTime(date.getTime() - absoluteMillisecond);
10
+ date.setTime(date.getTime() - millisecond);
12
11
  const timestamp = date.getTime();
13
12
  const isNegative = timestamp < 0;
14
13
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -10,8 +10,7 @@ function subtractMinutes(...args) {
10
10
  }
11
11
  const [input, minute] = args;
12
12
  const date = toNative.toNative(input);
13
- const absoluteMinute = Math.abs(minute);
14
- date.setTime(date.getTime() - (absoluteMinute * constants.millisecondInOneMinute));
13
+ date.setTime(date.getTime() - (minute * constants.millisecondInOneMinute));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function subtractMinutes<GenericInput extends TheDate, GenericMinute extends number>(minute: PositiveNumber<GenericMinute>): (input: GenericInput) => TheDate;
4
- export declare function subtractMinutes<GenericInput extends TheDate, GenericMinute extends number>(input: GenericInput, minute: PositiveNumber<GenericMinute>): TheDate;
2
+ export declare function subtractMinutes<GenericInput extends TheDate, GenericMinute extends number>(minute: GenericMinute): (input: GenericInput) => TheDate;
3
+ export declare function subtractMinutes<GenericInput extends TheDate, GenericMinute extends number>(input: GenericInput, minute: GenericMinute): TheDate;
@@ -8,8 +8,7 @@ function subtractMinutes(...args) {
8
8
  }
9
9
  const [input, minute] = args;
10
10
  const date = toNative(input);
11
- const absoluteMinute = Math.abs(minute);
12
- date.setTime(date.getTime() - (absoluteMinute * millisecondInOneMinute));
11
+ date.setTime(date.getTime() - (minute * millisecondInOneMinute));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -9,8 +9,7 @@ function subtractMonths(...args) {
9
9
  }
10
10
  const [input, month] = args;
11
11
  const date = toNative.toNative(input);
12
- const absoluteMonth = Math.abs(month);
13
- date.setUTCMonth(date.getUTCMonth() - absoluteMonth);
12
+ date.setUTCMonth(date.getUTCMonth() - month);
14
13
  const timestamp = date.getTime();
15
14
  const isNegative = timestamp < 0;
16
15
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function subtractMonths<GenericInput extends TheDate, GenericMonth extends number>(month: PositiveNumber<GenericMonth>): (input: GenericInput) => TheDate;
4
- export declare function subtractMonths<GenericInput extends TheDate, GenericMonth extends number>(input: GenericInput, month: PositiveNumber<GenericMonth>): TheDate;
2
+ export declare function subtractMonths<GenericInput extends TheDate, GenericMonth extends number>(month: GenericMonth): (input: GenericInput) => TheDate;
3
+ export declare function subtractMonths<GenericInput extends TheDate, GenericMonth extends number>(input: GenericInput, month: GenericMonth): TheDate;
@@ -7,8 +7,7 @@ function subtractMonths(...args) {
7
7
  }
8
8
  const [input, month] = args;
9
9
  const date = toNative(input);
10
- const absoluteMonth = Math.abs(month);
11
- date.setUTCMonth(date.getUTCMonth() - absoluteMonth);
10
+ date.setUTCMonth(date.getUTCMonth() - month);
12
11
  const timestamp = date.getTime();
13
12
  const isNegative = timestamp < 0;
14
13
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -10,8 +10,7 @@ function subtractSeconds(...args) {
10
10
  }
11
11
  const [input, second] = args;
12
12
  const date = toNative.toNative(input);
13
- const absoluteSecond = Math.abs(second);
14
- date.setTime(date.getTime() - (absoluteSecond * constants.millisecondsInOneSecond));
13
+ date.setTime(date.getTime() - (second * constants.millisecondsInOneSecond));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function subtractSeconds<GenericInput extends TheDate, GenericSecond extends number>(second: PositiveNumber<GenericSecond>): (input: GenericInput) => TheDate;
4
- export declare function subtractSeconds<GenericInput extends TheDate, GenericSecond extends number>(input: GenericInput, second: PositiveNumber<GenericSecond>): TheDate;
2
+ export declare function subtractSeconds<GenericInput extends TheDate, GenericSecond extends number>(second: GenericSecond): (input: GenericInput) => TheDate;
3
+ export declare function subtractSeconds<GenericInput extends TheDate, GenericSecond extends number>(input: GenericInput, second: GenericSecond): TheDate;
@@ -8,8 +8,7 @@ function subtractSeconds(...args) {
8
8
  }
9
9
  const [input, second] = args;
10
10
  const date = toNative(input);
11
- const absoluteSecond = Math.abs(second);
12
- date.setTime(date.getTime() - (absoluteSecond * millisecondsInOneSecond));
11
+ date.setTime(date.getTime() - (second * millisecondsInOneSecond));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -10,8 +10,7 @@ function subtractWeeks(...args) {
10
10
  }
11
11
  const [input, week] = args;
12
12
  const date = toNative.toNative(input);
13
- const absoluteWeek = Math.abs(week);
14
- date.setTime(date.getTime() - (absoluteWeek * constants.millisecondInOneWeek));
13
+ date.setTime(date.getTime() - (week * constants.millisecondInOneWeek));
15
14
  const timestamp = date.getTime();
16
15
  const isNegative = timestamp < 0;
17
16
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function subtractWeeks<GenericInput extends TheDate, GenericWeek extends number>(week: PositiveNumber<GenericWeek>): (input: GenericInput) => TheDate;
4
- export declare function subtractWeeks<GenericInput extends TheDate, GenericWeek extends number>(input: GenericInput, week: PositiveNumber<GenericWeek>): TheDate;
2
+ export declare function subtractWeeks<GenericInput extends TheDate, GenericWeek extends number>(week: GenericWeek): (input: GenericInput) => TheDate;
3
+ export declare function subtractWeeks<GenericInput extends TheDate, GenericWeek extends number>(input: GenericInput, week: GenericWeek): TheDate;
@@ -8,8 +8,7 @@ function subtractWeeks(...args) {
8
8
  }
9
9
  const [input, week] = args;
10
10
  const date = toNative(input);
11
- const absoluteWeek = Math.abs(week);
12
- date.setTime(date.getTime() - (absoluteWeek * millisecondInOneWeek));
11
+ date.setTime(date.getTime() - (week * millisecondInOneWeek));
13
12
  const timestamp = date.getTime();
14
13
  const isNegative = timestamp < 0;
15
14
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -9,8 +9,7 @@ function subtractYears(...args) {
9
9
  }
10
10
  const [input, year] = args;
11
11
  const date = toNative.toNative(input);
12
- const absoluteYear = Math.abs(year);
13
- date.setUTCFullYear(date.getUTCFullYear() - absoluteYear);
12
+ date.setUTCFullYear(date.getUTCFullYear() - year);
14
13
  const timestamp = date.getTime();
15
14
  const isNegative = timestamp < 0;
16
15
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -1,4 +1,3 @@
1
1
  import type { TheDate } from "../types";
2
- import type { PositiveNumber } from "../../number/types";
3
- export declare function subtractYears<GenericInput extends TheDate, GenericYear extends number>(year: PositiveNumber<GenericYear>): (input: GenericInput) => TheDate;
4
- export declare function subtractYears<GenericInput extends TheDate, GenericYear extends number>(input: GenericInput, year: PositiveNumber<GenericYear>): TheDate;
2
+ export declare function subtractYears<GenericInput extends TheDate, GenericYear extends number>(year: GenericYear): (input: GenericInput) => TheDate;
3
+ export declare function subtractYears<GenericInput extends TheDate, GenericYear extends number>(input: GenericInput, year: GenericYear): TheDate;
@@ -7,8 +7,7 @@ function subtractYears(...args) {
7
7
  }
8
8
  const [input, year] = args;
9
9
  const date = toNative(input);
10
- const absoluteYear = Math.abs(year);
11
- date.setUTCFullYear(date.getUTCFullYear() - absoluteYear);
10
+ date.setUTCFullYear(date.getUTCFullYear() - year);
12
11
  const timestamp = date.getTime();
13
12
  const isNegative = timestamp < 0;
14
13
  return `date${Math.abs(timestamp)}${isNegative ? "-" : "+"}`;
@@ -4,3 +4,4 @@ export * from "./timezone";
4
4
  export * from "./unit";
5
5
  export * from "./month";
6
6
  export * from "./time";
7
+ export * from "./isSafeYear";
@@ -1,8 +1,8 @@
1
- import { type Digit } from "../../string";
1
+ import type * as DString from "../../string";
2
2
  type TenEven = "" | "2" | "4" | "6" | "8";
3
3
  type OddTen = "1" | "3" | "5" | "7" | "9";
4
4
  type MultipleOf4 = `${TenEven}${"0" | "4" | "8"}` | `${OddTen}${"2" | "6"}`;
5
- type MultipleOf100 = `${Exclude<Digit, "0">}00`;
5
+ type MultipleOf100 = `${Exclude<DString.Digit, "0">}00`;
6
6
  type MultipleOf400 = `${Exclude<MultipleOf4, "0">}00`;
7
- export type IsLeapYear<GenericYear extends `${number}`> = GenericYear extends `${number | ""}${MultipleOf4}` ? GenericYear extends `${number | ""}${MultipleOf100}` ? GenericYear extends `${number | ""}${MultipleOf400}` ? true : false : true : false;
7
+ export type IsLeapYear<GenericYear extends number> = `${GenericYear}` extends infer InferredYear ? InferredYear extends `${number | ""}${MultipleOf4}` ? InferredYear extends `${number | ""}${MultipleOf100}` ? InferredYear extends `${number | ""}${MultipleOf400}` ? true : false : true : false : never;
8
8
  export {};
@@ -0,0 +1,53 @@
1
+ import { type Adaptor, type AnyTuple } from "../../common";
2
+ import type * as DString from "../../string";
3
+ import type * as DArray from "../../array";
4
+ import type * as DNumber from "../../number";
5
+ interface GreaterTable {
6
+ positive: {
7
+ greater: [
8
+ "3" | "4" | "5" | "6" | "7" | "8" | "9",
9
+ "8" | "9",
10
+ "6" | "7" | "8" | "9",
11
+ "8" | "9",
12
+ "6" | "7" | "8" | "9",
13
+ ""
14
+ ];
15
+ equal: [
16
+ "2",
17
+ "7",
18
+ "5",
19
+ "7",
20
+ "5",
21
+ "9"
22
+ ];
23
+ };
24
+ negative: {
25
+ greater: [
26
+ "3" | "4" | "5" | "6" | "7" | "8" | "9",
27
+ "8" | "9",
28
+ "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9",
29
+ "9",
30
+ "3" | "4" | "5" | "6" | "7" | "8" | "9",
31
+ "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
32
+ ];
33
+ equal: [
34
+ "2",
35
+ "7",
36
+ "1",
37
+ "8",
38
+ "2",
39
+ "0"
40
+ ];
41
+ };
42
+ }
43
+ type CheckSplitYear<GenericSplitYear extends AnyTuple<DString.Number>, GenericGreaterTable extends AnyTuple<string>, GenericEqualTable extends AnyTuple<string>> = GenericSplitYear[0] extends GenericGreaterTable[0] ? false : GenericSplitYear[0] extends GenericEqualTable[0] ? [
44
+ DArray.ShiftTuple<GenericSplitYear>,
45
+ DArray.ShiftTuple<GenericGreaterTable>,
46
+ DArray.ShiftTuple<GenericEqualTable>
47
+ ] extends [
48
+ infer InferredSplitYear extends readonly DString.Number[],
49
+ infer InferredGreaterTable extends readonly string[],
50
+ infer InferredEqualTable extends readonly string[]
51
+ ] ? InferredSplitYear extends AnyTuple<DString.Number> ? CheckSplitYear<InferredSplitYear, Adaptor<InferredGreaterTable, AnyTuple<string>>, Adaptor<InferredEqualTable, AnyTuple<string>>> : true : never : true;
52
+ export type IsSafeYear<GenericYears extends number> = DNumber.Absolute<GenericYears> extends infer InferredYear extends number ? DString.StringLength<`${InferredYear}`> extends infer InferredLength extends number ? InferredLength extends 1 | 2 | 3 | 4 | 5 | 6 ? InferredLength extends 6 ? DString.Split<`${InferredYear}`, ""> extends infer InferredSplitYear extends AnyTuple<DString.Number> ? CheckSplitYear<InferredSplitYear, DNumber.IsPositive<GenericYears> extends true ? GreaterTable["positive"]["greater"] : GreaterTable["negative"]["greater"], DNumber.IsPositive<GenericYears> extends true ? GreaterTable["positive"]["equal"] : GreaterTable["negative"]["equal"]> : false : true : false : never : never;
53
+ export {};
@@ -1671,6 +1671,9 @@
1671
1671
  {
1672
1672
  "name": "types",
1673
1673
  "files": [
1674
+ {
1675
+ "name": "joinTuple.d.ts"
1676
+ },
1674
1677
  {
1675
1678
  "name": "tupleHasSpread.d.ts"
1676
1679
  },
@@ -1730,6 +1733,9 @@
1730
1733
  {
1731
1734
  "name": "findLastIndex.d.ts"
1732
1735
  },
1736
+ {
1737
+ "name": "lengthEqual.cjs"
1738
+ },
1733
1739
  {
1734
1740
  "name": "minOf.mjs"
1735
1741
  },
@@ -1745,6 +1751,9 @@
1745
1751
  {
1746
1752
  "name": "reverse.cjs"
1747
1753
  },
1754
+ {
1755
+ "name": "lengthEqual.d.ts"
1756
+ },
1748
1757
  {
1749
1758
  "name": "coalescing.mjs"
1750
1759
  },
@@ -1807,6 +1816,9 @@
1807
1816
  {
1808
1817
  "name": "includes.cjs"
1809
1818
  },
1819
+ {
1820
+ "name": "lengthEqual.mjs"
1821
+ },
1810
1822
  {
1811
1823
  "name": "maxElements.d.ts"
1812
1824
  },
@@ -2627,10 +2639,16 @@
2627
2639
  "name": "types",
2628
2640
  "files": [
2629
2641
  {
2630
- "name": "positiveNumber.d.ts"
2642
+ "name": "forbiddenNegative.d.ts"
2643
+ },
2644
+ {
2645
+ "name": "absolute.d.ts"
2631
2646
  },
2632
2647
  {
2633
2648
  "name": "index.d.ts"
2649
+ },
2650
+ {
2651
+ "name": "isPositive.d.ts"
2634
2652
  }
2635
2653
  ]
2636
2654
  },
@@ -3148,6 +3166,9 @@
3148
3166
  {
3149
3167
  "name": "index.d.ts"
3150
3168
  },
3169
+ {
3170
+ "name": "isSafeYear.d.ts"
3171
+ },
3151
3172
  {
3152
3173
  "name": "timezone.d.ts"
3153
3174
  },
@@ -0,0 +1,5 @@
1
+ import type * as DString from "../../string";
2
+ import type * as DArray from "../../array";
3
+ import { type AnyTuple, type Adaptor } from "../../common";
4
+ import { type IsPositive } from "./isPositive";
5
+ export type Absolute<GenericValue extends number> = IsPositive<GenericValue> extends true ? GenericValue : DArray.JoinTuple<DArray.ShiftTuple<Adaptor<DString.Split<`${GenericValue}`, "">, AnyTuple<string>>>, ""> extends `${infer InferredResult extends number}` ? InferredResult : never;
@@ -0,0 +1,6 @@
1
+ import { type IsPositive } from "./isPositive";
2
+ declare const SymbolForbiddenNumber: unique symbol;
3
+ export type ForbiddenNegative<GenericNumber extends number> = IsPositive<GenericNumber> extends true ? GenericNumber : {
4
+ [SymbolForbiddenNumber]: "Only positive number is allowed.";
5
+ };
6
+ export {};
@@ -1 +1,3 @@
1
- export * from "./positiveNumber";
1
+ export * from "./forbiddenNegative";
2
+ export * from "./absolute";
3
+ export * from "./isPositive";
@@ -0,0 +1,3 @@
1
+ import { type Not } from "../../common";
2
+ import type * as DString from "../../string";
3
+ export type IsPositive<GenericValue extends number> = Not<DString.Includes<`${GenericValue}`, "-">>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duplojs/utils",
3
- "version": "1.3.23",
3
+ "version": "1.3.25",
4
4
  "author": {
5
5
  "name": "mathcovax",
6
6
  "url": "https://github.com/mathcovax"
@@ -1 +0,0 @@
1
- export type PositiveNumber<GenericNumber extends number> = `${GenericNumber}` extends `-${string}` | "0" ? never : GenericNumber;