chore(frontend): harden settings parsing and update store imports

This commit is contained in:
Yiannis
2026-03-11 02:31:07 +02:00
parent 374ae4de6e
commit 499196b0f6
10 changed files with 34 additions and 10 deletions

View File

@@ -21,8 +21,9 @@ export function pagesConfig(
ret[key].enabled = settings[key]?.enabled === false ? false : true;
if (settings[key]?.title !== undefined) {
ret[key].title = settings[key].title.trim();
const title = settings[key]?.title;
if (typeof title === 'string') {
ret[key].title = title.trim();
}
}

View File

@@ -16,8 +16,9 @@ export function taxonomiesConfig(settings?: DeepPartial<GlobalMediaCMS['site']['
ret[key].enabled = settings[key]?.enabled === false ? false : true; // @todo: Check this again
if (settings[key]?.title !== undefined) {
ret[key].title = settings[key].title.trim();
const title = settings[key]?.title;
if (typeof title === 'string') {
ret[key].title = title.trim();
}
}

View File

@@ -1,7 +1,7 @@
import EventEmitter from 'events';
import { BrowserCache } from '../classes/';
import { BrowserEvents, exportStore } from '../helpers';
import { config as mediaCmsConfig } from '../settings/config.js';
import { config as mediaCmsConfig } from '../settings/config';
function uniqid() {
let a = new Uint32Array(3);

View File

@@ -2,7 +2,7 @@ import React from 'react';
import EventEmitter from 'events';
import { publishedOnDate, exportStore, getRequest, postRequest, deleteRequest, csrfToken } from '../helpers';
import { config as mediacmsConfig } from '../settings/config.js';
import { config as mediacmsConfig } from '../settings/config';
const PlaylistPageStoreData = {};

View File

@@ -1,7 +1,7 @@
import EventEmitter from 'events';
import { exportStore, getRequest, deleteRequest, csrfToken } from '../helpers';
import { config as mediacmsConfig } from '../settings/config.js';
import { config as mediacmsConfig } from '../settings/config';
class ProfilePageStore extends EventEmitter {
constructor() {

View File

@@ -1,6 +1,6 @@
import EventEmitter from 'events';
import { exportStore, getRequest } from '../helpers';
import { config as mediacmsConfig } from '../settings/config.js';
import { config as mediacmsConfig } from '../settings/config';
function getUrlVars() {
var vars = {};

View File

@@ -2,7 +2,7 @@ import EventEmitter from 'events';
import { exportStore } from '../helpers/';
import { BrowserCache } from '../classes/';
import { config as mediacmsConfig } from '../settings/config.js';
import { config as mediacmsConfig } from '../settings/config';
let browserCache;

View File

@@ -14,4 +14,4 @@ export {
ProfilePageStore,
SearchFieldStore,
VideoViewerStore,
}
};

View File

@@ -44,6 +44,18 @@ describe('utils/settings', () => {
expect(cfg.recommended.title).toBe('Recommended');
});
test('Ignores non-string titles and keeps defaults', () => {
const cfg = pagesConfig({
latest: { title: null as any },
featured: { title: 123 as any },
recommended: { title: true as any },
});
expect(cfg.latest.title).toBe('Recent uploads');
expect(cfg.featured.title).toBe('Featured');
expect(cfg.recommended.title).toBe('Recommended');
});
test('Ignores unknown keys in settings', () => {
const cfg = pagesConfig({
// @ts-ignore

View File

@@ -30,6 +30,16 @@ describe('utils/settings', () => {
expect(res.tags).toStrictEqual({ enabled: true, title: 'My Tags' });
});
test('Should ignore non-string title values and keep defaults', () => {
const res = taxonomiesConfig({
tags: { title: null as any },
categories: { title: 123 as any },
});
expect(res.tags).toStrictEqual({ enabled: true, title: 'Tags' });
expect(res.categories).toStrictEqual({ enabled: true, title: 'Categories' });
});
test('Should ignore unknown taxonomy keys', () => {
const input = {
unknownKey: { enabled: true, title: 'X' },