@ddd-ts-kit/eslint-plugin 0.1.1 → 0.2.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.
- package/README.md +3 -1
- package/dist/project/config.d.ts +4 -0
- package/dist/project/config.d.ts.map +1 -1
- package/dist/project/is-judged.d.ts +5 -0
- package/dist/project/is-judged.d.ts.map +1 -0
- package/dist/project/is-judged.js +7 -0
- package/dist/project/is-judged.js.map +1 -0
- package/dist/project/parse-config.d.ts.map +1 -1
- package/dist/project/parse-config.js +4 -0
- package/dist/project/parse-config.js.map +1 -1
- package/dist/project/resolve-import.d.ts.map +1 -1
- package/dist/project/resolve-import.js +4 -1
- package/dist/project/resolve-import.js.map +1 -1
- package/dist/project/specifier-suffix.d.ts +6 -0
- package/dist/project/specifier-suffix.d.ts.map +1 -0
- package/dist/project/specifier-suffix.js +8 -0
- package/dist/project/specifier-suffix.js.map +1 -0
- package/dist/project/to-alias.d.ts +3 -2
- package/dist/project/to-alias.d.ts.map +1 -1
- package/dist/project/to-alias.js +4 -3
- package/dist/project/to-alias.js.map +1 -1
- package/dist/rules/clean-one-export-per-file.js +7 -3
- package/dist/rules/clean-one-export-per-file.js.map +1 -1
- package/dist/rules/declarations-constructor-injection.d.ts +5 -0
- package/dist/rules/declarations-constructor-injection.d.ts.map +1 -0
- package/dist/rules/declarations-constructor-injection.js +80 -0
- package/dist/rules/declarations-constructor-injection.js.map +1 -0
- package/dist/rules/imports-alias-only.d.ts.map +1 -1
- package/dist/rules/imports-alias-only.js +7 -9
- package/dist/rules/imports-alias-only.js.map +1 -1
- package/dist/rules/imports-extension.d.ts +5 -0
- package/dist/rules/imports-extension.d.ts.map +1 -0
- package/dist/rules/imports-extension.js +45 -0
- package/dist/rules/imports-extension.js.map +1 -0
- package/dist/rules/ports-no-concrete-dependency.d.ts +3 -1
- package/dist/rules/ports-no-concrete-dependency.d.ts.map +1 -1
- package/dist/rules/ports-no-concrete-dependency.js +51 -3
- package/dist/rules/ports-no-concrete-dependency.js.map +1 -1
- package/dist/rules/rules.d.ts.map +1 -1
- package/dist/rules/rules.js +4 -0
- package/dist/rules/rules.js.map +1 -1
- package/dist/support/declarations/declared-roles.d.ts.map +1 -1
- package/dist/support/declarations/declared-roles.js +1 -0
- package/dist/support/declarations/declared-roles.js.map +1 -1
- package/dist/support/injection/language-types.d.ts +3 -0
- package/dist/support/injection/language-types.d.ts.map +1 -0
- package/dist/support/injection/language-types.js +20 -0
- package/dist/support/injection/language-types.js.map +1 -0
- package/dist/support/injection/not-classes.d.ts +4 -0
- package/dist/support/injection/not-classes.d.ts.map +1 -0
- package/dist/support/injection/not-classes.js +20 -0
- package/dist/support/injection/not-classes.js.map +1 -0
- package/dist/support/injection/parameter-reading.d.ts +9 -0
- package/dist/support/injection/parameter-reading.d.ts.map +1 -0
- package/dist/support/injection/parameter-reading.js +2 -0
- package/dist/support/injection/parameter-reading.js.map +1 -0
- package/dist/support/injection/read-parameter.d.ts +9 -0
- package/dist/support/injection/read-parameter.d.ts.map +1 -0
- package/dist/support/injection/read-parameter.js +41 -0
- package/dist/support/injection/read-parameter.js.map +1 -0
- package/dist/support/injection/written-name.d.ts +4 -0
- package/dist/support/injection/written-name.d.ts.map +1 -0
- package/dist/support/injection/written-name.js +13 -0
- package/dist/support/injection/written-name.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/rules/clean-one-export-per-file.md +1 -1
- package/docs/rules/context-declared-relationship.md +2 -2
- package/docs/rules/context-extractable.md +3 -3
- package/docs/rules/context-published-language-is-a-contract.md +1 -1
- package/docs/rules/context-published-language-only.md +2 -2
- package/docs/rules/declarations-constructor-injection.md +89 -0
- package/docs/rules/declarations-role-declared.md +15 -9
- package/docs/rules/domain-events-transactional-before-commit.md +1 -1
- package/docs/rules/imports-alias-only.md +10 -9
- package/docs/rules/imports-extension.md +83 -0
- package/docs/rules/layer-application-inward.md +3 -3
- package/docs/rules/layer-domain-purity.md +3 -3
- package/docs/rules/layer-infrastructure-no-presentation.md +2 -2
- package/docs/rules/layer-presentation-no-infrastructure.md +2 -2
- package/docs/rules/ports-no-concrete-dependency.md +4 -3
- package/docs/rules/test-no-mocks.md +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -121,14 +121,16 @@ is an error whatever the configured limit). `strict` sets every rule to `error`.
|
|
|
121
121
|
| [`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
122
|
| [`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
123
|
| [`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 |
|
|
124
|
+
| [`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
125
|
| [`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
126
|
| [`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
127
|
| [`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
|
|
128
|
+
| [`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
129
|
| [`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
130
|
| [`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
131
|
| [`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
132
|
| [`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 |
|
|
133
|
+
| [`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
134
|
|
|
133
135
|
`domain/*` and `application/*` ids are added by this plugin: the shape of a class needs a syntax
|
|
134
136
|
tree, so the CLI checker has no equivalent. The `domain-events/*` ids are not among them: both tools
|
package/dist/project/config.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ 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';
|
|
19
21
|
/** Kept as written: with `prisma` the generated client under `generated/` has an import alias of its own. */
|
|
20
22
|
readonly orm: string;
|
|
21
23
|
}
|
|
@@ -38,6 +40,8 @@ export interface Config {
|
|
|
38
40
|
readonly sharedKernelDir: string;
|
|
39
41
|
readonly platformDir: string;
|
|
40
42
|
readonly importAlias: string;
|
|
43
|
+
/** `none` or `js`: whether an import of a file of the project ends with the extension of the emitted file. */
|
|
44
|
+
readonly importExtension: string;
|
|
41
45
|
readonly contexts: Readonly<Record<string, ContextConfig>>;
|
|
42
46
|
readonly rules: Readonly<Record<string, string>>;
|
|
43
47
|
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,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;
|
|
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;AAmB1C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAyBhD"}
|
|
@@ -6,6 +6,7 @@ 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'];
|
|
9
10
|
const KERNEL = ['@ddd-ts-kit/kernel'];
|
|
10
11
|
/** The application layer declares its permissions and policies with `@ddd-ts-kit/auth`, which imports the kernel only. */
|
|
11
12
|
const APPLICATION = [...KERNEL, '@ddd-ts-kit/auth'];
|
|
@@ -29,6 +30,8 @@ export function parseConfig(raw) {
|
|
|
29
30
|
sharedKernelDir: posix(text(source['sharedKernelDir'], `${sourceRoot}/shared-kernel`)),
|
|
30
31
|
platformDir: posix(text(source['platformDir'], `${sourceRoot}/platform`)),
|
|
31
32
|
importAlias: text(source['importAlias'], '@/'),
|
|
33
|
+
// A config without the key was written before it existed: its imports end with `.js`.
|
|
34
|
+
importExtension: text(source['importExtension'], 'js'),
|
|
32
35
|
contexts: mapEntries(source['contexts'], parseContext),
|
|
33
36
|
rules: mapEntries(source['rules'], String),
|
|
34
37
|
domainAllowedPackages: strings(source['domainAllowedPackages'], KERNEL),
|
|
@@ -45,6 +48,7 @@ function parseStack(value) {
|
|
|
45
48
|
return {
|
|
46
49
|
style: oneOf(STYLES, raw['style'], 'explicit'),
|
|
47
50
|
assembly: oneOf(ASSEMBLIES, raw['assembly'], 'barrel'),
|
|
51
|
+
dependencies: oneOf(DEPENDENCY_STATEMENTS, raw['dependencies'], 'listed'),
|
|
48
52
|
orm: text(raw['orm'], 'drizzle'),
|
|
49
53
|
};
|
|
50
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-config.js","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,cAAc,GAAW,EAAE,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;AAE1E,+GAA+G;AAC/G,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,MAAM,MAAM,GAAqB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAE1D,MAAM,UAAU,GAAwB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;
|
|
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;
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
|
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"}
|
package/dist/project/to-alias.js
CHANGED
|
@@ -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
|
|
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, '')}
|
|
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
|
|
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
|
|
72
|
-
|
|
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":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAiB,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGpE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AASrD,MAAM,MAAM,GAAG,mBAAmB,CAAC;AACnC,MAAM,IAAI,GAAG,2BAA2B,CAAC;AAEzC,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAA8C;IAC3F,EAAE,EAAE,2BAA2B;IAC/B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,OAAO;IACpB,WAAW,EACT,oJAAoJ;IACtJ,QAAQ,EAAE;QACR,OAAO,EACL,+VAA+V;QACjW,QAAQ,EACN,iMAAiM;QACnM,KAAK,EACH,6KAA6K;KAChL;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,oBAAoB,EAAE,KAAK;wBAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;wBAC5B,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;qBACrE;iBACF;gBACD,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;aACzE;SACF;KACF;IACD,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE;QACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;
|
|
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports-alias-only.d.ts","sourceRoot":"","sources":["../../src/rules/imports-alias-only.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"imports-alias-only.d.ts","sourceRoot":"","sources":["../../src/rules/imports-alias-only.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,0BAA0B,CAAC;AAUnE,KAAK,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAKpD,eAAO,MAAM,gBAAgB,2FA8B3B,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { aliasRoots } from '../project/alias-roots.js';
|
|
3
|
+
import { isJudged } from '../project/is-judged.js';
|
|
4
|
+
import { specifierSuffix } from '../project/specifier-suffix.js';
|
|
3
5
|
import { toAlias } from '../project/to-alias.js';
|
|
4
6
|
import { importListener } from '../support/imports/import-listener.js';
|
|
5
7
|
import { defineRule } from '../support/rule/define-rule.js';
|
|
6
8
|
const RELATIVE = /^\.{1,2}(?:\/|$)/;
|
|
7
9
|
const DOT_SEGMENT = /\/\.{1,2}(?:\/|$)/;
|
|
8
|
-
/** Written by a tool and never linted as project code. */
|
|
9
|
-
const BUILD_PRODUCTS = ['generated'];
|
|
10
10
|
export const importsAliasOnly = defineRule({
|
|
11
11
|
id: 'imports/alias-only',
|
|
12
12
|
type: 'suggestion',
|
|
@@ -24,19 +24,17 @@ export const importsAliasOnly = defineRule({
|
|
|
24
24
|
return {};
|
|
25
25
|
}
|
|
26
26
|
return importListener(file, ({ node, specifier }) => {
|
|
27
|
-
const finding = RELATIVE.test(specifier) ? relative(
|
|
27
|
+
const finding = RELATIVE.test(specifier) ? relative(file, specifier) : dotSegment(roots, specifier);
|
|
28
28
|
if (finding !== undefined) {
|
|
29
29
|
report({ node, ...finding, ...fixOf(node, finding) });
|
|
30
30
|
}
|
|
31
31
|
});
|
|
32
32
|
},
|
|
33
33
|
});
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
function relative(roots, file, specifier) {
|
|
39
|
-
const alias = toAlias(roots, path.posix.join(path.posix.dirname(file.path), specifier));
|
|
34
|
+
function relative(file, specifier) {
|
|
35
|
+
const roots = aliasRoots(file.config);
|
|
36
|
+
const suffix = specifierSuffix(file.config.importExtension);
|
|
37
|
+
const alias = toAlias(roots, path.posix.join(path.posix.dirname(file.path), specifier), suffix);
|
|
40
38
|
if (alias !== undefined) {
|
|
41
39
|
return { messageId: 'relative', data: { specifier, alias } };
|
|
42
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports-alias-only.js","sourceRoot":"","sources":["../../src/rules/imports-alias-only.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"imports-alias-only.js","sourceRoot":"","sources":["../../src/rules/imports-alias-only.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TSESLint } from '@typescript-eslint/utils';
|
|
2
|
+
type MessageId = 'unexpected' | 'missing';
|
|
3
|
+
export declare const importsExtension: TSESLint.RuleModule<MessageId, [], import("../index.js").RuleDocs, TSESLint.RuleListener>;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=imports-extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports-extension.d.ts","sourceRoot":"","sources":["../../src/rules/imports-extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,0BAA0B,CAAC;AAOnE,KAAK,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAM1C,eAAO,MAAM,gBAAgB,2FA6B3B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { aliasRoots } from '../project/alias-roots.js';
|
|
2
|
+
import { isJudged } from '../project/is-judged.js';
|
|
3
|
+
import { specifierSuffix } from '../project/specifier-suffix.js';
|
|
4
|
+
import { importListener } from '../support/imports/import-listener.js';
|
|
5
|
+
import { defineRule } from '../support/rule/define-rule.js';
|
|
6
|
+
/** The extensions a module of the project or the file emitted for it can bear. */
|
|
7
|
+
const EXTENSION = /\.(?:[cm]?js|[cm]?ts)$/;
|
|
8
|
+
const EMITTED = /\.[cm]?js$/;
|
|
9
|
+
export const importsExtension = defineRule({
|
|
10
|
+
id: 'imports/extension',
|
|
11
|
+
type: 'suggestion',
|
|
12
|
+
recommended: 'error',
|
|
13
|
+
fixable: 'code',
|
|
14
|
+
description: 'An import of a file of the project ends as "importExtension" says: with no extension under `none`, with `.js` under `js`.',
|
|
15
|
+
messages: {
|
|
16
|
+
unexpected: '"{{specifier}}" ends with "{{extension}}" although "importExtension" is "none". Write \'{{expected}}\': the compiler and every tool that reads the sources resolve the file without its extension, and the build writes the ".js" Node needs into the compiled output.',
|
|
17
|
+
missing: '"{{specifier}}" does not end with ".js" although "importExtension" is "js". Write \'{{expected}}\', the name of the file the compiler emits: the compiler resolves as Node does and refuses any other spelling.',
|
|
18
|
+
},
|
|
19
|
+
create({ file, report }) {
|
|
20
|
+
const roots = aliasRoots(file.config);
|
|
21
|
+
const suffix = specifierSuffix(file.config.importExtension);
|
|
22
|
+
if (!isJudged(roots, file)) {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
return importListener(file, ({ node, specifier }) => {
|
|
26
|
+
const finding = roots.some(({ prefix }) => specifier.startsWith(prefix)) ? judged(specifier, suffix) : undefined;
|
|
27
|
+
if (finding !== undefined) {
|
|
28
|
+
report({ node, ...finding, fix: fixOf(node, finding.data.expected) });
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
function judged(specifier, suffix) {
|
|
34
|
+
const extension = EXTENSION.exec(specifier)?.[0] ?? '';
|
|
35
|
+
const expected = `${specifier.slice(0, specifier.length - extension.length)}${suffix}`;
|
|
36
|
+
if (suffix === '') {
|
|
37
|
+
return extension === '' ? undefined : { messageId: 'unexpected', data: { specifier, extension, expected } };
|
|
38
|
+
}
|
|
39
|
+
return EMITTED.test(specifier) ? undefined : { messageId: 'missing', data: { specifier, extension, expected } };
|
|
40
|
+
}
|
|
41
|
+
/** The specifier rewritten in place, between the quotes it was written with. */
|
|
42
|
+
function fixOf(node, expected) {
|
|
43
|
+
return (fixer) => fixer.replaceTextRange([node.range[0] + 1, node.range[1] - 1], expected);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=imports-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports-extension.js","sourceRoot":"","sources":["../../src/rules/imports-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
type MessageId = 'concrete' | 'typed';
|
|
2
|
+
export declare const portsNoConcreteDependency: import("@typescript-eslint/utils/ts-eslint").RuleModule<MessageId, [], import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
3
|
+
export {};
|
|
2
4
|
//# sourceMappingURL=ports-no-concrete-dependency.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports-no-concrete-dependency.d.ts","sourceRoot":"","sources":["../../src/rules/ports-no-concrete-dependency.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ports-no-concrete-dependency.d.ts","sourceRoot":"","sources":["../../src/rules/ports-no-concrete-dependency.ts"],"names":[],"mappings":"AAcA,KAAK,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAEtC,eAAO,MAAM,yBAAyB,mKAqCpC,CAAC"}
|