- Update API

- Add Chart Preview
- Add Drum Type dropdown when the "drums" instrument is selected
- Add Min/Max Year to advanced search
- Add Track Hash to advanced search
- Add "Download Video Backgrounds" setting
- Updated and improved detected chart issues
This commit is contained in:
Geomitron
2024-07-16 15:20:58 -05:00
parent 627896a8c8
commit 353994b8e1
43 changed files with 1808 additions and 510 deletions

View File

@@ -1,6 +1,6 @@
import { z } from 'zod'
import { difficulties, instruments } from './UtilFunctions'
import { difficulties, drumTypeNames, instruments } from './UtilFunctions.js'
export const GeneralSearchSchema = z.object({
search: z.string(),
@@ -8,14 +8,17 @@ export const GeneralSearchSchema = z.object({
page: z.number().positive(),
instrument: z.enum(instruments).nullable(),
difficulty: z.enum(difficulties).nullable(),
drumType: z.enum(drumTypeNames).nullable(),
})
export type GeneralSearch = z.infer<typeof GeneralSearchSchema>
const md5Validator = z.string().regex(/^[a-f0-9]{32}$/, 'Invalid MD5 hash')
const blakeValidator = z.string().regex(/^[A-Za-z0-9-_]+={0,2}$/, 'Invalid hash')
export const AdvancedSearchSchema = z.object({
instrument: z.enum(instruments).nullable(),
difficulty: z.enum(difficulties).nullable(),
drumType: z.enum(drumTypeNames).nullable(),
name: z.object({ value: z.string(), exact: z.boolean(), exclude: z.boolean() }),
artist: z.object({ value: z.string(), exact: z.boolean(), exclude: z.boolean() }),
album: z.object({ value: z.string(), exact: z.boolean(), exclude: z.boolean() }),
@@ -30,6 +33,8 @@ export const AdvancedSearchSchema = z.object({
maxAverageNPS: z.number().nullable(),
minMaxNPS: z.number().nullable(),
maxMaxNPS: z.number().nullable(),
minYear: z.number().nullable(),
maxYear: z.number().nullable(),
modifiedAfter: z.string().regex(/^\d+-\d{2}-\d{2}$/, 'Invalid date').or(z.coerce.date()).or(z.literal('')).nullable(),
hash: z.string().transform(data =>
data === '' || data.split(',').every(hash => md5Validator.safeParse(hash).success) ? data : 'invalid'
@@ -37,6 +42,9 @@ export const AdvancedSearchSchema = z.object({
chartHash: z.string().transform(data =>
data === '' || data.split(',').every(hash => md5Validator.safeParse(hash).success) ? data : 'invalid'
).nullable().optional(),
trackHash: z.string().transform(data =>
data === '' || data.split(',').every(hash => blakeValidator.safeParse(hash).success) ? data : 'invalid'
).nullable().optional(),
hasSoloSections: z.boolean().nullable(),
hasForcedNotes: z.boolean().nullable(),
hasOpenNotes: z.boolean().nullable(),
@@ -70,6 +78,8 @@ export const advancedSearchNumberProperties = [
'maxAverageNPS',
'minMaxNPS',
'maxMaxNPS',
'minYear',
'maxYear',
] as const
export const advancedSearchBooleanProperties = [