@pjts/eslint-style-rules 0.0.7 → 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.
- package/LICENSE +21 -0
- package/README.md +38 -8
- package/dist/index.js +35 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/ast.d.ts +27 -13
- package/dist/lib/ast.js +33 -7
- package/dist/lib/ast.js.map +1 -1
- package/dist/lib/db.d.ts +5 -4
- package/dist/lib/db.js +2 -2
- package/dist/lib/db.js.map +1 -1
- package/dist/lib/rule.d.ts +8 -6
- package/dist/lib/rule.js +3 -3
- package/dist/lib/rule.js.map +1 -1
- package/dist/lib/types.d.ts +69 -0
- package/dist/lib/types.js +270 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/wiring.d.ts +5 -3
- package/dist/lib/wiring.js +8 -4
- package/dist/lib/wiring.js.map +1 -1
- package/dist/rules/app-class-suffix.d.ts +1 -1
- package/dist/rules/app-class-suffix.js +1 -1
- package/dist/rules/app-class-suffix.js.map +1 -1
- package/dist/rules/app-service-endpoints.d.ts +3 -1
- package/dist/rules/app-service-endpoints.js +9 -8
- package/dist/rules/app-service-endpoints.js.map +1 -1
- package/dist/rules/auth-access.d.ts +2 -2
- package/dist/rules/auth-access.js +11 -10
- package/dist/rules/auth-access.js.map +1 -1
- package/dist/rules/config-provider-only.d.ts +1 -1
- package/dist/rules/config-provider-only.js +5 -3
- package/dist/rules/config-provider-only.js.map +1 -1
- package/dist/rules/db-client-dependency.d.ts +1 -1
- package/dist/rules/db-client-dependency.js +11 -7
- package/dist/rules/db-client-dependency.js.map +1 -1
- package/dist/rules/db-writes-in-repositories.d.ts +1 -1
- package/dist/rules/db-writes-in-repositories.js +12 -8
- package/dist/rules/db-writes-in-repositories.js.map +1 -1
- package/dist/rules/decorated-class-contract.d.ts +1 -1
- package/dist/rules/decorated-class-contract.js +1 -1
- package/dist/rules/decorated-class-contract.js.map +1 -1
- package/dist/rules/domain-primitive-params.d.ts +17 -0
- package/dist/rules/domain-primitive-params.js +116 -0
- package/dist/rules/domain-primitive-params.js.map +1 -0
- package/dist/rules/entity-constructor-data.d.ts +1 -1
- package/dist/rules/entity-constructor-data.js +4 -3
- package/dist/rules/entity-constructor-data.js.map +1 -1
- package/dist/rules/event-sourced-aggregate.d.ts +2 -2
- package/dist/rules/event-sourced-aggregate.js +8 -8
- package/dist/rules/event-sourced-aggregate.js.map +1 -1
- package/dist/rules/find-one-naming.d.ts +3 -2
- package/dist/rules/find-one-naming.js +35 -8
- package/dist/rules/find-one-naming.js.map +1 -1
- package/dist/rules/implements-ports-only.d.ts +10 -0
- package/dist/rules/implements-ports-only.js +74 -0
- package/dist/rules/implements-ports-only.js.map +1 -0
- package/dist/rules/import-only-in.d.ts +1 -1
- package/dist/rules/import-only-in.js +7 -3
- package/dist/rules/import-only-in.js.map +1 -1
- package/dist/rules/knex-first.d.ts +2 -1
- package/dist/rules/knex-first.js +11 -4
- package/dist/rules/knex-first.js.map +1 -1
- package/dist/rules/message-file.d.ts +1 -1
- package/dist/rules/message-file.js +3 -2
- package/dist/rules/message-file.js.map +1 -1
- package/dist/rules/message-handler.d.ts +1 -1
- package/dist/rules/message-handler.js +7 -6
- package/dist/rules/message-handler.js.map +1 -1
- package/dist/rules/message-name-reference.d.ts +2 -1
- package/dist/rules/message-name-reference.js +24 -5
- package/dist/rules/message-name-reference.js.map +1 -1
- package/dist/rules/message-names.d.ts +1 -1
- package/dist/rules/message-names.js +2 -2
- package/dist/rules/message-names.js.map +1 -1
- package/dist/rules/module-layout.d.ts +1 -1
- package/dist/rules/module-layout.js +1 -1
- package/dist/rules/module-layout.js.map +1 -1
- package/dist/rules/module-service-getters.d.ts +1 -1
- package/dist/rules/module-service-getters.js +11 -9
- package/dist/rules/module-service-getters.js.map +1 -1
- package/dist/rules/module-shape.d.ts +1 -1
- package/dist/rules/module-shape.js +6 -7
- package/dist/rules/module-shape.js.map +1 -1
- package/dist/rules/no-async-in-domain.d.ts +1 -1
- package/dist/rules/no-async-in-domain.js +2 -2
- package/dist/rules/no-async-in-domain.js.map +1 -1
- package/dist/rules/no-duplicate-sdk-types.d.ts +1 -1
- package/dist/rules/no-duplicate-sdk-types.js +1 -1
- package/dist/rules/no-duplicate-sdk-types.js.map +1 -1
- package/dist/rules/no-entity-assembly-in-app.d.ts +4 -2
- package/dist/rules/no-entity-assembly-in-app.js +24 -8
- package/dist/rules/no-entity-assembly-in-app.js.map +1 -1
- package/dist/rules/no-entity-mutation-outside-domain.d.ts +1 -1
- package/dist/rules/no-entity-mutation-outside-domain.js +1 -1
- package/dist/rules/no-entity-mutation-outside-domain.js.map +1 -1
- package/dist/rules/no-manual-wiring.d.ts +1 -1
- package/dist/rules/no-manual-wiring.js +5 -2
- package/dist/rules/no-manual-wiring.js.map +1 -1
- package/dist/rules/no-message-construction-outside-domain.d.ts +1 -1
- package/dist/rules/no-message-construction-outside-domain.js +1 -1
- package/dist/rules/no-message-construction-outside-domain.js.map +1 -1
- package/dist/rules/no-reconstitute.d.ts +1 -1
- package/dist/rules/no-reconstitute.js +1 -1
- package/dist/rules/no-reconstitute.js.map +1 -1
- package/dist/rules/one-class-per-file.d.ts +7 -0
- package/dist/rules/one-class-per-file.js +55 -0
- package/dist/rules/one-class-per-file.js.map +1 -0
- package/dist/rules/port-file.d.ts +1 -1
- package/dist/rules/port-file.js +3 -2
- package/dist/rules/port-file.js.map +1 -1
- package/dist/rules/port-has-adapters.d.ts +1 -1
- package/dist/rules/port-has-adapters.js +1 -1
- package/dist/rules/port-has-adapters.js.map +1 -1
- package/dist/rules/repository-naming.d.ts +1 -1
- package/dist/rules/repository-naming.js +2 -2
- package/dist/rules/repository-naming.js.map +1 -1
- package/dist/rules/repository-return-types.d.ts +10 -0
- package/dist/rules/repository-return-types.js +67 -0
- package/dist/rules/repository-return-types.js.map +1 -0
- package/dist/rules/repository-serialization.d.ts +13 -3
- package/dist/rules/repository-serialization.js +108 -12
- package/dist/rules/repository-serialization.js.map +1 -1
- package/dist/rules/return-entities.d.ts +1 -1
- package/dist/rules/return-entities.js +3 -3
- package/dist/rules/return-entities.js.map +1 -1
- package/dist/rules/save-contract.d.ts +5 -3
- package/dist/rules/save-contract.js +18 -5
- package/dist/rules/save-contract.js.map +1 -1
- package/dist/rules/subclass-declares-constructor.d.ts +1 -1
- package/dist/rules/subclass-declares-constructor.js +1 -1
- package/dist/rules/subclass-declares-constructor.js.map +1 -1
- package/dist/rules/test-location.d.ts +1 -1
- package/dist/rules/test-location.js +1 -1
- package/dist/rules/test-location.js.map +1 -1
- package/dist/rules/throw-app-error.d.ts +1 -1
- package/dist/rules/throw-app-error.js +4 -3
- package/dist/rules/throw-app-error.js.map +1 -1
- package/dist/rules/trackable-repository.d.ts +1 -1
- package/dist/rules/trackable-repository.js +4 -4
- package/dist/rules/trackable-repository.js.map +1 -1
- package/dist/rules/unique-class-names.d.ts +1 -1
- package/dist/rules/unique-class-names.js +5 -4
- package/dist/rules/unique-class-names.js.map +1 -1
- 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":"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"}
|
package/dist/lib/wiring.d.ts
CHANGED
|
@@ -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:
|
|
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
|
|
24
|
-
*
|
|
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[];
|
package/dist/lib/wiring.js
CHANGED
|
@@ -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
|
|
88
|
-
*
|
|
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
|
|
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
|
package/dist/lib/wiring.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiring.js","sourceRoot":"","sources":["../../src/lib/wiring.ts"],"names":[],"mappings":";;;;AAAA,8DAAyB;AACzB,kEAA6B;AAC7B,+BAAiC;
|
|
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").
|
|
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":";;
|
|
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").
|
|
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
|
-
/**
|
|
6
|
-
|
|
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 =
|
|
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
|
|
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":"
|
|
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 (
|
|
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").
|
|
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) =>
|
|
8
|
-
|
|
9
|
-
:
|
|
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 (
|
|
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
|
|
83
|
+
const method = (0, ast_1.memberName)(member) ?? '';
|
|
83
84
|
const entry = `${service}.${method}`;
|
|
84
|
-
// Allowlist entries may name the class or the file (
|
|
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":";;
|
|
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").
|
|
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
|
|
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;
|