This commit addresses the issue of Chromium v126 and later not displaying error messages correctly when the error object's `message` property uses a getter. It refactors the code to utilize an immutable Error object with recursive context, improves error message formatting and leverages the `cause` property. Changes: - Refactor error wrapping internals to use an immutable error object, eliminating `message` getters. - Utilize the `cause` property in contextual errors for enhanced error display in the console. - Enhance message formatting with better indentation and listing. - Improve clarity by renaming values thrown during validations.
49 lines
1.8 KiB
TypeScript
49 lines
1.8 KiB
TypeScript
import type { CollectionData } from '@/application/collections/';
|
|
import type { IApplication } from '@/domain/IApplication';
|
|
import WindowsData from '@/application/collections/windows.yaml';
|
|
import MacOsData from '@/application/collections/macos.yaml';
|
|
import LinuxData from '@/application/collections/linux.yaml';
|
|
import { parseProjectDetails, type ProjectDetailsParser } from '@/application/Parser/ProjectDetailsParser';
|
|
import { Application } from '@/domain/Application';
|
|
import { parseCategoryCollection, type CategoryCollectionParser } from './CategoryCollectionParser';
|
|
import { createTypeValidator, type TypeValidator } from './Common/TypeValidator';
|
|
|
|
export function parseApplication(
|
|
collectionsData: readonly CollectionData[] = PreParsedCollections,
|
|
utilities: ApplicationParserUtilities = DefaultUtilities,
|
|
): IApplication {
|
|
validateCollectionsData(collectionsData, utilities.validator);
|
|
const projectDetails = utilities.parseProjectDetails();
|
|
const collections = collectionsData.map(
|
|
(collection) => utilities.parseCategoryCollection(collection, projectDetails),
|
|
);
|
|
const app = new Application(projectDetails, collections);
|
|
return app;
|
|
}
|
|
|
|
const PreParsedCollections: readonly CollectionData[] = [
|
|
WindowsData, MacOsData, LinuxData,
|
|
];
|
|
|
|
function validateCollectionsData(
|
|
collections: readonly CollectionData[],
|
|
validator: TypeValidator,
|
|
) {
|
|
validator.assertNonEmptyCollection({
|
|
value: collections,
|
|
valueName: 'Collections',
|
|
});
|
|
}
|
|
|
|
interface ApplicationParserUtilities {
|
|
readonly parseCategoryCollection: CategoryCollectionParser;
|
|
readonly validator: TypeValidator;
|
|
readonly parseProjectDetails: ProjectDetailsParser;
|
|
}
|
|
|
|
const DefaultUtilities: ApplicationParserUtilities = {
|
|
parseCategoryCollection,
|
|
parseProjectDetails,
|
|
validator: createTypeValidator(),
|
|
};
|