-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
JsonLow.d.ts
125 lines (122 loc) · 4.08 KB
/
JsonLow.d.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
export declare const CodePoint: {
_0_: number,
_1_: number,
_9_: number,
_a_: number,
_f_: number,
_A_: number,
_F_: number,
_openCurly_: number,
_openSquare_: number,
_closeCurly_: number,
_closeSquare_: number,
_quoteMark_: number,
_plus_: number,
_minus_: number,
_space_: number,
_newline_: number,
_tab_: number,
_return_: number,
_backslash_: number,
_slash_: number,
_comma_: number,
_colon_: number,
_t_: number,
_n_: number,
_b_: number,
_r_: number,
_u_: number,
_dot_: number,
_e_: number,
_E_: number,
_l_: number,
_s_: number,
}
export enum JsonFeedbackType {
error = 'JsonFeedbackType.error',
}
export enum JsonErrorType {
unexpected = 'JsonErrorType.unexpected',
unexpectedEnd = 'JsonErrorType.unexpectedEnd',
}
export interface JsonErrorFeedback {
type: JsonFeedbackType.error,
message: string,
}
export interface JsonUnexpectedFeedback {
type: JsonFeedbackType.error,
errorType: JsonErrorType.unexpected,
codePoint: number,
context: string,
expected: Array<string | [startChar: string, endChar: string]>,
}
export interface JsonUnexpectedEndFeedback {
type: JsonFeedbackType.error,
errorType: JsonErrorType.unexpectedEnd,
context?: string,
expected?: Array<string | [startChar: string, endChar: string]>,
}
export type JsonStandardFeedback = JsonErrorFeedback | JsonUnexpectedFeedback;
export type JsonStandardEnd = JsonErrorFeedback | JsonUnexpectedEndFeedback;
export declare const error: (message: string) => JsonErrorFeedback
export declare const unexpected: (code: number, context: string, expected: Array<string | [startChar: string, endChar: string]>) => JsonUnexpectedFeedback
export declare const unexpectedEnd: (context?: string, expected?: Array<string | [startChar: string, endChar: string]>) => JsonUnexpectedEndFeedback
export declare const isZeroNine: (code: number) => boolean
export declare const isOneNine: (code: number) => boolean
export declare const isWhitespace: (code: number) => boolean
export interface JsonLowBaseConfig {
maxDepth: number,
}
export interface JsonLowConfig<DownstreamConfig = unknown> extends JsonLowBaseConfig {
downstream?: DownstreamConfig,
}
export interface JsonLowBaseState {
mode: string,
parents: string[],
isKey: boolean,
hexIndex: number,
}
export interface JsonLowState<DownstreamState = unknown> extends JsonLowBaseState {
downstream?: DownstreamState,
}
export interface JsonLowInitialState extends Partial<JsonLowBaseState>, Partial<JsonLowBaseConfig> {
}
export declare const JsonLow: <Feedback, End, DownstreamState = unknown, DownstreamConfig = unknown>(
next: JsonLowHandlers<Feedback, End>,
initialState?: JsonLowInitialState,
) => {
codePoint(codePoint: number): Feedback | JsonStandardFeedback | undefined,
end(): End | JsonStandardEnd | undefined,
state(): JsonLowState<DownstreamState>,
config(): JsonLowConfig<DownstreamConfig>,
}
export type JsonLowHandlers<Feedback, End, DownstreamState = unknown, DownstreamConfig = unknown> = {
openObject?: JsonLowHandler<Feedback>,
openArray?: JsonLowHandler<Feedback>,
openString?: JsonLowHandler<Feedback>,
openNumber?: JsonLowHandler<Feedback>,
openTrue?: JsonLowHandler<Feedback>,
openFalse?: JsonLowHandler<Feedback>,
openNull?: JsonLowHandler<Feedback>,
closeObject?: JsonLowHandler<Feedback>,
closeArray?: JsonLowHandler<Feedback>,
closeString?: JsonLowHandler<Feedback>,
// note: edge case with no codePoint or Feedback
closeNumber?: () => void,
closeTrue?: JsonLowHandler<Feedback>,
closeFalse?: JsonLowHandler<Feedback>,
closeNull?: JsonLowHandler<Feedback>,
openKey?: JsonLowHandler<Feedback>,
openHex?: JsonLowHandler<Feedback>,
closeKey?: JsonLowHandler<Feedback>,
closeHex?: JsonLowHandler<Feedback>,
codePoint?: JsonLowHandler<Feedback>,
escape?: JsonLowHandler<Feedback>,
whitespace?: JsonLowHandler<Feedback>,
comma?: JsonLowHandler<Feedback>,
colon?: JsonLowHandler<Feedback>,
state?: () => JsonLowState<DownstreamState>,
config?: () => JsonLowConfig<DownstreamConfig>,
end?: () => End,
}
export type JsonLowHandler<Feedback> = (codePoint: number) => Feedback