ddd-ts-kit 0.16.0 → 0.17.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.fr.md +1595 -0
- package/README.md +424 -5
- package/dist/check/business-names/closing-parenthesis.d.ts +3 -0
- package/dist/check/business-names/closing-parenthesis.d.ts.map +1 -0
- package/dist/check/business-names/closing-parenthesis.js +16 -0
- package/dist/check/business-names/closing-parenthesis.js.map +1 -0
- package/dist/check/business-names/declared-bindings.d.ts +4 -0
- package/dist/check/business-names/declared-bindings.d.ts.map +1 -0
- package/dist/check/business-names/declared-bindings.js +41 -0
- package/dist/check/business-names/declared-bindings.js.map +1 -0
- package/dist/check/business-names/generic-words-of.d.ts +4 -0
- package/dist/check/business-names/generic-words-of.d.ts.map +1 -0
- package/dist/check/business-names/generic-words-of.js +7 -0
- package/dist/check/business-names/generic-words-of.js.map +1 -0
- package/dist/check/business-names/generic-words.d.ts +7 -0
- package/dist/check/business-names/generic-words.d.ts.map +1 -0
- package/dist/check/business-names/generic-words.js +26 -0
- package/dist/check/business-names/generic-words.js.map +1 -0
- package/dist/check/business-names/identifier-at.d.ts +3 -0
- package/dist/check/business-names/identifier-at.d.ts.map +1 -0
- package/dist/check/business-names/identifier-at.js +6 -0
- package/dist/check/business-names/identifier-at.js.map +1 -0
- package/dist/check/business-names/judges-names.d.ts +7 -0
- package/dist/check/business-names/judges-names.d.ts.map +1 -0
- package/dist/check/business-names/judges-names.js +14 -0
- package/dist/check/business-names/judges-names.js.map +1 -0
- package/dist/check/business-names/named-binding.d.ts +12 -0
- package/dist/check/business-names/named-binding.d.ts.map +1 -0
- package/dist/check/business-names/named-binding.js +2 -0
- package/dist/check/business-names/named-binding.js.map +1 -0
- package/dist/check/business-names/named-bindings.d.ts +4 -0
- package/dist/check/business-names/named-bindings.d.ts.map +1 -0
- package/dist/check/business-names/named-bindings.js +8 -0
- package/dist/check/business-names/named-bindings.js.map +1 -0
- package/dist/check/business-names/opening-bracket.d.ts +3 -0
- package/dist/check/business-names/opening-bracket.d.ts.map +1 -0
- package/dist/check/business-names/opening-bracket.js +16 -0
- package/dist/check/business-names/opening-bracket.js.map +1 -0
- package/dist/check/business-names/parameter-bindings.d.ts +4 -0
- package/dist/check/business-names/parameter-bindings.d.ts.map +1 -0
- package/dist/check/business-names/parameter-bindings.js +28 -0
- package/dist/check/business-names/parameter-bindings.js.map +1 -0
- package/dist/check/business-names/parameter-lists.d.ts +14 -0
- package/dist/check/business-names/parameter-lists.d.ts.map +1 -0
- package/dist/check/business-names/parameter-lists.js +109 -0
- package/dist/check/business-names/parameter-lists.js.map +1 -0
- package/dist/check/business-names/pattern-bindings.d.ts +7 -0
- package/dist/check/business-names/pattern-bindings.d.ts.map +1 -0
- package/dist/check/business-names/pattern-bindings.js +31 -0
- package/dist/check/business-names/pattern-bindings.js.map +1 -0
- package/dist/check/business-names/property-bindings.d.ts +7 -0
- package/dist/check/business-names/property-bindings.d.ts.map +1 -0
- package/dist/check/business-names/property-bindings.js +31 -0
- package/dist/check/business-names/property-bindings.js.map +1 -0
- package/dist/check/business-names/suggested-name.d.ts +8 -0
- package/dist/check/business-names/suggested-name.d.ts.map +1 -0
- package/dist/check/business-names/suggested-name.js +28 -0
- package/dist/check/business-names/suggested-name.js.map +1 -0
- package/dist/check/business-names/top-level-separator.d.ts +3 -0
- package/dist/check/business-names/top-level-separator.d.ts.map +1 -0
- package/dist/check/business-names/top-level-separator.js +23 -0
- package/dist/check/business-names/top-level-separator.js.map +1 -0
- package/dist/check/catalogue/architecture-rules.d.ts.map +1 -1
- package/dist/check/catalogue/architecture-rules.js +2 -0
- package/dist/check/catalogue/architecture-rules.js.map +1 -1
- package/dist/check/explain/tree-docs.d.ts.map +1 -1
- package/dist/check/explain/tree-docs.js +11 -0
- package/dist/check/explain/tree-docs.js.map +1 -1
- package/dist/check/fixtures/business-name-fixtures.d.ts +3 -0
- package/dist/check/fixtures/business-name-fixtures.d.ts.map +1 -0
- package/dist/check/fixtures/business-name-fixtures.js +98 -0
- package/dist/check/fixtures/business-name-fixtures.js.map +1 -0
- package/dist/check/fixtures/fixtures.d.ts.map +1 -1
- package/dist/check/fixtures/fixtures.js +2 -0
- package/dist/check/fixtures/fixtures.js.map +1 -1
- package/dist/check/rules/naming-business-name.d.ts +3 -0
- package/dist/check/rules/naming-business-name.d.ts.map +1 -0
- package/dist/check/rules/naming-business-name.js +41 -0
- package/dist/check/rules/naming-business-name.js.map +1 -0
- package/dist/config/config.d.ts +8 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/parse-business-names.d.ts +4 -0
- package/dist/config/parse-business-names.d.ts.map +1 -0
- package/dist/config/parse-business-names.js +14 -0
- package/dist/config/parse-business-names.js.map +1 -0
- package/dist/config/parse-config.d.ts.map +1 -1
- package/dist/config/parse-config.js +2 -0
- package/dist/config/parse-config.js.map +1 -1
- package/dist/config/serialize-config.js +9 -1
- package/dist/config/serialize-config.js.map +1 -1
- package/dist/generate/kinds/query-kind.d.ts.map +1 -1
- package/dist/generate/kinds/query-kind.js +2 -1
- package/dist/generate/kinds/query-kind.js.map +1 -1
- package/dist/generate/kinds/route/write-controller.d.ts.map +1 -1
- package/dist/generate/kinds/route/write-controller.js +2 -1
- package/dist/generate/kinds/route/write-controller.js.map +1 -1
- package/dist/generate/kinds/route-kind.d.ts.map +1 -1
- package/dist/generate/kinds/route-kind.js +2 -1
- package/dist/generate/kinds/route-kind.js.map +1 -1
- package/dist/generate/searched-elements.d.ts +13 -0
- package/dist/generate/searched-elements.d.ts.map +1 -0
- package/dist/generate/searched-elements.js +63 -0
- package/dist/generate/searched-elements.js.map +1 -0
- package/dist/init/manifest/versions.js +24 -24
- package/dist/naming/index.d.ts +2 -0
- package/dist/naming/index.d.ts.map +1 -1
- package/dist/naming/index.js +2 -0
- package/dist/naming/index.js.map +1 -1
- package/dist/naming/plural.d.ts +3 -0
- package/dist/naming/plural.d.ts.map +1 -0
- package/dist/naming/plural.js +8 -0
- package/dist/naming/plural.js.map +1 -0
- package/dist/naming/singular.d.ts +3 -0
- package/dist/naming/singular.d.ts.map +1 -0
- package/dist/naming/singular.js +11 -0
- package/dist/naming/singular.js.map +1 -0
- package/dist/naming/to-name.d.ts.map +1 -1
- package/dist/naming/to-name.js +1 -6
- package/dist/naming/to-name.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/templates/command/handler.declared.ts.tpl +3 -3
- package/templates/command/handler.ts.tpl +3 -3
- package/templates/controller/controller.search.ts.tpl +1 -1
- package/templates/init/rules/application.md.tpl +1 -1
- package/templates/init/rules/domain.md.tpl +1 -1
- package/templates/init/scripts/events.ts.tpl +6 -6
- package/templates/init/scripts/openapi.ts.tpl +2 -2
- package/templates/pipeline/package-scripts.json +1 -1
- package/templates/policy/policy.declared.ts.tpl +1 -1
- package/templates/policy/policy.ts.tpl +1 -1
- package/templates/presets/identity/context/infrastructure/persistence/drizzle-search-members-reader.repository.drizzle.ts.tpl +2 -2
- package/templates/presets/identity/context/presentation/http/organisations/search-members/search-members.controller.ts.tpl +2 -2
- package/templates/presets/identity/context/test/integration/search-members-reader.spec.ts.tpl +1 -1
- package/templates/query/search.reader.fake.ts.tpl +1 -1
- package/templates/query/search.reader.in-memory.ts.tpl +20 -18
- package/templates/route/route.search.ts.tpl +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declared-bindings.js","sourceRoot":"","sources":["../../../src/check/business-names/declared-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,WAAW,GAAG,kDAAkD,CAAC;AACvE,MAAM,YAAY,GAAG,sCAAsC,CAAC;AAC5D,MAAM,KAAK,GAAG,kBAAkB,CAAC;AAEjC,oHAAoH;AACpH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvD,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAE/B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACrC,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAE/B,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9E,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4CAA4C;AAC5C,SAAS,gBAAgB,CAAC,IAAY,EAAE,IAAY;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnE,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEhD,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Config } from '../../config/index.js';
|
|
2
|
+
/** The words of the rule for a project: `businessNames.words` in place of the defaults, less `businessNames.allow`. */
|
|
3
|
+
export declare function genericWordsOf(config: Config): ReadonlySet<string>;
|
|
4
|
+
//# sourceMappingURL=generic-words-of.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-words-of.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/generic-words-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,uHAAuH;AACvH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAIlE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GENERIC_WORDS } from './generic-words.js';
|
|
2
|
+
/** The words of the rule for a project: `businessNames.words` in place of the defaults, less `businessNames.allow`. */
|
|
3
|
+
export function genericWordsOf(config) {
|
|
4
|
+
const { words, allow } = config.businessNames;
|
|
5
|
+
return new Set((words ?? GENERIC_WORDS).filter((word) => !allow.includes(word)));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=generic-words-of.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-words-of.js","sourceRoot":"","sources":["../../../src/check/business-names/generic-words-of.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,uHAAuH;AACvH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC;IAE9C,OAAO,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words that say a value is there without saying which concept it is. `naming/business-name`
|
|
3
|
+
* reports a binding named by one of them where the model speaks; the same list as the ESLint
|
|
4
|
+
* plugin.
|
|
5
|
+
*/
|
|
6
|
+
export declare const GENERIC_WORDS: readonly string[];
|
|
7
|
+
//# sourceMappingURL=generic-words.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-words.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/generic-words.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAmB1C,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words that say a value is there without saying which concept it is. `naming/business-name`
|
|
3
|
+
* reports a binding named by one of them where the model speaks; the same list as the ESLint
|
|
4
|
+
* plugin.
|
|
5
|
+
*/
|
|
6
|
+
export const GENERIC_WORDS = [
|
|
7
|
+
'target',
|
|
8
|
+
'targets',
|
|
9
|
+
'data',
|
|
10
|
+
'item',
|
|
11
|
+
'items',
|
|
12
|
+
'obj',
|
|
13
|
+
'object',
|
|
14
|
+
'thing',
|
|
15
|
+
'things',
|
|
16
|
+
'stuff',
|
|
17
|
+
'info',
|
|
18
|
+
'element',
|
|
19
|
+
'el',
|
|
20
|
+
'tmp',
|
|
21
|
+
'temp',
|
|
22
|
+
'foo',
|
|
23
|
+
'bar',
|
|
24
|
+
'baz',
|
|
25
|
+
];
|
|
26
|
+
//# sourceMappingURL=generic-words.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-words.js","sourceRoot":"","sources":["../../../src/check/business-names/generic-words.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,QAAQ;IACR,SAAS;IACT,MAAM;IACN,MAAM;IACN,OAAO;IACP,KAAK;IACL,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,SAAS;IACT,IAAI;IACJ,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;CACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifier-at.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/identifier-at.ts"],"names":[],"mappings":"AAEA,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifier-at.js","sourceRoot":"","sources":["../../../src/check/business-names/identifier-at.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,mBAAmB,CAAC;AAEjC,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAc;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SourceFile } from '../model/source-file.js';
|
|
2
|
+
/**
|
|
3
|
+
* Where the language of the model lives: `domain/` and `application/` of a context, and the
|
|
4
|
+
* shared kernel outside its `presentation/`. Specs are not judged. Same table as the ESLint plugin.
|
|
5
|
+
*/
|
|
6
|
+
export declare function judgesNames(file: SourceFile, sharedKernelDir: string): boolean;
|
|
7
|
+
//# sourceMappingURL=judges-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judges-names.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/judges-names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAU9E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the language of the model lives: `domain/` and `application/` of a context, and the
|
|
3
|
+
* shared kernel outside its `presentation/`. Specs are not judged. Same table as the ESLint plugin.
|
|
4
|
+
*/
|
|
5
|
+
export function judgesNames(file, sharedKernelDir) {
|
|
6
|
+
if (file.isTest) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
if (file.location.area === 'context') {
|
|
10
|
+
return file.location.layer === 'domain' || file.location.layer === 'application';
|
|
11
|
+
}
|
|
12
|
+
return file.location.area === 'shared-kernel' && !file.path.startsWith(`${sharedKernelDir}/presentation/`);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=judges-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judges-names.js","sourceRoot":"","sources":["../../../src/check/business-names/judges-names.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB,EAAE,eAAuB;IACnE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,aAAa,CAAC;IACnF,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,eAAe,gBAAgB,CAAC,CAAC;AAC7G,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** What a binding names: the reader of a message needs to know which one it is. */
|
|
2
|
+
type BindingKind = 'variable' | 'loop variable' | 'destructured binding' | 'parameter' | 'property';
|
|
3
|
+
/** A name a source gives to something, where it is written and, when it says what it holds, what it is given. */
|
|
4
|
+
export interface NamedBinding {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly offset: number;
|
|
7
|
+
readonly kind: BindingKind;
|
|
8
|
+
/** The initializer of a variable, or the collection a loop variable walks through. */
|
|
9
|
+
readonly source?: string;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=named-binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named-binding.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/named-binding.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,KAAK,WAAW,GAAG,UAAU,GAAG,eAAe,GAAG,sBAAsB,GAAG,WAAW,GAAG,UAAU,CAAC;AAEpG,iHAAiH;AACjH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named-binding.js","sourceRoot":"","sources":["../../../src/check/business-names/named-binding.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { NamedBinding } from './named-binding.js';
|
|
2
|
+
/** Every name a blanked source binds: variables, loop variables, destructured names, parameters and properties. */
|
|
3
|
+
export declare function namedBindings(code: string): NamedBinding[];
|
|
4
|
+
//# sourceMappingURL=named-bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named-bindings.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/named-bindings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,mHAAmH;AACnH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAI1D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { declaredBindings } from './declared-bindings.js';
|
|
2
|
+
import { parameterBindings } from './parameter-bindings.js';
|
|
3
|
+
import { propertyBindings } from './property-bindings.js';
|
|
4
|
+
/** Every name a blanked source binds: variables, loop variables, destructured names, parameters and properties. */
|
|
5
|
+
export function namedBindings(code) {
|
|
6
|
+
return [...declaredBindings(code), ...parameterBindings(code), ...propertyBindings(code)].sort((left, right) => left.offset - right.offset);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=named-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"named-bindings.js","sourceRoot":"","sources":["../../../src/check/business-names/named-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,mHAAmH;AACnH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC5F,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opening-bracket.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/opening-bracket.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAclE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BRACKETS } from '../text/brackets.js';
|
|
2
|
+
/** Offset of the bracket opening the one that closes at `close`, read backwards, or -1. */
|
|
3
|
+
export function openingBracket(code, close) {
|
|
4
|
+
let depth = 0;
|
|
5
|
+
for (let i = close; i >= 0; i -= 1) {
|
|
6
|
+
const char = code.charAt(i);
|
|
7
|
+
if (BRACKETS.closers.includes(char)) {
|
|
8
|
+
depth += 1;
|
|
9
|
+
}
|
|
10
|
+
else if (BRACKETS.openers.includes(char) && (depth -= 1) === 0) {
|
|
11
|
+
return i;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return -1;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=opening-bracket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opening-bracket.js","sourceRoot":"","sources":["../../../src/check/business-names/opening-bracket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,2FAA2F;AAC3F,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAa;IACxD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { NamedBinding } from './named-binding.js';
|
|
2
|
+
/** The parameters of every function, method, signature and arrow of a source; a parameter property is a property. */
|
|
3
|
+
export declare function parameterBindings(code: string): NamedBinding[];
|
|
4
|
+
//# sourceMappingURL=parameter-bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-bindings.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/parameter-bindings.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,qHAAqH;AACrH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAU9D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { splitTopLevel } from '../text/split-top-level.js';
|
|
2
|
+
import { identifierAt } from './identifier-at.js';
|
|
3
|
+
import { parameterLists } from './parameter-lists.js';
|
|
4
|
+
import { patternBindings } from './pattern-bindings.js';
|
|
5
|
+
const MODIFIERS = /^(?:(?:public|private|protected|readonly|override)\s+)+/;
|
|
6
|
+
/** The parameters of every function, method, signature and arrow of a source; a parameter property is a property. */
|
|
7
|
+
export function parameterBindings(code) {
|
|
8
|
+
return parameterLists(code).flatMap((list) => {
|
|
9
|
+
if ('single' in list) {
|
|
10
|
+
return [{ name: identifierAt(code, list.single), offset: list.single, kind: 'parameter' }];
|
|
11
|
+
}
|
|
12
|
+
return splitTopLevel(code.slice(list.open + 1, list.close)).flatMap((part) => parameter(code, list.open + 1 + part.start, part.code));
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function parameter(code, start, text) {
|
|
16
|
+
const modifiers = MODIFIERS.exec(text)?.[0].length ?? 0;
|
|
17
|
+
const at = start + modifiers + (text.startsWith('...', modifiers) ? 3 : 0);
|
|
18
|
+
const opener = code.charAt(at);
|
|
19
|
+
if (opener === '{' || opener === '[') {
|
|
20
|
+
return patternBindings(code, at);
|
|
21
|
+
}
|
|
22
|
+
const name = identifierAt(code, at);
|
|
23
|
+
if (name === '' || name === 'this') {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
return [{ name, offset: at, kind: modifiers > 0 ? 'property' : 'parameter' }];
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=parameter-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-bindings.js","sourceRoot":"","sources":["../../../src/check/business-names/parameter-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,SAAS,GAAG,yDAAyD,CAAC;AAE5E,qHAAqH;AACrH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3C,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,WAAoB,EAAE,CAAC,CAAC;QACtG,CAAC;QAED,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3E,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CACvD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,IAAY;IAC1D,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,KAAK,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAE/B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEpC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAChF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** A parameter list, by the offsets of its parentheses, or the one parameter of `name =>`. */
|
|
2
|
+
export type ParameterList = {
|
|
3
|
+
readonly open: number;
|
|
4
|
+
readonly close: number;
|
|
5
|
+
} | {
|
|
6
|
+
readonly single: number;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* The parameter lists of a blanked source: functions, methods and signatures of classes,
|
|
10
|
+
* interfaces and object literals (a body or a return type follows their parentheses, which tells
|
|
11
|
+
* them from a call), arrows, and the function types of annotations.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parameterLists(code: string): ParameterList[];
|
|
14
|
+
//# sourceMappingURL=parameter-lists.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-lists.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/parameter-lists.ts"],"names":[],"mappings":"AAGA,8FAA8F;AAC9F,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAkC5G;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAmB5D"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { matchingBracket } from '../text/matching-bracket.js';
|
|
2
|
+
import { openingBracket } from './opening-bracket.js';
|
|
3
|
+
const FUNCTION = /(?<![\w$.])function\b\s*\*?\s*(?:[A-Za-z_$][\w$]*)?\s*(?:<[^(]*>)?\s*\(/g;
|
|
4
|
+
const MEMBER = /^[ \t]*(?:(?:public|private|protected|static|abstract|override|async|readonly|declare|get|set)\s+)*\*?\s*([A-Za-z_$][\w$]*)\??\s*(?:<[^()\n]*>)?\s*\(/gm;
|
|
5
|
+
const NOT_A_MEMBER = new Set([
|
|
6
|
+
'if',
|
|
7
|
+
'for',
|
|
8
|
+
'while',
|
|
9
|
+
'switch',
|
|
10
|
+
'catch',
|
|
11
|
+
'return',
|
|
12
|
+
'await',
|
|
13
|
+
'typeof',
|
|
14
|
+
'function',
|
|
15
|
+
'new',
|
|
16
|
+
'throw',
|
|
17
|
+
'super',
|
|
18
|
+
'this',
|
|
19
|
+
'void',
|
|
20
|
+
'delete',
|
|
21
|
+
'yield',
|
|
22
|
+
'with',
|
|
23
|
+
'do',
|
|
24
|
+
'else',
|
|
25
|
+
'case',
|
|
26
|
+
]);
|
|
27
|
+
const SIGNATURE_GOES_ON = /^\s*[:{]/;
|
|
28
|
+
const ARROW = /=>/g;
|
|
29
|
+
const IDENTIFIER_CHAR = /[\w$]/;
|
|
30
|
+
/**
|
|
31
|
+
* The parameter lists of a blanked source: functions, methods and signatures of classes,
|
|
32
|
+
* interfaces and object literals (a body or a return type follows their parentheses, which tells
|
|
33
|
+
* them from a call), arrows, and the function types of annotations.
|
|
34
|
+
*/
|
|
35
|
+
export function parameterLists(code) {
|
|
36
|
+
const functions = [...code.matchAll(FUNCTION)].map((match) => enclosed(code, match.index + match[0].length - 1));
|
|
37
|
+
const members = [...code.matchAll(MEMBER)]
|
|
38
|
+
.filter((match) => !NOT_A_MEMBER.has(match[1] ?? ''))
|
|
39
|
+
.map((match) => enclosed(code, match.index + match[0].length - 1))
|
|
40
|
+
.filter(({ close }) => SIGNATURE_GOES_ON.test(code.slice(close + 1, close + 40)));
|
|
41
|
+
const arrows = [...code.matchAll(ARROW)].flatMap((match) => arrowParameters(code, match.index));
|
|
42
|
+
const seen = new Set();
|
|
43
|
+
return [...functions, ...members, ...arrows].filter((list) => {
|
|
44
|
+
const key = 'open' in list ? list.open : list.single;
|
|
45
|
+
const fresh = !seen.has(key);
|
|
46
|
+
seen.add(key);
|
|
47
|
+
return fresh;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function enclosed(code, open) {
|
|
51
|
+
return { open, close: matchingBracket(code, open) };
|
|
52
|
+
}
|
|
53
|
+
/** The parameters of the arrow at `arrow`: `(..) =>`, `(..): Type =>` or `name =>`. */
|
|
54
|
+
function arrowParameters(code, arrow) {
|
|
55
|
+
const last = previousCode(code, arrow - 1);
|
|
56
|
+
if (code.charAt(last) === ')') {
|
|
57
|
+
return listClosingAt(code, last);
|
|
58
|
+
}
|
|
59
|
+
const returnType = returnTypeColon(code, last);
|
|
60
|
+
if (returnType !== undefined) {
|
|
61
|
+
return listClosingAt(code, previousCode(code, returnType - 1));
|
|
62
|
+
}
|
|
63
|
+
if (!IDENTIFIER_CHAR.test(code.charAt(last))) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
let start = last;
|
|
67
|
+
while (start > 0 && IDENTIFIER_CHAR.test(code.charAt(start - 1))) {
|
|
68
|
+
start -= 1;
|
|
69
|
+
}
|
|
70
|
+
return code.charAt(previousCode(code, start - 1)) === '.' ? [] : [{ single: start }];
|
|
71
|
+
}
|
|
72
|
+
function listClosingAt(code, close) {
|
|
73
|
+
if (code.charAt(close) !== ')') {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const open = openingBracket(code, close);
|
|
77
|
+
return open === -1 ? [] : [{ open, close }];
|
|
78
|
+
}
|
|
79
|
+
/** The `:` of a return type written between the parentheses of an arrow and its `=>`. */
|
|
80
|
+
function returnTypeColon(code, from) {
|
|
81
|
+
let depth = 0;
|
|
82
|
+
for (let i = from; i >= Math.max(0, from - 300); i -= 1) {
|
|
83
|
+
const char = code.charAt(i);
|
|
84
|
+
depth += typeDepthChange(code, i);
|
|
85
|
+
if (depth < 0 || (depth === 0 && '=;,'.includes(char))) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
if (depth === 0 && char === ':') {
|
|
89
|
+
return code.charAt(previousCode(code, i - 1)) === ')' ? i : undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
/** Read backwards: a closing bracket of a type opens a level, an opening one closes it; the `>` of `=>` is no bracket. */
|
|
95
|
+
function typeDepthChange(code, at) {
|
|
96
|
+
const char = code.charAt(at);
|
|
97
|
+
if (')]}>'.includes(char)) {
|
|
98
|
+
return char === '>' && code.charAt(at - 1) === '=' ? 0 : 1;
|
|
99
|
+
}
|
|
100
|
+
return '([{<'.includes(char) ? -1 : 0;
|
|
101
|
+
}
|
|
102
|
+
function previousCode(code, from) {
|
|
103
|
+
let at = from;
|
|
104
|
+
while (at > 0 && /\s/.test(code.charAt(at))) {
|
|
105
|
+
at -= 1;
|
|
106
|
+
}
|
|
107
|
+
return at;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=parameter-lists.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-lists.js","sourceRoot":"","sources":["../../../src/check/business-names/parameter-lists.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NamedBinding } from './named-binding.js';
|
|
2
|
+
/**
|
|
3
|
+
* The names a destructuring pattern binds, the one opening at `open` (`{` or `[`): the alias of
|
|
4
|
+
* `key: alias`, a shorthand key, a rest element, at any depth. Defaults are not bindings.
|
|
5
|
+
*/
|
|
6
|
+
export declare function patternBindings(code: string, open: number): NamedBinding[];
|
|
7
|
+
//# sourceMappingURL=pattern-bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-bindings.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/pattern-bindings.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAU1E"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { matchingBracket } from '../text/matching-bracket.js';
|
|
2
|
+
import { splitTopLevel } from '../text/split-top-level.js';
|
|
3
|
+
import { identifierAt } from './identifier-at.js';
|
|
4
|
+
import { topLevelSeparator } from './top-level-separator.js';
|
|
5
|
+
/**
|
|
6
|
+
* The names a destructuring pattern binds, the one opening at `open` (`{` or `[`): the alias of
|
|
7
|
+
* `key: alias`, a shorthand key, a rest element, at any depth. Defaults are not bindings.
|
|
8
|
+
*/
|
|
9
|
+
export function patternBindings(code, open) {
|
|
10
|
+
const close = matchingBracket(code, open);
|
|
11
|
+
const isObject = code.charAt(open) === '{';
|
|
12
|
+
return splitTopLevel(code.slice(open + 1, close)).flatMap((part) => {
|
|
13
|
+
const start = open + 1 + part.start;
|
|
14
|
+
const colon = isObject ? topLevelSeparator(part.code, ':') : -1;
|
|
15
|
+
return elementBindings(code, colon === -1 ? start : valueStart(code, start + colon + 1));
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/** One element of a pattern, from its first character: a nested pattern, a rest, or a name with its default. */
|
|
19
|
+
function elementBindings(code, start) {
|
|
20
|
+
const at = code.startsWith('...', start) ? start + 3 : start;
|
|
21
|
+
const opener = code.charAt(at);
|
|
22
|
+
if (opener === '{' || opener === '[') {
|
|
23
|
+
return patternBindings(code, at);
|
|
24
|
+
}
|
|
25
|
+
const name = identifierAt(code, at);
|
|
26
|
+
return name === '' ? [] : [{ name, offset: at, kind: 'destructured binding' }];
|
|
27
|
+
}
|
|
28
|
+
function valueStart(code, from) {
|
|
29
|
+
return from + (/^\s*/.exec(code.slice(from, from + 200))?.[0].length ?? 0);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=pattern-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-bindings.js","sourceRoot":"","sources":["../../../src/check/business-names/pattern-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY;IACxD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;IAE3C,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACjE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhE,OAAO,eAAe,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gHAAgH;AAChH,SAAS,eAAe,CAAC,IAAY,EAAE,KAAa;IAClD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAE/B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEpC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;IAC5C,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NamedBinding } from './named-binding.js';
|
|
2
|
+
/**
|
|
3
|
+
* The properties a source declares in a class, an interface or a type alias of an object: a key
|
|
4
|
+
* of an object literal follows the type it is written for, and is not one of them.
|
|
5
|
+
*/
|
|
6
|
+
export declare function propertyBindings(code: string): NamedBinding[];
|
|
7
|
+
//# sourceMappingURL=property-bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-bindings.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/property-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQvD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAa7D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const PROPERTY = /^[ \t]*(?:(?:public|private|protected|static|readonly|declare|override|abstract)\s+)*([A-Za-z_$][\w$]*)\??\s*(?=:|;|=(?![=>]))/gm;
|
|
2
|
+
const DECLARES_A_SHAPE = /(?:(?<![\w$.])(?:class|interface)\s+[\w$]+[^{;]*|(?<![\w$.])type\s+[\w$]+(?:<[^=]*>)?\s*=\s*)$/;
|
|
3
|
+
/**
|
|
4
|
+
* The properties a source declares in a class, an interface or a type alias of an object: a key
|
|
5
|
+
* of an object literal follows the type it is written for, and is not one of them.
|
|
6
|
+
*/
|
|
7
|
+
export function propertyBindings(code) {
|
|
8
|
+
return [...code.matchAll(PROPERTY)].flatMap((match) => {
|
|
9
|
+
const brace = enclosingBrace(code, match.index);
|
|
10
|
+
const head = code.slice(Math.max(0, brace - 300), brace);
|
|
11
|
+
if (brace === -1 || !DECLARES_A_SHAPE.test(head)) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
const name = match[1] ?? '';
|
|
15
|
+
return [{ name, offset: match.index + match[0].lastIndexOf(name), kind: 'property' }];
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function enclosingBrace(code, from) {
|
|
19
|
+
let depth = 0;
|
|
20
|
+
for (let i = from - 1; i >= 0; i -= 1) {
|
|
21
|
+
const char = code.charAt(i);
|
|
22
|
+
if (char === '}') {
|
|
23
|
+
depth += 1;
|
|
24
|
+
}
|
|
25
|
+
else if (char === '{' && (depth -= 1) < 0) {
|
|
26
|
+
return i;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return -1;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=property-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-bindings.js","sourceRoot":"","sources":["../../../src/check/business-names/property-bindings.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GACZ,kIAAkI,CAAC;AAErI,MAAM,gBAAgB,GACpB,gGAAgG,CAAC;AAEnG;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAEzD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE5B,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAmB,EAAE,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,IAAY;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NamedBinding } from './named-binding.js';
|
|
2
|
+
/**
|
|
3
|
+
* The business name the code already gives to what a binding holds, as the checker reads it from
|
|
4
|
+
* the text: the class an initializer builds (on either side of `??`) or the repository it
|
|
5
|
+
* reads, the singular of the collection a loop walks through. Undefined when the text says nothing.
|
|
6
|
+
*/
|
|
7
|
+
export declare function suggestedName(binding: NamedBinding): string | undefined;
|
|
8
|
+
//# sourceMappingURL=suggested-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggested-name.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/suggested-name.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAiBvE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { plural, singular } from '../../naming/index.js';
|
|
2
|
+
const BUILT = /(?:^|\?\?\s*)(?:await\s+)?(?:new\s+([A-Z][\w$]*)\s*[(<]|([A-Z][\w$]*)\.create\s*[(<])/;
|
|
3
|
+
const READ = /^\(?(?:await\s+)?(?:this\s*\.\s*)?([a-z][\w$]*)Repository\s*\.\s*[\w$]+\s*\(/;
|
|
4
|
+
const LAST_WORD = /([A-Za-z][a-z\d]*)$/;
|
|
5
|
+
/**
|
|
6
|
+
* The business name the code already gives to what a binding holds, as the checker reads it from
|
|
7
|
+
* the text: the class an initializer builds (on either side of `??`) or the repository it
|
|
8
|
+
* reads, the singular of the collection a loop walks through. Undefined when the text says nothing.
|
|
9
|
+
*/
|
|
10
|
+
export function suggestedName(binding) {
|
|
11
|
+
const source = binding.source ?? '';
|
|
12
|
+
if (binding.kind === 'loop variable') {
|
|
13
|
+
return elementOf(source);
|
|
14
|
+
}
|
|
15
|
+
const built = BUILT.exec(source);
|
|
16
|
+
const concept = built?.[1] ?? built?.[2] ?? READ.exec(source)?.[1];
|
|
17
|
+
if (concept === undefined) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const camel = concept.charAt(0).toLowerCase() + concept.slice(1);
|
|
21
|
+
return singular(binding.name) === undefined ? camel : plural(camel);
|
|
22
|
+
}
|
|
23
|
+
/** `reminder` for `dueReminders` or `this.reminders`; nothing for a collection whose name is not a plural. */
|
|
24
|
+
function elementOf(collection) {
|
|
25
|
+
const last = LAST_WORD.exec(collection)?.[1];
|
|
26
|
+
return last === undefined ? undefined : singular(last.toLowerCase());
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=suggested-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggested-name.js","sourceRoot":"","sources":["../../../src/check/business-names/suggested-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,KAAK,GAAG,uFAAuF,CAAC;AACtG,MAAM,IAAI,GAAG,8EAA8E,CAAC;AAC5F,MAAM,SAAS,GAAG,qBAAqB,CAAC;AAExC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAqB;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IAEpC,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjE,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,8GAA8G;AAC9G,SAAS,SAAS,CAAC,UAAkB;IACnC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7C,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-level-separator.d.ts","sourceRoot":"","sources":["../../../src/check/business-names/top-level-separator.ts"],"names":[],"mappings":"AAEA,kHAAkH;AAClH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,CAgB5E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BRACKETS } from '../text/brackets.js';
|
|
2
|
+
/** Offset of the first `separator` met outside brackets, or -1: the `:` of `key: alias`, the `=` of a default. */
|
|
3
|
+
export function topLevelSeparator(text, separator) {
|
|
4
|
+
let depth = 0;
|
|
5
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
6
|
+
const char = text.charAt(i);
|
|
7
|
+
if (BRACKETS.openers.includes(char)) {
|
|
8
|
+
depth += 1;
|
|
9
|
+
}
|
|
10
|
+
else if (BRACKETS.closers.includes(char)) {
|
|
11
|
+
depth -= 1;
|
|
12
|
+
}
|
|
13
|
+
else if (depth === 0 && char === separator && !isPartOfOperator(text, i)) {
|
|
14
|
+
return i;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return -1;
|
|
18
|
+
}
|
|
19
|
+
/** `=>`, `==`, `<=`: an `=` that is not alone. */
|
|
20
|
+
function isPartOfOperator(text, at) {
|
|
21
|
+
return text.charAt(at) === '=' && /[=<>!]/.test(text.charAt(at - 1) + text.charAt(at + 1));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=top-level-separator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-level-separator.js","sourceRoot":"","sources":["../../../src/check/business-names/top-level-separator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,kHAAkH;AAClH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,SAAoB;IAClE,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,kDAAkD;AAClD,SAAS,gBAAgB,CAAC,IAAY,EAAE,EAAU;IAChD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"architecture-rules.d.ts","sourceRoot":"","sources":["../../../src/check/catalogue/architecture-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"architecture-rules.d.ts","sourceRoot":"","sources":["../../../src/check/catalogue/architecture-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAkF7C,gHAAgH;AAChH,eAAO,MAAM,kBAAkB,EAAE,SAAS,IAAI,EAiF7C,CAAC"}
|
|
@@ -50,6 +50,7 @@ import { lifecycleStatusThroughMachine } from '../rules/lifecycle-status-through
|
|
|
50
50
|
import { layerDomainPurity } from '../rules/layer-domain-purity.js';
|
|
51
51
|
import { layerInfrastructureNoPresentation } from '../rules/layer-infrastructure-no-presentation.js';
|
|
52
52
|
import { layerPresentationNoInfrastructure } from '../rules/layer-presentation-no-infrastructure.js';
|
|
53
|
+
import { namingBusinessName } from '../rules/naming-business-name.js';
|
|
53
54
|
import { namingOneConceptPerFile } from '../rules/naming-one-concept-per-file.js';
|
|
54
55
|
import { namingSearchNotList } from '../rules/naming-search-not-list.js';
|
|
55
56
|
import { namingSuffix } from '../rules/naming-suffix.js';
|
|
@@ -92,6 +93,7 @@ export const ARCHITECTURE_RULES = [
|
|
|
92
93
|
namingSuffix,
|
|
93
94
|
namingOneConceptPerFile,
|
|
94
95
|
namingSearchNotList,
|
|
96
|
+
namingBusinessName,
|
|
95
97
|
schemaPresentationOnly,
|
|
96
98
|
schemaNoDuplicateShape,
|
|
97
99
|
testSpecRequired,
|