fmt
This commit is contained in:
+43
-40
@@ -6,57 +6,60 @@ import type {Ok} from './helpers'
|
||||
|
||||
const log = logger('config:parsing')
|
||||
|
||||
export async function object<S extends yup.Maybe<yup.AnyObject>>(schema: yup.ObjectSchema<S>, base_name: string = ""): Promise<Ok<S>> {
|
||||
log.debug("Object")
|
||||
if (base_name.length !== 0) base_name = base_name + "_"
|
||||
export async function object<S extends yup.Maybe<yup.AnyObject>>(
|
||||
schema: yup.ObjectSchema<S>,
|
||||
base_name: string = ''
|
||||
): Promise<Ok<S>> {
|
||||
log.debug('Object')
|
||||
if (base_name.length !== 0) base_name = base_name + '_'
|
||||
|
||||
// @ts-expect-error Ugly hack with type S
|
||||
const data: S = {}
|
||||
|
||||
for (const key in schema.fields) {
|
||||
const sub_key = base_name + key.toUpperCase()
|
||||
// @ts-expect-error Ugly hack with type S
|
||||
const data: S = {}
|
||||
|
||||
const sub_scheme = schema.fields[key]
|
||||
let value: Ok<unknown>
|
||||
for (const key in schema.fields) {
|
||||
const sub_key = base_name + key.toUpperCase()
|
||||
|
||||
// TODO : If array, add a transform
|
||||
if (sub_scheme.describe().type === 'object') {
|
||||
value = await object(sub_scheme, sub_key)
|
||||
} else {
|
||||
value = await generic(sub_scheme, sub_key)
|
||||
}
|
||||
const sub_scheme = schema.fields[key]
|
||||
let value: Ok<unknown>
|
||||
|
||||
if (!value.ok) return value
|
||||
if (value.data === undefined) continue
|
||||
|
||||
data[key] = value.data
|
||||
// TODO : If array, add a transform
|
||||
if (sub_scheme.describe().type === 'object') {
|
||||
value = await object(sub_scheme, sub_key)
|
||||
} else {
|
||||
value = await generic(sub_scheme, sub_key)
|
||||
}
|
||||
|
||||
return {ok: true, data}
|
||||
if (!value.ok) return value
|
||||
if (value.data === undefined) continue
|
||||
|
||||
data[key] = value.data
|
||||
}
|
||||
|
||||
return {ok: true, data}
|
||||
}
|
||||
|
||||
export async function generic<S>(scheme: yup.AnySchema<S>, key: string): Promise<Ok<S | undefined>> {
|
||||
log.debug('Generic', scheme.describe().type)
|
||||
log.debug('Generic', scheme.describe().type)
|
||||
|
||||
const value = await read_env(key)
|
||||
if (!value.ok) return value
|
||||
const value = await read_env(key)
|
||||
if (!value.ok) return value
|
||||
|
||||
if (value.data === undefined) {
|
||||
const def = scheme.getDefault()
|
||||
if (def !== undefined) return {ok: true, data: def}
|
||||
else if (scheme.spec.optional) return {ok: true, data: undefined}
|
||||
|
||||
log.warn('Missing value for', key)
|
||||
return {}
|
||||
}
|
||||
if (value.data === undefined) {
|
||||
const def = scheme.getDefault()
|
||||
if (def !== undefined) return {ok: true, data: def}
|
||||
else if (scheme.spec.optional) return {ok: true, data: undefined}
|
||||
|
||||
if (!(await scheme.isValid(value.data))) {
|
||||
log.warn('Invaid value for', key)
|
||||
log.debug('Value:', value.data)
|
||||
return {}
|
||||
}
|
||||
|
||||
const res = scheme.cast(value.data)
|
||||
log.warn('Missing value for', key)
|
||||
return {}
|
||||
}
|
||||
|
||||
return {ok: true, data: res}
|
||||
if (!(await scheme.isValid(value.data))) {
|
||||
log.warn('Invaid value for', key)
|
||||
log.debug('Value:', value.data)
|
||||
return {}
|
||||
}
|
||||
|
||||
const res = scheme.cast(value.data)
|
||||
|
||||
return {ok: true, data: res}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user