Skip to content

Commit

Permalink
Merge branch 'main' into duration
Browse files Browse the repository at this point in the history
* main:
  Refactor validatePayload to exit on time (#188)
  • Loading branch information
katydecorah committed Jan 3, 2025
2 parents f4de5ee + 7481bd6 commit 9260bc5
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 23 deletions.
30 changes: 21 additions & 9 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -141325,34 +141325,42 @@ function addNotes(notes, bookNotes) {

;// CONCATENATED MODULE: ./src/validate-payload.ts


const validPrefixes = [
"https://share.libbyapp.com/",
"https://libro.fm/",
"https://books.apple.com/",
];
function validatePayload(payload) {
if (!payload) {
(0,core.setFailed)("Missing payload");
return;
return { success: false, message: "Missing payload" };
}
if (payload["book-status"] === "summary") {
return;
return { success: true, message: "Valid payload" };
}
if (!payload["identifier"]) {
(0,core.setFailed)("Missing `identifier` in payload");
return { success: false, message: "Missing `identifier` in payload" };
}
const { identifier } = payload;
if (!validPrefixes.some((prefix) => identifier.startsWith(prefix)) &&
!isIsbn(identifier)) {
(0,core.setFailed)(`Invalid \`identifier\` in payload: ${identifier}. Must be an ISBN or start with one of the following: ${validPrefixes.join(", ")}`);
return {
success: false,
message: `Invalid \`identifier\` in payload: ${identifier}. Must be an ISBN or start with one of the following: ${validPrefixes.join(", ")}`,
};
}
if (payload["date"] && !utils_isDate(payload["date"])) {
(0,core.setFailed)(`Invalid \`date\` in payload: ${payload["date"]}`);
return {
success: false,
message: `Invalid \`date\` in payload: ${payload["date"]}`,
};
}
if (!payload["book-status"] || !isBookStatus(payload["book-status"])) {
(0,core.setFailed)(`Invalid \`book-status\` in payload: "${payload["book-status"]}". Choose from: "want to read", "started", "finished", "abandoned"`);
return {
success: false,
message: `Invalid \`book-status\` in payload: "${payload["book-status"]}". Choose from: "want to read", "started", "finished", "abandoned"`,
};
}
return { success: true, message: "Valid payload" };
}
function isBookStatus(status) {
return ["want to read", "started", "finished", "abandoned"].includes(status);
Expand All @@ -141375,7 +141383,11 @@ async function read() {
// Get book payload
const payload = github.context.payload.inputs;
// Validate payload
validatePayload(payload);
const { success, message } = validatePayload(payload);
if (!success) {
(0,core.setFailed)(message);
return;
}
const { identifier: inputIdentifier, date, "book-status": bookStatus, notes, rating, tags, } = payload;
// Set inputs
const filename = (0,core.getInput)("filename");
Expand Down
6 changes: 5 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,11 @@ export async function read() {
// Get book payload
const payload = github.context.payload.inputs as BookPayload;
// Validate payload
validatePayload(payload);
const { success, message } = validatePayload(payload);
if (!success) {
setFailed(message);
return;
}
const {
identifier: inputIdentifier,
date,
Expand Down
34 changes: 21 additions & 13 deletions src/validate-payload.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { setFailed } from "@actions/core";
import { isDate, isIsbn } from "./utils";
import { BookPayload } from "./index";
import { BookStatus } from "./new-book";
Expand All @@ -9,18 +8,20 @@ const validPrefixes = [
"https://books.apple.com/",
];

export function validatePayload(payload: BookPayload): void {
export function validatePayload(payload: BookPayload): {
success: boolean;
message: string;
} {
if (!payload) {
setFailed("Missing payload");
return;
return { success: false, message: "Missing payload" };
}

if (payload["book-status"] === "summary") {
return;
return { success: true, message: "Valid payload" };
}

if (!payload["identifier"]) {
setFailed("Missing `identifier` in payload");
return { success: false, message: "Missing `identifier` in payload" };
}

const { identifier } = payload;
Expand All @@ -29,20 +30,27 @@ export function validatePayload(payload: BookPayload): void {
!validPrefixes.some((prefix) => identifier.startsWith(prefix)) &&
!isIsbn(identifier)
) {
setFailed(
`Invalid \`identifier\` in payload: ${identifier}. Must be an ISBN or start with one of the following: ${validPrefixes.join(", ")}`
);
return {
success: false,
message: `Invalid \`identifier\` in payload: ${identifier}. Must be an ISBN or start with one of the following: ${validPrefixes.join(", ")}`,
};
}

if (payload["date"] && !isDate(payload["date"])) {
setFailed(`Invalid \`date\` in payload: ${payload["date"]}`);
return {
success: false,
message: `Invalid \`date\` in payload: ${payload["date"]}`,
};
}

if (!payload["book-status"] || !isBookStatus(payload["book-status"])) {
setFailed(
`Invalid \`book-status\` in payload: "${payload["book-status"]}". Choose from: "want to read", "started", "finished", "abandoned"`
);
return {
success: false,
message: `Invalid \`book-status\` in payload: "${payload["book-status"]}". Choose from: "want to read", "started", "finished", "abandoned"`,
};
}

return { success: true, message: "Valid payload" };
}

function isBookStatus(status: string): status is BookStatus {
Expand Down

0 comments on commit 9260bc5

Please sign in to comment.