summaryrefslogtreecommitdiff
path: root/std/encoding/yaml/type.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/encoding/yaml/type.ts')
-rw-r--r--std/encoding/yaml/type.ts55
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;
+}