@trackunit/eslint-plugin-trackunit 0.6.53 → 0.6.56
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 +36 -0
- package/README.md +5 -4
- package/migrations/entry.js +3 -0
- package/migrations.json +3 -0
- package/package.json +4 -2
- package/src/index.d.ts +1 -1
- package/src/index.js +2 -1
- package/src/lib/config/index.d.ts +18 -0
- package/src/lib/config/plugins.d.ts +3 -0
- package/src/lib/config/presets/base.d.ts +11 -0
- package/src/lib/config/presets/base.js +1 -0
- package/src/lib/config/presets/react.d.ts +7 -0
- package/src/lib/config/presets/react.js +3 -0
- package/src/lib/rules/no-deprecated-graphql-fields/no-deprecated-graphql-fields.d.ts +4 -0
- package/src/lib/rules/no-deprecated-graphql-fields/no-deprecated-graphql-fields.js +104 -0
- package/src/lib/rules/no-deprecated-graphql-fields/schema-cache.d.ts +3 -0
- package/src/lib/rules/no-deprecated-graphql-fields/schema-cache.js +31 -0
- package/src/lib/rules-map.d.ts +3 -0
- package/src/lib/rules-map.js +2 -0
- package/src/index.js.map +0 -1
- package/src/lib/config/fragments/ignores.js.map +0 -1
- package/src/lib/config/fragments/import-rules.js.map +0 -1
- package/src/lib/config/fragments/jest-overrides.js.map +0 -1
- package/src/lib/config/fragments/jsdoc-rules.js.map +0 -1
- package/src/lib/config/fragments/module-boundaries.js.map +0 -1
- package/src/lib/config/fragments/no-direct-storage-access.js.map +0 -1
- package/src/lib/config/fragments/react-rules.js.map +0 -1
- package/src/lib/config/fragments/restricted-imports.js.map +0 -1
- package/src/lib/config/fragments/testing-library.js.map +0 -1
- package/src/lib/config/fragments/typescript-rules.js.map +0 -1
- package/src/lib/config/index.js.map +0 -1
- package/src/lib/config/plugins.js.map +0 -1
- package/src/lib/config/presets/base.js.map +0 -1
- package/src/lib/config/presets/e2e.js.map +0 -1
- package/src/lib/config/presets/react.js.map +0 -1
- package/src/lib/config/presets/server.js.map +0 -1
- package/src/lib/config/utils.js.map +0 -1
- package/src/lib/config-helpers/create-skip-when.js.map +0 -1
- package/src/lib/rules/component-name-matches-filename/component-name-matches-filename.js.map +0 -1
- package/src/lib/rules/cva-merge-base-classes-as-array/cva-merge-base-classes-as-array.js.map +0 -1
- package/src/lib/rules/design-guideline-button-icon-size-match/design-guideline-button-icon-size-match.js.map +0 -1
- package/src/lib/rules/no-internal-barrel-files/no-internal-barrel-files.js.map +0 -1
- package/src/lib/rules/no-internal-graphql-when-tagged-with-gql-public/no-internal-graphql-when-tagged-with-gql-public.js.map +0 -1
- package/src/lib/rules/no-jest-mock-trackunit-react-core-hooks/no-jest-mock-trackunit-react-core-hooks.js.map +0 -1
- package/src/lib/rules/no-template-strings-in-classname-prop/no-template-strings-in-classname-prop.js.map +0 -1
- package/src/lib/rules/no-typescript-assertion/no-typescript-assertion.js.map +0 -1
- package/src/lib/rules/one-component-per-file/one-component-per-file.js.map +0 -1
- package/src/lib/rules/prefer-destructured-imports/prefer-destructured-imports.js.map +0 -1
- package/src/lib/rules/prefer-event-specific-callback-naming/name-suggestion-strategies.js.map +0 -1
- package/src/lib/rules/prefer-event-specific-callback-naming/prefer-event-specific-callback-naming.js.map +0 -1
- package/src/lib/rules/prefer-event-specific-callback-naming/strategies/string-based.js.map +0 -1
- package/src/lib/rules/prefer-event-specific-callback-naming/strategies/type-based.js.map +0 -1
- package/src/lib/rules/prefer-event-specific-callback-naming/utils.js.map +0 -1
- package/src/lib/rules/prefer-field-components/prefer-field-components.js.map +0 -1
- package/src/lib/rules/prefer-mouse-event-handler-in-react-props/prefer-mouse-event-handler-in-react-props.js.map +0 -1
- package/src/lib/rules/require-classname-alternatives/require-classname-alternatives.js.map +0 -1
- package/src/lib/rules/require-component-prop-contracts/require-component-prop-contracts.js.map +0 -1
- package/src/lib/rules/require-list-item-virtualization-props/require-list-item-virtualization-props.js.map +0 -1
- package/src/lib/rules/require-optional-prop-initialization/require-optional-prop-initialization.js.map +0 -1
- package/src/lib/rules/require-optional-prop-initialization/suggestion-utils.js.map +0 -1
- package/src/lib/rules/require-storybook-folder-landing-page/require-storybook-folder-landing-page.js.map +0 -1
- package/src/lib/rules-map.js.map +0 -1
- package/src/lib/utils/ast-utils.js.map +0 -1
- package/src/lib/utils/classname-utils.js.map +0 -1
- package/src/lib/utils/component-utils.js.map +0 -1
- package/src/lib/utils/file-utils.js.map +0 -1
- package/src/lib/utils/import-utils.js.map +0 -1
- package/src/lib/utils/nx-utils.js.map +0 -1
- package/src/lib/utils/package-utils.js.map +0 -1
- package/src/lib/utils/typescript-utils.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
## 0.6.56 (2026-07-03)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **eslint:** add no-deprecated-graphql-fields rule ([#24113](https://github.com/Trackunit/manager/pull/24113))
|
|
6
|
+
|
|
7
|
+
### 🧱 Updated Dependencies
|
|
8
|
+
|
|
9
|
+
- Updated shared-utils to 1.15.56
|
|
10
|
+
|
|
11
|
+
### ❤️ Thank You
|
|
12
|
+
|
|
13
|
+
- Cursor @cursoragent
|
|
14
|
+
- Michael Buss Rønne @man-trackunit
|
|
15
|
+
|
|
16
|
+
## 0.6.55 (2026-07-02)
|
|
17
|
+
|
|
18
|
+
### 🚀 Features
|
|
19
|
+
|
|
20
|
+
- **migrations:** standard migration scaffold for all publish:npm packages [GLU-1354] ([#24119](https://github.com/Trackunit/manager/pull/24119))
|
|
21
|
+
|
|
22
|
+
### 🧱 Updated Dependencies
|
|
23
|
+
|
|
24
|
+
- Updated shared-utils to 1.15.55
|
|
25
|
+
|
|
26
|
+
### ❤️ Thank You
|
|
27
|
+
|
|
28
|
+
- Cursor @cursoragent
|
|
29
|
+
- Mikkel Thorbjørn Andersen @mta-trackunit
|
|
30
|
+
|
|
31
|
+
## 0.6.54 (2026-07-02)
|
|
32
|
+
|
|
33
|
+
### 🧱 Updated Dependencies
|
|
34
|
+
|
|
35
|
+
- Updated shared-utils to 1.15.54
|
|
36
|
+
|
|
1
37
|
## 0.6.53 (2026-07-02)
|
|
2
38
|
|
|
3
39
|
### 🧱 Updated Dependencies
|
package/README.md
CHANGED
|
@@ -78,16 +78,17 @@ All custom rules are enabled automatically through the presets under the `@track
|
|
|
78
78
|
### NX / Monorepo
|
|
79
79
|
|
|
80
80
|
|
|
81
|
-
| Rule | Severity | Auto-fix | Description
|
|
82
|
-
| ------------------------------------------------------------ | -------- | -------- |
|
|
83
|
-
| `@trackunit/no-internal-graphql-when-tagged-with-gql-public` | error | — | Prevents internal GraphQL usage in projects tagged with `gql
|
|
81
|
+
| Rule | Severity | Auto-fix | Description |
|
|
82
|
+
| ------------------------------------------------------------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
83
|
+
| `@trackunit/no-internal-graphql-when-tagged-with-gql-public` | error | — | Prevents internal GraphQL usage in projects tagged with `gql:public`. Applied to `project.json` files. |
|
|
84
|
+
| `@trackunit/no-deprecated-graphql-fields` | error | — | Prevents usage of `@deprecated` GraphQL fields in projects tagged with `dependencies:no-deprecated`. Applied to `project.json` files. |
|
|
84
85
|
|
|
85
86
|
|
|
86
87
|
### Storybook
|
|
87
88
|
|
|
88
89
|
| Rule | Severity | Auto-fix | Description |
|
|
89
90
|
| ----------------------------------------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
90
|
-
| `@trackunit/require-storybook-folder-landing-page` |
|
|
91
|
+
| `@trackunit/require-storybook-folder-landing-page` | error | no | Requires a `*.docs.mdx` landing page (`<Meta title>`) for every ancestor folder implied by a story's title. Enabled for `*.stories.{ts,tsx}` files in the `react` preset. |
|
|
91
92
|
|
|
92
93
|
## Utilities
|
|
93
94
|
|
package/migrations.json
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trackunit/eslint-plugin-trackunit",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.56",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
5
5
|
"repository": "https://github.com/Trackunit/manager",
|
|
6
6
|
"engines": {
|
|
@@ -26,8 +26,10 @@
|
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"@typescript-eslint/parser": "^8.58.1",
|
|
29
|
-
"eslint": "^9.33.0"
|
|
29
|
+
"eslint": "^9.33.0",
|
|
30
|
+
"graphql": "^16.0.0"
|
|
30
31
|
},
|
|
32
|
+
"migrations": "./migrations.json",
|
|
31
33
|
"types": "./src/index.d.ts",
|
|
32
34
|
"main": "./src/index.js",
|
|
33
35
|
"type": "commonjs"
|
package/src/index.d.ts
CHANGED
|
@@ -6,4 +6,4 @@ export { findMonorepoRoot } from "./lib/config/utils";
|
|
|
6
6
|
export type { MatchCriteria, ProjectMetadata } from "./lib/utils/nx-utils";
|
|
7
7
|
export { strictJsdocRules } from "./lib/config/fragments/jsdoc-rules";
|
|
8
8
|
export { restrictedImportRules } from "./lib/config/fragments/restricted-imports";
|
|
9
|
-
export { globals, jsdoc, nx, reactHooks, tsParser } from "./lib/config/plugins";
|
|
9
|
+
export { globals, jsdoc, localRulesPlugin, nx, reactHooks, tsParser } from "./lib/config/plugins";
|
package/src/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.tsParser = exports.reactHooks = exports.nx = exports.jsdoc = exports.globals = exports.restrictedImportRules = exports.strictJsdocRules = exports.findMonorepoRoot = exports.createSkipWhen = exports.configs = void 0;
|
|
3
|
+
exports.tsParser = exports.reactHooks = exports.nx = exports.localRulesPlugin = exports.jsdoc = exports.globals = exports.restrictedImportRules = exports.strictJsdocRules = exports.findMonorepoRoot = exports.createSkipWhen = exports.configs = void 0;
|
|
4
4
|
const rules_map_1 = require("./lib/rules-map");
|
|
5
5
|
exports.default = rules_map_1.rulesMap;
|
|
6
6
|
var config_1 = require("./lib/config");
|
|
@@ -16,6 +16,7 @@ Object.defineProperty(exports, "restrictedImportRules", { enumerable: true, get:
|
|
|
16
16
|
var plugins_1 = require("./lib/config/plugins");
|
|
17
17
|
Object.defineProperty(exports, "globals", { enumerable: true, get: function () { return plugins_1.globals; } });
|
|
18
18
|
Object.defineProperty(exports, "jsdoc", { enumerable: true, get: function () { return plugins_1.jsdoc; } });
|
|
19
|
+
Object.defineProperty(exports, "localRulesPlugin", { enumerable: true, get: function () { return plugins_1.localRulesPlugin; } });
|
|
19
20
|
Object.defineProperty(exports, "nx", { enumerable: true, get: function () { return plugins_1.nx; } });
|
|
20
21
|
Object.defineProperty(exports, "reactHooks", { enumerable: true, get: function () { return plugins_1.reactHooks; } });
|
|
21
22
|
Object.defineProperty(exports, "tsParser", { enumerable: true, get: function () { return plugins_1.tsParser; } });
|
|
@@ -26,6 +26,9 @@ export declare const configs: {
|
|
|
26
26
|
"no-typescript-assertion": import("@typescript-eslint/utils/ts-eslint").RuleModule<"angleBracketAssertion" | "asAssertion" | "nonNullAssertion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
27
27
|
name: string;
|
|
28
28
|
};
|
|
29
|
+
"no-deprecated-graphql-fields": import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFieldUsed", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
30
|
+
name: string;
|
|
31
|
+
};
|
|
29
32
|
"no-internal-graphql-when-tagged-with-gql-public": import("@typescript-eslint/utils/ts-eslint").RuleModule<"internalGraphqlFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
30
33
|
name: string;
|
|
31
34
|
};
|
|
@@ -136,6 +139,7 @@ export declare const configs: {
|
|
|
136
139
|
rules: {
|
|
137
140
|
[x: string]: import("eslint").Linter.RuleEntry<any[]>;
|
|
138
141
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public"?: undefined;
|
|
142
|
+
"@trackunit/no-deprecated-graphql-fields"?: undefined;
|
|
139
143
|
"@typescript-eslint/no-require-imports"?: undefined;
|
|
140
144
|
"@nx/enforce-module-boundaries"?: undefined;
|
|
141
145
|
};
|
|
@@ -178,6 +182,7 @@ export declare const configs: {
|
|
|
178
182
|
"no-unused-expressions": string;
|
|
179
183
|
"no-shadow": string;
|
|
180
184
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public"?: undefined;
|
|
185
|
+
"@trackunit/no-deprecated-graphql-fields"?: undefined;
|
|
181
186
|
"@typescript-eslint/no-require-imports"?: undefined;
|
|
182
187
|
"@nx/enforce-module-boundaries"?: undefined;
|
|
183
188
|
};
|
|
@@ -215,6 +220,9 @@ export declare const configs: {
|
|
|
215
220
|
"no-typescript-assertion": import("@typescript-eslint/utils/ts-eslint").RuleModule<"angleBracketAssertion" | "asAssertion" | "nonNullAssertion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
216
221
|
name: string;
|
|
217
222
|
};
|
|
223
|
+
"no-deprecated-graphql-fields": import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFieldUsed", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
224
|
+
name: string;
|
|
225
|
+
};
|
|
218
226
|
"no-internal-graphql-when-tagged-with-gql-public": import("@typescript-eslint/utils/ts-eslint").RuleModule<"internalGraphqlFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
219
227
|
name: string;
|
|
220
228
|
};
|
|
@@ -288,6 +296,7 @@ export declare const configs: {
|
|
|
288
296
|
};
|
|
289
297
|
rules: {
|
|
290
298
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public": string;
|
|
299
|
+
"@trackunit/no-deprecated-graphql-fields": string;
|
|
291
300
|
"@typescript-eslint/no-require-imports"?: undefined;
|
|
292
301
|
"@nx/enforce-module-boundaries"?: undefined;
|
|
293
302
|
};
|
|
@@ -296,6 +305,7 @@ export declare const configs: {
|
|
|
296
305
|
rules: {
|
|
297
306
|
"@typescript-eslint/no-require-imports": string;
|
|
298
307
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public"?: undefined;
|
|
308
|
+
"@trackunit/no-deprecated-graphql-fields"?: undefined;
|
|
299
309
|
"@nx/enforce-module-boundaries"?: undefined;
|
|
300
310
|
};
|
|
301
311
|
plugins?: undefined;
|
|
@@ -305,6 +315,7 @@ export declare const configs: {
|
|
|
305
315
|
rules: {
|
|
306
316
|
"@nx/enforce-module-boundaries": string;
|
|
307
317
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public"?: undefined;
|
|
318
|
+
"@trackunit/no-deprecated-graphql-fields"?: undefined;
|
|
308
319
|
"@typescript-eslint/no-require-imports"?: undefined;
|
|
309
320
|
};
|
|
310
321
|
plugins?: undefined;
|
|
@@ -336,6 +347,9 @@ export declare const configs: {
|
|
|
336
347
|
"no-typescript-assertion": import("@typescript-eslint/utils/ts-eslint").RuleModule<"angleBracketAssertion" | "asAssertion" | "nonNullAssertion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
337
348
|
name: string;
|
|
338
349
|
};
|
|
350
|
+
"no-deprecated-graphql-fields": import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFieldUsed", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
351
|
+
name: string;
|
|
352
|
+
};
|
|
339
353
|
"no-internal-graphql-when-tagged-with-gql-public": import("@typescript-eslint/utils/ts-eslint").RuleModule<"internalGraphqlFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
340
354
|
name: string;
|
|
341
355
|
};
|
|
@@ -841,6 +855,7 @@ export declare const configs: {
|
|
|
841
855
|
"@typescript-eslint/no-empty-function"?: undefined;
|
|
842
856
|
"@trackunit/one-component-per-file"?: undefined;
|
|
843
857
|
"@trackunit/component-name-matches-filename"?: undefined;
|
|
858
|
+
"@trackunit/require-storybook-folder-landing-page"?: undefined;
|
|
844
859
|
};
|
|
845
860
|
plugins?: undefined;
|
|
846
861
|
settings?: undefined;
|
|
@@ -853,6 +868,7 @@ export declare const configs: {
|
|
|
853
868
|
"@typescript-eslint/no-empty-function": string;
|
|
854
869
|
"@trackunit/one-component-per-file": string;
|
|
855
870
|
"@trackunit/component-name-matches-filename": string;
|
|
871
|
+
"@trackunit/require-storybook-folder-landing-page": string;
|
|
856
872
|
"no-restricted-properties"?: undefined;
|
|
857
873
|
};
|
|
858
874
|
plugins?: undefined;
|
|
@@ -867,6 +883,7 @@ export declare const configs: {
|
|
|
867
883
|
"jsdoc/require-jsdoc"?: undefined;
|
|
868
884
|
"no-console"?: undefined;
|
|
869
885
|
"@typescript-eslint/no-empty-function"?: undefined;
|
|
886
|
+
"@trackunit/require-storybook-folder-landing-page"?: undefined;
|
|
870
887
|
};
|
|
871
888
|
plugins?: undefined;
|
|
872
889
|
settings?: undefined;
|
|
@@ -944,6 +961,7 @@ export declare const configs: {
|
|
|
944
961
|
"@typescript-eslint/no-empty-function"?: undefined;
|
|
945
962
|
"@trackunit/one-component-per-file"?: undefined;
|
|
946
963
|
"@trackunit/component-name-matches-filename"?: undefined;
|
|
964
|
+
"@trackunit/require-storybook-folder-landing-page"?: undefined;
|
|
947
965
|
"no-restricted-properties"?: undefined;
|
|
948
966
|
};
|
|
949
967
|
settings?: undefined;
|
|
@@ -44,6 +44,9 @@ export declare const localRulesPlugin: {
|
|
|
44
44
|
"no-typescript-assertion": import("@typescript-eslint/utils/ts-eslint").RuleModule<"angleBracketAssertion" | "asAssertion" | "nonNullAssertion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
45
45
|
name: string;
|
|
46
46
|
};
|
|
47
|
+
"no-deprecated-graphql-fields": import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFieldUsed", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
48
|
+
name: string;
|
|
49
|
+
};
|
|
47
50
|
"no-internal-graphql-when-tagged-with-gql-public": import("@typescript-eslint/utils/ts-eslint").RuleModule<"internalGraphqlFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
48
51
|
name: string;
|
|
49
52
|
};
|
|
@@ -26,6 +26,9 @@ export declare const base: (import("eslint").Linter.FlatConfig<import("eslint").
|
|
|
26
26
|
"no-typescript-assertion": import("@typescript-eslint/utils/ts-eslint").RuleModule<"angleBracketAssertion" | "asAssertion" | "nonNullAssertion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
27
27
|
name: string;
|
|
28
28
|
};
|
|
29
|
+
"no-deprecated-graphql-fields": import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFieldUsed", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
30
|
+
name: string;
|
|
31
|
+
};
|
|
29
32
|
"no-internal-graphql-when-tagged-with-gql-public": import("@typescript-eslint/utils/ts-eslint").RuleModule<"internalGraphqlFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
30
33
|
name: string;
|
|
31
34
|
};
|
|
@@ -136,6 +139,7 @@ export declare const base: (import("eslint").Linter.FlatConfig<import("eslint").
|
|
|
136
139
|
rules: {
|
|
137
140
|
[x: string]: import("eslint").Linter.RuleEntry<any[]>;
|
|
138
141
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public"?: undefined;
|
|
142
|
+
"@trackunit/no-deprecated-graphql-fields"?: undefined;
|
|
139
143
|
"@typescript-eslint/no-require-imports"?: undefined;
|
|
140
144
|
"@nx/enforce-module-boundaries"?: undefined;
|
|
141
145
|
};
|
|
@@ -178,6 +182,7 @@ export declare const base: (import("eslint").Linter.FlatConfig<import("eslint").
|
|
|
178
182
|
"no-unused-expressions": string;
|
|
179
183
|
"no-shadow": string;
|
|
180
184
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public"?: undefined;
|
|
185
|
+
"@trackunit/no-deprecated-graphql-fields"?: undefined;
|
|
181
186
|
"@typescript-eslint/no-require-imports"?: undefined;
|
|
182
187
|
"@nx/enforce-module-boundaries"?: undefined;
|
|
183
188
|
};
|
|
@@ -215,6 +220,9 @@ export declare const base: (import("eslint").Linter.FlatConfig<import("eslint").
|
|
|
215
220
|
"no-typescript-assertion": import("@typescript-eslint/utils/ts-eslint").RuleModule<"angleBracketAssertion" | "asAssertion" | "nonNullAssertion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
216
221
|
name: string;
|
|
217
222
|
};
|
|
223
|
+
"no-deprecated-graphql-fields": import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFieldUsed", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
224
|
+
name: string;
|
|
225
|
+
};
|
|
218
226
|
"no-internal-graphql-when-tagged-with-gql-public": import("@typescript-eslint/utils/ts-eslint").RuleModule<"internalGraphqlFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
219
227
|
name: string;
|
|
220
228
|
};
|
|
@@ -288,6 +296,7 @@ export declare const base: (import("eslint").Linter.FlatConfig<import("eslint").
|
|
|
288
296
|
};
|
|
289
297
|
rules: {
|
|
290
298
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public": string;
|
|
299
|
+
"@trackunit/no-deprecated-graphql-fields": string;
|
|
291
300
|
"@typescript-eslint/no-require-imports"?: undefined;
|
|
292
301
|
"@nx/enforce-module-boundaries"?: undefined;
|
|
293
302
|
};
|
|
@@ -296,6 +305,7 @@ export declare const base: (import("eslint").Linter.FlatConfig<import("eslint").
|
|
|
296
305
|
rules: {
|
|
297
306
|
"@typescript-eslint/no-require-imports": string;
|
|
298
307
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public"?: undefined;
|
|
308
|
+
"@trackunit/no-deprecated-graphql-fields"?: undefined;
|
|
299
309
|
"@nx/enforce-module-boundaries"?: undefined;
|
|
300
310
|
};
|
|
301
311
|
plugins?: undefined;
|
|
@@ -305,6 +315,7 @@ export declare const base: (import("eslint").Linter.FlatConfig<import("eslint").
|
|
|
305
315
|
rules: {
|
|
306
316
|
"@nx/enforce-module-boundaries": string;
|
|
307
317
|
"@trackunit/no-internal-graphql-when-tagged-with-gql-public"?: undefined;
|
|
318
|
+
"@trackunit/no-deprecated-graphql-fields"?: undefined;
|
|
308
319
|
"@typescript-eslint/no-require-imports"?: undefined;
|
|
309
320
|
};
|
|
310
321
|
plugins?: undefined;
|
|
@@ -25,6 +25,9 @@ export declare const reactPreset: (import("eslint").Linter.Config<import("eslint
|
|
|
25
25
|
"no-typescript-assertion": import("@typescript-eslint/utils/ts-eslint").RuleModule<"angleBracketAssertion" | "asAssertion" | "nonNullAssertion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
26
26
|
name: string;
|
|
27
27
|
};
|
|
28
|
+
"no-deprecated-graphql-fields": import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFieldUsed", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
29
|
+
name: string;
|
|
30
|
+
};
|
|
28
31
|
"no-internal-graphql-when-tagged-with-gql-public": import("@typescript-eslint/utils/ts-eslint").RuleModule<"internalGraphqlFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
|
29
32
|
name: string;
|
|
30
33
|
};
|
|
@@ -530,6 +533,7 @@ export declare const reactPreset: (import("eslint").Linter.Config<import("eslint
|
|
|
530
533
|
"@typescript-eslint/no-empty-function"?: undefined;
|
|
531
534
|
"@trackunit/one-component-per-file"?: undefined;
|
|
532
535
|
"@trackunit/component-name-matches-filename"?: undefined;
|
|
536
|
+
"@trackunit/require-storybook-folder-landing-page"?: undefined;
|
|
533
537
|
};
|
|
534
538
|
plugins?: undefined;
|
|
535
539
|
settings?: undefined;
|
|
@@ -542,6 +546,7 @@ export declare const reactPreset: (import("eslint").Linter.Config<import("eslint
|
|
|
542
546
|
"@typescript-eslint/no-empty-function": string;
|
|
543
547
|
"@trackunit/one-component-per-file": string;
|
|
544
548
|
"@trackunit/component-name-matches-filename": string;
|
|
549
|
+
"@trackunit/require-storybook-folder-landing-page": string;
|
|
545
550
|
"no-restricted-properties"?: undefined;
|
|
546
551
|
};
|
|
547
552
|
plugins?: undefined;
|
|
@@ -556,6 +561,7 @@ export declare const reactPreset: (import("eslint").Linter.Config<import("eslint
|
|
|
556
561
|
"jsdoc/require-jsdoc"?: undefined;
|
|
557
562
|
"no-console"?: undefined;
|
|
558
563
|
"@typescript-eslint/no-empty-function"?: undefined;
|
|
564
|
+
"@trackunit/require-storybook-folder-landing-page"?: undefined;
|
|
559
565
|
};
|
|
560
566
|
plugins?: undefined;
|
|
561
567
|
settings?: undefined;
|
|
@@ -633,6 +639,7 @@ export declare const reactPreset: (import("eslint").Linter.Config<import("eslint
|
|
|
633
639
|
"@typescript-eslint/no-empty-function"?: undefined;
|
|
634
640
|
"@trackunit/one-component-per-file"?: undefined;
|
|
635
641
|
"@trackunit/component-name-matches-filename"?: undefined;
|
|
642
|
+
"@trackunit/require-storybook-folder-landing-page"?: undefined;
|
|
636
643
|
"no-restricted-properties"?: undefined;
|
|
637
644
|
};
|
|
638
645
|
settings?: undefined;
|
|
@@ -71,6 +71,9 @@ exports.reactPreset = [
|
|
|
71
71
|
"@typescript-eslint/no-empty-function": "off",
|
|
72
72
|
"@trackunit/one-component-per-file": "off",
|
|
73
73
|
"@trackunit/component-name-matches-filename": "off",
|
|
74
|
+
// Every Storybook folder implied by a story title must have a landing page
|
|
75
|
+
// (*.docs.mdx with a matching <Meta title>). See docs/STORYBOOK-LANDING-PAGES.md.
|
|
76
|
+
"@trackunit/require-storybook-folder-landing-page": "error",
|
|
74
77
|
},
|
|
75
78
|
},
|
|
76
79
|
{
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.noDeprecatedGraphqlFields = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const utils_1 = require("@typescript-eslint/utils");
|
|
6
|
+
const fs = tslib_1.__importStar(require("fs"));
|
|
7
|
+
const graphql_1 = require("graphql");
|
|
8
|
+
const path = tslib_1.__importStar(require("path"));
|
|
9
|
+
const file_utils_1 = require("../../utils/file-utils");
|
|
10
|
+
const schema_cache_1 = require("./schema-cache");
|
|
11
|
+
const createRule = utils_1.ESLintUtils.RuleCreator(name => `https://github.com/trackunit/manager/blob/main/libs/eslint/plugin-trackunit/src/lib/rules/${name}/${name}.ts`);
|
|
12
|
+
const EXCLUDED_DIRS = new Set(["node_modules", "generated", "dist"]);
|
|
13
|
+
const collectGraphqlFiles = (dir, files = []) => {
|
|
14
|
+
let entries;
|
|
15
|
+
try {
|
|
16
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return files;
|
|
20
|
+
}
|
|
21
|
+
for (const entry of entries) {
|
|
22
|
+
const fullPath = path.join(dir, entry.name);
|
|
23
|
+
let stat;
|
|
24
|
+
try {
|
|
25
|
+
stat = fs.statSync(fullPath);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (stat.isDirectory()) {
|
|
31
|
+
if (!EXCLUDED_DIRS.has(entry.name)) {
|
|
32
|
+
collectGraphqlFiles(fullPath, files);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (entry.name.endsWith(".graphql")) {
|
|
36
|
+
files.push(fullPath);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return files;
|
|
40
|
+
};
|
|
41
|
+
exports.noDeprecatedGraphqlFields = createRule({
|
|
42
|
+
name: "no-deprecated-graphql-fields",
|
|
43
|
+
meta: {
|
|
44
|
+
type: "problem",
|
|
45
|
+
docs: {
|
|
46
|
+
description: "Disallow usage of @deprecated GraphQL fields in .graphql operation files",
|
|
47
|
+
},
|
|
48
|
+
messages: {
|
|
49
|
+
deprecatedFieldUsed: "Deprecated GraphQL field used in {{file}}: {{message}}",
|
|
50
|
+
},
|
|
51
|
+
schema: [],
|
|
52
|
+
},
|
|
53
|
+
defaultOptions: [],
|
|
54
|
+
create(context) {
|
|
55
|
+
return {
|
|
56
|
+
Program: _node => {
|
|
57
|
+
const sourceFilePath = context.filename;
|
|
58
|
+
if (!sourceFilePath.endsWith("/project.json")) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const nxJsonPath = (0, file_utils_1.findNearestFile)(sourceFilePath, "nx.json");
|
|
62
|
+
if (!nxJsonPath) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const monorepoRoot = path.dirname(nxJsonPath);
|
|
66
|
+
const schemaPath = path.join(monorepoRoot, "libs", "api", "internal-gql-schema", "generated", "internal-schema.gql");
|
|
67
|
+
const schema = (0, schema_cache_1.getSchema)(schemaPath);
|
|
68
|
+
if (!schema) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const projectDir = path.dirname(sourceFilePath);
|
|
72
|
+
const graphqlFiles = collectGraphqlFiles(projectDir);
|
|
73
|
+
for (const gqlFile of graphqlFiles) {
|
|
74
|
+
let content;
|
|
75
|
+
try {
|
|
76
|
+
content = fs.readFileSync(gqlFile, "utf8");
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
let document;
|
|
82
|
+
try {
|
|
83
|
+
document = (0, graphql_1.parse)(content);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const errors = (0, graphql_1.validate)(schema, document, [graphql_1.NoDeprecatedCustomRule]);
|
|
89
|
+
for (const error of errors) {
|
|
90
|
+
context.report({
|
|
91
|
+
messageId: "deprecatedFieldUsed",
|
|
92
|
+
data: {
|
|
93
|
+
file: path.relative(monorepoRoot, gqlFile),
|
|
94
|
+
message: error.message,
|
|
95
|
+
},
|
|
96
|
+
loc: { line: 1, column: 0 },
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=no-deprecated-graphql-fields.js.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearSchemaCache = exports.getSchema = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs = tslib_1.__importStar(require("fs"));
|
|
6
|
+
const graphql_1 = require("graphql");
|
|
7
|
+
/**
|
|
8
|
+
* Caches parsed schemas by path to avoid re-parsing on every project.json lint.
|
|
9
|
+
* Isolated in its own module so tests can reset it independently of the rule's production exports.
|
|
10
|
+
*/
|
|
11
|
+
const schemaCache = new Map();
|
|
12
|
+
const getSchema = (schemaPath) => {
|
|
13
|
+
if (schemaCache.has(schemaPath)) {
|
|
14
|
+
return schemaCache.get(schemaPath) ?? null;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const content = fs.readFileSync(schemaPath, "utf8");
|
|
18
|
+
const schema = (0, graphql_1.buildSchema)(content);
|
|
19
|
+
schemaCache.set(schemaPath, schema);
|
|
20
|
+
return schema;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.getSchema = getSchema;
|
|
27
|
+
const clearSchemaCache = () => {
|
|
28
|
+
schemaCache.clear();
|
|
29
|
+
};
|
|
30
|
+
exports.clearSchemaCache = clearSchemaCache;
|
|
31
|
+
//# sourceMappingURL=schema-cache.js.map
|
package/src/lib/rules-map.d.ts
CHANGED
|
@@ -22,6 +22,9 @@ export declare const rulesMap: {
|
|
|
22
22
|
"no-typescript-assertion": ESLintUtils.RuleModule<"angleBracketAssertion" | "asAssertion" | "nonNullAssertion", [], unknown, ESLintUtils.RuleListener> & {
|
|
23
23
|
name: string;
|
|
24
24
|
};
|
|
25
|
+
"no-deprecated-graphql-fields": ESLintUtils.RuleModule<"deprecatedFieldUsed", [], unknown, ESLintUtils.RuleListener> & {
|
|
26
|
+
name: string;
|
|
27
|
+
};
|
|
25
28
|
"no-internal-graphql-when-tagged-with-gql-public": ESLintUtils.RuleModule<"internalGraphqlFileFound", [], unknown, ESLintUtils.RuleListener> & {
|
|
26
29
|
name: string;
|
|
27
30
|
};
|
package/src/lib/rules-map.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.rulesMap = void 0;
|
|
|
4
4
|
const component_name_matches_filename_1 = require("./rules/component-name-matches-filename/component-name-matches-filename");
|
|
5
5
|
const cva_merge_base_classes_as_array_1 = require("./rules/cva-merge-base-classes-as-array/cva-merge-base-classes-as-array");
|
|
6
6
|
const design_guideline_button_icon_size_match_1 = require("./rules/design-guideline-button-icon-size-match/design-guideline-button-icon-size-match");
|
|
7
|
+
const no_deprecated_graphql_fields_1 = require("./rules/no-deprecated-graphql-fields/no-deprecated-graphql-fields");
|
|
7
8
|
const no_internal_barrel_files_1 = require("./rules/no-internal-barrel-files/no-internal-barrel-files");
|
|
8
9
|
const no_internal_graphql_when_tagged_with_gql_public_1 = require("./rules/no-internal-graphql-when-tagged-with-gql-public/no-internal-graphql-when-tagged-with-gql-public");
|
|
9
10
|
const no_jest_mock_trackunit_react_core_hooks_1 = require("./rules/no-jest-mock-trackunit-react-core-hooks/no-jest-mock-trackunit-react-core-hooks");
|
|
@@ -25,6 +26,7 @@ exports.rulesMap = {
|
|
|
25
26
|
"cva-merge-base-classes-as-array": cva_merge_base_classes_as_array_1.cvaMergeBaseClassesAsArray,
|
|
26
27
|
"no-internal-barrel-files": no_internal_barrel_files_1.noInternalBarrelFiles,
|
|
27
28
|
"no-typescript-assertion": no_typescript_assertion_1.noTypescriptAssertion,
|
|
29
|
+
"no-deprecated-graphql-fields": no_deprecated_graphql_fields_1.noDeprecatedGraphqlFields,
|
|
28
30
|
"no-internal-graphql-when-tagged-with-gql-public": no_internal_graphql_when_tagged_with_gql_public_1.noInternalGraphqlWhenTaggedWithGqlPublic,
|
|
29
31
|
"design-guideline-button-icon-size-match": design_guideline_button_icon_size_match_1.designGuidelineButtonIconSizeMatch,
|
|
30
32
|
"no-template-strings-in-classname-prop": no_template_strings_in_classname_prop_1.noTemplateStringsInClassName,
|
package/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/eslint/plugin-trackunit/src/index.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAE3C,kBAAe,oBAAQ,CAAC;AAExB,uCAAuC;AAA9B,iGAAA,OAAO,OAAA;AAChB,0EAAuE;AAA9D,kHAAA,cAAc,OAAA;AACvB,4CAAsD;AAA7C,yGAAA,gBAAgB,OAAA;AAGzB,kEAAsE;AAA7D,+GAAA,gBAAgB,OAAA;AACzB,gFAAkF;AAAzE,2HAAA,qBAAqB,OAAA;AAC9B,gDAAgF;AAAvE,kGAAA,OAAO,OAAA;AAAE,gGAAA,KAAK,OAAA;AAAE,6FAAA,EAAE,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,mGAAA,QAAQ,OAAA","sourcesContent":["import { rulesMap } from \"./lib/rules-map\";\n\nexport default rulesMap;\n\nexport { configs } from \"./lib/config\";\nexport { createSkipWhen } from \"./lib/config-helpers/create-skip-when\";\nexport { findMonorepoRoot } from \"./lib/config/utils\";\nexport type { MatchCriteria, ProjectMetadata } from \"./lib/utils/nx-utils\";\n\nexport { strictJsdocRules } from \"./lib/config/fragments/jsdoc-rules\";\nexport { restrictedImportRules } from \"./lib/config/fragments/restricted-imports\";\nexport { globals, jsdoc, nx, reactHooks, tsParser } from \"./lib/config/plugins\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ignores.js","sourceRoot":"","sources":["../../../../../../../../libs/eslint/plugin-trackunit/src/lib/config/fragments/ignores.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAAkB;IAC1C,OAAO,EAAE;QACP,oBAAoB;QACpB,qBAAqB;QACrB,kBAAkB;QAClB,sBAAsB;QACtB,kBAAkB;QAClB,iBAAiB;QACjB,mBAAmB;QACnB,kBAAkB;QAClB,4BAA4B;QAC5B,uBAAuB;QACvB,cAAc;QACd,eAAe;KAChB;CACF,CAAC","sourcesContent":["import type { Linter } from \"eslint\";\n\nexport const globalIgnores: Linter.Config = {\n ignores: [\n \"**/src/gql-api.tsx\",\n \"**/src/typings/**/*\",\n \"**/testUtils.tsx\",\n \"**/webpack.config.js\",\n \"**/jest.config.*\",\n \"**/jest.setup.*\",\n \"**/vite*.config.*\",\n \"**/vite*.setup.*\",\n \"**/src/**/generated/**/*.*\",\n \"**/src/**/generated.*\",\n \"**/dist/**/*\",\n \"**/*.docs.mdx\",\n ],\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import-rules.js","sourceRoot":"","sources":["../../../../../../../../libs/eslint/plugin-trackunit/src/lib/config/fragments/import-rules.ts"],"names":[],"mappings":";;;AACA,4EAAuE;AACvE,wCAA0C;AAE7B,QAAA,WAAW,GAAuB;IAC7C,mBAAmB,EAAE;QACnB,OAAO;QACP;YACE,cAAc,EAAE,IAAI;SACrB;KACF;IACD,gBAAgB,EAAE,KAAK;CACxB,CAAC;AAEK,MAAM,wCAAwC,GAAG,CAAC,OAAe,EAAiB,EAAE,CACzF,IAAA,iCAAc,EAAC;IACb,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE;IAC9B,OAAO,EAAE;QACP,UAAU,EAAE,sBAAY;KACzB;IACD,KAAK,EAAE;QACL,qCAAqC,EAAE;YACrC,OAAO;YACP;gBACE,UAAU,EAAE,OAAO;gBACnB,eAAe,EAAE;oBACf,oBAAoB;oBACpB,oBAAoB;oBACpB,iBAAiB;oBACjB,iBAAiB;oBACjB,mBAAmB;oBACnB,YAAY;oBACZ,aAAa;oBACb,eAAe;oBACf,kBAAkB;oBAClB,kBAAkB;oBAClB,iBAAiB;oBACjB,iBAAiB;oBACjB,mBAAmB;oBACnB,0BAA0B;oBAC1B,uBAAuB;oBACvB,4BAA4B;oBAC5B,kBAAkB;oBAClB,eAAe;oBACf,aAAa;oBACb,6BAA6B;oBAC7B,oBAAoB;oBACpB,6CAA6C;oBAC7C,4BAA4B;iBAC7B;gBACD,oBAAoB,EAAE,KAAK;gBAC3B,gBAAgB,EAAE,IAAI;gBACtB,mBAAmB,EAAE,IAAI;aAC1B;SACF;KACF;CACF,CAAC,CAAC;AA1CQ,QAAA,wCAAwC,4CA0ChD","sourcesContent":["import type { Linter } from \"eslint\";\nimport { createSkipWhen } from \"../../config-helpers/create-skip-when\";\nimport { importPlugin } from \"../plugins\";\n\nexport const importRules: Linter.RulesRecord = {\n \"import-x/no-cycle\": [\n \"error\",\n {\n ignoreExternal: true,\n },\n ],\n \"import-x/first\": \"off\",\n};\n\nexport const createImportExtraneousDependenciesConfig = (rootDir: string): Linter.Config =>\n createSkipWhen({\n when: { tags: [\"scope:tool\"] },\n plugins: {\n \"import-x\": importPlugin,\n },\n rules: {\n \"import-x/no-extraneous-dependencies\": [\n \"error\",\n {\n packageDir: rootDir,\n devDependencies: [\n \"**/*.spec.{ts,tsx}\",\n \"**/*.test.{ts,tsx}\",\n \"**/jest.setup.*\",\n \"**/vite.setup.*\",\n \"**/vite.config.ts\",\n \"**/test/**\",\n \"**/tests/**\",\n \"**/testing/**\",\n \"**/test-setup/**\",\n \"**/test-utils/**\",\n \"**/__tests__/**\",\n \"**/__mocks__/**\",\n \"**/mocks.{ts,tsx}\",\n \"**/core-contexts-test/**\",\n \"**/*.stories.{ts,tsx}\",\n \"**/storybookUtils.{ts,tsx}\",\n \"**/.storybook/**\",\n \"**/scripts/**\",\n \"**/tools/**\",\n \"**/*.config.{ts,js,cjs,mjs}\",\n \"**/css/tailwind/**\",\n \"**/css/tailwind-custom-properties-plugin/**\",\n \"**/css/component-tokens/**\",\n ],\n optionalDependencies: false,\n peerDependencies: true,\n bundledDependencies: true,\n },\n ],\n },\n });\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jest-overrides.js","sourceRoot":"","sources":["../../../../../../../../libs/eslint/plugin-trackunit/src/lib/config/fragments/jest-overrides.ts"],"names":[],"mappings":";;;AACA,wCAAkD;AAErC,QAAA,iBAAiB,GAAkB;IAC9C,KAAK,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;IACxC,eAAe,EAAE;QACf,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE;YACb,OAAO,EAAE,CAAC,oBAAoB,CAAC;SAChC;KACF;IAED,OAAO,EAAE;QACP,IAAI,EAAJ,cAAI;QACJ,iBAAiB,EAAE,wBAAc;KAClC;IAED,KAAK,EAAE;QACL,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK;QACjC,GAAG,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAC3B,oCAAoC,EAAE,KAAK;QAC3C,sCAAsC,EAAE,KAAK;QAC7C,0CAA0C,EAAE,KAAK;QACjD,oCAAoC,EAAE,KAAK;QAC3C,oDAAoD,EAAE,OAAO;QAC7D,YAAY,EAAE,KAAK;QACnB,uBAAuB,EAAE,KAAK;QAC9B,0BAA0B,EAAE,KAAK;QACjC,+CAA+C,EAAE,KAAK;KACvD;CACF,CAAC","sourcesContent":["import type { Linter } from \"eslint\";\nimport { jest, testingLibrary } from \"../plugins\";\n\nexport const baseJestOverrides: Linter.Config = {\n files: [\"**/*.spec.ts\", \"**/*.spec.tsx\"],\n languageOptions: {\n ecmaVersion: 5,\n sourceType: \"script\",\n parserOptions: {\n project: [\"./tsconfig.*?.json\"],\n },\n },\n\n plugins: {\n jest,\n \"testing-library\": testingLibrary,\n },\n\n rules: {\n ...jest.configs.recommended.rules,\n ...jest.configs.style.rules,\n \"@typescript-eslint/no-explicit-any\": \"off\",\n \"@typescript-eslint/no-empty-function\": \"off\",\n \"@typescript-eslint/no-non-null-assertion\": \"off\",\n \"@trackunit/no-typescript-assertion\": \"off\",\n \"@trackunit/no-jest-mock-trackunit-react-core-hooks\": \"error\",\n \"no-console\": \"off\",\n \"no-restricted-globals\": \"off\",\n \"no-restricted-properties\": \"off\",\n \"@typescript-eslint/strict-boolean-expressions\": \"off\",\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jsdoc-rules.js","sourceRoot":"","sources":["../../../../../../../../libs/eslint/plugin-trackunit/src/lib/config/fragments/jsdoc-rules.ts"],"names":[],"mappings":";;;AAEa,QAAA,eAAe,GAAuB;IACjD,iBAAiB,EAAE;QACjB,OAAO;QACP,OAAO;QACP;YACE,UAAU,EAAE,CAAC;SACd;KACF;IACD,uBAAuB,EAAE,OAAO;IAChC,wBAAwB,EAAE,KAAK;IAC/B,yBAAyB,EAAE,KAAK;IAChC,4BAA4B,EAAE;QAC5B,OAAO;QACP;YACE,QAAQ,EAAE;gBACR;oBACE,OAAO,EAAE,sCAAsC;oBAC/C,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,qDAAqD;iBAC/D;aACF;SACF;KACF;CACF,CAAC;AAEW,QAAA,gBAAgB,GAAuB;IAClD,qBAAqB,EAAE;QACrB,OAAO;QACP;YACE,UAAU,EAAE,IAAI;YAEhB,OAAO,EAAE;gBACP,uBAAuB,EAAE,IAAI;gBAC7B,gBAAgB,EAAE,IAAI;gBACtB,mBAAmB,EAAE,IAAI;gBACzB,kBAAkB,EAAE,IAAI;gBACxB,gBAAgB,EAAE,IAAI;aACvB;SACF;KACF;IAED,0BAA0B,EAAE;QAC1B,OAAO;QACP;YACE,YAAY,EAAE,CAAC,KAAK,CAAC;SACtB;KACF;IAED,yBAAyB,EAAE,OAAO;IAClC,4BAA4B,EAAE,OAAO;IACrC,mBAAmB,EAAE,OAAO;IAC5B,iCAAiC,EAAE,OAAO;IAC1C,oBAAoB,EAAE,OAAO;IAC7B,4BAA4B,EAAE,OAAO;IACrC,uBAAuB,EAAE,OAAO;IAChC,mBAAmB,EAAE,OAAO;IAC5B,oBAAoB,EAAE,OAAO;IAC7B,uBAAuB,EAAE,OAAO;IAChC,kBAAkB,EAAE,OAAO;IAC3B,6BAA6B,EAAE,OAAO;IACtC,wBAAwB,EAAE,OAAO;IACjC,0BAA0B,EAAE,OAAO;IACnC,wBAAwB,EAAE,OAAO;IACjC,oCAAoC,EAAE,OAAO;IAC7C,6BAA6B,EAAE,OAAO;IACtC,6BAA6B,EAAE,OAAO;IACtC,6BAA6B,EAAE,OAAO;IACtC,mCAAmC,EAAE,OAAO;IAC5C,sBAAsB,EAAE,OAAO;IAC/B,4BAA4B,EAAE,OAAO;CACtC,CAAC","sourcesContent":["import type { Linter } from \"eslint\";\n\nexport const basicJsdocRules: Linter.RulesRecord = {\n \"jsdoc/tag-lines\": [\n \"error\",\n \"never\",\n {\n startLines: 1,\n },\n ],\n \"jsdoc/check-alignment\": \"error\",\n \"prefer-arrow-functions\": \"off\",\n \"jsdoc/check-indentation\": \"off\",\n \"jsdoc/no-restricted-syntax\": [\n \"error\",\n {\n contexts: [\n {\n comment: \"JsdocBlock:has(JsdocTag[tag=/type/])\",\n context: \"any\",\n message: \"Projects should not use @type annotation in JSDocs.\",\n },\n ],\n },\n ],\n};\n\nexport const strictJsdocRules: Linter.RulesRecord = {\n \"jsdoc/require-jsdoc\": [\n \"error\",\n {\n publicOnly: true,\n\n require: {\n ArrowFunctionExpression: true,\n ClassDeclaration: true,\n FunctionDeclaration: true,\n FunctionExpression: true,\n MethodDefinition: true,\n },\n },\n ],\n\n \"jsdoc/no-undefined-types\": [\n \"error\",\n {\n definedTypes: [\"JSX\"],\n },\n ],\n\n \"jsdoc/check-param-names\": \"error\",\n \"jsdoc/require-returns-type\": \"error\",\n \"jsdoc/valid-types\": \"error\",\n \"jsdoc/require-param-description\": \"error\",\n \"jsdoc/check-access\": \"error\",\n \"jsdoc/check-property-names\": \"error\",\n \"jsdoc/check-tag-names\": \"error\",\n \"jsdoc/check-types\": \"error\",\n \"jsdoc/check-values\": \"error\",\n \"jsdoc/check-alignment\": \"error\",\n \"jsdoc/empty-tags\": \"error\",\n \"jsdoc/implements-on-classes\": \"error\",\n \"jsdoc/multiline-blocks\": \"error\",\n \"jsdoc/no-multi-asterisks\": \"error\",\n \"jsdoc/require-property\": \"error\",\n \"jsdoc/require-property-description\": \"error\",\n \"jsdoc/require-property-name\": \"error\",\n \"jsdoc/require-property-type\": \"error\",\n \"jsdoc/require-returns-check\": \"error\",\n \"jsdoc/require-returns-description\": \"error\",\n \"jsdoc/require-yields\": \"error\",\n \"jsdoc/require-yields-check\": \"error\",\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-boundaries.js","sourceRoot":"","sources":["../../../../../../../../libs/eslint/plugin-trackunit/src/lib/config/fragments/module-boundaries.ts"],"names":[],"mappings":";;;AAEa,QAAA,mBAAmB,GAAuB;IACrD,+BAA+B,EAAE;QAC/B,OAAO;QACP;YACE,KAAK,EAAE,EAAE;YAET,cAAc,EAAE;gBACd;oBACE,SAAS,EAAE,UAAU;oBACrB,wBAAwB,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,cAAc,CAAC;oBAC1E,qBAAqB,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;iBACpD;gBACD;oBACE,SAAS,EAAE,gBAAgB;oBAC3B,wBAAwB,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC;oBACxD,qBAAqB,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;iBACpD;gBACD;oBACE,SAAS,EAAE,YAAY;oBACvB,wBAAwB,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC;oBACxD,qBAAqB,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;iBACpD;gBACD;oBACE,SAAS,EAAE,cAAc;oBACzB,wBAAwB,EAAE,CAAC,cAAc,CAAC;oBAC1C,qBAAqB,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;iBAC7C;gBACD;oBACE,SAAS,EAAE,WAAW;oBACtB,wBAAwB,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;iBAC3D;gBACD;oBACE,SAAS,EAAE,cAAc;oBACzB,wBAAwB,EAAE,CAAC,cAAc,CAAC;iBAC3C;gBACD;oBACE,SAAS,EAAE,YAAY;oBACvB,wBAAwB,EAAE,CAAC,YAAY,CAAC;iBACzC;gBACD;oBACE,SAAS,EAAE,cAAc;oBACzB,wBAAwB,EAAE,CAAC,cAAc,CAAC;iBAC3C;gBACD;oBACE,SAAS,EAAE,iBAAiB;oBAC5B,wBAAwB,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;iBACnE;gBACD;oBACE,SAAS,EAAE,qBAAqB;oBAChC,wBAAwB,EAAE,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;iBACvE;gBACD;oBACE,SAAS,EAAE,mBAAmB;oBAC9B,wBAAwB,EAAE,CAAC,mBAAmB,CAAC;iBAChD;gBACD;oBACE,SAAS,EAAE,4BAA4B;oBACvC,uBAAuB,EAAE,CAAC,YAAY,CAAC;iBACxC;gBACD;oBACE,SAAS,EAAE,cAAc;iBAC1B;gBACD;oBACE,SAAS,EAAE,YAAY;iBACxB;gBACD;oBACE,SAAS,EAAE,OAAO;iBACnB;gBACD;oBACE,SAAS,EAAE,OAAO;iBACnB;gBACD;oBACE,SAAS,EAAE,OAAO;iBACnB;gBACD;oBACE,SAAS,EAAE,OAAO;iBACnB;gBACD;oBACE,SAAS,EAAE,aAAa;oBACxB,wBAAwB,EAAE,CAAC,aAAa,CAAC;oBACzC,qBAAqB,EAAE,CAAC,WAAW,CAAC;oBACpC,uBAAuB,EAAE,CAAC,YAAY,CAAC;iBACxC;aACF;YAED,6BAA6B,EAAE,IAAI;YACnC,yBAAyB,EAAE,IAAI;SAChC;KACF;CACF,CAAC","sourcesContent":["import type { Linter } from \"eslint\";\n\nexport const moduleBoundaryRules: Linter.RulesRecord = {\n \"@nx/enforce-module-boundaries\": [\n \"error\",\n {\n allow: [],\n\n depConstraints: [\n {\n sourceTag: \"type:app\",\n onlyDependOnLibsWithTags: [\"type:extension\", \"type:react\", \"type:vanilla\"],\n bannedExternalImports: [\"i18next\", \"react-i18next\"],\n },\n {\n sourceTag: \"type:extension\",\n onlyDependOnLibsWithTags: [\"type:react\", \"type:vanilla\"],\n bannedExternalImports: [\"i18next\", \"react-i18next\"],\n },\n {\n sourceTag: \"type:react\",\n onlyDependOnLibsWithTags: [\"type:react\", \"type:vanilla\"],\n bannedExternalImports: [\"i18next\", \"react-i18next\"],\n },\n {\n sourceTag: \"type:vanilla\",\n onlyDependOnLibsWithTags: [\"type:vanilla\"],\n bannedExternalImports: [\"i18next\", \"react*\"],\n },\n {\n sourceTag: \"scope:app\",\n onlyDependOnLibsWithTags: [\"scope:client\", \"scope:server\"],\n },\n {\n sourceTag: \"scope:client\",\n onlyDependOnLibsWithTags: [\"scope:client\"],\n },\n {\n sourceTag: \"scope:tool\",\n onlyDependOnLibsWithTags: [\"scope:tool\"],\n },\n {\n sourceTag: \"scope:server\",\n onlyDependOnLibsWithTags: [\"scope:server\"],\n },\n {\n sourceTag: \"visibility:host\",\n onlyDependOnLibsWithTags: [\"visibility:host\", \"visibility:shared\"],\n },\n {\n sourceTag: \"visibility:iris-app\",\n onlyDependOnLibsWithTags: [\"visibility:iris-app\", \"visibility:shared\"],\n },\n {\n sourceTag: \"visibility:shared\",\n onlyDependOnLibsWithTags: [\"visibility:shared\"],\n },\n {\n sourceTag: \"dependencies:no-deprecated\",\n notDependOnLibsWithTags: [\"deprecated\"],\n },\n {\n sourceTag: \"gql:internal\",\n },\n {\n sourceTag: \"gql:public\",\n },\n {\n sourceTag: \"tier1\",\n },\n {\n sourceTag: \"tier2\",\n },\n {\n sourceTag: \"tier3\",\n },\n {\n sourceTag: \"tier4\",\n },\n {\n sourceTag: \"publish:npm\",\n onlyDependOnLibsWithTags: [\"publish:npm\"],\n bannedExternalImports: [\"@sentry/*\"],\n notDependOnLibsWithTags: [\"deprecated\"],\n },\n ],\n\n enforceBuildableLibDependency: true,\n banTransitiveDependencies: true,\n },\n ],\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"no-direct-storage-access.js","sourceRoot":"","sources":["../../../../../../../../libs/eslint/plugin-trackunit/src/lib/config/fragments/no-direct-storage-access.ts"],"names":[],"mappings":";;;AACA,oCAA4C;AAE5C,MAAM,mBAAmB,GACvB,uHAAuH,CAAC;AAC1H,MAAM,qBAAqB,GACzB,6HAA6H,CAAC;AAEnH,QAAA,0BAA0B,GAAqB;IAC1D,OAAO;IACP;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,mBAAmB;KAC7B;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,qBAAqB;KAC/B;CACF,CAAC;AAEW,QAAA,6BAA6B,GAAqB;IAC7D,OAAO;IACP;QACE,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,mBAAmB;KAC7B;IACD;QACE,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,gBAAgB;QAC1B,OAAO,EAAE,qBAAqB;KAC/B;IACD;QACE,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,mBAAmB;KAC7B;IACD;QACE,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,gBAAgB;QAC1B,OAAO,EAAE,qBAAqB;KAC/B;CACF,CAAC;AAEF,MAAM,8BAA8B,GAAG;IACrC,iEAAiE;IACjE,wEAAwE;IACxE,mEAAmE;IACnE,0EAA0E;CAC3E,CAAC;AAEW,QAAA,yCAAyC,GAAkB;IACtE,QAAQ,EAAE,IAAA,wBAAgB,GAAE;IAC5B,KAAK,EAAE,8BAA8B;IACrC,KAAK,EAAE;QACL,0BAA0B,EAAE,KAAK;KAClC;CACF,CAAC","sourcesContent":["import type { Linter } from \"eslint\";\nimport { findMonorepoRoot } from \"../utils\";\n\nconst localStorageMessage =\n \"Use useLocalStorage or useLocalStorageReducer from @trackunit/react-components instead of direct localStorage access.\";\nconst sessionStorageMessage =\n \"Use useSessionStorage or useSessionStorageReducer from @trackunit/react-components instead of direct sessionStorage access.\";\n\nexport const noDirectStorageGlobalsRule: Linter.RuleEntry = [\n \"error\",\n {\n name: \"localStorage\",\n message: localStorageMessage,\n },\n {\n name: \"sessionStorage\",\n message: sessionStorageMessage,\n },\n];\n\nexport const noDirectStoragePropertiesRule: Linter.RuleEntry = [\n \"error\",\n {\n object: \"window\",\n property: \"localStorage\",\n message: localStorageMessage,\n },\n {\n object: \"window\",\n property: \"sessionStorage\",\n message: sessionStorageMessage,\n },\n {\n object: \"globalThis\",\n property: \"localStorage\",\n message: localStorageMessage,\n },\n {\n object: \"globalThis\",\n property: \"sessionStorage\",\n message: sessionStorageMessage,\n },\n];\n\nconst storageHookImplementationFiles = [\n \"libs/react/components/src/hooks/localStorage/useLocalStorage.ts\",\n \"libs/react/components/src/hooks/localStorage/useLocalStorageReducer.ts\",\n \"libs/react/components/src/hooks/localStorage/useSessionStorage.ts\",\n \"libs/react/components/src/hooks/localStorage/useSessionStorageReducer.ts\",\n];\n\nexport const noDirectStoragePropertyExceptionOverrides: Linter.Config = {\n basePath: findMonorepoRoot(),\n files: storageHookImplementationFiles,\n rules: {\n \"no-restricted-properties\": \"off\",\n },\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"react-rules.js","sourceRoot":"","sources":["../../../../../../../../libs/eslint/plugin-trackunit/src/lib/config/fragments/react-rules.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Linter } from \"eslint\";\n\nexport const reactRules: Linter.RulesRecord = {\n \"react-hooks/rules-of-hooks\": \"error\",\n \"react-hooks/exhaustive-deps\": \"error\",\n\n \"react-hooks/config\": \"error\",\n \"react-hooks/error-boundaries\": \"error\",\n \"react-hooks/component-hook-factories\": \"error\",\n \"react-hooks/gating\": \"error\",\n \"react-hooks/globals\": \"error\",\n \"react-hooks/set-state-in-render\": \"error\",\n \"react-hooks/use-memo\": \"error\",\n \"react/self-closing-comp\": \"error\",\n \"react-hooks/unsupported-syntax\": \"error\",\n \"react-hooks/static-components\": \"error\",\n \"react-hooks/purity\": \"error\",\n\n \"react-hooks/immutability\": \"warn\",\n \"react/no-unstable-nested-components\": \"warn\",\n \"react-hooks/refs\": \"warn\",\n \"react-hooks/set-state-in-effect\": \"warn\",\n \"react-hooks/preserve-manual-memoization\": \"warn\",\n \"react-hooks/incompatible-library\": \"warn\",\n\n \"react/jsx-curly-brace-presence\": [\n \"error\",\n {\n children: \"never\",\n propElementValues: \"always\",\n props: \"never\",\n },\n ],\n\n \"react/jsx-key\": \"error\",\n \"react/jsx-no-leaked-render\": \"error\",\n \"react/jsx-uses-react\": \"error\",\n \"react/jsx-uses-vars\": \"error\",\n \"react/no-danger\": \"error\",\n \"react/no-unused-prop-types\": \"error\",\n \"react/jsx-sort-props\": \"error\",\n\n \"react/no-children-prop\": [\n \"error\",\n {\n allowFunctions: false,\n },\n ],\n};\n\nexport const reactCustomRules: Linter.RulesRecord = {\n \"@trackunit/no-template-strings-in-classname-prop\": \"error\",\n \"@trackunit/require-classname-alternatives\": [\n \"error\",\n {\n alternatives: {\n slate: [\"neutral\"],\n gray: [\"neutral\"],\n zinc: [\"neutral\"],\n stone: [\"neutral\"],\n teal: [\"cyan\"],\n purple: [\"violet\"],\n fuchsia: [\"pink\"],\n red: [\"danger\"],\n yellow: [\"warning\"],\n green: [\"success\"],\n emerald: [\"success\"],\n amber: [\"warning\", \"low\", \"idle\"],\n sky: [\"primary\", \"info\"],\n blue: [\"primary\", \"info\", \"working\", \"utilized\"],\n indigo: [\"primary\", \"violet\"],\n rose: [\"danger\", \"pink\"],\n },\n prefixes: [\n \"bg\",\n \"text\",\n \"border\",\n \"border-t\",\n \"border-r\",\n \"border-b\",\n \"border-l\",\n \"border-x\",\n \"border-y\",\n \"ring\",\n \"ring-offset\",\n \"outline\",\n \"divide\",\n \"shadow\",\n \"accent\",\n \"caret\",\n \"fill\",\n \"stroke\",\n \"decoration\",\n \"placeholder\",\n \"from\",\n \"via\",\n \"to\",\n ],\n },\n ],\n \"@trackunit/require-list-item-virtualization-props\": \"error\",\n \"@trackunit/cva-merge-base-classes-as-array\": \"error\",\n \"@trackunit/design-guideline-button-icon-size-match\": \"error\",\n \"@trackunit/prefer-destructured-imports\": [\n \"error\",\n {\n packages: {\n react: \"React\",\n },\n },\n ],\n \"@trackunit/require-optional-prop-initialization\": \"error\",\n \"@trackunit/prefer-event-specific-callback-naming\": [\n \"error\",\n {\n events: [\"onClick\", \"onSubmit\", \"onDoubleClick\"],\n },\n ],\n \"@trackunit/prefer-mouse-event-handler-in-react-props\": [\n \"error\",\n {\n allowedNames: [\"onClickClose\"],\n },\n ],\n \"@trackunit/prefer-field-components\": \"error\",\n \"@trackunit/one-component-per-file\": \"warn\",\n \"@trackunit/component-name-matches-filename\": [\n \"warn\",\n {\n allowedMismatches: [\n // i18next convention: every library's translation.tsx exports a `Trans` wrapper\n // named after the library component, not the file.\n { file: \"translation\", component: \"Trans\" },\n // React context pattern: *Context files always contain both the context object and\n // the provider component. The provider can't be renamed to match the file because\n // the context object already uses that name.\n { file: \"*Context\", component: \"*Provider\" },\n ],\n },\n ],\n};\n\nexport const reactTestingLibraryOverrides: Linter.Config = {\n files: [\"**/*.spec.ts\", \"**/*.spec.tsx\"],\n rules: {\n \"jest/no-commented-out-tests\": \"error\",\n \"jest/expect-expect\": \"error\",\n },\n};\n\nexport const reactStoryOverrides: Linter.Config = {\n files: [\"**/*.stories.ts\", \"**/*.stories.tsx\"],\n rules: {\n \"jsdoc/require-jsdoc\": \"off\",\n \"no-console\": \"off\",\n \"@typescript-eslint/no-empty-function\": \"off\",\n },\n};\n"]}
|