@gaia-react/lint 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -48
- package/dist/configs/base.d.ts +1 -1
- package/dist/configs/base.d.ts.map +1 -1
- package/dist/configs/guardrails.d.ts +1 -1
- package/dist/configs/guardrails.d.ts.map +1 -1
- package/dist/configs/ignores.d.ts +10 -2
- package/dist/configs/ignores.d.ts.map +1 -1
- package/dist/configs/style-hygiene.d.ts +1 -1
- package/dist/configs/style-hygiene.d.ts.map +1 -1
- package/dist/index.d.ts +44 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +442 -431
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -17,44 +17,58 @@ verbatim and adjust the override block at the bottom for your project.
|
|
|
17
17
|
import gaiaLint from '@gaia-react/lint';
|
|
18
18
|
import {defineConfig} from 'eslint/config';
|
|
19
19
|
|
|
20
|
+
const lint = gaiaLint();
|
|
21
|
+
|
|
20
22
|
export default defineConfig([
|
|
21
|
-
...
|
|
22
|
-
...
|
|
23
|
-
...
|
|
24
|
-
...
|
|
25
|
-
...
|
|
26
|
-
...
|
|
27
|
-
...
|
|
28
|
-
...
|
|
29
|
-
...
|
|
23
|
+
...lint.ignores,
|
|
24
|
+
...lint.base,
|
|
25
|
+
...lint.react,
|
|
26
|
+
...lint.testing,
|
|
27
|
+
...lint.storybook,
|
|
28
|
+
...lint.playwright,
|
|
29
|
+
...lint.styleHygiene,
|
|
30
|
+
...lint.guardrails,
|
|
31
|
+
...lint.betterTailwind({
|
|
30
32
|
entryPoint: './app/styles/tailwind.css',
|
|
31
33
|
ignore: ['plain-link', 'plain-table'],
|
|
32
34
|
}),
|
|
33
|
-
...
|
|
35
|
+
...lint.prettier,
|
|
34
36
|
]);
|
|
35
37
|
```
|
|
36
38
|
|
|
37
|
-
##
|
|
39
|
+
## Factory options
|
|
40
|
+
|
|
41
|
+
`gaiaLint(opts?)` returns a bundle of config blocks. Call it once at the
|
|
42
|
+
top of `eslint.config.mjs` and spread the returned configs into
|
|
43
|
+
`defineConfig`.
|
|
44
|
+
|
|
45
|
+
| Option | Type | Default | Description |
|
|
46
|
+
| ----------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
47
|
+
| `sourceDir` | `string` | `'app'` | Project source directory (relative to repo root). Used to scope filename conventions, hook-folder rules, and the `no-relative-import-paths` root path. |
|
|
48
|
+
|
|
49
|
+
Non-GAIA projects that store source under `src/` (or any other path):
|
|
50
|
+
|
|
51
|
+
```js
|
|
52
|
+
const lint = gaiaLint({sourceDir: 'src'});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
That single call rebinds `base`, `styleHygiene`, and `guardrails` to the
|
|
56
|
+
new source root — no per-config override blocks needed.
|
|
57
|
+
|
|
58
|
+
## Bundle shape
|
|
38
59
|
|
|
39
|
-
|
|
|
60
|
+
| Property | Shape | Includes | Required? |
|
|
40
61
|
| ---------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |
|
|
41
62
|
| `base` | `Linter.Config[]` | JS recommended, TypeScript (typescript-eslint), `import-x`, `eslint-comments`, `prefer-arrow-functions`, lodash/underscore guard | required |
|
|
42
63
|
| `react` | `Linter.Config[]` | `eslint-plugin-react`, `react-hooks`, `jsx-a11y`, GAIA-specific React rules | required for React apps |
|
|
43
64
|
| `styleHygiene` | `Linter.Config[]` | `canonical`, `perfectionist`, `unicorn`, `unused-imports`, `check-file` | required |
|
|
44
|
-
| `guardrails` | `Linter.Config[]` | `no-enum` (custom), `no-switch` (custom), `no-relative-import-paths`, `sonarjs`, `eslint-comments`, `import-x`, `prefer-arrow-functions`
|
|
65
|
+
| `guardrails` | `Linter.Config[]` | `no-enum` (custom), `no-switch` (custom), `no-jsx-iife` (custom), `no-relative-import-paths`, `sonarjs`, `eslint-comments`, `import-x`, `prefer-arrow-functions` | required |
|
|
45
66
|
| `testing` | `Linter.Config[]` | Vitest + Testing Library config scoped to `*.test.*` and `test/` | optional |
|
|
46
67
|
| `storybook` | `Linter.Config[]` | `eslint-plugin-storybook` scoped to `*.stories.*` | optional |
|
|
47
68
|
| `playwright` | `Linter.Config[]` | `eslint-plugin-playwright` scoped to `e2e/` | optional |
|
|
48
69
|
| `prettier` | `Linter.Config[]` | `eslint-config-prettier` — must be **last** to disable formatting rules | required if using Prettier |
|
|
49
70
|
| `betterTailwind` | `(opts) => Linter.Config[]` | `eslint-plugin-better-tailwindcss` factory; takes `entryPoint` (path to Tailwind entry CSS) and optional `ignore` (class names to skip) | optional |
|
|
50
|
-
| `ignores` | `(opts?) => Linter.Config[]`
|
|
51
|
-
|
|
52
|
-
The default export bundles every named export:
|
|
53
|
-
|
|
54
|
-
```js
|
|
55
|
-
import gaiaLint from '@gaia-react/lint';
|
|
56
|
-
// gaiaLint.base, gaiaLint.react, gaiaLint.betterTailwind({...}), ...
|
|
57
|
-
```
|
|
71
|
+
| `ignores` | `Iterable<Linter.Config> & ((opts?) => Linter.Config[])` | `includeIgnoreFile` helper plus GAIA defaults. Spread directly for defaults (`...lint.ignores`) or call with options to override (`...lint.ignores({extra: ['.gaia/**']})`). | recommended |
|
|
58
72
|
|
|
59
73
|
## Override patterns
|
|
60
74
|
|
|
@@ -65,8 +79,8 @@ gaia-lint spreads to disable, change, or scope rules.
|
|
|
65
79
|
|
|
66
80
|
```js
|
|
67
81
|
export default defineConfig([
|
|
68
|
-
...
|
|
69
|
-
...
|
|
82
|
+
...lint.base,
|
|
83
|
+
...lint.react,
|
|
70
84
|
{rules: {'sonarjs/cognitive-complexity': 'off'}},
|
|
71
85
|
]);
|
|
72
86
|
```
|
|
@@ -75,8 +89,8 @@ export default defineConfig([
|
|
|
75
89
|
|
|
76
90
|
```js
|
|
77
91
|
export default defineConfig([
|
|
78
|
-
...
|
|
79
|
-
...
|
|
92
|
+
...lint.base,
|
|
93
|
+
...lint.react,
|
|
80
94
|
{
|
|
81
95
|
files: ['app/legacy/**'],
|
|
82
96
|
rules: {'sonarjs/cognitive-complexity': 'off'},
|
|
@@ -88,7 +102,7 @@ export default defineConfig([
|
|
|
88
102
|
|
|
89
103
|
```js
|
|
90
104
|
export default defineConfig([
|
|
91
|
-
...
|
|
105
|
+
...lint.base,
|
|
92
106
|
{
|
|
93
107
|
languageOptions: {
|
|
94
108
|
parserOptions: {project: './tsconfig.eslint.json'},
|
|
@@ -103,8 +117,8 @@ export default defineConfig([
|
|
|
103
117
|
import myPlugin from 'eslint-plugin-my-plugin';
|
|
104
118
|
|
|
105
119
|
export default defineConfig([
|
|
106
|
-
...
|
|
107
|
-
...
|
|
120
|
+
...lint.base,
|
|
121
|
+
...lint.react,
|
|
108
122
|
{
|
|
109
123
|
plugins: {'my-plugin': myPlugin},
|
|
110
124
|
rules: {'my-plugin/some-rule': 'error'},
|
|
@@ -129,7 +143,7 @@ Supported versions:
|
|
|
129
143
|
|
|
130
144
|
## Custom rules included
|
|
131
145
|
|
|
132
|
-
|
|
146
|
+
Three rules are implemented inside this package and ship as part of
|
|
133
147
|
`guardrails`.
|
|
134
148
|
|
|
135
149
|
### `no-enum`
|
|
@@ -173,13 +187,23 @@ Opt out for a file or block:
|
|
|
173
187
|
{files: ['src/parser/**'], rules: {'no-switch/no-switch': 'off'}}
|
|
174
188
|
```
|
|
175
189
|
|
|
190
|
+
### `no-jsx-iife`
|
|
191
|
+
|
|
192
|
+
Forbids IIFEs (`{(() => { ... })()}`) inside JSX expression containers in `.tsx` and `.jsx` files. IIFEs obscure intent and allocate a new function on every render. Compute the value in a variable before the return statement, or use an inline `&&` expression instead.
|
|
193
|
+
|
|
194
|
+
Opt out for a file or block:
|
|
195
|
+
|
|
196
|
+
```js
|
|
197
|
+
{files: ['src/legacy/**'], rules: {'no-jsx-iife/no-jsx-iife': 'off'}}
|
|
198
|
+
```
|
|
199
|
+
|
|
176
200
|
## Tailwind / better-tailwindcss factory
|
|
177
201
|
|
|
178
202
|
`betterTailwind` is a factory because the underlying plugin needs to know
|
|
179
203
|
where your Tailwind entry CSS file lives.
|
|
180
204
|
|
|
181
205
|
```js
|
|
182
|
-
...
|
|
206
|
+
...lint.betterTailwind({
|
|
183
207
|
entryPoint: './app/styles/tailwind.css',
|
|
184
208
|
ignore: ['plain-link', 'plain-table'],
|
|
185
209
|
}),
|
|
@@ -193,37 +217,50 @@ where your Tailwind entry CSS file lives.
|
|
|
193
217
|
## Ignores factory
|
|
194
218
|
|
|
195
219
|
`ignores` produces a leading flat-config block that merges your
|
|
196
|
-
`.gitignore` plus GAIA defaults.
|
|
220
|
+
`.gitignore` plus GAIA defaults. `.gitignore` is picked up automatically
|
|
221
|
+
if it exists at the project root — no need to declare it.
|
|
222
|
+
|
|
223
|
+
`lint.ignores` is dual-shape: spread it directly for the default case
|
|
224
|
+
(no call), or call it with options to override.
|
|
197
225
|
|
|
198
226
|
```js
|
|
199
|
-
...
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}),
|
|
227
|
+
...lint.ignores, // default: auto .gitignore + GAIA defaults
|
|
228
|
+
...lint.ignores({extra: ['coverage/**']}), // + extra globs
|
|
229
|
+
...lint.ignores({gitignore: 'config/.gitignore'}), // override the path
|
|
230
|
+
...lint.ignores({gitignore: false}), // opt out of the merge
|
|
203
231
|
```
|
|
204
232
|
|
|
205
|
-
| Option | Type
|
|
206
|
-
| ---------- |
|
|
207
|
-
| `gitignore`| `string`
|
|
208
|
-
| `extra` | `string[]`
|
|
233
|
+
| Option | Type | Required | Description |
|
|
234
|
+
| ---------- | ----------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
235
|
+
| `gitignore`| `string \| false` | no | Path to a `.gitignore` file (relative to `cwd` or absolute). Defaults to `'.gitignore'`. Silently skipped if the resolved path does not exist. Pass `false` to opt out entirely. |
|
|
236
|
+
| `extra` | `string[]` | no | Extra ignore globs merged with GAIA defaults. |
|
|
209
237
|
|
|
210
238
|
## GAIA folder conventions baked into `check-file`
|
|
211
239
|
|
|
212
|
-
The `check-file` rules in `styleHygiene` encode GAIA's folder layout
|
|
240
|
+
The `check-file` rules in `styleHygiene` encode GAIA's folder layout (with
|
|
241
|
+
`sourceDir` substituted for the literal `app/` prefix):
|
|
213
242
|
|
|
214
|
-
-
|
|
215
|
-
-
|
|
216
|
-
-
|
|
243
|
+
- `<sourceDir>/components/**` — component file naming
|
|
244
|
+
- `<sourceDir>/pages/**` — route/page file naming
|
|
245
|
+
- `<sourceDir>/hooks/**` — hook file naming (`use-*.ts`)
|
|
217
246
|
- `test/**` — test harness naming
|
|
218
247
|
|
|
219
|
-
|
|
220
|
-
`check-file/*` rules **after** the `styleHygiene` spread:
|
|
248
|
+
For most non-GAIA layouts, passing `sourceDir` to the factory is enough:
|
|
221
249
|
|
|
222
250
|
```js
|
|
251
|
+
const lint = gaiaLint({sourceDir: 'src'});
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
If the convention itself differs (e.g. PascalCase component files instead
|
|
255
|
+
of `index.tsx`), override the relevant `check-file/*` rules **after** the
|
|
256
|
+
`styleHygiene` spread:
|
|
257
|
+
|
|
258
|
+
```js
|
|
259
|
+
const lint = gaiaLint({sourceDir: 'src'});
|
|
260
|
+
|
|
223
261
|
export default defineConfig([
|
|
224
|
-
...
|
|
225
|
-
...
|
|
226
|
-
// Project uses src/ instead of app/
|
|
262
|
+
...lint.base,
|
|
263
|
+
...lint.styleHygiene,
|
|
227
264
|
{
|
|
228
265
|
files: ['src/components/**'],
|
|
229
266
|
rules: {
|
package/dist/configs/base.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/configs/base.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAS,MAAM,EAAC,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/configs/base.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAS,MAAM,EAAC,MAAM,QAAQ,CAAC;AAgT3C,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,KAAG,MAAM,CAAC,MAAM,EAS1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../src/configs/guardrails.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../src/configs/guardrails.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAmGnC,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,MAAM,CAAC,MAAM,EAMhE,CAAC"}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import type { Linter } from 'eslint';
|
|
2
2
|
export type GaiaLintIgnoresOptions = {
|
|
3
|
-
/**
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Path to a `.gitignore` file to merge in. Resolved from `process.cwd()`
|
|
5
|
+
* if relative. Pass `false` to skip the gitignore merge entirely.
|
|
6
|
+
*
|
|
7
|
+
* If the resolved path does not exist, the merge is silently skipped —
|
|
8
|
+
* projects without a `.gitignore` don't need to opt out explicitly.
|
|
9
|
+
*
|
|
10
|
+
* @default '.gitignore'
|
|
11
|
+
*/
|
|
12
|
+
gitignore?: string | false;
|
|
5
13
|
/** Extra ignore globs to merge with GAIA defaults. */
|
|
6
14
|
extra?: string[];
|
|
7
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignores.d.ts","sourceRoot":"","sources":["../../src/configs/ignores.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ignores.d.ts","sourceRoot":"","sources":["../../src/configs/ignores.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAInC,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAoBF;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,sBAAsB,KAAG,MAAM,CAAC,MAAM,EAmBpE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style-hygiene.d.ts","sourceRoot":"","sources":["../../src/configs/style-hygiene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAsQnC,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"style-hygiene.d.ts","sourceRoot":"","sources":["../../src/configs/style-hygiene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAsQnC,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,KAAG,MAAM,CAAC,MAAM,EAMlE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,34 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export {
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
import { guardrails } from './configs/guardrails.js';
|
|
15
|
-
import { testing } from './configs/testing.js';
|
|
16
|
-
import { storybook } from './configs/storybook.js';
|
|
17
|
-
import { playwright } from './configs/playwright.js';
|
|
18
|
-
import { prettier } from './configs/prettier.js';
|
|
19
|
-
import { betterTailwind } from './configs/better-tailwind.js';
|
|
20
|
-
import { ignores } from './configs/ignores.js';
|
|
21
|
-
declare const gaiaLint: {
|
|
22
|
-
base: typeof base;
|
|
23
|
-
react: typeof react;
|
|
24
|
-
styleHygiene: typeof styleHygiene;
|
|
25
|
-
guardrails: typeof guardrails;
|
|
26
|
-
testing: typeof testing;
|
|
27
|
-
storybook: typeof storybook;
|
|
28
|
-
playwright: typeof playwright;
|
|
29
|
-
prettier: typeof prettier;
|
|
30
|
-
betterTailwind: typeof betterTailwind;
|
|
31
|
-
ignores: typeof ignores;
|
|
1
|
+
import type { Linter } from 'eslint';
|
|
2
|
+
import { type GaiaLintBetterTailwindOptions } from './configs/better-tailwind.js';
|
|
3
|
+
import { type GaiaLintIgnoresOptions } from './configs/ignores.js';
|
|
4
|
+
export type { GaiaLintBetterTailwindOptions, GaiaLintIgnoresOptions };
|
|
5
|
+
export type GaiaLintOptions = {
|
|
6
|
+
/**
|
|
7
|
+
* Application source directory (relative to project root). Used to scope
|
|
8
|
+
* file-path-based rules — filename conventions, hook-folder scoping,
|
|
9
|
+
* `no-relative-import-paths` root, etc.
|
|
10
|
+
*
|
|
11
|
+
* @default 'app'
|
|
12
|
+
*/
|
|
13
|
+
sourceDir?: string;
|
|
32
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* Dual-shape `ignores` accessor. Spread it directly for the default
|
|
17
|
+
* configuration (`...lint.ignores`) or call it to override
|
|
18
|
+
* (`...lint.ignores({extra: ['coverage/**']})`).
|
|
19
|
+
*/
|
|
20
|
+
export type GaiaLintIgnores = ((opts?: GaiaLintIgnoresOptions) => Linter.Config[]) & Iterable<Linter.Config>;
|
|
21
|
+
export type GaiaLintBundle = {
|
|
22
|
+
base: Linter.Config[];
|
|
23
|
+
betterTailwind: (opts: GaiaLintBetterTailwindOptions) => Linter.Config[];
|
|
24
|
+
guardrails: Linter.Config[];
|
|
25
|
+
ignores: GaiaLintIgnores;
|
|
26
|
+
playwright: Linter.Config[];
|
|
27
|
+
prettier: Linter.Config[];
|
|
28
|
+
react: Linter.Config[];
|
|
29
|
+
storybook: Linter.Config[];
|
|
30
|
+
styleHygiene: Linter.Config[];
|
|
31
|
+
testing: Linter.Config[];
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* GAIA lint configuration factory.
|
|
35
|
+
*
|
|
36
|
+
* Call once at the top of your `eslint.config.mjs` to bind a `sourceDir`,
|
|
37
|
+
* then spread the returned configs into `defineConfig`. Defaults to GAIA's
|
|
38
|
+
* `'app'` layout; pass `{sourceDir: 'src'}` (or any other value) for
|
|
39
|
+
* projects that store source elsewhere.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* const lint = gaiaLint(); // GAIA / app/
|
|
43
|
+
* const lint = gaiaLint({sourceDir: 'src'}); // src/
|
|
44
|
+
*/
|
|
45
|
+
declare const gaiaLint: (opts?: GaiaLintOptions) => GaiaLintBundle;
|
|
33
46
|
export default gaiaLint;
|
|
34
47
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAU,KAAK,sBAAsB,EAAC,MAAM,sBAAsB,CAAC;AAQ1E,YAAY,EAAC,6BAA6B,EAAE,sBAAsB,EAAC,CAAC;AAEpE,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAC7B,IAAI,CAAC,EAAE,sBAAsB,KAC1B,MAAM,CAAC,MAAM,EAAE,CAAC,GACnB,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAE1B,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,CAAC,IAAI,EAAE,6BAA6B,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;IACzE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;CAC1B,CAAC;AAWF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,QAAQ,GAAI,OAAO,eAAe,KAAG,cAc1C,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|