@pjts/eslint-style-rules 0.0.8 → 0.0.9

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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -8
  3. package/dist/index.js +35 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/ast.d.ts +27 -13
  6. package/dist/lib/ast.js +33 -7
  7. package/dist/lib/ast.js.map +1 -1
  8. package/dist/lib/db.d.ts +5 -4
  9. package/dist/lib/db.js +2 -2
  10. package/dist/lib/db.js.map +1 -1
  11. package/dist/lib/rule.d.ts +8 -6
  12. package/dist/lib/rule.js +3 -3
  13. package/dist/lib/rule.js.map +1 -1
  14. package/dist/lib/types.d.ts +69 -0
  15. package/dist/lib/types.js +270 -0
  16. package/dist/lib/types.js.map +1 -0
  17. package/dist/lib/wiring.d.ts +5 -3
  18. package/dist/lib/wiring.js +8 -4
  19. package/dist/lib/wiring.js.map +1 -1
  20. package/dist/rules/app-class-suffix.d.ts +1 -1
  21. package/dist/rules/app-class-suffix.js +1 -1
  22. package/dist/rules/app-class-suffix.js.map +1 -1
  23. package/dist/rules/app-service-endpoints.d.ts +3 -1
  24. package/dist/rules/app-service-endpoints.js +9 -8
  25. package/dist/rules/app-service-endpoints.js.map +1 -1
  26. package/dist/rules/auth-access.d.ts +2 -2
  27. package/dist/rules/auth-access.js +11 -10
  28. package/dist/rules/auth-access.js.map +1 -1
  29. package/dist/rules/config-provider-only.d.ts +1 -1
  30. package/dist/rules/config-provider-only.js +5 -3
  31. package/dist/rules/config-provider-only.js.map +1 -1
  32. package/dist/rules/db-client-dependency.d.ts +1 -1
  33. package/dist/rules/db-client-dependency.js +11 -7
  34. package/dist/rules/db-client-dependency.js.map +1 -1
  35. package/dist/rules/db-writes-in-repositories.d.ts +1 -1
  36. package/dist/rules/db-writes-in-repositories.js +12 -8
  37. package/dist/rules/db-writes-in-repositories.js.map +1 -1
  38. package/dist/rules/decorated-class-contract.d.ts +1 -1
  39. package/dist/rules/decorated-class-contract.js +1 -1
  40. package/dist/rules/decorated-class-contract.js.map +1 -1
  41. package/dist/rules/domain-primitive-params.d.ts +17 -0
  42. package/dist/rules/domain-primitive-params.js +116 -0
  43. package/dist/rules/domain-primitive-params.js.map +1 -0
  44. package/dist/rules/entity-constructor-data.d.ts +1 -1
  45. package/dist/rules/entity-constructor-data.js +4 -3
  46. package/dist/rules/entity-constructor-data.js.map +1 -1
  47. package/dist/rules/event-sourced-aggregate.d.ts +2 -2
  48. package/dist/rules/event-sourced-aggregate.js +8 -8
  49. package/dist/rules/event-sourced-aggregate.js.map +1 -1
  50. package/dist/rules/find-one-naming.d.ts +3 -2
  51. package/dist/rules/find-one-naming.js +35 -8
  52. package/dist/rules/find-one-naming.js.map +1 -1
  53. package/dist/rules/implements-ports-only.d.ts +10 -0
  54. package/dist/rules/implements-ports-only.js +74 -0
  55. package/dist/rules/implements-ports-only.js.map +1 -0
  56. package/dist/rules/import-only-in.d.ts +1 -1
  57. package/dist/rules/import-only-in.js +7 -3
  58. package/dist/rules/import-only-in.js.map +1 -1
  59. package/dist/rules/knex-first.d.ts +2 -1
  60. package/dist/rules/knex-first.js +11 -4
  61. package/dist/rules/knex-first.js.map +1 -1
  62. package/dist/rules/message-file.d.ts +1 -1
  63. package/dist/rules/message-file.js +3 -2
  64. package/dist/rules/message-file.js.map +1 -1
  65. package/dist/rules/message-handler.d.ts +1 -1
  66. package/dist/rules/message-handler.js +7 -6
  67. package/dist/rules/message-handler.js.map +1 -1
  68. package/dist/rules/message-name-reference.d.ts +2 -1
  69. package/dist/rules/message-name-reference.js +24 -5
  70. package/dist/rules/message-name-reference.js.map +1 -1
  71. package/dist/rules/message-names.d.ts +1 -1
  72. package/dist/rules/message-names.js +2 -2
  73. package/dist/rules/message-names.js.map +1 -1
  74. package/dist/rules/module-layout.d.ts +1 -1
  75. package/dist/rules/module-layout.js +1 -1
  76. package/dist/rules/module-layout.js.map +1 -1
  77. package/dist/rules/module-service-getters.d.ts +1 -1
  78. package/dist/rules/module-service-getters.js +11 -9
  79. package/dist/rules/module-service-getters.js.map +1 -1
  80. package/dist/rules/module-shape.d.ts +1 -1
  81. package/dist/rules/module-shape.js +6 -7
  82. package/dist/rules/module-shape.js.map +1 -1
  83. package/dist/rules/no-async-in-domain.d.ts +1 -1
  84. package/dist/rules/no-async-in-domain.js +2 -2
  85. package/dist/rules/no-async-in-domain.js.map +1 -1
  86. package/dist/rules/no-duplicate-sdk-types.d.ts +1 -1
  87. package/dist/rules/no-duplicate-sdk-types.js +1 -1
  88. package/dist/rules/no-duplicate-sdk-types.js.map +1 -1
  89. package/dist/rules/no-entity-assembly-in-app.d.ts +4 -2
  90. package/dist/rules/no-entity-assembly-in-app.js +24 -8
  91. package/dist/rules/no-entity-assembly-in-app.js.map +1 -1
  92. package/dist/rules/no-entity-mutation-outside-domain.d.ts +1 -1
  93. package/dist/rules/no-entity-mutation-outside-domain.js +1 -1
  94. package/dist/rules/no-entity-mutation-outside-domain.js.map +1 -1
  95. package/dist/rules/no-manual-wiring.d.ts +1 -1
  96. package/dist/rules/no-manual-wiring.js +5 -2
  97. package/dist/rules/no-manual-wiring.js.map +1 -1
  98. package/dist/rules/no-message-construction-outside-domain.d.ts +1 -1
  99. package/dist/rules/no-message-construction-outside-domain.js +1 -1
  100. package/dist/rules/no-message-construction-outside-domain.js.map +1 -1
  101. package/dist/rules/no-reconstitute.d.ts +1 -1
  102. package/dist/rules/no-reconstitute.js +1 -1
  103. package/dist/rules/no-reconstitute.js.map +1 -1
  104. package/dist/rules/one-class-per-file.d.ts +7 -0
  105. package/dist/rules/one-class-per-file.js +55 -0
  106. package/dist/rules/one-class-per-file.js.map +1 -0
  107. package/dist/rules/port-file.d.ts +1 -1
  108. package/dist/rules/port-file.js +3 -2
  109. package/dist/rules/port-file.js.map +1 -1
  110. package/dist/rules/port-has-adapters.d.ts +1 -1
  111. package/dist/rules/port-has-adapters.js +1 -1
  112. package/dist/rules/port-has-adapters.js.map +1 -1
  113. package/dist/rules/repository-naming.d.ts +1 -1
  114. package/dist/rules/repository-naming.js +2 -2
  115. package/dist/rules/repository-naming.js.map +1 -1
  116. package/dist/rules/repository-return-types.d.ts +10 -0
  117. package/dist/rules/repository-return-types.js +67 -0
  118. package/dist/rules/repository-return-types.js.map +1 -0
  119. package/dist/rules/repository-serialization.d.ts +13 -3
  120. package/dist/rules/repository-serialization.js +108 -12
  121. package/dist/rules/repository-serialization.js.map +1 -1
  122. package/dist/rules/return-entities.d.ts +1 -1
  123. package/dist/rules/return-entities.js +3 -3
  124. package/dist/rules/return-entities.js.map +1 -1
  125. package/dist/rules/save-contract.d.ts +5 -3
  126. package/dist/rules/save-contract.js +18 -5
  127. package/dist/rules/save-contract.js.map +1 -1
  128. package/dist/rules/subclass-declares-constructor.d.ts +1 -1
  129. package/dist/rules/subclass-declares-constructor.js +1 -1
  130. package/dist/rules/subclass-declares-constructor.js.map +1 -1
  131. package/dist/rules/test-location.d.ts +1 -1
  132. package/dist/rules/test-location.js +1 -1
  133. package/dist/rules/test-location.js.map +1 -1
  134. package/dist/rules/throw-app-error.d.ts +1 -1
  135. package/dist/rules/throw-app-error.js +4 -3
  136. package/dist/rules/throw-app-error.js.map +1 -1
  137. package/dist/rules/trackable-repository.d.ts +1 -1
  138. package/dist/rules/trackable-repository.js +4 -4
  139. package/dist/rules/trackable-repository.js.map +1 -1
  140. package/dist/rules/unique-class-names.d.ts +1 -1
  141. package/dist/rules/unique-class-names.js +5 -4
  142. package/dist/rules/unique-class-names.js.map +1 -1
  143. package/package.json +18 -6
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTypeClassifier = exports.typePolicy = exports.resolveModule = exports.projectRootOf = exports.resetParsedFiles = exports.indexProgram = exports.typePolicySchema = exports.DEFAULT_NATIVE_TYPES = exports.DEFAULT_PATH_ALIASES = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
6
+ const node_path_1 = tslib_1.__importDefault(require("node:path"));
7
+ const ast_1 = require("./ast");
8
+ exports.DEFAULT_PATH_ALIASES = { '@modules/*': 'src/modules/*', '@common/*': 'src/common/*' };
9
+ exports.DEFAULT_NATIVE_TYPES = [
10
+ 'Date', 'Record', 'Partial', 'Pick', 'Omit', 'Required', 'Map', 'Set', 'ReadonlyMap', 'ReadonlySet',
11
+ 'Object', 'String', 'Number', 'Boolean', 'BigInt',
12
+ ];
13
+ /** Wrappers whose first type argument is what counts. */
14
+ const TRANSPARENT = new Set(['Array', 'ReadonlyArray', 'Promise', 'Readonly', 'NonNullable']);
15
+ exports.typePolicySchema = {
16
+ allowTypeSuffixes: { type: 'array', items: { type: 'string' } },
17
+ allowTypesFrom: { type: 'array', items: { type: 'string' } },
18
+ pathAliases: { type: 'object', additionalProperties: { type: 'string' } },
19
+ nativeTypes: { type: 'array', items: { type: 'string' } },
20
+ checkAny: { type: 'boolean' },
21
+ };
22
+ const declarationKind = (node) => {
23
+ switch (node?.type) {
24
+ case 'ClassDeclaration': return 'class';
25
+ case 'TSInterfaceDeclaration': return 'interface';
26
+ case 'TSTypeAliasDeclaration': return 'alias';
27
+ case 'TSEnumDeclaration': return 'enum';
28
+ default: return null;
29
+ }
30
+ };
31
+ /** Top-level declarations, imports and re-exports of a parsed `Program`. */
32
+ const indexProgram = (program, file) => {
33
+ const index = { file, declarations: new Map(), imports: new Map(), localExports: new Map(), namedReexports: new Map(), starReexports: [] };
34
+ const declare = (node) => {
35
+ const kind = declarationKind(node);
36
+ if (!kind || !node.id?.name)
37
+ return;
38
+ // Declaration merging (`interface X` + `class X`): the class is what values are.
39
+ if (index.declarations.get(node.id.name)?.kind === 'class')
40
+ return;
41
+ index.declarations.set(node.id.name, { kind, node });
42
+ };
43
+ for (const statement of program.body) {
44
+ if (statement.type === 'ImportDeclaration') {
45
+ for (const specifier of statement.specifiers) {
46
+ if (specifier.type === 'ImportSpecifier') {
47
+ index.imports.set(specifier.local.name, { source: statement.source.value, imported: specifier.imported.name ?? specifier.imported.value });
48
+ }
49
+ }
50
+ }
51
+ else if (statement.type === 'ExportNamedDeclaration') {
52
+ if (statement.declaration)
53
+ declare(statement.declaration);
54
+ for (const specifier of statement.specifiers ?? []) {
55
+ const exported = specifier.exported.name ?? specifier.exported.value;
56
+ const local = specifier.local.name ?? specifier.local.value;
57
+ if (statement.source)
58
+ index.namedReexports.set(exported, { source: statement.source.value, imported: local });
59
+ else
60
+ index.localExports.set(exported, local);
61
+ }
62
+ }
63
+ else if (statement.type === 'ExportAllDeclaration') {
64
+ if (!statement.exported)
65
+ index.starReexports.push(statement.source.value);
66
+ }
67
+ else if (statement.type === 'ExportDefaultDeclaration') {
68
+ declare(statement.declaration);
69
+ }
70
+ else {
71
+ declare(statement);
72
+ }
73
+ }
74
+ return index;
75
+ };
76
+ exports.indexProgram = indexProgram;
77
+ const parsed = new Map();
78
+ const parseFile = (file, parser) => {
79
+ let mtime;
80
+ try {
81
+ mtime = node_fs_1.default.statSync(file).mtimeMs;
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ const cached = parsed.get(file);
87
+ if (cached && cached.mtime === mtime)
88
+ return cached.index;
89
+ let index = null;
90
+ try {
91
+ const code = node_fs_1.default.readFileSync(file, 'utf8');
92
+ const options = { sourceType: 'module', ecmaVersion: 'latest', filePath: file, range: true, loc: true };
93
+ const program = parser.parseForESLint ? parser.parseForESLint(code, options).ast : parser.parse(code, options);
94
+ index = (0, exports.indexProgram)(program, file);
95
+ }
96
+ catch {
97
+ index = null;
98
+ }
99
+ parsed.set(file, { mtime, index });
100
+ return index;
101
+ };
102
+ /** Test hook. */
103
+ const resetParsedFiles = () => parsed.clear();
104
+ exports.resetParsedFiles = resetParsedFiles;
105
+ /** `<…>/src/<rest>` → `<…>` (the folder holding `src/`), or null. */
106
+ const projectRootOf = (file) => {
107
+ const index = file.lastIndexOf('/src/');
108
+ return index === -1 ? null : file.slice(0, index);
109
+ };
110
+ exports.projectRootOf = projectRootOf;
111
+ const toPosix = (p) => p.split(node_path_1.default.sep).join('/');
112
+ /** Resolves an import source to a `.ts` file, or null for packages and missing files. */
113
+ const resolveModule = (source, fromFile, aliases) => {
114
+ let base = null;
115
+ if (source.startsWith('.')) {
116
+ base = node_path_1.default.resolve(node_path_1.default.dirname(fromFile), source);
117
+ }
118
+ else {
119
+ const root = (0, exports.projectRootOf)(fromFile);
120
+ for (const [pattern, target] of Object.entries(aliases)) {
121
+ const prefix = pattern.replace(/\*$/, '');
122
+ if (root && (pattern.endsWith('*') ? source.startsWith(prefix) : source === pattern)) {
123
+ base = node_path_1.default.join(root, target.replace(/\*$/, '') + (pattern.endsWith('*') ? source.slice(prefix.length) : ''));
124
+ break;
125
+ }
126
+ }
127
+ }
128
+ if (!base)
129
+ return null;
130
+ for (const candidate of [`${base}.ts`, `${base}.tsx`, `${base}.d.ts`, node_path_1.default.join(base, 'index.ts'), base]) {
131
+ try {
132
+ if (node_fs_1.default.statSync(candidate).isFile() && /\.tsx?$/.test(candidate))
133
+ return toPosix(candidate);
134
+ }
135
+ catch {
136
+ // next candidate
137
+ }
138
+ }
139
+ return null;
140
+ };
141
+ exports.resolveModule = resolveModule;
142
+ const TYPE_KEYWORDS = {
143
+ TSStringKeyword: 'string', TSNumberKeyword: 'number', TSBooleanKeyword: 'boolean', TSBigIntKeyword: 'bigint', TSSymbolKeyword: 'symbol',
144
+ };
145
+ const ANY_KEYWORDS = { TSAnyKeyword: 'any', TSUnknownKeyword: 'unknown', TSObjectKeyword: 'object' };
146
+ const OK_KEYWORDS = new Set(['TSNullKeyword', 'TSUndefinedKeyword', 'TSVoidKeyword', 'TSNeverKeyword']);
147
+ const typePolicy = (options, defaults = {}) => ({
148
+ allowTypeSuffixes: options?.allowTypeSuffixes ?? defaults.allowTypeSuffixes ?? [],
149
+ allowTypesFrom: options?.allowTypesFrom ?? defaults.allowTypesFrom ?? ['src/common/messages'],
150
+ pathAliases: options?.pathAliases ?? defaults.pathAliases ?? exports.DEFAULT_PATH_ALIASES,
151
+ nativeTypes: options?.nativeTypes ?? defaults.nativeTypes ?? exports.DEFAULT_NATIVE_TYPES,
152
+ checkAny: options?.checkAny ?? defaults.checkAny ?? false,
153
+ });
154
+ exports.typePolicy = typePolicy;
155
+ /** A classifier for the file being linted (its own declarations come from `context.sourceCode.ast`). */
156
+ const createTypeClassifier = (context, policy) => {
157
+ const parser = context.languageOptions?.parser ?? require('typescript-eslint').parser;
158
+ const current = (0, ast_1.filePath)(context);
159
+ let currentIndex = null;
160
+ const own = () => (currentIndex ??= (0, exports.indexProgram)(context.sourceCode.ast, current));
161
+ const source = context.sourceCode;
162
+ const isAllowedLocation = (file) => {
163
+ const root = (0, exports.projectRootOf)(file);
164
+ return policy.allowTypesFrom.some((fragment) => {
165
+ const clean = fragment.replace(/^\/+|\/+$/g, '');
166
+ return root ? file.startsWith(`${root}/${clean}/`) : file.includes(`/${clean}/`);
167
+ });
168
+ };
169
+ const exported = (index, name, depth) => {
170
+ if (depth > 12)
171
+ return null;
172
+ const local = index.localExports.get(name) ?? name;
173
+ const declared = index.declarations.get(local);
174
+ if (declared)
175
+ return { ...declared, index };
176
+ if (index.localExports.has(name) || index.imports.has(local))
177
+ return fromImport(index, local, depth + 1);
178
+ const named = index.namedReexports.get(name);
179
+ if (named) {
180
+ const target = (0, exports.resolveModule)(named.source, index.file, policy.pathAliases);
181
+ const targetIndex = target && parseFile(target, parser);
182
+ return targetIndex ? exported(targetIndex, named.imported, depth + 1) : null;
183
+ }
184
+ for (const star of index.starReexports) {
185
+ const target = (0, exports.resolveModule)(star, index.file, policy.pathAliases);
186
+ const targetIndex = target && parseFile(target, parser);
187
+ const found = targetIndex && exported(targetIndex, name, depth + 1);
188
+ if (found)
189
+ return found;
190
+ }
191
+ return null;
192
+ };
193
+ const fromImport = (index, name, depth) => {
194
+ const imported = index.imports.get(name);
195
+ if (!imported)
196
+ return null;
197
+ const target = (0, exports.resolveModule)(imported.source, index.file, policy.pathAliases);
198
+ const targetIndex = target && parseFile(target, parser);
199
+ return targetIndex ? exported(targetIndex, imported.imported, depth) : null;
200
+ };
201
+ const resolveIn = (index, name) => {
202
+ const declared = index.declarations.get(name);
203
+ if (declared)
204
+ return { ...declared, index };
205
+ return fromImport(index, name, 0);
206
+ };
207
+ const referenceName = (typeName) => (typeName?.type === 'Identifier' ? typeName.name : null);
208
+ /** `visiting` guards alias cycles (`type A = B; type B = A`). */
209
+ const classify = (type, index, visiting) => {
210
+ if (!type)
211
+ return false;
212
+ if (TYPE_KEYWORDS[type.type])
213
+ return true;
214
+ if (ANY_KEYWORDS[type.type])
215
+ return policy.checkAny;
216
+ if (OK_KEYWORDS.has(type.type))
217
+ return false;
218
+ switch (type.type) {
219
+ case 'TSLiteralType':
220
+ case 'TSTemplateLiteralType':
221
+ case 'TSTypeLiteral':
222
+ case 'TSMappedType':
223
+ case 'TSTupleType':
224
+ case 'TSIndexedAccessType':
225
+ return true;
226
+ case 'TSTypeOperator':
227
+ return type.operator === 'keyof' ? true : classify(type.typeAnnotation, index, visiting);
228
+ case 'TSArrayType':
229
+ return classify(type.elementType, index, visiting);
230
+ case 'TSUnionType':
231
+ case 'TSIntersectionType':
232
+ return type.types.some((member) => classify(member, index, visiting));
233
+ case 'TSTypeReference': {
234
+ const name = referenceName(type.typeName);
235
+ if (!name)
236
+ return false;
237
+ if (TRANSPARENT.has(name))
238
+ return classify(type.typeArguments?.params?.[0], index, visiting);
239
+ if (policy.allowTypeSuffixes.some((suffix) => name.endsWith(suffix) && name !== suffix))
240
+ return false;
241
+ const declaration = resolveIn(index, name);
242
+ if (!declaration)
243
+ return policy.nativeTypes.includes(name);
244
+ if (isAllowedLocation(declaration.index.file))
245
+ return false;
246
+ if (declaration.kind === 'class')
247
+ return false;
248
+ if (declaration.kind !== 'alias')
249
+ return true;
250
+ if (visiting.has(declaration.node))
251
+ return false;
252
+ visiting.add(declaration.node);
253
+ return classify(declaration.node.typeAnnotation, declaration.index, visiting);
254
+ }
255
+ default:
256
+ return false;
257
+ }
258
+ };
259
+ const describe = (type) => {
260
+ const text = source.getText(type).replace(/\s+/g, ' ');
261
+ return text.length > 80 ? `${text.slice(0, 77)}…` : text;
262
+ };
263
+ return {
264
+ plainReason: (type) => (classify(type, own(), new Set()) ? describe(type) : null),
265
+ resolve: (name) => resolveIn(own(), name),
266
+ isAllowedLocation,
267
+ };
268
+ };
269
+ exports.createTypeClassifier = createTypeClassifier;
270
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":";;;;AAAA,8DAAyB;AACzB,kEAA6B;AAC7B,+BAAiC;AAwBpB,QAAA,oBAAoB,GAA2B,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AAC9G,QAAA,oBAAoB,GAAG;IAClC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa;IACnG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;CAClD,CAAC;AACF,yDAAyD;AACzD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;AAEjF,QAAA,gBAAgB,GAA2C;IACtE,iBAAiB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAC/D,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAC5D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IACzE,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;CAC9B,CAAC;AAsBF,MAAM,eAAe,GAAG,CAAC,IAAS,EAA0B,EAAE;IAC5D,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC;QACnB,KAAK,kBAAkB,CAAC,CAAC,OAAO,OAAO,CAAC;QACxC,KAAK,wBAAwB,CAAC,CAAC,OAAO,WAAW,CAAC;QAClD,KAAK,wBAAwB,CAAC,CAAC,OAAO,OAAO,CAAC;QAC9C,KAAK,mBAAmB,CAAC,CAAC,OAAO,MAAM,CAAC;QACxC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,4EAA4E;AACrE,MAAM,YAAY,GAAG,CAAC,OAAY,EAAE,IAAY,EAAa,EAAE;IACpE,MAAM,KAAK,GAAc,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,YAAY,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;IACtJ,MAAM,OAAO,GAAG,CAAC,IAAS,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI;YAAE,OAAO;QACpC,iFAAiF;QACjF,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO;YAAE,OAAO;QACnE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,SAAS,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAC3C,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC7C,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACzC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC7I,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACvD,IAAI,SAAS,CAAC,WAAW;gBAAE,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC1D,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;gBACnD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACrE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC5D,IAAI,SAAS,CAAC,MAAM;oBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;;oBACzG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,QAAQ;gBAAE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YACzD,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAjCW,QAAA,YAAY,gBAiCvB;AAEF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsD,CAAC;AAE7E,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,MAAW,EAAoB,EAAE;IAChE,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,iBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC1D,IAAI,KAAK,GAAqB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,iBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACxG,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/G,KAAK,GAAG,IAAA,oBAAY,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,iBAAiB;AACV,MAAM,gBAAgB,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAA9C,QAAA,gBAAgB,oBAA8B;AAE3D,qEAAqE;AAC9D,MAAM,aAAa,GAAG,CAAC,IAAY,EAAiB,EAAE;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC,CAAC;AAHW,QAAA,aAAa,iBAGxB;AAEF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE3D,yFAAyF;AAClF,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,OAA+B,EAAiB,EAAE;IAChH,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,IAAA,qBAAa,EAAC,QAAQ,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC;gBACrF,IAAI,GAAG,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/G,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,IAAI,KAAK,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;QACzG,IAAI,CAAC;YACH,IAAI,iBAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;gBAAE,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9F,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAvBW,QAAA,aAAa,iBAuBxB;AAEF,MAAM,aAAa,GAA2B;IAC5C,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ;CACxI,CAAC;AACF,MAAM,YAAY,GAA2B,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;AAC7H,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAWjG,MAAM,UAAU,GAAG,CAAC,OAAwC,EAAE,WAAgC,EAAE,EAAc,EAAE,CAAC,CAAC;IACvH,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB,IAAI,EAAE;IACjF,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,QAAQ,CAAC,cAAc,IAAI,CAAC,qBAAqB,CAAC;IAC7F,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,QAAQ,CAAC,WAAW,IAAI,4BAAoB;IACjF,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,QAAQ,CAAC,WAAW,IAAI,4BAAoB;IACjF,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,KAAK;CAC1D,CAAC,CAAC;AANU,QAAA,UAAU,cAMpB;AAEH,wGAAwG;AACjG,MAAM,oBAAoB,GAAG,CAAC,OAAY,EAAE,MAAkB,EAAkB,EAAE;IACvF,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,MAAM,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC;IACtF,MAAM,OAAO,GAAG,IAAA,cAAQ,EAAC,OAAO,CAAC,CAAC;IAClC,IAAI,YAAY,GAAqB,IAAI,CAAC;IAC1C,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,YAAY,KAAK,IAAA,oBAAY,EAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAElC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAE,KAAa,EAAsB,EAAE;QACrF,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,QAAQ;YAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACzG,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,IAAA,qBAAa,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YAC3E,MAAM,WAAW,GAAG,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAA,qBAAa,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;YACnE,MAAM,WAAW,GAAG,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,WAAW,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACpE,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAE,KAAa,EAAsB,EAAE;QACvF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAA,qBAAa,EAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9E,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAsB,EAAE;QACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,QAAQ;YAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,QAAa,EAAiB,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEjH,iEAAiE;IACjE,MAAM,QAAQ,GAAG,CAAC,IAAS,EAAE,KAAgB,EAAE,QAAkB,EAAW,EAAE;QAC5E,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;QACpD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,eAAe,CAAC;YACrB,KAAK,uBAAuB,CAAC;YAC7B,KAAK,eAAe,CAAC;YACrB,KAAK,cAAc,CAAC;YACpB,KAAK,aAAa,CAAC;YACnB,KAAK,qBAAqB;gBACxB,OAAO,IAAI,CAAC;YACd,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3F,KAAK,aAAa;gBAChB,OAAO,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YACrD,KAAK,aAAa,CAAC;YACnB,KAAK,oBAAoB;gBACvB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7E,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI;oBAAE,OAAO,KAAK,CAAC;gBACxB,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC7F,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACtG,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,WAAW;oBAAE,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC3D,IAAI,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC5D,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO;oBAAE,OAAO,KAAK,CAAC;gBAC/C,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAC;gBAC9C,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACjD,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC/B,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChF,CAAC;YACD;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,IAAS,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjF,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC;QACzC,iBAAiB;KAClB,CAAC;AACJ,CAAC,CAAC;AAtGW,QAAA,oBAAoB,wBAsG/B"}
@@ -1,5 +1,6 @@
1
+ import type { RuleContext } from './rule';
1
2
  /** `<…>/src/<rest>` → the `src` directory of the file being linted, or null. */
2
- export declare const srcRoot: (context: any) => string | null;
3
+ export declare const srcRoot: (context: RuleContext) => string | null;
3
4
  export interface ScannedClass {
4
5
  name: string;
5
6
  file: string;
@@ -20,8 +21,9 @@ export declare const scanClasses: (src: string) => ScannedClass[];
20
21
  export declare const resetScans: () => void;
21
22
  /**
22
23
  * Adapters of `port` that the container would consider under `storage` with no active profile — the
23
- * same rules as `@pjts/container`'s `candidatesOf`: the other storage world is dropped, an adapter of the
24
- * active world outranks a storage-less one (composites stay), and a port whose adapters all live in the
24
+ * same rules as `@pjts/container`'s `candidatesOf`: the other storage world is dropped; under `memory`
25
+ * an in-memory double outranks a storage-less adapter (composites stay); under a persistent storage a
26
+ * storage-less adapter is as real as a `pg/` one and both stay; a port whose adapters all live in the
25
27
  * other world keeps them.
26
28
  */
27
29
  export declare const candidatesOf: (classes: ScannedClass[], port: string, storage: string) => ScannedClass[];
@@ -84,18 +84,22 @@ exports.resetScans = resetScans;
84
84
  const isMemory = (storage) => storage === 'memory';
85
85
  /**
86
86
  * Adapters of `port` that the container would consider under `storage` with no active profile — the
87
- * same rules as `@pjts/container`'s `candidatesOf`: the other storage world is dropped, an adapter of the
88
- * active world outranks a storage-less one (composites stay), and a port whose adapters all live in the
87
+ * same rules as `@pjts/container`'s `candidatesOf`: the other storage world is dropped; under `memory`
88
+ * an in-memory double outranks a storage-less adapter (composites stay); under a persistent storage a
89
+ * storage-less adapter is as real as a `pg/` one and both stay; a port whose adapters all live in the
89
90
  * other world keeps them.
90
91
  */
91
92
  const candidatesOf = (classes, port, storage) => {
92
93
  const active = classes.filter((cls) => cls.implements.has(port) && cls.profile === undefined);
93
94
  const inStorage = active.filter((cls) => cls.storage === undefined || isMemory(cls.storage) === isMemory(storage));
94
- const specific = inStorage.filter((cls) => cls.storage !== undefined || (0, exports.isCompositeOf)(cls, port));
95
- const preferred = specific.some((cls) => cls.storage !== undefined) ? specific : inStorage;
95
+ const preferred = isMemory(storage) ? preferDoubles(inStorage, port) : inStorage;
96
96
  return preferred.length > 0 ? preferred : active;
97
97
  };
98
98
  exports.candidatesOf = candidatesOf;
99
+ const preferDoubles = (inStorage, port) => {
100
+ const specific = inStorage.filter((cls) => cls.storage !== undefined || (0, exports.isCompositeOf)(cls, port));
101
+ return specific.some((cls) => cls.storage !== undefined) ? specific : inStorage;
102
+ };
99
103
  const isCompositeOf = (cls, port) => cls.implements.has(port) && cls.arrayParams.has(port);
100
104
  exports.isCompositeOf = isCompositeOf;
101
105
  //# sourceMappingURL=wiring.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../src/lib/wiring.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../src/lib/wiring.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  /** Application-layer classes are use-case entry points: `…Service`, `…Handler` or `…View`. */
2
- declare const _default: import("eslint").Rule.RuleModule;
2
+ declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
3
3
  export default _default;
@@ -5,7 +5,7 @@ const rule_1 = require("../lib/rule");
5
5
  exports.default = (0, rule_1.defineRule)({
6
6
  meta: {
7
7
  type: 'suggestion',
8
- docs: { description: 'Require app-layer class names to end with an allowed suffix' },
8
+ docs: { description: 'Require app-layer class names to end with an allowed suffix', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#app-class-suffix' },
9
9
  messages: { suffix: 'App-layer class "{{name}}" must end with {{allowed}}.' },
10
10
  schema: [{
11
11
  type: 'object',
@@ -1 +1 @@
1
- {"version":3,"file":"app-class-suffix.js","sourceRoot":"","sources":["../../src/rules/app-class-suffix.ts"],"names":[],"mappings":";;AAAA,sCAAyC;AACzC,8FAA8F;AAC9F,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,WAAW,EAAE,6DAA6D,EAAE;QACpF,QAAQ,EAAE,EAAE,MAAM,EAAE,uDAAuD,EAAE;QAC7E,MAAM,EAAE,CAAC;gBACP,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;gBAClF,oBAAoB,EAAE,KAAK;aAC5B,CAAC;KACH;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9E,OAAO;YACL,sBAAsB,CAAC,IAAI;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;oBACrD,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5H,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"app-class-suffix.js","sourceRoot":"","sources":["../../src/rules/app-class-suffix.ts"],"names":[],"mappings":";;AACA,sCAAyC;AACzC,8FAA8F;AAC9F,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,WAAW,EAAE,6DAA6D,EAAE,GAAG,EAAE,6FAA6F,EAAE;QACxL,QAAQ,EAAE,EAAE,MAAM,EAAE,uDAAuD,EAAE;QAC7E,MAAM,EAAE,CAAC;gBACP,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE;gBAClF,oBAAoB,EAAE,KAAK;aAC5B,CAAC;KACH;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,OAAO,GAAa,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACxF,OAAO;YACL,sBAAsB,CAAC,IAA+B;gBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAG,CAAC,IAAI,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;oBACrD,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7H,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -1,3 +1,5 @@
1
+ /** Request-binding parameter decorators accepted by default. */
2
+ export declare const DEFAULT_PARAM_DECORATORS: string[];
1
3
  /**
2
4
  * Every public method of an `@AppService` class is an HTTP endpoint: it carries exactly one HTTP
3
5
  * method decorator, and every parameter carries a request-binding decorator.
@@ -8,5 +10,5 @@
8
10
  * Non-public methods are helpers and must not carry an HTTP method decorator. Other method
9
11
  * decorators (`@Pipe(...)` guards) are allowed alongside.
10
12
  */
11
- declare const _default: import("eslint").Rule.RuleModule;
13
+ declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
12
14
  export default _default;
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PARAM_DECORATORS = void 0;
3
4
  const ast_1 = require("../lib/ast");
4
5
  const rule_1 = require("../lib/rule");
5
- /** `@Foo` and `@Foo(...)` → 'Foo'. */
6
- const decoratorName = (decorator) => decorator.expression.type === 'CallExpression' ? decorator.expression.callee.name : decorator.expression.name;
6
+ /** Request-binding parameter decorators accepted by default. */
7
+ exports.DEFAULT_PARAM_DECORATORS = ['Auth', 'Body', 'UrlParam', 'QueryParam', 'QueryParams', 'Header', 'Ip', 'File'];
7
8
  /**
8
9
  * Every public method of an `@AppService` class is an HTTP endpoint: it carries exactly one HTTP
9
10
  * method decorator, and every parameter carries a request-binding decorator.
@@ -17,7 +18,7 @@ const decoratorName = (decorator) => decorator.expression.type === 'CallExpressi
17
18
  exports.default = (0, rule_1.defineRule)({
18
19
  meta: {
19
20
  type: 'problem',
20
- docs: { description: 'Require HTTP and parameter decorators on @AppService public methods' },
21
+ docs: { description: 'Require HTTP and parameter decorators on @AppService public methods', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#app-service-endpoints' },
21
22
  messages: {
22
23
  missingHttp: 'Public method `{{method}}` of @{{service}} class must be decorated with one of {{http}}.',
23
24
  multipleHttp: 'Method `{{method}}` has several HTTP method decorators ({{found}}) — keep exactly one.',
@@ -35,7 +36,7 @@ exports.default = (0, rule_1.defineRule)({
35
36
  }],
36
37
  },
37
38
  create(context) {
38
- const { serviceDecorators = ['AppService'], httpDecorators = ['Get', 'Post', 'Put', 'Patch', 'Delete'], paramDecorators = ['Auth', 'Body', 'UrlParam', 'QueryParam', 'QueryParams', 'Header', 'Ip', 'File'], } = context.options[0] ?? {};
39
+ const { serviceDecorators = ['AppService'], httpDecorators = ['Get', 'Post', 'Put', 'Patch', 'Delete'], paramDecorators = exports.DEFAULT_PARAM_DECORATORS, } = context.options[0] ?? {};
39
40
  const list = (names) => names.map((name) => `@${name}`).join(' | ');
40
41
  const paramNode = (param) => (param.type === 'TSParameterProperty' ? param.parameter : param);
41
42
  const paramLabel = (param) => {
@@ -51,8 +52,8 @@ exports.default = (0, rule_1.defineRule)({
51
52
  for (const member of classNode.body.body) {
52
53
  if (member.type !== 'MethodDefinition' || member.kind !== 'method' || member.static || member.computed)
53
54
  continue;
54
- const method = member.key.name ?? member.key.value;
55
- const http = (member.decorators ?? []).map(decoratorName).filter((name) => httpDecorators.includes(name));
55
+ const method = (0, ast_1.memberName)(member) ?? '';
56
+ const http = (member.decorators ?? []).map(ast_1.decoratorName).filter((name) => name !== null && httpDecorators.includes(name));
56
57
  const isPublic = member.accessibility !== 'private' && member.accessibility !== 'protected' && member.key.type !== 'PrivateIdentifier';
57
58
  if (!isPublic) {
58
59
  if (http.length)
@@ -66,8 +67,8 @@ exports.default = (0, rule_1.defineRule)({
66
67
  context.report({ node: member.key, messageId: 'multipleHttp', data: { method, found: http.map((n) => `@${n}`).join(', ') } });
67
68
  }
68
69
  for (const param of member.value.params) {
69
- const decorators = [...(param.decorators ?? []), ...(paramNode(param).decorators ?? [])].map(decoratorName);
70
- if (!decorators.some((name) => paramDecorators.includes(name))) {
70
+ const decorators = [...(param.decorators ?? []), ...(paramNode(param).decorators ?? [])].map(ast_1.decoratorName);
71
+ if (!decorators.some((name) => name !== null && paramDecorators.includes(name))) {
71
72
  context.report({ node: param, messageId: 'missingParam', data: { param: paramLabel(param), method, params: list(paramDecorators) } });
72
73
  }
73
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-service-endpoints.js","sourceRoot":"","sources":["../../src/rules/app-service-endpoints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-service-endpoints.js","sourceRoot":"","sources":["../../src/rules/app-service-endpoints.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Every authenticated endpoint declares the right it needs (altbra `common/core/AuthAccess.ts`):
2
+ * Every authenticated endpoint declares the right it needs (the application's `AuthAccess` declaration):
3
3
  *
4
4
  * @Get
5
5
  * public async findBySku(@AuthAccess('distribution:read', 'offer:read') _authToken: AuthToken, …)
@@ -10,5 +10,5 @@
10
10
  * uses @AuthAccess is reported so the list shrinks. With `checkParamName` (default) the parameter is
11
11
  * named `authToken`, or `_authToken` when the method body doesn't read it.
12
12
  */
13
- declare const _default: import("eslint").Rule.RuleModule;
13
+ declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
14
14
  export default _default;
@@ -4,11 +4,12 @@ const rule_1 = require("../lib/rule");
4
4
  const ast_1 = require("../lib/ast");
5
5
  const db_1 = require("../lib/db");
6
6
  /** `@Foo` / `@Foo(...)` → { name, args } */
7
- const decoratorCall = (decorator) => decorator.expression.type === 'CallExpression'
8
- ? { name: decorator.expression.callee.name, args: decorator.expression.arguments }
9
- : { name: decorator.expression.name, args: [] };
7
+ const decoratorCall = (decorator) => ({
8
+ name: (0, ast_1.decoratorName)(decorator),
9
+ args: decorator.expression.type === 'CallExpression' ? decorator.expression.arguments : [],
10
+ });
10
11
  /**
11
- * Every authenticated endpoint declares the right it needs (altbra `common/core/AuthAccess.ts`):
12
+ * Every authenticated endpoint declares the right it needs (the application's `AuthAccess` declaration):
12
13
  *
13
14
  * @Get
14
15
  * public async findBySku(@AuthAccess('distribution:read', 'offer:read') _authToken: AuthToken, …)
@@ -22,7 +23,7 @@ const decoratorCall = (decorator) => decorator.expression.type === 'CallExpressi
22
23
  exports.default = (0, rule_1.defineRule)({
23
24
  meta: {
24
25
  type: 'problem',
25
- docs: { description: 'Require an access right on every authenticated endpoint' },
26
+ docs: { description: 'Require an access right on every authenticated endpoint', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#auth-access' },
26
27
  messages: {
27
28
  plainAuth: '`{{method}}` must declare its right: `@{{decorator}}(\'scope:read\') authToken: {{tokenType}}` instead of @{{found}}.',
28
29
  noRights: '@{{decorator}} needs at least one right, e.g. @{{decorator}}(\'scope:read\').',
@@ -79,16 +80,16 @@ exports.default = (0, rule_1.defineRule)({
79
80
  for (const member of classNode.body.body) {
80
81
  if (member.type !== 'MethodDefinition' || member.kind !== 'method')
81
82
  continue;
82
- const method = member.key.name ?? member.key.value;
83
+ const method = (0, ast_1.memberName)(member) ?? '';
83
84
  const entry = `${service}.${method}`;
84
- // Allowlist entries may name the class or the file (altbra's list keys by file name).
85
+ // Allowlist entries may name the class or the file (the allowlist keys by file name).
85
86
  const allowed = allow.includes(entry) || allow.includes(`${fileBase}.${method}`);
86
87
  for (const param of member.value.params) {
87
88
  const binding = (0, db_1.paramBinding)(param);
88
- const type = binding.typeAnnotation?.typeAnnotation;
89
- if (type?.type !== 'TSTypeReference' || type.typeName.name !== tokenType)
89
+ const type = 'typeAnnotation' in binding ? binding.typeAnnotation?.typeAnnotation : undefined;
90
+ if (type?.type !== 'TSTypeReference' || type.typeName.type !== 'Identifier' || type.typeName.name !== tokenType)
90
91
  continue;
91
- const calls = [...(param.decorators ?? []), ...(binding.decorators ?? [])].map(decoratorCall);
92
+ const calls = [...(param.decorators ?? []), ...('decorators' in binding ? binding.decorators ?? [] : [])].map(decoratorCall);
92
93
  const access = calls.find((call) => call.name === decorator);
93
94
  const plain = calls.find((call) => plainDecorators.includes(call.name));
94
95
  if (access) {
@@ -1 +1 @@
1
- {"version":3,"file":"auth-access.js","sourceRoot":"","sources":["../../src/rules/auth-access.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-access.js","sourceRoot":"","sources":["../../src/rules/auth-access.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,5 @@
4
4
  * the entry file under `deployments/`). Everywhere else a class declares the `…Config` object it needs
5
5
  * as a constructor parameter.
6
6
  */
7
- declare const _default: import("eslint").Rule.RuleModule;
7
+ declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
8
8
  export default _default;
@@ -11,7 +11,7 @@ const rule_1 = require("../lib/rule");
11
11
  exports.default = (0, rule_1.defineRule)({
12
12
  meta: {
13
13
  type: 'suggestion',
14
- docs: { description: 'config.pick / pickMaybe / has only in config providers' },
14
+ docs: { description: 'config.pick / pickMaybe / has only in config providers', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#config-provider-only' },
15
15
  messages: {
16
16
  outside: '`{{object}}.{{method}}(...)` is allowed only in {{where}} — declare the `…Config` object as a constructor dependency instead.',
17
17
  },
@@ -45,9 +45,11 @@ exports.default = (0, rule_1.defineRule)({
45
45
  };
46
46
  return {
47
47
  'CallExpression[callee.type="MemberExpression"][callee.object.type="Identifier"]'(node) {
48
+ if (node.callee.type !== 'MemberExpression' || node.callee.object.type !== 'Identifier')
49
+ return;
48
50
  const object = node.callee.object.name;
49
- const method = node.callee.property?.name;
50
- if (!configNames.includes(object) || !methods.includes(method))
51
+ const method = (0, ast_1.keyName)(node.callee.property);
52
+ if (!configNames.includes(object) || method === null || !methods.includes(method))
51
53
  return;
52
54
  if (moduleStaticMethods && inModuleStaticMethod(node))
53
55
  return;