28 lines
658 B
TypeScript
28 lines
658 B
TypeScript
import logger from 'log'
|
|
import * as yup from 'yup'
|
|
|
|
import * as parsing from './parsing'
|
|
import type {Ok} from './helpers'
|
|
|
|
export * as yup from 'yup'
|
|
|
|
const log = logger('config')
|
|
|
|
export async function parse<S extends yup.Maybe<yup.AnyObject>>(schema: yup.ObjectSchema<S>): Promise<Ok<S>> {
|
|
log.info('Parse from env')
|
|
|
|
log.trace('Start parsing')
|
|
const config = await parsing.object(schema)
|
|
if (!config.ok) return config
|
|
|
|
log.trace('double-check')
|
|
const res = await schema.isValid(config.data, {strict: true})
|
|
if (!res) {
|
|
log.error('Double-check failed')
|
|
log.debug('Config', config.data)
|
|
return {ok: false}
|
|
}
|
|
|
|
return config
|
|
}
|