@pjts/eslint-style-rules 0.0.15 → 0.0.16

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 CHANGED
@@ -169,10 +169,13 @@ package or generic type it is accepted, otherwise plain.
169
169
  | Rule | What it checks |
170
170
  |---|---|
171
171
  | `no-manual-wiring` | no `new X(...)` of an app class (`…Service/View/Handler` from an `app/` path), an adapter (`infrastructure/` path, `Pg…`, `InMemory…`), a module/group class or an application-provided infra class (`JetStreamMessagePublisher`, …) — outside `domain/`, `testing/`, `deployments/`, tests |
172
- | `config-provider-only` | `config.pick/pickMaybe/has` only in static config methods of a `…Module`/`…MessageHandlers`/`…Workers` class, under `common/config/` or `deployments/` (`allow`, `moduleStaticMethods`) |
172
+ | `no-comments` | no comments in sources or tests — names, types and small functions explain the code; facts about external systems live in `docs/`. Allowed: tool directives (`eslint-*`, `global`, `@ts-expect-error`/`@ts-ignore`/`@ts-nocheck`, `/// <reference>`, `@vite-ignore`, `#__PURE__`, `prettier-ignore`, `istanbul`/`c8 ignore`, `webpackChunkName`, `@jsx` pragmas) and, with `markers` (default on), a one-line `// FIXME: <decision>` or a bare `// docs/<file>` reference. `allow`: extra patterns |
173
+ | `config-provider-only` | `config.pick/pickMaybe/has` and `process.env` (`processEnv`, default on) only in static config methods of a `…Module`/`…MessageHandlers`/`…Workers` class, under `common/config/` or `deployments/` (`allow`, `moduleStaticMethods`) |
174
+ | `no-module-state` | no process-wide mutable state at module level: top-level `let`/`var`, and top-level `const`s holding a `new Map/Set/WeakMap/WeakSet/Array` or an array literal that is mutated (`push`, `splice`, …). Keep it in an injected class or a private static of the owning class. `collections`: constructor names counted as shared collections. The preset skips `testing/` |
175
+ | `pipe-shape` | pipes are `…Pipe` classes: a class implementing `GlobalPipe` is named `…Pipe`, and `@Pipe(...)` takes exactly `new XPipe(…).pipe` — no inline or curried pipe functions. Options `decorator`, `globalInterfaces`, `suffix`, `property` |
173
176
  | `throw-app-error` | only `throw AppError.x(...)` / `throw new AppError(...)` from `@pjts/core`; rethrowing the caught error is allowed |
174
177
  | `import-only-in` | a package is imported only under given path fragments (`uuid` → `/domain/`) |
175
- | `no-duplicate-sdk-types` | frontend: no local type named like one in the generated client's `types.d.ts` |
178
+ | `no-duplicate-sdk-types` | frontend: no local type named like one in the generated client's `types.d.ts`; with `structural` (`true` or `{ minProperties }`, default 3) also no local interface / object type alias whose field names are exactly an SDK type's (a renamed mirror) — the message names every matching SDK type. Interfaces with `extends` are skipped; `allow`: local names exempt (coincidental shapes) |
176
179
  | `no-abbreviated-dependencies` | a constructor parameter typed `XyzPort` is named `xyz` — the type name minus a `suffixes` entry (`Port`), lower camel case with leading acronyms lowered (`OfferRepositoryPort` → `offerRepository`, `SMSSenderPort` → `smsSender`); arrays of ports (`XPort[]`, `readonly XPort[]`, `Array<XPort>`) take the plural (`postRegistrationHooks`). A leading `_` is accepted; a type taken more than once may add a qualifier (`sourceOfferRepository`). `keepSuffixes` checks other types keeping the suffix (`Config` → `clinicLimitsConfig: ClinicLimitsConfig`); `allow`: exempt type names. **Auto-fixable** for private parameter properties and plain parameters (renames `this.x` in the class) unless the name is taken; `protected`/`public` ones are reported only |
177
180
 
178
181
  ## Limits
