39 lines
1.7 KiB
TypeScript
39 lines
1.7 KiB
TypeScript
import { IApplication } from '@/domain/IApplication';
|
|
import { IProjectInformation } from '@/domain/IProjectInformation';
|
|
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
|
import { parseCategoryCollection } from './CategoryCollectionParser';
|
|
import WindowsData from 'js-yaml-loader!@/application/collections/windows.yaml';
|
|
import MacOsData from 'js-yaml-loader!@/application/collections/macos.yaml';
|
|
import { CollectionData } from 'js-yaml-loader!@/*';
|
|
import { parseProjectInformation } from '@/application/Parser/ProjectInformationParser';
|
|
import { Application } from '@/domain/Application';
|
|
|
|
export function parseApplication(
|
|
parser = CategoryCollectionParser,
|
|
processEnv: NodeJS.ProcessEnv = process.env,
|
|
collectionsData = PreParsedCollections): IApplication {
|
|
validateCollectionsData(collectionsData);
|
|
const information = parseProjectInformation(processEnv);
|
|
const collections = collectionsData.map((collection) => parser(collection, information));
|
|
const app = new Application(information, collections);
|
|
return app;
|
|
}
|
|
|
|
export type CategoryCollectionParserType
|
|
= (file: CollectionData, info: IProjectInformation) => ICategoryCollection;
|
|
|
|
const CategoryCollectionParser: CategoryCollectionParserType
|
|
= (file, info) => parseCategoryCollection(file, info);
|
|
|
|
const PreParsedCollections: readonly CollectionData []
|
|
= [ WindowsData, MacOsData ];
|
|
|
|
function validateCollectionsData(collections: readonly CollectionData[]) {
|
|
if (!collections.length) {
|
|
throw new Error('no collection provided');
|
|
}
|
|
if (collections.some((collection) => !collection)) {
|
|
throw new Error('undefined collection provided');
|
|
}
|
|
}
|