@botpress/cli 1.4.3 → 1.4.5

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.
@@ -1,20 +1,20 @@
1
1
 
2
- > @botpress/cli@1.4.3 build /home/runner/work/botpress/botpress/packages/cli
2
+ > @botpress/cli@1.4.5 build /home/runner/work/botpress/botpress/packages/cli
3
3
  > pnpm run bundle && pnpm run template:gen
4
4
 
5
5
 
6
- > @botpress/cli@1.4.3 bundle /home/runner/work/botpress/botpress/packages/cli
6
+ > @botpress/cli@1.4.5 bundle /home/runner/work/botpress/botpress/packages/cli
7
7
  > ts-node -T build.ts
8
8
 
9
9
 
10
- > @botpress/cli@1.4.3 template:gen /home/runner/work/botpress/botpress/packages/cli
10
+ > @botpress/cli@1.4.5 template:gen /home/runner/work/botpress/botpress/packages/cli
11
11
  > pnpm -r --stream -F @bp-templates/* exec bp gen
12
12
 
13
- šŸ¤– Botpress CLI v1.4.3
14
- šŸ¤– Botpress CLI v1.4.3
15
- šŸ¤– Botpress CLI v1.4.3
16
- šŸ¤– Botpress CLI v1.4.3
17
- ā—‹ Generating typings for integration hello-world...ā—‹ Generating typings for integration webhook-message...ā—‹ Generating typings for bot...āœ“ Typings available at .botpress
18
- ā—‹ Generating typings for integration empty-integration...āœ“ Typings available at .botpress
19
- āœ“ Typings available at .botpress
13
+ šŸ¤– Botpress CLI v1.4.5
14
+ šŸ¤– Botpress CLI v1.4.5
15
+ šŸ¤– Botpress CLI v1.4.5
16
+ šŸ¤– Botpress CLI v1.4.5
17
+ ā—‹ Generating typings for integration webhook-message...ā—‹ Generating typings for integration empty-integration...āœ“ Typings available at .botpress
18
+ ā—‹ Generating typings for bot...āœ“ Typings available at .botpress
19
+ ā—‹ Generating typings for integration hello-world...āœ“ Typings available at .botpress
20
20
  āœ“ Typings available at .botpress
@@ -7,35 +7,37 @@ const EMPTY_STRING = "";
7
7
  const TRUTHY_STRING = "truthy";
8
8
  const EVENT_NAME = "eventName";
9
9
  const PARAM_NAME = "paramName";
10
+ const PROPERTIES_PARAM = "properties";
11
+ const PARAM_NAMES = [PARAM_NAME, PROPERTIES_PARAM];
10
12
  const TAG_NAME = "tagName";
11
13
  const STATE_NAME = "stateName";
12
14
  const ZUI = "x-zui";
13
15
  const LEGACY_ZUI = "ui";
14
16
  describeRule("event-outputparams-should-have-title", (lint) => {
15
- (0, import_vitest.test)("missing title should trigger", async () => {
17
+ import_vitest.test.each(PARAM_NAMES)("missing title should trigger (%s)", async (paramName) => {
16
18
  const definition = {
17
- events: { [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: {} } } } } }
19
+ events: { [EVENT_NAME]: { schema: { properties: { [paramName]: { [ZUI]: {} } } } } }
18
20
  };
19
21
  const results = await lint(definition);
20
22
  (0, import_vitest.expect)(results).toHaveLength(1);
21
- (0, import_vitest.expect)(results[0]?.path).toEqual(["events", EVENT_NAME, "schema", "properties", PARAM_NAME, ZUI]);
23
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["events", EVENT_NAME, "schema", "properties", paramName, ZUI]);
22
24
  (0, import_vitest.expect)(results[0]?.message).toContain("title");
23
25
  });
24
- (0, import_vitest.test)("empty title should trigger", async () => {
26
+ import_vitest.test.each(PARAM_NAMES)("empty title should trigger (%s)", async (paramName) => {
25
27
  const definition = {
26
28
  events: {
27
- [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: EMPTY_STRING } } } } }
29
+ [EVENT_NAME]: { schema: { properties: { [paramName]: { [ZUI]: { title: EMPTY_STRING } } } } }
28
30
  }
29
31
  };
30
32
  const results = await lint(definition);
31
33
  (0, import_vitest.expect)(results).toHaveLength(1);
32
- (0, import_vitest.expect)(results[0]?.path).toEqual(["events", EVENT_NAME, "schema", "properties", PARAM_NAME, ZUI, "title"]);
34
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["events", EVENT_NAME, "schema", "properties", paramName, ZUI, "title"]);
33
35
  (0, import_vitest.expect)(results[0]?.message).toContain("title");
34
36
  });
35
- (0, import_vitest.test)("valid title should not trigger", async () => {
37
+ import_vitest.test.each(PARAM_NAMES)("valid title should not trigger (%s)", async (paramName) => {
36
38
  const definition = {
37
39
  events: {
38
- [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: TRUTHY_STRING } } } } }
40
+ [EVENT_NAME]: { schema: { properties: { [paramName]: { [ZUI]: { title: TRUTHY_STRING } } } } }
39
41
  }
40
42
  };
41
43
  const results = await lint(definition);
@@ -43,30 +45,30 @@ describeRule("event-outputparams-should-have-title", (lint) => {
43
45
  });
44
46
  });
45
47
  describeRule("event-outputparams-must-have-description", (lint) => {
46
- (0, import_vitest.test)("missing description should trigger", async () => {
48
+ import_vitest.test.each(PARAM_NAMES)("missing description should trigger (%s)", async (paramName) => {
47
49
  const definition = {
48
- events: { [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: {} } } } }
50
+ events: { [EVENT_NAME]: { schema: { properties: { [paramName]: {} } } } }
49
51
  };
50
52
  const results = await lint(definition);
51
53
  (0, import_vitest.expect)(results).toHaveLength(1);
52
- (0, import_vitest.expect)(results[0]?.path).toEqual(["events", EVENT_NAME, "schema", "properties", PARAM_NAME]);
54
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["events", EVENT_NAME, "schema", "properties", paramName]);
53
55
  (0, import_vitest.expect)(results[0]?.message).toContain("description");
54
56
  });
55
- (0, import_vitest.test)("empty description should trigger", async () => {
57
+ import_vitest.test.each(PARAM_NAMES)("empty description should trigger (%s)", async (paramName) => {
56
58
  const definition = {
57
59
  events: {
58
- [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { description: EMPTY_STRING } } } }
60
+ [EVENT_NAME]: { schema: { properties: { [paramName]: { description: EMPTY_STRING } } } }
59
61
  }
60
62
  };
61
63
  const results = await lint(definition);
62
64
  (0, import_vitest.expect)(results).toHaveLength(1);
63
- (0, import_vitest.expect)(results[0]?.path).toEqual(["events", EVENT_NAME, "schema", "properties", PARAM_NAME, "description"]);
65
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["events", EVENT_NAME, "schema", "properties", paramName, "description"]);
64
66
  (0, import_vitest.expect)(results[0]?.message).toContain("description");
65
67
  });
66
- (0, import_vitest.test)("valid description should not trigger", async () => {
68
+ import_vitest.test.each(PARAM_NAMES)("valid description should not trigger (%s)", async (paramName) => {
67
69
  const definition = {
68
70
  events: {
69
- [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { description: TRUTHY_STRING } } } }
71
+ [EVENT_NAME]: { schema: { properties: { [paramName]: { description: TRUTHY_STRING } } } }
70
72
  }
71
73
  };
72
74
  const results = await lint(definition);
@@ -74,54 +76,54 @@ describeRule("event-outputparams-must-have-description", (lint) => {
74
76
  });
75
77
  });
76
78
  describeRule("configuration-fields-must-have-a-title", (lint) => {
77
- (0, import_vitest.test)("missing title should trigger", async () => {
79
+ import_vitest.test.each(PARAM_NAMES)("missing title should trigger (%s)", async (paramName) => {
78
80
  const definition = {
79
- configuration: { schema: { properties: { [PARAM_NAME]: { [ZUI]: {} } } } }
81
+ configuration: { schema: { properties: { [paramName]: { [ZUI]: {} } } } }
80
82
  };
81
83
  const results = await lint(definition);
82
84
  (0, import_vitest.expect)(results).toHaveLength(1);
83
- (0, import_vitest.expect)(results[0]?.path).toEqual(["configuration", "schema", "properties", PARAM_NAME, ZUI]);
85
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["configuration", "schema", "properties", paramName, ZUI]);
84
86
  (0, import_vitest.expect)(results[0]?.message).toContain("title");
85
87
  });
86
- (0, import_vitest.test)("empty title should trigger", async () => {
88
+ import_vitest.test.each(PARAM_NAMES)("empty title should trigger (%s)", async (paramName) => {
87
89
  const definition = {
88
- configuration: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: EMPTY_STRING } } } } }
90
+ configuration: { schema: { properties: { [paramName]: { [ZUI]: { title: EMPTY_STRING } } } } }
89
91
  };
90
92
  const results = await lint(definition);
91
93
  (0, import_vitest.expect)(results).toHaveLength(1);
92
- (0, import_vitest.expect)(results[0]?.path).toEqual(["configuration", "schema", "properties", PARAM_NAME, ZUI, "title"]);
94
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["configuration", "schema", "properties", paramName, ZUI, "title"]);
93
95
  (0, import_vitest.expect)(results[0]?.message).toContain("title");
94
96
  });
95
- (0, import_vitest.test)("valid title should not trigger", async () => {
97
+ import_vitest.test.each(PARAM_NAMES)("valid title should not trigger (%s)", async (paramName) => {
96
98
  const definition = {
97
- configuration: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: TRUTHY_STRING } } } } }
99
+ configuration: { schema: { properties: { [paramName]: { [ZUI]: { title: TRUTHY_STRING } } } } }
98
100
  };
99
101
  const results = await lint(definition);
100
102
  (0, import_vitest.expect)(results).toHaveLength(0);
101
103
  });
102
104
  });
103
105
  describeRule("configuration-fields-must-have-a-description", (lint) => {
104
- (0, import_vitest.test)("missing description should trigger", async () => {
106
+ import_vitest.test.each(PARAM_NAMES)("missing description should trigger (%s)", async (paramName) => {
105
107
  const definition = {
106
- configuration: { schema: { properties: { [PARAM_NAME]: {} } } }
108
+ configuration: { schema: { properties: { [paramName]: {} } } }
107
109
  };
108
110
  const results = await lint(definition);
109
111
  (0, import_vitest.expect)(results).toHaveLength(1);
110
- (0, import_vitest.expect)(results[0]?.path).toEqual(["configuration", "schema", "properties", PARAM_NAME]);
112
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["configuration", "schema", "properties", paramName]);
111
113
  (0, import_vitest.expect)(results[0]?.message).toContain("description");
112
114
  });
113
- (0, import_vitest.test)("empty description should trigger", async () => {
115
+ import_vitest.test.each(PARAM_NAMES)("empty description should trigger (%s)", async (paramName) => {
114
116
  const definition = {
115
- configuration: { schema: { properties: { [PARAM_NAME]: { description: EMPTY_STRING } } } }
117
+ configuration: { schema: { properties: { [paramName]: { description: EMPTY_STRING } } } }
116
118
  };
117
119
  const results = await lint(definition);
118
120
  (0, import_vitest.expect)(results).toHaveLength(1);
119
- (0, import_vitest.expect)(results[0]?.path).toEqual(["configuration", "schema", "properties", PARAM_NAME, "description"]);
121
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["configuration", "schema", "properties", paramName, "description"]);
120
122
  (0, import_vitest.expect)(results[0]?.message).toContain("description");
121
123
  });
122
- (0, import_vitest.test)("valid description should not trigger", async () => {
124
+ import_vitest.test.each(PARAM_NAMES)("valid description should not trigger (%s)", async (paramName) => {
123
125
  const definition = {
124
- configuration: { schema: { properties: { [PARAM_NAME]: { description: TRUTHY_STRING } } } }
126
+ configuration: { schema: { properties: { [paramName]: { description: TRUTHY_STRING } } } }
125
127
  };
126
128
  const results = await lint(definition);
127
129
  (0, import_vitest.expect)(results).toHaveLength(0);
@@ -274,14 +276,14 @@ describeRule("message-tags-must-have-a-description", (lint) => {
274
276
  });
275
277
  });
276
278
  describeRule("legacy-zui-title-should-be-removed", (lint) => {
277
- (0, import_vitest.test)("legacy zui title should trigger", async () => {
279
+ import_vitest.test.each(PARAM_NAMES)("legacy zui title should trigger (%s)", async (paramName) => {
278
280
  const definition = {
279
281
  configuration: {
280
- [LEGACY_ZUI]: { [PARAM_NAME]: { title: TRUTHY_STRING } },
282
+ [LEGACY_ZUI]: { [paramName]: { title: TRUTHY_STRING } },
281
283
  schema: {}
282
284
  },
283
- events: { [EVENT_NAME]: { [LEGACY_ZUI]: { [PARAM_NAME]: { title: TRUTHY_STRING } }, schema: {} } },
284
- states: { [STATE_NAME]: { [LEGACY_ZUI]: { [PARAM_NAME]: { title: TRUTHY_STRING } }, schema: {} } }
285
+ events: { [EVENT_NAME]: { [LEGACY_ZUI]: { [paramName]: { title: TRUTHY_STRING } }, schema: {} } },
286
+ states: { [STATE_NAME]: { [LEGACY_ZUI]: { [paramName]: { title: TRUTHY_STRING } }, schema: {} } }
285
287
  };
286
288
  const results = await lint(definition);
287
289
  (0, import_vitest.expect)(results).toHaveLength(3);
@@ -289,14 +291,14 @@ describeRule("legacy-zui-title-should-be-removed", (lint) => {
289
291
  });
290
292
  });
291
293
  describeRule("legacy-zui-examples-should-be-removed", (lint) => {
292
- (0, import_vitest.test)("legacy zui examples should trigger", async () => {
294
+ import_vitest.test.each(PARAM_NAMES)("legacy zui examples should trigger (%s)", async (paramName) => {
293
295
  const definition = {
294
296
  configuration: {
295
- [LEGACY_ZUI]: { [PARAM_NAME]: { examples: [TRUTHY_STRING] } },
297
+ [LEGACY_ZUI]: { [paramName]: { examples: [TRUTHY_STRING] } },
296
298
  schema: {}
297
299
  },
298
- events: { [EVENT_NAME]: { [LEGACY_ZUI]: { [PARAM_NAME]: { examples: [TRUTHY_STRING] } }, schema: {} } },
299
- states: { [STATE_NAME]: { [LEGACY_ZUI]: { [PARAM_NAME]: { examples: [TRUTHY_STRING] } }, schema: {} } }
300
+ events: { [EVENT_NAME]: { [LEGACY_ZUI]: { [paramName]: { examples: [TRUTHY_STRING] } }, schema: {} } },
301
+ states: { [STATE_NAME]: { [LEGACY_ZUI]: { [paramName]: { examples: [TRUTHY_STRING] } }, schema: {} } }
300
302
  };
301
303
  const results = await lint(definition);
302
304
  (0, import_vitest.expect)(results).toHaveLength(3);
@@ -304,50 +306,50 @@ describeRule("legacy-zui-examples-should-be-removed", (lint) => {
304
306
  });
305
307
  });
306
308
  describeRule("state-fields-should-have-title", (lint) => {
307
- (0, import_vitest.test)("missing title should trigger", async () => {
309
+ import_vitest.test.each(PARAM_NAMES)("missing title should trigger (%s)", async (paramName) => {
308
310
  const definition = {
309
- states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: {} } } } } }
311
+ states: { [STATE_NAME]: { schema: { properties: { [paramName]: { [ZUI]: {} } } } } }
310
312
  };
311
313
  const results = await lint(definition);
312
314
  (0, import_vitest.expect)(results).toHaveLength(1);
313
- (0, import_vitest.expect)(results[0]?.path).toEqual(["states", STATE_NAME, "schema", "properties", PARAM_NAME, ZUI]);
315
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["states", STATE_NAME, "schema", "properties", paramName, ZUI]);
314
316
  });
315
- (0, import_vitest.test)("empty title should trigger", async () => {
317
+ import_vitest.test.each(PARAM_NAMES)("empty title should trigger (%s)", async (paramName) => {
316
318
  const definition = {
317
- states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: EMPTY_STRING } } } } } }
319
+ states: { [STATE_NAME]: { schema: { properties: { [paramName]: { [ZUI]: { title: EMPTY_STRING } } } } } }
318
320
  };
319
321
  const results = await lint(definition);
320
322
  (0, import_vitest.expect)(results).toHaveLength(1);
321
- (0, import_vitest.expect)(results[0]?.path).toEqual(["states", STATE_NAME, "schema", "properties", PARAM_NAME, ZUI, "title"]);
323
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["states", STATE_NAME, "schema", "properties", paramName, ZUI, "title"]);
322
324
  });
323
- (0, import_vitest.test)("valid title should not trigger", async () => {
325
+ import_vitest.test.each(PARAM_NAMES)("valid title should not trigger (%s)", async (paramName) => {
324
326
  const definition = {
325
- states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: TRUTHY_STRING } } } } } }
327
+ states: { [STATE_NAME]: { schema: { properties: { [paramName]: { [ZUI]: { title: TRUTHY_STRING } } } } } }
326
328
  };
327
329
  const results = await lint(definition);
328
330
  (0, import_vitest.expect)(results).toHaveLength(0);
329
331
  });
330
332
  });
331
333
  describeRule("state-fields-must-have-description", (lint) => {
332
- (0, import_vitest.test)("missing description should trigger", async () => {
334
+ import_vitest.test.each(PARAM_NAMES)("missing description should trigger (%s)", async (paramName) => {
333
335
  const definition = {
334
- states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: {} } } } }
336
+ states: { [STATE_NAME]: { schema: { properties: { [paramName]: {} } } } }
335
337
  };
336
338
  const results = await lint(definition);
337
339
  (0, import_vitest.expect)(results).toHaveLength(1);
338
- (0, import_vitest.expect)(results[0]?.path).toEqual(["states", STATE_NAME, "schema", "properties", PARAM_NAME]);
340
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["states", STATE_NAME, "schema", "properties", paramName]);
339
341
  });
340
- (0, import_vitest.test)("empty description should trigger", async () => {
342
+ import_vitest.test.each(PARAM_NAMES)("empty description should trigger (%s)", async (paramName) => {
341
343
  const definition = {
342
- states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { description: EMPTY_STRING } } } } }
344
+ states: { [STATE_NAME]: { schema: { properties: { [paramName]: { description: EMPTY_STRING } } } } }
343
345
  };
344
346
  const results = await lint(definition);
345
347
  (0, import_vitest.expect)(results).toHaveLength(1);
346
- (0, import_vitest.expect)(results[0]?.path).toEqual(["states", STATE_NAME, "schema", "properties", PARAM_NAME, "description"]);
348
+ (0, import_vitest.expect)(results[0]?.path).toEqual(["states", STATE_NAME, "schema", "properties", paramName, "description"]);
347
349
  });
348
- (0, import_vitest.test)("valid description should not trigger", async () => {
350
+ import_vitest.test.each(PARAM_NAMES)("valid description should not trigger (%s)", async (paramName) => {
349
351
  const definition = {
350
- states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { description: TRUTHY_STRING } } } } }
352
+ states: { [STATE_NAME]: { schema: { properties: { [paramName]: { description: TRUTHY_STRING } } } } }
351
353
  };
352
354
  const results = await lint(definition);
353
355
  (0, import_vitest.expect)(results).toHaveLength(0);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/linter/ruleset-tests/bot.ruleset.test.ts"],
4
- "sourcesContent": ["import { test, expect } from 'vitest'\nimport { BOT_RULESET } from '../rulesets/bot.ruleset'\nimport { createDescribeRule, type RecursivePartial } from './common'\nimport { type CreateBotBody } from '../../api/bot-body'\n\ntype PartialDefinition = RecursivePartial<CreateBotBody>\nconst describeRule = createDescribeRule<CreateBotBody>()(BOT_RULESET)\n\nconst EMPTY_STRING = ''\nconst TRUTHY_STRING = 'truthy'\nconst EVENT_NAME = 'eventName'\nconst PARAM_NAME = 'paramName'\nconst TAG_NAME = 'tagName'\nconst STATE_NAME = 'stateName'\nconst ZUI = 'x-zui'\nconst LEGACY_ZUI = 'ui'\n\ndescribeRule('event-outputparams-should-have-title', (lint) => {\n test('missing title should trigger', async () => {\n // arrange\n const definition = {\n events: { [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: {} } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['events', EVENT_NAME, 'schema', 'properties', PARAM_NAME, ZUI])\n expect(results[0]?.message).toContain('title')\n })\n\n test('empty title should trigger', async () => {\n // arrange\n const definition = {\n events: {\n [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: EMPTY_STRING } } } } },\n },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['events', EVENT_NAME, 'schema', 'properties', PARAM_NAME, ZUI, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test('valid title should not trigger', async () => {\n // arrange\n const definition = {\n events: {\n [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: TRUTHY_STRING } } } } },\n },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('event-outputparams-must-have-description', (lint) => {\n test('missing description should trigger', async () => {\n // arrange\n const definition = {\n events: { [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: {} } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['events', EVENT_NAME, 'schema', 'properties', PARAM_NAME])\n expect(results[0]?.message).toContain('description')\n })\n\n test('empty description should trigger', async () => {\n // arrange\n const definition = {\n events: {\n [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { description: EMPTY_STRING } } } },\n },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['events', EVENT_NAME, 'schema', 'properties', PARAM_NAME, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test('valid description should not trigger', async () => {\n // arrange\n const definition = {\n events: {\n [EVENT_NAME]: { schema: { properties: { [PARAM_NAME]: { description: TRUTHY_STRING } } } },\n },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('configuration-fields-must-have-a-title', (lint) => {\n test('missing title should trigger', async () => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [PARAM_NAME]: { [ZUI]: {} } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['configuration', 'schema', 'properties', PARAM_NAME, ZUI])\n expect(results[0]?.message).toContain('title')\n })\n\n test('empty title should trigger', async () => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: EMPTY_STRING } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['configuration', 'schema', 'properties', PARAM_NAME, ZUI, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test('valid title should not trigger', async () => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: TRUTHY_STRING } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('configuration-fields-must-have-a-description', (lint) => {\n test('missing description should trigger', async () => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [PARAM_NAME]: {} } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['configuration', 'schema', 'properties', PARAM_NAME])\n expect(results[0]?.message).toContain('description')\n })\n\n test('empty description should trigger', async () => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [PARAM_NAME]: { description: EMPTY_STRING } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['configuration', 'schema', 'properties', PARAM_NAME, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test('valid description should not trigger', async () => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [PARAM_NAME]: { description: TRUTHY_STRING } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('user-tags-should-have-a-title', (lint) => {\n test('missing title should trigger', async () => {\n // arrange\n const definition = { user: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['user', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('title')\n })\n\n test('empty title should trigger', async () => {\n // arrange\n const definition = { user: { tags: { [TAG_NAME]: { title: EMPTY_STRING } } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['user', 'tags', TAG_NAME, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test('valid title should not trigger', async () => {\n // arrange\n const definition = { user: { tags: { [TAG_NAME]: { title: TRUTHY_STRING } } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('user-tags-must-have-a-description', (lint) => {\n test('missing description should trigger', async () => {\n // arrange\n const definition = { user: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['user', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('description')\n })\n\n test('empty description should trigger', async () => {\n // arrange\n const definition = {\n user: { tags: { [TAG_NAME]: { description: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['user', 'tags', TAG_NAME, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test('valid description should not trigger', async () => {\n // arrange\n const definition = {\n user: { tags: { [TAG_NAME]: { description: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('conversation-tags-should-have-a-title', (lint) => {\n test('missing title should trigger', async () => {\n // arrange\n const definition = { conversation: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['conversation', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('title')\n })\n\n test('empty title should trigger', async () => {\n // arrange\n const definition = {\n conversation: { tags: { [TAG_NAME]: { title: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['conversation', 'tags', TAG_NAME, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test('valid title should not trigger', async () => {\n // arrange\n const definition = {\n conversation: { tags: { [TAG_NAME]: { title: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('conversation-tags-must-have-a-description', (lint) => {\n test('missing description should trigger', async () => {\n // arrange\n const definition = { conversation: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['conversation', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('description')\n })\n\n test('empty description should trigger', async () => {\n // arrange\n const definition = {\n conversation: { tags: { [TAG_NAME]: { description: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['conversation', 'tags', TAG_NAME, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test('valid description should not trigger', async () => {\n // arrange\n const definition = {\n conversation: { tags: { [TAG_NAME]: { description: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('message-tags-should-have-a-title', (lint) => {\n test('missing title should trigger', async () => {\n // arrange\n const definition = { message: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['message', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('title')\n })\n\n test('empty title should trigger', async () => {\n // arrange\n const definition = {\n message: { tags: { [TAG_NAME]: { title: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['message', 'tags', TAG_NAME, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test('valid title should not trigger', async () => {\n // arrange\n const definition = {\n message: { tags: { [TAG_NAME]: { title: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('message-tags-must-have-a-description', (lint) => {\n test('missing description should trigger', async () => {\n // arrange\n const definition = { message: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['message', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('description')\n })\n\n test('empty description should trigger', async () => {\n // arrange\n const definition = {\n message: { tags: { [TAG_NAME]: { description: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['message', 'tags', TAG_NAME, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test('valid description should not trigger', async () => {\n // arrange\n const definition = {\n message: { tags: { [TAG_NAME]: { description: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('legacy-zui-title-should-be-removed', (lint) => {\n test('legacy zui title should trigger', async () => {\n // arrange\n const definition = {\n configuration: {\n [LEGACY_ZUI]: { [PARAM_NAME]: { title: TRUTHY_STRING } },\n schema: {},\n },\n events: { [EVENT_NAME]: { [LEGACY_ZUI]: { [PARAM_NAME]: { title: TRUTHY_STRING } }, schema: {} } },\n states: { [STATE_NAME]: { [LEGACY_ZUI]: { [PARAM_NAME]: { title: TRUTHY_STRING } }, schema: {} } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(3)\n expect(results[0]?.message).toContain('.title()')\n })\n})\n\ndescribeRule('legacy-zui-examples-should-be-removed', (lint) => {\n test('legacy zui examples should trigger', async () => {\n // arrange\n const definition = {\n configuration: {\n [LEGACY_ZUI]: { [PARAM_NAME]: { examples: [TRUTHY_STRING] } },\n schema: {},\n },\n events: { [EVENT_NAME]: { [LEGACY_ZUI]: { [PARAM_NAME]: { examples: [TRUTHY_STRING] } }, schema: {} } },\n states: { [STATE_NAME]: { [LEGACY_ZUI]: { [PARAM_NAME]: { examples: [TRUTHY_STRING] } }, schema: {} } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(3)\n expect(results[0]?.message).toContain('examples')\n })\n})\n\ndescribeRule('state-fields-should-have-title', (lint) => {\n test('missing title should trigger', async () => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: {} } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['states', STATE_NAME, 'schema', 'properties', PARAM_NAME, ZUI])\n })\n\n test('empty title should trigger', async () => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: EMPTY_STRING } } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['states', STATE_NAME, 'schema', 'properties', PARAM_NAME, ZUI, 'title'])\n })\n\n test('valid title should not trigger', async () => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { [ZUI]: { title: TRUTHY_STRING } } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('state-fields-must-have-description', (lint) => {\n test('missing description should trigger', async () => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: {} } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['states', STATE_NAME, 'schema', 'properties', PARAM_NAME])\n })\n\n test('empty description should trigger', async () => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { description: EMPTY_STRING } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['states', STATE_NAME, 'schema', 'properties', PARAM_NAME, 'description'])\n })\n\n test('valid description should not trigger', async () => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [PARAM_NAME]: { description: TRUTHY_STRING } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n"],
5
- "mappings": ";AAAA,oBAA6B;AAC7B,iBAA4B;AAC5B,oBAA0D;AAI1D,MAAM,mBAAe,kCAAkC,EAAE,sBAAW;AAEpE,MAAM,eAAe;AACrB,MAAM,gBAAgB;AACtB,MAAM,aAAa;AACnB,MAAM,aAAa;AACnB,MAAM,WAAW;AACjB,MAAM,aAAa;AACnB,MAAM,MAAM;AACZ,MAAM,aAAa;AAEnB,aAAa,wCAAwC,CAAC,SAAS;AAC7D,0BAAK,gCAAgC,YAAY;AAE/C,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,IACtF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,YAAY,GAAG,CAAC;AAChG,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,8BAA8B,YAAY;AAE7C,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,EAAE,EAAE,EAAE;AAAA,MAC/F;AAAA,IACF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,YAAY,KAAK,OAAO,CAAC;AACzG,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,kCAAkC,YAAY;AAEjD,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE,EAAE,EAAE,EAAE;AAAA,MAChG;AAAA,IACF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,4CAA4C,CAAC,SAAS;AACjE,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE;AAAA,IAC3E;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,UAAU,CAAC;AAC3F,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,oCAAoC,YAAY;AAEnD,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,aAAa,EAAE,EAAE,EAAE;AAAA,MAC1F;AAAA,IACF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,YAAY,aAAa,CAAC;AAC1G,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,wCAAwC,YAAY;AAEvD,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,cAAc,EAAE,EAAE,EAAE;AAAA,MAC3F;AAAA,IACF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,0CAA0C,CAAC,SAAS;AAC/D,0BAAK,gCAAgC,YAAY;AAE/C,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE;AAAA,IAC3E;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,iBAAiB,UAAU,cAAc,YAAY,GAAG,CAAC;AAC3F,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,8BAA8B,YAAY;AAE7C,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,EAAE,EAAE,EAAE;AAAA,IAChG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,iBAAiB,UAAU,cAAc,YAAY,KAAK,OAAO,CAAC;AACpG,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,kCAAkC,YAAY;AAEjD,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE,EAAE,EAAE,EAAE;AAAA,IACjG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,gDAAgD,CAAC,SAAS;AACrE,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE;AAAA,IAChE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,iBAAiB,UAAU,cAAc,UAAU,CAAC;AACtF,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,oCAAoC,YAAY;AAEnD,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,aAAa,EAAE,EAAE,EAAE;AAAA,IAC3F;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,iBAAiB,UAAU,cAAc,YAAY,aAAa,CAAC;AACrG,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,wCAAwC,YAAY;AAEvD,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,cAAc,EAAE,EAAE,EAAE;AAAA,IAC5F;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,iCAAiC,CAAC,SAAS;AACtD,0BAAK,gCAAgC,YAAY;AAE/C,UAAM,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAGxD,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,QAAQ,QAAQ,QAAQ,CAAC;AAC3D,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,8BAA8B,YAAY;AAE7C,UAAM,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,aAAa,EAAE,EAAE,EAAE;AAG7E,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,QAAQ,QAAQ,UAAU,OAAO,CAAC;AACpE,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,kCAAkC,YAAY;AAEjD,UAAM,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,cAAc,EAAE,EAAE,EAAE;AAG9E,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,qCAAqC,CAAC,SAAS;AAC1D,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAGxD,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,QAAQ,QAAQ,QAAQ,CAAC;AAC3D,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,oCAAoC,YAAY;AAEnD,UAAM,aAAa;AAAA,MACjB,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,aAAa,EAAE,EAAE;AAAA,IAC9D;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,QAAQ,QAAQ,UAAU,aAAa,CAAC;AAC1E,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,wCAAwC,YAAY;AAEvD,UAAM,aAAa;AAAA,MACjB,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,cAAc,EAAE,EAAE;AAAA,IAC/D;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,yCAAyC,CAAC,SAAS;AAC9D,0BAAK,gCAAgC,YAAY;AAE/C,UAAM,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAGhE,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,gBAAgB,QAAQ,QAAQ,CAAC;AACnE,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,8BAA8B,YAAY;AAE7C,UAAM,aAAa;AAAA,MACjB,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,aAAa,EAAE,EAAE;AAAA,IAChE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,gBAAgB,QAAQ,UAAU,OAAO,CAAC;AAC5E,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,kCAAkC,YAAY;AAEjD,UAAM,aAAa;AAAA,MACjB,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,cAAc,EAAE,EAAE;AAAA,IACjE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,6CAA6C,CAAC,SAAS;AAClE,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAGhE,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,gBAAgB,QAAQ,QAAQ,CAAC;AACnE,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,oCAAoC,YAAY;AAEnD,UAAM,aAAa;AAAA,MACjB,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,aAAa,EAAE,EAAE;AAAA,IACtE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,gBAAgB,QAAQ,UAAU,aAAa,CAAC;AAClF,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,wCAAwC,YAAY;AAEvD,UAAM,aAAa;AAAA,MACjB,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,cAAc,EAAE,EAAE;AAAA,IACvE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,oCAAoC,CAAC,SAAS;AACzD,0BAAK,gCAAgC,YAAY;AAE/C,UAAM,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAG3D,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,QAAQ,QAAQ,CAAC;AAC9D,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,8BAA8B,YAAY;AAE7C,UAAM,aAAa;AAAA,MACjB,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,aAAa,EAAE,EAAE;AAAA,IAC3D;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,QAAQ,UAAU,OAAO,CAAC;AACvE,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,kCAAkC,YAAY;AAEjD,UAAM,aAAa;AAAA,MACjB,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,cAAc,EAAE,EAAE;AAAA,IAC5D;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,wCAAwC,CAAC,SAAS;AAC7D,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAG3D,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,QAAQ,QAAQ,CAAC;AAC9D,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,oCAAoC,YAAY;AAEnD,UAAM,aAAa;AAAA,MACjB,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,aAAa,EAAE,EAAE;AAAA,IACjE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,QAAQ,UAAU,aAAa,CAAC;AAC7E,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,wCAAwC,YAAY;AAEvD,UAAM,aAAa;AAAA,MACjB,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,cAAc,EAAE,EAAE;AAAA,IAClE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,sCAAsC,CAAC,SAAS;AAC3D,0BAAK,mCAAmC,YAAY;AAElD,UAAM,aAAa;AAAA,MACjB,eAAe;AAAA,QACb,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,OAAO,cAAc,EAAE;AAAA,QACvD,QAAQ,CAAC;AAAA,MACX;AAAA,MACA,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,OAAO,cAAc,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE;AAAA,MACjG,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,OAAO,cAAc,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE;AAAA,IACnG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,UAAU;AAAA,EAClD,CAAC;AACH,CAAC;AAED,aAAa,yCAAyC,CAAC,SAAS;AAC9D,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa;AAAA,MACjB,eAAe;AAAA,QACb,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE;AAAA,QAC5D,QAAQ,CAAC;AAAA,MACX;AAAA,MACA,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE;AAAA,MACtG,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE;AAAA,IACxG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,UAAU;AAAA,EAClD,CAAC;AACH,CAAC;AAED,aAAa,kCAAkC,CAAC,SAAS;AACvD,0BAAK,gCAAgC,YAAY;AAE/C,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,IACtF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,YAAY,GAAG,CAAC;AAAA,EAClG,CAAC;AAED,0BAAK,8BAA8B,YAAY;AAE7C,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,IAC3G;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,YAAY,KAAK,OAAO,CAAC;AAAA,EAC3G,CAAC;AAED,0BAAK,kCAAkC,YAAY;AAEjD,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,IAC5G;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,sCAAsC,CAAC,SAAS;AAC3D,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE;AAAA,IAC3E;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,UAAU,CAAC;AAAA,EAC7F,CAAC;AAED,0BAAK,oCAAoC,YAAY;AAEnD,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,aAAa,EAAE,EAAE,EAAE,EAAE;AAAA,IACtG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,YAAY,aAAa,CAAC;AAAA,EAC5G,CAAC;AAED,0BAAK,wCAAwC,YAAY;AAEvD,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,cAAc,EAAE,EAAE,EAAE,EAAE;AAAA,IACvG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;",
4
+ "sourcesContent": ["import { test, expect } from 'vitest'\nimport { BOT_RULESET } from '../rulesets/bot.ruleset'\nimport { createDescribeRule, type RecursivePartial } from './common'\nimport { type CreateBotBody } from '../../api/bot-body'\n\ntype PartialDefinition = RecursivePartial<CreateBotBody>\nconst describeRule = createDescribeRule<CreateBotBody>()(BOT_RULESET)\n\nconst EMPTY_STRING = ''\nconst TRUTHY_STRING = 'truthy'\nconst EVENT_NAME = 'eventName'\nconst PARAM_NAME = 'paramName'\nconst PROPERTIES_PARAM = 'properties'\nconst PARAM_NAMES = [PARAM_NAME, PROPERTIES_PARAM] as const\nconst TAG_NAME = 'tagName'\nconst STATE_NAME = 'stateName'\nconst ZUI = 'x-zui'\nconst LEGACY_ZUI = 'ui'\n\ndescribeRule('event-outputparams-should-have-title', (lint) => {\n test.each(PARAM_NAMES)('missing title should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n events: { [EVENT_NAME]: { schema: { properties: { [paramName]: { [ZUI]: {} } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['events', EVENT_NAME, 'schema', 'properties', paramName, ZUI])\n expect(results[0]?.message).toContain('title')\n })\n\n test.each(PARAM_NAMES)('empty title should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n events: {\n [EVENT_NAME]: { schema: { properties: { [paramName]: { [ZUI]: { title: EMPTY_STRING } } } } },\n },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['events', EVENT_NAME, 'schema', 'properties', paramName, ZUI, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test.each(PARAM_NAMES)('valid title should not trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n events: {\n [EVENT_NAME]: { schema: { properties: { [paramName]: { [ZUI]: { title: TRUTHY_STRING } } } } },\n },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('event-outputparams-must-have-description', (lint) => {\n test.each(PARAM_NAMES)('missing description should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n events: { [EVENT_NAME]: { schema: { properties: { [paramName]: {} } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['events', EVENT_NAME, 'schema', 'properties', paramName])\n expect(results[0]?.message).toContain('description')\n })\n\n test.each(PARAM_NAMES)('empty description should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n events: {\n [EVENT_NAME]: { schema: { properties: { [paramName]: { description: EMPTY_STRING } } } },\n },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['events', EVENT_NAME, 'schema', 'properties', paramName, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test.each(PARAM_NAMES)('valid description should not trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n events: {\n [EVENT_NAME]: { schema: { properties: { [paramName]: { description: TRUTHY_STRING } } } },\n },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('configuration-fields-must-have-a-title', (lint) => {\n test.each(PARAM_NAMES)('missing title should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [paramName]: { [ZUI]: {} } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['configuration', 'schema', 'properties', paramName, ZUI])\n expect(results[0]?.message).toContain('title')\n })\n\n test.each(PARAM_NAMES)('empty title should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [paramName]: { [ZUI]: { title: EMPTY_STRING } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['configuration', 'schema', 'properties', paramName, ZUI, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test.each(PARAM_NAMES)('valid title should not trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [paramName]: { [ZUI]: { title: TRUTHY_STRING } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('configuration-fields-must-have-a-description', (lint) => {\n test.each(PARAM_NAMES)('missing description should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [paramName]: {} } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['configuration', 'schema', 'properties', paramName])\n expect(results[0]?.message).toContain('description')\n })\n\n test.each(PARAM_NAMES)('empty description should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [paramName]: { description: EMPTY_STRING } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['configuration', 'schema', 'properties', paramName, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test.each(PARAM_NAMES)('valid description should not trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n configuration: { schema: { properties: { [paramName]: { description: TRUTHY_STRING } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('user-tags-should-have-a-title', (lint) => {\n test('missing title should trigger', async () => {\n // arrange\n const definition = { user: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['user', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('title')\n })\n\n test('empty title should trigger', async () => {\n // arrange\n const definition = { user: { tags: { [TAG_NAME]: { title: EMPTY_STRING } } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['user', 'tags', TAG_NAME, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test('valid title should not trigger', async () => {\n // arrange\n const definition = { user: { tags: { [TAG_NAME]: { title: TRUTHY_STRING } } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('user-tags-must-have-a-description', (lint) => {\n test('missing description should trigger', async () => {\n // arrange\n const definition = { user: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['user', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('description')\n })\n\n test('empty description should trigger', async () => {\n // arrange\n const definition = {\n user: { tags: { [TAG_NAME]: { description: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['user', 'tags', TAG_NAME, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test('valid description should not trigger', async () => {\n // arrange\n const definition = {\n user: { tags: { [TAG_NAME]: { description: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('conversation-tags-should-have-a-title', (lint) => {\n test('missing title should trigger', async () => {\n // arrange\n const definition = { conversation: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['conversation', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('title')\n })\n\n test('empty title should trigger', async () => {\n // arrange\n const definition = {\n conversation: { tags: { [TAG_NAME]: { title: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['conversation', 'tags', TAG_NAME, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test('valid title should not trigger', async () => {\n // arrange\n const definition = {\n conversation: { tags: { [TAG_NAME]: { title: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('conversation-tags-must-have-a-description', (lint) => {\n test('missing description should trigger', async () => {\n // arrange\n const definition = { conversation: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['conversation', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('description')\n })\n\n test('empty description should trigger', async () => {\n // arrange\n const definition = {\n conversation: { tags: { [TAG_NAME]: { description: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['conversation', 'tags', TAG_NAME, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test('valid description should not trigger', async () => {\n // arrange\n const definition = {\n conversation: { tags: { [TAG_NAME]: { description: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('message-tags-should-have-a-title', (lint) => {\n test('missing title should trigger', async () => {\n // arrange\n const definition = { message: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['message', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('title')\n })\n\n test('empty title should trigger', async () => {\n // arrange\n const definition = {\n message: { tags: { [TAG_NAME]: { title: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['message', 'tags', TAG_NAME, 'title'])\n expect(results[0]?.message).toContain('title')\n })\n\n test('valid title should not trigger', async () => {\n // arrange\n const definition = {\n message: { tags: { [TAG_NAME]: { title: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('message-tags-must-have-a-description', (lint) => {\n test('missing description should trigger', async () => {\n // arrange\n const definition = { message: { tags: { [TAG_NAME]: {} } } } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['message', 'tags', TAG_NAME])\n expect(results[0]?.message).toContain('description')\n })\n\n test('empty description should trigger', async () => {\n // arrange\n const definition = {\n message: { tags: { [TAG_NAME]: { description: EMPTY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['message', 'tags', TAG_NAME, 'description'])\n expect(results[0]?.message).toContain('description')\n })\n\n test('valid description should not trigger', async () => {\n // arrange\n const definition = {\n message: { tags: { [TAG_NAME]: { description: TRUTHY_STRING } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('legacy-zui-title-should-be-removed', (lint) => {\n test.each(PARAM_NAMES)('legacy zui title should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n configuration: {\n [LEGACY_ZUI]: { [paramName]: { title: TRUTHY_STRING } },\n schema: {},\n },\n events: { [EVENT_NAME]: { [LEGACY_ZUI]: { [paramName]: { title: TRUTHY_STRING } }, schema: {} } },\n states: { [STATE_NAME]: { [LEGACY_ZUI]: { [paramName]: { title: TRUTHY_STRING } }, schema: {} } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(3)\n expect(results[0]?.message).toContain('.title()')\n })\n})\n\ndescribeRule('legacy-zui-examples-should-be-removed', (lint) => {\n test.each(PARAM_NAMES)('legacy zui examples should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n configuration: {\n [LEGACY_ZUI]: { [paramName]: { examples: [TRUTHY_STRING] } },\n schema: {},\n },\n events: { [EVENT_NAME]: { [LEGACY_ZUI]: { [paramName]: { examples: [TRUTHY_STRING] } }, schema: {} } },\n states: { [STATE_NAME]: { [LEGACY_ZUI]: { [paramName]: { examples: [TRUTHY_STRING] } }, schema: {} } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(3)\n expect(results[0]?.message).toContain('examples')\n })\n})\n\ndescribeRule('state-fields-should-have-title', (lint) => {\n test.each(PARAM_NAMES)('missing title should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [paramName]: { [ZUI]: {} } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['states', STATE_NAME, 'schema', 'properties', paramName, ZUI])\n })\n\n test.each(PARAM_NAMES)('empty title should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [paramName]: { [ZUI]: { title: EMPTY_STRING } } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['states', STATE_NAME, 'schema', 'properties', paramName, ZUI, 'title'])\n })\n\n test.each(PARAM_NAMES)('valid title should not trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [paramName]: { [ZUI]: { title: TRUTHY_STRING } } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n\ndescribeRule('state-fields-must-have-description', (lint) => {\n test.each(PARAM_NAMES)('missing description should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [paramName]: {} } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['states', STATE_NAME, 'schema', 'properties', paramName])\n })\n\n test.each(PARAM_NAMES)('empty description should trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [paramName]: { description: EMPTY_STRING } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(1)\n expect(results[0]?.path).toEqual(['states', STATE_NAME, 'schema', 'properties', paramName, 'description'])\n })\n\n test.each(PARAM_NAMES)('valid description should not trigger (%s)', async (paramName) => {\n // arrange\n const definition = {\n states: { [STATE_NAME]: { schema: { properties: { [paramName]: { description: TRUTHY_STRING } } } } },\n } as const satisfies PartialDefinition\n\n // act\n const results = await lint(definition)\n\n // assert\n expect(results).toHaveLength(0)\n })\n})\n"],
5
+ "mappings": ";AAAA,oBAA6B;AAC7B,iBAA4B;AAC5B,oBAA0D;AAI1D,MAAM,mBAAe,kCAAkC,EAAE,sBAAW;AAEpE,MAAM,eAAe;AACrB,MAAM,gBAAgB;AACtB,MAAM,aAAa;AACnB,MAAM,aAAa;AACnB,MAAM,mBAAmB;AACzB,MAAM,cAAc,CAAC,YAAY,gBAAgB;AACjD,MAAM,WAAW;AACjB,MAAM,aAAa;AACnB,MAAM,MAAM;AACZ,MAAM,aAAa;AAEnB,aAAa,wCAAwC,CAAC,SAAS;AAC7D,qBAAK,KAAK,WAAW,EAAE,qCAAqC,OAAO,cAAc;AAE/E,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,IACrF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,WAAW,GAAG,CAAC;AAC/F,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,mCAAmC,OAAO,cAAc;AAE7E,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,EAAE,EAAE,EAAE;AAAA,MAC9F;AAAA,IACF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,WAAW,KAAK,OAAO,CAAC;AACxG,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,uCAAuC,OAAO,cAAc;AAEjF,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE,EAAE,EAAE,EAAE;AAAA,MAC/F;AAAA,IACF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,4CAA4C,CAAC,SAAS;AACjE,qBAAK,KAAK,WAAW,EAAE,2CAA2C,OAAO,cAAc;AAErF,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE;AAAA,IAC1E;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,SAAS,CAAC;AAC1F,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,yCAAyC,OAAO,cAAc;AAEnF,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,aAAa,aAAa,EAAE,EAAE,EAAE;AAAA,MACzF;AAAA,IACF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,WAAW,aAAa,CAAC;AACzG,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,6CAA6C,OAAO,cAAc;AAEvF,UAAM,aAAa;AAAA,MACjB,QAAQ;AAAA,QACN,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,aAAa,cAAc,EAAE,EAAE,EAAE;AAAA,MAC1F;AAAA,IACF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,0CAA0C,CAAC,SAAS;AAC/D,qBAAK,KAAK,WAAW,EAAE,qCAAqC,OAAO,cAAc;AAE/E,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE;AAAA,IAC1E;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,iBAAiB,UAAU,cAAc,WAAW,GAAG,CAAC;AAC1F,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,mCAAmC,OAAO,cAAc;AAE7E,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,EAAE,EAAE,EAAE;AAAA,IAC/F;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,iBAAiB,UAAU,cAAc,WAAW,KAAK,OAAO,CAAC;AACnG,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,uCAAuC,OAAO,cAAc;AAEjF,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE,EAAE,EAAE,EAAE;AAAA,IAChG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,gDAAgD,CAAC,SAAS;AACrE,qBAAK,KAAK,WAAW,EAAE,2CAA2C,OAAO,cAAc;AAErF,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE;AAAA,IAC/D;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,iBAAiB,UAAU,cAAc,SAAS,CAAC;AACrF,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,yCAAyC,OAAO,cAAc;AAEnF,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,aAAa,aAAa,EAAE,EAAE,EAAE;AAAA,IAC1F;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,iBAAiB,UAAU,cAAc,WAAW,aAAa,CAAC;AACpG,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,6CAA6C,OAAO,cAAc;AAEvF,UAAM,aAAa;AAAA,MACjB,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,aAAa,cAAc,EAAE,EAAE,EAAE;AAAA,IAC3F;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,iCAAiC,CAAC,SAAS;AACtD,0BAAK,gCAAgC,YAAY;AAE/C,UAAM,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAGxD,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,QAAQ,QAAQ,QAAQ,CAAC;AAC3D,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,8BAA8B,YAAY;AAE7C,UAAM,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,aAAa,EAAE,EAAE,EAAE;AAG7E,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,QAAQ,QAAQ,UAAU,OAAO,CAAC;AACpE,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,kCAAkC,YAAY;AAEjD,UAAM,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,cAAc,EAAE,EAAE,EAAE;AAG9E,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,qCAAqC,CAAC,SAAS;AAC1D,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAGxD,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,QAAQ,QAAQ,QAAQ,CAAC;AAC3D,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,oCAAoC,YAAY;AAEnD,UAAM,aAAa;AAAA,MACjB,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,aAAa,EAAE,EAAE;AAAA,IAC9D;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,QAAQ,QAAQ,UAAU,aAAa,CAAC;AAC1E,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,wCAAwC,YAAY;AAEvD,UAAM,aAAa;AAAA,MACjB,MAAM,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,cAAc,EAAE,EAAE;AAAA,IAC/D;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,yCAAyC,CAAC,SAAS;AAC9D,0BAAK,gCAAgC,YAAY;AAE/C,UAAM,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAGhE,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,gBAAgB,QAAQ,QAAQ,CAAC;AACnE,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,8BAA8B,YAAY;AAE7C,UAAM,aAAa;AAAA,MACjB,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,aAAa,EAAE,EAAE;AAAA,IAChE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,gBAAgB,QAAQ,UAAU,OAAO,CAAC;AAC5E,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,kCAAkC,YAAY;AAEjD,UAAM,aAAa;AAAA,MACjB,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,cAAc,EAAE,EAAE;AAAA,IACjE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,6CAA6C,CAAC,SAAS;AAClE,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAGhE,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,gBAAgB,QAAQ,QAAQ,CAAC;AACnE,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,oCAAoC,YAAY;AAEnD,UAAM,aAAa;AAAA,MACjB,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,aAAa,EAAE,EAAE;AAAA,IACtE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,gBAAgB,QAAQ,UAAU,aAAa,CAAC;AAClF,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,wCAAwC,YAAY;AAEvD,UAAM,aAAa;AAAA,MACjB,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,cAAc,EAAE,EAAE;AAAA,IACvE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,oCAAoC,CAAC,SAAS;AACzD,0BAAK,gCAAgC,YAAY;AAE/C,UAAM,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAG3D,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,QAAQ,QAAQ,CAAC;AAC9D,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,8BAA8B,YAAY;AAE7C,UAAM,aAAa;AAAA,MACjB,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,aAAa,EAAE,EAAE;AAAA,IAC3D;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,QAAQ,UAAU,OAAO,CAAC;AACvE,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,OAAO;AAAA,EAC/C,CAAC;AAED,0BAAK,kCAAkC,YAAY;AAEjD,UAAM,aAAa;AAAA,MACjB,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,OAAO,cAAc,EAAE,EAAE;AAAA,IAC5D;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,wCAAwC,CAAC,SAAS;AAC7D,0BAAK,sCAAsC,YAAY;AAErD,UAAM,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;AAG3D,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,QAAQ,QAAQ,CAAC;AAC9D,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,oCAAoC,YAAY;AAEnD,UAAM,aAAa;AAAA,MACjB,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,aAAa,EAAE,EAAE;AAAA,IACjE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,WAAW,QAAQ,UAAU,aAAa,CAAC;AAC7E,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,aAAa;AAAA,EACrD,CAAC;AAED,0BAAK,wCAAwC,YAAY;AAEvD,UAAM,aAAa;AAAA,MACjB,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,aAAa,cAAc,EAAE,EAAE;AAAA,IAClE;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,sCAAsC,CAAC,SAAS;AAC3D,qBAAK,KAAK,WAAW,EAAE,wCAAwC,OAAO,cAAc;AAElF,UAAM,aAAa;AAAA,MACjB,eAAe;AAAA,QACb,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,OAAO,cAAc,EAAE;AAAA,QACtD,QAAQ,CAAC;AAAA,MACX;AAAA,MACA,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,OAAO,cAAc,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE;AAAA,MAChG,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,OAAO,cAAc,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE;AAAA,IAClG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,UAAU;AAAA,EAClD,CAAC;AACH,CAAC;AAED,aAAa,yCAAyC,CAAC,SAAS;AAC9D,qBAAK,KAAK,WAAW,EAAE,2CAA2C,OAAO,cAAc;AAErF,UAAM,aAAa;AAAA,MACjB,eAAe;AAAA,QACb,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE;AAAA,QAC3D,QAAQ,CAAC;AAAA,MACX;AAAA,MACA,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE;AAAA,MACrG,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE;AAAA,IACvG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,OAAO,EAAE,UAAU,UAAU;AAAA,EAClD,CAAC;AACH,CAAC;AAED,aAAa,kCAAkC,CAAC,SAAS;AACvD,qBAAK,KAAK,WAAW,EAAE,qCAAqC,OAAO,cAAc;AAE/E,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,IACrF;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,WAAW,GAAG,CAAC;AAAA,EACjG,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,mCAAmC,OAAO,cAAc;AAE7E,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,IAC1G;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,WAAW,KAAK,OAAO,CAAC;AAAA,EAC1G,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,uCAAuC,OAAO,cAAc;AAEjF,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE;AAAA,IAC3G;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;AAED,aAAa,sCAAsC,CAAC,SAAS;AAC3D,qBAAK,KAAK,WAAW,EAAE,2CAA2C,OAAO,cAAc;AAErF,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE;AAAA,IAC1E;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,SAAS,CAAC;AAAA,EAC5F,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,yCAAyC,OAAO,cAAc;AAEnF,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,aAAa,aAAa,EAAE,EAAE,EAAE,EAAE;AAAA,IACrG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAC9B,8BAAO,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC,UAAU,YAAY,UAAU,cAAc,WAAW,aAAa,CAAC;AAAA,EAC3G,CAAC;AAED,qBAAK,KAAK,WAAW,EAAE,6CAA6C,OAAO,cAAc;AAEvF,UAAM,aAAa;AAAA,MACjB,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,EAAE,aAAa,cAAc,EAAE,EAAE,EAAE,EAAE;AAAA,IACtG;AAGA,UAAM,UAAU,MAAM,KAAK,UAAU;AAGrC,8BAAO,OAAO,EAAE,aAAa,CAAC;AAAA,EAChC,CAAC;AACH,CAAC;",
6
6
  "names": []
7
7
  }