convoker 0.2.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/color.d.ts +153 -200
- package/dist/color.js +142 -48
- package/dist/command.d.ts +218 -535
- package/dist/command.js +516 -404
- package/dist/error.d.ts +107 -844
- package/dist/error.js +100 -10
- package/dist/index.d.ts +6 -1204
- package/dist/index.js +6 -13
- package/dist/input.d.ts +182 -252
- package/dist/input.js +185 -10
- package/dist/log.d.ts +61 -0
- package/dist/log.js +216 -0
- package/dist/{prompt.d.ts → prompt/index.d.ts} +193 -258
- package/dist/prompt/index.js +273 -0
- package/dist/prompt/raw.js +105 -9
- package/dist/standard-schema.d.ts +62 -0
- package/dist/standard-schema.js +16 -0
- package/dist/utils.d.ts +30 -0
- package/dist/utils.js +56 -0
- package/package.json +4 -5
- package/dist/chunks/__vite-browser-external-DQYBmsno.js +0 -80
- package/dist/chunks/color-CiruG_zQ.js +0 -153
- package/dist/chunks/error-CBR2veuf.js +0 -95
- package/dist/chunks/index-D7JQKzRX.js +0 -198
- package/dist/chunks/input-BfYvlWdG.js +0 -138
- package/dist/chunks/standard-schema-CFxVDMhv.js +0 -12
- package/dist/chunks/utils-DdmSEjLc.js +0 -22
- package/dist/prompt.js +0 -17
- package/dist/raw.d.ts +0 -38
package/dist/color.d.ts
CHANGED
|
@@ -1,200 +1,153 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export declare
|
|
12
|
-
|
|
13
|
-
export declare const
|
|
14
|
-
|
|
15
|
-
export declare const
|
|
16
|
-
|
|
17
|
-
export declare const
|
|
18
|
-
|
|
19
|
-
export declare const
|
|
20
|
-
|
|
21
|
-
export declare const
|
|
22
|
-
|
|
23
|
-
export declare const
|
|
24
|
-
|
|
25
|
-
export declare const
|
|
26
|
-
|
|
27
|
-
export declare const
|
|
28
|
-
|
|
29
|
-
export declare const
|
|
30
|
-
|
|
31
|
-
export declare const
|
|
32
|
-
|
|
33
|
-
export declare const
|
|
34
|
-
|
|
35
|
-
export declare const
|
|
36
|
-
|
|
37
|
-
export declare const
|
|
38
|
-
|
|
39
|
-
export declare const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
export declare
|
|
48
|
-
|
|
49
|
-
export declare const
|
|
50
|
-
|
|
51
|
-
export declare const
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
*
|
|
55
|
-
*/
|
|
56
|
-
export
|
|
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
|
-
success: string;
|
|
155
|
-
/**
|
|
156
|
-
* Error message symbol.
|
|
157
|
-
*/
|
|
158
|
-
error: string;
|
|
159
|
-
/**
|
|
160
|
-
* Warning message symbol.
|
|
161
|
-
*/
|
|
162
|
-
warning: string;
|
|
163
|
-
/**
|
|
164
|
-
* Information message symbol.
|
|
165
|
-
*/
|
|
166
|
-
info?: string;
|
|
167
|
-
};
|
|
168
|
-
/**
|
|
169
|
-
* Optional styles.
|
|
170
|
-
*/
|
|
171
|
-
styles?: {
|
|
172
|
-
/**
|
|
173
|
-
* Wraps a string in a bold ANSI code.
|
|
174
|
-
* @param a The string to wrap.
|
|
175
|
-
*/
|
|
176
|
-
bold?(a: string): string;
|
|
177
|
-
/**
|
|
178
|
-
* Wraps a string in an italic ANSI code.
|
|
179
|
-
* @param a The string to wrap.
|
|
180
|
-
*/
|
|
181
|
-
italic?(a: string): string;
|
|
182
|
-
/**
|
|
183
|
-
* Wraps a string in an underline ANSI code.
|
|
184
|
-
* @param a The string to wrap.
|
|
185
|
-
*/
|
|
186
|
-
underline?(a: string): string;
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
export declare const underline: (input: any) => string;
|
|
191
|
-
|
|
192
|
-
export declare const white: (input: any) => string;
|
|
193
|
-
|
|
194
|
-
export declare const whiteBright: (input: any) => string;
|
|
195
|
-
|
|
196
|
-
export declare const yellow: (input: any) => string;
|
|
197
|
-
|
|
198
|
-
export declare const yellowBright: (input: any) => string;
|
|
199
|
-
|
|
200
|
-
export { }
|
|
1
|
+
/**
|
|
2
|
+
* If the runtime supports color.
|
|
3
|
+
*/
|
|
4
|
+
export declare const supportsColor: boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Creates a function that wraps a string in ANSI codes.
|
|
7
|
+
* @param open The opening ANSI code.
|
|
8
|
+
* @param close The closing ANSI code.
|
|
9
|
+
* @returns A function that wraps the string in ANSI codes.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createAnsiColor(open: number, close: number): (input: any) => string;
|
|
12
|
+
export declare const reset: (input: any) => string;
|
|
13
|
+
export declare const bold: (input: any) => string;
|
|
14
|
+
export declare const dim: (input: any) => string;
|
|
15
|
+
export declare const italic: (input: any) => string;
|
|
16
|
+
export declare const underline: (input: any) => string;
|
|
17
|
+
export declare const overline: (input: any) => string;
|
|
18
|
+
export declare const inverse: (input: any) => string;
|
|
19
|
+
export declare const hidden: (input: any) => string;
|
|
20
|
+
export declare const strikethrough: (input: any) => string;
|
|
21
|
+
export declare const black: (input: any) => string;
|
|
22
|
+
export declare const red: (input: any) => string;
|
|
23
|
+
export declare const green: (input: any) => string;
|
|
24
|
+
export declare const yellow: (input: any) => string;
|
|
25
|
+
export declare const blue: (input: any) => string;
|
|
26
|
+
export declare const magenta: (input: any) => string;
|
|
27
|
+
export declare const cyan: (input: any) => string;
|
|
28
|
+
export declare const white: (input: any) => string;
|
|
29
|
+
export declare const gray: (input: any) => string;
|
|
30
|
+
export declare const bgBlack: (input: any) => string;
|
|
31
|
+
export declare const bgRed: (input: any) => string;
|
|
32
|
+
export declare const bgGreen: (input: any) => string;
|
|
33
|
+
export declare const bgYellow: (input: any) => string;
|
|
34
|
+
export declare const bgBlue: (input: any) => string;
|
|
35
|
+
export declare const bgMagenta: (input: any) => string;
|
|
36
|
+
export declare const bgCyan: (input: any) => string;
|
|
37
|
+
export declare const bgWhite: (input: any) => string;
|
|
38
|
+
export declare const bgGray: (input: any) => string;
|
|
39
|
+
export declare const redBright: (input: any) => string;
|
|
40
|
+
export declare const greenBright: (input: any) => string;
|
|
41
|
+
export declare const yellowBright: (input: any) => string;
|
|
42
|
+
export declare const blueBright: (input: any) => string;
|
|
43
|
+
export declare const magentaBright: (input: any) => string;
|
|
44
|
+
export declare const cyanBright: (input: any) => string;
|
|
45
|
+
export declare const whiteBright: (input: any) => string;
|
|
46
|
+
export declare const bgRedBright: (input: any) => string;
|
|
47
|
+
export declare const bgGreenBright: (input: any) => string;
|
|
48
|
+
export declare const bgYellowBright: (input: any) => string;
|
|
49
|
+
export declare const bgBlueBright: (input: any) => string;
|
|
50
|
+
export declare const bgMagentaBright: (input: any) => string;
|
|
51
|
+
export declare const bgCyanBright: (input: any) => string;
|
|
52
|
+
export declare const bgWhiteBright: (input: any) => string;
|
|
53
|
+
/**
|
|
54
|
+
* A theme.
|
|
55
|
+
*/
|
|
56
|
+
export interface Theme {
|
|
57
|
+
/**
|
|
58
|
+
* Wraps a string in a background ANSI code.
|
|
59
|
+
* @param a The string to wrap.
|
|
60
|
+
*/
|
|
61
|
+
background?(a: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Wraps a string in a foreground ANSI code.
|
|
64
|
+
* @param a The string to wrap.
|
|
65
|
+
*/
|
|
66
|
+
foreground?(a: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* Wraps a string in a primary ANSI code.
|
|
69
|
+
* @param a The string to wrap.
|
|
70
|
+
*/
|
|
71
|
+
primary(a: string): string;
|
|
72
|
+
/**
|
|
73
|
+
* Wraps a string in a secondary ANSI code.
|
|
74
|
+
* @param a The string to wrap.
|
|
75
|
+
*/
|
|
76
|
+
secondary(a: string): string;
|
|
77
|
+
/**
|
|
78
|
+
* Wraps a string in a accent ANSI code.
|
|
79
|
+
* @param a The string to wrap.
|
|
80
|
+
*/
|
|
81
|
+
accent?(a: string): string;
|
|
82
|
+
/**
|
|
83
|
+
* Wraps a string in a success ANSI code.
|
|
84
|
+
* @param a The string to wrap.
|
|
85
|
+
*/
|
|
86
|
+
success(a: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* Wraps a string in a warning ANSI code.
|
|
89
|
+
* @param a The string to wrap.
|
|
90
|
+
*/
|
|
91
|
+
warning(a: string): string;
|
|
92
|
+
/**
|
|
93
|
+
* Wraps a string in a error ANSI code.
|
|
94
|
+
* @param a The string to wrap.
|
|
95
|
+
*/
|
|
96
|
+
error(a: string): string;
|
|
97
|
+
/**
|
|
98
|
+
* Wraps a string in a info ANSI code.
|
|
99
|
+
* @param a The string to wrap.
|
|
100
|
+
*/
|
|
101
|
+
info?(a: string): string;
|
|
102
|
+
/**
|
|
103
|
+
* Set of symbols for logging.
|
|
104
|
+
*/
|
|
105
|
+
symbols?: {
|
|
106
|
+
/**
|
|
107
|
+
* Success message symbol.
|
|
108
|
+
*/
|
|
109
|
+
success: string;
|
|
110
|
+
/**
|
|
111
|
+
* Error message symbol.
|
|
112
|
+
*/
|
|
113
|
+
error: string;
|
|
114
|
+
/**
|
|
115
|
+
* Warning message symbol.
|
|
116
|
+
*/
|
|
117
|
+
warning: string;
|
|
118
|
+
/**
|
|
119
|
+
* Information message symbol.
|
|
120
|
+
*/
|
|
121
|
+
info?: string;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Optional styles.
|
|
125
|
+
*/
|
|
126
|
+
styles?: {
|
|
127
|
+
/**
|
|
128
|
+
* Wraps a string in a bold ANSI code.
|
|
129
|
+
* @param a The string to wrap.
|
|
130
|
+
*/
|
|
131
|
+
bold?(a: string): string;
|
|
132
|
+
/**
|
|
133
|
+
* Wraps a string in an italic ANSI code.
|
|
134
|
+
* @param a The string to wrap.
|
|
135
|
+
*/
|
|
136
|
+
italic?(a: string): string;
|
|
137
|
+
/**
|
|
138
|
+
* Wraps a string in an underline ANSI code.
|
|
139
|
+
* @param a The string to wrap.
|
|
140
|
+
*/
|
|
141
|
+
underline?(a: string): string;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The default theme.
|
|
146
|
+
*/
|
|
147
|
+
export declare const DEFAULT_THEME: Theme;
|
|
148
|
+
/**
|
|
149
|
+
* Defines a theme.
|
|
150
|
+
* @param theme The (partial) theme.
|
|
151
|
+
* @returns The theme, merged with the default theme.
|
|
152
|
+
*/
|
|
153
|
+
export declare function defineTheme(theme: Partial<Theme>): Theme;
|
package/dist/color.js
CHANGED
|
@@ -1,49 +1,143 @@
|
|
|
1
|
-
import "./
|
|
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
|
-
|
|
1
|
+
import { merge } from "./utils";
|
|
2
|
+
/**
|
|
3
|
+
* Detects if the runtime supports colored output.
|
|
4
|
+
* @returns If the runtime supports colored output.
|
|
5
|
+
*/
|
|
6
|
+
function detectColorSupport() {
|
|
7
|
+
// If running in a browser-like environment, return false
|
|
8
|
+
if (typeof window !== "undefined" && typeof window.document !== "undefined") {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
const env = typeof process !== "undefined" ? (process.env ?? {}) : {};
|
|
12
|
+
// Force-disable colors if NO_COLOR is set
|
|
13
|
+
if ("NO_COLOR" in env)
|
|
14
|
+
return false;
|
|
15
|
+
// Force-enable if FORCE_COLOR is set
|
|
16
|
+
if ("FORCE_COLOR" in env)
|
|
17
|
+
return true;
|
|
18
|
+
// Check for CI systems that support color
|
|
19
|
+
if ("CI" in env) {
|
|
20
|
+
if ([
|
|
21
|
+
"TRAVIS",
|
|
22
|
+
"CIRCLECI",
|
|
23
|
+
"APPVEYOR",
|
|
24
|
+
"GITLAB_CI",
|
|
25
|
+
"GITHUB_ACTIONS",
|
|
26
|
+
"BUILDKITE",
|
|
27
|
+
"DRONE",
|
|
28
|
+
].some((k) => k in env) ||
|
|
29
|
+
env.CI_NAME === "codeship") {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
// Deno detection
|
|
35
|
+
if (typeof Deno !== "undefined" && Deno.noColor !== undefined) {
|
|
36
|
+
return !Deno.noColor;
|
|
37
|
+
}
|
|
38
|
+
// Node.js or Bun detection
|
|
39
|
+
if (typeof process !== "undefined" && process.stdout) {
|
|
40
|
+
const term = env.TERM || "";
|
|
41
|
+
const colorterm = env.COLORTERM || "";
|
|
42
|
+
if (colorterm.length > 0)
|
|
43
|
+
return true;
|
|
44
|
+
if (term === "dumb")
|
|
45
|
+
return false;
|
|
46
|
+
return /(color|ansi|cygwin|xterm|vt100)/i.test(term);
|
|
47
|
+
}
|
|
48
|
+
// Other runtimes/Node without TTY
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* If the runtime supports color.
|
|
53
|
+
*/
|
|
54
|
+
export const supportsColor = detectColorSupport();
|
|
55
|
+
/**
|
|
56
|
+
* Creates a function that wraps a string in ANSI codes.
|
|
57
|
+
* @param open The opening ANSI code.
|
|
58
|
+
* @param close The closing ANSI code.
|
|
59
|
+
* @returns A function that wraps the string in ANSI codes.
|
|
60
|
+
*/
|
|
61
|
+
export function createAnsiColor(open, close) {
|
|
62
|
+
const openCode = `\u001b[${open}m`;
|
|
63
|
+
const closeCode = `\u001b[${close}m`;
|
|
64
|
+
if (!supportsColor)
|
|
65
|
+
return (input) => input + "";
|
|
66
|
+
return (input) => {
|
|
67
|
+
if (!input)
|
|
68
|
+
return openCode + closeCode;
|
|
69
|
+
const str = input + "";
|
|
70
|
+
// replace any existing close codes with reopen
|
|
71
|
+
const replaced = str.replace(new RegExp(`\u001b\\[${close}m`, "g"), closeCode + openCode);
|
|
72
|
+
return openCode + replaced + closeCode;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export const reset = createAnsiColor(0, 0);
|
|
76
|
+
export const bold = createAnsiColor(1, 22);
|
|
77
|
+
export const dim = createAnsiColor(2, 22);
|
|
78
|
+
export const italic = createAnsiColor(3, 23);
|
|
79
|
+
export const underline = createAnsiColor(4, 24);
|
|
80
|
+
export const overline = createAnsiColor(53, 55);
|
|
81
|
+
export const inverse = createAnsiColor(7, 27);
|
|
82
|
+
export const hidden = createAnsiColor(8, 28);
|
|
83
|
+
export const strikethrough = createAnsiColor(9, 29);
|
|
84
|
+
export const black = createAnsiColor(30, 39);
|
|
85
|
+
export const red = createAnsiColor(31, 39);
|
|
86
|
+
export const green = createAnsiColor(32, 39);
|
|
87
|
+
export const yellow = createAnsiColor(33, 39);
|
|
88
|
+
export const blue = createAnsiColor(34, 39);
|
|
89
|
+
export const magenta = createAnsiColor(35, 39);
|
|
90
|
+
export const cyan = createAnsiColor(36, 39);
|
|
91
|
+
export const white = createAnsiColor(37, 39);
|
|
92
|
+
export const gray = createAnsiColor(90, 39);
|
|
93
|
+
export const bgBlack = createAnsiColor(40, 49);
|
|
94
|
+
export const bgRed = createAnsiColor(41, 49);
|
|
95
|
+
export const bgGreen = createAnsiColor(42, 49);
|
|
96
|
+
export const bgYellow = createAnsiColor(43, 49);
|
|
97
|
+
export const bgBlue = createAnsiColor(44, 49);
|
|
98
|
+
export const bgMagenta = createAnsiColor(45, 49);
|
|
99
|
+
export const bgCyan = createAnsiColor(46, 49);
|
|
100
|
+
export const bgWhite = createAnsiColor(47, 49);
|
|
101
|
+
export const bgGray = createAnsiColor(100, 49);
|
|
102
|
+
export const redBright = createAnsiColor(91, 39);
|
|
103
|
+
export const greenBright = createAnsiColor(92, 39);
|
|
104
|
+
export const yellowBright = createAnsiColor(93, 39);
|
|
105
|
+
export const blueBright = createAnsiColor(94, 39);
|
|
106
|
+
export const magentaBright = createAnsiColor(95, 39);
|
|
107
|
+
export const cyanBright = createAnsiColor(96, 39);
|
|
108
|
+
export const whiteBright = createAnsiColor(97, 39);
|
|
109
|
+
export const bgRedBright = createAnsiColor(101, 49);
|
|
110
|
+
export const bgGreenBright = createAnsiColor(102, 49);
|
|
111
|
+
export const bgYellowBright = createAnsiColor(103, 49);
|
|
112
|
+
export const bgBlueBright = createAnsiColor(104, 49);
|
|
113
|
+
export const bgMagentaBright = createAnsiColor(105, 49);
|
|
114
|
+
export const bgCyanBright = createAnsiColor(106, 49);
|
|
115
|
+
export const bgWhiteBright = createAnsiColor(107, 49);
|
|
116
|
+
/**
|
|
117
|
+
* The default theme.
|
|
118
|
+
*/
|
|
119
|
+
export const DEFAULT_THEME = {
|
|
120
|
+
primary: cyan,
|
|
121
|
+
secondary: gray,
|
|
122
|
+
success: green,
|
|
123
|
+
warning: yellow,
|
|
124
|
+
error: red,
|
|
125
|
+
symbols: {
|
|
126
|
+
success: "✔",
|
|
127
|
+
error: "✖",
|
|
128
|
+
warning: "⚠",
|
|
129
|
+
},
|
|
130
|
+
styles: {
|
|
131
|
+
bold: bold,
|
|
132
|
+
italic: italic,
|
|
133
|
+
underline: underline,
|
|
134
|
+
},
|
|
49
135
|
};
|
|
136
|
+
/**
|
|
137
|
+
* Defines a theme.
|
|
138
|
+
* @param theme The (partial) theme.
|
|
139
|
+
* @returns The theme, merged with the default theme.
|
|
140
|
+
*/
|
|
141
|
+
export function defineTheme(theme) {
|
|
142
|
+
return merge(DEFAULT_THEME, theme);
|
|
143
|
+
}
|