-
Notifications
You must be signed in to change notification settings - Fork 5
/
shorthand.ts
164 lines (136 loc) · 3.81 KB
/
shorthand.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
* Copyright (c) 2020, J2 Innovations. All Rights Reserved
*/
import {
HaysonCoord,
HaysonDate,
HaysonDateTime,
HaysonDict,
HaysonGrid,
HaysonList,
HaysonNum,
HaysonRef,
HaysonSymbol,
HaysonTime,
HaysonUri,
HaysonVal,
HaysonXStr,
} from './core/hayson'
import { HBool } from './core/HBool'
import { CoordObj, HCoord } from './core/HCoord'
import { DateObj, HDate } from './core/HDate'
import { HDateTime } from './core/HDateTime'
import { DictStore, HDict } from './core/HDict'
import { HGrid } from './core/HGrid'
import { HList } from './core/HList'
import { HMarker } from './core/HMarker'
import { HNa } from './core/HNa'
import { HNamespace } from './core/HNamespace'
import { HNum } from './core/HNum'
import { HRef } from './core/HRef'
import { HRemove } from './core/HRemove'
import { HStr } from './core/HStr'
import { HSymbol } from './core/HSymbol'
import { HTime, TimeObj } from './core/HTime'
import { HUri } from './core/HUri'
import { HVal, OptionalHVal } from './core/HVal'
import { HXStr } from './core/HXStr'
import { TrioReader } from './core/TrioReader'
import { ZincReader } from './core/ZincReader'
import { HUnit } from './core/HUnit'
import { isValidTagName, makeValue, toTagName } from './core/util'
/**
* Core Haystack utility shorthand functions.
*
* These functions are a facade around the underlying APIs
* in order to provide a easier to use API for creating haystack value types
* and reading data.
*
* @module
*/
export function bool(bool: boolean | HBool): HBool {
return HBool.make(bool)
}
export const TRUE = HBool.make(true)
export const FALSE = HBool.make(false)
export function coord(value: CoordObj | HaysonCoord | HCoord): HCoord {
return HCoord.make(value)
}
export function date(
value: string | Date | DateObj | HaysonDate | HDate
): HDate {
return HDate.make(value)
}
export function dateTime(
value: string | Date | HaysonDateTime | HDateTime
): HDateTime {
return HDateTime.make(value)
}
export function symbol(value: string | HaysonSymbol | HSymbol): HSymbol {
return HSymbol.make(value)
}
export function dict(
values?:
| { [prop: string]: OptionalHVal | HaysonVal }
| OptionalHVal
| DictStore
): HDict {
return HDict.make(values)
}
export function grid(
values: HaysonGrid | HVal | (HaysonDict | HDict)[]
): HGrid {
return HGrid.make(values)
}
export function list<Value extends OptionalHVal = OptionalHVal>(
...values: (Value | HaysonVal | (Value | HaysonVal)[] | HaysonList)[]
): HList<Value> {
return HList.make(...values)
}
export const MARKER = HMarker.make()
export const NA = HNa.make()
export const REMOVE = HRemove.make()
export function num(value: number | HaysonNum | HNum, unit?: string): HNum {
return HNum.make(value, unit)
}
export function ref(
value: string | HaysonRef | HRef | HStr,
displayName?: string
): HRef {
return HRef.make(value, displayName)
}
export function str(value: string | HStr): HStr {
return HStr.make(value)
}
export function time(
value: string | Date | TimeObj | HaysonTime | HTime
): HTime {
return HTime.make(value)
}
export function uri(value: string | HaysonUri | HUri): HUri {
return HUri.make(value)
}
export function xstr(type: string | HaysonXStr | HXStr, value?: string): HXStr {
return HXStr.make(type, value)
}
export function zinc(input: string): OptionalHVal | undefined {
return ZincReader.readValue(input)
}
export function trio(input: string): HGrid | undefined {
return TrioReader.readGrid(input)
}
export function make(value: HaysonVal | HVal | undefined): OptionalHVal {
return makeValue(value)
}
export function tagName(name: string): string {
return toTagName(name)
}
export function isTagName(name: string): boolean {
return isValidTagName(name)
}
export function defs(grid: HGrid): HNamespace {
return new HNamespace(grid)
}
export function unit(id: string): HUnit | undefined {
return HUnit.get(id)
}