@ddd-ts-kit/eslint-plugin 0.1.1 → 0.3.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 (112) hide show
  1. package/README.md +6 -1
  2. package/dist/project/config.d.ts +6 -0
  3. package/dist/project/config.d.ts.map +1 -1
  4. package/dist/project/is-judged.d.ts +5 -0
  5. package/dist/project/is-judged.d.ts.map +1 -0
  6. package/dist/project/is-judged.js +7 -0
  7. package/dist/project/is-judged.js.map +1 -0
  8. package/dist/project/parse-config.d.ts.map +1 -1
  9. package/dist/project/parse-config.js +6 -0
  10. package/dist/project/parse-config.js.map +1 -1
  11. package/dist/project/resolve-import.d.ts.map +1 -1
  12. package/dist/project/resolve-import.js +4 -1
  13. package/dist/project/resolve-import.js.map +1 -1
  14. package/dist/project/specifier-suffix.d.ts +6 -0
  15. package/dist/project/specifier-suffix.d.ts.map +1 -0
  16. package/dist/project/specifier-suffix.js +8 -0
  17. package/dist/project/specifier-suffix.js.map +1 -0
  18. package/dist/project/to-alias.d.ts +3 -2
  19. package/dist/project/to-alias.d.ts.map +1 -1
  20. package/dist/project/to-alias.js +4 -3
  21. package/dist/project/to-alias.js.map +1 -1
  22. package/dist/rules/clean-one-export-per-file.js +7 -3
  23. package/dist/rules/clean-one-export-per-file.js.map +1 -1
  24. package/dist/rules/declarations-constructor-injection.d.ts +5 -0
  25. package/dist/rules/declarations-constructor-injection.d.ts.map +1 -0
  26. package/dist/rules/declarations-constructor-injection.js +80 -0
  27. package/dist/rules/declarations-constructor-injection.js.map +1 -0
  28. package/dist/rules/domain-no-generic-error.js +1 -1
  29. package/dist/rules/domain-no-generic-error.js.map +1 -1
  30. package/dist/rules/errors-constructor-not-public.d.ts +2 -0
  31. package/dist/rules/errors-constructor-not-public.d.ts.map +1 -0
  32. package/dist/rules/errors-constructor-not-public.js +41 -0
  33. package/dist/rules/errors-constructor-not-public.js.map +1 -0
  34. package/dist/rules/errors-factory-name.d.ts +4 -0
  35. package/dist/rules/errors-factory-name.d.ts.map +1 -0
  36. package/dist/rules/errors-factory-name.js +88 -0
  37. package/dist/rules/errors-factory-name.js.map +1 -0
  38. package/dist/rules/errors-through-factory.d.ts +2 -0
  39. package/dist/rules/errors-through-factory.d.ts.map +1 -0
  40. package/dist/rules/errors-through-factory.js +39 -0
  41. package/dist/rules/errors-through-factory.js.map +1 -0
  42. package/dist/rules/imports-alias-only.d.ts.map +1 -1
  43. package/dist/rules/imports-alias-only.js +7 -9
  44. package/dist/rules/imports-alias-only.js.map +1 -1
  45. package/dist/rules/imports-extension.d.ts +5 -0
  46. package/dist/rules/imports-extension.d.ts.map +1 -0
  47. package/dist/rules/imports-extension.js +45 -0
  48. package/dist/rules/imports-extension.js.map +1 -0
  49. package/dist/rules/ports-no-concrete-dependency.d.ts +3 -1
  50. package/dist/rules/ports-no-concrete-dependency.d.ts.map +1 -1
  51. package/dist/rules/ports-no-concrete-dependency.js +51 -3
  52. package/dist/rules/ports-no-concrete-dependency.js.map +1 -1
  53. package/dist/rules/rules.d.ts.map +1 -1
  54. package/dist/rules/rules.js +10 -0
  55. package/dist/rules/rules.js.map +1 -1
  56. package/dist/support/declarations/declared-roles.d.ts.map +1 -1
  57. package/dist/support/declarations/declared-roles.js +1 -0
  58. package/dist/support/declarations/declared-roles.js.map +1 -1
  59. package/dist/support/errors/constant-case.d.ts +3 -0
  60. package/dist/support/errors/constant-case.d.ts.map +1 -0
  61. package/dist/support/errors/constant-case.js +6 -0
  62. package/dist/support/errors/constant-case.js.map +1 -0
  63. package/dist/support/errors/is-error-class.d.ts +4 -0
  64. package/dist/support/errors/is-error-class.d.ts.map +1 -0
  65. package/dist/support/errors/is-error-class.js +6 -0
  66. package/dist/support/errors/is-error-class.js.map +1 -0
  67. package/dist/support/errors/is-error-file.d.ts +4 -0
  68. package/dist/support/errors/is-error-file.d.ts.map +1 -0
  69. package/dist/support/errors/is-error-file.js +10 -0
  70. package/dist/support/errors/is-error-file.js.map +1 -0
  71. package/dist/support/injection/language-types.d.ts +3 -0
  72. package/dist/support/injection/language-types.d.ts.map +1 -0
  73. package/dist/support/injection/language-types.js +20 -0
  74. package/dist/support/injection/language-types.js.map +1 -0
  75. package/dist/support/injection/not-classes.d.ts +4 -0
  76. package/dist/support/injection/not-classes.d.ts.map +1 -0
  77. package/dist/support/injection/not-classes.js +20 -0
  78. package/dist/support/injection/not-classes.js.map +1 -0
  79. package/dist/support/injection/parameter-reading.d.ts +9 -0
  80. package/dist/support/injection/parameter-reading.d.ts.map +1 -0
  81. package/dist/support/injection/parameter-reading.js +2 -0
  82. package/dist/support/injection/parameter-reading.js.map +1 -0
  83. package/dist/support/injection/read-parameter.d.ts +9 -0
  84. package/dist/support/injection/read-parameter.d.ts.map +1 -0
  85. package/dist/support/injection/read-parameter.js +41 -0
  86. package/dist/support/injection/read-parameter.js.map +1 -0
  87. package/dist/support/injection/written-name.d.ts +4 -0
  88. package/dist/support/injection/written-name.d.ts.map +1 -0
  89. package/dist/support/injection/written-name.js +13 -0
  90. package/dist/support/injection/written-name.js.map +1 -0
  91. package/dist/version.d.ts +1 -1
  92. package/dist/version.js +1 -1
  93. package/docs/rules/clean-one-export-per-file.md +1 -1
  94. package/docs/rules/context-declared-relationship.md +2 -2
  95. package/docs/rules/context-extractable.md +3 -3
  96. package/docs/rules/context-published-language-is-a-contract.md +1 -1
  97. package/docs/rules/context-published-language-only.md +2 -2
  98. package/docs/rules/declarations-constructor-injection.md +89 -0
  99. package/docs/rules/declarations-role-declared.md +15 -9
  100. package/docs/rules/domain-events-transactional-before-commit.md +1 -1
  101. package/docs/rules/errors-constructor-not-public.md +53 -0
  102. package/docs/rules/errors-factory-name.md +50 -0
  103. package/docs/rules/errors-through-factory.md +45 -0
  104. package/docs/rules/imports-alias-only.md +10 -9
  105. package/docs/rules/imports-extension.md +83 -0
  106. package/docs/rules/layer-application-inward.md +3 -3
  107. package/docs/rules/layer-domain-purity.md +3 -3
  108. package/docs/rules/layer-infrastructure-no-presentation.md +2 -2
  109. package/docs/rules/layer-presentation-no-infrastructure.md +2 -2
  110. package/docs/rules/ports-no-concrete-dependency.md +4 -3
  111. package/docs/rules/test-no-mocks.md +1 -1
  112. package/package.json +1 -1
