-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathJsonLow.d.ts
127 lines (124 loc) · 4.16 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
126
127
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 isError: (message: unknown) => boolean
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,
depth(): number,
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