@ddd-ts-kit/eslint-plugin 0.5.0 → 0.7.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/LICENSE +21 -0
- package/README.md +3 -1
- package/dist/presets/create-ddd-ts-kit.d.ts.map +1 -1
- package/dist/presets/create-ddd-ts-kit.js +6 -1
- package/dist/presets/create-ddd-ts-kit.js.map +1 -1
- package/dist/project/config.d.ts +8 -0
- package/dist/project/config.d.ts.map +1 -1
- package/dist/project/parse-config.d.ts.map +1 -1
- package/dist/project/parse-config.js +9 -0
- package/dist/project/parse-config.js.map +1 -1
- package/dist/rules/clean-no-magic-number.d.ts +6 -0
- package/dist/rules/clean-no-magic-number.d.ts.map +1 -0
- package/dist/rules/clean-no-magic-number.js +99 -0
- package/dist/rules/clean-no-magic-number.js.map +1 -0
- package/dist/rules/declarations-role-declared.d.ts.map +1 -1
- package/dist/rules/declarations-role-declared.js +31 -9
- package/dist/rules/declarations-role-declared.js.map +1 -1
- package/dist/rules/events-name-format.d.ts.map +1 -1
- package/dist/rules/events-name-format.js +7 -1
- package/dist/rules/events-name-format.js.map +1 -1
- package/dist/rules/language-declared-vocabulary.d.ts +2 -0
- package/dist/rules/language-declared-vocabulary.d.ts.map +1 -0
- package/dist/rules/language-declared-vocabulary.js +70 -0
- package/dist/rules/language-declared-vocabulary.js.map +1 -0
- 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/classes/class-finder.d.ts.map +1 -1
- package/dist/support/classes/class-finder.js +2 -9
- package/dist/support/classes/class-finder.js.map +1 -1
- package/dist/support/parse/parse-source.d.ts +9 -0
- package/dist/support/parse/parse-source.d.ts.map +1 -0
- package/dist/support/parse/parse-source.js +21 -0
- package/dist/support/parse/parse-source.js.map +1 -0
- package/dist/support/vocabularies/declared-value.d.ts +14 -0
- package/dist/support/vocabularies/declared-value.d.ts.map +1 -0
- package/dist/support/vocabularies/declared-value.js +2 -0
- package/dist/support/vocabularies/declared-value.js.map +1 -0
- package/dist/support/vocabularies/project-vocabularies.d.ts +12 -0
- package/dist/support/vocabularies/project-vocabularies.d.ts.map +1 -0
- package/dist/support/vocabularies/project-vocabularies.js +47 -0
- package/dist/support/vocabularies/project-vocabularies.js.map +1 -0
- package/dist/support/vocabularies/values-declared-in.d.ts +16 -0
- package/dist/support/vocabularies/values-declared-in.d.ts.map +1 -0
- package/dist/support/vocabularies/values-declared-in.js +108 -0
- package/dist/support/vocabularies/values-declared-in.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/rules/clean-no-magic-number.md +59 -0
- package/docs/rules/declarations-role-declared.md +3 -3
- package/docs/rules/events-name-format.md +8 -4
- package/docs/rules/language-declared-vocabulary.md +64 -0
- package/package.json +1 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Gary Bourgeat
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ export default dddTsKit({ tsconfigRootDir: import.meta.dirname });
|
|
|
45
45
|
| `tsconfigRootDir` | the working directory | directory of the tsconfig and of `ddd-ts-kit.config.json` |
|
|
46
46
|
| `typeChecked` | `true` | add the rules that read types; `false` is faster and needs no tsconfig |
|
|
47
47
|
| `allowDefaultProject` | `['*.config.ts', '*.config.mts']` | files outside the tsconfig still linted with types |
|
|
48
|
-
| `ignores` | none | added to `dist`, `coverage`, `node_modules`, `reports`, `*.d.ts` |
|
|
48
|
+
| `ignores` | none | added to `dist`, `coverage`, `node_modules`, `reports`, `*.d.ts`, and `clients/*/src` when `ddd-ts-kit.config.json` has `"sdk"` (the clients the CLI generates) |
|
|
49
49
|
|
|
50
50
|
To compose a config by hand, the plugin is the default export, with two presets that hold only
|
|
51
51
|
its own rules, the three typescript-eslint rules they delegate to and the four layout rules of
|
|
@@ -85,6 +85,7 @@ is an error whatever the configured limit). `strict` sets every rule to `error`.
|
|
|
85
85
|
| [`context/published-language-only`](docs/rules/context-published-language-only.md) | `ddd-ts-kit/context-published-language-only` | another context is imported only through its `published-language/` | `error` | custom |
|
|
86
86
|
| [`context/declared-relationship`](docs/rules/context-declared-relationship.md) | `ddd-ts-kit/context-declared-relationship` | such an import needs the upstream declared in the config | `error` | custom |
|
|
87
87
|
| [`context/published-language-is-a-contract`](docs/rules/context-published-language-is-a-contract.md) | `ddd-ts-kit/context-published-language-is-a-contract` | `published-language/` imports only its allow-list and other published languages | `error` | custom |
|
|
88
|
+
| [`language/declared-vocabulary`](docs/rules/language-declared-vocabulary.md) | `ddd-ts-kit/language-declared-vocabulary` | a value of a closed vocabulary the project declares (an object `as const` with the union type of its name, a permission set) is read through it, never written again as a string, under `"stack.literals": "named"`; tests and published languages excluded | `error` | custom |
|
|
88
89
|
| [`purity/no-system-clock`](docs/rules/purity-no-system-clock.md) | `ddd-ts-kit/purity-no-system-clock` | no `new Date()`, `Date.now()`, `Date()`, `performance.now()` in `domain/` and `application/` | `error` | custom |
|
|
89
90
|
| [`purity/no-ambient-randomness`](docs/rules/purity-no-ambient-randomness.md) | `ddd-ts-kit/purity-no-ambient-randomness` | no `Math.random`, `crypto.randomUUID`, id library in `domain/` and `application/` | `error` | custom |
|
|
90
91
|
| [`purity/no-environment`](docs/rules/purity-no-environment.md) | `ddd-ts-kit/purity-no-environment` | no `process.env`, `console`, `fetch`, file system or network module in `domain/` and `application/` | `error` | custom |
|
|
@@ -98,6 +99,7 @@ is an error whatever the configured limit). `strict` sets every rule to `error`.
|
|
|
98
99
|
| [`clean/no-hash-private`](docs/rules/clean-no-hash-private.md) | `ddd-ts-kit/clean-no-hash-private` | a class member is `private`, never `#name`; fixable | `error` | custom |
|
|
99
100
|
| [`clean/one-export-per-file`](docs/rules/clean-one-export-per-file.md) | `ddd-ts-kit/clean-one-export-per-file` | one exported class, interface or function per source file, with the types of its signature, the file named after it; entry files only re-export | `error` | custom |
|
|
100
101
|
| [`clean/file-size`](docs/rules/clean-file-size.md) | `ddd-ts-kit/clean-file-size` | no file over 350 lines, tests included | `error` | custom |
|
|
102
|
+
| [`clean/no-magic-number`](docs/rules/clean-no-magic-number.md) | `ddd-ts-kit/clean-no-magic-number` | no number literal in `domain/` and `application/` but 0, 1, -1, an index, a type and the initializer of a module constant or a `static readonly`, under `"stack.literals": "named"` | `error` | custom |
|
|
101
103
|
| [`clean/blank-lines`](docs/rules/clean-blank-lines.md) | two `@stylistic/*` rules (`standardRules.layout`) | a blank line before every `return` and between logical blocks, around a method; fixable | `error` | standard |
|
|
102
104
|
| [`clean/braces`](docs/rules/clean-braces.md) | `curly` (`standardRules.braces`) | every `if`, `else`, `for`, `while` and `do` has braces; fixable | `error` | standard |
|
|
103
105
|
| [`clean/formatted`](docs/rules/clean-formatted.md) | none: Biome (`npm run format:check`) | every file is laid out by the formatter, at a line width of 120 | none | formatter |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-ddd-ts-kit.d.ts","sourceRoot":"","sources":["../../src/presets/create-ddd-ts-kit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAsBzD,KAAK,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;AAEnD,KAAK,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,iGAAiG;IACjG,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,0GAA0G;IAC1G,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,kHAAkH;IAClH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,eAAO,MAAM,gBAAgB,UAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"create-ddd-ts-kit.d.ts","sourceRoot":"","sources":["../../src/presets/create-ddd-ts-kit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAsBzD,KAAK,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;AAEnD,KAAK,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,iGAAiG;IACjG,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,0GAA0G;IAC1G,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,kHAAkH;IAClH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,eAAO,MAAM,gBAAgB,UAAsC,CAAC;AAiBpE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,WAAW,CAuBzF"}
|
|
@@ -12,6 +12,8 @@ import { layoutRules } from './layout-rules.js';
|
|
|
12
12
|
import { AGGREGATE_RULES, CLEAN_CODE_RULES, ESCAPE_HATCH_RULES, INNER_LAYER_RULES, KIT_CONVENTIONS, TEST_RULES, TYPED_CLEAN_CODE_RULES, } from './standard-rules.js';
|
|
13
13
|
export const TYPESCRIPT_FILES = ['**/*.ts', '**/*.mts', '**/*.cts'];
|
|
14
14
|
const DEFAULT_IGNORES = ['**/dist/**', '**/coverage/**', '**/node_modules/**', '**/reports/**', '**/*.d.ts'];
|
|
15
|
+
/** The sources of the clients `ddd-ts-kit sdk` generates from the contract, in a project whose config asks for them ("sdk"). */
|
|
16
|
+
const CLIENT_SOURCES = 'clients/*/src/**';
|
|
15
17
|
/** The architecture id whose severity drives the layout rules of `@stylistic/eslint-plugin`. */
|
|
16
18
|
const LAYOUT_ID = 'clean/blank-lines';
|
|
17
19
|
/** The architecture id whose severity drives `curly`. */
|
|
@@ -28,7 +30,7 @@ export function createDddTsKit(plugin, options = {}) {
|
|
|
28
30
|
const config = findProject(root)?.config ?? parseConfig({});
|
|
29
31
|
const standard = options.typeChecked === false ? untyped() : typed(root, options.allowDefaultProject ?? DEFAULT_PROJECT_FILES);
|
|
30
32
|
return [
|
|
31
|
-
{ name: 'ddd-ts-kit/ignores', ignores:
|
|
33
|
+
{ name: 'ddd-ts-kit/ignores', ignores: ignoresOf(config, options) },
|
|
32
34
|
js.configs.recommended,
|
|
33
35
|
...standard.presets,
|
|
34
36
|
{ name: 'ddd-ts-kit/clean-code', files: TYPESCRIPT_FILES, rules: standard.rules },
|
|
@@ -44,6 +46,9 @@ export function createDddTsKit(plugin, options = {}) {
|
|
|
44
46
|
{ name: 'ddd-ts-kit/tests', files: testFiles(config), rules: standard.testRules },
|
|
45
47
|
];
|
|
46
48
|
}
|
|
49
|
+
function ignoresOf(config, options) {
|
|
50
|
+
return [...DEFAULT_IGNORES, ...(config.sdk !== undefined ? [CLIENT_SOURCES] : []), ...(options.ignores ?? [])];
|
|
51
|
+
}
|
|
47
52
|
function typed(root, allowDefaultProject) {
|
|
48
53
|
return {
|
|
49
54
|
presets: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-ddd-ts-kit.js","sourceRoot":"","sources":["../../src/presets/create-ddd-ts-kit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,SAAS,MAAM,0BAA0B,CAAC;AAEjD,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAgB,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAiB7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAEpE,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;AAE7G,gGAAgG;AAChG,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAEtC,yDAAyD;AACzD,MAAM,SAAS,GAAG,cAAc,CAAC;AAEjC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAE7D,MAAM,qBAAqB,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAO,GAAoB,EAAE;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IAE5D,MAAM,QAAQ,GACZ,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,mBAAmB,IAAI,qBAAqB,CAAC,CAAC;IAEhH,OAAO;QACL,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"create-ddd-ts-kit.js","sourceRoot":"","sources":["../../src/presets/create-ddd-ts-kit.ts"],"names":[],"mappings":"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"}
|
package/dist/project/config.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export interface Stack {
|
|
|
20
20
|
readonly dependencies: 'signature' | 'listed';
|
|
21
21
|
/** How a domain error is written: static factories on one class per concept, or a class per error. A config that does not say is `classes`. */
|
|
22
22
|
readonly refusals: 'factories' | 'classes';
|
|
23
|
+
/** `named`: a value of a declared vocabulary and a number of the model are read through a name. A config that does not say is `free`, and both rules are silent. */
|
|
24
|
+
readonly literals: 'named' | 'free';
|
|
23
25
|
/** Kept as written: with `prisma` the generated client under `generated/` has an import alias of its own. */
|
|
24
26
|
readonly orm: string;
|
|
25
27
|
}
|
|
@@ -55,5 +57,11 @@ export interface Config {
|
|
|
55
57
|
readonly stack: Stack;
|
|
56
58
|
/** Names reported by `standard/no-parallel-interface`, over its defaults: the kernel interface to use instead, or `false` to drop a default. */
|
|
57
59
|
readonly standardInterfaces: Readonly<Record<string, string | false>>;
|
|
60
|
+
/** The clients generated from the contract (`ddd-ts-kit sdk`), whose sources under `clients/` are not linted; none without the key. */
|
|
61
|
+
readonly sdk: SdkConfig | undefined;
|
|
62
|
+
}
|
|
63
|
+
/** Of the clients of the contract, the plugin reads that they are asked for and their package name. */
|
|
64
|
+
export interface SdkConfig {
|
|
65
|
+
readonly name: string;
|
|
58
66
|
}
|
|
59
67
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/project/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9C,6EAA6E;AAC7E,MAAM,WAAW,KAAK;IACpB,qIAAqI;IACrI,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,iHAAiH;IACjH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,yJAAyJ;IACzJ,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC9C,+IAA+I;IAC/I,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,CAAC;IAC3C,6GAA6G;IAC7G,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8GAA8G;IAC9G,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,0BAA0B,EAAE,SAAS,MAAM,EAAE,CAAC;IACvD,QAAQ,CAAC,gCAAgC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kGAAkG;IAClG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,gJAAgJ;IAChJ,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/project/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9C,6EAA6E;AAC7E,MAAM,WAAW,KAAK;IACpB,qIAAqI;IACrI,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,iHAAiH;IACjH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,yJAAyJ;IACzJ,QAAQ,CAAC,YAAY,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC9C,+IAA+I;IAC/I,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,CAAC;IAC3C,oKAAoK;IACpK,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,6GAA6G;IAC7G,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,8GAA8G;IAC9G,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,0BAA0B,EAAE,SAAS,MAAM,EAAE,CAAC;IACvD,QAAQ,CAAC,gCAAgC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kGAAkG;IAClG,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,gJAAgJ;IAChJ,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IACtE,uIAAuI;IACvI,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC;AAED,uGAAuG;AACvG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAQV,MAAM,EAEP,MAAM,aAAa,CAAC;AAOrB,+GAA+G;AAC/G,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAwB1C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CA0BhD"}
|
|
@@ -8,7 +8,10 @@ const STYLES = ['declared', 'explicit'];
|
|
|
8
8
|
const ASSEMBLIES = ['barrel', 'discovery'];
|
|
9
9
|
const DEPENDENCY_STATEMENTS = ['signature', 'listed'];
|
|
10
10
|
const REFUSAL_FORMS = ['factories', 'classes'];
|
|
11
|
+
const LITERAL_FORMS = ['named', 'free'];
|
|
11
12
|
const KERNEL = ['@ddd-ts-kit/kernel'];
|
|
13
|
+
/** The package name of a client when "sdk" does not give one, as the CLI writes it. */
|
|
14
|
+
const DEFAULT_SDK_NAME = '{project}-{document}-client';
|
|
12
15
|
/** The application layer declares its permissions and policies with `@ddd-ts-kit/auth`, which imports the kernel only. */
|
|
13
16
|
const APPLICATION = [...KERNEL, '@ddd-ts-kit/auth'];
|
|
14
17
|
const SCHEMA_LIBRARIES = {
|
|
@@ -42,8 +45,13 @@ export function parseConfig(raw) {
|
|
|
42
45
|
onePerFile: parseOnePerFile(source['onePerFile']),
|
|
43
46
|
stack: parseStack(source['stack']),
|
|
44
47
|
standardInterfaces: parseStandardInterfaces(source['standardInterfaces']),
|
|
48
|
+
sdk: parseSdk(source['sdk']),
|
|
45
49
|
};
|
|
46
50
|
}
|
|
51
|
+
/** A key that is not an object asks for no client, as in the CLI. */
|
|
52
|
+
function parseSdk(value) {
|
|
53
|
+
return isRecord(value) ? { name: text(value['name'], DEFAULT_SDK_NAME) } : undefined;
|
|
54
|
+
}
|
|
47
55
|
function parseStack(value) {
|
|
48
56
|
const raw = isRecord(value) ? value : {};
|
|
49
57
|
return {
|
|
@@ -51,6 +59,7 @@ function parseStack(value) {
|
|
|
51
59
|
assembly: oneOf(ASSEMBLIES, raw['assembly'], 'barrel'),
|
|
52
60
|
dependencies: oneOf(DEPENDENCY_STATEMENTS, raw['dependencies'], 'listed'),
|
|
53
61
|
refusals: oneOf(REFUSAL_FORMS, raw['refusals'], 'classes'),
|
|
62
|
+
literals: oneOf(LITERAL_FORMS, raw['literals'], 'free'),
|
|
54
63
|
orm: text(raw['orm'], 'drizzle'),
|
|
55
64
|
};
|
|
56
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-config.js","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parse-config.js","sourceRoot":"","sources":["../../src/project/parse-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
type Options = [{
|
|
2
|
+
readonly allow?: readonly number[];
|
|
3
|
+
}];
|
|
4
|
+
export declare const cleanNoMagicNumber: import("@typescript-eslint/utils/ts-eslint").RuleModule<"magic", Options, import("../index.js").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=clean-no-magic-number.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean-no-magic-number.d.ts","sourceRoot":"","sources":["../../src/rules/clean-no-magic-number.ts"],"names":[],"mappings":"AAKA,KAAK,OAAO,GAAG,CAAC;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC;AAKxD,eAAO,MAAM,kBAAkB,sKA2C7B,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from '@typescript-eslint/utils';
|
|
2
|
+
import { defineRule } from '../support/rule/define-rule.js';
|
|
3
|
+
/** Counting from nothing, one more, the last: these say what they are. */
|
|
4
|
+
const ALLOWED = [0, 1, -1];
|
|
5
|
+
export const cleanNoMagicNumber = defineRule({
|
|
6
|
+
id: 'clean/no-magic-number',
|
|
7
|
+
type: 'suggestion',
|
|
8
|
+
recommended: 'error',
|
|
9
|
+
description: 'Under "stack.literals": "named", no number literal in domain/ and application/ but 0, 1, -1 and an index: a duration, a limit or a rate is a named constant of the module or a value object.',
|
|
10
|
+
messages: {
|
|
11
|
+
magic: '{{value}} is a number without a name. Name it where it is decided: a constant of the module (`const LONGEST_ADDRESS = 254;`, `const MINUTES_PER_HOUR = 60;`), a `static readonly` of the class, or a value object when it is a duration, an amount or a limit of the business. The rule allows {{allowed}}, an index and a type.',
|
|
12
|
+
},
|
|
13
|
+
schema: [
|
|
14
|
+
{
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: { allow: { type: 'array', items: { type: 'number' } } },
|
|
17
|
+
additionalProperties: false,
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
defaultOptions: [{}],
|
|
21
|
+
create({ file, options, report }) {
|
|
22
|
+
if (file.config.stack.literals !== 'named' || !isJudged(file)) {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
const allowed = options[0].allow ?? ALLOWED;
|
|
26
|
+
return {
|
|
27
|
+
Literal(node) {
|
|
28
|
+
if (typeof node.value !== 'number' && typeof node.value !== 'bigint') {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const signed = signedValue(node);
|
|
32
|
+
if (!allowed.includes(Number(signed.value)) && !isNamed(signed.node)) {
|
|
33
|
+
report({
|
|
34
|
+
node: signed.node,
|
|
35
|
+
messageId: 'magic',
|
|
36
|
+
data: { value: String(signed.value), allowed: allowed.join(', ') },
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
function isJudged(file) {
|
|
44
|
+
return (!file.isTest &&
|
|
45
|
+
file.location.area === 'context' &&
|
|
46
|
+
(file.location.layer === 'domain' || file.location.layer === 'application'));
|
|
47
|
+
}
|
|
48
|
+
/** `-1` is one literal for a reader: the minus goes with it. */
|
|
49
|
+
function signedValue(node) {
|
|
50
|
+
const { parent } = node;
|
|
51
|
+
const value = typeof node.value === 'bigint' ? node.value : Number(node.value);
|
|
52
|
+
if (parent.type === AST_NODE_TYPES.UnaryExpression && parent.operator === '-') {
|
|
53
|
+
return { node: parent, value: -value };
|
|
54
|
+
}
|
|
55
|
+
return { node, value };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Where a number is given its name: the initializer of a constant of the module, a `static
|
|
59
|
+
* readonly` field, a member of an enum, an index, a type. A function in between is a use, not a
|
|
60
|
+
* declaration.
|
|
61
|
+
*/
|
|
62
|
+
function isNamed(node) {
|
|
63
|
+
if (isIndexOrType(node)) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
// The parent of the program is null at run time, whatever its type says.
|
|
67
|
+
for (let current = node.parent; isNode(current); current = current.parent) {
|
|
68
|
+
if (isFunctionNode(current)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (isDeclaringPlace(current)) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
function isIndexOrType(node) {
|
|
78
|
+
const { parent } = node;
|
|
79
|
+
return ((parent?.type === AST_NODE_TYPES.MemberExpression && parent.computed && parent.property === node) ||
|
|
80
|
+
parent?.type === AST_NODE_TYPES.TSLiteralType ||
|
|
81
|
+
parent?.type === AST_NODE_TYPES.TSEnumMember);
|
|
82
|
+
}
|
|
83
|
+
function isFunctionNode(node) {
|
|
84
|
+
return (node.type === AST_NODE_TYPES.FunctionDeclaration ||
|
|
85
|
+
node.type === AST_NODE_TYPES.FunctionExpression ||
|
|
86
|
+
node.type === AST_NODE_TYPES.ArrowFunctionExpression);
|
|
87
|
+
}
|
|
88
|
+
function isDeclaringPlace(node) {
|
|
89
|
+
if (node.type === AST_NODE_TYPES.PropertyDefinition) {
|
|
90
|
+
return node.static && node.readonly;
|
|
91
|
+
}
|
|
92
|
+
return (node.type === AST_NODE_TYPES.VariableDeclaration &&
|
|
93
|
+
node.kind === 'const' &&
|
|
94
|
+
(node.parent.type === AST_NODE_TYPES.Program || node.parent.type === AST_NODE_TYPES.ExportNamedDeclaration));
|
|
95
|
+
}
|
|
96
|
+
function isNode(node) {
|
|
97
|
+
return node !== undefined && node !== null;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=clean-no-magic-number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean-no-magic-number.js","sourceRoot":"","sources":["../../src/rules/clean-no-magic-number.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declarations-role-declared.d.ts","sourceRoot":"","sources":["../../src/rules/declarations-role-declared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"declarations-role-declared.d.ts","sourceRoot":"","sources":["../../src/rules/declarations-role-declared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AAuBxF,KAAK,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;AAGhF,eAAO,MAAM,wBAAwB,2FAgDnC,CAAC"}
|
|
@@ -9,6 +9,7 @@ import { WRITTEN_NAMES } from '../support/declarations/written-names.js';
|
|
|
9
9
|
import { declaredRoleOf } from '../support/declarations/declared-role-of.js';
|
|
10
10
|
import { isDeclaredStyle } from '../support/declarations/is-declared-style.js';
|
|
11
11
|
import { writtenName } from '../support/declarations/written-name.js';
|
|
12
|
+
import { propertyOf } from '../support/calls/property-of.js';
|
|
12
13
|
import { defineRule } from '../support/rule/define-rule.js';
|
|
13
14
|
import { inContext } from '../support/imports/in-context.js';
|
|
14
15
|
import { staticString } from '../support/imports/static-string.js';
|
|
@@ -21,7 +22,7 @@ export const declarationsRoleDeclared = defineRule({
|
|
|
21
22
|
messages: {
|
|
22
23
|
undeclared: `This file is a role file of the declared style (\`*.{{suffix}}.ts\` under {{folder}}/) but exports no class carrying \`@{{expected}}\`. Put \`@{{expected}}(...)\` from "${DECLARATIONS_ENTRY}" on the exported class: a class that does not say what it is is in no assembly and is never registered.`,
|
|
23
24
|
wrongRole: '{{className}} carries `@{{actual}}` in a `*.{{suffix}}.ts` file under {{folder}}/, where a class is declared with `@{{expected}}`. Move the class to the file of its role, or declare it with `@{{expected}}(...)`: the file name, the folder and the decorator say the same thing.',
|
|
24
|
-
name: "`@{{decorator}}` of {{className}} has a `{{key}}` that is {{problem}}. Write `{ {{key}}: '{{context}}.<name>' }` as a string literal: the name is written once
|
|
25
|
+
name: "`@{{decorator}}` of {{className}} has a `{{key}}` that is {{problem}}. Write `{ {{key}}: '{{context}}.<name>' }` as a string literal, or for a domain event handler the name its event class declares, `{ name: <Event>.eventName }`: the name is written once and survives the renaming of the class.",
|
|
25
26
|
eventName: '`@DomainEventHandler` of {{className}} names "{{declared}}", but {{event}} is named "{{actual}}". Write `{ name: \'{{actual}}\' }`: a handler names the domain event it reacts to by the name the event carries.',
|
|
26
27
|
inDomain: '{{className}} carries `@{{decorator}}` under domain/: the domain declares nothing. Aggregates, entities, value objects, events, services and repository ports carry no decorator and no dependency list. Remove the decorator and declare the class of application/ or infrastructure/ that plays the role.',
|
|
27
28
|
},
|
|
@@ -94,7 +95,7 @@ function misdeclaredRole(program, role, declarationsOf) {
|
|
|
94
95
|
function unwrittenName(node, declaration, context) {
|
|
95
96
|
const key = WRITTEN_NAMES[declaration.name];
|
|
96
97
|
const written = key === undefined ? undefined : writtenName(declaration.arguments[1], key);
|
|
97
|
-
if (key === undefined || written === undefined || 'value' in written) {
|
|
98
|
+
if (key === undefined || written === undefined || 'value' in written || readsEventName(declaration)) {
|
|
98
99
|
return undefined;
|
|
99
100
|
}
|
|
100
101
|
return {
|
|
@@ -121,16 +122,37 @@ function renamedEvent(node, declaration, findClass) {
|
|
|
121
122
|
data: { className: className(node), declared: declared.value, event: event.name, actual },
|
|
122
123
|
};
|
|
123
124
|
}
|
|
124
|
-
/**
|
|
125
|
+
/** `@DomainEventHandler(InvoiceIssued, { name: InvoiceIssued.eventName })`: the name the event class declares, read where it is written. */
|
|
126
|
+
function readsEventName(declaration) {
|
|
127
|
+
const [event, options] = declaration.arguments;
|
|
128
|
+
const property = options?.type === AST_NODE_TYPES.ObjectExpression ? propertyOf(options, 'name') : undefined;
|
|
129
|
+
return (declaration.name === 'DomainEventHandler' &&
|
|
130
|
+
event?.type === AST_NODE_TYPES.Identifier &&
|
|
131
|
+
property !== undefined &&
|
|
132
|
+
memberName(property.value) === `${event.name}.eventName`);
|
|
133
|
+
}
|
|
134
|
+
/** `InvoiceIssued.eventName` for a member read on a name; undefined for anything else. */
|
|
135
|
+
function memberName(node) {
|
|
136
|
+
if (node.type !== AST_NODE_TYPES.MemberExpression || node.computed) {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
const { object, property } = node;
|
|
140
|
+
return object.type === AST_NODE_TYPES.Identifier && property.type === AST_NODE_TYPES.Identifier
|
|
141
|
+
? `${object.name}.${property.name}`
|
|
142
|
+
: undefined;
|
|
143
|
+
}
|
|
144
|
+
/** `static readonly eventName = 'billing.invoice.issued';`, or `readonly name = '..'` as 0.5 wrote it, with or without `as const`. */
|
|
125
145
|
function eventName(event) {
|
|
126
146
|
for (const member of event.body.body) {
|
|
127
|
-
|
|
128
|
-
member.computed
|
|
129
|
-
keyName(member.key)
|
|
130
|
-
member.value
|
|
131
|
-
|
|
147
|
+
const written = member.type === AST_NODE_TYPES.PropertyDefinition &&
|
|
148
|
+
!member.computed &&
|
|
149
|
+
['name', 'eventName'].includes(keyName(member.key) ?? '')
|
|
150
|
+
? member.value
|
|
151
|
+
: null;
|
|
152
|
+
const value = written === null ? undefined : staticString(unwrapped(written));
|
|
153
|
+
if (value !== undefined) {
|
|
154
|
+
return value;
|
|
132
155
|
}
|
|
133
|
-
return staticString(unwrapped(member.value));
|
|
134
156
|
}
|
|
135
157
|
return undefined;
|
|
136
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declarations-role-declared.js","sourceRoot":"","sources":["../../src/rules/declarations-role-declared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgC,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,SAAS,EAAkB,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAGlB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"declarations-role-declared.js","sourceRoot":"","sources":["../../src/rules/declarations-role-declared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-name-format.d.ts","sourceRoot":"","sources":["../../src/rules/events-name-format.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"events-name-format.d.ts","sourceRoot":"","sources":["../../src/rules/events-name-format.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,gBAAgB,kKAqC3B,CAAC"}
|
|
@@ -19,7 +19,9 @@ export const eventsNameFormat = defineRule({
|
|
|
19
19
|
return {};
|
|
20
20
|
}
|
|
21
21
|
const judge = (node) => {
|
|
22
|
-
const value = node.value === null || node.computed || keyName(node.key)
|
|
22
|
+
const value = node.value === null || node.computed || !isJudgedKey(keyName(node.key), key)
|
|
23
|
+
? undefined
|
|
24
|
+
: staticString(node.value);
|
|
23
25
|
if (value === undefined || isEventName(value, here.context)) {
|
|
24
26
|
return;
|
|
25
27
|
}
|
|
@@ -32,6 +34,10 @@ export const eventsNameFormat = defineRule({
|
|
|
32
34
|
return { Property: judge, PropertyDefinition: judge };
|
|
33
35
|
},
|
|
34
36
|
});
|
|
37
|
+
/** A domain event declares its name once in the static `eventName`, or in `name` as 0.5 wrote it. */
|
|
38
|
+
function isJudgedKey(written, key) {
|
|
39
|
+
return written === key || (key === 'name' && written === 'eventName');
|
|
40
|
+
}
|
|
35
41
|
/** A domain event carries its name in `name`, an integration event in the `type` of its declaration. */
|
|
36
42
|
function judgedKey(here) {
|
|
37
43
|
if (here.layer === 'domain' && here.inside[0] === 'events') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-name-format.js","sourceRoot":"","sources":["../../src/rules/events-name-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAInE,MAAM,aAAa,GAAG,4BAA4B,CAAC;AAEnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAW;IACnD,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,sGAAsG;IACnH,QAAQ,EAAE;QACR,MAAM,EACJ,0LAA0L;KAC7L;IACD,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;QACrB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE5E,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,IAAW,EAAQ,EAAE;YAClC,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"events-name-format.js","sourceRoot":"","sources":["../../src/rules/events-name-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-declared-vocabulary.d.ts","sourceRoot":"","sources":["../../src/rules/language-declared-vocabulary.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,0BAA0B,+JA6CrC,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from '@typescript-eslint/utils';
|
|
2
|
+
import { defineRule } from '../support/rule/define-rule.js';
|
|
3
|
+
import { projectVocabularies } from '../support/vocabularies/project-vocabularies.js';
|
|
4
|
+
/** The relationship schema of the access model declares its relations: like a published language, it names its values itself. */
|
|
5
|
+
const RELATIONSHIP_SCHEMA = /(?<![\w$.])defineSchema\s*\(/;
|
|
6
|
+
export const languageDeclaredVocabulary = defineRule({
|
|
7
|
+
id: 'language/declared-vocabulary',
|
|
8
|
+
type: 'suggestion',
|
|
9
|
+
recommended: 'error',
|
|
10
|
+
description: 'Under "stack.literals": "named", a value of a closed vocabulary the project declares is read through it, never written again as a string literal: in its context, in the platform and the route groups for the platform, everywhere for a permission id.',
|
|
11
|
+
messages: {
|
|
12
|
+
raw: '"{{value}}" is a value of {{vocabularies}}. Write {{written}}, as a computed key `[..]:` for a key: the value is declared once, the editor completes it and a typo stops the build.',
|
|
13
|
+
},
|
|
14
|
+
create({ context, file, sourceCode, report }) {
|
|
15
|
+
if (file.config.stack.literals !== 'named' || !isJudged(file) || RELATIONSHIP_SCHEMA.test(sourceCode.text)) {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
const declared = projectVocabularies(file, context.languageOptions.parser);
|
|
19
|
+
const judge = (node, value) => {
|
|
20
|
+
const known = (declared.get(value) ?? []).filter((candidate) => isReadBy(file, candidate));
|
|
21
|
+
if (known.length > 0 && !known.some((at) => at.file === file.path) && !isSpecifier(node)) {
|
|
22
|
+
const vocabularies = known.map(({ vocabulary, file: at }) => `${vocabulary} (${at})`).join(' and of ');
|
|
23
|
+
report({
|
|
24
|
+
node,
|
|
25
|
+
messageId: 'raw',
|
|
26
|
+
data: { value, vocabularies, written: known.map(({ written }) => written).join(' or ') },
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
Literal(node) {
|
|
32
|
+
if (typeof node.value === 'string') {
|
|
33
|
+
judge(node, node.value);
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
TemplateLiteral(node) {
|
|
37
|
+
const [only] = node.quasis;
|
|
38
|
+
if (node.expressions.length === 0 && only !== undefined) {
|
|
39
|
+
judge(node, only.value.cooked ?? only.value.raw);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
/** Sources only: a test sends the values a client sends; a published language names the values of its contract itself. */
|
|
46
|
+
function isJudged(file) {
|
|
47
|
+
const published = file.location.area === 'context' && file.location.layer === 'published-language';
|
|
48
|
+
return !file.isTest && !published && file.path.startsWith(`${file.config.sourceRoot}/`);
|
|
49
|
+
}
|
|
50
|
+
/** A vocabulary of a context is the language of that context alone; the one of the platform is read there and by the route groups, where a guard names a role. */
|
|
51
|
+
function isReadBy(file, { readBy }) {
|
|
52
|
+
const { location } = file;
|
|
53
|
+
if (readBy === 'everywhere') {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
if (readBy === 'platform') {
|
|
57
|
+
return location.area !== 'context' || file.path.endsWith('.routes.ts');
|
|
58
|
+
}
|
|
59
|
+
return location.area === 'context' && location.context === readBy.context;
|
|
60
|
+
}
|
|
61
|
+
/** The specifier of an import or an export names a module, not a value. */
|
|
62
|
+
function isSpecifier(node) {
|
|
63
|
+
const { parent } = node;
|
|
64
|
+
return (parent?.type === AST_NODE_TYPES.ImportDeclaration ||
|
|
65
|
+
parent?.type === AST_NODE_TYPES.ExportNamedDeclaration ||
|
|
66
|
+
parent?.type === AST_NODE_TYPES.ExportAllDeclaration ||
|
|
67
|
+
parent?.type === AST_NODE_TYPES.ImportExpression ||
|
|
68
|
+
parent?.type === AST_NODE_TYPES.TSExternalModuleReference);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=language-declared-vocabulary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-declared-vocabulary.js","sourceRoot":"","sources":["../../src/rules/language-declared-vocabulary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/rules/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/rules/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAwHlE,+HAA+H;AAC/H,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEnD,CAAC"}
|