package/README.md CHANGED
@@ -104,6 +104,9 @@ is an error whatever the configured limit). `strict` sets every rule to `error`.
104
104
  | [`domain/aggregate-encapsulation`](docs/rules/domain-aggregate-encapsulation.md) | `ddd-ts-kit/domain-aggregate-encapsulation` | aggregates and entities: no public constructor, no public mutable property, no setter | `error` | custom |
105
105
  | [`domain/value-object-immutability`](docs/rules/domain-value-object-immutability.md) | `ddd-ts-kit/domain-value-object-immutability` | value objects: every property `readonly`, no setter, no write to `this` | `error` | custom |
106
106
  | [`domain/no-generic-error`](docs/rules/domain-no-generic-error.md) | `ddd-ts-kit/domain-no-generic-error` | no `throw new Error(...)` in `domain/` and `application/` | `error` | custom |
107
+ | [`errors/through-factory`](docs/rules/errors-through-factory.md) | `ddd-ts-kit/errors-through-factory` | under `"stack.refusals": "factories"`, no `new` of a class imported from `domain/errors/`: a refusal is built by a static factory of its concept class | `error` | custom |
108
+ | [`errors/constructor-not-public`](docs/rules/errors-constructor-not-public.md) | `ddd-ts-kit/errors-constructor-not-public` | under `"stack.refusals": "factories"`, an error class of `domain/errors/` has no public constructor, declared or inherited from `DomainError` | `error` | custom |
109
+ | [`errors/factory-name`](docs/rules/errors-factory-name.md) | `ddd-ts-kit/errors-factory-name` | under `"stack.refusals": "factories"`, a factory is not named `create`, `make`, `of` or `error1`, and its code is its name in constant case, alone or with the name of the concept | `error` | custom |
107
110
  | [`application/handler-shape`](docs/rules/application-handler-shape.md) | `ddd-ts-kit/application-handler-shape` | a `*.handler.ts` exports one class whose single public method is `execute` | `error` | custom |
108
111
  | [`application/command-query-separation`](docs/rules/application-command-query-separation.md) | `ddd-ts-kit/application-command-query-separation` | nothing under `application/queries` calls `save`, `delete`, `publish` on a dependency | `warn` | custom |
109
112
  | [`domain-events/dispatched-on-save`](docs/rules/domain-events-dispatched-on-save.md) | `ddd-ts-kit/domain-events-dispatched-on-save` | no `pullEvents()` in `application/` and `infrastructure/`; no `DomainEventDispatcher` imported, listed as a dependency or received by a constructor in `application/commands`, `application/queries` and a repository adapter | `error` | custom |
@@ -121,14 +124,16 @@ is an error whatever the configured limit). `strict` sets every rule to `error`.
121
124
  | [`standard/no-parallel-interface`](docs/rules/standard-no-parallel-interface.md) | `ddd-ts-kit/standard-no-parallel-interface` | no declared `ILogger`, `UserContext`, `PaginatedResult`, `CronJob`, `ErrorTracker` and the like next to the standard interfaces of the kernel (`standardInterfaces` in the config) | `warn` | custom |
122
125
  | [`governance/recorded-deviation`](docs/rules/governance-recorded-deviation.md) | `ddd-ts-kit/governance-recorded-deviation` | every suppression names its rules and points to `ADR-<number>` after `--` | `error` | custom |
