Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion @coven/compare/deno.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"$schema": "https://raw.githubusercontent.com/denoland/deno/main/cli/schemas/config-file.v1.json",
"exports": "./mod.ts",
"name": "@coven/compare",
"version": "0.9.4"
"version": "0.9.5"
}
2 changes: 1 addition & 1 deletion @coven/constants/deno.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"$schema": "https://raw.githubusercontent.com/denoland/deno/main/cli/schemas/config-file.v1.json",
"exports": "./mod.ts",
"name": "@coven/constants",
"version": "0.9.4"
"version": "0.9.5"
}
2 changes: 1 addition & 1 deletion @coven/cron/deno.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"$schema": "https://raw.githubusercontent.com/denoland/deno/main/cli/schemas/config-file.v1.json",
"exports": "./mod.ts",
"name": "@coven/cron",
"version": "0.9.4"
"version": "0.9.5"
}
4 changes: 2 additions & 2 deletions @coven/cron/parse.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { build, getGroups } from "@coven/expression";
import { entriesToObject, length, objectToEntries } from "@coven/iterables";
import { memoFunction } from "@coven/memo";
import { memo, memoFunction } from "@coven/memo";
import type { KeyOf, Maybe, ReadonlyRecord } from "@coven/types";
import type { CronObject } from "./CronObject.ts";
import type { CronString } from "./CronString.ts";
Expand Down Expand Up @@ -43,6 +43,6 @@ export const parse: (expression: CronString) => Maybe<CronObject> =

return (
length(entries) === 0 ? undefined : (
entriesToObject(entries)
memo(entriesToObject(entries))
)) as Maybe<CronObject>;
});
12 changes: 8 additions & 4 deletions @coven/cron/parseList.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { iterableToArray, unique } from "@coven/iterables";
import { memoFunction } from "@coven/memo";
import { memo, memoFunction } from "@coven/memo";
import type { Maybe } from "@coven/types";
import type { ListField } from "./ListField.ts";
import { isListString } from "./isListString.ts";
Expand All @@ -23,9 +23,13 @@ export const parseList: <Predicated extends number>(
) => Maybe<ListField<Predicated>> = memoFunction(
<Predicated extends number>(value: string) =>
(isListString(value) ?
iterableToArray(
unique(
parseListMap(value.split(LIST_EXPRESSION_SEPARATOR_TOKEN)),
memo(
iterableToArray(
unique(
parseListMap(
value.split(LIST_EXPRESSION_SEPARATOR_TOKEN),
),
),
),
)
: undefined) as Maybe<ListField<Predicated>>,
Expand Down
9 changes: 5 additions & 4 deletions @coven/cron/parseRange.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { entriesToObject } from "@coven/iterables";
import { memoFunction } from "@coven/memo";
import { memo, memoFunction } from "@coven/memo";
import { isUndefined } from "@coven/predicates";
import type { Maybe } from "@coven/types";
import type { RangeField } from "./RangeField.ts";
import { isRangeString } from "./isRangeString.ts";
Expand Down Expand Up @@ -39,8 +40,8 @@ export const parseRange: <Predicated extends number>(
: undefined;

return (
maybeRange?.from === maybeRange?.to ?
maybeRange?.from
: maybeRange) as Maybe<Predicated | RangeField<Predicated>>;
isUndefined(maybeRange) ? maybeRange
: maybeRange.from === maybeRange.to ? maybeRange.from
: memo(maybeRange)) as Maybe<Predicated | RangeField<Predicated>>;
},
);
29 changes: 16 additions & 13 deletions @coven/cron/tests/nextISODate.test.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,41 @@
import { assertEquals } from "@std/assert";
import { assertStrictEquals } from "@std/assert";
import { nextISODate } from "../nextISODate.ts";

const testDate = nextISODate("1992-01-01T00:00:00.000Z");

Deno.test("* * * * * gets next minute", () =>
assertEquals(testDate("* * * * *"), "1992-01-01T00:01:00.000Z"),
assertStrictEquals(testDate("* * * * *"), "1992-01-01T00:01:00.000Z"),
);

Deno.test("5 * * * * gets next hour's minute 5", () =>
assertEquals(testDate("5 * * * *"), "1992-01-01T00:05:00.000Z"),
assertStrictEquals(testDate("5 * * * *"), "1992-01-01T00:05:00.000Z"),
);

Deno.test("5 10-13 * * * gets next hour's minute 5", () =>
assertEquals(testDate("5 10-13 * * *"), "1992-01-01T10:05:00.000Z"),
assertStrictEquals(testDate("5 10-13 * * *"), "1992-01-01T10:05:00.000Z"),
);

Deno.test("* * 31 2 * returns nothing because it's an invalid date", () =>
assertEquals(testDate("* * 31 2 *"), undefined),
assertStrictEquals(testDate("* * 31 2 *"), undefined),
);

Deno.test("* * 30,31 2 * returns nothing because it's an invalid date", () =>
assertEquals(testDate("* * 30,31 2 *"), undefined),
assertStrictEquals(testDate("* * 30,31 2 *"), undefined),
);

Deno.test("* * 30,31 2 * returns nothing because it's an invalid date", () =>
assertEquals(testDate("* * 30,31 2 *"), undefined),
assertStrictEquals(testDate("* * 30,31 2 *"), undefined),
);

Deno.test("* * 29,30,31 2 * gets first minute of next february 29", () =>
assertEquals(testDate("* * 29,30,31 2 *"), "1992-02-29T00:00:00.000Z"),
assertStrictEquals(
testDate("* * 29,30,31 2 *"),
"1992-02-29T00:00:00.000Z",
),
);

Deno.test("* * * * * as an object gets next minute", () =>
assertEquals(
assertStrictEquals(
testDate({
dayOfMonth: "*",
dayOfWeek: "*",
Expand All @@ -45,25 +48,25 @@ Deno.test("* * * * * as an object gets next minute", () =>
);

Deno.test("5 * * * * as an object gets next hour's minute 5", () =>
assertEquals(testDate({ minute: 5 }), "1992-01-01T00:05:00.000Z"),
assertStrictEquals(testDate({ minute: 5 }), "1992-01-01T00:05:00.000Z"),
);

Deno.test("5 10-13 * * * as an object gets next hour's minute 5", () =>
assertEquals(
assertStrictEquals(
testDate({ hour: { from: 10, to: 13 }, minute: 5 }),
"1992-01-01T10:05:00.000Z",
),
);

Deno.test(
"* * 31 2 * as object returns nothing because it's an invalid date",
() => assertEquals(testDate({ dayOfMonth: 31, month: 2 }), undefined),
() => assertStrictEquals(testDate({ dayOfMonth: 31, month: 2 }), undefined),
);

Deno.test(
"* * 29,30,31 2 * as an object gets first minute of next february 29",
() =>
assertEquals(
assertStrictEquals(
testDate({ dayOfMonth: [29, 30, 31], month: 2 }),
"1992-02-29T00:00:00.000Z",
),
Expand Down
Loading