/* * Copyright (c) 2017 molio contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose */ import { Category, UndefinedCategory } from './category' export abstract class Block { abstract getCategory(name: string): T|undefined abstract addCategory(category: T): void getCategoriesFromSchema (schema: T) { return BlockCategories(this, schema) } } export type BlockCategories = { readonly [name in Categories]: Category } export function BlockCategories(block: Block | undefined, categories: T): BlockCategories { const ret = Object.create(null); if (!block) for (const c of Object.keys(categories)) ret[c] = UndefinedCategory; else for (const c of Object.keys(categories)) ret[c] = block.getCategory(c); return ret; }