UNPKG

piral-configs

Version:

Plugin for dynamic configurations of pilets in Piral.

46 lines 1.63 kB
import { Validator } from 'jsonschema'; export function createConfigsApi(config = {}) { const readConfig = (name, defaultConfig) => { const key = `config-${name}`; const current = config.retrieve?.(key); if (typeof current === 'object') { return { ...defaultConfig, ...current, }; } else if (typeof current !== 'undefined') { return current; } else { return undefined; } }; const validate = (schema, proposedConfig, defaultConfig) => { const validator = new Validator(); const result = validator.validate(proposedConfig, schema); if (!result.valid) { console.warn(`The given configuration does not match the provided schema. Taking the default configuration.`, proposedConfig, result); return defaultConfig; } return proposedConfig; }; return (ctx) => (_, meta) => ({ defineConfigSchema(schema, defaultConfig) { const proposedConfig = readConfig(meta.name, defaultConfig); const current = proposedConfig ? validate(schema, proposedConfig, defaultConfig) : defaultConfig; ctx.dispatch((state) => ({ ...state, configs: { ...state.configs, [meta.name]: current, }, })); return current; }, getCurrentConfig() { return ctx.readState((s) => s.configs[meta.name]) ?? {}; }, }); } //# sourceMappingURL=create.js.map