123
126
  | [`declarations/role-declared`](docs/rules/declarations-role-declared.md) | `ddd-ts-kit/declarations-role-declared` | declared style only: a role file exports a class carrying the decorator of its role, the `consumer` and `name` of a declaration are string literals, a domain event handler names its event as the event does, `domain/` carries no declaration decorator | `error` | custom |
127
+ | [`declarations/constructor-injection`](docs/rules/declarations-constructor-injection.md) | `ddd-ts-kit/declarations-constructor-injection` | declared style only: a class whose decorator lists no dependency types each constructor parameter by one class, with no `?`, default value, rest or destructuring; under `stack.dependencies: signature` a decorator carries no list (a list that repeats the constructor is removed by the fix, one that differs is reported) | `error` | custom |
124
128
  | [`ports/abstract-class`](docs/rules/ports-abstract-class.md) | `ddd-ts-kit/ports-abstract-class` | a port (`domain/repositories/*.repository.ts`, `application/ports/*.port.ts`) is an abstract class with abstract members only, never an interface | `error` | custom |
125
129
  | [`ports/implements-never-extends`](docs/rules/ports-implements-never-extends.md) | `ddd-ts-kit/ports-implements-never-extends` | an adapter (`@Repository`, `@Gateway`, `@Adapter`, `bind(Port).toClass(Class)`) implements its port and never extends it | `error` | custom |
126
130
  | [`ports/no-token-constant`](docs/rules/ports-no-token-constant.md) | `ddd-ts-kit/ports-no-token-constant` | a dependency is named by its port class: no token helper, symbol, string or constant, no token file | `error` | custom |
127
- | [`ports/no-concrete-dependency`](docs/rules/ports-no-concrete-dependency.md) | `ddd-ts-kit/ports-no-concrete-dependency` | a dependency list names nothing imported from `infrastructure/` or `test/fakes/` | `error` | custom |
131
+ | [`ports/no-concrete-dependency`](docs/rules/ports-no-concrete-dependency.md) | `ddd-ts-kit/ports-no-concrete-dependency` | a dependency list names nothing imported from `infrastructure/` or `test/fakes/`, and no constructor parameter of a declared class that lists nothing is typed by such a class | `error` | custom |
128
132
  | [`ports/value-import`](docs/rules/ports-value-import.md) | `ddd-ts-kit/ports-value-import` | a port named in a dependency list or given to `bind` is not a type-only import; fixable | `error` | custom |
129
133
  | [`scheduling/job-triggers-use-case`](docs/rules/scheduling-job-triggers-use-case.md) | `ddd-ts-kit/scheduling-job-triggers-use-case` | a job lives in `application/scheduling/*.job.ts`, implements `ScheduledJob`, sends a command, and touches neither a repository nor the model | `error` | custom |
130
134
  | [`scheduling/job-name`](docs/rules/scheduling-job-name.md) | `ddd-ts-kit/scheduling-job-name` | a job is named `<context>.<job-name>` by a string literal, and its `systemActor` carries that name | `error` | custom |
131
135
  | [`imports/alias-only`](docs/rules/imports-alias-only.md) | `ddd-ts-kit/imports-alias-only` | a file of the project is imported by its alias (`@/...`, `$test/...`, `$scripts/...`), never by a relative path, the same directory included; no `.` or `..` segment in an alias path; fixable | `error` | custom |
136
+ | [`imports/extension`](docs/rules/imports-extension.md) | `ddd-ts-kit/imports-extension` | an import of a file of the project ends as `importExtension` of the config says: no extension under `none`, `.js` under `js`; fixable | `error` | custom |
132
137
 
133
138
  `domain/*` and `application/*` ids are added by this plugin: the shape of a class needs a syntax
134
139
  tree, so the CLI checker has no equivalent. The `domain-events/*` ids are not among them: both tools
@@ -16,6 +16,10 @@ export interface Stack {
16
16
  readonly style: Style;
17
17
  /** How a declared context reaches the composition root: one generated barrel, or discovery of its role files. */
18
18
  readonly assembly: Assembly;
19
+ /** Where a declared class states what it depends on: its constructor signature, or the list of its decorator. A config that does not say is `listed`. */
20
+ readonly dependencies: 'signature' | 'listed';
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
+ readonly refusals: 'factories' | 'classes';
19
23
  /** Kept as written: with `prisma` the generated client under `generated/` has an import alias of its own. */
20
24
  readonly orm: string;
21
25
  }
