@choiceopen/atomemo-plugin-schema 0.1.0

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.
@@ -0,0 +1,532 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/utils/toolkit.ts
4
+ function isPlainObject(value) {
5
+ if (value === null || typeof value !== "object") return false;
6
+ if (Object.prototype.toString.call(value) !== "[object Object]") return false;
7
+ const proto = Object.getPrototypeOf(value);
8
+ return proto === Object.prototype || proto === null;
9
+ }
10
+ function compact(values) {
11
+ return values.filter(Boolean);
12
+ }
13
+
14
+ //#endregion
15
+ //#region src/schemas/common.ts
16
+ /**
17
+ * I18n 词条模式
18
+ *
19
+ * NOTE: Zod 无法定义复杂的字面量模版,此处使用 `z.custom` 实现自定义验证
20
+ */
21
+ const I18nEntrySchema = z.custom((value) => {
22
+ if (!isPlainObject(value)) return false;
23
+ if (!("en_US" in value)) return false;
24
+ for (const [locale, text] of Object.entries(value)) {
25
+ if (typeof text !== "string") return false;
26
+ const parts = locale.split("_");
27
+ if (parts.length !== 2 || parts[1][0] !== parts[1][0].toUpperCase()) return false;
28
+ }
29
+ return true;
30
+ }, "Invalid I18n entry");
31
+
32
+ //#endregion
33
+ //#region src/utils/custom-json-value.ts
34
+ /**
35
+ * Custom JSON Value Schema and Type
36
+ *
37
+ * Why? Because `z.json()` is not compatible with `JSONValue` from type-fest
38
+ */
39
+ /**
40
+ * Custom JSON Value Schema
41
+ * @description Custom JSON Value Schema is a schema that allows any JSON value
42
+ */
43
+ const JsonValueSchema = z.json();
44
+
45
+ //#endregion
46
+ //#region src/schemas/property-ui.ts
47
+ const indentationSchema = z.union([
48
+ z.literal(2),
49
+ z.literal(4),
50
+ z.literal(6),
51
+ z.literal(8),
52
+ z.literal(10),
53
+ z.literal(12),
54
+ z.literal(14),
55
+ z.literal(16),
56
+ z.literal(18),
57
+ z.literal(20),
58
+ z.literal(22),
59
+ z.literal(24),
60
+ z.literal(26),
61
+ z.literal(28),
62
+ z.literal(30),
63
+ z.literal(32),
64
+ z.literal(34),
65
+ z.literal(36),
66
+ z.literal(38),
67
+ z.literal(40),
68
+ z.literal(42),
69
+ z.literal(44),
70
+ z.literal(46),
71
+ z.literal(48),
72
+ z.literal(50),
73
+ z.literal(52),
74
+ z.literal(54),
75
+ z.literal(56),
76
+ z.literal(58),
77
+ z.literal(60),
78
+ z.literal(62),
79
+ z.literal(64),
80
+ z.literal(66),
81
+ z.literal(68),
82
+ z.literal(70),
83
+ z.literal(72),
84
+ z.literal(74),
85
+ z.literal(76),
86
+ z.literal(78),
87
+ z.literal(80)
88
+ ]);
89
+ const PropertyUICommonPropsSchema = z.object({
90
+ disabled: z.boolean().optional(),
91
+ hint: I18nEntrySchema.optional(),
92
+ placeholder: I18nEntrySchema.optional(),
93
+ readonly: z.boolean().optional(),
94
+ sensitive: z.boolean().optional(),
95
+ support_expression: z.boolean().optional(),
96
+ width: z.enum([
97
+ "small",
98
+ "medium",
99
+ "full"
100
+ ]).optional(),
101
+ indentation: indentationSchema.optional(),
102
+ display_none: z.boolean().optional()
103
+ });
104
+ const PropertyUIOptionSchema = z.object({
105
+ icon: z.string().optional(),
106
+ label: I18nEntrySchema,
107
+ value: z.union([
108
+ z.string(),
109
+ z.number(),
110
+ z.boolean()
111
+ ])
112
+ });
113
+ const PropertyUIInputPropsSchema = PropertyUICommonPropsSchema.extend({ component: z.literal("input") });
114
+ const PropertyUIEncryptedInputPropsSchema = PropertyUICommonPropsSchema.extend({ component: z.literal("encrypted-input") });
115
+ const PropertyUITextareaPropsSchema = PropertyUICommonPropsSchema.extend({
116
+ component: z.literal("textarea"),
117
+ max_height: z.number().optional(),
118
+ min_height: z.number().optional()
119
+ });
120
+ const PropertyUIExpressionInputPropsSchema = PropertyUICommonPropsSchema.extend({
121
+ component: z.enum(["expression-input", "expression-textarea"]),
122
+ max_height: z.number().optional(),
123
+ min_height: z.number().optional()
124
+ });
125
+ const PropertyUINumberInputPropsSchema = PropertyUICommonPropsSchema.extend({
126
+ component: z.literal("number-input"),
127
+ step: z.number().optional(),
128
+ suffix: z.string().optional()
129
+ });
130
+ const PropertyUICodeEditorPropsSchema = PropertyUICommonPropsSchema.extend({
131
+ component: z.literal("code-editor"),
132
+ language: z.enum([
133
+ "json",
134
+ "javascript",
135
+ "python3",
136
+ "html"
137
+ ]).optional(),
138
+ line_numbers: z.boolean().optional(),
139
+ max_height: z.number().optional(),
140
+ min_height: z.number().optional()
141
+ });
142
+ const PropertyUISelectPropsBaseSchema = z.object({
143
+ clearable: z.boolean().optional(),
144
+ options: z.array(PropertyUIOptionSchema).optional(),
145
+ searchable: z.boolean().optional()
146
+ });
147
+ const PropertyUISingleSelectPropsSchema = PropertyUICommonPropsSchema.merge(PropertyUISelectPropsBaseSchema).extend({ component: z.literal("select") });
148
+ const PropertyUIRadioGroupPropsSchema = PropertyUICommonPropsSchema.merge(PropertyUISelectPropsBaseSchema).extend({ component: z.literal("radio-group") });
149
+ const PropertyUIMultiSelectPropsSchema = PropertyUICommonPropsSchema.merge(PropertyUISelectPropsBaseSchema).extend({ component: z.literal("multi-select") });
150
+ const PropertyUISwitchPropsSchema = PropertyUICommonPropsSchema.extend({ component: z.literal("switch") });
151
+ const PropertyUICheckboxPropsSchema = PropertyUICommonPropsSchema.extend({ component: z.literal("checkbox") });
152
+ const PropertyUISliderPropsSchema = PropertyUICommonPropsSchema.extend({
153
+ component: z.literal("slider"),
154
+ marks: z.record(z.number(), z.string()).optional(),
155
+ show_value: z.boolean().optional(),
156
+ step: z.number().optional()
157
+ });
158
+ const PropertyUIKeyValueEditorPropsSchema = PropertyUICommonPropsSchema.extend({
159
+ add_button_label: I18nEntrySchema.optional(),
160
+ component: z.literal("key-value-editor"),
161
+ empty_description: I18nEntrySchema.optional(),
162
+ section_header: I18nEntrySchema.optional()
163
+ });
164
+ const PropertyUITagInputPropsSchema = PropertyUICommonPropsSchema.extend({ component: z.literal("tag-input") });
165
+ const PropertyUIEmojiPickerPropsSchema = PropertyUICommonPropsSchema.extend({
166
+ component: z.literal("emoji-picker"),
167
+ size: z.enum([
168
+ "extra-small",
169
+ "small",
170
+ "medium",
171
+ "large"
172
+ ]).optional()
173
+ });
174
+ const PropertyUIColorPickerPropsSchema = PropertyUICommonPropsSchema.extend({ component: z.literal("color-picker") });
175
+ const PropertyUICredentialSelectPropsSchema = PropertyUICommonPropsSchema.extend({
176
+ clearable: z.boolean().optional(),
177
+ component: z.literal("credential-select"),
178
+ searchable: z.boolean().optional()
179
+ });
180
+ const PropertyUIJsonSchemaEditorPropsSchema = PropertyUICommonPropsSchema.extend({ component: z.literal("json-schema-editor") });
181
+ const PropertyUIConditionsEditorPropsSchema = PropertyUICommonPropsSchema.extend({ component: z.literal("conditions-editor") });
182
+ const PropertyUIArraySectionPropsSchema = PropertyUICommonPropsSchema.extend({
183
+ add_label: I18nEntrySchema.optional(),
184
+ collapsible: z.boolean().optional(),
185
+ component: z.literal("array-section"),
186
+ empty_message: I18nEntrySchema.optional(),
187
+ remove_tooltip: I18nEntrySchema.optional(),
188
+ sortable: z.boolean().optional()
189
+ });
190
+ const PropertyUICollapsiblePanelPropsSchema = PropertyUICommonPropsSchema.extend({
191
+ collapsible: z.boolean().optional(),
192
+ component: z.literal("collapsible-panel"),
193
+ default_collapsed: z.boolean().optional(),
194
+ panel_title: I18nEntrySchema.optional(),
195
+ remove_tooltip: I18nEntrySchema.optional(),
196
+ sortable: z.boolean().optional()
197
+ });
198
+ const PropertyUIPropsSchema = z.discriminatedUnion("component", [
199
+ PropertyUIInputPropsSchema,
200
+ PropertyUITextareaPropsSchema,
201
+ PropertyUIExpressionInputPropsSchema,
202
+ PropertyUINumberInputPropsSchema,
203
+ PropertyUICodeEditorPropsSchema,
204
+ PropertyUISingleSelectPropsSchema,
205
+ PropertyUIRadioGroupPropsSchema,
206
+ PropertyUIEmojiPickerPropsSchema,
207
+ PropertyUIColorPickerPropsSchema,
208
+ PropertyUIMultiSelectPropsSchema,
209
+ PropertyUISwitchPropsSchema,
210
+ PropertyUICheckboxPropsSchema,
211
+ PropertyUISliderPropsSchema,
212
+ PropertyUIKeyValueEditorPropsSchema,
213
+ PropertyUITagInputPropsSchema,
214
+ PropertyUICredentialSelectPropsSchema,
215
+ PropertyUIJsonSchemaEditorPropsSchema,
216
+ PropertyUIConditionsEditorPropsSchema,
217
+ PropertyUIArraySectionPropsSchema,
218
+ PropertyUICollapsiblePanelPropsSchema,
219
+ PropertyUIEncryptedInputPropsSchema
220
+ ]);
221
+ const PropertyUIBooleanSchema = z.discriminatedUnion("component", [PropertyUISwitchPropsSchema, PropertyUICheckboxPropsSchema]);
222
+ const PropertyUINumberSchema = z.discriminatedUnion("component", [PropertyUINumberInputPropsSchema, PropertyUISliderPropsSchema]);
223
+ const PropertyUIStringSchema = z.discriminatedUnion("component", [
224
+ PropertyUIInputPropsSchema,
225
+ PropertyUITextareaPropsSchema,
226
+ PropertyUIExpressionInputPropsSchema,
227
+ PropertyUICodeEditorPropsSchema,
228
+ PropertyUISingleSelectPropsSchema,
229
+ PropertyUICredentialSelectPropsSchema,
230
+ PropertyUIRadioGroupPropsSchema,
231
+ PropertyUIEmojiPickerPropsSchema,
232
+ PropertyUIColorPickerPropsSchema
233
+ ]);
234
+ const PropertyUIArraySchema = z.discriminatedUnion("component", [
235
+ PropertyUIMultiSelectPropsSchema,
236
+ PropertyUITagInputPropsSchema,
237
+ PropertyUIKeyValueEditorPropsSchema,
238
+ PropertyUISliderPropsSchema,
239
+ PropertyUIArraySectionPropsSchema
240
+ ]);
241
+ const PropertyUIObjectSchema = z.discriminatedUnion("component", [
242
+ PropertyUICollapsiblePanelPropsSchema,
243
+ PropertyUIJsonSchemaEditorPropsSchema,
244
+ PropertyUIConditionsEditorPropsSchema,
245
+ PropertyUICodeEditorPropsSchema
246
+ ]);
247
+ const PropertyUICredentialIdSchema = z.discriminatedUnion("component", [PropertyUICredentialSelectPropsSchema]);
248
+ const PropertyUIDiscriminatorUISchema = z.discriminatedUnion("component", [
249
+ PropertyUISwitchPropsSchema,
250
+ PropertyUISingleSelectPropsSchema,
251
+ PropertyUIRadioGroupPropsSchema
252
+ ]);
253
+ const PropertyUIDiscriminatorUnionUISchema = z.discriminatedUnion("component", [PropertyUICollapsiblePanelPropsSchema]);
254
+ const PropertyUIEncryptedStringSchema = z.discriminatedUnion("component", [PropertyUIEncryptedInputPropsSchema]);
255
+
256
+ //#endregion
257
+ //#region src/schemas/property.ts
258
+ const JsonPrimitiveSchema = z.union([
259
+ z.string(),
260
+ z.number(),
261
+ z.boolean(),
262
+ z.null()
263
+ ]);
264
+ const JsonValueSchema$1 = z.lazy(() => z.union([
265
+ JsonPrimitiveSchema,
266
+ z.array(JsonValueSchema$1),
267
+ z.record(z.string(), JsonValueSchema$1)
268
+ ]));
269
+ const FilterOperatorsSchema = z.object({
270
+ $eq: JsonValueSchema$1.optional(),
271
+ $exists: z.boolean().optional(),
272
+ $gt: JsonValueSchema$1.optional(),
273
+ $gte: JsonValueSchema$1.optional(),
274
+ $in: z.array(JsonValueSchema$1).optional(),
275
+ $lt: JsonValueSchema$1.optional(),
276
+ $lte: JsonValueSchema$1.optional(),
277
+ $mod: z.tuple([z.number(), z.number()]).optional(),
278
+ $ne: JsonValueSchema$1.optional(),
279
+ $nin: z.array(JsonValueSchema$1).optional(),
280
+ $options: z.string().optional(),
281
+ $regex: z.union([z.string(), z.instanceof(RegExp)]).optional(),
282
+ $size: z.number().optional()
283
+ });
284
+ const ConditionSchema = z.union([JsonValueSchema$1, FilterOperatorsSchema]);
285
+ const RootFilterSchema = z.object({
286
+ get $and() {
287
+ return z.array(FilterSchema).optional();
288
+ },
289
+ get $nor() {
290
+ return z.array(FilterSchema).optional();
291
+ },
292
+ get $or() {
293
+ return z.array(FilterSchema).optional();
294
+ }
295
+ });
296
+ const FilterSchema = z.union([z.record(z.string(), ConditionSchema), RootFilterSchema]);
297
+ const PropertyBaseSchema = z.object({
298
+ name: z.string().min(1, "name cannot be empty").refine((val) => {
299
+ return !/^[\s$]/.test(val);
300
+ }, {
301
+ error: "name cannot start with $ or whitespace",
302
+ abort: true
303
+ }).refine((val) => {
304
+ return ![
305
+ ".",
306
+ "[",
307
+ "]"
308
+ ].some((char) => val.includes(char));
309
+ }, {
310
+ error: "name cannot contain \".\", \"[\", or \"]\" characters",
311
+ abort: true
312
+ }),
313
+ display_name: I18nEntrySchema.optional(),
314
+ required: z.boolean().optional(),
315
+ display: z.object({
316
+ hide: FilterSchema.optional(),
317
+ show: FilterSchema.optional()
318
+ }).optional(),
319
+ ai: z.object({ llm_description: I18nEntrySchema.optional() }).optional(),
320
+ ui: PropertyUICommonPropsSchema.optional()
321
+ });
322
+ const PropertyStringSchema = PropertyBaseSchema.extend({
323
+ type: z.literal("string"),
324
+ constant: z.string().optional(),
325
+ default: z.string().optional(),
326
+ enum: z.array(z.string()).optional(),
327
+ max_length: z.number().optional(),
328
+ min_length: z.number().optional(),
329
+ ui: PropertyUIStringSchema.optional()
330
+ });
331
+ const PropertyNumberSchema = PropertyBaseSchema.extend({
332
+ type: z.union([z.literal("number"), z.literal("integer")]),
333
+ constant: z.number().optional(),
334
+ default: z.number().optional(),
335
+ enum: z.array(z.number()).optional(),
336
+ maximum: z.number().optional(),
337
+ minimum: z.number().optional(),
338
+ ui: PropertyUINumberSchema.optional()
339
+ });
340
+ const PropertyBooleanSchema = PropertyBaseSchema.extend({
341
+ type: z.literal("boolean"),
342
+ constant: z.boolean().optional(),
343
+ default: z.boolean().optional(),
344
+ enum: z.array(z.boolean()).optional(),
345
+ ui: PropertyUIBooleanSchema.optional()
346
+ });
347
+ function setDuplicatePropertyNamesCheck(schema) {
348
+ return schema.refine((properties) => {
349
+ const names = /* @__PURE__ */ new Set();
350
+ for (const prop of properties) {
351
+ if (names.has(prop.name)) return false;
352
+ names.add(prop.name);
353
+ }
354
+ return true;
355
+ }, { error: "duplicate property names are not allowed" });
356
+ }
357
+ const ArrayPropertiesSchema = z.lazy(() => z.array(PropertySchema).apply(setDuplicatePropertyNamesCheck));
358
+ const additionalPropertiesSchema = z.lazy(() => PropertySchema);
359
+ const PropertyObjectSchema = PropertyBaseSchema.extend({
360
+ type: z.literal("object"),
361
+ properties: ArrayPropertiesSchema,
362
+ additional_properties: additionalPropertiesSchema.optional(),
363
+ constant: z.record(z.string(), JsonValueSchema$1).optional(),
364
+ default: z.record(z.string(), JsonValueSchema$1).optional(),
365
+ enum: z.array(z.record(z.string(), JsonValueSchema$1)).optional(),
366
+ ui: PropertyUIObjectSchema.optional()
367
+ }).refine((v) => {
368
+ if (v.constant) return v.properties.length === 0;
369
+ return true;
370
+ }, {
371
+ error: "properties must be empty when constant is defined",
372
+ abort: true
373
+ });
374
+ const PropertyDiscriminatedUnionSchema = PropertyBaseSchema.extend({
375
+ type: z.literal("discriminated_union"),
376
+ get any_of() {
377
+ return z.array(PropertyObjectSchema).min(2, "anyOf must have at least two items");
378
+ },
379
+ discriminator: z.string().min(1, "discriminator cannot be empty"),
380
+ discriminator_ui: PropertyUIDiscriminatorUISchema.optional(),
381
+ ui: PropertyUIDiscriminatorUnionUISchema.optional()
382
+ }).refine((v) => {
383
+ const { any_of, discriminator } = v;
384
+ return any_of.every((i) => {
385
+ const discriminatorProperty = i.properties?.find((p) => p.name === discriminator);
386
+ if (!discriminatorProperty) return false;
387
+ if (!("constant" in discriminatorProperty)) return false;
388
+ if (typeof discriminatorProperty.constant !== "string" && typeof discriminatorProperty.constant !== "number" && typeof discriminatorProperty.constant !== "boolean") return false;
389
+ return true;
390
+ });
391
+ }, {
392
+ error: "Each item in anyOf must contain the discriminator field with constant string/number/boolean value",
393
+ abort: true
394
+ }).refine((v) => {
395
+ const { any_of } = v;
396
+ const allDiscriminatorProperty = compact(any_of.map((i) => {
397
+ const discriminatorProperty = i.properties?.find((p) => p.name === v.discriminator);
398
+ if (!discriminatorProperty) return null;
399
+ if (!("constant" in discriminatorProperty)) return null;
400
+ return discriminatorProperty.constant;
401
+ }));
402
+ return new Set(allDiscriminatorProperty).size === allDiscriminatorProperty.length;
403
+ }, { error: "Discriminator values must be unique across all anyOf items" });
404
+ const PropertyArraySchema = PropertyBaseSchema.extend({
405
+ type: z.literal("array"),
406
+ constant: z.array(JsonValueSchema$1).optional(),
407
+ default: z.array(JsonValueSchema$1).optional(),
408
+ enum: z.array(z.array(JsonValueSchema$1)).optional(),
409
+ get items() {
410
+ return PropertySchema;
411
+ },
412
+ max_items: z.number().optional(),
413
+ min_items: z.number().optional(),
414
+ ui: PropertyUIArraySchema.optional()
415
+ });
416
+ const PropertyCredentialIdSchema = PropertyBaseSchema.extend({
417
+ type: z.literal("credential_id"),
418
+ credential_name: z.string().min(1, "credential_name cannot be empty"),
419
+ ui: PropertyUICredentialIdSchema.optional()
420
+ });
421
+ const PropertyEncryptedStringSchema = PropertyBaseSchema.extend({
422
+ type: z.literal("encrypted_string"),
423
+ ui: PropertyUIEncryptedStringSchema.optional()
424
+ });
425
+ const PropertySchema = z.union([
426
+ PropertyStringSchema,
427
+ PropertyBooleanSchema,
428
+ PropertyNumberSchema,
429
+ PropertyArraySchema,
430
+ PropertyObjectSchema,
431
+ PropertyCredentialIdSchema,
432
+ PropertyEncryptedStringSchema,
433
+ PropertyDiscriminatedUnionSchema
434
+ ]);
435
+ const PropertiesSchema = z.array(PropertySchema).apply(setDuplicatePropertyNamesCheck);
436
+
437
+ //#endregion
438
+ //#region src/schemas/definition.ts
439
+ /**
440
+ * 基础定义模式
441
+ *
442
+ * 此为所有功能定义模式的基类,定义了通用的属性,不单独使用
443
+ */
444
+ const BaseDefinitionSchema = z.object({
445
+ name: z.string().regex(/^[a-zA-Z](?:(?![_-]{2,})[a-zA-Z0-9_-]){3,63}[a-zA-Z0-9]$/, { error: "Invalid name, should match the following rules: 1. only English letters, numbers, _ and - 2. start with English letter, end with English letter or number 3. _ and - cannot appear consecutively more than twice 4. minimum length 4, maximum length 64" }),
446
+ display_name: I18nEntrySchema,
447
+ description: I18nEntrySchema,
448
+ icon: z.string(),
449
+ parameters: PropertiesSchema,
450
+ settings: PropertiesSchema.optional()
451
+ });
452
+ const PluginDefinitionSchema = z.object({
453
+ ...BaseDefinitionSchema.omit({
454
+ parameters: true,
455
+ settings: true
456
+ }).shape,
457
+ author: z.string(),
458
+ email: z.email(),
459
+ repo: z.httpUrl().optional(),
460
+ version: z.string().optional(),
461
+ locales: z.array(z.string())
462
+ });
463
+ const CredentialDefinitionSchema = z.object({ ...BaseDefinitionSchema.omit({ settings: true }).shape });
464
+ const DataSourceDefinitionSchema = z.object({ ...BaseDefinitionSchema.shape });
465
+ const ModelDefinitionSchema = z.object({
466
+ ...BaseDefinitionSchema.omit({
467
+ parameters: true,
468
+ settings: true
469
+ }).shape,
470
+ name: z.string().regex(/^[a-zA-Z](?:(?![_-]{2,})[a-zA-Z0-9_/-]){3,63}[a-zA-Z0-9]$/, { error: "Invalid model name, should match the following rules: 1. only English letters, numbers, _ and - 2. start with English letter, end with English letter or number 3. _ and - cannot appear consecutively more than twice 4. minimum length 4, maximum length 64 5. allow '/' in the middle" }),
471
+ model_type: z.literal("llm"),
472
+ default_endpoint: z.httpUrl().optional(),
473
+ input_modalities: z.array(z.enum([
474
+ "file",
475
+ "image",
476
+ "text"
477
+ ])),
478
+ output_modalities: z.array(z.enum(["text"])),
479
+ pricing: z.object({
480
+ currency: z.string().optional(),
481
+ input: z.number().optional(),
482
+ input_cache_read: z.number().optional(),
483
+ input_cache_write: z.number().optional(),
484
+ output: z.number().optional(),
485
+ request: z.number().optional()
486
+ }).optional(),
487
+ override_parameters: z.object({
488
+ temperature: z.object({
489
+ default: z.number().optional(),
490
+ maximum: z.number().optional(),
491
+ minimum: z.number().optional()
492
+ }).optional(),
493
+ frequency_penalty: z.object({
494
+ default: z.number().optional(),
495
+ maximum: z.number().optional(),
496
+ minimum: z.number().optional()
497
+ }).optional(),
498
+ max_tokens: z.object({
499
+ default: z.number().optional(),
500
+ maximum: z.number().optional()
501
+ }).optional(),
502
+ verbosity: z.object({ default: z.enum([
503
+ "low",
504
+ "medium",
505
+ "high"
506
+ ]).optional() }).optional()
507
+ }).optional(),
508
+ unsupported_parameters: z.array(z.enum([
509
+ "endpoint",
510
+ "temperature",
511
+ "frequency_penalty",
512
+ "seed",
513
+ "max_tokens",
514
+ "json_schema",
515
+ "stream",
516
+ "stream_options",
517
+ "structured_outputs",
518
+ "parallel_tool_calls",
519
+ "verbosity"
520
+ ]))
521
+ });
522
+ const ToolDefinitionSchema = z.object({
523
+ ...BaseDefinitionSchema.shape,
524
+ invoke: z.function({
525
+ input: z.tuple([z.object({ args: z.any() })]),
526
+ output: z.promise(JsonValueSchema)
527
+ })
528
+ });
529
+
530
+ //#endregion
531
+ export { BaseDefinitionSchema, CredentialDefinitionSchema, DataSourceDefinitionSchema, I18nEntrySchema, JsonValueSchema, ModelDefinitionSchema, PluginDefinitionSchema, PropertiesSchema, PropertyUIArraySchema, PropertyUIBooleanSchema, PropertyUICommonPropsSchema, PropertyUICredentialIdSchema, PropertyUIDiscriminatorUISchema, PropertyUIDiscriminatorUnionUISchema, PropertyUIEncryptedInputPropsSchema, PropertyUIEncryptedStringSchema, PropertyUINumberSchema, PropertyUIObjectSchema, PropertyUIOptionSchema, PropertyUIPropsSchema, PropertyUIStringSchema, ToolDefinitionSchema };
532
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","names":["JsonValueSchema"],"sources":["../src/utils/toolkit.ts","../src/schemas/common.ts","../src/utils/custom-json-value.ts","../src/schemas/property-ui.ts","../src/schemas/property.ts","../src/schemas/definition.ts"],"sourcesContent":["export function isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\") return false\n if (Object.prototype.toString.call(value) !== \"[object Object]\") return false\n\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nexport function compact<T>(\n values: Array<T | null | undefined | false | 0 | \"\" | typeof Number.NaN>,\n): T[] {\n // Match common \"compact\" behavior: drop falsy values.\n // Note: `NaN` is truthy? Actually `Boolean(NaN) === false`, so it will be removed too.\n return values.filter(Boolean) as T[]\n}\n","import type { IsEqual } from \"type-fest\"\nimport { z } from \"zod\"\nimport type { I18nText } from \"../types\"\nimport { isPlainObject } from \"../utils/toolkit\"\n\n/**\n * I18n 词条模式\n *\n * NOTE: Zod 无法定义复杂的字面量模版,此处使用 `z.custom` 实现自定义验证\n */\nexport const I18nEntrySchema = z.custom<I18nText>((value) => {\n // 必须是对象字面量\n if (!isPlainObject(value)) return false\n // 必须包含 en_US 键\n if (!(\"en_US\" in value)) return false\n\n for (const [locale, text] of Object.entries(value)) {\n // 值必须是字符串\n if (typeof text !== \"string\") return false\n\n // NOTE: 支持的语言码并不严格符合标准,因为 TS 字面量模版无法描述所有可能的情况\n // 故以下仅对满足需求的子集做简单检查而不是严格的 RFC 5646 标准检查\n const parts = locale.split(\"_\")\n // 其它语言代码必须符合格式:<语言代码>_<国家或脚本代码>,且第二部份首字母必须大写\n if (parts.length !== 2 || parts[1][0] !== parts[1][0].toUpperCase()) {\n return false\n }\n }\n return true\n}, \"Invalid I18n entry\")\n{\n const _: IsEqual<z.infer<typeof I18nEntrySchema>, I18nText> = true\n}\n","/**\n * Custom JSON Value Schema and Type\n *\n * Why? Because `z.json()` is not compatible with `JSONValue` from type-fest\n */\n\nimport { z } from \"zod\"\n\n/**\n * Custom JSON Value Schema\n * @description Custom JSON Value Schema is a schema that allows any JSON value\n */\nexport const JsonValueSchema = z.json()\n\n/**\n * Custom JSON Value Type\n * @description Custom JSON Value Type is the type of the JSON value\n */\nexport type JsonValue = z.infer<typeof JsonValueSchema>\n","import type { IntRange, IsEqual } from \"type-fest\"\nimport { z } from \"zod\"\nimport type {\n PropertyUIArray,\n PropertyUIArraySectionProps,\n PropertyUIBoolean,\n PropertyUICollapsiblePanelProps,\n PropertyUIColorPickerProps,\n PropertyUICredentialId,\n PropertyUIEmojiPickerProps,\n PropertyUIEncryptedInputProps,\n PropertyUIInputProps,\n PropertyUIKeyValueEditorProps,\n PropertyUINumber,\n PropertyUIObject,\n PropertyUIOption,\n PropertyUIProps,\n PropertyUIRadioGroupProps,\n PropertyUISingleSelectProps,\n PropertyUIString,\n PropertyUISwitchProps,\n} from \"../types\"\nimport { I18nEntrySchema } from \"./common\"\n\nconst indentationSchema = z.union([\n z.literal(2),\n z.literal(4),\n z.literal(6),\n z.literal(8),\n z.literal(10),\n z.literal(12),\n z.literal(14),\n z.literal(16),\n z.literal(18),\n z.literal(20),\n z.literal(22),\n z.literal(24),\n z.literal(26),\n z.literal(28),\n z.literal(30),\n z.literal(32),\n z.literal(34),\n z.literal(36),\n z.literal(38),\n z.literal(40),\n z.literal(42),\n z.literal(44),\n z.literal(46),\n z.literal(48),\n z.literal(50),\n z.literal(52),\n z.literal(54),\n z.literal(56),\n z.literal(58),\n z.literal(60),\n z.literal(62),\n z.literal(64),\n z.literal(66),\n z.literal(68),\n z.literal(70),\n z.literal(72),\n z.literal(74),\n z.literal(76),\n z.literal(78),\n z.literal(80),\n])\n{\n const _: IsEqual<z.infer<typeof indentationSchema>, IntRange<2, 81, 2>> = true\n}\n\n// Common UI properties schema\nexport const PropertyUICommonPropsSchema = z.object({\n disabled: z.boolean().optional(),\n hint: I18nEntrySchema.optional(),\n placeholder: I18nEntrySchema.optional(),\n readonly: z.boolean().optional(),\n sensitive: z.boolean().optional(),\n support_expression: z.boolean().optional(),\n width: z.enum([\"small\", \"medium\", \"full\"]).optional(),\n indentation: indentationSchema.optional(),\n display_none: z.boolean().optional(),\n})\n\n// Option schema for select components\nexport const PropertyUIOptionSchema = z.object({\n icon: z.string().optional(),\n label: I18nEntrySchema,\n value: z.union([z.string(), z.number(), z.boolean()]),\n})\n{\n const _: IsEqual<z.infer<typeof PropertyUIOptionSchema>, PropertyUIOption> = true\n}\n\nconst PropertyUIInputPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"input\"),\n})\n{\n const _: IsEqual<z.infer<typeof PropertyUIInputPropsSchema>, PropertyUIInputProps> = true\n}\n\nexport const PropertyUIEncryptedInputPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"encrypted-input\"),\n})\n{\n const _: IsEqual<\n z.infer<typeof PropertyUIEncryptedInputPropsSchema>,\n PropertyUIEncryptedInputProps\n > = true\n}\n\n// Textarea component schema\nconst PropertyUITextareaPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"textarea\"),\n max_height: z.number().optional(),\n min_height: z.number().optional(),\n})\n\n// Expression input component schema\nconst PropertyUIExpressionInputPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.enum([\"expression-input\", \"expression-textarea\"]),\n max_height: z.number().optional(),\n min_height: z.number().optional(),\n})\n\n// Number input component schema\nconst PropertyUINumberInputPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"number-input\"),\n step: z.number().optional(),\n suffix: z.string().optional(),\n})\n\n// Code editor component schema\nconst PropertyUICodeEditorPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"code-editor\"),\n language: z.enum([\"json\", \"javascript\", \"python3\", \"html\"]).optional(),\n line_numbers: z.boolean().optional(),\n max_height: z.number().optional(),\n min_height: z.number().optional(),\n})\n\n// Select base schema\nconst PropertyUISelectPropsBaseSchema = z.object({\n clearable: z.boolean().optional(),\n options: z.array(PropertyUIOptionSchema).optional(),\n searchable: z.boolean().optional(),\n})\n\n// Single select component schema\nconst PropertyUISingleSelectPropsSchema = PropertyUICommonPropsSchema.merge(\n PropertyUISelectPropsBaseSchema,\n).extend({\n component: z.literal(\"select\"),\n})\n{\n const _: IsEqual<\n z.infer<typeof PropertyUISingleSelectPropsSchema>,\n PropertyUISingleSelectProps\n > = true\n}\n\n// Radio group component schema\nconst PropertyUIRadioGroupPropsSchema = PropertyUICommonPropsSchema.merge(\n PropertyUISelectPropsBaseSchema,\n).extend({\n component: z.literal(\"radio-group\"),\n})\n{\n const _: IsEqual<\n z.infer<typeof PropertyUIRadioGroupPropsSchema>,\n PropertyUIRadioGroupProps\n > = true\n}\n\n// Multi select component schema\nconst PropertyUIMultiSelectPropsSchema = PropertyUICommonPropsSchema.merge(\n PropertyUISelectPropsBaseSchema,\n).extend({\n component: z.literal(\"multi-select\"),\n})\n\n// Switch component schema\nconst PropertyUISwitchPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"switch\"),\n})\n{\n const _: IsEqual<z.infer<typeof PropertyUISwitchPropsSchema>, PropertyUISwitchProps> = true\n}\n\n// Checkbox component schema\nconst PropertyUICheckboxPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"checkbox\"),\n})\n\n// Slider component schema\nconst PropertyUISliderPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"slider\"),\n marks: z.record(z.number(), z.string()).optional(),\n show_value: z.boolean().optional(),\n step: z.number().optional(),\n})\n\n// Key-value editor component schema\nconst PropertyUIKeyValueEditorPropsSchema = PropertyUICommonPropsSchema.extend({\n add_button_label: I18nEntrySchema.optional(),\n component: z.literal(\"key-value-editor\"),\n empty_description: I18nEntrySchema.optional(),\n section_header: I18nEntrySchema.optional(),\n})\n{\n const _: IsEqual<\n z.infer<typeof PropertyUIKeyValueEditorPropsSchema>,\n PropertyUIKeyValueEditorProps\n > = true\n}\n\n// Tag input component schema\nconst PropertyUITagInputPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"tag-input\"),\n})\n\n// Emoji picker component schema\nconst PropertyUIEmojiPickerPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"emoji-picker\"),\n size: z.enum([\"extra-small\", \"small\", \"medium\", \"large\"]).optional(),\n})\n{\n const _: IsEqual<\n z.infer<typeof PropertyUIEmojiPickerPropsSchema>,\n PropertyUIEmojiPickerProps\n > = true\n}\n\n// Color picker component schema\nconst PropertyUIColorPickerPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"color-picker\"),\n})\n{\n const _: IsEqual<\n z.infer<typeof PropertyUIColorPickerPropsSchema>,\n PropertyUIColorPickerProps\n > = true\n}\n\n// Credential select component schema\nconst PropertyUICredentialSelectPropsSchema = PropertyUICommonPropsSchema.extend({\n clearable: z.boolean().optional(),\n component: z.literal(\"credential-select\"),\n searchable: z.boolean().optional(),\n})\n\n// JSON Schema editor component schema\nconst PropertyUIJsonSchemaEditorPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"json-schema-editor\"),\n})\n\n// Conditions editor component schema\nconst PropertyUIConditionsEditorPropsSchema = PropertyUICommonPropsSchema.extend({\n component: z.literal(\"conditions-editor\"),\n})\n\n// Array section component schema\nconst PropertyUIArraySectionPropsSchema = PropertyUICommonPropsSchema.extend({\n add_label: I18nEntrySchema.optional(),\n collapsible: z.boolean().optional(),\n component: z.literal(\"array-section\"),\n empty_message: I18nEntrySchema.optional(),\n remove_tooltip: I18nEntrySchema.optional(),\n sortable: z.boolean().optional(),\n})\n{\n const _: IsEqual<\n z.infer<typeof PropertyUIArraySectionPropsSchema>,\n PropertyUIArraySectionProps\n > = true\n}\n\n// Collapsible panel component schema\nconst PropertyUICollapsiblePanelPropsSchema = PropertyUICommonPropsSchema.extend({\n collapsible: z.boolean().optional(),\n component: z.literal(\"collapsible-panel\"),\n default_collapsed: z.boolean().optional(),\n panel_title: I18nEntrySchema.optional(),\n remove_tooltip: I18nEntrySchema.optional(),\n sortable: z.boolean().optional(),\n})\n{\n const _: IsEqual<\n z.infer<typeof PropertyUICollapsiblePanelPropsSchema>,\n PropertyUICollapsiblePanelProps\n > = true\n}\n\nexport const PropertyUIPropsSchema = z.discriminatedUnion(\"component\", [\n PropertyUIInputPropsSchema,\n PropertyUITextareaPropsSchema,\n PropertyUIExpressionInputPropsSchema,\n PropertyUINumberInputPropsSchema,\n PropertyUICodeEditorPropsSchema,\n PropertyUISingleSelectPropsSchema,\n PropertyUIRadioGroupPropsSchema,\n PropertyUIEmojiPickerPropsSchema,\n PropertyUIColorPickerPropsSchema,\n PropertyUIMultiSelectPropsSchema,\n PropertyUISwitchPropsSchema,\n PropertyUICheckboxPropsSchema,\n PropertyUISliderPropsSchema,\n PropertyUIKeyValueEditorPropsSchema,\n PropertyUITagInputPropsSchema,\n PropertyUICredentialSelectPropsSchema,\n PropertyUIJsonSchemaEditorPropsSchema,\n PropertyUIConditionsEditorPropsSchema,\n PropertyUIArraySectionPropsSchema,\n PropertyUICollapsiblePanelPropsSchema,\n PropertyUIEncryptedInputPropsSchema,\n])\n{\n const _: IsEqual<z.infer<typeof PropertyUIPropsSchema>, PropertyUIProps> = true\n}\n\nexport const PropertyUIBooleanSchema = z.discriminatedUnion(\"component\", [\n PropertyUISwitchPropsSchema,\n PropertyUICheckboxPropsSchema,\n])\n{\n const _: IsEqual<z.infer<typeof PropertyUIBooleanSchema>, PropertyUIBoolean> = true\n}\n\nexport const PropertyUINumberSchema = z.discriminatedUnion(\"component\", [\n PropertyUINumberInputPropsSchema,\n PropertyUISliderPropsSchema,\n])\n{\n const _: IsEqual<z.infer<typeof PropertyUINumberSchema>, PropertyUINumber> = true\n}\n\nexport const PropertyUIStringSchema = z.discriminatedUnion(\"component\", [\n PropertyUIInputPropsSchema,\n PropertyUITextareaPropsSchema,\n PropertyUIExpressionInputPropsSchema,\n PropertyUICodeEditorPropsSchema,\n PropertyUISingleSelectPropsSchema,\n PropertyUICredentialSelectPropsSchema,\n PropertyUIRadioGroupPropsSchema,\n PropertyUIEmojiPickerPropsSchema,\n PropertyUIColorPickerPropsSchema,\n])\n{\n const _: IsEqual<z.infer<typeof PropertyUIStringSchema>, PropertyUIString> = true\n}\n\nexport const PropertyUIArraySchema = z.discriminatedUnion(\"component\", [\n PropertyUIMultiSelectPropsSchema,\n PropertyUITagInputPropsSchema,\n PropertyUIKeyValueEditorPropsSchema,\n PropertyUISliderPropsSchema,\n PropertyUIArraySectionPropsSchema,\n])\n{\n const _: IsEqual<z.infer<typeof PropertyUIArraySchema>, PropertyUIArray> = true\n}\n\nexport const PropertyUIObjectSchema = z.discriminatedUnion(\"component\", [\n PropertyUICollapsiblePanelPropsSchema,\n PropertyUIJsonSchemaEditorPropsSchema,\n PropertyUIConditionsEditorPropsSchema,\n PropertyUICodeEditorPropsSchema,\n])\n{\n const _: IsEqual<z.infer<typeof PropertyUIObjectSchema>, PropertyUIObject> = true\n}\n\nexport const PropertyUICredentialIdSchema = z.discriminatedUnion(\"component\", [\n PropertyUICredentialSelectPropsSchema,\n])\n{\n const _: IsEqual<z.infer<typeof PropertyUICredentialIdSchema>, PropertyUICredentialId> = true\n}\n\nexport const PropertyUIDiscriminatorUISchema = z.discriminatedUnion(\"component\", [\n PropertyUISwitchPropsSchema,\n PropertyUISingleSelectPropsSchema,\n PropertyUIRadioGroupPropsSchema,\n])\n\nexport const PropertyUIDiscriminatorUnionUISchema = z.discriminatedUnion(\"component\", [\n PropertyUICollapsiblePanelPropsSchema,\n])\n\nexport const PropertyUIEncryptedStringSchema = z.discriminatedUnion(\"component\", [\n PropertyUIEncryptedInputPropsSchema,\n])\n","import type { IsEqual, JsonValue } from \"type-fest\"\nimport { z } from \"zod\"\nimport type {\n DisplayCondition,\n FilterOperators,\n Property,\n PropertyArray,\n PropertyBase,\n PropertyBoolean,\n PropertyCredentialId,\n PropertyDiscriminatedUnion,\n PropertyEncryptedString,\n PropertyNumber,\n PropertyObject,\n PropertyString,\n} from \"../types\"\nimport { compact } from \"../utils/toolkit\"\nimport { I18nEntrySchema } from \"./common\"\nimport {\n PropertyUIArraySchema,\n PropertyUIBooleanSchema,\n PropertyUICommonPropsSchema,\n PropertyUICredentialIdSchema,\n PropertyUIDiscriminatorUISchema,\n PropertyUIDiscriminatorUnionUISchema,\n PropertyUIEncryptedStringSchema,\n PropertyUINumberSchema,\n PropertyUIObjectSchema,\n PropertyUIStringSchema,\n} from \"./property-ui\"\n\nconst JsonPrimitiveSchema = z.union([z.string(), z.number(), z.boolean(), z.null()])\nconst JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([JsonPrimitiveSchema, z.array(JsonValueSchema), z.record(z.string(), JsonValueSchema)]),\n)\n\nconst FilterOperatorsSchema = z.object({\n $eq: JsonValueSchema.optional(),\n $exists: z.boolean().optional(),\n $gt: JsonValueSchema.optional(),\n $gte: JsonValueSchema.optional(),\n $in: z.array(JsonValueSchema).optional(),\n $lt: JsonValueSchema.optional(),\n $lte: JsonValueSchema.optional(),\n $mod: z.tuple([z.number(), z.number()]).optional(),\n $ne: JsonValueSchema.optional(),\n $nin: z.array(JsonValueSchema).optional(),\n $options: z.string().optional(),\n $regex: z.union([z.string(), z.instanceof(RegExp)]).optional(),\n $size: z.number().optional(),\n})\n\nconst ConditionSchema = z.union([JsonValueSchema, FilterOperatorsSchema])\n\nconst RootFilterSchema = z.object({\n get $and() {\n return z.array(FilterSchema).optional()\n },\n get $nor() {\n return z.array(FilterSchema).optional()\n },\n get $or() {\n return z.array(FilterSchema).optional()\n },\n})\n{\n const _: IsEqual<z.infer<typeof FilterOperatorsSchema>, FilterOperators> = true\n}\n\n// skip infer because of recursive structure\nconst FilterSchema: z.ZodType<DisplayCondition> = z.union([\n z.record(z.string(), ConditionSchema),\n RootFilterSchema,\n])\n\nconst PropertyBaseSchema = z.object({\n name: z\n .string()\n .min(1, \"name cannot be empty\")\n .refine(\n (val) => {\n const regexStartsWithDollarOrWhitespace = /^[\\s$]/\n return !regexStartsWithDollarOrWhitespace.test(val)\n },\n {\n error: \"name cannot start with $ or whitespace\",\n abort: true,\n },\n )\n .refine(\n (val) => {\n const forbiddenCharacters = [\".\", \"[\", \"]\"]\n return !forbiddenCharacters.some((char) => val.includes(char))\n },\n {\n error: 'name cannot contain \".\", \"[\", or \"]\" characters',\n abort: true,\n },\n ),\n\n display_name: I18nEntrySchema.optional(),\n required: z.boolean().optional(),\n display: z\n .object({\n hide: FilterSchema.optional(),\n show: FilterSchema.optional(),\n })\n .optional(),\n ai: z\n .object({\n llm_description: I18nEntrySchema.optional(),\n })\n .optional(),\n ui: PropertyUICommonPropsSchema.optional(),\n})\n{\n const _: IsEqual<z.infer<typeof PropertyBaseSchema>, PropertyBase<string>> = true\n}\n\nconst PropertyStringSchema = PropertyBaseSchema.extend({\n type: z.literal(\"string\"),\n constant: z.string().optional(),\n default: z.string().optional(),\n enum: z.array(z.string()).optional(),\n max_length: z.number().optional(),\n min_length: z.number().optional(),\n ui: PropertyUIStringSchema.optional(),\n})\n{\n const _: IsEqual<z.infer<typeof PropertyStringSchema>, PropertyString<string>> = true\n}\n\nconst PropertyNumberSchema = PropertyBaseSchema.extend({\n type: z.union([z.literal(\"number\"), z.literal(\"integer\")]),\n constant: z.number().optional(),\n default: z.number().optional(),\n enum: z.array(z.number()).optional(),\n maximum: z.number().optional(),\n minimum: z.number().optional(),\n ui: PropertyUINumberSchema.optional(),\n})\n{\n const _: IsEqual<z.infer<typeof PropertyNumberSchema>, PropertyNumber<string>> = true\n}\n\nconst PropertyBooleanSchema = PropertyBaseSchema.extend({\n type: z.literal(\"boolean\"),\n constant: z.boolean().optional(),\n default: z.boolean().optional(),\n enum: z.array(z.boolean()).optional(),\n ui: PropertyUIBooleanSchema.optional(),\n})\n{\n const _: IsEqual<z.infer<typeof PropertyBooleanSchema>, PropertyBoolean<string>> = true\n}\n\nfunction setDuplicatePropertyNamesCheck<T extends z.ZodType<Array<Property>>>(schema: T) {\n return schema.refine(\n (properties) => {\n const names = new Set<string>()\n for (const prop of properties) {\n if (names.has(prop.name)) return false\n names.add(prop.name)\n }\n return true\n },\n {\n error: \"duplicate property names are not allowed\",\n },\n )\n}\n\n// use type assertion and lazy to avoid circular reference error\nconst ArrayPropertiesSchema: z.ZodType<PropertyObject[\"properties\"]> = z.lazy(() =>\n z.array(PropertySchema).apply(setDuplicatePropertyNamesCheck),\n)\n\nconst additionalPropertiesSchema: z.ZodType<Property> = z.lazy(() => PropertySchema)\n\nconst PropertyObjectSchema = PropertyBaseSchema.extend({\n type: z.literal(\"object\"),\n properties: ArrayPropertiesSchema,\n additional_properties: additionalPropertiesSchema.optional(),\n constant: z.record(z.string(), JsonValueSchema).optional(),\n default: z.record(z.string(), JsonValueSchema).optional(),\n enum: z.array(z.record(z.string(), JsonValueSchema)).optional(),\n ui: PropertyUIObjectSchema.optional(),\n}).refine(\n (v) => {\n if (v.constant) return v.properties.length === 0\n return true\n },\n {\n error: \"properties must be empty when constant is defined\",\n abort: true,\n },\n)\n{\n type PropertyObjectInferred = z.infer<typeof PropertyObjectSchema>\n const _: IsEqual<PropertyObjectInferred, PropertyObject> = true\n}\n\nconst PropertyDiscriminatedUnionSchema = PropertyBaseSchema.extend({\n type: z.literal(\"discriminated_union\"),\n get any_of() {\n return z.array(PropertyObjectSchema).min(2, \"anyOf must have at least two items\")\n },\n discriminator: z.string().min(1, \"discriminator cannot be empty\"),\n discriminator_ui: PropertyUIDiscriminatorUISchema.optional(),\n ui: PropertyUIDiscriminatorUnionUISchema.optional(),\n})\n .refine(\n (v) => {\n const { any_of, discriminator } = v\n return any_of.every((i) => {\n const discriminatorProperty = i.properties?.find((p) => p.name === discriminator)\n if (!discriminatorProperty) return false\n if (!(\"constant\" in discriminatorProperty)) return false\n if (\n typeof discriminatorProperty.constant !== \"string\" &&\n typeof discriminatorProperty.constant !== \"number\" &&\n typeof discriminatorProperty.constant !== \"boolean\"\n ) {\n return false\n }\n return true\n })\n },\n {\n error:\n \"Each item in anyOf must contain the discriminator field with constant string/number/boolean value\",\n abort: true,\n },\n )\n .refine(\n (v) => {\n const { any_of } = v\n const allDiscriminatorProperty = compact(\n any_of.map((i) => {\n const discriminatorProperty = i.properties?.find((p) => p.name === v.discriminator)\n if (!discriminatorProperty) return null\n if (!(\"constant\" in discriminatorProperty)) return null\n return discriminatorProperty.constant\n }),\n )\n const uniqueValues = new Set(allDiscriminatorProperty)\n return uniqueValues.size === allDiscriminatorProperty.length\n },\n {\n error: \"Discriminator values must be unique across all anyOf items\",\n },\n )\n{\n const _: IsEqual<\n z.infer<typeof PropertyDiscriminatedUnionSchema>,\n PropertyDiscriminatedUnion\n > = true\n}\n\nconst PropertyArraySchema = PropertyBaseSchema.extend({\n type: z.literal(\"array\"),\n constant: z.array(JsonValueSchema).optional(),\n default: z.array(JsonValueSchema).optional(),\n enum: z.array(z.array(JsonValueSchema)).optional(),\n get items() {\n return PropertySchema\n },\n max_items: z.number().optional(),\n min_items: z.number().optional(),\n ui: PropertyUIArraySchema.optional(),\n})\n{\n const _: IsEqual<z.infer<typeof PropertyArraySchema>, PropertyArray> = true\n}\n\nconst PropertyCredentialIdSchema = PropertyBaseSchema.extend({\n type: z.literal(\"credential_id\"),\n credential_name: z.string().min(1, \"credential_name cannot be empty\"),\n ui: PropertyUICredentialIdSchema.optional(),\n})\n\n{\n const _: IsEqual<z.infer<typeof PropertyCredentialIdSchema>, PropertyCredentialId<string>> = true\n}\nconst PropertyEncryptedStringSchema = PropertyBaseSchema.extend({\n type: z.literal(\"encrypted_string\"),\n ui: PropertyUIEncryptedStringSchema.optional(),\n})\n{\n const _: IsEqual<z.infer<typeof PropertyEncryptedStringSchema>, PropertyEncryptedString> = true\n}\n\nconst PropertySchema = z.union([\n PropertyStringSchema,\n PropertyBooleanSchema,\n PropertyNumberSchema,\n PropertyArraySchema,\n PropertyObjectSchema,\n PropertyCredentialIdSchema,\n PropertyEncryptedStringSchema,\n PropertyDiscriminatedUnionSchema,\n])\n{\n const _: IsEqual<z.infer<typeof PropertySchema>, Property> = true\n}\n\nexport const PropertiesSchema = z.array(PropertySchema).apply(setDuplicatePropertyNamesCheck)\n","import type { IsEqual } from \"type-fest\"\nimport { z } from \"zod\"\nimport type {\n BaseDefinition,\n CredentialDefinition,\n ModelDefinition,\n PluginDefinition,\n ToolDefinition,\n} from \"../types\"\nimport { JsonValueSchema } from \"../utils/custom-json-value\"\nimport { I18nEntrySchema } from \"./common\"\nimport { PropertiesSchema } from \"./property\"\n\n/**\n * 基础定义模式\n *\n * 此为所有功能定义模式的基类,定义了通用的属性,不单独使用\n */\nexport const BaseDefinitionSchema = z.object({\n // 1. 只能出现英文字母(大小写不敏感)和数字以及_和-\n // 2. 开头只能是英文字母,结尾不能是_和-\n // 3. _和-不能连续出现多次\n // 4. 最小长度 4,最大长度 64\n name: z.string().regex(/^[a-zA-Z](?:(?![_-]{2,})[a-zA-Z0-9_-]){3,63}[a-zA-Z0-9]$/, {\n error:\n \"Invalid name, should match the following rules: 1. only English letters, numbers, _ and - 2. start with English letter, end with English letter or number 3. _ and - cannot appear consecutively more than twice 4. minimum length 4, maximum length 64\",\n }),\n display_name: I18nEntrySchema,\n description: I18nEntrySchema,\n icon: z.string(),\n parameters: PropertiesSchema,\n settings: PropertiesSchema.optional(),\n})\n{\n const _: IsEqual<z.infer<typeof BaseDefinitionSchema>, BaseDefinition> = true\n}\n\nexport const PluginDefinitionSchema = z.object({\n ...BaseDefinitionSchema.omit({ parameters: true, settings: true }).shape,\n author: z.string(),\n email: z.email(),\n repo: z.httpUrl().optional(),\n version: z.string().optional(),\n locales: z.array(z.string()),\n})\n{\n const _: IsEqual<\n z.infer<typeof PluginDefinitionSchema>,\n Omit<PluginDefinition<string[], unknown>, \"transporterOptions\"> // not necessary to verify transpoterOptions\n > = true\n}\n\nexport const CredentialDefinitionSchema = z.object({\n ...BaseDefinitionSchema.omit({ settings: true }).shape,\n})\n{\n const _: IsEqual<z.infer<typeof CredentialDefinitionSchema>, CredentialDefinition> = true\n}\n\nexport const DataSourceDefinitionSchema = z.object({\n ...BaseDefinitionSchema.shape,\n})\n\nexport type DataSourceDefinition = z.infer<typeof DataSourceDefinitionSchema>\n\nexport const ModelDefinitionSchema = z.object({\n ...BaseDefinitionSchema.omit({ parameters: true, settings: true }).shape,\n name: z.string().regex(/^[a-zA-Z](?:(?![_-]{2,})[a-zA-Z0-9_/-]){3,63}[a-zA-Z0-9]$/, {\n error:\n \"Invalid model name, should match the following rules: 1. only English letters, numbers, _ and - 2. start with English letter, end with English letter or number 3. _ and - cannot appear consecutively more than twice 4. minimum length 4, maximum length 64 5. allow '/' in the middle\",\n }),\n model_type: z.literal(\"llm\"),\n default_endpoint: z.httpUrl().optional(),\n input_modalities: z.array(z.enum([\"file\", \"image\", \"text\"])),\n output_modalities: z.array(z.enum([\"text\"])),\n pricing: z\n .object({\n currency: z.string().optional(),\n input: z.number().optional(),\n input_cache_read: z.number().optional(),\n input_cache_write: z.number().optional(),\n output: z.number().optional(),\n request: z.number().optional(),\n })\n .optional(),\n override_parameters: z\n .object({\n temperature: z\n .object({\n default: z.number().optional(),\n maximum: z.number().optional(),\n minimum: z.number().optional(),\n })\n .optional(),\n frequency_penalty: z\n .object({\n default: z.number().optional(),\n maximum: z.number().optional(),\n minimum: z.number().optional(),\n })\n .optional(),\n max_tokens: z\n .object({\n default: z.number().optional(),\n maximum: z.number().optional(),\n })\n .optional(),\n verbosity: z\n .object({\n default: z.enum([\"low\", \"medium\", \"high\"]).optional(),\n })\n .optional(),\n })\n .optional(),\n unsupported_parameters: z.array(\n z.enum([\n \"endpoint\",\n \"temperature\",\n // \"top_p\",\n // \"top_k\",\n \"frequency_penalty\",\n // \"presence_penalty\",\n // \"repetition_penalty\",\n // \"min_p\",\n // \"top_a\",\n \"seed\",\n \"max_tokens\",\n // \"logit_bias\",\n // \"logprobs\",\n // \"top_logprobs\",\n // \"response_format\",\n // \"json_response\",\n \"json_schema\",\n \"stream\",\n \"stream_options\",\n \"structured_outputs\",\n // \"stop\",\n // \"tools\",\n // \"tool_choice\",\n \"parallel_tool_calls\",\n \"verbosity\",\n ]),\n ),\n})\n{\n const _: IsEqual<z.infer<typeof ModelDefinitionSchema>, ModelDefinition> = true\n}\n\nexport const ToolDefinitionSchema = z.object({\n ...BaseDefinitionSchema.shape,\n invoke: z.function({\n input: z.tuple([z.object({ args: z.any() })]),\n output: z.promise(JsonValueSchema),\n }),\n})\n{\n const _: IsEqual<z.infer<typeof ToolDefinitionSchema>, ToolDefinition> = true\n}\n"],"mappings":";;;AAAA,SAAgB,cAAc,OAAkD;AAC9E,KAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AACxD,KAAI,OAAO,UAAU,SAAS,KAAK,MAAM,KAAK,kBAAmB,QAAO;CAExE,MAAM,QAAQ,OAAO,eAAe,MAAM;AAC1C,QAAO,UAAU,OAAO,aAAa,UAAU;;AAGjD,SAAgB,QACd,QACK;AAGL,QAAO,OAAO,OAAO,QAAQ;;;;;;;;;;ACH/B,MAAa,kBAAkB,EAAE,QAAkB,UAAU;AAE3D,KAAI,CAAC,cAAc,MAAM,CAAE,QAAO;AAElC,KAAI,EAAE,WAAW,OAAQ,QAAO;AAEhC,MAAK,MAAM,CAAC,QAAQ,SAAS,OAAO,QAAQ,MAAM,EAAE;AAElD,MAAI,OAAO,SAAS,SAAU,QAAO;EAIrC,MAAM,QAAQ,OAAO,MAAM,IAAI;AAE/B,MAAI,MAAM,WAAW,KAAK,MAAM,GAAG,OAAO,MAAM,GAAG,GAAG,aAAa,CACjE,QAAO;;AAGX,QAAO;GACN,qBAAqB;;;;;;;;;;;;;ACjBxB,MAAa,kBAAkB,EAAE,MAAM;;;;ACYvC,MAAM,oBAAoB,EAAE,MAAM;CAChC,EAAE,QAAQ,EAAE;CACZ,EAAE,QAAQ,EAAE;CACZ,EAAE,QAAQ,EAAE;CACZ,EAAE,QAAQ,EAAE;CACZ,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACb,EAAE,QAAQ,GAAG;CACd,CAAC;AAMF,MAAa,8BAA8B,EAAE,OAAO;CAClD,UAAU,EAAE,SAAS,CAAC,UAAU;CAChC,MAAM,gBAAgB,UAAU;CAChC,aAAa,gBAAgB,UAAU;CACvC,UAAU,EAAE,SAAS,CAAC,UAAU;CAChC,WAAW,EAAE,SAAS,CAAC,UAAU;CACjC,oBAAoB,EAAE,SAAS,CAAC,UAAU;CAC1C,OAAO,EAAE,KAAK;EAAC;EAAS;EAAU;EAAO,CAAC,CAAC,UAAU;CACrD,aAAa,kBAAkB,UAAU;CACzC,cAAc,EAAE,SAAS,CAAC,UAAU;CACrC,CAAC;AAGF,MAAa,yBAAyB,EAAE,OAAO;CAC7C,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC3B,OAAO;CACP,OAAO,EAAE,MAAM;EAAC,EAAE,QAAQ;EAAE,EAAE,QAAQ;EAAE,EAAE,SAAS;EAAC,CAAC;CACtD,CAAC;AAKF,MAAM,6BAA6B,4BAA4B,OAAO,EACpE,WAAW,EAAE,QAAQ,QAAQ,EAC9B,CAAC;AAKF,MAAa,sCAAsC,4BAA4B,OAAO,EACpF,WAAW,EAAE,QAAQ,kBAAkB,EACxC,CAAC;AASF,MAAM,gCAAgC,4BAA4B,OAAO;CACvE,WAAW,EAAE,QAAQ,WAAW;CAChC,YAAY,EAAE,QAAQ,CAAC,UAAU;CACjC,YAAY,EAAE,QAAQ,CAAC,UAAU;CAClC,CAAC;AAGF,MAAM,uCAAuC,4BAA4B,OAAO;CAC9E,WAAW,EAAE,KAAK,CAAC,oBAAoB,sBAAsB,CAAC;CAC9D,YAAY,EAAE,QAAQ,CAAC,UAAU;CACjC,YAAY,EAAE,QAAQ,CAAC,UAAU;CAClC,CAAC;AAGF,MAAM,mCAAmC,4BAA4B,OAAO;CAC1E,WAAW,EAAE,QAAQ,eAAe;CACpC,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC3B,QAAQ,EAAE,QAAQ,CAAC,UAAU;CAC9B,CAAC;AAGF,MAAM,kCAAkC,4BAA4B,OAAO;CACzE,WAAW,EAAE,QAAQ,cAAc;CACnC,UAAU,EAAE,KAAK;EAAC;EAAQ;EAAc;EAAW;EAAO,CAAC,CAAC,UAAU;CACtE,cAAc,EAAE,SAAS,CAAC,UAAU;CACpC,YAAY,EAAE,QAAQ,CAAC,UAAU;CACjC,YAAY,EAAE,QAAQ,CAAC,UAAU;CAClC,CAAC;AAGF,MAAM,kCAAkC,EAAE,OAAO;CAC/C,WAAW,EAAE,SAAS,CAAC,UAAU;CACjC,SAAS,EAAE,MAAM,uBAAuB,CAAC,UAAU;CACnD,YAAY,EAAE,SAAS,CAAC,UAAU;CACnC,CAAC;AAGF,MAAM,oCAAoC,4BAA4B,MACpE,gCACD,CAAC,OAAO,EACP,WAAW,EAAE,QAAQ,SAAS,EAC/B,CAAC;AASF,MAAM,kCAAkC,4BAA4B,MAClE,gCACD,CAAC,OAAO,EACP,WAAW,EAAE,QAAQ,cAAc,EACpC,CAAC;AASF,MAAM,mCAAmC,4BAA4B,MACnE,gCACD,CAAC,OAAO,EACP,WAAW,EAAE,QAAQ,eAAe,EACrC,CAAC;AAGF,MAAM,8BAA8B,4BAA4B,OAAO,EACrE,WAAW,EAAE,QAAQ,SAAS,EAC/B,CAAC;AAMF,MAAM,gCAAgC,4BAA4B,OAAO,EACvE,WAAW,EAAE,QAAQ,WAAW,EACjC,CAAC;AAGF,MAAM,8BAA8B,4BAA4B,OAAO;CACrE,WAAW,EAAE,QAAQ,SAAS;CAC9B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,UAAU;CAClD,YAAY,EAAE,SAAS,CAAC,UAAU;CAClC,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC5B,CAAC;AAGF,MAAM,sCAAsC,4BAA4B,OAAO;CAC7E,kBAAkB,gBAAgB,UAAU;CAC5C,WAAW,EAAE,QAAQ,mBAAmB;CACxC,mBAAmB,gBAAgB,UAAU;CAC7C,gBAAgB,gBAAgB,UAAU;CAC3C,CAAC;AASF,MAAM,gCAAgC,4BAA4B,OAAO,EACvE,WAAW,EAAE,QAAQ,YAAY,EAClC,CAAC;AAGF,MAAM,mCAAmC,4BAA4B,OAAO;CAC1E,WAAW,EAAE,QAAQ,eAAe;CACpC,MAAM,EAAE,KAAK;EAAC;EAAe;EAAS;EAAU;EAAQ,CAAC,CAAC,UAAU;CACrE,CAAC;AASF,MAAM,mCAAmC,4BAA4B,OAAO,EAC1E,WAAW,EAAE,QAAQ,eAAe,EACrC,CAAC;AASF,MAAM,wCAAwC,4BAA4B,OAAO;CAC/E,WAAW,EAAE,SAAS,CAAC,UAAU;CACjC,WAAW,EAAE,QAAQ,oBAAoB;CACzC,YAAY,EAAE,SAAS,CAAC,UAAU;CACnC,CAAC;AAGF,MAAM,wCAAwC,4BAA4B,OAAO,EAC/E,WAAW,EAAE,QAAQ,qBAAqB,EAC3C,CAAC;AAGF,MAAM,wCAAwC,4BAA4B,OAAO,EAC/E,WAAW,EAAE,QAAQ,oBAAoB,EAC1C,CAAC;AAGF,MAAM,oCAAoC,4BAA4B,OAAO;CAC3E,WAAW,gBAAgB,UAAU;CACrC,aAAa,EAAE,SAAS,CAAC,UAAU;CACnC,WAAW,EAAE,QAAQ,gBAAgB;CACrC,eAAe,gBAAgB,UAAU;CACzC,gBAAgB,gBAAgB,UAAU;CAC1C,UAAU,EAAE,SAAS,CAAC,UAAU;CACjC,CAAC;AASF,MAAM,wCAAwC,4BAA4B,OAAO;CAC/E,aAAa,EAAE,SAAS,CAAC,UAAU;CACnC,WAAW,EAAE,QAAQ,oBAAoB;CACzC,mBAAmB,EAAE,SAAS,CAAC,UAAU;CACzC,aAAa,gBAAgB,UAAU;CACvC,gBAAgB,gBAAgB,UAAU;CAC1C,UAAU,EAAE,SAAS,CAAC,UAAU;CACjC,CAAC;AAQF,MAAa,wBAAwB,EAAE,mBAAmB,aAAa;CACrE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAKF,MAAa,0BAA0B,EAAE,mBAAmB,aAAa,CACvE,6BACA,8BACD,CAAC;AAKF,MAAa,yBAAyB,EAAE,mBAAmB,aAAa,CACtE,kCACA,4BACD,CAAC;AAKF,MAAa,yBAAyB,EAAE,mBAAmB,aAAa;CACtE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAKF,MAAa,wBAAwB,EAAE,mBAAmB,aAAa;CACrE;CACA;CACA;CACA;CACA;CACD,CAAC;AAKF,MAAa,yBAAyB,EAAE,mBAAmB,aAAa;CACtE;CACA;CACA;CACA;CACD,CAAC;AAKF,MAAa,+BAA+B,EAAE,mBAAmB,aAAa,CAC5E,sCACD,CAAC;AAKF,MAAa,kCAAkC,EAAE,mBAAmB,aAAa;CAC/E;CACA;CACA;CACD,CAAC;AAEF,MAAa,uCAAuC,EAAE,mBAAmB,aAAa,CACpF,sCACD,CAAC;AAEF,MAAa,kCAAkC,EAAE,mBAAmB,aAAa,CAC/E,oCACD,CAAC;;;;ACvWF,MAAM,sBAAsB,EAAE,MAAM;CAAC,EAAE,QAAQ;CAAE,EAAE,QAAQ;CAAE,EAAE,SAAS;CAAE,EAAE,MAAM;CAAC,CAAC;AACpF,MAAMA,oBAAwC,EAAE,WAC9C,EAAE,MAAM;CAAC;CAAqB,EAAE,MAAMA,kBAAgB;CAAE,EAAE,OAAO,EAAE,QAAQ,EAAEA,kBAAgB;CAAC,CAAC,CAChG;AAED,MAAM,wBAAwB,EAAE,OAAO;CACrC,KAAKA,kBAAgB,UAAU;CAC/B,SAAS,EAAE,SAAS,CAAC,UAAU;CAC/B,KAAKA,kBAAgB,UAAU;CAC/B,MAAMA,kBAAgB,UAAU;CAChC,KAAK,EAAE,MAAMA,kBAAgB,CAAC,UAAU;CACxC,KAAKA,kBAAgB,UAAU;CAC/B,MAAMA,kBAAgB,UAAU;CAChC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU;CAClD,KAAKA,kBAAgB,UAAU;CAC/B,MAAM,EAAE,MAAMA,kBAAgB,CAAC,UAAU;CACzC,UAAU,EAAE,QAAQ,CAAC,UAAU;CAC/B,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW,OAAO,CAAC,CAAC,CAAC,UAAU;CAC9D,OAAO,EAAE,QAAQ,CAAC,UAAU;CAC7B,CAAC;AAEF,MAAM,kBAAkB,EAAE,MAAM,CAACA,mBAAiB,sBAAsB,CAAC;AAEzE,MAAM,mBAAmB,EAAE,OAAO;CAChC,IAAI,OAAO;AACT,SAAO,EAAE,MAAM,aAAa,CAAC,UAAU;;CAEzC,IAAI,OAAO;AACT,SAAO,EAAE,MAAM,aAAa,CAAC,UAAU;;CAEzC,IAAI,MAAM;AACR,SAAO,EAAE,MAAM,aAAa,CAAC,UAAU;;CAE1C,CAAC;AAMF,MAAM,eAA4C,EAAE,MAAM,CACxD,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EACrC,iBACD,CAAC;AAEF,MAAM,qBAAqB,EAAE,OAAO;CAClC,MAAM,EACH,QAAQ,CACR,IAAI,GAAG,uBAAuB,CAC9B,QACE,QAAQ;AAEP,SAAO,CADmC,SACA,KAAK,IAAI;IAErD;EACE,OAAO;EACP,OAAO;EACR,CACF,CACA,QACE,QAAQ;AAEP,SAAO,CADqB;GAAC;GAAK;GAAK;GAAI,CACf,MAAM,SAAS,IAAI,SAAS,KAAK,CAAC;IAEhE;EACE,OAAO;EACP,OAAO;EACR,CACF;CAEH,cAAc,gBAAgB,UAAU;CACxC,UAAU,EAAE,SAAS,CAAC,UAAU;CAChC,SAAS,EACN,OAAO;EACN,MAAM,aAAa,UAAU;EAC7B,MAAM,aAAa,UAAU;EAC9B,CAAC,CACD,UAAU;CACb,IAAI,EACD,OAAO,EACN,iBAAiB,gBAAgB,UAAU,EAC5C,CAAC,CACD,UAAU;CACb,IAAI,4BAA4B,UAAU;CAC3C,CAAC;AAKF,MAAM,uBAAuB,mBAAmB,OAAO;CACrD,MAAM,EAAE,QAAQ,SAAS;CACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;CAC/B,SAAS,EAAE,QAAQ,CAAC,UAAU;CAC9B,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CACpC,YAAY,EAAE,QAAQ,CAAC,UAAU;CACjC,YAAY,EAAE,QAAQ,CAAC,UAAU;CACjC,IAAI,uBAAuB,UAAU;CACtC,CAAC;AAKF,MAAM,uBAAuB,mBAAmB,OAAO;CACrD,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,UAAU,CAAC,CAAC;CAC1D,UAAU,EAAE,QAAQ,CAAC,UAAU;CAC/B,SAAS,EAAE,QAAQ,CAAC,UAAU;CAC9B,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CACpC,SAAS,EAAE,QAAQ,CAAC,UAAU;CAC9B,SAAS,EAAE,QAAQ,CAAC,UAAU;CAC9B,IAAI,uBAAuB,UAAU;CACtC,CAAC;AAKF,MAAM,wBAAwB,mBAAmB,OAAO;CACtD,MAAM,EAAE,QAAQ,UAAU;CAC1B,UAAU,EAAE,SAAS,CAAC,UAAU;CAChC,SAAS,EAAE,SAAS,CAAC,UAAU;CAC/B,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,UAAU;CACrC,IAAI,wBAAwB,UAAU;CACvC,CAAC;AAKF,SAAS,+BAAqE,QAAW;AACvF,QAAO,OAAO,QACX,eAAe;EACd,MAAM,wBAAQ,IAAI,KAAa;AAC/B,OAAK,MAAM,QAAQ,YAAY;AAC7B,OAAI,MAAM,IAAI,KAAK,KAAK,CAAE,QAAO;AACjC,SAAM,IAAI,KAAK,KAAK;;AAEtB,SAAO;IAET,EACE,OAAO,4CACR,CACF;;AAIH,MAAM,wBAAiE,EAAE,WACvE,EAAE,MAAM,eAAe,CAAC,MAAM,+BAA+B,CAC9D;AAED,MAAM,6BAAkD,EAAE,WAAW,eAAe;AAEpF,MAAM,uBAAuB,mBAAmB,OAAO;CACrD,MAAM,EAAE,QAAQ,SAAS;CACzB,YAAY;CACZ,uBAAuB,2BAA2B,UAAU;CAC5D,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAEA,kBAAgB,CAAC,UAAU;CAC1D,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAEA,kBAAgB,CAAC,UAAU;CACzD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAEA,kBAAgB,CAAC,CAAC,UAAU;CAC/D,IAAI,uBAAuB,UAAU;CACtC,CAAC,CAAC,QACA,MAAM;AACL,KAAI,EAAE,SAAU,QAAO,EAAE,WAAW,WAAW;AAC/C,QAAO;GAET;CACE,OAAO;CACP,OAAO;CACR,CACF;AAMD,MAAM,mCAAmC,mBAAmB,OAAO;CACjE,MAAM,EAAE,QAAQ,sBAAsB;CACtC,IAAI,SAAS;AACX,SAAO,EAAE,MAAM,qBAAqB,CAAC,IAAI,GAAG,qCAAqC;;CAEnF,eAAe,EAAE,QAAQ,CAAC,IAAI,GAAG,gCAAgC;CACjE,kBAAkB,gCAAgC,UAAU;CAC5D,IAAI,qCAAqC,UAAU;CACpD,CAAC,CACC,QACE,MAAM;CACL,MAAM,EAAE,QAAQ,kBAAkB;AAClC,QAAO,OAAO,OAAO,MAAM;EACzB,MAAM,wBAAwB,EAAE,YAAY,MAAM,MAAM,EAAE,SAAS,cAAc;AACjF,MAAI,CAAC,sBAAuB,QAAO;AACnC,MAAI,EAAE,cAAc,uBAAwB,QAAO;AACnD,MACE,OAAO,sBAAsB,aAAa,YAC1C,OAAO,sBAAsB,aAAa,YAC1C,OAAO,sBAAsB,aAAa,UAE1C,QAAO;AAET,SAAO;GACP;GAEJ;CACE,OACE;CACF,OAAO;CACR,CACF,CACA,QACE,MAAM;CACL,MAAM,EAAE,WAAW;CACnB,MAAM,2BAA2B,QAC/B,OAAO,KAAK,MAAM;EAChB,MAAM,wBAAwB,EAAE,YAAY,MAAM,MAAM,EAAE,SAAS,EAAE,cAAc;AACnF,MAAI,CAAC,sBAAuB,QAAO;AACnC,MAAI,EAAE,cAAc,uBAAwB,QAAO;AACnD,SAAO,sBAAsB;GAC7B,CACH;AAED,QADqB,IAAI,IAAI,yBAAyB,CAClC,SAAS,yBAAyB;GAExD,EACE,OAAO,8DACR,CACF;AAQH,MAAM,sBAAsB,mBAAmB,OAAO;CACpD,MAAM,EAAE,QAAQ,QAAQ;CACxB,UAAU,EAAE,MAAMA,kBAAgB,CAAC,UAAU;CAC7C,SAAS,EAAE,MAAMA,kBAAgB,CAAC,UAAU;CAC5C,MAAM,EAAE,MAAM,EAAE,MAAMA,kBAAgB,CAAC,CAAC,UAAU;CAClD,IAAI,QAAQ;AACV,SAAO;;CAET,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,IAAI,sBAAsB,UAAU;CACrC,CAAC;AAKF,MAAM,6BAA6B,mBAAmB,OAAO;CAC3D,MAAM,EAAE,QAAQ,gBAAgB;CAChC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,GAAG,kCAAkC;CACrE,IAAI,6BAA6B,UAAU;CAC5C,CAAC;AAKF,MAAM,gCAAgC,mBAAmB,OAAO;CAC9D,MAAM,EAAE,QAAQ,mBAAmB;CACnC,IAAI,gCAAgC,UAAU;CAC/C,CAAC;AAKF,MAAM,iBAAiB,EAAE,MAAM;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAKF,MAAa,mBAAmB,EAAE,MAAM,eAAe,CAAC,MAAM,+BAA+B;;;;;;;;;AChS7F,MAAa,uBAAuB,EAAE,OAAO;CAK3C,MAAM,EAAE,QAAQ,CAAC,MAAM,4DAA4D,EACjF,OACE,2PACH,CAAC;CACF,cAAc;CACd,aAAa;CACb,MAAM,EAAE,QAAQ;CAChB,YAAY;CACZ,UAAU,iBAAiB,UAAU;CACtC,CAAC;AAKF,MAAa,yBAAyB,EAAE,OAAO;CAC7C,GAAG,qBAAqB,KAAK;EAAE,YAAY;EAAM,UAAU;EAAM,CAAC,CAAC;CACnE,QAAQ,EAAE,QAAQ;CAClB,OAAO,EAAE,OAAO;CAChB,MAAM,EAAE,SAAS,CAAC,UAAU;CAC5B,SAAS,EAAE,QAAQ,CAAC,UAAU;CAC9B,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC;CAC7B,CAAC;AAQF,MAAa,6BAA6B,EAAE,OAAO,EACjD,GAAG,qBAAqB,KAAK,EAAE,UAAU,MAAM,CAAC,CAAC,OAClD,CAAC;AAKF,MAAa,6BAA6B,EAAE,OAAO,EACjD,GAAG,qBAAqB,OACzB,CAAC;AAIF,MAAa,wBAAwB,EAAE,OAAO;CAC5C,GAAG,qBAAqB,KAAK;EAAE,YAAY;EAAM,UAAU;EAAM,CAAC,CAAC;CACnE,MAAM,EAAE,QAAQ,CAAC,MAAM,6DAA6D,EAClF,OACE,4RACH,CAAC;CACF,YAAY,EAAE,QAAQ,MAAM;CAC5B,kBAAkB,EAAE,SAAS,CAAC,UAAU;CACxC,kBAAkB,EAAE,MAAM,EAAE,KAAK;EAAC;EAAQ;EAAS;EAAO,CAAC,CAAC;CAC5D,mBAAmB,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CAC5C,SAAS,EACN,OAAO;EACN,UAAU,EAAE,QAAQ,CAAC,UAAU;EAC/B,OAAO,EAAE,QAAQ,CAAC,UAAU;EAC5B,kBAAkB,EAAE,QAAQ,CAAC,UAAU;EACvC,mBAAmB,EAAE,QAAQ,CAAC,UAAU;EACxC,QAAQ,EAAE,QAAQ,CAAC,UAAU;EAC7B,SAAS,EAAE,QAAQ,CAAC,UAAU;EAC/B,CAAC,CACD,UAAU;CACb,qBAAqB,EAClB,OAAO;EACN,aAAa,EACV,OAAO;GACN,SAAS,EAAE,QAAQ,CAAC,UAAU;GAC9B,SAAS,EAAE,QAAQ,CAAC,UAAU;GAC9B,SAAS,EAAE,QAAQ,CAAC,UAAU;GAC/B,CAAC,CACD,UAAU;EACb,mBAAmB,EAChB,OAAO;GACN,SAAS,EAAE,QAAQ,CAAC,UAAU;GAC9B,SAAS,EAAE,QAAQ,CAAC,UAAU;GAC9B,SAAS,EAAE,QAAQ,CAAC,UAAU;GAC/B,CAAC,CACD,UAAU;EACb,YAAY,EACT,OAAO;GACN,SAAS,EAAE,QAAQ,CAAC,UAAU;GAC9B,SAAS,EAAE,QAAQ,CAAC,UAAU;GAC/B,CAAC,CACD,UAAU;EACb,WAAW,EACR,OAAO,EACN,SAAS,EAAE,KAAK;GAAC;GAAO;GAAU;GAAO,CAAC,CAAC,UAAU,EACtD,CAAC,CACD,UAAU;EACd,CAAC,CACD,UAAU;CACb,wBAAwB,EAAE,MACxB,EAAE,KAAK;EACL;EACA;EAGA;EAKA;EACA;EAMA;EACA;EACA;EACA;EAIA;EACA;EACD,CAAC,CACH;CACF,CAAC;AAKF,MAAa,uBAAuB,EAAE,OAAO;CAC3C,GAAG,qBAAqB;CACxB,QAAQ,EAAE,SAAS;EACjB,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EAC7C,QAAQ,EAAE,QAAQ,gBAAgB;EACnC,CAAC;CACH,CAAC"}