mirror of
https://github.com/zadam/trilium.git
synced 2025-12-06 15:34:26 +01:00
edited notes: recognize not valid dates/keywords, return 0 limit to client
This commit is contained in:
parent
366a8bd841
commit
e1170b2666
@ -25,6 +25,14 @@ function keywordResolvesToDate(dateStrOrKeyword: string, expectedDate: string) {
|
||||
});
|
||||
}
|
||||
|
||||
function keywordDoesNotResolve(dateStrOrKeyword: string) {
|
||||
cls.init(() => {
|
||||
cls.set("localNowDateTime", clientDate);
|
||||
const dateFilter = dateNoteLabelKeywordToDateFilter(dateStrOrKeyword);
|
||||
expect(dateFilter.date).toBe(null);
|
||||
});
|
||||
}
|
||||
|
||||
describe("edited-notes::dateNoteLabelKeywordToDateFilter", () => {
|
||||
beforeEach(() => {
|
||||
vi.stubEnv('TZ', 'UTC');
|
||||
@ -70,16 +78,32 @@ describe("edited-notes::dateNoteLabelKeywordToDateFilter", () => {
|
||||
keywordResolvesToDate("2020-12", "2020-12");
|
||||
});
|
||||
|
||||
it("returns original string for partial month", () => {
|
||||
keywordResolvesToDate("2020-1", "2020-1");
|
||||
});
|
||||
|
||||
it("returns original string for partial month with trailing dash", () => {
|
||||
keywordResolvesToDate("2020-", "2020-");
|
||||
});
|
||||
|
||||
it("returns original string for year", () => {
|
||||
keywordResolvesToDate("2020", "2020");
|
||||
});
|
||||
|
||||
it("returns original string for unrecognized keyword", () => {
|
||||
keywordResolvesToDate("FOO", "FOO");
|
||||
it("returns original string for potentially partial day", () => {
|
||||
keywordResolvesToDate("2020-12-1", "2020-12-1");
|
||||
});
|
||||
|
||||
it("returns original string for partially recognized keyword", () => {
|
||||
keywordResolvesToDate("TODAY-", "TODAY-");
|
||||
it("returns null for partial year", () => {
|
||||
keywordDoesNotResolve("202");
|
||||
});
|
||||
|
||||
it("returns null for arbitrary string", () => {
|
||||
keywordDoesNotResolve("FOO");
|
||||
});
|
||||
|
||||
it("returns null for missing delta", () => {
|
||||
keywordDoesNotResolve("TODAY-");
|
||||
});
|
||||
|
||||
it("resolves 'today' (lowercase) to today's date", () => {
|
||||
|
||||
@ -24,6 +24,13 @@ interface NotePojoWithNotePath extends NotePojo {
|
||||
function getEditedNotesOnDate(req: Request) {
|
||||
const dateFilter = dateNoteLabelKeywordToDateFilter(req.params.date);
|
||||
|
||||
if (!dateFilter.date) {
|
||||
return {
|
||||
notes: [],
|
||||
limit: 0,
|
||||
} satisfies EditedNotesResponse;
|
||||
}
|
||||
|
||||
const sqlParams = { date: dateFilter.date + "%" };
|
||||
const limit = 50;
|
||||
const sqlQuery = /*sql*/`\
|
||||
@ -117,7 +124,7 @@ function formatDateFromKeywordAndDelta(
|
||||
|
||||
interface DateValue {
|
||||
// kind: "date",
|
||||
date: string,
|
||||
date: string | null,
|
||||
}
|
||||
|
||||
type DateFilter = DateValue;
|
||||
@ -146,22 +153,42 @@ type DateFilter = DateValue;
|
||||
* @returns A `DateFilter` object containing the resolved date string.
|
||||
*/
|
||||
export function dateNoteLabelKeywordToDateFilter(dateStr: string): DateFilter {
|
||||
const match = dateStr.match(/^(today|month|year)([+-]\d+)?$/i);
|
||||
const keywordAndDelta = dateStr.match(/^(today|month|year)([+-]\d+)?$/i);
|
||||
|
||||
if (!match) {
|
||||
if (keywordAndDelta) {
|
||||
const keyword = keywordAndDelta[1].toLowerCase();
|
||||
const delta = keywordAndDelta[2] ? parseInt(keywordAndDelta[2]) : 0;
|
||||
|
||||
const clientDate = dayjs(dateUtils.localNowDate());
|
||||
const date = formatDateFromKeywordAndDelta(clientDate, keyword, delta);
|
||||
return {
|
||||
date: date
|
||||
};
|
||||
}
|
||||
|
||||
// Check if it's a valid date format (YYYY-MM-DD, YYYY-MM, or YYYY)
|
||||
const isDatePrefix = isValidDatePrefix(dateStr);
|
||||
|
||||
if (isDatePrefix) {
|
||||
return {
|
||||
date: dateStr
|
||||
};
|
||||
} else {
|
||||
// Not a keyword and not a valid date prefix
|
||||
return {
|
||||
date: null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const keyword = match[1].toLowerCase();
|
||||
const delta = match[2] ? parseInt(match[2]) : 0;
|
||||
|
||||
const clientDate = dayjs(dateUtils.localNowDate());
|
||||
const date = formatDateFromKeywordAndDelta(clientDate, keyword, delta);
|
||||
return {
|
||||
date: date
|
||||
function isValidDatePrefix(dateStr: string): boolean {
|
||||
// Check if it starts with YYYY format
|
||||
if (/^\d{4}/.test(dateStr)) {
|
||||
const year = parseInt(dateStr.substring(0, 4));
|
||||
return !isNaN(year) && year > 0 && year < 10000;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
export default {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user