UNPKG

catberry

Version:

Catberry is an isomorphic framework for building universal front-end apps using components, Flux architecture and progressive rendering.

72 lines (61 loc) 2.1 kB
'use strict'; const moduleHelper = require('./moduleHelper'); const helper = { /** * Registers templates into the component and template providers. * @param {Object} component The component. * @param {{template: string, errorTemplate: string}} templates * The compiled templates. */ registerTemplates: component => { component.templateProvider.registerCompiled(component.name, component.compiledTemplate); component.template = { render: context => component.templateProvider.render(component.name, context) }; if (!component.compiledErrorTemplate) { return; } const errorTemplateName = moduleHelper.getNameForErrorTemplate(component.name); component.errorTemplateProvider.registerCompiled(errorTemplateName, component.compiledErrorTemplate); component.errorTemplate = { render: context => component.errorTemplateProvider.render(errorTemplateName, context) }; }, /** * Resolves valid template providers. * @param {ServiceLocator} locator Service locator that has providers registered. * @returns {Array<TemplateProvider>} List of template providers. */ resolveTemplateProviders: locator => { const eventBus = locator.resolve('eventBus'); try { return locator .resolveAll('templateProvider') .filter(provider => { const isValid = typeof (provider.getName) === 'function' && typeof (provider.registerCompiled) === 'function' && typeof (provider.render) === 'function'; if (!isValid) { eventBus.emit('warn', 'Template provider does not have required methods, skipping...'); } return isValid; }); } catch (e) { return []; } }, /** * Resolves valid template providers by names. * @param {ServiceLocator} locator Service locator that has providers registered. * @returns {Object} Map of template providers by names. */ resolveTemplateProvidersByNames: locator => { return helper .resolveTemplateProviders(locator) .reduce((map, current) => { map[current.getName()] = current; return map; }, Object.create(null)); } }; module.exports = helper;