@jsse/eslint-config 0.2.30 → 0.2.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @jsse/eslint-config
2
2
 
3
+ ## 0.2.32
4
+
5
+ ### Patch Changes
6
+
7
+ - update dep versions
8
+
9
+ ## 0.2.31
10
+
11
+ ### Patch Changes
12
+
13
+ - update dependencies"
14
+
3
15
  ## 0.2.30
4
16
 
5
17
  ### Patch Changes
package/dist/cli.cjs CHANGED
@@ -612,7 +612,7 @@ var CAC = class extends import_events.EventEmitter {
612
612
  var cac = (name = "") => new CAC(name);
613
613
 
614
614
  // src/generated/version.ts
615
- var VERSION = "0.2.30";
615
+ var VERSION = "0.2.32";
616
616
 
617
617
  // src/cli.ts
618
618
  var cli = cac("jsselint");
package/dist/cli.js CHANGED
@@ -588,7 +588,7 @@ var CAC = class extends EventEmitter {
588
588
  var cac = (name = "") => new CAC(name);
589
589
 
590
590
  // src/generated/version.ts
591
- var VERSION = "0.2.30";
591
+ var VERSION = "0.2.32";
592
592
 
593
593
  // src/cli.ts
594
594
  var cli = cac("jsselint");
@@ -14,6 +14,7 @@ export const requiresTypeChecking = [
14
14
  "@typescript-eslint/no-implied-eval",
15
15
  "@typescript-eslint/no-meaningless-void-operator",
16
16
  "@typescript-eslint/no-misused-promises",
17
+ "@typescript-eslint/no-misused-spread",
17
18
  "@typescript-eslint/no-mixed-enums",
18
19
  "@typescript-eslint/no-redundant-type-constituents",
19
20
  "@typescript-eslint/no-unnecessary-boolean-literal-compare",
@@ -259,7 +259,6 @@ export const fixableRules = {
259
259
  "@typescript-eslint/promise-function-async",
260
260
  "@typescript-eslint/return-await",
261
261
  "@typescript-eslint/sort-type-constituents",
262
- "@typescript-eslint/strict-boolean-expressions",
263
262
  "@typescript-eslint/use-unknown-in-catch-callback-variable",
264
263
  ],
265
264
  unicorn: [
@@ -1 +1 @@
1
- export declare const VERSION = "0.2.30";
1
+ export declare const VERSION = "0.2.32";
@@ -1 +1 @@
1
- export const VERSION = "0.2.30";
1
+ export const VERSION = "0.2.32";
@@ -22,27 +22,7 @@ export declare function importPluginReact(): Promise<{
22
22
  'forbid-elements': import("eslint").Rule.RuleModule;
23
23
  'forbid-foreign-prop-types': import("eslint").Rule.RuleModule;
24
24
  'forbid-prop-types': import("eslint").Rule.RuleModule;
25
- 'forward-ref-uses-ref': {
26
- meta: {
27
- docs: {
28
- description: string;
29
- category: string;
30
- recommended: boolean;
31
- url: string;
32
- };
33
- messages: {
34
- missingRefParameter: string;
35
- addRefParameter: string;
36
- removeForwardRef: string;
37
- };
38
- schema: undefined[];
39
- type: string;
40
- hasSuggestions: boolean;
41
- };
42
- create(context: any): {
43
- "FunctionExpression, ArrowFunctionExpression"(node: any): void;
44
- };
45
- };
25
+ 'forward-ref-uses-ref': import("eslint").Rule.RuleModule;
46
26
  'function-component-definition': import("eslint").Rule.RuleModule;
47
27
  'hook-use-state': import("eslint").Rule.RuleModule;
48
28
  'iframe-missing-sandbox': import("eslint").Rule.RuleModule;
@@ -67,23 +47,7 @@ export declare function importPluginReact(): Promise<{
67
47
  'jsx-no-constructed-context-values': import("eslint").Rule.RuleModule;
68
48
  'jsx-no-duplicate-props': import("eslint").Rule.RuleModule;
69
49
  'jsx-no-leaked-render': import("eslint").Rule.RuleModule;
70
- 'jsx-no-literals': {
71
- meta: import("eslint").Rule.RuleMetaData;
72
- create(context: any): (false & {
73
- Literal(node: any): void;
74
- JSXAttribute(node: any): void;
75
- JSXText(node: any): void;
76
- TemplateLiteral(node: any): void;
77
- }) | ({
78
- ImportDeclaration(node: any): void;
79
- VariableDeclaration(node: any): void;
80
- } & {
81
- Literal(node: any): void;
82
- JSXAttribute(node: any): void;
83
- JSXText(node: any): void;
84
- TemplateLiteral(node: any): void;
85
- });
86
- };
50
+ 'jsx-no-literals': import("eslint").Rule.RuleModule;
87
51
  'jsx-no-script-url': import("eslint").Rule.RuleModule;
88
52
  'jsx-no-target-blank': import("eslint").Rule.RuleModule;
89
53
  'jsx-no-useless-fragment': import("eslint").Rule.RuleModule;
@@ -94,22 +58,7 @@ export declare function importPluginReact(): Promise<{
94
58
  'jsx-fragments': import("eslint").Rule.RuleModule;
95
59
  'jsx-props-no-multi-spaces': import("eslint").Rule.RuleModule;
96
60
  'jsx-props-no-spreading': import("eslint").Rule.RuleModule;
97
- 'jsx-props-no-spread-multi': {
98
- meta: {
99
- docs: {
100
- description: string;
101
- category: string;
102
- recommended: boolean;
103
- url: string;
104
- };
105
- messages: {
106
- noMultiSpreading: string;
107
- };
108
- };
109
- create(context: any): {
110
- JSXOpeningElement(node: any): void;
111
- };
112
- };
61
+ 'jsx-props-no-spread-multi': import("eslint").Rule.RuleModule;
113
62
  'jsx-sort-default-props': import("eslint").Rule.RuleModule;
114
63
  'jsx-sort-props': import("eslint").Rule.RuleModule;
115
64
  'jsx-space-before-closing': import("eslint").Rule.RuleModule;
@@ -178,27 +127,7 @@ export declare function importPluginReact(): Promise<{
178
127
  'forbid-elements': import("eslint").Rule.RuleModule;
179
128
  'forbid-foreign-prop-types': import("eslint").Rule.RuleModule;
180
129
  'forbid-prop-types': import("eslint").Rule.RuleModule;
181
- 'forward-ref-uses-ref': {
182
- meta: {
183
- docs: {
184
- description: string;
185
- category: string;
186
- recommended: boolean;
187
- url: string;
188
- };
189
- messages: {
190
- missingRefParameter: string;
191
- addRefParameter: string;
192
- removeForwardRef: string;
193
- };
194
- schema: undefined[];
195
- type: string;
196
- hasSuggestions: boolean;
197
- };
198
- create(context: any): {
199
- "FunctionExpression, ArrowFunctionExpression"(node: any): void;
200
- };
201
- };
130
+ 'forward-ref-uses-ref': import("eslint").Rule.RuleModule;
202
131
  'function-component-definition': import("eslint").Rule.RuleModule;
203
132
  'hook-use-state': import("eslint").Rule.RuleModule;
204
133
  'iframe-missing-sandbox': import("eslint").Rule.RuleModule;
@@ -223,23 +152,7 @@ export declare function importPluginReact(): Promise<{
223
152
  'jsx-no-constructed-context-values': import("eslint").Rule.RuleModule;
224
153
  'jsx-no-duplicate-props': import("eslint").Rule.RuleModule;
225
154
  'jsx-no-leaked-render': import("eslint").Rule.RuleModule;
226
- 'jsx-no-literals': {
227
- meta: import("eslint").Rule.RuleMetaData;
228
- create(context: any): (false & {
229
- Literal(node: any): void;
230
- JSXAttribute(node: any): void;
231
- JSXText(node: any): void;
232
- TemplateLiteral(node: any): void;
233
- }) | ({
234
- ImportDeclaration(node: any): void;
235
- VariableDeclaration(node: any): void;
236
- } & {
237
- Literal(node: any): void;
238
- JSXAttribute(node: any): void;
239
- JSXText(node: any): void;
240
- TemplateLiteral(node: any): void;
241
- });
242
- };
155
+ 'jsx-no-literals': import("eslint").Rule.RuleModule;
243
156
  'jsx-no-script-url': import("eslint").Rule.RuleModule;
244
157
  'jsx-no-target-blank': import("eslint").Rule.RuleModule;
245
158
  'jsx-no-useless-fragment': import("eslint").Rule.RuleModule;
@@ -250,22 +163,7 @@ export declare function importPluginReact(): Promise<{
250
163
  'jsx-fragments': import("eslint").Rule.RuleModule;
251
164
  'jsx-props-no-multi-spaces': import("eslint").Rule.RuleModule;
252
165
  'jsx-props-no-spreading': import("eslint").Rule.RuleModule;
253
- 'jsx-props-no-spread-multi': {
254
- meta: {
255
- docs: {
256
- description: string;
257
- category: string;
258
- recommended: boolean;
259
- url: string;
260
- };
261
- messages: {
262
- noMultiSpreading: string;
263
- };
264
- };
265
- create(context: any): {
266
- JSXOpeningElement(node: any): void;
267
- };
268
- };
166
+ 'jsx-props-no-spread-multi': import("eslint").Rule.RuleModule;
269
167
  'jsx-sort-default-props': import("eslint").Rule.RuleModule;
270
168
  'jsx-sort-props': import("eslint").Rule.RuleModule;
271
169
  'jsx-space-before-closing': import("eslint").Rule.RuleModule;
@@ -331,28 +229,28 @@ export declare function importPluginReact(): Promise<{
331
229
  };
332
230
  };
333
231
  rules: {
334
- "react/display-name": number;
335
- "react/jsx-key": number;
336
- "react/jsx-no-comment-textnodes": number;
337
- "react/jsx-no-duplicate-props": number;
338
- "react/jsx-no-target-blank": number;
339
- "react/jsx-no-undef": number;
340
- "react/jsx-uses-react": number;
341
- "react/jsx-uses-vars": number;
342
- "react/no-children-prop": number;
343
- "react/no-danger-with-children": number;
344
- "react/no-deprecated": number;
345
- "react/no-direct-mutation-state": number;
346
- "react/no-find-dom-node": number;
347
- "react/no-is-mounted": number;
348
- "react/no-render-return-value": number;
349
- "react/no-string-refs": number;
350
- "react/no-unescaped-entities": number;
351
- "react/no-unknown-property": number;
352
- "react/no-unsafe": number;
353
- "react/prop-types": number;
354
- "react/react-in-jsx-scope": number;
355
- "react/require-render-return": number;
232
+ "react/display-name": 2;
233
+ "react/jsx-key": 2;
234
+ "react/jsx-no-comment-textnodes": 2;
235
+ "react/jsx-no-duplicate-props": 2;
236
+ "react/jsx-no-target-blank": 2;
237
+ "react/jsx-no-undef": 2;
238
+ "react/jsx-uses-react": 2;
239
+ "react/jsx-uses-vars": 2;
240
+ "react/no-children-prop": 2;
241
+ "react/no-danger-with-children": 2;
242
+ "react/no-deprecated": 2;
243
+ "react/no-direct-mutation-state": 2;
244
+ "react/no-find-dom-node": 2;
245
+ "react/no-is-mounted": 2;
246
+ "react/no-render-return-value": 2;
247
+ "react/no-string-refs": 2;
248
+ "react/no-unescaped-entities": 2;
249
+ "react/no-unknown-property": 2;
250
+ "react/no-unsafe": 0;
251
+ "react/prop-types": 2;
252
+ "react/react-in-jsx-scope": 2;
253
+ "react/require-render-return": 2;
356
254
  };
357
255
  };
358
256
  all: {
@@ -373,12 +271,13 @@ export declare function importPluginReact(): Promise<{
373
271
  jsxPragma: any;
374
272
  };
375
273
  rules: {
376
- "react/react-in-jsx-scope": number;
377
- "react/jsx-uses-react": number;
274
+ "react/react-in-jsx-scope": 0;
275
+ "react/jsx-uses-react": 0;
378
276
  };
379
277
  };
278
+ flat: Record<string, import("eslint-plugin-react").ReactFlatConfig>;
380
279
  } & {
381
- flat?: Record<string, import("eslint-plugin-react").ReactFlatConfig>;
280
+ flat: Record<string, import("eslint-plugin-react").ReactFlatConfig>;
382
281
  };
383
282
  };
384
283
  }>;
@@ -386,7 +285,27 @@ export declare function importPluginReactHooks(): Promise<{
386
285
  pluginReactHooks: any;
387
286
  }>;
388
287
  export declare function importPluginReactRefresh(): Promise<{
389
- pluginReactRefresh: typeof import("eslint-plugin-react-refresh");
288
+ pluginReactRefresh: {
289
+ rules: Record<string, any>;
290
+ configs: {
291
+ recommended: {
292
+ plugins: {
293
+ "react-refresh": {
294
+ rules: Record<string, any>;
295
+ };
296
+ };
297
+ rules: Record<string, any>;
298
+ };
299
+ vite: {
300
+ plugins: {
301
+ "react-refresh": {
302
+ rules: Record<string, any>;
303
+ };
304
+ };
305
+ rules: Record<string, any>;
306
+ };
307
+ };
308
+ };
390
309
  }>;
391
310
  export declare function importReactPlugins(): Promise<{
392
311
  pluginReact: {
@@ -402,27 +321,7 @@ export declare function importReactPlugins(): Promise<{
402
321
  'forbid-elements': import("eslint").Rule.RuleModule;
403
322
  'forbid-foreign-prop-types': import("eslint").Rule.RuleModule;
404
323
  'forbid-prop-types': import("eslint").Rule.RuleModule;
405
- 'forward-ref-uses-ref': {
406
- meta: {
407
- docs: {
408
- description: string;
409
- category: string;
410
- recommended: boolean;
411
- url: string;
412
- };
413
- messages: {
414
- missingRefParameter: string;
415
- addRefParameter: string;
416
- removeForwardRef: string;
417
- };
418
- schema: undefined[];
419
- type: string;
420
- hasSuggestions: boolean;
421
- };
422
- create(context: any): {
423
- "FunctionExpression, ArrowFunctionExpression"(node: any): void;
424
- };
425
- };
324
+ 'forward-ref-uses-ref': import("eslint").Rule.RuleModule;
426
325
  'function-component-definition': import("eslint").Rule.RuleModule;
427
326
  'hook-use-state': import("eslint").Rule.RuleModule;
428
327
  'iframe-missing-sandbox': import("eslint").Rule.RuleModule;
@@ -447,23 +346,7 @@ export declare function importReactPlugins(): Promise<{
447
346
  'jsx-no-constructed-context-values': import("eslint").Rule.RuleModule;
448
347
  'jsx-no-duplicate-props': import("eslint").Rule.RuleModule;
449
348
  'jsx-no-leaked-render': import("eslint").Rule.RuleModule;
450
- 'jsx-no-literals': {
451
- meta: import("eslint").Rule.RuleMetaData;
452
- create(context: any): (false & {
453
- Literal(node: any): void;
454
- JSXAttribute(node: any): void;
455
- JSXText(node: any): void;
456
- TemplateLiteral(node: any): void;
457
- }) | ({
458
- ImportDeclaration(node: any): void;
459
- VariableDeclaration(node: any): void;
460
- } & {
461
- Literal(node: any): void;
462
- JSXAttribute(node: any): void;
463
- JSXText(node: any): void;
464
- TemplateLiteral(node: any): void;
465
- });
466
- };
349
+ 'jsx-no-literals': import("eslint").Rule.RuleModule;
467
350
  'jsx-no-script-url': import("eslint").Rule.RuleModule;
468
351
  'jsx-no-target-blank': import("eslint").Rule.RuleModule;
469
352
  'jsx-no-useless-fragment': import("eslint").Rule.RuleModule;
@@ -474,22 +357,7 @@ export declare function importReactPlugins(): Promise<{
474
357
  'jsx-fragments': import("eslint").Rule.RuleModule;
475
358
  'jsx-props-no-multi-spaces': import("eslint").Rule.RuleModule;
476
359
  'jsx-props-no-spreading': import("eslint").Rule.RuleModule;
477
- 'jsx-props-no-spread-multi': {
478
- meta: {
479
- docs: {
480
- description: string;
481
- category: string;
482
- recommended: boolean;
483
- url: string;
484
- };
485
- messages: {
486
- noMultiSpreading: string;
487
- };
488
- };
489
- create(context: any): {
490
- JSXOpeningElement(node: any): void;
491
- };
492
- };
360
+ 'jsx-props-no-spread-multi': import("eslint").Rule.RuleModule;
493
361
  'jsx-sort-default-props': import("eslint").Rule.RuleModule;
494
362
  'jsx-sort-props': import("eslint").Rule.RuleModule;
495
363
  'jsx-space-before-closing': import("eslint").Rule.RuleModule;
@@ -558,27 +426,7 @@ export declare function importReactPlugins(): Promise<{
558
426
  'forbid-elements': import("eslint").Rule.RuleModule;
559
427
  'forbid-foreign-prop-types': import("eslint").Rule.RuleModule;
560
428
  'forbid-prop-types': import("eslint").Rule.RuleModule;
561
- 'forward-ref-uses-ref': {
562
- meta: {
563
- docs: {
564
- description: string;
565
- category: string;
566
- recommended: boolean;
567
- url: string;
568
- };
569
- messages: {
570
- missingRefParameter: string;
571
- addRefParameter: string;
572
- removeForwardRef: string;
573
- };
574
- schema: undefined[];
575
- type: string;
576
- hasSuggestions: boolean;
577
- };
578
- create(context: any): {
579
- "FunctionExpression, ArrowFunctionExpression"(node: any): void;
580
- };
581
- };
429
+ 'forward-ref-uses-ref': import("eslint").Rule.RuleModule;
582
430
  'function-component-definition': import("eslint").Rule.RuleModule;
583
431
  'hook-use-state': import("eslint").Rule.RuleModule;
584
432
  'iframe-missing-sandbox': import("eslint").Rule.RuleModule;
@@ -603,23 +451,7 @@ export declare function importReactPlugins(): Promise<{
603
451
  'jsx-no-constructed-context-values': import("eslint").Rule.RuleModule;
604
452
  'jsx-no-duplicate-props': import("eslint").Rule.RuleModule;
605
453
  'jsx-no-leaked-render': import("eslint").Rule.RuleModule;
606
- 'jsx-no-literals': {
607
- meta: import("eslint").Rule.RuleMetaData;
608
- create(context: any): (false & {
609
- Literal(node: any): void;
610
- JSXAttribute(node: any): void;
611
- JSXText(node: any): void;
612
- TemplateLiteral(node: any): void;
613
- }) | ({
614
- ImportDeclaration(node: any): void;
615
- VariableDeclaration(node: any): void;
616
- } & {
617
- Literal(node: any): void;
618
- JSXAttribute(node: any): void;
619
- JSXText(node: any): void;
620
- TemplateLiteral(node: any): void;
621
- });
622
- };
454
+ 'jsx-no-literals': import("eslint").Rule.RuleModule;
623
455
  'jsx-no-script-url': import("eslint").Rule.RuleModule;
624
456
  'jsx-no-target-blank': import("eslint").Rule.RuleModule;
625
457
  'jsx-no-useless-fragment': import("eslint").Rule.RuleModule;
@@ -630,22 +462,7 @@ export declare function importReactPlugins(): Promise<{
630
462
  'jsx-fragments': import("eslint").Rule.RuleModule;
631
463
  'jsx-props-no-multi-spaces': import("eslint").Rule.RuleModule;
632
464
  'jsx-props-no-spreading': import("eslint").Rule.RuleModule;
633
- 'jsx-props-no-spread-multi': {
634
- meta: {
635
- docs: {
636
- description: string;
637
- category: string;
638
- recommended: boolean;
639
- url: string;
640
- };
641
- messages: {
642
- noMultiSpreading: string;
643
- };
644
- };
645
- create(context: any): {
646
- JSXOpeningElement(node: any): void;
647
- };
648
- };
465
+ 'jsx-props-no-spread-multi': import("eslint").Rule.RuleModule;
649
466
  'jsx-sort-default-props': import("eslint").Rule.RuleModule;
650
467
  'jsx-sort-props': import("eslint").Rule.RuleModule;
651
468
  'jsx-space-before-closing': import("eslint").Rule.RuleModule;
@@ -711,28 +528,28 @@ export declare function importReactPlugins(): Promise<{
711
528
  };
712
529
  };
713
530
  rules: {
714
- "react/display-name": number;
715
- "react/jsx-key": number;
716
- "react/jsx-no-comment-textnodes": number;
717
- "react/jsx-no-duplicate-props": number;
718
- "react/jsx-no-target-blank": number;
719
- "react/jsx-no-undef": number;
720
- "react/jsx-uses-react": number;
721
- "react/jsx-uses-vars": number;
722
- "react/no-children-prop": number;
723
- "react/no-danger-with-children": number;
724
- "react/no-deprecated": number;
725
- "react/no-direct-mutation-state": number;
726
- "react/no-find-dom-node": number;
727
- "react/no-is-mounted": number;
728
- "react/no-render-return-value": number;
729
- "react/no-string-refs": number;
730
- "react/no-unescaped-entities": number;
731
- "react/no-unknown-property": number;
732
- "react/no-unsafe": number;
733
- "react/prop-types": number;
734
- "react/react-in-jsx-scope": number;
735
- "react/require-render-return": number;
531
+ "react/display-name": 2;
532
+ "react/jsx-key": 2;
533
+ "react/jsx-no-comment-textnodes": 2;
534
+ "react/jsx-no-duplicate-props": 2;
535
+ "react/jsx-no-target-blank": 2;
536
+ "react/jsx-no-undef": 2;
537
+ "react/jsx-uses-react": 2;
538
+ "react/jsx-uses-vars": 2;
539
+ "react/no-children-prop": 2;
540
+ "react/no-danger-with-children": 2;
541
+ "react/no-deprecated": 2;
542
+ "react/no-direct-mutation-state": 2;
543
+ "react/no-find-dom-node": 2;
544
+ "react/no-is-mounted": 2;
545
+ "react/no-render-return-value": 2;
546
+ "react/no-string-refs": 2;
547
+ "react/no-unescaped-entities": 2;
548
+ "react/no-unknown-property": 2;
549
+ "react/no-unsafe": 0;
550
+ "react/prop-types": 2;
551
+ "react/react-in-jsx-scope": 2;
552
+ "react/require-render-return": 2;
736
553
  };
737
554
  };
738
555
  all: {
@@ -753,16 +570,37 @@ export declare function importReactPlugins(): Promise<{
753
570
  jsxPragma: any;
754
571
  };
755
572
  rules: {
756
- "react/react-in-jsx-scope": number;
757
- "react/jsx-uses-react": number;
573
+ "react/react-in-jsx-scope": 0;
574
+ "react/jsx-uses-react": 0;
758
575
  };
759
576
  };
577
+ flat: Record<string, import("eslint-plugin-react").ReactFlatConfig>;
760
578
  } & {
761
- flat?: Record<string, import("eslint-plugin-react").ReactFlatConfig>;
579
+ flat: Record<string, import("eslint-plugin-react").ReactFlatConfig>;
762
580
  };
763
581
  };
764
582
  pluginReactHooks: any;
765
- pluginReactRefresh: typeof import("eslint-plugin-react-refresh");
583
+ pluginReactRefresh: {
584
+ rules: Record<string, any>;
585
+ configs: {
586
+ recommended: {
587
+ plugins: {
588
+ "react-refresh": {
589
+ rules: Record<string, any>;
590
+ };
591
+ };
592
+ rules: Record<string, any>;
593
+ };
594
+ vite: {
595
+ plugins: {
596
+ "react-refresh": {
597
+ rules: Record<string, any>;
598
+ };
599
+ };
600
+ rules: Record<string, any>;
601
+ };
602
+ };
603
+ };
766
604
  }>;
767
605
  export declare function importParserJsonc(): Promise<{
768
606
  parserJsonc: typeof import("jsonc-eslint-parser");
@@ -1698,9 +1536,7 @@ export declare function importYmlLibs(): Promise<{
1698
1536
  };
1699
1537
  }>;
1700
1538
  export declare function importPluginMarkdown(): Promise<{
1701
- pluginMarkdown: import("eslint").ESLint.Plugin & {
1702
- languages: Record<string, import("@eslint/markdown").Language>;
1703
- };
1539
+ pluginMarkdown: typeof import("@eslint/markdown").default;
1704
1540
  }>;
1705
1541
  export declare function importPluginJsdoc(): Promise<{
1706
1542
  pluginJsdoc: import("eslint").ESLint.Plugin & {