import type { CategoryData, ScriptData, CategoryOrScriptData, } from '@/application/collections/'; import { Script } from '@/domain/Script'; import { Category } from '@/domain/Category'; import { NodeValidator } from '@/application/Parser/NodeValidation/NodeValidator'; import { NodeType } from '@/application/Parser/NodeValidation/NodeType'; import { parseDocs } from './DocumentationParser'; import { ICategoryCollectionParseContext } from './Script/ICategoryCollectionParseContext'; import { parseScript } from './Script/ScriptParser'; let categoryIdCounter = 0; export function parseCategory( category: CategoryData, context: ICategoryCollectionParseContext, factory: CategoryFactoryType = CategoryFactory, ): Category { return parseCategoryRecursively({ categoryData: category, context, factory, }); } interface ICategoryParseContext { readonly categoryData: CategoryData, readonly context: ICategoryCollectionParseContext, readonly factory: CategoryFactoryType, readonly parentCategory?: CategoryData, } function parseCategoryRecursively(context: ICategoryParseContext): Category | never { ensureValidCategory(context.categoryData, context.parentCategory); const children: ICategoryChildren = { subCategories: new Array(), subScripts: new Array