UNPKG

@neo-one/server-plugin

Version:

NEO•ONE Server plugin API.

92 lines (90 loc) 13.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const fs = tslib_1.__importStar(require("fs-extra")); const path = tslib_1.__importStar(require("path")); const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const seamless_immutable_1 = tslib_1.__importDefault(require("seamless-immutable")); const watchConfig$ = (file) => new rxjs_1.Observable((observer) => { let watcher; let closed = false; Promise.resolve().then(() => tslib_1.__importStar(require('chokidar'))).then((chokidar) => { if (!closed) { watcher = chokidar.watch(file, { ignoreInitial: false }); watcher.on('add', () => { observer.next('change'); }); watcher.on('change', () => { observer.next('change'); }); watcher.on('error', (error) => { observer.error(error); }); watcher.on('unlink', () => { observer.error(new Error('Configuration file deleted.')); }); } }) .catch((error) => observer.error(error)); return () => { closed = true; if (watcher !== undefined) { watcher.close(); } }; }); class Config { constructor({ name: configName, defaultConfig, schema, configPath, }) { this.configPath = path.resolve(configPath, `${configName}.json`); this.defaultConfig = defaultConfig; this.schema = schema; this.config$ = rxjs_1.defer(async () => this.getConfig()).pipe(operators_1.switchMap((config) => watchConfig$(this.configPath).pipe(operators_1.mergeScan((prevConfig) => rxjs_1.defer(async () => this.getConfig({ config: prevConfig })), config, 1))), operators_1.distinctUntilChanged()); } async update({ config }) { await this.validate(config); await fs.ensureDir(path.dirname(this.configPath)); await fs.writeFile(this.configPath, JSON.stringify(config)); return config; } async getConfig({ config = this.defaultConfig } = {}) { let contents; try { contents = await fs.readFile(this.configPath, 'utf8'); } catch (error) { if (error.code === 'ENOENT') { return this.update({ config }); } throw error; } const currentConfig = JSON.parse(contents); await this.validate(currentConfig); if (config !== undefined) { return seamless_immutable_1.default.merge(config, currentConfig, { deep: true, }); } return currentConfig; } async validate(config) { const validateConfig = await this.getValidateConfig(); const isValid = validateConfig(config); if (!isValid) { const error = new Error('Invalid config'); error.errors = validateConfig.errors; throw error; } } async getValidateConfig() { if (this.mutableValidateConfig !== undefined) { return this.mutableValidateConfig; } const ajv = await Promise.resolve().then(() => tslib_1.__importStar(require('ajv'))); const validateConfig = new ajv.default().compile(this.schema); this.mutableValidateConfig = validateConfig; return validateConfig; } } exports.Config = Config; //# sourceMappingURL=data:application/json;charset=utf8;base64,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Q0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFekMsS0FBYSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzlDLE1BQU0sS0FBSyxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBSU8sS0FBSyxDQUFDLGlCQUFpQjtRQUM3QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7U0FDbkM7UUFFRCxNQUFNLEdBQUcsR0FBRyxnRUFBYSxLQUFLLEdBQUMsQ0FBQztRQUVoQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxjQUFjLENBQUM7UUFFNUMsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBN0ZELHdCQTZGQyIsImZpbGUiOiJuZW8tb25lLXNlcnZlci1wbHVnaW4vc3JjL0NvbmZpZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBkZWZlciwgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtZXJnZVNjYW4sIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBTZWFtbGVzc0ltbXV0YWJsZSBmcm9tICdzZWFtbGVzcy1pbW11dGFibGUnO1xuXG50eXBlIEV2ZW50ID0gJ2NoYW5nZSc7XG5cbmNvbnN0IHdhdGNoQ29uZmlnJCA9IChmaWxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEV2ZW50PiA9PlxuICBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEV2ZW50PikgPT4ge1xuICAgIC8vIGltcG9ydCgnY2hva2lkYXInKS5GU1dhdGNoZXJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgbGV0IHdhdGNoZXI6IGFueSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gICAgaW1wb3J0KCdjaG9raWRhcicpXG4gICAgICAudGhlbigoY2hva2lkYXIpID0+IHtcbiAgICAgICAgaWYgKCFjbG9zZWQpIHtcbiAgICAgICAgICB3YXRjaGVyID0gY2hva2lkYXIud2F0Y2goZmlsZSwgeyBpZ25vcmVJbml0aWFsOiBmYWxzZSB9KTtcbiAgICAgICAgICB3YXRjaGVyLm9uKCdhZGQnLCAoKSA9PiB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KCdjaGFuZ2UnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB3YXRjaGVyLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KCdjaGFuZ2UnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB3YXRjaGVyLm9uKCdlcnJvcicsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB3YXRjaGVyLm9uKCd1bmxpbmsnLCAoKSA9PiB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ0NvbmZpZ3VyYXRpb24gZmlsZSBkZWxldGVkLicpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IG9ic2VydmVyLmVycm9yKGVycm9yKSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgIGlmICh3YXRjaGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgd2F0Y2hlci5jbG9zZSgpO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG5leHBvcnQgY2xhc3MgQ29uZmlnPFRDb25maWcgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyQ6IE9ic2VydmFibGU8VENvbmZpZz47XG4gIHB1YmxpYyByZWFkb25seSBjb25maWdQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZzogVENvbmZpZztcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYTogYW55O1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gIHByaXZhdGUgbXV0YWJsZVZhbGlkYXRlQ29uZmlnOiBhbnk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHtcbiAgICBuYW1lOiBjb25maWdOYW1lLFxuICAgIGRlZmF1bHRDb25maWcsXG4gICAgc2NoZW1hLFxuICAgIGNvbmZpZ1BhdGgsXG4gIH06IHtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZGVmYXVsdENvbmZpZzogVENvbmZpZztcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgcmVhZG9ubHkgc2NoZW1hOiBhbnk7XG4gICAgcmVhZG9ubHkgY29uZmlnUGF0aDogc3RyaW5nO1xuICB9KSB7XG4gICAgdGhpcy5jb25maWdQYXRoID0gcGF0aC5yZXNvbHZlKGNvbmZpZ1BhdGgsIGAke2NvbmZpZ05hbWV9Lmpzb25gKTtcbiAgICB0aGlzLmRlZmF1bHRDb25maWcgPSBkZWZhdWx0Q29uZmlnO1xuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMuY29uZmlnJCA9IGRlZmVyKGFzeW5jICgpID0+IHRoaXMuZ2V0Q29uZmlnKCkpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGNvbmZpZykgPT5cbiAgICAgICAgd2F0Y2hDb25maWckKHRoaXMuY29uZmlnUGF0aCkucGlwZShcbiAgICAgICAgICBtZXJnZVNjYW4oKHByZXZDb25maWcpID0+IGRlZmVyKGFzeW5jICgpID0+IHRoaXMuZ2V0Q29uZmlnKHsgY29uZmlnOiBwcmV2Q29uZmlnIH0pKSwgY29uZmlnLCAxKSxcbiAgICAgICAgKSxcbiAgICAgICksXG5cbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGUoeyBjb25maWcgfTogeyByZWFkb25seSBjb25maWc6IFRDb25maWcgfSk6IFByb21pc2U8VENvbmZpZz4ge1xuICAgIGF3YWl0IHRoaXMudmFsaWRhdGUoY29uZmlnKTtcbiAgICBhd2FpdCBmcy5lbnN1cmVEaXIocGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aCkpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLmNvbmZpZ1BhdGgsIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpO1xuXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q29uZmlnKHsgY29uZmlnID0gdGhpcy5kZWZhdWx0Q29uZmlnIH06IHsgcmVhZG9ubHkgY29uZmlnPzogVENvbmZpZyB9ID0ge30pOiBQcm9taXNlPFRDb25maWc+IHtcbiAgICBsZXQgY29udGVudHM7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5jb25maWdQYXRoLCAndXRmOCcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHsgY29uZmlnIH0pO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZShjdXJyZW50Q29uZmlnKTtcblxuICAgIGlmIChjb25maWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuICAgICAgcmV0dXJuIChTZWFtbGVzc0ltbXV0YWJsZSBhcyBhbnkpLm1lcmdlKGNvbmZpZywgY3VycmVudENvbmZpZywge1xuICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRDb25maWc7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKGNvbmZpZzogVENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbGlkYXRlQ29uZmlnID0gYXdhaXQgdGhpcy5nZXRWYWxpZGF0ZUNvbmZpZygpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSB2YWxpZGF0ZUNvbmZpZyhjb25maWcpO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0ludmFsaWQgY29uZmlnJyk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tb2JqZWN0LW11dGF0aW9uIG5vLWFueVxuICAgICAgKGVycm9yIGFzIGFueSkuZXJyb3JzID0gdmFsaWRhdGVDb25maWcuZXJyb3JzO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJvbWlzZTxpbXBvcnQoJ2FqdicpLlZhbGlkYXRlRnVuY3Rpb24+XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgcHJpdmF0ZSBhc3luYyBnZXRWYWxpZGF0ZUNvbmZpZygpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICh0aGlzLm11dGFibGVWYWxpZGF0ZUNvbmZpZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdXRhYmxlVmFsaWRhdGVDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3QgYWp2ID0gYXdhaXQgaW1wb3J0KCdhanYnKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgY29uc3QgdmFsaWRhdGVDb25maWcgPSBuZXcgYWp2LmRlZmF1bHQoKS5jb21waWxlKHRoaXMuc2NoZW1hKTtcbiAgICB0aGlzLm11dGFibGVWYWxpZGF0ZUNvbmZpZyA9IHZhbGlkYXRlQ29uZmlnO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlQ29uZmlnO1xuICB9XG59XG4iXX0=