@ddd-ts-kit/eslint-plugin 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -0
  3. package/dist/project/config.d.ts +2 -0
  4. package/dist/project/config.d.ts.map +1 -1
  5. package/dist/project/parse-config.d.ts.map +1 -1
  6. package/dist/project/parse-config.js +2 -0
  7. package/dist/project/parse-config.js.map +1 -1
  8. package/dist/rules/clean-no-magic-number.d.ts +6 -0
  9. package/dist/rules/clean-no-magic-number.d.ts.map +1 -0
  10. package/dist/rules/clean-no-magic-number.js +99 -0
  11. package/dist/rules/clean-no-magic-number.js.map +1 -0
  12. package/dist/rules/declarations-role-declared.d.ts.map +1 -1
  13. package/dist/rules/declarations-role-declared.js +31 -9
  14. package/dist/rules/declarations-role-declared.js.map +1 -1
  15. package/dist/rules/events-name-format.d.ts.map +1 -1
  16. package/dist/rules/events-name-format.js +7 -1
  17. package/dist/rules/events-name-format.js.map +1 -1
  18. package/dist/rules/language-declared-vocabulary.d.ts +2 -0
  19. package/dist/rules/language-declared-vocabulary.d.ts.map +1 -0
  20. package/dist/rules/language-declared-vocabulary.js +70 -0
  21. package/dist/rules/language-declared-vocabulary.js.map +1 -0
  22. package/dist/rules/rules.d.ts.map +1 -1
  23. package/dist/rules/rules.js +4 -0
  24. package/dist/rules/rules.js.map +1 -1
  25. package/dist/support/classes/class-finder.d.ts.map +1 -1
  26. package/dist/support/classes/class-finder.js +2 -9
  27. package/dist/support/classes/class-finder.js.map +1 -1
  28. package/dist/support/parse/parse-source.d.ts +9 -0
  29. package/dist/support/parse/parse-source.d.ts.map +1 -0
  30. package/dist/support/parse/parse-source.js +21 -0
  31. package/dist/support/parse/parse-source.js.map +1 -0
  32. package/dist/support/vocabularies/declared-value.d.ts +14 -0
  33. package/dist/support/vocabularies/declared-value.d.ts.map +1 -0
  34. package/dist/support/vocabularies/declared-value.js +2 -0
  35. package/dist/support/vocabularies/declared-value.js.map +1 -0
  36. package/dist/support/vocabularies/project-vocabularies.d.ts +12 -0
  37. package/dist/support/vocabularies/project-vocabularies.d.ts.map +1 -0
  38. package/dist/support/vocabularies/project-vocabularies.js +47 -0
  39. package/dist/support/vocabularies/project-vocabularies.js.map +1 -0
  40. package/dist/support/vocabularies/values-declared-in.d.ts +16 -0
  41. package/dist/support/vocabularies/values-declared-in.d.ts.map +1 -0
  42. package/dist/support/vocabularies/values-declared-in.js +108 -0
  43. package/dist/support/vocabularies/values-declared-in.js.map +1 -0
  44. package/dist/version.d.ts +1 -1
  45. package/dist/version.js +1 -1
  46. package/docs/rules/clean-no-magic-number.md +59 -0
  47. package/docs/rules/declarations-role-declared.md +3 -3
  48. package/docs/rules/events-name-format.md +8 -4
  49. package/docs/rules/language-declared-vocabulary.md +64 -0
  50. package/package.json +1 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Gary Bourgeat
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -85,6 +85,7 @@ is an error whatever the configured limit). `strict` sets every rule to `error`.
85
85
  | [`context/published-language-only`](docs/rules/context-published-language-only.md) | `ddd-ts-kit/context-published-language-only` | another context is imported only through its `published-language/` | `error` | custom |
86
86
  | [`context/declared-relationship`](docs/rules/context-declared-relationship.md) | `ddd-ts-kit/context-declared-relationship` | such an import needs the upstream declared in the config | `error` | custom |
87
87
  | [`context/published-language-is-a-contract`](docs/rules/context-published-language-is-a-contract.md) | `ddd-ts-kit/context-published-language-is-a-contract` | `published-language/` imports only its allow-list and other published languages | `error` | custom |
88
+ | [`language/declared-vocabulary`](docs/rules/language-declared-vocabulary.md) | `ddd-ts-kit/language-declared-vocabulary` | a value of a closed vocabulary the project declares (an object `as const` with the union type of its name, a permission set) is read through it, never written again as a string, under `"stack.literals": "named"`; tests and published languages excluded | `error` | custom |
88
89
  | [`purity/no-system-clock`](docs/rules/purity-no-system-clock.md) | `ddd-ts-kit/purity-no-system-clock` | no `new Date()`, `Date.now()`, `Date()`, `performance.now()` in `domain/` and `application/` | `error` | custom |
89
90
  | [`purity/no-ambient-randomness`](docs/rules/purity-no-ambient-randomness.md) | `ddd-ts-kit/purity-no-ambient-randomness` | no `Math.random`, `crypto.randomUUID`, id library in `domain/` and `application/` | `error` | custom |
90
91
  | [`purity/no-environment`](docs/rules/purity-no-environment.md) | `ddd-ts-kit/purity-no-environment` | no `process.env`, `console`, `fetch`, file system or network module in `domain/` and `application/` | `error` | custom |
@@ -98,6 +99,7 @@ is an error whatever the configured limit). `strict` sets every rule to `error`.
98
99
  | [`clean/no-hash-private`](docs/rules/clean-no-hash-private.md) | `ddd-ts-kit/clean-no-hash-private` | a class member is `private`, never `#name`; fixable | `error` | custom |
99
100
  | [`clean/one-export-per-file`](docs/rules/clean-one-export-per-file.md) | `ddd-ts-kit/clean-one-export-per-file` | one exported class, interface or function per source file, with the types of its signature, the file named after it; entry files only re-export | `error` | custom |
100
101
  | [`clean/file-size`](docs/rules/clean-file-size.md) | `ddd-ts-kit/clean-file-size` | no file over 350 lines, tests included | `error` | custom |
102
+ | [`clean/no-magic-number`](docs/rules/clean-no-magic-number.md) | `ddd-ts-kit/clean-no-magic-number` | no number literal in `domain/` and `application/` but 0, 1, -1, an index, a type and the initializer of a module constant or a `static readonly`, under `"stack.literals": "named"` | `error` | custom |
101
103
  | [`clean/blank-lines`](docs/rules/clean-blank-lines.md) | two `@stylistic/*` rules (`standardRules.layout`) | a blank line before every `return` and between logical blocks, around a method; fixable | `error` | standard |
102
104
  | [`clean/braces`](docs/rules/clean-braces.md) | `curly` (`standardRules.braces`) | every `if`, `else`, `for`, `while` and `do` has braces; fixable | `error` | standard |
103
105
  | [`clean/formatted`](docs/rules/clean-formatted.md) | none: Biome (`npm run format:check`) | every file is laid out by the formatter, at a line width of 120 | none | formatter |