@@ -38,6 +42,8 @@ export interface Config {
38
42
  readonly sharedKernelDir: string;
39
43
  readonly platformDir: string;
40
44
  readonly importAlias: string;
45
+ /** `none` or `js`: whether an import of a file of the project ends with the extension of the emitted file. */
46
+ readonly importExtension: string;
41
47
  readonly contexts: Readonly<Record<string, ContextConfig>>;
42
48
  readonly rules: Readonly<Record<string, string>>;
43
49
  readonly domainAllowedPackages: readonly string[];
@@ -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,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,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;CACvE"}
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;CACvE"}
@@ -0,0 +1,5 @@
1
+ import type { AliasRoot } from './alias-root.js';
2
+ import type { LintedFile } from './linted-file.js';
3
+ /** A source under an aliased tree the team writes: the source root, the tests and the scripts. The import rules judge no other file. */
4
+ export declare function isJudged(roots: readonly AliasRoot[], file: LintedFile): boolean;
5
+ //# sourceMappingURL=is-judged.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-judged.d.ts","sourceRoot":"","sources":["../../src/project/is-judged.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,wIAAwI;AACxI,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAE/E"}
@@ -0,0 +1,7 @@
1
+ /** Written by a tool and never linted as project code. */
2
+ const BUILD_PRODUCTS = ['generated'];
3
+ /** A source under an aliased tree the team writes: the source root, the tests and the scripts. The import rules judge no other file. */
4
+ export function isJudged(roots, file) {
5
+ return roots.some(({ directory }) => !BUILD_PRODUCTS.includes(directory) && file.path.startsWith(`${directory}/`));
6
+ }
7
+ //# sourceMappingURL=is-judged.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-judged.js","sourceRoot":"","sources":["../../src/project/is-judged.ts"],"names":[],"mappings":"AAGA,0DAA0D;AAC1D,MAAM,cAAc,GAAG,CAAC,WAAW,CAAC,CAAC;AAErC,wIAAwI;AACxI,MAAM,UAAU,QAAQ,CAAC,KAA2B,EAAE,IAAgB;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;AACrH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuE,MAAM,EAAE,MAAM,aAAa,CAAC;AAO/G,+GAA+G;AAC/G,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAkB1C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAuBhD"}
1
+ {"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuE,MAAM,EAAE,MAAM,aAAa,CAAC;AAO/G,+GAA+G;AAC/G,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAoB1C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAyBhD"}
@@ -6,6 +6,8 @@ const DEFAULT_LIMITS = { maxParameters: 3, maxFunctionLines: 30 };
6
6
  export const FUNCTION_LINES_CEILING = 100;
7
7
  const STYLES = ['declared', 'explicit'];
8
8
  const ASSEMBLIES = ['barrel', 'discovery'];
9
+ const DEPENDENCY_STATEMENTS = ['signature', 'listed'];
10
+ const REFUSAL_FORMS = ['factories', 'classes'];
9
11
  const KERNEL = ['@ddd-ts-kit/kernel'];
10
12
  /** The application layer declares its permissions and policies with `@ddd-ts-kit/auth`, which imports the kernel only. */
11
13
  const APPLICATION = [...KERNEL, '@ddd-ts-kit/auth'];
@@ -29,6 +31,8 @@ export function parseConfig(raw) {
29
31
  sharedKernelDir: posix(text(source['sharedKernelDir'], `${sourceRoot}/shared-kernel`)),
30
32
  platformDir: posix(text(source['platformDir'], `${sourceRoot}/platform`)),
31
33
  importAlias: text(source['importAlias'], '@/'),
34
+ // A config without the key was written before it existed: its imports end with `.js`.
35
+ importExtension: text(source['importExtension'], 'js'),
32
36
  contexts: mapEntries(source['contexts'], parseContext),
33
37
  rules: mapEntries(source['rules'], String),
34
38
  domainAllowedPackages: strings(source['domainAllowedPackages'], KERNEL),
@@ -45,6 +49,8 @@ function parseStack(value) {
45
49
  return {
46
50
  style: oneOf(STYLES, raw['style'], 'explicit'),
47
51
  assembly: oneOf(ASSEMBLIES, raw['assembly'], 'barrel'),
52
+ dependencies: oneOf(DEPENDENCY_STATEMENTS, raw['dependencies'], 'listed'),
53
+ refusals: oneOf(REFUSAL_FORMS, raw['refusals'], 'classes'),
48
54
  orm: text(raw['orm'], 'drizzle'),
49
55
  };
50
56
  }
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-import.d.ts","sourceRoot":"","sources":["../../src/project/resolve-import.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAC7E;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAMxD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAoB/F"}
1
+ {"version":3,"file":"resolve-import.d.ts","sourceRoot":"","sources":["../../src/project/resolve-import.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAC7E;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AASxD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAoB/F"}
@@ -3,6 +3,8 @@ import path from 'node:path';
3
3
  import { aliasRoots } from './alias-roots.js';
4
4
  import { locate } from './locate.js';
5
5
  const SOURCE = /\.(?:ts|mts|cts)$/;
6
+ /** A file that is not a module of the project, named with its own extension. */
7
+ const ASSET = /\.(?:json|node|wasm|[jt]sx)$/;
6
8
  const BUILTINS = new Set(builtinModules);
7
9
  export function resolveImport(config, fromFile, specifier) {
8
10
  if (specifier.startsWith('.')) {
@@ -22,7 +24,8 @@ export function resolveImport(config, fromFile, specifier) {
22
24
  }
23
25
  function fileTarget(config, target) {
24
26
  const clean = path.posix.normalize(target).replace(/\.(?:js|mjs|cjs)$/, '.ts');
25
- const withExtension = SOURCE.test(clean) || path.posix.extname(clean) !== '' ? clean : `${clean}.ts`;
27
+ // Written without its extension, a module is named by what remains, dots included: `invoice.aggregate` is `invoice.aggregate.ts`.
28
+ const withExtension = SOURCE.test(clean) || ASSET.test(clean) ? clean : `${clean}.ts`;
26
29
  return { kind: 'file', path: withExtension, location: locate(config, withExtension) };
27
30
  }
28
31
  function packageName(specifier) {
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-import.js","sourceRoot":"","sources":["../../src/project/resolve-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;AAEzC,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAgB,EAAE,SAAiB;IAC/E,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpG,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,SAAS,EAAE,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,MAAc;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC;IAErG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB;IACpC,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElD,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACtF,CAAC"}
1
+ {"version":3,"file":"resolve-import.js","sourceRoot":"","sources":["../../src/project/resolve-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAOrC,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,gFAAgF;AAChF,MAAM,KAAK,GAAG,8BAA8B,CAAC;AAE7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;AAEzC,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAgB,EAAE,SAAiB;IAC/E,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpG,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,SAAS,EAAE,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,MAAc;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC/E,kIAAkI;IAClI,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC;IAEtF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB;IACpC,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElD,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACtF,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * What an alias specifier ends with under "importExtension": nothing for `none`, `.js` otherwise.
3
+ * Mirrors `specifierSuffix` of the CLI: a wrong value is read as `js`.
4
+ */
5
+ export declare function specifierSuffix(importExtension: string): '' | '.js';
6
+ //# sourceMappingURL=specifier-suffix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specifier-suffix.d.ts","sourceRoot":"","sources":["../../src/project/specifier-suffix.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,EAAE,GAAG,KAAK,CAEnE"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * What an alias specifier ends with under "importExtension": nothing for `none`, `.js` otherwise.
3
+ * Mirrors `specifierSuffix` of the CLI: a wrong value is read as `js`.
4
+ */
5
+ export function specifierSuffix(importExtension) {
6
+ return importExtension === 'none' ? '' : '.js';
7
+ }
8
+ //# sourceMappingURL=specifier-suffix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specifier-suffix.js","sourceRoot":"","sources":["../../src/project/specifier-suffix.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,eAAuB;IACrD,OAAO,eAAe,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import type { AliasRoot } from './alias-root.js';
2
2
  /**
3
3
  * The specifier that names a file of the project, given by its path from the project root with
4
- * or without its extension; nothing when the file is under no aliased tree.
4
+ * or without its extension, ending with `suffix` (`.js`, or nothing); nothing when the file is
5
+ * under no aliased tree.
5
6
  */
6
- export declare function toAlias(roots: readonly AliasRoot[], file: string): string | undefined;
7
+ export declare function toAlias(roots: readonly AliasRoot[], file: string, suffix: string): string | undefined;
7
8
  //# sourceMappingURL=to-alias.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"to-alias.d.ts","sourceRoot":"","sources":["../../src/project/to-alias.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQrF"}
1
+ {"version":3,"file":"to-alias.d.ts","sourceRoot":"","sources":["../../src/project/to-alias.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQrG"}
@@ -1,13 +1,14 @@
1
1
  const EXTENSION = /\.(?:ts|js)$/;
2
2
  /**
3
3
  * The specifier that names a file of the project, given by its path from the project root with
4
- * or without its extension; nothing when the file is under no aliased tree.
4
+ * or without its extension, ending with `suffix` (`.js`, or nothing); nothing when the file is
5
+ * under no aliased tree.
5
6
  */
6
- export function toAlias(roots, file) {
7
+ export function toAlias(roots, file, suffix) {
7
8
  const root = roots.find(({ directory }) => file.startsWith(`${directory}/`));
8
9
  if (root === undefined) {
9
10
  return undefined;
10
11
  }
11
- return `${root.prefix}${file.slice(root.directory.length + 1).replace(EXTENSION, '')}.js`;
12
+ return `${root.prefix}${file.slice(root.directory.length + 1).replace(EXTENSION, '')}${suffix}`;
12
13
  }
13
14
  //# sourceMappingURL=to-alias.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"to-alias.js","sourceRoot":"","sources":["../../src/project/to-alias.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,cAAc,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,KAA2B,EAAE,IAAY;IAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;IAE7E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC;AAC5F,CAAC"}
1
+ {"version":3,"file":"to-alias.js","sourceRoot":"","sources":["../../src/project/to-alias.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,cAAc,CAAC;AAEjC;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAA2B,EAAE,IAAY,EAAE,MAAc;IAC/E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;IAE7E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;AAClG,CAAC"}
@@ -39,7 +39,7 @@ export const cleanOneExportPerFile = defineRule({
39
39
  ],
40
40
  defaultOptions: [{}],
41
41
  create({ file, sourceCode, options: [options], report }) {
42
- if (!isJudged(file)) {
42
+ if (!isJudged(file) || isGenerated(file)) {
43
43
  return {};
44
44
  }
45
45
  const isEntry = isEntryFile(file, options);
@@ -68,8 +68,12 @@ export const cleanOneExportPerFile = defineRule({
68
68
  },
69
69
  });
70
70
  function isEntryFile(file, options) {
71
- return (isIndex(file) ||
72
- globMatcher([`${file.config.contextsDir}/*/*.declarations.ts`, ...(options.entries ?? [])])(file.path));
71
+ return isIndex(file) || globMatcher(options.entries ?? [])(file.path);
72
+ }
73
+ /** The generated files of a declared context: `declarations/barrel-current` of `ddd-ts-kit check` holds every line of them. */
74
+ function isGenerated(file) {
75
+ const { contextsDir } = file.config;
76
+ return globMatcher([`${contextsDir}/*/*.declarations.ts`, `${contextsDir}/*/*.dependencies.ts`])(file.path);
73
77
  }
74
78
  function isIndex(file) {
75
79
  return /^index\.[cm]?ts$/.test(path.posix.basename(file.path));
@@ -1 +1 @@
1
- {"version":3,"file":"clean-one-export-per-file.js","sourceRoot":"","sources":["../../src/rules/clean-one-export-per-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clean-one-export-per-file.js","sourceRoot":"","sources":["../../src/rules/clean-one-export-per-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type MessageId = 'parameter' | 'redundant' | 'differs';
3
+ export declare const declarationsConstructorInjection: TSESLint.RuleModule<MessageId, [], import("../index.js").RuleDocs, TSESLint.RuleListener>;
4
+ export {};
5
+ //# sourceMappingURL=declarations-constructor-injection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarations-constructor-injection.d.ts","sourceRoot":"","sources":["../../src/rules/declarations-constructor-injection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AAaxF,KAAK,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;AAQvD,eAAO,MAAM,gCAAgC,2FA+C3C,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { className } from '../support/classes/class-name.js';
3
+ import { constructorOf } from '../support/classes/constructor-of.js';
4
+ import { ACCESS_DECORATORS } from '../support/declarations/access-decorators.js';
5
+ import { declarationReader } from '../support/declarations/declaration-reader.js';
6
+ import { declaredRoleOf } from '../support/declarations/declared-role-of.js';
7
+ import { isDeclaredStyle } from '../support/declarations/is-declared-style.js';
8
+ import { notClasses } from '../support/injection/not-classes.js';
9
+ import { readParameter } from '../support/injection/read-parameter.js';
10
+ import { writtenName } from '../support/injection/written-name.js';
11
+ import { defineRule } from '../support/rule/define-rule.js';
12
+ export const declarationsConstructorInjection = defineRule({
13
+ id: 'declarations/constructor-injection',
14
+ type: 'problem',
15
+ recommended: 'error',
16
+ fixable: 'code',
17
+ description: 'In a declared-style project, a class whose decorator lists no dependency states them in its constructor, each parameter typed by one class; under "stack.dependencies": "signature" a decorator carries no list.',
18
+ messages: {
19
+ parameter: 'Parameter "{{name}}" of the constructor of {{className}} {{flaw}}. Type it by one class and nothing else: a port (an abstract class of application/ports or domain/repositories), a port of the kernel, another declared class, or an abstract class with readonly members that the platform binds to a value. The composition root injects each constructor parameter by the class that types it.',
20
+ redundant: 'The decorator of {{className}} lists [{{listed}}], which its constructor already states. Remove the list: the constructor signature is the one statement of what a class depends on, and `ddd-ts-kit docs` reads it.',
21
+ differs: 'The decorator of {{className}} lists [{{listed}}] and its constructor says something else: the list wins at run time, so the signature lies. Type each constructor parameter by the class its list entry names (the token is the type), then remove the list.',
22
+ },
23
+ create({ file, sourceCode, report }) {
24
+ if (file.isTest || !isDeclaredStyle(file) || declaredRoleOf(file) === undefined) {
25
+ return {};
26
+ }
27
+ const declarationsOf = declarationReader(sourceCode.ast);
28
+ const declaredOtherwise = notClasses(sourceCode.ast);
29
+ const signature = file.config.stack.dependencies === 'signature';
30
+ const judgeClass = (node) => {
31
+ const [declaration] = declarationsOf(node).filter(({ name }) => !ACCESS_DECORATORS.has(name));
32
+ const written = constructorOf(node.body);
33
+ if (declaration === undefined || (written === undefined && node.superClass !== null)) {
34
+ return;
35
+ }
36
+ const read = (written?.value.params ?? []).map((parameter) => ({
37
+ node: parameter,
38
+ reading: readParameter(parameter, declaredOtherwise),
39
+ }));
40
+ const list = declaration.arguments.at(-1);
41
+ const findings = list?.type === AST_NODE_TYPES.ArrayExpression ? listed(node, { list, read, signature }) : unstated(node, read);
42
+ findings.forEach(report);
43
+ };
44
+ return { ClassDeclaration: judgeClass, ClassExpression: judgeClass };
45
+ },
46
+ });
47
+ function unstated(node, read) {
48
+ return read.flatMap(({ node: parameter, reading }) => reading.flaw === undefined
49
+ ? []
50
+ : [
51
+ {
52
+ node: parameter,
53
+ messageId: 'parameter',
54
+ data: { name: writtenName(parameter), className: className(node), flaw: reading.flaw },
55
+ },
56
+ ]);
57
+ }
58
+ function listed(node, { list, read, signature }) {
59
+ if (!signature) {
60
+ return [];
61
+ }
62
+ const names = list.elements.map((element) => (element?.type === AST_NODE_TYPES.Identifier ? element.name : '?'));
63
+ const typed = read.map(({ reading }) => reading.token ?? '');
64
+ const same = names.length === typed.length && names.every((name, index) => name === typed[index]);
65
+ const data = { className: className(node), listed: names.join(', ') };
66
+ return [
67
+ same
68
+ ? { node: list, messageId: 'redundant', data, fix: withoutList(list) }
69
+ : { node: list, messageId: 'differs', data },
70
+ ];
71
+ }
72
+ /** Removes the list with the comma before it: `@CommandHandler(PlaceOrder, [Clock])` becomes `@CommandHandler(PlaceOrder)`. */
73
+ function withoutList(list) {
74
+ return (fixer) => {
75
+ const call = list.parent;
76
+ const before = call.type === AST_NODE_TYPES.CallExpression ? call.arguments[call.arguments.indexOf(list) - 1] : undefined;
77
+ return before === undefined ? null : fixer.removeRange([before.range[1], list.range[1]]);
78
+ };
79
+ }
80
+ //# sourceMappingURL=declarations-constructor-injection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarations-constructor-injection.js","sourceRoot":"","sources":["../../src/rules/declarations-constructor-injection.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ export const domainNoGenericError = defineRule({
7
7
  recommended: 'error',
8
8
  description: 'No `throw new Error(...)` in domain/ or application/: an expected failure is a DomainError with a stable code.',
9
9
  messages: {
10
- generic: 'A generic Error says nothing a caller can act on. Throw a DomainError with a stable code (`ddd-ts-kit generate domain-error {{context}} <Name>`): presentation maps the code to a status in one place.',
10
+ generic: 'A generic Error says nothing a caller can act on. Throw a DomainError with a stable code, built by a factory of the error class of its concept (`ddd-ts-kit generate error {{context}} <Concept> <refusal>`): presentation maps the code to a status in one place.',
11
11
  },
12
12
  create({ file, sourceCode, report }) {
13
13
  const { location } = file;
@@ -1 +1 @@
1
- {"version":3,"file":"domain-no-generic-error.js","sourceRoot":"","sources":["../../src/rules/domain-no-generic-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAY;IACxD,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,OAAO;IACpB,WAAW,EACT,gHAAgH;IAClH,QAAQ,EAAE;QACR,OAAO,EACL,wMAAwM;KAC3M;IACD,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;QACjC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAE1B,IACE,QAAQ,CAAC,IAAI,KAAK,SAAS;YAC3B,IAAI,CAAC,MAAM;YACX,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,aAAa,CAAC,EACjE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO;YACL,cAAc,CAAC,IAAI;gBACjB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAE7B,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc,EAAE,CAAC;oBAClG,OAAO;gBACT,CAAC;gBAED,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;oBACvD,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"domain-no-generic-error.js","sourceRoot":"","sources":["../../src/rules/domain-no-generic-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAY;IACxD,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,OAAO;IACpB,WAAW,EACT,gHAAgH;IAClH,QAAQ,EAAE;QACR,OAAO,EACL,oQAAoQ;KACvQ;IACD,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;QACjC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAE1B,IACE,QAAQ,CAAC,IAAI,KAAK,SAAS;YAC3B,IAAI,CAAC,MAAM;YACX,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,aAAa,CAAC,EACjE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO;YACL,cAAc,CAAC,IAAI;gBACjB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAE7B,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc,EAAE,CAAC;oBAClG,OAAO;gBACT,CAAC;gBAED,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;oBACvD,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const errorsConstructorNotPublic: import("@typescript-eslint/utils/ts-eslint").RuleModule<"inheritedPublic" | "publicConstructor", [], import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
+ //# sourceMappingURL=errors-constructor-not-public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-constructor-not-public.d.ts","sourceRoot":"","sources":["../../src/rules/errors-constructor-not-public.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,0BAA0B,iMA0CrC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { className } from '../support/classes/class-name.js';
3
+ import { constructorOf } from '../support/classes/constructor-of.js';
4
+ import { visibilityOf } from '../support/classes/visibility-of.js';
5
+ import { isErrorClass } from '../support/errors/is-error-class.js';
6
+ import { isErrorFile } from '../support/errors/is-error-file.js';
7
+ import { defineRule } from '../support/rule/define-rule.js';
8
+ export const errorsConstructorNotPublic = defineRule({
9
+ id: 'errors/constructor-not-public',
10
+ type: 'problem',
11
+ recommended: 'error',
12
+ description: 'Under "stack.refusals": "factories", the constructor of an error class of domain/errors/ is not public: the class extends ConceptError and declares none, or declares it private or protected.',
13
+ messages: {
14
+ publicConstructor: 'The constructor of {{className}} is public: anyone can build a refusal with a code and a message of their own. Extend ConceptError of @ddd-ts-kit/kernel and remove the constructor (its own is protected), then build each refusal in a static factory with `{{className}}.refusal(code, message, facts)`.',
15
+ inheritedPublic: '{{className}} extends DomainError and declares no constructor, so it inherits a public one. Extend ConceptError of @ddd-ts-kit/kernel, whose constructor is protected, and build each refusal in a static factory with `{{className}}.refusal(code, message, facts)`.',
16
+ },
17
+ create({ file, report }) {
18
+ if (!isErrorFile(file)) {
19
+ return {};
20
+ }
21
+ return {
22
+ ClassBody(body) {
23
+ const owner = body.parent;
24
+ if (!isErrorClass(owner) || owner.abstract) {
25
+ return;
26
+ }
27
+ const constructor = constructorOf(body);
28
+ const data = { className: className(owner) };
29
+ if (constructor !== undefined && visibilityOf(constructor) === 'public') {
30
+ report({ node: constructor.key, messageId: 'publicConstructor', data });
31
+ }
32
+ if (constructor === undefined &&
33
+ owner.superClass?.type === AST_NODE_TYPES.Identifier &&
34
+ owner.superClass.name === 'DomainError') {
35
+ report({ node: owner.id ?? owner, messageId: 'inheritedPublic', data });
36
+ }
37
+ },
38
+ };
39
+ },
40
+ });
41
+ //# sourceMappingURL=errors-constructor-not-public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-constructor-not-public.js","sourceRoot":"","sources":["../../src/rules/errors-constructor-not-public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAA0C;IAC5F,EAAE,EAAE,+BAA+B;IACnC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,OAAO;IACpB,WAAW,EACT,gMAAgM;IAClM,QAAQ,EAAE;QACR,iBAAiB,EACf,6SAA6S;QAC/S,eAAe,EACb,uQAAuQ;KAC1Q;IACD,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO;YACL,SAAS,CAAC,IAAI;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;gBAE1B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC3C,OAAO;gBACT,CAAC;gBAED,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAE7C,IAAI,WAAW,KAAK,SAAS,IAAI,YAAY,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACxE,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBAED,IACE,WAAW,KAAK,SAAS;oBACzB,KAAK,CAAC,UAAU,EAAE,IAAI,KAAK,cAAc,CAAC,UAAU;oBACpD,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,aAAa,EACvC,CAAC;oBACD,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ type MessageId = 'vagueName' | 'codeNotLiteral' | 'codeFormat' | 'mismatch';
2
+ export declare const errorsFactoryName: import("@typescript-eslint/utils/ts-eslint").RuleModule<MessageId, [], import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
+ export {};
4
+ //# sourceMappingURL=errors-factory-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-factory-name.d.ts","sourceRoot":"","sources":["../../src/rules/errors-factory-name.ts"],"names":[],"mappings":"AAUA,KAAK,SAAS,GAAG,WAAW,GAAG,gBAAgB,GAAG,YAAY,GAAG,UAAU,CAAC;AAY5E,eAAO,MAAM,iBAAiB,mKAmC5B,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { className } from '../support/classes/class-name.js';
3
+ import { memberName } from '../support/classes/member-name.js';
4
+ import { visibilityOf } from '../support/classes/visibility-of.js';
5
+ import { descendants } from '../support/descendants.js';
6
+ import { constantCase } from '../support/errors/constant-case.js';
7
+ import { isErrorClass } from '../support/errors/is-error-class.js';
8
+ import { isErrorFile } from '../support/errors/is-error-file.js';
9
+ import { defineRule } from '../support/rule/define-rule.js';
10
+ /** Names that say an error is being made, never which rule of the business refused. */
11
+ const VAGUE_NAMES = ['create', 'make', 'of', 'from', 'build', 'new', 'error', 'failure', 'fail', 'refusal', 'refuse'];
12
+ const ERROR_CODE = /^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$/;
13
+ export const errorsFactoryName = defineRule({
14
+ id: 'errors/factory-name',
15
+ type: 'problem',
16
+ recommended: 'error',
17
+ description: 'Under "stack.refusals": "factories", a static factory of an error class is named after the refusal, in the words of the business, and its code is that name in constant case, alone or with the name of the concept.',
18
+ messages: {
19
+ vagueName: '`{{className}}.{{name}}` says that an error is built, not which rule refused. Name the factory after the refusal, as a domain expert would say it: `slotTaken`, `alreadyConfirmed`, `notFound`.',
20
+ codeNotLiteral: 'The code `{{className}}.{{name}}` gives to `refusal(...)` is not a string literal. Write it in place, in constant case: the code is the contract of the refusal, read by the HTTP mapping, the OpenAPI document, the audit trail and the tests.',
21
+ codeFormat: 'The code "{{code}}" of `{{className}}.{{name}}` is not in constant case. Write upper-case words separated by underscores, for example {{expected}}.',
22
+ mismatch: 'The factory `{{className}}.{{name}}` sets the code "{{code}}", which says something else. Write {{expected}}, or rename the factory after the code: a reader of the code that refuses and a reader of the contract must meet the same words.',
23
+ },
24
+ create({ file, report }) {
25
+ if (!isErrorFile(file)) {
26
+ return {};
27
+ }
28
+ return {
29
+ ClassBody(body) {
30
+ if (!isErrorClass(body.parent)) {
31
+ return;
32
+ }
33
+ const owner = className(body.parent);
34
+ for (const method of body.body.filter(isFactory)) {
35
+ judge({ name: memberName(method) ?? '', concept: owner, method }, report);
36
+ }
37
+ },
38
+ };
39
+ },
40
+ });
41
+ function isFactory(member) {
42
+ return (member.type === AST_NODE_TYPES.MethodDefinition &&
43
+ member.static &&
44
+ member.kind === 'method' &&
45
+ visibilityOf(member) === 'public' &&
46
+ refusalCallIn(member) !== undefined);
47
+ }
48
+ function refusalCallIn(method) {
49
+ return [...descendants(method.value)].find(isRefusalCall);
50
+ }
51
+ function isRefusalCall(node) {
52
+ return (node.type === AST_NODE_TYPES.CallExpression &&
53
+ node.callee.type === AST_NODE_TYPES.MemberExpression &&
54
+ node.callee.property.type === AST_NODE_TYPES.Identifier &&
55
+ node.callee.property.name === 'refusal');
56
+ }
57
+ function judge(factory, report) {
58
+ const { name, concept, method } = factory;
59
+ const data = { className: concept, name };
60
+ if (VAGUE_NAMES.includes(name.toLowerCase()) || /\d/.test(name)) {
61
+ report({ node: method.key, messageId: 'vagueName', data });
62
+ return;
63
+ }
64
+ const [code] = refusalCallIn(method)?.arguments ?? [];
65
+ if (code?.type !== AST_NODE_TYPES.Literal || typeof code.value !== 'string') {
66
+ report({ node: code ?? method.key, messageId: 'codeNotLiteral', data });
67
+ return;
68
+ }
69
+ judgeCode(factory, { node: code, value: code.value }, report);
70
+ }
71
+ function judgeCode(factory, code, report) {
72
+ const expected = expectedCodes(factory);
73
+ const data = { className: factory.concept, name: factory.name, code: code.value };
74
+ if (!ERROR_CODE.test(code.value)) {
75
+ report({ node: code.node, messageId: 'codeFormat', data: { ...data, expected: expected[0] ?? '' } });
76
+ return;
77
+ }
78
+ if (!expected.includes(code.value)) {
79
+ report({ node: code.node, messageId: 'mismatch', data: { ...data, expected: expected.join(' or ') } });
80
+ }
81
+ }
82
+ /** `AppointmentError.notFound` may set `NOT_FOUND`, `APPOINTMENT_NOT_FOUND` or `NOT_FOUND_APPOINTMENT`. */
83
+ function expectedCodes({ name, concept }) {
84
+ const refusal = constantCase(name);
85
+ const subject = constantCase(concept.replace(/Error$/, ''));
86
+ return subject === '' ? [refusal] : [refusal, `${subject}_${refusal}`, `${refusal}_${subject}`];
87
+ }
88
+ //# sourceMappingURL=errors-factory-name.js.map