1
0
Fork 0
js-yaml-schema/src/schema.ts

62 lines
1.3 KiB
TypeScript
Raw Normal View History

import { mustCoalesce } from '@apextoaster/js-utils';
import { DEFAULT_SCHEMA, Schema } from 'js-yaml';
2019-11-13 14:01:51 +00:00
import { envType } from './type/Env';
import { createInclude, IncludeOptions } from './type/Include';
2019-11-13 14:01:51 +00:00
import { regexpType } from './type/Regexp';
import { streamType } from './type/Stream';
/**
* @public
*/
export interface SchemaOptions {
base?: Schema;
}
/**
* @public
*/
export function createSchema(options: SchemaOptions) {
const base = mustCoalesce(options.base, DEFAULT_SCHEMA);
return base.extend([
envType,
regexpType,
streamType,
]);
}
/**
* @public
* @deprecated
*/
export interface IncludeSchemaOptions {
base?: Schema;
include: Readonly<Omit<IncludeOptions, 'schema'>>;
}
/**
* Extended schema with the include type, and auto-configuration
* of the include schema.
*
* @public
* @deprecated use createSchema unless the include type is needed, since it requires a number of callbacks
*/
export function createIncludeSchema(options: Readonly<IncludeSchemaOptions>) {
const base = mustCoalesce(options.base, DEFAULT_SCHEMA);
const {includeType, setSchema} = createInclude({
...options.include,
schema: base,
});
const schema = base.extend([
envType,
includeType,
regexpType,
streamType,
]);
setSchema(schema);
return schema;
}