package/dist/index.js CHANGED
@@ -40,6 +40,9 @@ const no_reconstitute_1 = tslib_1.__importDefault(require("./rules/no-reconstitu
40
40
  const one_class_per_file_1 = tslib_1.__importDefault(require("./rules/one-class-per-file"));
41
41
  const port_file_1 = tslib_1.__importDefault(require("./rules/port-file"));
42
42
  const port_has_adapters_1 = tslib_1.__importDefault(require("./rules/port-has-adapters"));
43
+ const no_comments_1 = tslib_1.__importDefault(require("./rules/no-comments"));
44
+ const no_module_state_1 = tslib_1.__importDefault(require("./rules/no-module-state"));
45
+ const pipe_shape_1 = tslib_1.__importDefault(require("./rules/pipe-shape"));
43
46
  const port_signatures_1 = tslib_1.__importDefault(require("./rules/port-signatures"));
44
47
  const owner_first_ports_1 = tslib_1.__importDefault(require("./rules/owner-first-ports"));
45
48
  const public_endpoints_1 = tslib_1.__importDefault(require("./rules/public-endpoints"));
@@ -91,6 +94,9 @@ const rules = {
91
94
  'one-class-per-file': one_class_per_file_1.default,
92
95
  'port-file': port_file_1.default,
93
96
  'port-has-adapters': port_has_adapters_1.default,
97
+ 'no-comments': no_comments_1.default,
98
+ 'no-module-state': no_module_state_1.default,
99
+ 'pipe-shape': pipe_shape_1.default,
94
100
  'port-signatures': port_signatures_1.default,
95
101
  'owner-first-ports': owner_first_ports_1.default,
96
102
  'public-endpoints': public_endpoints_1.default,
@@ -153,6 +159,8 @@ const createDddConfig = (options = {}) => {
153
159
  'pjts/db-writes-in-repositories': 'error',
154
160
  // Environment is read in module static config methods and common/config/ only.
155
161
  'pjts/config-provider-only': 'error',
162
+ // Pipes are …Pipe classes: global ones implement GlobalPipe, @Pipe(new XPipe(…).pipe) per endpoint.
163
+ 'pjts/pipe-shape': 'error',
156
164
  // Class names key the generated wiring and the route registry.
157
165
  'pjts/unique-class-names': 'error',
158
166
  // Class kinds live in their layer: …Provider classes in infrastructure (app = services, handlers, workers).
@@ -187,6 +195,12 @@ const createDddConfig = (options = {}) => {
187
195
  'pjts/domain-primitive-properties': ['error', { allowTypesFrom: [messages] }],
188
196
  },
189
197
  },
198
+ {
199
+ // No process-wide mutable state at module level (top-level let/var, shared Map/Set/arrays).
200
+ files: [`${src}/**/*.ts`],
201
+ ignores: [...exclude, `${module}/testing/**`, `${src}/testing/**`],
202
+ rules: { 'pjts/no-module-state': 'error' },
203
+ },
190
204
  {
191
205
  // One exported class per file, the file named after it. DTO bundles (app/dto) may group request shapes.
192
206
  files: [`${src}/**/*.ts`],
@@ -323,6 +337,12 @@ const createDddConfig = (options = {}) => {
323
337
  'pjts/test-location': 'error',
324
338
  },
325
339
  },
340
+ {
341
+ // No comments in sources or tests: the code explains itself; facts about external systems live in docs/.
342
+ files: [`${src}/**/*.ts`],
343
+ ignores: exclude,
344
+ rules: { 'pjts/no-comments': 'error' },
345
+ },
326
346
  ];
327
347
  };
328
348
  const plugin = {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,10 @@ 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', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#config-provider-only' },
14
+ docs: { description: 'config.pick / pickMaybe / has and process.env 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
+ processEnv: '`process.env` is read only in {{where}} — add the variable to the config map and declare the `…Config` object as a constructor dependency instead.',
17
18
  },
18
19
  schema: [{
19
20
  type: 'object',
@@ -22,6 +23,7 @@ exports.default = (0, rule_1.defineRule)({
22
23
  methods: { type: 'array', items: { type: 'string' } },
23
24
  allow: { type: 'array', items: { type: 'string' } },
24
25
  moduleStaticMethods: { type: 'boolean' },
26
+ processEnv: { type: 'boolean' },
25
27
  },
26
28
  additionalProperties: false,
27
29
  }],
@@ -31,6 +33,7 @@ exports.default = (0, rule_1.defineRule)({
31
33
  const methods = context.options[0]?.methods ?? ['pick', 'pickMaybe', 'has'];
32
34
  const allow = context.options[0]?.allow ?? ['/common/config/', '/deployments/'];
33
35
  const moduleStaticMethods = context.options[0]?.moduleStaticMethods ?? true;
36
+ const processEnv = context.options[0]?.processEnv ?? true;
34
37
  const file = (0, ast_1.filePath)(context);
35
38
  if (allow.some((fragment) => file.includes(fragment)))
36
39
  return {};
@@ -55,6 +58,13 @@ exports.default = (0, rule_1.defineRule)({
55
58
  return;
56
59
  context.report({ node, messageId: 'outside', data: { object, method, where } });
57
60
  },
61
+ 'MemberExpression[object.type="Identifier"][object.name="process"]'(node) {
62
+ if (!processEnv || (0, ast_1.keyName)(node.property) !== 'env' || node.computed)
63
+ return;
64
+ if (moduleStaticMethods && inModuleStaticMethod(node))
65
+ return;
66
+ context.report({ node, messageId: 'processEnv', data: { where } });
67
+ },
58
68
  };
59
69
  },
60
70
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config-provider-only.js","sourceRoot":"","sources":["../../src/rules/config-provider-only.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-provider-only.js","sourceRoot":"","sources":["../../src/rules/config-provider-only.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
2
+ export default _default;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const rule_1 = require("../lib/rule");
4
+ const DIRECTIVES = [
5
+ '^\\s*eslint(-disable|-enable|-disable-line|-disable-next-line)?(\\s|$)',
6
+ '^\\s*(global|globals|exported)\\s',
7
+ '^\\s*@ts-(expect-error|ignore|nocheck|check)\\b',
8
+ '^/\\s*<(reference|amd-module|amd-dependency)\\b',
9
+ '^\\s*@vite-ignore\\s*$',
10
+ '^\\s*[#@]__(PURE|NO_SIDE_EFFECTS)__\\s*$',
11
+ '^\\s*prettier-ignore\\b',
12
+ '^\\s*(istanbul|c8|v8) ignore\\b',
13
+ '^\\s*webpack[A-Z]\\w*:',
14
+ '^\\s*@jsx(ImportSource|Frag|Runtime)?\\s',
15
+ '^\\s*@refresh reset\\s*$',
16
+ ];
17
+ const MARKERS = [
18
+ '^\\s*FIXME: [^\\n]+$',
19
+ '^\\s*(see )?docs/[\\w./#-]+\\s*$',
20
+ ];
21
+ exports.default = (0, rule_1.defineRule)({
22
+ meta: {
23
+ type: 'suggestion',
24
+ docs: {
25
+ description: 'No comments: code explains itself; facts about external systems live in docs/',
26
+ url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#no-comments',
27
+ },
28
+ messages: {
29
+ comment: 'No comments in code — make the code say it (names, types, a smaller function), or move a fact about an external system to docs/ and reference it (`// docs/<file>.md`).',
30
+ },
31
+ schema: [{
32
+ type: 'object',
33
+ properties: {
34
+ allow: { type: 'array', items: { type: 'string' } },
35
+ markers: { type: 'boolean' },
36
+ },
37
+ additionalProperties: false,
38
+ }],
39
+ },
40
+ create(context) {
41
+ const markers = context.options[0]?.markers ?? true;
42
+ const patterns = [...DIRECTIVES, ...(markers ? MARKERS : []), ...(context.options[0]?.allow ?? [])].map((pattern) => new RegExp(pattern));
43
+ const allowed = (comment) => {
44
+ const text = comment.type === 'Block' ? comment.value.replace(/^\*/, '') : comment.value;
45
+ return patterns.some((pattern) => pattern.test(text));
46
+ };
47
+ return {
48
+ Program() {
49
+ for (const comment of context.sourceCode.getAllComments()) {
50
+ if (comment.type === 'Shebang' || allowed(comment))
51
+ continue;
52
+ context.report({ loc: comment.loc, messageId: 'comment' });
53
+ }
54
+ },
55
+ };
56
+ },
57
+ });
58
+ //# sourceMappingURL=no-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-comments.js","sourceRoot":"","sources":["../../src/rules/no-comments.ts"],"names":[],"mappings":";;AACA,sCAAyC;AAEzC,MAAM,UAAU,GAAG;IACjB,wEAAwE;IACxE,mCAAmC;IACnC,iDAAiD;IACjD,iDAAiD;IACjD,wBAAwB;IACxB,0CAA0C;IAC1C,yBAAyB;IACzB,iCAAiC;IACjC,wBAAwB;IACxB,0CAA0C;IAC1C,0BAA0B;CAC3B,CAAC;AAEF,MAAM,OAAO,GAAG;IACd,sBAAsB;IACtB,kCAAkC;CACnC,CAAC;AAEF,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,+EAA+E;YAC5F,GAAG,EAAE,wFAAwF;SAC9F;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,yKAAyK;SACnL;QACD,MAAM,EAAE,CAAC;gBACP,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBACnD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC7B;gBACD,oBAAoB,EAAE,KAAK;aAC5B,CAAC;KACH;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,OAAO,GAAY,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;QAC7D,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAE1I,MAAM,OAAO,GAAG,CAAC,OAAyB,EAAW,EAAE;YACrD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YACzF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC;QAEF,OAAO;YACL,OAAO;gBACL,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC1D,IAAK,OAAO,CAAC,IAAe,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;wBAAE,SAAS;oBACzE,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -1,6 +1,3 @@
1
- /**
2
- * the frontend imports wire types from the generated SDK (`api/client/types.d.ts`)
3
- * instead of re-declaring them. Matches by name, so a renamed hand-written mirror slips through.
4
- */
1
+ export declare const resetSdkIndexes: () => void;
5
2
  declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
6
3
  export default _default;
@@ -1,38 +1,105 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resetSdkIndexes = void 0;
3
4
  const tslib_1 = require("tslib");
4
5
  const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
5
6
  const rule_1 = require("../lib/rule");
6
- /** typesFile → Set of type names it declares (per lint run). */
7
- const sdkNames = new Map();
8
- const namesIn = (typesFile) => {
9
- if (!sdkNames.has(typesFile)) {
10
- const source = node_fs_1.default.readFileSync(typesFile, 'utf8');
11
- sdkNames.set(typesFile, new Set([...source.matchAll(/\b(?:interface|type|enum)\s+([A-Z]\w*)/g)].map((match) => match[1])));
7
+ const indexes = new Map();
8
+ const memberNames = (members) => {
9
+ const names = [];
10
+ for (const member of members) {
11
+ if (member.type !== 'TSPropertySignature' && member.type !== 'TSMethodSignature')
12
+ return null;
13
+ if (member.computed)
14
+ return null;
15
+ if (member.key.type === 'Identifier')
16
+ names.push(member.key.name);
17
+ else if (member.key.type === 'Literal' && typeof member.key.value === 'string')
18
+ names.push(member.key.value);
19
+ else
20
+ return null;
12
21
  }
13
- return sdkNames.get(typesFile);
22
+ return names;
14
23
  };
15
- /**
16
- * the frontend imports wire types from the generated SDK (`api/client/types.d.ts`)
17
- * instead of re-declaring them. Matches by name, so a renamed hand-written mirror slips through.
18
- */
24
+ const shapeOf = (node) => {
25
+ if (node.type === 'TSInterfaceDeclaration')
26
+ return node.extends?.length ? null : memberNames(node.body.body);
27
+ if (node.type === 'TSTypeAliasDeclaration' && node.typeAnnotation.type === 'TSTypeLiteral')
28
+ return memberNames(node.typeAnnotation.members);
29
+ return null;
30
+ };
31
+ const shapeKey = (names) => [...new Set(names)].sort().join(',');
32
+ const indexOf = (typesFile) => {
33
+ const cached = indexes.get(typesFile);
34
+ if (cached)
35
+ return cached;
36
+ const { parser } = require('typescript-eslint');
37
+ const program = parser.parseForESLint(node_fs_1.default.readFileSync(typesFile, 'utf8'), { range: true, loc: false }).ast;
38
+ const index = { names: new Set(), shapes: new Map() };
39
+ for (const statement of program.body) {
40
+ const declaration = statement.type === 'ExportNamedDeclaration' ? statement.declaration : statement;
41
+ if (!declaration || !('id' in declaration) || declaration.id?.type !== 'Identifier')
42
+ continue;
43
+ if (declaration.type !== 'TSInterfaceDeclaration' && declaration.type !== 'TSTypeAliasDeclaration' && declaration.type !== 'TSEnumDeclaration')
44
+ continue;
45
+ index.names.add(declaration.id.name);
46
+ const shape = shapeOf(declaration);
47
+ if (!shape || shape.length === 0)
48
+ continue;
49
+ const key = shapeKey(shape);
50
+ index.shapes.set(key, [...(index.shapes.get(key) ?? []), declaration.id.name]);
51
+ }
52
+ indexes.set(typesFile, index);
53
+ return index;
54
+ };
55
+ const resetSdkIndexes = () => indexes.clear();
56
+ exports.resetSdkIndexes = resetSdkIndexes;
19
57
  exports.default = (0, rule_1.defineRule)({
20
58
  meta: {
21
59
  type: 'problem',
22
- docs: { description: 'Forbid re-declaring types that exist in the generated SDK', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#no-duplicate-sdk-types' },
23
- messages: { duplicate: '"{{name}}" already exists in the generated SDK — import it from api/client/types.' },
60
+ docs: { description: 'Forbid re-declaring types that exist in the generated SDK, by name or by shape', url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#no-duplicate-sdk-types' },
61
+ messages: {
62
+ duplicate: '"{{name}}" already exists in the generated SDK — import it from api/client/types.',
63
+ structural: '"{{name}}" has exactly the fields of the SDK\'s {{matches}} — import it from api/client/types instead of mirroring it.',
64
+ },
24
65
  schema: [{
25
66
  type: 'object',
26
- properties: { typesFile: { type: 'string' } },
67
+ properties: {
68
+ typesFile: { type: 'string' },
69
+ structural: {
70
+ anyOf: [
71
+ { type: 'boolean' },
72
+ { type: 'object', properties: { minProperties: { type: 'integer', minimum: 1 } }, additionalProperties: false },
73
+ ],
74
+ },
75
+ allow: { type: 'array', items: { type: 'string' } },
76
+ },
27
77
  required: ['typesFile'],
28
78
  additionalProperties: false,
29
79
  }],
30
80
  },
31
81
  create(context) {
32
- const names = namesIn(context.options[0].typesFile);
82
+ const options = context.options[0];
83
+ const index = indexOf(options.typesFile);
84
+ const structural = options.structural;
85
+ const minProperties = typeof structural === 'object' ? structural.minProperties ?? 3 : 3;
86
+ const allow = new Set(options.allow ?? []);
33
87
  const check = (node) => {
34
- if (names.has(node.id.name))
35
- context.report({ node: node.id, messageId: 'duplicate', data: { name: node.id.name } });
88
+ const name = node.id.name;
89
+ if (allow.has(name))
90
+ return;
91
+ if (index.names.has(name)) {
92
+ context.report({ node: node.id, messageId: 'duplicate', data: { name } });
93
+ return;
94
+ }
95
+ if (!structural || node.type === 'TSEnumDeclaration')
96
+ return;
97
+ const shape = shapeOf(node);
98
+ if (!shape || new Set(shape).size < minProperties)
99
+ return;
100
+ const matches = index.shapes.get(shapeKey(shape));
101
+ if (matches)
102
+ context.report({ node: node.id, messageId: 'structural', data: { name, matches: matches.map((match) => `\`${match}\``).join(' / ') } });
36
103
  };
37
104
  return { TSInterfaceDeclaration: check, TSTypeAliasDeclaration: check, TSEnumDeclaration: check };
38
105
  },
@@ -1 +1 @@
1
- {"version":3,"file":"no-duplicate-sdk-types.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-sdk-types.ts"],"names":[],"mappings":";;;AAAA,8DAAyB;AAEzB,sCAAyC;AAEzC,gEAAgE;AAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;AAEhD,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAe,EAAE;IACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,iBAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClD,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7H,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;AAClC,CAAC,CAAC;AAEF;;;GAGG;AACH,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,EAAE,WAAW,EAAE,2DAA2D,EAAE,GAAG,EAAE,mGAAmG,EAAE;QAC5L,QAAQ,EAAE,EAAE,SAAS,EAAE,mFAAmF,EAAE;QAC5G,MAAM,EAAE,CAAC;gBACP,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBAC7C,QAAQ,EAAE,CAAC,WAAW,CAAC;gBACvB,oBAAoB,EAAE,KAAK;aAC5B,CAAC;KACH;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,CAAC,IAAoG,EAAE,EAAE;YACrH,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvH,CAAC,CAAC;QACF,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;IACpG,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"no-duplicate-sdk-types.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-sdk-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
2
+ export default _default;
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const rule_1 = require("../lib/rule");
4
+ exports.default = (0, rule_1.defineRule)({
5
+ meta: {
6
+ type: 'problem',
7
+ docs: {
8
+ description: 'No mutable module-level state: no top-level let/var and no top-level Map/Set/array instances',
9
+ url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#no-module-state',
10
+ },
11
+ messages: {
12
+ reassignable: 'Top-level `{{kind}} {{name}}` is process-wide mutable state — keep it in an injected class (or a private static of the class that owns it).',
13
+ collection: 'Top-level `{{name}}` holds a shared `{{type}}` — keep it in an injected class (or a private static of the class that owns it).',
14
+ },
15
+ schema: [{
16
+ type: 'object',
17
+ properties: { collections: { type: 'array', items: { type: 'string' } } },
18
+ additionalProperties: false,
19
+ }],
20
+ },
21
+ create(context) {
22
+ const collections = new Set(context.options[0]?.collections ?? ['Map', 'Set', 'WeakMap', 'WeakSet', 'Array']);
23
+ const label = (declarator) => declarator.id.type === 'Identifier' ? declarator.id.name : context.sourceCode.getText(declarator.id);
24
+ const collectionType = (init) => {
25
+ if (!init)
26
+ return null;
27
+ if (init.type === 'ArrayExpression')
28
+ return 'Array';
29
+ if (init.type === 'NewExpression' && init.callee.type === 'Identifier' && collections.has(init.callee.name))
30
+ return init.callee.name;
31
+ return null;
32
+ };
33
+ const check = (declaration, exported) => {
34
+ if (declaration.declare)
35
+ return;
36
+ for (const declarator of declaration.declarations) {
37
+ if (declaration.kind === 'let' || declaration.kind === 'var') {
38
+ context.report({ node: declarator, messageId: 'reassignable', data: { kind: declaration.kind, name: label(declarator) } });
39
+ continue;
40
+ }
41
+ const type = collectionType(declarator.init);
42
+ if (type && isShared(declarator, type, exported)) {
43
+ context.report({ node: declarator, messageId: 'collection', data: { name: label(declarator), type } });
44
+ }
45
+ }
46
+ };
47
+ const READ_ONLY = {
48
+ collection: new Set(['has', 'get', 'size', 'keys', 'values', 'entries', 'forEach']),
49
+ array: new Set(['length', 'map', 'filter', 'find', 'findIndex', 'some', 'every', 'includes', 'indexOf', 'join', 'slice', 'forEach', 'reduce', 'flatMap', 'concat', 'at', 'entries', 'keys', 'values', 'toSorted']),
50
+ };
51
+ const MUTATORS = new Set(['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse', 'fill', 'copyWithin']);
52
+ const assigned = (member) => (member.parent?.type === 'AssignmentExpression' && member.parent.left === member) || member.parent?.type === 'UpdateExpression';
53
+ const isShared = (declarator, type, exported) => {
54
+ if (declarator.id.type !== 'Identifier')
55
+ return true;
56
+ const literal = type === 'Array' && declarator.init?.type === 'ArrayExpression';
57
+ if (exported && !literal)
58
+ return true;
59
+ const name = declarator.id.name;
60
+ const variable = context.sourceCode.getDeclaredVariables(declarator).find((candidate) => candidate.name === name);
61
+ const references = (variable?.references ?? []).filter((reference) => reference.identifier !== declarator.id);
62
+ if (literal) {
63
+ return references.some((reference) => {
64
+ const parent = reference.identifier.parent;
65
+ if (parent?.type !== 'MemberExpression' || parent.object !== reference.identifier)
66
+ return false;
67
+ return assigned(parent) || (parent.property.type === 'Identifier' && MUTATORS.has(parent.property.name));
68
+ });
69
+ }
70
+ const allowed = type === 'Array' ? READ_ONLY.array : READ_ONLY.collection;
71
+ return references.some((reference) => {
72
+ const parent = reference.identifier.parent;
73
+ if (parent?.type === 'MemberExpression' && parent.object === reference.identifier) {
74
+ if (assigned(parent))
75
+ return true;
76
+ return parent.computed ? type !== 'Array' : !(parent.property.type === 'Identifier' && allowed.has(parent.property.name));
77
+ }
78
+ if (parent?.type === 'ForOfStatement' && parent.right === reference.identifier)
79
+ return false;
80
+ if (parent?.type === 'SpreadElement')
81
+ return false;
82
+ return true;
83
+ });
84
+ };
85
+ return {
86
+ Program(program) {
87
+ for (const statement of program.body) {
88
+ const declaration = statement.type === 'ExportNamedDeclaration' ? statement.declaration : statement;
89
+ if (declaration?.type === 'VariableDeclaration')
90
+ check(declaration, statement.type === 'ExportNamedDeclaration');
91
+ }
92
+ },
93
+ };
94
+ },
95
+ });
96
+ //# sourceMappingURL=no-module-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-module-state.js","sourceRoot":"","sources":["../../src/rules/no-module-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@typescript-eslint/utils/dist/ts-eslint").RuleModule<string, any[], unknown, import("@typescript-eslint/utils/dist/ts-eslint").RuleListener>;
2
+ export default _default;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const rule_1 = require("../lib/rule");
4
+ const ast_1 = require("../lib/ast");
5
+ exports.default = (0, rule_1.defineRule)({
6
+ meta: {
7
+ type: 'suggestion',
8
+ docs: {
9
+ description: 'Pipes are `…Pipe` classes: global pipes implement GlobalPipe, `@Pipe(...)` takes `new XPipe(…).pipe`',
10
+ url: 'https://github.com/PiotrJozefow/pjx/tree/master/modules/eslint-style-rules#pipe-shape',
11
+ },
12
+ messages: {
13
+ globalName: '`{{name}}` implements `{{interface}}` — name it `…{{suffix}}`.',
14
+ decoratorArgument: '`@{{decorator}}(...)` takes a pipe class instance\'s `pipe`: `@{{decorator}}(new X{{suffix}}(…).pipe)` — not `{{text}}`.',
15
+ },
16
+ schema: [{
17
+ type: 'object',
18
+ properties: {
19
+ decorator: { type: 'string' },
20
+ globalInterfaces: { type: 'array', items: { type: 'string' } },
21
+ suffix: { type: 'string' },
22
+ property: { type: 'string' },
23
+ },
24
+ additionalProperties: false,
25
+ }],
26
+ },
27
+ create(context) {
28
+ const decorator = context.options[0]?.decorator ?? 'Pipe';
29
+ const globalInterfaces = new Set(context.options[0]?.globalInterfaces ?? ['GlobalPipe']);
30
+ const suffix = context.options[0]?.suffix ?? 'Pipe';
31
+ const property = context.options[0]?.property ?? 'pipe';
32
+ const isPipeInstance = (argument) => argument.type === 'MemberExpression'
33
+ && !argument.computed
34
+ && argument.property.type === 'Identifier'
35
+ && argument.property.name === property
36
+ && argument.object.type === 'NewExpression'
37
+ && argument.object.callee.type === 'Identifier'
38
+ && argument.object.callee.name.endsWith(suffix);
39
+ const checkClass = (classNode) => {
40
+ if (!classNode.id)
41
+ return;
42
+ const name = classNode.id.name;
43
+ for (const clause of classNode.implements ?? []) {
44
+ if (clause.expression.type !== 'Identifier' || !globalInterfaces.has(clause.expression.name))
45
+ continue;
46
+ if (!name.endsWith(suffix))
47
+ context.report({ node: classNode.id, messageId: 'globalName', data: { name, interface: clause.expression.name, suffix } });
48
+ }
49
+ };
50
+ return {
51
+ ClassDeclaration: checkClass,
52
+ ClassExpression: checkClass,
53
+ Decorator(node) {
54
+ if ((0, ast_1.decoratorName)(node) !== decorator || node.expression.type !== 'CallExpression')
55
+ return;
56
+ const [argument] = node.expression.arguments;
57
+ if (argument && node.expression.arguments.length === 1 && isPipeInstance(argument))
58
+ return;
59
+ context.report({
60
+ node: node.expression,
61
+ messageId: 'decoratorArgument',
62
+ data: { decorator, suffix, text: context.sourceCode.getText(node.expression) },
63
+ });
64
+ },
65
+ };
66
+ },
67
+ });
68
+ //# sourceMappingURL=pipe-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe-shape.js","sourceRoot":"","sources":["../../src/rules/pipe-shape.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pjts/eslint-style-rules",
3
- "version": "0.0.15",
3
+ "version": "0.0.16",
4
4
  "description": "ESLint rules and a flat-config preset enforcing the pjts DDD layout and conventions",
5
5
  "repository": {
6
6
  "type": "git",