Skip to content

Commit

Permalink
refactor(ext/cron): align error messages
Browse files Browse the repository at this point in the history
Aligns the error messages in the cron extension to be in-line with the
Deno style guide.

denoland#25269
  • Loading branch information
irbull committed Aug 29, 2024
1 parent a4707f7 commit 0f2531a
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
18 changes: 13 additions & 5 deletions ext/cron/01_cron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ export function formatToCronSchedule(
} else if (end === undefined && every !== undefined) {
return "*/" + every;
} else {
throw new TypeError("Invalid cron schedule");
throw new TypeError(
`Invalid cron schedule: start=${start}, end=${end}, every=${every}`,
);
}
} else {
if (typeof exact === "number") {
Expand Down Expand Up @@ -103,10 +105,14 @@ function cron(
handler2?: () => Promise<void> | void,
) {
if (name === undefined) {
throw new TypeError("Deno.cron requires a unique name");
throw new TypeError(
"Cannot create cron job, a unique name is required: received `undefined`",
);
}
if (schedule === undefined) {
throw new TypeError("Deno.cron requires a valid schedule");
throw new TypeError(
"Cannot create cron job, a schedule is required: received `undefined`",
);
}

schedule = parseScheduleToString(schedule);
Expand All @@ -119,13 +125,15 @@ function cron(
if (typeof handlerOrOptions1 === "function") {
handler = handlerOrOptions1;
if (handler2 !== undefined) {
throw new TypeError("Deno.cron requires a single handler");
throw new TypeError(
"Cannot create cron job, a single handler is required: two handlers were specified",
);
}
} else if (typeof handler2 === "function") {
handler = handler2;
options = handlerOrOptions1;
} else {
throw new TypeError("Deno.cron requires a handler");
throw new TypeError("Cannot create cron job: a handler is required");
}

const rid = op_cron_create(
Expand Down
7 changes: 5 additions & 2 deletions ext/cron/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,12 +116,15 @@ where

fn validate_cron_name(name: &str) -> Result<(), AnyError> {
if name.len() > 64 {
return Err(type_error("Cron name is too long"));
return Err(type_error(format!(
"Cron name cannot exceed 64 characters: current length {}",
name.len()
)));
}
if !name.chars().all(|c| {
c.is_ascii_whitespace() || c.is_ascii_alphanumeric() || c == '_' || c == '-'
}) {
return Err(type_error("Invalid cron name. Only alphanumeric characters, whitespace, hyphens, and underscores are allowed"));
return Err(type_error("Invalid cron name: only alphanumeric characters, whitespace, hyphens, and underscores are allowed"));
}
Ok(())
}
10 changes: 5 additions & 5 deletions tests/unit/cron_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Deno.test(function noNameTest() {
// @ts-ignore test
() => Deno.cron(),
TypeError,
"Deno.cron requires a unique name",
"Cannot create cron job, a unique name is required: received `undefined`",
);
});

Expand All @@ -24,7 +24,7 @@ Deno.test(function noSchedule() {
// @ts-ignore test
() => Deno.cron("foo"),
TypeError,
"Deno.cron requires a valid schedule",
"Cannot create cron job, a schedule is required: received `undefined`",
);
});

Expand All @@ -33,7 +33,7 @@ Deno.test(function noHandler() {
// @ts-ignore test
() => Deno.cron("foo", "*/1 * * * *"),
TypeError,
"Deno.cron requires a handler",
"Cannot create cron job: a handler is required",
);
});

Expand Down Expand Up @@ -66,7 +66,7 @@ Deno.test(function invalidNameTest() {
() => {},
),
TypeError,
"Cron name is too long",
"Cron name cannot exceed 64 characters: current length 70",
);
});

Expand Down Expand Up @@ -388,7 +388,7 @@ Deno.test("error on two handlers", () => {
Deno.cron("abc", "* * * * *", () => {}, () => {});
},
TypeError,
"Deno.cron requires a single handler",
"Cannot create cron job, a single handler is required: two handlers were specified",
);
});

Expand Down

0 comments on commit 0f2531a

Please sign in to comment.