Merge branch 'main' into static

This commit is contained in:
Sam Becker 2024-02-29 22:31:48 -06:00
commit 655fb63e8c
5 changed files with 25 additions and 4 deletions

View File

@ -41,7 +41,8 @@
"WRHGZC", "WRHGZC",
"wxyz", "wxyz",
"zadd", "zadd",
"zrange" "zrange",
"datetime"
], ],
"files.associations": { "files.associations": {
"*.css": "tailwindcss" "*.css": "tailwindcss"

View File

@ -30,4 +30,18 @@ describe('Date utility', () => {
.toBe('2023-12-02 16:38:36'); .toBe('2023-12-02 16:38:36');
}); });
}); });
it('Malformed date string', () => {
const timestamp = '2024/01a/01 Z';
expect(convertTimestampWithOffsetToPostgresString(timestamp))
.toBe(convertTimestampWithOffsetToPostgresString(
new Date().toISOString(),
));
});
it('Empty string', () => {
const timestamp = ' ';
expect(convertTimestampWithOffsetToPostgresString(timestamp))
.toBe(convertTimestampWithOffsetToPostgresString(
new Date().toISOString(),
));
});
}); });

View File

@ -2,10 +2,12 @@ import { parameterize } from '@/utility/string';
describe('String', () => { describe('String', () => {
it('parameterizes', () => { it('parameterizes', () => {
expect(parameterize('my-tag')).toBe('my-tag');
expect(parameterize('my tag')).toBe('my-tag'); expect(parameterize('my tag')).toBe('my-tag');
expect(parameterize('My Tag')).toBe('my-tag'); expect(parameterize('My Tag')).toBe('my-tag');
expect(parameterize('my_tag')).toBe('my-tag'); expect(parameterize('my_tag')).toBe('my-tag');
expect(parameterize('person\'s tag')).toBe('persons-tag'); expect(parameterize('person\'s tag')).toBe('persons-tag');
expect(parameterize('"person\'s tag"')).toBe('persons-tag'); expect(parameterize('"person\'s tag"')).toBe('persons-tag');
expect(parameterize('宿宿宿宿')).toBe('宿宿宿宿');
}); });
}); });

View File

@ -18,14 +18,16 @@ export const formatDateForPostgres = (date: Date) =>
'$1-$2-$3 $4', '$1-$2-$3 $4',
); );
const dateFromTimestamp = (timestamp?: AmbiguousTimestamp): Date => const dateFromTimestamp = (timestamp?: AmbiguousTimestamp): Date => {
typeof timestamp === 'number' const date = typeof timestamp === 'number'
? new Date(timestamp * 1000) ? new Date(timestamp * 1000)
: typeof timestamp === 'string' : typeof timestamp === 'string'
? /.+Z/i.test(timestamp) ? /.+Z/i.test(timestamp)
? new Date(timestamp) ? new Date(timestamp)
: new Date(`${timestamp}Z`) : new Date(`${timestamp}Z`)
: new Date(); : undefined;
return date && !isNaN(date.getTime()) ? date : new Date();
};
const createNaiveDateWithOffset = ( const createNaiveDateWithOffset = (
timestamp?: AmbiguousTimestamp, timestamp?: AmbiguousTimestamp,

View File

@ -24,6 +24,8 @@ export const parameterize = (
.trim() .trim()
// Replaces spaces, underscores, and dashes with dashes // Replaces spaces, underscores, and dashes with dashes
.replaceAll(/[\s_—]/gi, '-') .replaceAll(/[\s_—]/gi, '-')
// Removes punctuation
.replaceAll(/['"!@#$%^&*()_+=[\]{};:/?,.<>\\|`~]/gi, '')
// Removes all non-alphanumeric characters // Removes all non-alphanumeric characters
.replaceAll( .replaceAll(
shouldRemoveNonAlphanumeric shouldRemoveNonAlphanumeric