@pjts/eslint-style-rules 0.0.9 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -5
- package/dist/index.d.ts +2 -0
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/types.js +34 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/rules/class-location.d.ts +8 -0
- package/dist/rules/class-location.js +41 -0
- package/dist/rules/class-location.js.map +1 -0
- package/dist/rules/decorators-on-own-lines.d.ts +17 -0
- package/dist/rules/decorators-on-own-lines.js +78 -0
- package/dist/rules/decorators-on-own-lines.js.map +1 -0
- package/dist/rules/domain-primitive-properties.d.ts +19 -0
- package/dist/rules/domain-primitive-properties.js +181 -0
- package/dist/rules/domain-primitive-properties.js.map +1 -0
- package/dist/rules/entity-constructor-data.d.ts +6 -2
- package/dist/rules/entity-constructor-data.js +31 -8
- package/dist/rules/entity-constructor-data.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -37,6 +37,7 @@ Different paths:
|
|
|
37
37
|
nats: { prefix: 'Nats', imports: ['nats', '@nats-io/*'] },
|
|
38
38
|
memory: { prefix: 'InMemory' },
|
|
39
39
|
},
|
|
40
|
+
classLocations: { Provider: ['/infrastructure/'] }, // class-name suffix → path fragments allowed to declare it
|
|
40
41
|
}),
|
|
41
42
|
```
|
|
42
43
|
|
|
@@ -63,7 +64,7 @@ exception is an inline disable with a reason:
|
|
|
63
64
|
|---|---|
|
|
64
65
|
| `event-sourced-aggregate` | `extends EventSourceable<XEvent>`: `@trackable`, typed event union, `protected apply` with a `case` for every emitted `MessageNames.X`, `apply` replay-safe (no emit / throw / clock / id minting / randomness). Option `stateChangesInApply`: `this.x = …` only in the constructor and `apply` |
|
|
65
66
|
| `no-async-in-domain` | no `async`, `await` or `Promise<…>` — except awaiting/returning a call from `allowedModules` (`bcrypt`) |
|
|
66
|
-
| `entity-constructor-data` | entity constructors take one `<Entity>Data` object (decorated primitives, `…Error`s skipped) |
|
|
67
|
+
| `entity-constructor-data` | entity constructors take one `<Entity>Data` object, typed exactly `<Entity>Data` as a plain type reference — no type arguments (`TaskData<T>`, `Partial<TaskData>`), no union / intersection (`TaskData \| null`), no inline object type — and the entity class is not generic (decorated primitives, `…Error`s skipped; the preset leaves out `domain/values`, `domain/services`, `domain/events`). `<Entity>Data` members: `domain-primitive-properties` |
|
|
67
68
|
| `decorated-class-contract` | classes with a configured decorator implement the listed methods (`@StringDomainPrimitive` → `toJSON`) |
|
|
68
69
|
| `no-reconstitute` | no `reconstitute` definition or call — repositories deserialize, services call `existing.update()` |
|
|
69
70
|
|
|
@@ -80,17 +81,32 @@ an `enum` are plain. Names that resolve to no project file (package types, globa
|
|
|
80
81
|
| Rule | What it checks |
|
|
81
82
|
|---|---|
|
|
82
83
|
| `domain-primitive-params` | parameters of methods, constructors (incl. parameter properties), class-field arrows, function declarations, module-level function constants and interface method signatures are not `string`/`number`/`boolean`/`bigint`, literals, literal unions, inline object types, `Date`, `Record<…>` & co. (`nativeTypes`), plain interfaces/type aliases/enums — nor arrays/unions of those. A literal default without annotation (`limit = 10`) counts as its primitive. Exempt: constructors and static methods of classes under `…/values/` (`valuesFolder`), private `deserialize…` methods under `infrastructure/`, callbacks/arrows inside function bodies. Accepted: classes, generics, function types, `allowTypeSuffixes` (`Port`, `Config`, `Data`), types declared under `allowTypesFrom` (`src/common/messages`: message bodies, `MessageNames`) |
|
|
84
|
+
| `domain-primitive-properties` | class properties — fields (instance and static), constructor parameter properties, `accessor` fields (getters' declared return types only with `checkGetters`) — and the members of `<Class>Data` interfaces / object type aliases (`dataSuffix`) hold domain classes: not `string`/`number`/`boolean`/`bigint`, literals, literal unions, inline object types, `Date`, `Record<…>` & co., plain interfaces/type aliases/enums, nor arrays/unions of those. An unannotated property counts by its initializer: a primitive or template literal, `new Date(…)`, an array literal of those, an object literal (`as const` unwrapped, `as T` / `satisfies T` classify `T`). Arrow-function fields are methods (their parameters belong to `domain-primitive-params`). Exempt: files under `…/values/` (`valuesFolder`: domain primitives and value objects hold the raw value), classes decorated `@…DomainPrimitive` (`exemptDecoratorPattern`); `…Record` / `…Row` types aren't `…Data` interfaces, so they aren't checked. Accepted: as for parameters, plus `allowGenericContainers` (`Map`, `Set`, `WeakMap`, `WeakSet`, `ReadonlyMap`, `ReadonlySet` — type arguments not checked: value objects can't be map keys by value) |
|
|
83
85
|
| `repository-return-types` | public methods of `…Repository` classes (`classPattern`) and method signatures of `…RepositoryPort` interfaces (`interfacePattern`) declare a return type, and it is a domain class: `Promise<>`, arrays and `\| null` / `\| undefined` are unwrapped, `void` and classes (`UpdateResult` for guarded updates) pass; primitives, literals, inline objects, plain interfaces/type aliases (`…Record`, `…Row`), enums and `any`/`unknown` don't |
|
|
84
86
|
|
|
85
|
-
Type-classification options (
|
|
87
|
+
Type-classification options (all three rules):
|
|
86
88
|
|
|
87
89
|
| Option | Default | Meaning |
|
|
88
90
|
|---|---|---|
|
|
89
|
-
| `allowTypeSuffixes` | `['Port', 'Config', 'Data']` (params), `[]` (returns) | type names accepted by suffix |
|
|
91
|
+
| `allowTypeSuffixes` | `['Port', 'Config', 'Data']` (params, properties), `[]` (returns) | type names accepted by suffix |
|
|
90
92
|
| `allowTypesFrom` | `['src/common/messages']` | path fragments, relative to the project root (the folder holding `src/`), whose declarations are accepted |
|
|
91
93
|
| `pathAliases` | `{ '@modules/*': 'src/modules/*', '@common/*': 'src/common/*' }` | tsconfig-like path aliases, relative to the project root |
|
|
92
94
|
| `nativeTypes` | `Date`, `Record`, `Partial`, `Pick`, `Omit`, `Required`, `Map`, `Set`, `ReadonlyMap`, `ReadonlySet`, `Object`, `String`, `Number`, `Boolean`, `BigInt` | global names that are plain |
|
|
93
|
-
| `checkAny` | `false` (params), `true` (returns) | report `any` / `unknown` / `object` too |
|
|
95
|
+
| `checkAny` | `false` (params, properties), `true` (returns) | report `any` / `unknown` / `object` too |
|
|
96
|
+
|
|
97
|
+
An indexed access type `Port['member']` is classified by the member's own type when `Port` resolves to
|
|
98
|
+
a project class / interface / object alias (a method member is a function type, so accepted); on a
|
|
99
|
+
package or generic type it is accepted, otherwise plain.
|
|
100
|
+
|
|
101
|
+
`domain-primitive-properties` only:
|
|
102
|
+
|
|
103
|
+
| Option | Default | Meaning |
|
|
104
|
+
|---|---|---|
|
|
105
|
+
| `allowGenericContainers` | `['Map', 'Set', 'WeakMap', 'WeakSet', 'ReadonlyMap', 'ReadonlySet']` | accepted as a whole, type arguments unchecked (removed from the default `nativeTypes`) |
|
|
106
|
+
| `valuesFolder` | `'values'` | files under a folder of this name are not checked (also `domain-primitive-params`: its constructors and static methods) |
|
|
107
|
+
| `dataSuffix` | `'Data'` | interfaces / object type aliases named `<Name><dataSuffix>` have their members checked |
|
|
108
|
+
| `exemptDecoratorPattern` | `'DomainPrimitive$'` | classes with a decorator matching this regex are not checked |
|
|
109
|
+
| `checkGetters` | `false` | also check getters' declared return types (off: a getter is computed, like a method return — `get isSuccess(): boolean`) |
|
|
94
110
|
|
|
95
111
|
### Application
|
|
96
112
|
|
|
@@ -134,7 +150,9 @@ Type-classification options (both rules):
|
|
|
134
150
|
| `module-layout` | only `rootFiles` at a module root (`<Module>Module.ts`, `<Module>MessageHandlers.ts`, `index.ts`); allowed top-level and `app/` subfolders; required entries exist |
|
|
135
151
|
| `module-shape` | `…Module` = `@HttpModule` + `static readonly services`, `…MessageHandlers` = `@MessageHandlers` + `static readonly handlers`, `…Workers` = `@Workers` + `static readonly workers`; entries are classes from the module's own `./app/`; static methods with a return type are config providers; nothing else (no context, fields, getters, setters) |
|
|
136
152
|
| `module-service-getters` | **deprecated** (hand-wired modules predate the container; not in `configs.ddd`, removed in a future major) a hand-wired `…Module`'s public getters return only `new X(...)` of a class from its own `./app/`, named `x` (camelCase) |
|
|
153
|
+
| `decorators-on-own-lines` | every decorator of a class, property, method or accessor starts on its own line and the class / member on the line after its last decorator; parameter decorators (`@Body() dto`) stay inline. Fixable: inserts a line break plus the first decorator's line indentation right before the offending decorator / member — comments stay put, multi-line decorator arguments are untouched. The preset applies it to all of `src/` (DTOs, migrations and deployments included; tests excluded) |
|
|
137
154
|
| `one-class-per-file` | at most one exported class per file (`export class`, `export default class`, `export { LocalClass }`); non-exported helpers don't count; tests skipped (`ignoreTests`, default `true`); the preset leaves `app/dto/**` out |
|
|
155
|
+
| `class-location` | a class named `…<suffix>` (longer than the suffix; the longest configured suffix wins) is declared only in a file whose path contains one of its fragments — option `suffixes`, default `{ Provider: ['/infrastructure/'] }` (preset: `classLocations`); grow it with `Repository`, `Adapter`, … |
|
|
138
156
|
| `unique-class-names` | a class name is declared once under `src/modules/**` + `src/common/**` — class names key the wiring and the route registry |
|
|
139
157
|
| `subclass-declares-constructor` | app and infrastructure classes that `extends` something declare their own constructor (`ignoreBases` for `RepositoryBase` & co.) |
|
|
140
158
|
| `port-file` | ports live in `app/ports/<Name>Port.ts`, one exported interface per file named like it; only types; no `…Port` elsewhere |
|
|
@@ -158,7 +176,7 @@ Type-classification options (both rules):
|
|
|
158
176
|
sibling files from disk, so in an editor they refresh only when the reporting file is re-linted;
|
|
159
177
|
the CLI is always accurate. Don't use `eslint --cache` with them.
|
|
160
178
|
- `no-entity-assembly-in-app` and `no-duplicate-sdk-types` are name-based heuristics.
|
|
161
|
-
- `domain-primitive-params` and `repository-return-types` read the declaring files of imported
|
|
179
|
+
- `domain-primitive-params`, `domain-primitive-properties` and `repository-return-types` read the declaring files of imported
|
|
162
180
|
types from disk (cached per file modification time); an editor re-checks them when the linted file
|
|
163
181
|
changes.
|
|
164
182
|
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ interface DddConfigOptions {
|
|
|
25
25
|
prefix: string;
|
|
26
26
|
imports?: string[];
|
|
27
27
|
}>;
|
|
28
|
+
/** Class-name suffix → path fragments allowed to declare it. Default `{ Provider: ['/infrastructure/'] }`. */
|
|
29
|
+
classLocations?: Record<string, string[]>;
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
30
32
|
* The pjts DDD layer policy as a flat config. Every module in `<modules>/<name>/` has `app/`,
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
const tslib_1 = require("tslib");
|
|
3
3
|
const app_class_suffix_1 = tslib_1.__importDefault(require("./rules/app-class-suffix"));
|
|
4
4
|
const auth_access_1 = tslib_1.__importDefault(require("./rules/auth-access"));
|
|
5
|
+
const class_location_1 = tslib_1.__importStar(require("./rules/class-location"));
|
|
5
6
|
const event_sourced_aggregate_1 = tslib_1.__importDefault(require("./rules/event-sourced-aggregate"));
|
|
6
7
|
const message_file_1 = tslib_1.__importDefault(require("./rules/message-file"));
|
|
7
8
|
const message_handler_1 = tslib_1.__importDefault(require("./rules/message-handler"));
|
|
@@ -14,7 +15,9 @@ const app_service_endpoints_1 = tslib_1.__importStar(require("./rules/app-servic
|
|
|
14
15
|
const db_client_dependency_1 = tslib_1.__importDefault(require("./rules/db-client-dependency"));
|
|
15
16
|
const db_writes_in_repositories_1 = tslib_1.__importDefault(require("./rules/db-writes-in-repositories"));
|
|
16
17
|
const domain_primitive_params_1 = tslib_1.__importDefault(require("./rules/domain-primitive-params"));
|
|
18
|
+
const domain_primitive_properties_1 = tslib_1.__importDefault(require("./rules/domain-primitive-properties"));
|
|
17
19
|
const decorated_class_contract_1 = tslib_1.__importDefault(require("./rules/decorated-class-contract"));
|
|
20
|
+
const decorators_on_own_lines_1 = tslib_1.__importDefault(require("./rules/decorators-on-own-lines"));
|
|
18
21
|
const entity_constructor_data_1 = tslib_1.__importDefault(require("./rules/entity-constructor-data"));
|
|
19
22
|
const find_one_naming_1 = tslib_1.__importDefault(require("./rules/find-one-naming"));
|
|
20
23
|
const implements_ports_only_1 = tslib_1.__importDefault(require("./rules/implements-ports-only"));
|
|
@@ -43,6 +46,7 @@ const test_location_1 = tslib_1.__importDefault(require("./rules/test-location")
|
|
|
43
46
|
const throw_app_error_1 = tslib_1.__importDefault(require("./rules/throw-app-error"));
|
|
44
47
|
const rules = {
|
|
45
48
|
'auth-access': auth_access_1.default,
|
|
49
|
+
'class-location': class_location_1.default,
|
|
46
50
|
'event-sourced-aggregate': event_sourced_aggregate_1.default,
|
|
47
51
|
'message-file': message_file_1.default,
|
|
48
52
|
'message-handler': message_handler_1.default,
|
|
@@ -56,7 +60,9 @@ const rules = {
|
|
|
56
60
|
'db-client-dependency': db_client_dependency_1.default,
|
|
57
61
|
'db-writes-in-repositories': db_writes_in_repositories_1.default,
|
|
58
62
|
'decorated-class-contract': decorated_class_contract_1.default,
|
|
63
|
+
'decorators-on-own-lines': decorators_on_own_lines_1.default,
|
|
59
64
|
'domain-primitive-params': domain_primitive_params_1.default,
|
|
65
|
+
'domain-primitive-properties': domain_primitive_properties_1.default,
|
|
60
66
|
'entity-constructor-data': entity_constructor_data_1.default,
|
|
61
67
|
'find-one-naming': find_one_naming_1.default,
|
|
62
68
|
'implements-ports-only': implements_ports_only_1.default,
|
|
@@ -95,7 +101,7 @@ const createDddConfig = (options = {}) => {
|
|
|
95
101
|
pg: { prefix: 'Pg', imports: ['@pjts/infra#PostgresDbClient', 'knex', 'pg'] },
|
|
96
102
|
nats: { prefix: 'Nats', imports: ['nats', '@nats-io/*'] },
|
|
97
103
|
memory: { prefix: 'InMemory' },
|
|
98
|
-
}, } = options;
|
|
104
|
+
}, classLocations = class_location_1.DEFAULT_CLASS_LOCATIONS, } = options;
|
|
99
105
|
const module = `${modules}/*`;
|
|
100
106
|
const infrastructureImport = { group: ['**/infrastructure', '**/infrastructure/**'], message: 'Depend on a port in app/ports, not on infrastructure.' };
|
|
101
107
|
return [
|
|
@@ -110,6 +116,8 @@ const createDddConfig = (options = {}) => {
|
|
|
110
116
|
'pjts/app-service-endpoints': authAccess
|
|
111
117
|
? ['error', { paramDecorators: [...app_service_endpoints_1.DEFAULT_PARAM_DECORATORS, authAccess.decorator ?? 'AuthAccess'] }]
|
|
112
118
|
: 'error',
|
|
119
|
+
// One decorator per line, the class / member on the line after (parameter decorators stay inline). Fixable.
|
|
120
|
+
'pjts/decorators-on-own-lines': 'error',
|
|
113
121
|
// Fields, constructor, static factories (`fromDTO`, `create`), then instance methods.
|
|
114
122
|
'@typescript-eslint/member-ordering': ['error', { default: ['field', 'constructor', 'static-method', 'instance-method'] }],
|
|
115
123
|
},
|
|
@@ -131,6 +139,8 @@ const createDddConfig = (options = {}) => {
|
|
|
131
139
|
'pjts/config-provider-only': 'error',
|
|
132
140
|
// Class names key the generated wiring and the route registry.
|
|
133
141
|
'pjts/unique-class-names': 'error',
|
|
142
|
+
// Class kinds live in their layer: …Provider classes in infrastructure (app = services, handlers, workers).
|
|
143
|
+
'pjts/class-location': ['error', { suffixes: classLocations }],
|
|
134
144
|
// Every thrown error is an AppError (rethrowing a caught error unchanged is fine).
|
|
135
145
|
'pjts/throw-app-error': 'error',
|
|
136
146
|
// Identities are minted by the domain.
|
|
@@ -145,11 +155,15 @@ const createDddConfig = (options = {}) => {
|
|
|
145
155
|
},
|
|
146
156
|
},
|
|
147
157
|
{
|
|
148
|
-
// Everything crossing a function boundary
|
|
149
|
-
// …Record types and (de)serializing infrastructure
|
|
158
|
+
// Everything crossing a function boundary or held in a property (incl. <Class>Data members) is a
|
|
159
|
+
// domain class: primitives live in …/values/, …Record types and (de)serializing infrastructure
|
|
160
|
+
// code. DTOs bind the HTTP payload.
|
|
150
161
|
files: [`${module}/app/**/*.ts`, `${module}/domain/**/*.ts`, `${module}/infrastructure/**/*.ts`, `${src}/common/**/*.ts`],
|
|
151
162
|
ignores: [...exclude, `${module}/app/dto/**`, `${module}/testing/**`, `${src}/testing/**`],
|
|
152
|
-
rules: {
|
|
163
|
+
rules: {
|
|
164
|
+
'pjts/domain-primitive-params': ['error', { allowTypesFrom: [messages] }],
|
|
165
|
+
'pjts/domain-primitive-properties': ['error', { allowTypesFrom: [messages] }],
|
|
166
|
+
},
|
|
153
167
|
},
|
|
154
168
|
{
|
|
155
169
|
// One exported class per file, the file named after it. DTO bundles (app/dto) may group request shapes.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA,wFAAsD;AACtD,8EAA6C;AAC7C,sGAAoE;AACpE,gFAA+C;AAC/C,sFAAqD;AACrD,oGAAkE;AAClE,kFAAiD;AACjD,0HAAsF;AACtF,oIAAgG;AAChG,gGAA+D;AAC/D,+FAA8F;AAC9F,gGAA8D;AAC9D,0GAAuE;AACvE,sGAAoE;AACpE,wGAAsE;AACtE,sGAAoE;AACpE,sFAAoD;AACpD,kGAAgE;AAChE,oFAAkD;AAClD,4EAA2C;AAC3C,kFAAiD;AACjD,oGAAkE;AAClE,gFAA+C;AAC/C,wFAAsD;AACtD,gGAA8D;AAC9D,4FAA0D;AAC1D,kHAAgF;AAChF,4FAAyD;AACzD,oGAAiE;AACjE,0GAAsE;AACtE,sFAAqD;AACrD,4FAAyD;AACzD,0EAAyC;AACzC,0FAAwD;AACxD,0FAAyD;AACzD,sGAAoE;AACpE,wGAAuE;AACvE,sFAAqD;AACrD,kFAAiD;AACjD,kFAAiD;AACjD,sFAAoD;AAEpD,MAAM,KAAK,GAAG;IACZ,aAAa,EAAE,qBAAU;IACzB,yBAAyB,EAAE,iCAAqB;IAChD,cAAc,EAAE,sBAAW;IAC3B,iBAAiB,EAAE,yBAAc;IACjC,wBAAwB,EAAE,gCAAoB;IAC9C,eAAe,EAAE,uBAAY;IAC7B,mCAAmC,EAAE,2CAA6B;IAClE,wCAAwC,EAAE,gDAAkC;IAC5E,sBAAsB,EAAE,8BAAmB;IAC3C,kBAAkB,EAAE,0BAAc;IAClC,uBAAuB,EAAE,+BAAmB;IAC5C,sBAAsB,EAAE,8BAAkB;IAC1C,2BAA2B,EAAE,mCAAsB;IACnD,0BAA0B,EAAE,kCAAsB;IAClD,yBAAyB,EAAE,iCAAqB;IAChD,yBAAyB,EAAE,iCAAqB;IAChD,iBAAiB,EAAE,yBAAa;IAChC,uBAAuB,EAAE,+BAAmB;IAC5C,gBAAgB,EAAE,wBAAY;IAC9B,YAAY,EAAE,oBAAS;IACvB,eAAe,EAAE,uBAAY;IAC7B,wBAAwB,EAAE,gCAAoB;IAC9C,cAAc,EAAE,sBAAW;IAC3B,kBAAkB,EAAE,0BAAc;IAClC,sBAAsB,EAAE,8BAAkB;IAC1C,oBAAoB,EAAE,4BAAgB;IACtC,+BAA+B,EAAE,uCAA2B;IAC5D,oBAAoB,EAAE,4BAAe;IACrC,wBAAwB,EAAE,gCAAmB;IAC7C,2BAA2B,EAAE,mCAAqB;IAClD,iBAAiB,EAAE,yBAAc;IACjC,oBAAoB,EAAE,4BAAe;IACrC,WAAW,EAAE,mBAAQ;IACrB,mBAAmB,EAAE,2BAAe;IACpC,mBAAmB,EAAE,2BAAgB;IACrC,yBAAyB,EAAE,iCAAqB;IAChD,0BAA0B,EAAE,kCAAuB;IACnD,iBAAiB,EAAE,yBAAc;IACjC,eAAe,EAAE,uBAAY;IAC7B,eAAe,EAAE,uBAAY;IAC7B,iBAAiB,EAAE,yBAAa;CACjC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/types.js
CHANGED
|
@@ -221,8 +221,9 @@ const createTypeClassifier = (context, policy) => {
|
|
|
221
221
|
case 'TSTypeLiteral':
|
|
222
222
|
case 'TSMappedType':
|
|
223
223
|
case 'TSTupleType':
|
|
224
|
-
case 'TSIndexedAccessType':
|
|
225
224
|
return true;
|
|
225
|
+
case 'TSIndexedAccessType':
|
|
226
|
+
return classifyIndexedAccess(type, index, visiting);
|
|
226
227
|
case 'TSTypeOperator':
|
|
227
228
|
return type.operator === 'keyof' ? true : classify(type.typeAnnotation, index, visiting);
|
|
228
229
|
case 'TSArrayType':
|
|
@@ -256,6 +257,38 @@ const createTypeClassifier = (context, policy) => {
|
|
|
256
257
|
return false;
|
|
257
258
|
}
|
|
258
259
|
};
|
|
260
|
+
/**
|
|
261
|
+
* `Port['member']`: the member's own type when `Port` resolves to a class / interface / object alias in
|
|
262
|
+
* the project and the member is found (a method is a function type, so accepted); accepted when `Port`
|
|
263
|
+
* is a package or generic type (or declared under `allowTypesFrom`); plain otherwise.
|
|
264
|
+
*/
|
|
265
|
+
const classifyIndexedAccess = (type, index, visiting) => {
|
|
266
|
+
const key = type.indexType?.type === 'TSLiteralType' ? type.indexType.literal?.value : undefined;
|
|
267
|
+
const name = type.objectType?.type === 'TSTypeReference' ? referenceName(type.objectType.typeName) : null;
|
|
268
|
+
if (!name)
|
|
269
|
+
return true;
|
|
270
|
+
const declaration = resolveIn(index, name);
|
|
271
|
+
// Package and generic types are accepted, as everywhere else.
|
|
272
|
+
if (!declaration)
|
|
273
|
+
return policy.nativeTypes.includes(name);
|
|
274
|
+
if (isAllowedLocation(declaration.index.file))
|
|
275
|
+
return false;
|
|
276
|
+
if (typeof key !== 'string')
|
|
277
|
+
return true;
|
|
278
|
+
const node = declaration.node;
|
|
279
|
+
const members = declaration.kind === 'interface' || declaration.kind === 'class' ? node.body.body
|
|
280
|
+
: declaration.kind === 'alias' && node.typeAnnotation.type === 'TSTypeLiteral' ? node.typeAnnotation.members : [];
|
|
281
|
+
const member = members.find((candidate) => {
|
|
282
|
+
const memberKey = candidate.key;
|
|
283
|
+
return !candidate.computed && (memberKey?.name === key || memberKey?.value === key);
|
|
284
|
+
});
|
|
285
|
+
if (!member)
|
|
286
|
+
return true;
|
|
287
|
+
if (['TSMethodSignature', 'MethodDefinition', 'TSAbstractMethodDefinition'].includes(member.type))
|
|
288
|
+
return false;
|
|
289
|
+
const annotation = member.typeAnnotation?.typeAnnotation;
|
|
290
|
+
return annotation ? classify(annotation, declaration.index, visiting) : true;
|
|
291
|
+
};
|
|
259
292
|
const describe = (type) => {
|
|
260
293
|
const text = source.getText(type).replace(/\s+/g, ' ');
|
|
261
294
|
return text.length > 80 ? `${text.slice(0, 77)}…` : text;
|
package/dist/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const DEFAULT_CLASS_LOCATIONS: Record<string, string[]>;
|
|
2
|
+
/**
|
|
3
|
+
* Class kinds live in their layer: a class whose name ends with a configured suffix (and is longer
|
|
4
|
+
* than it) is declared only in a file whose path contains one of the suffix's fragments.
|
|
5
|
+
* Default `{ suffixes: { Provider: ['/infrastructure/'] } }` — extend with `Repository`, `Adapter`, ….
|
|
6
|
+
*/
|
|
7
|
+
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_CLASS_LOCATIONS = void 0;
|
|
4
|
+
const ast_1 = require("../lib/ast");
|
|
5
|
+
const rule_1 = require("../lib/rule");
|
|
6
|
+
exports.DEFAULT_CLASS_LOCATIONS = { Provider: ['/infrastructure/'] };
|
|
7
|
+
/**
|
|
8
|
+
* Class kinds live in their layer: a class whose name ends with a configured suffix (and is longer
|
|
9
|
+
* than it) is declared only in a file whose path contains one of the suffix's fragments.
|
|
10
|
+
* Default `{ suffixes: { Provider: ['/infrastructure/'] } }` — extend with `Repository`, `Adapter`, ….
|
|
11
|
+
*/
|
|
12
|
+
exports.default = (0, rule_1.defineRule)({
|
|
13
|
+
meta: {
|
|
14
|
+
type: 'problem',
|
|
15
|
+
docs: { description: 'Restrict class-name suffixes to the paths allowed to declare them', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#class-location' },
|
|
16
|
+
messages: { location: 'Class "{{name}}" (…{{suffix}}) belongs under {{allowed}}.' },
|
|
17
|
+
schema: [{
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: { suffixes: { type: 'object', additionalProperties: { type: 'array', items: { type: 'string' }, minItems: 1 } } },
|
|
20
|
+
additionalProperties: false,
|
|
21
|
+
}],
|
|
22
|
+
},
|
|
23
|
+
create(context) {
|
|
24
|
+
const suffixes = context.options[0]?.suffixes ?? exports.DEFAULT_CLASS_LOCATIONS;
|
|
25
|
+
const file = (0, ast_1.filePath)(context);
|
|
26
|
+
const check = (node) => {
|
|
27
|
+
const id = node.id ?? (node.parent?.type === 'VariableDeclarator' && node.parent.id.type === 'Identifier' ? node.parent.id : null);
|
|
28
|
+
if (!id)
|
|
29
|
+
return;
|
|
30
|
+
// The longest matching suffix decides (`RepositoryProvider` under a `Provider` and a `RepositoryProvider` entry).
|
|
31
|
+
const suffix = Object.keys(suffixes)
|
|
32
|
+
.filter((candidate) => id.name.endsWith(candidate) && id.name !== candidate)
|
|
33
|
+
.sort((a, b) => b.length - a.length)[0];
|
|
34
|
+
if (!suffix || suffixes[suffix].some((fragment) => file.includes(fragment)))
|
|
35
|
+
return;
|
|
36
|
+
context.report({ node: id, messageId: 'location', data: { name: id.name, suffix, allowed: suffixes[suffix].join(', ') } });
|
|
37
|
+
};
|
|
38
|
+
return { ClassDeclaration: check, ClassExpression: check };
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=class-location.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-location.js","sourceRoot":"","sources":["../../src/rules/class-location.ts"],"names":[],"mappings":";;;AACA,oCAAsC;AACtC,sCAAyC;AAE5B,QAAA,uBAAuB,GAA6B,EAAE,QAAQ,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;AAEpG;;;;GAIG;AACH,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,EAAE,WAAW,EAAE,mEAAmE,EAAE,GAAG,EAAE,2FAA2F,EAAE;QAC5L,QAAQ,EAAE,EAAE,QAAQ,EAAE,2DAA2D,EAAE;QACnF,MAAM,EAAE,CAAC;gBACP,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC7H,oBAAoB,EAAE,KAAK;aAC5B,CAAC;KACH;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAA6B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,+BAAuB,CAAC;QACnG,MAAM,IAAI,GAAG,IAAA,cAAQ,EAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,IAA0D,EAAE,EAAE;YAC3E,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnI,IAAI,CAAC,EAAE;gBAAE,OAAO;YAChB,kHAAkH;YAClH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACjC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;iBAC3E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAAE,OAAO;YACpF,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7H,CAAC,CAAC;QACF,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every decorator of a class, property, method or accessor starts on its own line, and the decorated
|
|
3
|
+
* class / member starts on the line after its last decorator:
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* @IsNotEmpty()
|
|
7
|
+
* @IsString()
|
|
8
|
+
* public readonly templateKey: string;
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* Parameter decorators (`@Body() dto`, `@AuthAccess('x:read') authToken`) stay inline and aren't
|
|
12
|
+
* checked. Fixable: a line break plus the indentation of the line the first decorator sits on is
|
|
13
|
+
* inserted right before the offending decorator or member (comments in between stay where they are,
|
|
14
|
+
* a decorator's multi-line arguments are untouched).
|
|
15
|
+
*/
|
|
16
|
+
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
|
|
17
|
+
export default _default;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ast_1 = require("../lib/ast");
|
|
4
|
+
const rule_1 = require("../lib/rule");
|
|
5
|
+
/**
|
|
6
|
+
* Every decorator of a class, property, method or accessor starts on its own line, and the decorated
|
|
7
|
+
* class / member starts on the line after its last decorator:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* @IsNotEmpty()
|
|
11
|
+
* @IsString()
|
|
12
|
+
* public readonly templateKey: string;
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Parameter decorators (`@Body() dto`, `@AuthAccess('x:read') authToken`) stay inline and aren't
|
|
16
|
+
* checked. Fixable: a line break plus the indentation of the line the first decorator sits on is
|
|
17
|
+
* inserted right before the offending decorator or member (comments in between stay where they are,
|
|
18
|
+
* a decorator's multi-line arguments are untouched).
|
|
19
|
+
*/
|
|
20
|
+
exports.default = (0, rule_1.defineRule)({
|
|
21
|
+
meta: {
|
|
22
|
+
type: 'layout',
|
|
23
|
+
fixable: 'whitespace',
|
|
24
|
+
docs: { description: 'Require each class and member decorator on its own line', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#decorators-on-own-lines' },
|
|
25
|
+
messages: {
|
|
26
|
+
decorator: 'Decorator `@{{decorator}}` must start on its own line.',
|
|
27
|
+
member: '"{{name}}" must start on the line after its last decorator.',
|
|
28
|
+
},
|
|
29
|
+
schema: [],
|
|
30
|
+
},
|
|
31
|
+
create(context) {
|
|
32
|
+
const source = context.sourceCode;
|
|
33
|
+
const decoratorLabel = (decorator) => {
|
|
34
|
+
const expression = decorator.expression.type === 'CallExpression' ? decorator.expression.callee : decorator.expression;
|
|
35
|
+
const text = source.getText(expression).replace(/\s+/g, ' ');
|
|
36
|
+
return text.length > 40 ? `${text.slice(0, 37)}…` : text;
|
|
37
|
+
};
|
|
38
|
+
const indentOf = (line) => /^[ \t]*/.exec(source.lines[line - 1])[0];
|
|
39
|
+
/** Replaces the whitespace between the nearest token or comment before `position` and `position` with a line break. */
|
|
40
|
+
const breakBefore = (previous, position, indent) => (fixer) => fixer.replaceTextRange([previous.range[1], position], `\n${indent}`);
|
|
41
|
+
const check = (node, name) => {
|
|
42
|
+
const decorators = node.decorators ?? [];
|
|
43
|
+
if (decorators.length === 0)
|
|
44
|
+
return;
|
|
45
|
+
const indent = indentOf(decorators[0].loc.start.line);
|
|
46
|
+
for (const decorator of decorators) {
|
|
47
|
+
const previous = source.getTokenBefore(decorator);
|
|
48
|
+
if (!previous || previous.loc.end.line !== decorator.loc.start.line)
|
|
49
|
+
continue;
|
|
50
|
+
const nearest = source.getTokenBefore(decorator, { includeComments: true });
|
|
51
|
+
context.report({ node: decorator, messageId: 'decorator', data: { decorator: decoratorLabel(decorator) }, fix: breakBefore(nearest, decorator.range[0], indent) });
|
|
52
|
+
}
|
|
53
|
+
const last = decorators[decorators.length - 1];
|
|
54
|
+
const next = source.getTokenAfter(last);
|
|
55
|
+
if (!next || next.loc.start.line !== last.loc.end.line)
|
|
56
|
+
return;
|
|
57
|
+
const nearest = source.getTokenAfter(last, { includeComments: true });
|
|
58
|
+
context.report({
|
|
59
|
+
loc: next.loc,
|
|
60
|
+
messageId: 'member',
|
|
61
|
+
data: { name },
|
|
62
|
+
fix: (fixer) => fixer.replaceTextRange([last.range[1], nearest.range[0]], `\n${indent}`),
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
const className = (node) => node.id?.name ?? '(anonymous class)';
|
|
66
|
+
const member = (node) => check(node, (0, ast_1.memberName)(node) ?? '[computed]');
|
|
67
|
+
return {
|
|
68
|
+
ClassDeclaration: (node) => check(node, className(node)),
|
|
69
|
+
ClassExpression: (node) => check(node, className(node)),
|
|
70
|
+
PropertyDefinition: member,
|
|
71
|
+
TSAbstractPropertyDefinition: member,
|
|
72
|
+
MethodDefinition: member,
|
|
73
|
+
AccessorProperty: member,
|
|
74
|
+
TSAbstractAccessorProperty: member,
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=decorators-on-own-lines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators-on-own-lines.js","sourceRoot":"","sources":["../../src/rules/decorators-on-own-lines.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const DEFAULT_GENERIC_CONTAINERS: string[];
|
|
2
|
+
/**
|
|
3
|
+
* Class properties hold domain classes, never raw values: fields (instance and static), constructor
|
|
4
|
+
* parameter properties, `accessor` fields (getters' declared return types with `checkGetters`) and the members of
|
|
5
|
+
* `<Class>Data` interfaces (`dataSuffix`) are not `string` / `number` / `boolean` / `bigint`, literals,
|
|
6
|
+
* literal unions, `Date`, inline object types, plain `interface` / `type` objects or enums — nor arrays
|
|
7
|
+
* or unions of those (the `domain-primitive-params` classifier). An unannotated property counts by its
|
|
8
|
+
* initializer: a primitive or template literal, `new Date(…)`, an array literal of those, an object literal.
|
|
9
|
+
*
|
|
10
|
+
* Accepted: classes, generics, function types, `allowTypeSuffixes` (`…Port`, `…Config`, `…Data`), types
|
|
11
|
+
* declared under `allowTypesFrom` (message bodies, `MessageNames`), `allowGenericContainers` (`Map`, `Set`, …
|
|
12
|
+
* — their type arguments aren't checked) and names that don't resolve to a project file (package types).
|
|
13
|
+
*
|
|
14
|
+
* Exempt: files under `…/values/` (`valuesFolder`: domain primitives and value objects hold the raw value),
|
|
15
|
+
* classes decorated `@…DomainPrimitive` (`exemptDecoratorPattern`); `…Record` / `…Row` row types are never
|
|
16
|
+
* `<Class>Data` interfaces, so they aren't checked.
|
|
17
|
+
*/
|
|
18
|
+
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
|
|
19
|
+
export default _default;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_GENERIC_CONTAINERS = void 0;
|
|
4
|
+
const ast_1 = require("../lib/ast");
|
|
5
|
+
const rule_1 = require("../lib/rule");
|
|
6
|
+
const types_1 = require("../lib/types");
|
|
7
|
+
exports.DEFAULT_GENERIC_CONTAINERS = ['Map', 'Set', 'WeakMap', 'WeakSet', 'ReadonlyMap', 'ReadonlySet'];
|
|
8
|
+
const PRIMITIVE_LITERALS = new Set(['string', 'number', 'boolean', 'bigint']);
|
|
9
|
+
/**
|
|
10
|
+
* Class properties hold domain classes, never raw values: fields (instance and static), constructor
|
|
11
|
+
* parameter properties, `accessor` fields (getters' declared return types with `checkGetters`) and the members of
|
|
12
|
+
* `<Class>Data` interfaces (`dataSuffix`) are not `string` / `number` / `boolean` / `bigint`, literals,
|
|
13
|
+
* literal unions, `Date`, inline object types, plain `interface` / `type` objects or enums — nor arrays
|
|
14
|
+
* or unions of those (the `domain-primitive-params` classifier). An unannotated property counts by its
|
|
15
|
+
* initializer: a primitive or template literal, `new Date(…)`, an array literal of those, an object literal.
|
|
16
|
+
*
|
|
17
|
+
* Accepted: classes, generics, function types, `allowTypeSuffixes` (`…Port`, `…Config`, `…Data`), types
|
|
18
|
+
* declared under `allowTypesFrom` (message bodies, `MessageNames`), `allowGenericContainers` (`Map`, `Set`, …
|
|
19
|
+
* — their type arguments aren't checked) and names that don't resolve to a project file (package types).
|
|
20
|
+
*
|
|
21
|
+
* Exempt: files under `…/values/` (`valuesFolder`: domain primitives and value objects hold the raw value),
|
|
22
|
+
* classes decorated `@…DomainPrimitive` (`exemptDecoratorPattern`); `…Record` / `…Row` row types are never
|
|
23
|
+
* `<Class>Data` interfaces, so they aren't checked.
|
|
24
|
+
*/
|
|
25
|
+
exports.default = (0, rule_1.defineRule)({
|
|
26
|
+
meta: {
|
|
27
|
+
type: 'suggestion',
|
|
28
|
+
docs: { description: 'Require domain classes, not native or plain types, as property types', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#domain-primitive-properties' },
|
|
29
|
+
messages: {
|
|
30
|
+
plain: 'Property "{{name}}" of "{{owner}}": use a domain primitive (…/values/) instead of `{{type}}`.',
|
|
31
|
+
},
|
|
32
|
+
schema: [{
|
|
33
|
+
type: 'object',
|
|
34
|
+
properties: {
|
|
35
|
+
...types_1.typePolicySchema,
|
|
36
|
+
allowGenericContainers: { type: 'array', items: { type: 'string' } },
|
|
37
|
+
valuesFolder: { type: 'string' },
|
|
38
|
+
dataSuffix: { type: 'string' },
|
|
39
|
+
exemptDecoratorPattern: { type: 'string' },
|
|
40
|
+
checkGetters: { type: 'boolean' },
|
|
41
|
+
},
|
|
42
|
+
additionalProperties: false,
|
|
43
|
+
}],
|
|
44
|
+
},
|
|
45
|
+
create(context) {
|
|
46
|
+
const options = context.options[0] ?? {};
|
|
47
|
+
const containers = options.allowGenericContainers ?? exports.DEFAULT_GENERIC_CONTAINERS;
|
|
48
|
+
const classifier = (0, types_1.createTypeClassifier)(context, (0, types_1.typePolicy)(options, {
|
|
49
|
+
allowTypeSuffixes: ['Port', 'Config', 'Data'],
|
|
50
|
+
// A container is accepted as a whole: an unresolved name that isn't native passes, type arguments unchecked.
|
|
51
|
+
nativeTypes: types_1.DEFAULT_NATIVE_TYPES.filter((name) => !containers.includes(name)),
|
|
52
|
+
}));
|
|
53
|
+
const valuesFolder = options.valuesFolder ?? 'values';
|
|
54
|
+
const dataSuffix = options.dataSuffix ?? 'Data';
|
|
55
|
+
const exemptDecorator = new RegExp(options.exemptDecoratorPattern ?? 'DomainPrimitive$');
|
|
56
|
+
const checkGetters = options.checkGetters ?? false;
|
|
57
|
+
const source = context.sourceCode;
|
|
58
|
+
if ((0, ast_1.filePath)(context).split('/').slice(0, -1).includes(valuesFolder))
|
|
59
|
+
return {};
|
|
60
|
+
/** Why an unannotated initializer is a raw value (`string`, `Date`, `{ … }`), or null. */
|
|
61
|
+
const initializerType = (value) => {
|
|
62
|
+
if (!value)
|
|
63
|
+
return null;
|
|
64
|
+
switch (value.type) {
|
|
65
|
+
case 'Literal':
|
|
66
|
+
if ('bigint' in value && value.bigint)
|
|
67
|
+
return 'bigint';
|
|
68
|
+
return PRIMITIVE_LITERALS.has(typeof value.value) ? typeof value.value : null;
|
|
69
|
+
case 'TemplateLiteral':
|
|
70
|
+
return 'string';
|
|
71
|
+
case 'UnaryExpression':
|
|
72
|
+
if (value.argument.type !== 'Literal')
|
|
73
|
+
return null;
|
|
74
|
+
if (value.operator === '!')
|
|
75
|
+
return 'boolean';
|
|
76
|
+
return value.operator === '-' || value.operator === '+' ? initializerType(value.argument) : null;
|
|
77
|
+
case 'NewExpression':
|
|
78
|
+
return value.callee.type === 'Identifier' && value.callee.name === 'Date' ? 'Date' : null;
|
|
79
|
+
case 'ObjectExpression':
|
|
80
|
+
return describe(value);
|
|
81
|
+
case 'ArrayExpression': {
|
|
82
|
+
const elements = value.elements.map((element) => (element && element.type !== 'SpreadElement' ? initializerType(element) : null));
|
|
83
|
+
if (elements.length === 0 || elements.some((element) => element === null))
|
|
84
|
+
return null;
|
|
85
|
+
const unique = [...new Set(elements)];
|
|
86
|
+
return unique.length === 1 && !unique[0].startsWith('{') ? `${unique[0]}[]` : describe(value);
|
|
87
|
+
}
|
|
88
|
+
case 'TSAsExpression':
|
|
89
|
+
case 'TSSatisfiesExpression': {
|
|
90
|
+
const annotation = value.typeAnnotation;
|
|
91
|
+
const isConst = annotation.type === 'TSTypeReference' && annotation.typeName.type === 'Identifier' && annotation.typeName.name === 'const';
|
|
92
|
+
return isConst ? initializerType(value.expression) : classifier.plainReason(annotation);
|
|
93
|
+
}
|
|
94
|
+
default:
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const describe = (node) => {
|
|
99
|
+
const text = source.getText(node).replace(/\s+/g, ' ');
|
|
100
|
+
return text.length > 80 ? `${text.slice(0, 77)}…` : text;
|
|
101
|
+
};
|
|
102
|
+
const report = (node, name, owner, type) => {
|
|
103
|
+
if (type)
|
|
104
|
+
context.report({ node, messageId: 'plain', data: { name, owner, type } });
|
|
105
|
+
};
|
|
106
|
+
const isFunctionValue = (value) => value?.type === 'ArrowFunctionExpression' || value?.type === 'FunctionExpression';
|
|
107
|
+
const checkClass = (classNode) => {
|
|
108
|
+
if ((0, ast_1.decoratorNames)(classNode).some((name) => exemptDecorator.test(name)))
|
|
109
|
+
return;
|
|
110
|
+
const owner = classNode.id?.name ?? '(anonymous class)';
|
|
111
|
+
for (const member of classNode.body.body) {
|
|
112
|
+
switch (member.type) {
|
|
113
|
+
case 'PropertyDefinition':
|
|
114
|
+
case 'TSAbstractPropertyDefinition':
|
|
115
|
+
case 'AccessorProperty':
|
|
116
|
+
case 'TSAbstractAccessorProperty': {
|
|
117
|
+
// Arrow-function fields are methods: their parameters belong to domain-primitive-params.
|
|
118
|
+
if (isFunctionValue(member.value))
|
|
119
|
+
break;
|
|
120
|
+
const annotation = member.typeAnnotation?.typeAnnotation;
|
|
121
|
+
const type = annotation ? classifier.plainReason(annotation) : initializerType(member.value);
|
|
122
|
+
report(member.key, (0, ast_1.memberName)(member) ?? '[computed]', owner, type);
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
case 'MethodDefinition':
|
|
126
|
+
case 'TSAbstractMethodDefinition': {
|
|
127
|
+
// Getters are computed (`get isSuccess(): boolean`), like method returns: opt-in.
|
|
128
|
+
if (member.kind === 'get' && checkGetters) {
|
|
129
|
+
const annotation = member.value.returnType?.typeAnnotation;
|
|
130
|
+
if (annotation)
|
|
131
|
+
report(member.key, (0, ast_1.memberName)(member) ?? '[computed]', owner, classifier.plainReason(annotation));
|
|
132
|
+
}
|
|
133
|
+
if (member.kind === 'constructor') {
|
|
134
|
+
for (const param of member.value.params) {
|
|
135
|
+
if (param.type !== 'TSParameterProperty')
|
|
136
|
+
continue;
|
|
137
|
+
const binding = param.parameter.type === 'AssignmentPattern' ? param.parameter.left : param.parameter;
|
|
138
|
+
if (binding.type !== 'Identifier')
|
|
139
|
+
continue;
|
|
140
|
+
const annotation = binding.typeAnnotation?.typeAnnotation;
|
|
141
|
+
const type = annotation ? classifier.plainReason(annotation) : param.parameter.type === 'AssignmentPattern' ? initializerType(param.parameter.right) : null;
|
|
142
|
+
report(param, binding.name, owner, type);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
default:
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const isDataName = (name) => name.endsWith(dataSuffix) && name !== dataSuffix;
|
|
153
|
+
const checkMembers = (members, owner) => {
|
|
154
|
+
for (const member of members) {
|
|
155
|
+
if (member.type === 'TSPropertySignature') {
|
|
156
|
+
const annotation = member.typeAnnotation?.typeAnnotation;
|
|
157
|
+
if (annotation)
|
|
158
|
+
report(member.key, (0, ast_1.memberName)(member) ?? '[computed]', owner, classifier.plainReason(annotation));
|
|
159
|
+
}
|
|
160
|
+
else if (member.type === 'TSIndexSignature') {
|
|
161
|
+
const annotation = member.typeAnnotation?.typeAnnotation;
|
|
162
|
+
if (annotation)
|
|
163
|
+
report(member, '[index]', owner, classifier.plainReason(annotation));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
return {
|
|
168
|
+
ClassDeclaration: checkClass,
|
|
169
|
+
ClassExpression: checkClass,
|
|
170
|
+
TSInterfaceDeclaration(node) {
|
|
171
|
+
if (isDataName(node.id.name))
|
|
172
|
+
checkMembers(node.body.body, node.id.name);
|
|
173
|
+
},
|
|
174
|
+
TSTypeAliasDeclaration(node) {
|
|
175
|
+
if (isDataName(node.id.name) && node.typeAnnotation.type === 'TSTypeLiteral')
|
|
176
|
+
checkMembers(node.typeAnnotation.members, node.id.name);
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=domain-primitive-properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-primitive-properties.js","sourceRoot":"","sources":["../../src/rules/domain-primitive-properties.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Entity constructors take one `<Entity>Data` object, never positional parameters: the single
|
|
3
|
+
* parameter's type is exactly `<Entity>Data` as a plain type reference — no type arguments
|
|
4
|
+
* (`TaskData<T>`, `Partial<TaskData>`), no union / intersection (`TaskData | null`, `TaskData & X`), no
|
|
5
|
+
* inline object type — and the entity itself is not generic (`class Box<T>`), so its `<Entity>Data`
|
|
6
|
+
* shape is fixed. Decorated classes (domain primitives) and `…Error` subclasses are not entities and
|
|
7
|
+
* are skipped. The members of `<Entity>Data` are `domain-primitive-properties`' business.
|
|
4
8
|
*/
|
|
5
9
|
declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
|
|
6
10
|
export default _default;
|
|
@@ -3,32 +3,55 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const ast_1 = require("../lib/ast");
|
|
4
4
|
const rule_1 = require("../lib/rule");
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Entity constructors take one `<Entity>Data` object, never positional parameters: the single
|
|
7
|
+
* parameter's type is exactly `<Entity>Data` as a plain type reference — no type arguments
|
|
8
|
+
* (`TaskData<T>`, `Partial<TaskData>`), no union / intersection (`TaskData | null`, `TaskData & X`), no
|
|
9
|
+
* inline object type — and the entity itself is not generic (`class Box<T>`), so its `<Entity>Data`
|
|
10
|
+
* shape is fixed. Decorated classes (domain primitives) and `…Error` subclasses are not entities and
|
|
11
|
+
* are skipped. The members of `<Entity>Data` are `domain-primitive-properties`' business.
|
|
8
12
|
*/
|
|
9
13
|
exports.default = (0, rule_1.defineRule)({
|
|
10
14
|
meta: {
|
|
11
15
|
type: 'suggestion',
|
|
12
16
|
docs: { description: 'Require entity constructors to take a single `<Entity>Data` parameter', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#entity-constructor-data' },
|
|
13
|
-
messages: {
|
|
17
|
+
messages: {
|
|
18
|
+
data: 'Constructor of "{{name}}" must take a single `data: {{name}}Data` parameter.',
|
|
19
|
+
shape: 'Constructor of "{{name}}": the parameter type must be exactly `{{name}}Data` (a plain type reference), not `{{type}}`.',
|
|
20
|
+
generic: '"{{name}}" must not be generic: an entity\'s `{{name}}Data` shape is fixed.',
|
|
21
|
+
},
|
|
14
22
|
schema: [],
|
|
15
23
|
},
|
|
16
24
|
create(context) {
|
|
25
|
+
const source = context.sourceCode;
|
|
26
|
+
const isEntity = (classNode) => !!classNode.id && (0, ast_1.decoratorNames)(classNode).length === 0
|
|
27
|
+
&& !/Error$/.test(classNode.superClass?.type === 'Identifier' ? classNode.superClass.name : '');
|
|
17
28
|
return {
|
|
29
|
+
ClassDeclaration(classNode) {
|
|
30
|
+
if (isEntity(classNode) && classNode.typeParameters) {
|
|
31
|
+
context.report({ node: classNode.typeParameters, messageId: 'generic', data: { name: classNode.id.name } });
|
|
32
|
+
}
|
|
33
|
+
},
|
|
18
34
|
'ClassDeclaration > ClassBody > MethodDefinition[kind="constructor"]'(constructor) {
|
|
19
35
|
const classNode = constructor.parent.parent;
|
|
20
|
-
if (!
|
|
21
|
-
return;
|
|
22
|
-
if (/Error$/.test(classNode.superClass?.type === 'Identifier' ? classNode.superClass.name : ''))
|
|
36
|
+
if (!isEntity(classNode))
|
|
23
37
|
return;
|
|
24
38
|
const params = constructor.value.params.map((param) => (param.type === 'TSParameterProperty' ? param.parameter : param));
|
|
25
39
|
if (params.length === 0)
|
|
26
40
|
return;
|
|
27
41
|
const name = classNode.id.name;
|
|
28
42
|
const first = params[0];
|
|
29
|
-
|
|
43
|
+
const type = 'typeAnnotation' in first ? first.typeAnnotation?.typeAnnotation : undefined;
|
|
44
|
+
if (params.length !== 1 || !type) {
|
|
45
|
+
context.report({ node: constructor.key, messageId: 'data', data: { name } });
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const exact = type.type === 'TSTypeReference' && type.typeName.type === 'Identifier' && type.typeName.name === `${name}Data` && !type.typeArguments;
|
|
49
|
+
if (exact)
|
|
30
50
|
return;
|
|
31
|
-
|
|
51
|
+
const mentionsData = source.getText(type).includes(`${name}Data`);
|
|
52
|
+
context.report(mentionsData
|
|
53
|
+
? { node: type, messageId: 'shape', data: { name, type: source.getText(type).replace(/\s+/g, ' ') } }
|
|
54
|
+
: { node: constructor.key, messageId: 'data', data: { name } });
|
|
32
55
|
},
|
|
33
56
|
};
|
|
34
57
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-constructor-data.js","sourceRoot":"","sources":["../../src/rules/entity-constructor-data.ts"],"names":[],"mappings":";;AACA,
|
|
1
|
+
{"version":3,"file":"entity-constructor-data.js","sourceRoot":"","sources":["../../src/rules/entity-constructor-data.ts"],"names":[],"mappings":"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"}
|