From 24f91aa1b4ac31d23ce940df786700f0ce57acf9 Mon Sep 17 00:00:00 2001 From: ssube Date: Sat, 15 Jun 2019 19:35:30 -0500 Subject: [PATCH] feat(config): stream type for bunyan config --- docs/example-config.yml | 5 +++++ src/config/index.ts | 2 ++ src/config/type/Stream.ts | 23 +++++++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 docs/example-config.yml create mode 100644 src/config/type/Stream.ts diff --git a/docs/example-config.yml b/docs/example-config.yml new file mode 100644 index 0000000..16d77c6 --- /dev/null +++ b/docs/example-config.yml @@ -0,0 +1,5 @@ +data: + logger: + level: debug + name: salty-dog + stream: !stream stderr diff --git a/src/config/index.ts b/src/config/index.ts index 4e3c496..c73f035 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -7,6 +7,7 @@ import { promisify } from 'util'; import { envType } from 'src/config/type/Env'; import { includeSchema, includeType } from 'src/config/type/Include'; import { regexpType } from 'src/config/type/Regexp'; +import { streamType } from 'src/config/type/Stream'; import { NotFoundError } from 'src/error/NotFoundError'; export const CONFIG_ENV = 'SALTY_HOME'; @@ -14,6 +15,7 @@ export const CONFIG_SCHEMA = Schema.create([DEFAULT_SAFE_SCHEMA], [ envType, includeType, regexpType, + streamType, ]); includeSchema.schema = CONFIG_SCHEMA; diff --git a/src/config/type/Stream.ts b/src/config/type/Stream.ts new file mode 100644 index 0000000..6d28626 --- /dev/null +++ b/src/config/type/Stream.ts @@ -0,0 +1,23 @@ +import { Type as YamlType } from 'js-yaml'; + +import { NotFoundError } from 'src/error/NotFoundError'; + +const ALLOWED_STREAMS = new Set([ + 'stdout', + 'stderr', +]); + +export const streamType = new YamlType('!stream', { + kind: 'scalar', + resolve(name: string) { + if (ALLOWED_STREAMS.has(name) && Reflect.has(process, name)) { + return true; + } else { + throw new NotFoundError(`process stream not found: ${name}`); + } + }, + construct(name: string) { + return Reflect.get(process, name); + }, +}); +