@@ -20,6 +20,8 @@ export interface Stack {
20
20
  readonly dependencies: 'signature' | 'listed';
21
21
  /** How a domain error is written: static factories on one class per concept, or a class per error. A config that does not say is `classes`. */
22
22
  readonly refusals: 'factories' | 'classes';
23
+ /** `named`: a value of a declared vocabulary and a number of the model are read through a name. A config that does not say is `free`, and both rules are silent. */
24
+ readonly literals: 'named' | 'free';
23
25
  /** Kept as written: with `prisma` the generated client under `generated/` has an import alias of its own. */
24
26
  readonly orm: string;
25
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/project/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9C,6EAA6E;AAC7E,MAAM,WAAW,KAAK;IACpB,qIAAqI;IACrI,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,iHAAiH;IACjH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,yJAAyJ;IACzJ,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC9C,+IAA+I;IAC/I,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,CAAC;IAC3C,6GAA6G;IAC7G,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8GAA8G;IAC9G,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,0BAA0B,EAAE,SAAS,MAAM,EAAE,CAAC;IACvD,QAAQ,CAAC,gCAAgC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kGAAkG;IAClG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,gJAAgJ;IAChJ,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IACtE,uIAAuI;IACvI,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC;AAED,uGAAuG;AACvG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/project/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9C,6EAA6E;AAC7E,MAAM,WAAW,KAAK;IACpB,qIAAqI;IACrI,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,iHAAiH;IACjH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,yJAAyJ;IACzJ,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC9C,+IAA+I;IAC/I,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,CAAC;IAC3C,oKAAoK;IACpK,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,6GAA6G;IAC7G,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8GAA8G;IAC9G,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,0BAA0B,EAAE,SAAS,MAAM,EAAE,CAAC;IACvD,QAAQ,CAAC,gCAAgC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kGAAkG;IAClG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,gJAAgJ;IAChJ,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IACtE,uIAAuI;IACvI,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC;AAED,uGAAuG;AACvG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAQV,MAAM,EAEP,MAAM,aAAa,CAAC;AAOrB,+GAA+G;AAC/G,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAuB1C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CA0BhD"}
1
+ {"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAQV,MAAM,EAEP,MAAM,aAAa,CAAC;AAOrB,+GAA+G;AAC/G,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAwB1C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CA0BhD"}
@@ -8,6 +8,7 @@ const STYLES = ['declared', 'explicit'];
8
8
  const ASSEMBLIES = ['barrel', 'discovery'];
9
9
  const DEPENDENCY_STATEMENTS = ['signature', 'listed'];
10
10
  const REFUSAL_FORMS = ['factories', 'classes'];
11
+ const LITERAL_FORMS = ['named', 'free'];
11
12
  const KERNEL = ['@ddd-ts-kit/kernel'];
12
13
  /** The package name of a client when "sdk" does not give one, as the CLI writes it. */
13
14
  const DEFAULT_SDK_NAME = '{project}-{document}-client';
@@ -58,6 +59,7 @@ function parseStack(value) {
58
59
  assembly: oneOf(ASSEMBLIES, raw['assembly'], 'barrel'),
59
60
  dependencies: oneOf(DEPENDENCY_STATEMENTS, raw['dependencies'], 'listed'),
60
61
  refusals: oneOf(REFUSAL_FORMS, raw['refusals'], 'classes'),
62
+ literals: oneOf(LITERAL_FORMS, raw['literals'], 'free'),
61
63
  orm: text(raw['orm'], 'drizzle'),
62
64
  };
63
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-config.js","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-config.js","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ type Options = [{
2
+ readonly allow?: readonly number[];
3
+ }];
4
+ export declare const cleanNoMagicNumber: import("@typescript-eslint/utils/ts-eslint").RuleModule<"magic", Options, import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
5
+ export {};
6
+ //# sourceMappingURL=clean-no-magic-number.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-no-magic-number.d.ts","sourceRoot":"","sources":["../../src/rules/clean-no-magic-number.ts"],"names":[],"mappings":"AAKA,KAAK,OAAO,GAAG,CAAC;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC;AAKxD,eAAO,MAAM,kBAAkB,sKA2C7B,CAAC"}
@@ -0,0 +1,99 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { defineRule } from '../support/rule/define-rule.js';
3
+ /** Counting from nothing, one more, the last: these say what they are. */
4
+ const ALLOWED = [0, 1, -1];
5
+ export const cleanNoMagicNumber = defineRule({
6
+ id: 'clean/no-magic-number',
7
+ type: 'suggestion',
8
+ recommended: 'error',
9
+ description: 'Under "stack.literals": "named", no number literal in domain/ and application/ but 0, 1, -1 and an index: a duration, a limit or a rate is a named constant of the module or a value object.',
10
+ messages: {
11
+ magic: '{{value}} is a number without a name. Name it where it is decided: a constant of the module (`const LONGEST_ADDRESS = 254;`, `const MINUTES_PER_HOUR = 60;`), a `static readonly` of the class, or a value object when it is a duration, an amount or a limit of the business. The rule allows {{allowed}}, an index and a type.',
12
+ },
13
+ schema: [
14
+ {
15
+ type: 'object',
16
+ properties: { allow: { type: 'array', items: { type: 'number' } } },
17
+ additionalProperties: false,
18
+ },
19
+ ],
20
+ defaultOptions: [{}],
21
+ create({ file, options, report }) {
22
+ if (file.config.stack.literals !== 'named' || !isJudged(file)) {
23
+ return {};
24
+ }
25
+ const allowed = options[0].allow ?? ALLOWED;
26
+ return {
27
+ Literal(node) {
28
+ if (typeof node.value !== 'number' && typeof node.value !== 'bigint') {
29
+ return;
30
+ }
31
+ const signed = signedValue(node);
32
+ if (!allowed.includes(Number(signed.value)) && !isNamed(signed.node)) {
33
+ report({
34
+ node: signed.node,
35
+ messageId: 'magic',
36
+ data: { value: String(signed.value), allowed: allowed.join(', ') },
37
+ });
38
+ }
39
+ },
40
+ };
41
+ },
42
+ });
43
+ function isJudged(file) {
44
+ return (!file.isTest &&
45
+ file.location.area === 'context' &&
46
+ (file.location.layer === 'domain' || file.location.layer === 'application'));
47
+ }
48
+ /** `-1` is one literal for a reader: the minus goes with it. */
49
+ function signedValue(node) {
50
+ const { parent } = node;
51
+ const value = typeof node.value === 'bigint' ? node.value : Number(node.value);
52
+ if (parent.type === AST_NODE_TYPES.UnaryExpression && parent.operator === '-') {
53
+ return { node: parent, value: -value };
54
+ }
55
+ return { node, value };
56
+ }
57
+ /**
58
+ * Where a number is given its name: the initializer of a constant of the module, a `static
59
+ * readonly` field, a member of an enum, an index, a type. A function in between is a use, not a
60
+ * declaration.
61
+ */
62
+ function isNamed(node) {
63
+ if (isIndexOrType(node)) {
64
+ return true;
65
+ }
66
+ // The parent of the program is null at run time, whatever its type says.
67
+ for (let current = node.parent; isNode(current); current = current.parent) {
68
+ if (isFunctionNode(current)) {
69
+ return false;
70
+ }
71
+ if (isDeclaringPlace(current)) {
72
+ return true;
73
+ }
74
+ }
75
+ return false;
76
+ }
77
+ function isIndexOrType(node) {
78
+ const { parent } = node;
79
+ return ((parent?.type === AST_NODE_TYPES.MemberExpression && parent.computed && parent.property === node) ||
80
+ parent?.type === AST_NODE_TYPES.TSLiteralType ||
81
+ parent?.type === AST_NODE_TYPES.TSEnumMember);
82
+ }
83
+ function isFunctionNode(node) {
84
+ return (node.type === AST_NODE_TYPES.FunctionDeclaration ||
85
+ node.type === AST_NODE_TYPES.FunctionExpression ||
86
+ node.type === AST_NODE_TYPES.ArrowFunctionExpression);
87
+ }
88
+ function isDeclaringPlace(node) {
89
+ if (node.type === AST_NODE_TYPES.PropertyDefinition) {
90
+ return node.static && node.readonly;
91
+ }
92
+ return (node.type === AST_NODE_TYPES.VariableDeclaration &&
93
+ node.kind === 'const' &&
94
+ (node.parent.type === AST_NODE_TYPES.Program || node.parent.type === AST_NODE_TYPES.ExportNamedDeclaration));
95
+ }
96
+ function isNode(node) {
97
+ return node !== undefined && node !== null;
98
+ }
99
+ //# sourceMappingURL=clean-no-magic-number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-no-magic-number.js","sourceRoot":"","sources":["../../src/rules/clean-no-magic-number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAK5D,0EAA0E;AAC1E,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAqB;IAC/D,EAAE,EAAE,uBAAuB;IAC3B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,OAAO;IACpB,WAAW,EACT,8LAA8L;IAChM,QAAQ,EAAE;QACR,KAAK,EACH,kUAAkU;KACrU;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACnE,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE;QAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC;QAE5C,OAAO;YACL,OAAO,CAAC,IAAI;gBACV,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACrE,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBAEjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrE,MAAM,CAAC;wBACL,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,SAAS,EAAE,OAAO;wBAClB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACnE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,QAAQ,CAAC,IAAgB;IAChC,OAAO,CACL,CAAC,IAAI,CAAC,MAAM;QACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;QAChC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,aAAa,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,SAAS,WAAW,CAAC,IAAsB;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE/E,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;QAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,OAAO,CAAC,IAAmB;IAClC,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yEAAyE;IACzE,KAAK,IAAI,OAAO,GAAqC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5G,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB;IACxC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,OAAO,CACL,CAAC,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,gBAAgB,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;QACjG,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,aAAa;QAC7C,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,YAAY,CAC7C,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAmB;IACzC,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,mBAAmB;QAChD,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,kBAAkB;QAC/C,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,uBAAuB,CACrD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAmB;IAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,mBAAmB;QAChD,IAAI,CAAC,IAAI,KAAK,OAAO;QACrB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,sBAAsB,CAAC,CAC5G,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,IAAsC;IACpD,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC;AAC7C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"declarations-role-declared.d.ts","sourceRoot":"","sources":["../../src/rules/declarations-role-declared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AAsBxF,KAAK,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;AAGhF,eAAO,MAAM,wBAAwB,2FAgDnC,CAAC"}
1
+ {"version":3,"file":"declarations-role-declared.d.ts","sourceRoot":"","sources":["../../src/rules/declarations-role-declared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AAuBxF,KAAK,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;AAGhF,eAAO,MAAM,wBAAwB,2FAgDnC,CAAC"}
@@ -9,6 +9,7 @@ import { WRITTEN_NAMES } from '../support/declarations/written-names.js';
9
9
  import { declaredRoleOf } from '../support/declarations/declared-role-of.js';
10
10
  import { isDeclaredStyle } from '../support/declarations/is-declared-style.js';
11
11
  import { writtenName } from '../support/declarations/written-name.js';
12
+ import { propertyOf } from '../support/calls/property-of.js';
12
13
  import { defineRule } from '../support/rule/define-rule.js';
13
14
  import { inContext } from '../support/imports/in-context.js';
14
15
  import { staticString } from '../support/imports/static-string.js';
@@ -21,7 +22,7 @@ export const declarationsRoleDeclared = defineRule({
21
22
  messages: {
22
23
  undeclared: `This file is a role file of the declared style (\`*.{{suffix}}.ts\` under {{folder}}/) but exports no class carrying \`@{{expected}}\`. Put \`@{{expected}}(...)\` from "${DECLARATIONS_ENTRY}" on the exported class: a class that does not say what it is is in no assembly and is never registered.`,
23
24
  wrongRole: '{{className}} carries `@{{actual}}` in a `*.{{suffix}}.ts` file under {{folder}}/, where a class is declared with `@{{expected}}`. Move the class to the file of its role, or declare it with `@{{expected}}(...)`: the file name, the folder and the decorator say the same thing.',
24
- name: "`@{{decorator}}` of {{className}} has a `{{key}}` that is {{problem}}. Write `{ {{key}}: '{{context}}.<name>' }` as a string literal: the name is written once, never derived, and survives the renaming of the class.",
25
+ name: "`@{{decorator}}` of {{className}} has a `{{key}}` that is {{problem}}. Write `{ {{key}}: '{{context}}.<name>' }` as a string literal, or for a domain event handler the name its event class declares, `{ name: <Event>.eventName }`: the name is written once and survives the renaming of the class.",
25
26
  eventName: '`@DomainEventHandler` of {{className}} names "{{declared}}", but {{event}} is named "{{actual}}". Write `{ name: \'{{actual}}\' }`: a handler names the domain event it reacts to by the name the event carries.',
26
27
  inDomain: '{{className}} carries `@{{decorator}}` under domain/: the domain declares nothing. Aggregates, entities, value objects, events, services and repository ports carry no decorator and no dependency list. Remove the decorator and declare the class of application/ or infrastructure/ that plays the role.',
27
28
  },
@@ -94,7 +95,7 @@ function misdeclaredRole(program, role, declarationsOf) {
94
95
  function unwrittenName(node, declaration, context) {
95
96
  const key = WRITTEN_NAMES[declaration.name];
96
97
  const written = key === undefined ? undefined : writtenName(declaration.arguments[1], key);
97
- if (key === undefined || written === undefined || 'value' in written) {
98
+ if (key === undefined || written === undefined || 'value' in written || readsEventName(declaration)) {
98
99
  return undefined;
99
100
  }
100
101
  return {
@@ -121,16 +122,37 @@ function renamedEvent(node, declaration, findClass) {
121
122
  data: { className: className(node), declared: declared.value, event: event.name, actual },
122
123
  };
123
124
  }
124
- /** `readonly name = 'billing.invoice.issued';`, with or without `as const`. */
125
+ /** `@DomainEventHandler(InvoiceIssued, { name: InvoiceIssued.eventName })`: the name the event class declares, read where it is written. */
126
+ function readsEventName(declaration) {
127
+ const [event, options] = declaration.arguments;
128
+ const property = options?.type === AST_NODE_TYPES.ObjectExpression ? propertyOf(options, 'name') : undefined;
129
+ return (declaration.name === 'DomainEventHandler' &&
130
+ event?.type === AST_NODE_TYPES.Identifier &&
131
+ property !== undefined &&
132
+ memberName(property.value) === `${event.name}.eventName`);
133
+ }
134
+ /** `InvoiceIssued.eventName` for a member read on a name; undefined for anything else. */
135
+ function memberName(node) {
136
+ if (node.type !== AST_NODE_TYPES.MemberExpression || node.computed) {
137
+ return undefined;
138
+ }
139
+ const { object, property } = node;
140
+ return object.type === AST_NODE_TYPES.Identifier && property.type === AST_NODE_TYPES.Identifier
141
+ ? `${object.name}.${property.name}`
142
+ : undefined;
143
+ }
144
+ /** `static readonly eventName = 'billing.invoice.issued';`, or `readonly name = '..'` as 0.5 wrote it, with or without `as const`. */
125
145
  function eventName(event) {
126
146
  for (const member of event.body.body) {
127
- if (member.type !== AST_NODE_TYPES.PropertyDefinition ||
128
- member.computed ||
129
- keyName(member.key) !== 'name' ||
130
- member.value === null) {
131
- continue;
147
+ const written = member.type === AST_NODE_TYPES.PropertyDefinition &&
148
+ !member.computed &&
149
+ ['name', 'eventName'].includes(keyName(member.key) ?? '')
150
+ ? member.value
151
+ : null;
152
+ const value = written === null ? undefined : staticString(unwrapped(written));
153
+ if (value !== undefined) {
154
+ return value;
132
155
  }
133
- return staticString(unwrapped(member.value));
134
156
  }
135
157
  return undefined;
136
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"declarations-role-declared.js","sourceRoot":"","sources":["../../src/rules/declarations-role-declared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"declarations-role-declared.js","sourceRoot":"","sources":["../../src/rules/declarations-role-declared.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"events-name-format.d.ts","sourceRoot":"","sources":["../../src/rules/events-name-format.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,gBAAgB,kKAmC3B,CAAC"}
1
+ {"version":3,"file":"events-name-format.d.ts","sourceRoot":"","sources":["../../src/rules/events-name-format.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,gBAAgB,kKAqC3B,CAAC"}
@@ -19,7 +19,9 @@ export const eventsNameFormat = defineRule({
19
19
  return {};
20
20
  }
21
21
  const judge = (node) => {
22
- const value = node.value === null || node.computed || keyName(node.key) !== key ? undefined : staticString(node.value);
22
+ const value = node.value === null || node.computed || !isJudgedKey(keyName(node.key), key)
23
+ ? undefined
24
+ : staticString(node.value);
23
25
  if (value === undefined || isEventName(value, here.context)) {
24
26
  return;
25
27
  }
@@ -32,6 +34,10 @@ export const eventsNameFormat = defineRule({
32
34
  return { Property: judge, PropertyDefinition: judge };
33
35
  },
34
36
  });
37
+ /** A domain event declares its name once in the static `eventName`, or in `name` as 0.5 wrote it. */
38
+ function isJudgedKey(written, key) {
39
+ return written === key || (key === 'name' && written === 'eventName');
40
+ }
35
41
  /** A domain event carries its name in `name`, an integration event in the `type` of its declaration. */
36
42
  function judgedKey(here) {
37
43
  if (here.layer === 'domain' && here.inside[0] === 'events') {
@@ -1 +1 @@
1
- {"version":3,"file":"events-name-format.js","sourceRoot":"","sources":["../../src/rules/events-name-format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events-name-format.js","sourceRoot":"","sources":["../../src/rules/events-name-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const languageDeclaredVocabulary: import("@typescript-eslint/utils/ts-eslint").RuleModule<"raw", [], import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
+ //# sourceMappingURL=language-declared-vocabulary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-declared-vocabulary.d.ts","sourceRoot":"","sources":["../../src/rules/language-declared-vocabulary.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,0BAA0B,+JA6CrC,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { defineRule } from '../support/rule/define-rule.js';
3
+ import { projectVocabularies } from '../support/vocabularies/project-vocabularies.js';
4
+ /** The relationship schema of the access model declares its relations: like a published language, it names its values itself. */
5
+ const RELATIONSHIP_SCHEMA = /(?<![\w$.])defineSchema\s*\(/;
6
+ export const languageDeclaredVocabulary = defineRule({
7
+ id: 'language/declared-vocabulary',
8
+ type: 'suggestion',
9
+ recommended: 'error',
10
+ description: 'Under "stack.literals": "named", a value of a closed vocabulary the project declares is read through it, never written again as a string literal: in its context, in the platform and the route groups for the platform, everywhere for a permission id.',
11
+ messages: {
12
+ raw: '"{{value}}" is a value of {{vocabularies}}. Write {{written}}, as a computed key `[..]:` for a key: the value is declared once, the editor completes it and a typo stops the build.',
13
+ },
14
+ create({ context, file, sourceCode, report }) {
15
+ if (file.config.stack.literals !== 'named' || !isJudged(file) || RELATIONSHIP_SCHEMA.test(sourceCode.text)) {
16
+ return {};
17
+ }
18
+ const declared = projectVocabularies(file, context.languageOptions.parser);
19
+ const judge = (node, value) => {
20
+ const known = (declared.get(value) ?? []).filter((candidate) => isReadBy(file, candidate));
21
+ if (known.length > 0 && !known.some((at) => at.file === file.path) && !isSpecifier(node)) {
22
+ const vocabularies = known.map(({ vocabulary, file: at }) => `${vocabulary} (${at})`).join(' and of ');
23
+ report({
24
+ node,
25
+ messageId: 'raw',
26
+ data: { value, vocabularies, written: known.map(({ written }) => written).join(' or ') },
27
+ });
28
+ }
29
+ };
30
+ return {
31
+ Literal(node) {
32
+ if (typeof node.value === 'string') {
33
+ judge(node, node.value);
34
+ }
35
+ },
36
+ TemplateLiteral(node) {
37
+ const [only] = node.quasis;
38
+ if (node.expressions.length === 0 && only !== undefined) {
39
+ judge(node, only.value.cooked ?? only.value.raw);
40
+ }
41
+ },
42
+ };
43
+ },
44
+ });
45
+ /** Sources only: a test sends the values a client sends; a published language names the values of its contract itself. */
46
+ function isJudged(file) {
47
+ const published = file.location.area === 'context' && file.location.layer === 'published-language';
48
+ return !file.isTest && !published && file.path.startsWith(`${file.config.sourceRoot}/`);
49
+ }
50
+ /** A vocabulary of a context is the language of that context alone; the one of the platform is read there and by the route groups, where a guard names a role. */
51
+ function isReadBy(file, { readBy }) {
52
+ const { location } = file;
53
+ if (readBy === 'everywhere') {
54
+ return true;
55
+ }
56
+ if (readBy === 'platform') {
57
+ return location.area !== 'context' || file.path.endsWith('.routes.ts');
58
+ }
59
+ return location.area === 'context' && location.context === readBy.context;
60
+ }
61
+ /** The specifier of an import or an export names a module, not a value. */
62
+ function isSpecifier(node) {
63
+ const { parent } = node;
64
+ return (parent?.type === AST_NODE_TYPES.ImportDeclaration ||
65
+ parent?.type === AST_NODE_TYPES.ExportNamedDeclaration ||
66
+ parent?.type === AST_NODE_TYPES.ExportAllDeclaration ||
67
+ parent?.type === AST_NODE_TYPES.ImportExpression ||
68
+ parent?.type === AST_NODE_TYPES.TSExternalModuleReference);
69
+ }
70
+ //# sourceMappingURL=language-declared-vocabulary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-declared-vocabulary.js","sourceRoot":"","sources":["../../src/rules/language-declared-vocabulary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAItF,iIAAiI;AACjI,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;AAE3D,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAY;IAC9D,EAAE,EAAE,8BAA8B;IAClC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,OAAO;IACpB,WAAW,EACT,0PAA0P;IAC5P,QAAQ,EAAE;QACR,GAAG,EAAE,qLAAqL;KAC3L;IACD,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;QAC1C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3G,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAE3E,MAAM,KAAK,GAAG,CAAC,IAAmB,EAAE,KAAa,EAAQ,EAAE;YACzD,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;YAE3F,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzF,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAEvG,MAAM,CAAC;oBACL,IAAI;oBACJ,SAAS,EAAE,KAAK;oBAChB,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;iBACzF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,OAAO;YACL,OAAO,CAAC,IAAI;gBACV,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACnC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,eAAe,CAAC,IAAI;gBAClB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBAE3B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACxD,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,0HAA0H;AAC1H,SAAS,QAAQ,CAAC,IAAgB;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,oBAAoB,CAAC;IAEnG,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;AAC1F,CAAC;AAED,kKAAkK;AAClK,SAAS,QAAQ,CAAC,IAAgB,EAAE,EAAE,MAAM,EAAiB;IAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAE1B,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC;AAC5E,CAAC;AAED,2EAA2E;AAC3E,SAAS,WAAW,CAAC,IAAmB;IACtC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,OAAO,CACL,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,iBAAiB;QACjD,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,sBAAsB;QACtD,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,oBAAoB;QACpD,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,gBAAgB;QAChD,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,yBAAyB,CAC1D,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/rules/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAoHlE,+HAA+H;AAC/H,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEnD,CAAC"}
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/rules/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAwHlE,+HAA+H;AAC/H,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEnD,CAAC"}
@@ -49,6 +49,8 @@ import { schedulingJobName } from './scheduling-job-name.js';
49
49
  import { schedulingJobTriggersUseCase } from './scheduling-job-triggers-use-case.js';
50
50
  import { standardNoParallelInterface } from './standard-no-parallel-interface.js';
51
51
  import { testNoMocks } from './test-no-mocks.js';
52
+ import { cleanNoMagicNumber } from './clean-no-magic-number.js';
53
+ import { languageDeclaredVocabulary } from './language-declared-vocabulary.js';
52
54
  import { tracingPlatformOnly } from './tracing-platform-only.js';
53
55
  const ALL = [
54
56
  layerDomainPurity,
@@ -58,6 +60,7 @@ const ALL = [
58
60
  contextPublishedLanguageOnly,
59
61
  contextDeclaredRelationship,
60
62
  contextPublishedLanguageIsAContract,
63
+ languageDeclaredVocabulary,
61
64
  purityNoSystemClock,
62
65
  purityNoAmbientRandomness,
63
66
  purityNoEnvironment,
@@ -71,6 +74,7 @@ const ALL = [
71
74
  cleanNoHashPrivate,
72
75
  cleanOneExportPerFile,
73
76
  cleanFileSize,
77
+ cleanNoMagicNumber,
74
78
  domainAggregateEncapsulation,
75
79
  domainValueObjectImmutability,
76
80
  domainNoGenericError,
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/rules/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,MAAM,2CAA2C,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,2BAA2B,EAC3B,mCAAmC,EACnC,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gCAAgC,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iCAAiC,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,GAAG,GAAG;IACV,iBAAiB;IACjB,sBAAsB;IACtB,iCAAiC;IACjC,iCAAiC;IACjC,4BAA4B;IAC5B,2BAA2B;IAC3B,mCAAmC;IACnC,mBAAmB;IACnB,yBAAyB;IACzB,mBAAmB;IACnB,aAAa;IACb,iBAAiB;IACjB,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,qBAAqB;IACrB,aAAa;IACb,4BAA4B;IAC5B,6BAA6B;IAC7B,oBAAoB;IACpB,oBAAoB;IACpB,0BAA0B;IAC1B,iBAAiB;IACjB,uBAAuB;IACvB,iCAAiC;IACjC,4BAA4B;IAC5B,qCAAqC;IACrC,WAAW;IACX,gBAAgB;IAChB,oBAAoB;IACpB,wBAAwB;IACxB,kBAAkB;IAClB,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,2BAA2B;IAC3B,2BAA2B;IAC3B,wBAAwB;IACxB,gCAAgC;IAChC,kBAAkB;IAClB,2BAA2B;IAC3B,oBAAoB;IACpB,yBAAyB;IACzB,gBAAgB;IAChB,4BAA4B;IAC5B,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,2BAA2B;IAC3B,+BAA+B;IAC/B,0BAA0B;CAC3B,CAAC;AAEF,+HAA+H;AAC/H,MAAM,CAAC,MAAM,KAAK,GAAsC,MAAM,CAAC,WAAW,CACxE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAC7C,CAAC"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/rules/rules.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"class-finder.d.ts","sourceRoot":"","sources":["../../../src/support/classes/class-finder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG/D,KAAK,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;AAEzC,kGAAkG;AAClG,UAAU,SAAS;IACjB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC;CAC1C;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;AAgBlE;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAoBhH"}
1
+ {"version":3,"file":"class-finder.d.ts","sourceRoot":"","sources":["../../../src/support/classes/class-finder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI/D,KAAK,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;AAEzC,kGAAkG;AAClG,UAAU,SAAS;IACjB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC;CAC1C;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;AAclE;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAoBhH"}
@@ -2,9 +2,8 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { AST_NODE_TYPES } from '@typescript-eslint/utils';
4
4
  import { resolveImport } from '../../project/resolve-import.js';
5
- import { isRecord } from '../../project/is-record.js';
5
+ import { parseSource } from '../parse/parse-source.js';
6
6
  import { topLevelClasses } from './top-level-classes.js';
7
- const PARSER_OPTIONS = { sourceType: 'module', ecmaVersion: 'latest', range: true, loc: true };
8
7
  const sources = new Map();
9
8
  /**
10
9
  * Finds the class behind a name of the linted file: declared at its top, or imported by name
@@ -61,16 +60,10 @@ function readProgram(absolute, parser) {
61
60
  }
62
61
  function parseFile(absolute, parser) {
63
62
  try {
64
- const text = fs.readFileSync(absolute, 'utf8');
65
- const options = { ...PARSER_OPTIONS, filePath: absolute };
66
- const parsed = 'parseForESLint' in parser ? parser.parseForESLint(text, options).ast : parser.parse(text, options);
67
- return isProgram(parsed) ? parsed : undefined;
63
+ return parseSource(fs.readFileSync(absolute, 'utf8'), absolute, parser);
68
64
  }
69
65
  catch {
70
66
  return undefined;
71
67
  }
72
68
  }
73
- function isProgram(value) {
74
- return isRecord(value) && value['type'] === AST_NODE_TYPES.Program && Array.isArray(value['body']);
75
- }
76
69
  //# sourceMappingURL=class-finder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"class-finder.js","sourceRoot":"","sources":["../../../src/support/classes/class-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAgC,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAsBzD,MAAM,cAAc,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAE/F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,OAAyB,EAAE,MAA0B;IACjG,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAE1G,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5E,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtF,OAAO,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9F,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,OAAyB,EAAE,IAAY;IACzD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,YAAY,CAAC,OAAyB,EAAE,KAAa;IAC5D,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,iBAAiB,EAAE,CAAC;YACxD,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CACzC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,eAAe,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CACnG,CAAC;QAEF,IAAI,SAAS,EAAE,IAAI,KAAK,cAAc,CAAC,eAAe,EAAE,CAAC;YACvD,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GACZ,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QAE7G,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IACzD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,4GAA4G;AAC5G,SAAS,WAAW,CAAC,QAAgB,EAAE,MAAc;IACnD,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC;IAE7E,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,KAAK,EAAE,UAAU,KAAK,UAAU,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAE/C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,MAAc;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAE1D,MAAM,MAAM,GACV,gBAAgB,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEtG,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACrG,CAAC"}
1
+ {"version":3,"file":"class-finder.js","sourceRoot":"","sources":["../../../src/support/classes/class-finder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type TSESLint, type TSESTree } from '@typescript-eslint/utils';
2
+ type Parser = TSESLint.FlatConfig.Parser;
3
+ /**
4
+ * A source of the project other than the linted file, parsed with the parser of the run and
5
+ * nothing else (no types, no scope); undefined when the parser refuses it.
6
+ */
7
+ export declare function parseSource(text: string, filePath: string, parser: Parser): TSESTree.Program | undefined;
8
+ export {};
9
+ //# sourceMappingURL=parse-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-source.d.ts","sourceRoot":"","sources":["../../../src/support/parse/parse-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGxF,KAAK,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;AAIzC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,GAAG,SAAS,CAWxG"}
@@ -0,0 +1,21 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { isRecord } from '../../project/is-record.js';
3
+ const PARSER_OPTIONS = { sourceType: 'module', ecmaVersion: 'latest', range: true, loc: true };
4
+ /**
5
+ * A source of the project other than the linted file, parsed with the parser of the run and
6
+ * nothing else (no types, no scope); undefined when the parser refuses it.
7
+ */
8
+ export function parseSource(text, filePath, parser) {
9
+ try {
10
+ const options = { ...PARSER_OPTIONS, filePath };
11
+ const parsed = 'parseForESLint' in parser ? parser.parseForESLint(text, options).ast : parser.parse(text, options);
12
+ return isProgram(parsed) ? parsed : undefined;
13
+ }
14
+ catch {
15
+ return undefined;
16
+ }
17
+ }
18
+ function isProgram(value) {
19
+ return isRecord(value) && value['type'] === AST_NODE_TYPES.Program && Array.isArray(value['body']);
20
+ }
21
+ //# sourceMappingURL=parse-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-source.js","sourceRoot":"","sources":["../../../src/support/parse/parse-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgC,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAItD,MAAM,cAAc,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAE/F;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAc;IACxE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,QAAQ,EAAE,CAAC;QAEhD,MAAM,MAAM,GACV,gBAAgB,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEtG,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACrG,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** A value of a closed vocabulary of the project, and how code reads it instead of the string. */
2
+ export interface DeclaredValue {
3
+ /** `AppointmentStatus.NoShow`, `billingPermissions['invoice.issue']`. */
4
+ readonly written: string;
5
+ /** The name of the vocabulary or of the permission set. */
6
+ readonly vocabulary: string;
7
+ /** The declaring file, relative to the project root. */
8
+ readonly file: string;
9
+ /** Who reads it: `everywhere` for a permission id; the context that declares it; or the platform, read by the platform and by the presentation of the contexts. */
10
+ readonly readBy: {
11
+ readonly context: string;
12
+ } | 'everywhere' | 'platform';
13
+ }
14
+ //# sourceMappingURL=declared-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declared-value.d.ts","sourceRoot":"","sources":["../../../src/support/vocabularies/declared-value.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mKAAmK;IACnK,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY,GAAG,UAAU,CAAC;CAC3E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=declared-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declared-value.js","sourceRoot":"","sources":["../../../src/support/vocabularies/declared-value.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import type { TSESLint } from '@typescript-eslint/utils';
2
+ import type { Project } from '../../project/linted-file.js';
3
+ import type { DeclaredValue } from './declared-value.js';
4
+ type Parser = TSESLint.FlatConfig.Parser;
5
+ /**
6
+ * The closed vocabularies the sources of the project declare, by value: the source root read on
7
+ * disk and parsed with the parser of the run, tests left out; a value two vocabularies share is
8
+ * listed under both. Without a parser, or for a file it cannot parse, nothing is declared.
9
+ */
10
+ export declare function projectVocabularies(project: Project, parser: Parser | undefined, now?: number): ReadonlyMap<string, readonly DeclaredValue[]>;
11
+ export {};
12
+ //# sourceMappingURL=project-vocabularies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-vocabularies.d.ts","sourceRoot":"","sources":["../../../src/support/vocabularies/project-vocabularies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQzD,KAAK,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;AASzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAa,GACf,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC,CAiB/C"}
@@ -0,0 +1,47 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { locate } from '../../project/locate.js';
4
+ import { parseSource } from '../parse/parse-source.js';
5
+ import { valuesDeclaredIn } from './values-declared-in.js';
6
+ /** How long a reading of the project is reused: a lint run reads it once, an editor sees a new value within seconds. */
7
+ const FRESH_FOR_MS = 5000;
8
+ const SKIPPED = new Set(['node_modules', 'dist', 'generated', 'test']);
9
+ const DECLARING = /as\s+const|definePermissions\(/;
10
+ const readings = new Map();
11
+ /**
12
+ * The closed vocabularies the sources of the project declare, by value: the source root read on
13
+ * disk and parsed with the parser of the run, tests left out; a value two vocabularies share is
14
+ * listed under both. Without a parser, or for a file it cannot parse, nothing is declared.
15
+ */
16
+ export function projectVocabularies(project, parser, now = Date.now()) {
17
+ const key = path.join(project.root, project.config.sourceRoot);
18
+ const known = readings.get(key);
19
+ if (known !== undefined && now >= known.at && now - known.at < FRESH_FOR_MS) {
20
+ return known.values;
21
+ }
22
+ const values = new Map();
23
+ for (const [value, declared] of sourcesUnder(key).flatMap((file) => declaredIn(project, file, parser))) {
24
+ values.set(value, [...(values.get(value) ?? []), declared]);
25
+ }
26
+ readings.set(key, { at: now, values });
27
+ return values;
28
+ }
29
+ function declaredIn(project, file, parser) {
30
+ const text = fs.readFileSync(file, 'utf8');
31
+ const program = DECLARING.test(text) && parser !== undefined ? parseSource(text, file, parser) : undefined;
32
+ const relative = path.relative(project.root, file).split(path.sep).join('/');
33
+ return program === undefined
34
+ ? []
35
+ : valuesDeclaredIn({ path: relative, location: locate(project.config, relative) }, program);
36
+ }
37
+ function sourcesUnder(directory) {
38
+ const entries = fs.existsSync(directory) ? fs.readdirSync(directory, { withFileTypes: true }) : [];
39
+ return entries.flatMap((entry) => {
40
+ const full = path.join(directory, entry.name);
41
+ if (entry.isDirectory()) {
42
+ return SKIPPED.has(entry.name) ? [] : sourcesUnder(full);
43
+ }
44
+ return /\.ts$/.test(entry.name) && !/\.(?:spec|test|d)\.ts$/.test(entry.name) ? [full] : [];
45
+ });
46
+ }
47
+ //# sourceMappingURL=project-vocabularies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-vocabularies.js","sourceRoot":"","sources":["../../../src/support/vocabularies/project-vocabularies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type TSESTree } from '@typescript-eslint/utils';
2
+ import type { Location } from '../../project/location.js';
3
+ import type { DeclaredValue } from './declared-value.js';
4
+ /** A source of the project: its path from the root, and where it stands. */
5
+ export interface Declaring {
6
+ readonly path: string;
7
+ readonly location: Location;
8
+ }
9
+ /**
10
+ * The values one parsed source declares: the entries of an exported object `as const` of string
11
+ * values next to the union type of the same name, `export type X = (typeof X)[keyof typeof X]`,
12
+ * comments, either quote and `satisfies` allowed; and the ids of a permission set
13
+ * (`definePermissions('billing', { 'invoice.issue': .. })` declares `billing:invoice.issue`).
14
+ */
15
+ export declare function valuesDeclaredIn(file: Declaring, program: TSESTree.Program): [string, DeclaredValue][];
16
+ //# sourceMappingURL=values-declared-in.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values-declared-in.d.ts","sourceRoot":"","sources":["../../../src/support/vocabularies/values-declared-in.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAkBtG"}
@@ -0,0 +1,108 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ const IDENTIFIER = /^[A-Za-z_$][\w$]*$/;
3
+ /**
4
+ * The values one parsed source declares: the entries of an exported object `as const` of string
5
+ * values next to the union type of the same name, `export type X = (typeof X)[keyof typeof X]`,
6
+ * comments, either quote and `satisfies` allowed; and the ids of a permission set
7
+ * (`definePermissions('billing', { 'invoice.issue': .. })` declares `billing:invoice.issue`).
8
+ */
9
+ export function valuesDeclaredIn(file, program) {
10
+ const unions = new Set(program.body.flatMap(unionTypeName));
11
+ return program.body.flatMap(exportedConstant).flatMap(({ name, init }) => {
12
+ if (unions.has(name)) {
13
+ const readBy = readerOf(file.location);
14
+ return objectEntries(asConstObject(init)).map(({ key, value }) => [
15
+ value,
16
+ { written: writtenAs(name, key), vocabulary: name, file: file.path, readBy },
17
+ ]);
18
+ }
19
+ return permissionIds(init).map(({ key, value }) => [
20
+ value,
21
+ { written: `${name}['${key}'].id`, vocabulary: name, file: file.path, readBy: 'everywhere' },
22
+ ]);
23
+ });
24
+ }
25
+ function exportedConstant(statement) {
26
+ const declaration = statement.type === AST_NODE_TYPES.ExportNamedDeclaration ? statement.declaration : null;
27
+ if (declaration?.type !== AST_NODE_TYPES.VariableDeclaration || declaration.kind !== 'const') {
28
+ return [];
29
+ }
30
+ return declaration.declarations.flatMap(({ id, init }) => id.type === AST_NODE_TYPES.Identifier && init !== null ? [{ name: id.name, init }] : []);
31
+ }
32
+ /** `export type X = (typeof X)[keyof typeof X]`: the name of the vocabulary it closes. */
33
+ function unionTypeName(statement) {
34
+ const alias = statement.type === AST_NODE_TYPES.ExportNamedDeclaration ? statement.declaration : null;
35
+ if (alias?.type !== AST_NODE_TYPES.TSTypeAliasDeclaration) {
36
+ return [];
37
+ }
38
+ const { typeAnnotation: type } = alias;
39
+ const name = alias.id.name;
40
+ const closes = type.type === AST_NODE_TYPES.TSIndexedAccessType &&
41
+ queries(type.objectType, name) &&
42
+ type.indexType.type === AST_NODE_TYPES.TSTypeOperator &&
43
+ type.indexType.operator === 'keyof' &&
44
+ type.indexType.typeAnnotation !== undefined &&
45
+ queries(type.indexType.typeAnnotation, name);
46
+ return closes ? [name] : [];
47
+ }
48
+ function queries(type, name) {
49
+ return (type.type === AST_NODE_TYPES.TSTypeQuery &&
50
+ type.exprName.type === AST_NODE_TYPES.Identifier &&
51
+ type.exprName.name === name);
52
+ }
53
+ /** `{ .. } as const`, or `{ .. } as const satisfies ..`. */
54
+ function asConstObject(init) {
55
+ const asserted = init.type === AST_NODE_TYPES.TSSatisfiesExpression ? init.expression : init;
56
+ const isConst = asserted.type === AST_NODE_TYPES.TSAsExpression &&
57
+ asserted.typeAnnotation.type === AST_NODE_TYPES.TSTypeReference &&
58
+ asserted.typeAnnotation.typeName.type === AST_NODE_TYPES.Identifier &&
59
+ asserted.typeAnnotation.typeName.name === 'const';
60
+ return isConst && asserted.expression.type === AST_NODE_TYPES.ObjectExpression ? asserted.expression : undefined;
61
+ }
62
+ /** Every entry, or none when one of them is not a key with a string value: the object is then not a vocabulary. */
63
+ function objectEntries(object) {
64
+ const entries = (object?.properties ?? []).map(entryOf);
65
+ return entries.every((entry) => entry !== undefined) ? entries : [];
66
+ }
67
+ function entryOf(property) {
68
+ const key = property.type === AST_NODE_TYPES.Property && !property.computed ? keyOf(property.key) : undefined;
69
+ const value = property.type === AST_NODE_TYPES.Property ? stringOf(property.value) : undefined;
70
+ return key === undefined || value === undefined ? undefined : { key, value };
71
+ }
72
+ function permissionIds(init) {
73
+ const [context, permissions] = definesPermissions(init) ? init.arguments : [];
74
+ const prefix = context === undefined ? undefined : stringOf(context);
75
+ if (prefix === undefined || permissions?.type !== AST_NODE_TYPES.ObjectExpression) {
76
+ return [];
77
+ }
78
+ return permissions.properties.flatMap((property) => {
79
+ const key = property.type === AST_NODE_TYPES.Property ? keyOf(property.key) : undefined;
80
+ return key === undefined ? [] : [{ key, value: `${prefix}:${key}` }];
81
+ });
82
+ }
83
+ function definesPermissions(init) {
84
+ return (init.type === AST_NODE_TYPES.CallExpression &&
85
+ init.callee.type === AST_NODE_TYPES.Identifier &&
86
+ init.callee.name === 'definePermissions');
87
+ }
88
+ function keyOf(key) {
89
+ return key.type === AST_NODE_TYPES.Identifier ? key.name : stringOf(key);
90
+ }
91
+ function stringOf(node) {
92
+ if (node.type === AST_NODE_TYPES.Literal) {
93
+ return typeof node.value === 'string' ? node.value : undefined;
94
+ }
95
+ const [only] = node.type === AST_NODE_TYPES.TemplateLiteral && node.expressions.length === 0 ? node.quasis : [];
96
+ return only?.value.cooked ?? undefined;
97
+ }
98
+ function writtenAs(name, key) {
99
+ return IDENTIFIER.test(key) ? `${name}.${key}` : `${name}['${key}']`;
100
+ }
101
+ /** A context speaks its own language; the shared kernel is read by every layer; the platform by itself and by the edges of the contexts. */
102
+ function readerOf(location) {
103
+ if (location.area === 'context') {
104
+ return { context: location.context };
105
+ }
106
+ return location.area === 'shared-kernel' ? 'everywhere' : 'platform';
107
+ }
108
+ //# sourceMappingURL=values-declared-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values-declared-in.js","sourceRoot":"","sources":["../../../src/support/vocabularies/values-declared-in.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.6.0";
1
+ export declare const VERSION = "0.8.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '0.6.0';
1
+ export const VERSION = '0.8.0';
2
2
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,59 @@
1
+ # ddd-ts-kit/clean-no-magic-number
2
+
3
+ Architecture id: `clean/no-magic-number`. Default severity: `error`.
4
+
5
+ Applies to: `domain/` and `application/` of every context of a project whose config says `"stack.literals": "named"`, which `init` writes (a config that does not say, as before 0.6, keeps the rule silent); tests excluded.
6
+
7
+ ## Why
8
+
9
+ `hours * 60`, `limit = 100`, `padStart(2, '0')`: a number in the middle of the model says neither what it is nor who decided it. The second copy of it drifts from the first, and a rule of the business (a booking window, a reminder delay, a page limit) hides in an expression. Named once, it reads as the language: `MINUTES_PER_HOUR`, `LONGEST_ADDRESS`, `BookingWindow.standard()`.
10
+
11
+ ## Reported
12
+
13
+ A number or bigint literal, the minus included, that is not:
14
+
15
+ - 0, 1 or -1 (configurable);
16
+ - an index, `items[2]`;
17
+ - a type, `type Hour = 7 | 8`, or the value of an enum member;
18
+ - in the initializer of a constant of the module (`const MINUTES_PER_HOUR = 60;`, an object or an array `as const` included) or of a `static readonly` field, with no function in between.
19
+
20
+ Incorrect:
21
+
22
+ ```ts
23
+ function minuteOf(hours: number, minutes: number): number {
24
+ return hours * 60 + minutes;
25
+ }
26
+ ```
27
+
28
+ Correct:
29
+
30
+ ```ts
31
+ const MINUTES_PER_HOUR = 60;
32
+
33
+ function minuteOf(hours: number, minutes: number): number {
34
+ return hours * MINUTES_PER_HOUR + minutes;
35
+ }
36
+ ```
37
+
38
+ ## Details
39
+
40
+ A duration, an amount, a limit or a rate of the business is better a value object than a constant (`BookingWindow`, `Money`): the constant names the number, the value object also carries its rules.
41
+
42
+ ## Options
43
+
44
+ `allow`: the numbers allowed anywhere, `[0, 1, -1]` by default.
45
+
46
+ ```js
47
+ 'ddd-ts-kit/clean-no-magic-number': ['error', { allow: [0, 1, -1, 2] }]
48
+ ```
49
+
50
+ `rules."clean/no-magic-number"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line clean/no-magic-number -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
51
+
52
+ ## Limits
53
+
54
+ - A constant of a function body, `const limit = 100` inside `execute`, is reported: it is named, but decided where it is used.
55
+ - Infrastructure, presentation and the platform are not judged: a port number or a page size of a route are configuration.
56
+
57
+ ## With the CLI checker
58
+
59
+ None: the rule needs a syntax tree. `ddd-ts-kit check` knows its id so that the config can set its severity.
@@ -17,8 +17,8 @@ In a role file (the table below), other than `*.command.ts` and `*.query.ts`, wh
17
17
 
18
18
  On any class of `application/`, `infrastructure/`, `presentation/` or the context root:
19
19
 
20
- - `@IntegrationEventHandler(definition, { consumer })`, `@Policy(permission, { name })` or `@DomainEventHandler(Event, { name })` whose name is not a non-empty string literal: missing, empty, a variable, a template with a substitution, options held in a variable or only spread
21
- - `@DomainEventHandler(Event, { name })` whose `name` differs from the `name` literal of the event class, when that class is in view
20
+ - `@IntegrationEventHandler(definition, { consumer })`, `@Policy(permission, { name })` or `@DomainEventHandler(Event, { name })` whose name is not a non-empty string literal: missing, empty, a variable, a template with a substitution, options held in a variable or only spread. A domain event handler may instead read the name its event class declares, `@DomainEventHandler(InvoiceIssued, { name: InvoiceIssued.eventName })`, the class being the one it is given
21
+ - `@DomainEventHandler(Event, { name })` whose `name`, written out, differs from the name the event class declares, when that class is in view
22
22
 
23
23
  Under `domain/`:
24
24
 
@@ -92,7 +92,7 @@ A decorator counts when its name is one of the twelve declaration decorators and
92
92
 
93
93
  The role of a file is read from its suffix and its folder, as the generator writes them. A class is exported inline, by `export { A }` or by `export default A`. When a class carries another declaration decorator, only that is reported: fixing it also answers the missing one.
94
94
 
95
- The event class of `@DomainEventHandler` is in view when it is declared in the same file, or imported by name from a source of the project that exists on disk; that file is then parsed, syntax only, and its `readonly name = '...'` property is read (`as const` and `satisfies` are looked through). When the class cannot be found, or its name is not a literal, nothing is compared.
95
+ The event class of `@DomainEventHandler` is in view when it is declared in the same file, or imported by name from a source of the project that exists on disk; that file is then parsed, syntax only, and its `static readonly eventName = '...'` (or, as 0.5 wrote it, its `readonly name = '...'`) is read (`as const` and `satisfies` are looked through). When the class cannot be found, or its name is not a literal, nothing is compared.
96
96
 
97
97
  ## Options
98
98
 
@@ -10,14 +10,16 @@ An event name is a public address: consumers subscribe to it, the catalog lists
10
10
 
11
11
  ## Reported
12
12
 
13
- - in `domain/events/`: a `name` property or object key whose string is not `<this context>.<aggregate>.<fact>` in kebab-case
13
+ - in `domain/events/`: an `eventName` or `name` property or object key whose string is not `<this context>.<aggregate>.<fact>` in kebab-case
14
14
  - in `published-language/`: the `type` given to `defineIntegrationEvent`, and any other `type` holding a dotted string
15
15
 
16
16
  Incorrect:
17
17
 
18
18
  ```ts
19
19
  export class InvoiceIssued implements DomainEvent {
20
- readonly name = 'InvoiceIssued';
20
+ static readonly eventName = 'InvoiceIssued';
21
+
22
+ readonly name = InvoiceIssued.eventName;
21
23
  }
22
24
  ```
23
25
 
@@ -25,13 +27,15 @@ Correct:
25
27
 
26
28
  ```ts
27
29
  export class InvoiceIssued implements DomainEvent {
28
- readonly name = 'billing.invoice.issued';
30
+ static readonly eventName = 'billing.invoice.issued';
31
+
32
+ readonly name = InvoiceIssued.eventName;
29
33
  }
30
34
  ```
31
35
 
32
36
  ## Details
33
37
 
34
- Template literals without interpolation are read like strings.
38
+ Template literals without interpolation are read like strings. The name is declared once, in `eventName`, which the event carries in `name` and its reactions read (`{ name: InvoiceIssued.eventName }`); a `readonly name = '..'` written out, as before 0.6, is judged the same way.
35
39
 
36
40
  ## Options
37
41
 
@@ -0,0 +1,64 @@
1
+ # ddd-ts-kit/language-declared-vocabulary
2
+
3
+ Architecture id: `language/declared-vocabulary`. Default severity: `error`.
4
+
5
+ Applies to: every source under the source root of a project whose config says `"stack.literals": "named"`, which `init` writes (a config that does not say, as before 0.6, keeps the rule silent); tests, published languages, the relationship schema of the access model and the file that declares a value excluded.
6
+
7
+ ## Why
8
+
9
+ A status, a kind, a role or a permission is a word of the language whose values are a closed list. Spelled again as a string wherever it is compared, granted or stored, each copy can drift: a typo compiles, a renamed value leaves its old spelling behind, and nothing completes it in the editor. Declared once, it is read by its key, completed by the editor, and a parameter typed with it accepts nothing else. The value stays the same string on the wire and in the database.
10
+
11
+ ## Reported
12
+
13
+ A string literal, or a template literal without substitution, whose value is a value of a closed vocabulary the project declares:
14
+
15
+ - an object `as const` of string values exported next to the union type of the same name, `export type AppointmentStatus = (typeof AppointmentStatus)[keyof typeof AppointmentStatus]` (what `ddd-ts-kit generate vocabulary` writes, and the `Role` of the platform);
16
+ - a permission set, `export const billingPermissions = definePermissions('billing', { 'invoice.issue': .. })`, which declares the id `billing:invoice.issue`.
17
+
18
+ Incorrect:
19
+
20
+ ```ts
21
+ if (appointment.status === 'no-show') {
22
+ grants.push('billing:invoice.issue');
23
+ }
24
+ ```
25
+
26
+ Correct:
27
+
28
+ ```ts
29
+ if (appointment.status === AppointmentStatus.NoShow) {
30
+ grants.push(billingPermissions['invoice.issue']);
31
+ }
32
+ ```
33
+
34
+ ## Where a value is judged
35
+
36
+ A word means one thing in one context, and may mean something else next door; the rule follows the language of each place.
37
+
38
+ | Declared in | Judged in |
39
+ |---|---|
40
+ | a context (`domain/vocabularies/` of `billing`) | that context only: `issued` in `catalog` is another word |
41
+ | the platform (the `Role` of `<platformDir>/auth/role.ts`) | the platform, and the route groups `*.routes.ts` of the contexts, where a guard names a role |
42
+ | the shared kernel | everywhere |
43
+ | a permission set (`definePermissions`) | everywhere: a permission id names one permission of one context |
44
+
45
+ ## Details
46
+
47
+ A quoted key is a value spelled again and is reported: write it as a computed key, `[AppointmentStatus.NoShow]: 'No show'`, which also types the object by the vocabulary. An identifier key and the specifier of an import or an export are names and are not judged. A test spells the values a client sends on purpose, and a published language names the values of its contract itself: neither is judged. The message names the vocabulary, the file that declares it and what to write instead.
48
+
49
+ ## Options
50
+
51
+ None.
52
+
53
+ `rules."language/declared-vocabulary"` in `ddd-ts-kit.config.json` set to `off` silences the rule, and `// ddd-ts-kit-disable-next-line language/declared-vocabulary -- <reason>` silences one line, exactly as for `ddd-ts-kit check`.
54
+
55
+ ## Limits
56
+
57
+ - The vocabularies are read from the files of the source root on disk, again once a reading is five seconds old: an editor sees a new value after a few seconds, a lint run reads the project about once.
58
+ - The declaration is parsed: an exported `const` whose value is an object `as const` (or `as const satisfies ..`), each entry a key (a name or a quoted string) and a string literal, in either quote, comments allowed, next to `export type X = (typeof X)[keyof typeof X]` written that way. An object with a number, a spread, a method or a computed entry, or without that union type, declares nothing. `generate vocabulary` writes the form that is read.
59
+ - A value of the platform is matched by its value in every file of the platform: with the `Role` of an rbac project, `actor.type === 'system'` in the platform is reported although it compares a kind of actor, not a role. Declare that word in its own vocabulary (`ActorType.System`) and read it there, or silence the line with its reason.
60
+ - A value two vocabularies share is reported with both: the message names each and what to write for each.
61
+
62
+ ## With the CLI checker
63
+
64
+ `ddd-ts-kit check` holds the same rule on the text of the files of the project, with the same declarations and the same exemptions.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-ts-kit/eslint-plugin",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "AST-accurate ESLint rules for DDD and Clean Architecture in TypeScript: layer and context isolation, domain purity, clean code ordering.",
5
5
  "license": "MIT",
6
6
  "repository": {