diff options
Diffstat (limited to 'std/encoding/yaml/type.ts')
-rw-r--r-- | std/encoding/yaml/type.ts | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/std/encoding/yaml/type.ts b/std/encoding/yaml/type.ts new file mode 100644 index 000000000..7f8918d4f --- /dev/null +++ b/std/encoding/yaml/type.ts @@ -0,0 +1,55 @@ +// Ported from js-yaml v3.13.1: +// https://github.com/nodeca/js-yaml/commit/665aadda42349dcae869f12040d9b10ef18d12da +// Copyright 2011-2015 by Vitaly Puzrin. All rights reserved. MIT license. +// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. + +import { ArrayObject, Any } from "./utils.ts"; + +export type KindType = "sequence" | "scalar" | "mapping"; +export type StyleVariant = "lowercase" | "uppercase" | "camelcase" | "decimal"; +export type RepresentFn = (data: Any, style?: StyleVariant) => Any; + +const DEFAULT_RESOLVE = (): boolean => true; +const DEFAULT_CONSTRUCT = (data: Any): Any => data; + +interface TypeOptions { + kind: KindType; + resolve?: (data: Any) => boolean; + construct?: (data: string) => Any; + instanceOf?: Any; + predicate?: (data: object) => boolean; + represent?: RepresentFn | ArrayObject<RepresentFn>; + defaultStyle?: StyleVariant; + styleAliases?: ArrayObject; +} + +function checkTagFormat(tag: string): string { + return tag; +} + +export class Type { + public tag: string; + public kind: KindType | null = null; + public instanceOf: Any; + public predicate?: (data: object) => boolean; + public represent?: RepresentFn | ArrayObject<RepresentFn>; + public defaultStyle?: StyleVariant; + public styleAliases?: ArrayObject; + public loadKind?: KindType; + + constructor(tag: string, options?: TypeOptions) { + this.tag = checkTagFormat(tag); + if (options) { + this.kind = options.kind; + this.resolve = options.resolve || DEFAULT_RESOLVE; + this.construct = options.construct || DEFAULT_CONSTRUCT; + this.instanceOf = options.instanceOf; + this.predicate = options.predicate; + this.represent = options.represent; + this.defaultStyle = options.defaultStyle; + this.styleAliases = options.styleAliases; + } + } + public resolve: (data?: Any) => boolean = (): boolean => true; + public construct: (data?: Any) => Any = (data): Any => data; +} |