ddd-ts-kit 0.15.0 → 0.16.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/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/domain-docs.d.ts +3 -0
- package/dist/check/explain/domain-docs.d.ts.map +1 -0
- package/dist/check/explain/domain-docs.js +30 -0
- package/dist/check/explain/domain-docs.js.map +1 -0
- package/dist/check/explain/rule-docs.d.ts.map +1 -1
- package/dist/check/explain/rule-docs.js +2 -0
- package/dist/check/explain/rule-docs.js.map +1 -1
- package/dist/check/fixtures/fixtures.d.ts.map +1 -1
- package/dist/check/fixtures/fixtures.js +4 -0
- package/dist/check/fixtures/fixtures.js.map +1 -1
- package/dist/check/fixtures/model-function-fixtures.d.ts +4 -0
- package/dist/check/fixtures/model-function-fixtures.d.ts.map +1 -0
- package/dist/check/fixtures/model-function-fixtures.js +52 -0
- package/dist/check/fixtures/model-function-fixtures.js.map +1 -0
- package/dist/check/fixtures/value-object-file-fixtures.d.ts +4 -0
- package/dist/check/fixtures/value-object-file-fixtures.d.ts.map +1 -0
- package/dist/check/fixtures/value-object-file-fixtures.js +54 -0
- package/dist/check/fixtures/value-object-file-fixtures.js.map +1 -0
- package/dist/check/fixtures/value-object-files.d.ts +34 -0
- package/dist/check/fixtures/value-object-files.d.ts.map +1 -0
- package/dist/check/fixtures/value-object-files.js +46 -0
- package/dist/check/fixtures/value-object-files.js.map +1 -0
- package/dist/check/rules/domain-value-object-class.d.ts +3 -0
- package/dist/check/rules/domain-value-object-class.d.ts.map +1 -0
- package/dist/check/rules/domain-value-object-class.js +21 -0
- package/dist/check/rules/domain-value-object-class.js.map +1 -0
- package/dist/check/structure/class-body-brace.d.ts +6 -0
- package/dist/check/structure/class-body-brace.d.ts.map +1 -0
- package/dist/check/structure/class-body-brace.js +22 -0
- package/dist/check/structure/class-body-brace.js.map +1 -0
- package/dist/check/structure/read-structure.d.ts.map +1 -1
- package/dist/check/structure/read-structure.js +3 -1
- package/dist/check/structure/read-structure.js.map +1 -1
- package/dist/check/values/answered-literals.d.ts +8 -0
- package/dist/check/values/answered-literals.d.ts.map +1 -0
- package/dist/check/values/answered-literals.js +20 -0
- package/dist/check/values/answered-literals.js.map +1 -0
- package/dist/check/values/arrow-body.d.ts +4 -0
- package/dist/check/values/arrow-body.d.ts.map +1 -0
- package/dist/check/values/arrow-body.js +52 -0
- package/dist/check/values/arrow-body.js.map +1 -0
- package/dist/check/values/entry-role.d.ts +10 -0
- package/dist/check/values/entry-role.d.ts.map +1 -0
- package/dist/check/values/entry-role.js +40 -0
- package/dist/check/values/entry-role.js.map +1 -0
- package/dist/check/values/exported-function-body.d.ts +9 -0
- package/dist/check/values/exported-function-body.d.ts.map +1 -0
- package/dist/check/values/exported-function-body.js +29 -0
- package/dist/check/values/exported-function-body.js.map +1 -0
- package/dist/check/values/exported-values.d.ts +9 -0
- package/dist/check/values/exported-values.d.ts.map +1 -0
- package/dist/check/values/exported-values.js +48 -0
- package/dist/check/values/exported-values.js.map +1 -0
- package/dist/check/values/extends-value-object.d.ts +9 -0
- package/dist/check/values/extends-value-object.d.ts.map +1 -0
- package/dist/check/values/extends-value-object.js +25 -0
- package/dist/check/values/extends-value-object.js.map +1 -0
- package/dist/check/values/function-body.d.ts +10 -0
- package/dist/check/values/function-body.d.ts.map +1 -0
- package/dist/check/values/function-body.js +2 -0
- package/dist/check/values/function-body.js.map +1 -0
- package/dist/check/values/generate-hint.d.ts +4 -0
- package/dist/check/values/generate-hint.d.ts.map +1 -0
- package/dist/check/values/generate-hint.js +8 -0
- package/dist/check/values/generate-hint.js.map +1 -0
- package/dist/check/values/initializer-of.d.ts +3 -0
- package/dist/check/values/initializer-of.d.ts.map +1 -0
- package/dist/check/values/initializer-of.js +15 -0
- package/dist/check/values/initializer-of.js.map +1 -0
- package/dist/check/values/is-model-file.d.ts +8 -0
- package/dist/check/values/is-model-file.d.ts.map +1 -0
- package/dist/check/values/is-model-file.js +15 -0
- package/dist/check/values/is-model-file.js.map +1 -0
- package/dist/check/values/is-value-object-file.d.ts +7 -0
- package/dist/check/values/is-value-object-file.d.ts.map +1 -0
- package/dist/check/values/is-value-object-file.js +14 -0
- package/dist/check/values/is-value-object-file.js.map +1 -0
- package/dist/check/values/javascript-globals.d.ts +3 -0
- package/dist/check/values/javascript-globals.d.ts.map +1 -0
- package/dist/check/values/javascript-globals.js +22 -0
- package/dist/check/values/javascript-globals.js.map +1 -0
- package/dist/check/values/literal-at.d.ts +3 -0
- package/dist/check/values/literal-at.d.ts.map +1 -0
- package/dist/check/values/literal-at.js +7 -0
- package/dist/check/values/literal-at.js.map +1 -0
- package/dist/check/values/local-declaration.d.ts +8 -0
- package/dist/check/values/local-declaration.d.ts.map +1 -0
- package/dist/check/values/local-declaration.js +31 -0
- package/dist/check/values/local-declaration.js.map +1 -0
- package/dist/check/values/nested-bodies.d.ts +8 -0
- package/dist/check/values/nested-bodies.d.ts.map +1 -0
- package/dist/check/values/nested-bodies.js +28 -0
- package/dist/check/values/nested-bodies.js.map +1 -0
- package/dist/check/values/plain-value-functions.d.ts +10 -0
- package/dist/check/values/plain-value-functions.d.ts.map +1 -0
- package/dist/check/values/plain-value-functions.js +33 -0
- package/dist/check/values/plain-value-functions.js.map +1 -0
- package/dist/check/values/returns-package-type.d.ts +9 -0
- package/dist/check/values/returns-package-type.d.ts.map +1 -0
- package/dist/check/values/returns-package-type.js +12 -0
- package/dist/check/values/returns-package-type.js.map +1 -0
- package/dist/check/values/stands-for-a-value.d.ts +9 -0
- package/dist/check/values/stands-for-a-value.d.ts.map +1 -0
- package/dist/check/values/stands-for-a-value.js +28 -0
- package/dist/check/values/stands-for-a-value.js.map +1 -0
- package/dist/check/values/value-object-file-findings.d.ts +5 -0
- package/dist/check/values/value-object-file-findings.d.ts.map +1 -0
- package/dist/check/values/value-object-file-findings.js +96 -0
- package/dist/check/values/value-object-file-findings.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/parse-stack.d.ts.map +1 -1
- package/dist/config/parse-stack.js +2 -1
- package/dist/config/parse-stack.js.map +1 -1
- package/dist/config/stack.d.ts +8 -0
- package/dist/config/stack.d.ts.map +1 -1
- package/dist/config/stack.js +1 -0
- package/dist/config/stack.js.map +1 -1
- package/dist/help/usage.d.ts +1 -1
- package/dist/help/usage.d.ts.map +1 -1
- package/dist/help/usage.js +1 -1
- package/dist/init/manifest/versions.js +24 -24
- package/dist/init/stack/resolve-stack.d.ts.map +1 -1
- package/dist/init/stack/resolve-stack.js +3 -1
- package/dist/init/stack/resolve-stack.js.map +1 -1
- package/dist/init/stack/stack-options.d.ts +2 -0
- package/dist/init/stack/stack-options.d.ts.map +1 -1
- package/dist/stack/stack-vars.js +2 -1
- package/dist/stack/stack-vars.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/templates/init/rules/domain.md.tpl +1 -1
- package/templates/pipeline/package-scripts.json +1 -1
package/README.md
CHANGED
|
@@ -52,7 +52,8 @@ ddd-ts-kit init [--http express|fastify|hono|nest|none]
|
|
|
52
52
|
[--style declared|explicit] [--assembly barrel|discovery]
|
|
53
53
|
[--dependencies signature|listed] [--refusals factories|classes]
|
|
54
54
|
[--routes controllers|functions] [--value-objects throwing|result]
|
|
55
|
-
[--literals named|free] [--
|
|
55
|
+
[--literals named|free] [--values classes|free] [--tenancy none|shared-table]
|
|
56
|
+
[--queue database|redis|memory]
|
|
56
57
|
[--schemas shared|per-route]
|
|
57
58
|
[--package-manager npm|pnpm]
|
|
58
59
|
[--allow-no-outbox "<reason>"] [--import-alias '$<name>/']
|
|
@@ -843,6 +844,7 @@ saying what to do instead. Exit code 1 when there is at least one error.
|
|
|
843
844
|
| `schema/presentation-only` | under `"stack.schemas": "shared"`: in the shared kernel outside `presentation/`, an import of a validation library; in `domain/`, `application/`, `infrastructure/`, `published-language/` and the shared kernel outside `presentation/`, an import of a file of `presentation/` of the shared kernel |
|
|
844
845
|
| `schema/no-duplicate-shape` | under `"stack.schemas": "shared"`, in the presentation layer of one context, or in it and `presentation/` of the shared kernel: a DTO class or an object schema (`z.object`, `v.object`, `Type.Object`) declaring the shape of another one, with the place of the original (the shared kernel, then `presentation/http/shared/`); two contexts are not compared, and request parameters and shapes still carrying a `TODO(domain)` of the generator are not judged |
|
|
845
846
|
| `errors/known-code` | under `"stack.refusals": "factories"`, in a `*.route.ts`: a code of the `errors` list that no refusal of the context of the route sets, that no class outside the contexts sets, and that is not a code of the kit |
|
|
847
|
+
| `domain/value-object-class` | under `"stack.values": "classes"`: in `domain/value-objects/` of a context or a `*.vo.ts` of the shared kernel outside `presentation/`, no exported class or a second one, a class that extends neither `ValueObject` nor another value object of the project, a public constructor, a concrete class without a static method, an exported function, arrow constant or object literal (inline, listed or by default); in `domain/` and in the shared kernel outside `presentation/`, an exported function that answers a record of data: data entries, no spread, nothing a call of the model built |
|
|
846
848
|
|
|
847
849
|
More ids belong to `@ddd-ts-kit/eslint-plugin`, which reads the syntax tree where this
|
|
848
850
|
checker reads text: `domain/aggregate-encapsulation`, `domain/value-object-immutability`,
|
|
@@ -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;AAiF7C,gHAAgH;AAChH,eAAO,MAAM,kBAAkB,EAAE,SAAS,IAAI,EAgF7C,CAAC"}
|
|
@@ -25,6 +25,7 @@ import { declarationsConstructorInjection } from '../rules/declarations-construc
|
|
|
25
25
|
import { declarationsRoleDeclared } from '../rules/declarations-role-declared.js';
|
|
26
26
|
import { domainEventsDispatchedOnSave } from '../rules/domain-events-dispatched-on-save.js';
|
|
27
27
|
import { domainEventsTransactionalBeforeCommit } from '../rules/domain-events-transactional-before-commit.js';
|
|
28
|
+
import { domainValueObjectClass } from '../rules/domain-value-object-class.js';
|
|
28
29
|
import { errorsCodeUnique } from '../rules/errors-code-unique.js';
|
|
29
30
|
import { eventSourcingPastTense } from '../rules/event-sourcing-past-tense.js';
|
|
30
31
|
import { eventSourcingProjectionNeverAppends } from '../rules/event-sourcing-projection-never-appends.js';
|
|
@@ -116,6 +117,7 @@ export const ARCHITECTURE_RULES = [
|
|
|
116
117
|
cleanBraces,
|
|
117
118
|
cleanOneExportPerFile,
|
|
118
119
|
cleanFileSize,
|
|
120
|
+
domainValueObjectClass,
|
|
119
121
|
eventsOutboxRequired,
|
|
120
122
|
eventsConsumerIdempotent,
|
|
121
123
|
domainEventsDispatchedOnSave,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"architecture-rules.js","sourceRoot":"","sources":["../../../src/check/catalogue/architecture-rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mCAAmC,EAAE,MAAM,sDAAsD,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAC;AAClG,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,qCAAqC,EAAE,MAAM,uDAAuD,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,mCAAmC,EAAE,MAAM,qDAAqD,CAAC;AAC1G,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,kCAAkC,EAAE,MAAM,oDAAoD,CAAC;AACxG,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,gCAAgC,EAAE,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,kDAAkD,CAAC;AACrG,OAAO,EAAE,iCAAiC,EAAE,MAAM,kDAAkD,CAAC;AACrG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,gHAAgH;AAChH,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,iBAAiB;IACjB,sBAAsB;IACtB,iCAAiC;IACjC,iCAAiC;IACjC,4BAA4B;IAC5B,2BAA2B;IAC3B,mCAAmC;IACnC,cAAc;IACd,UAAU;IACV,cAAc;IACd,YAAY;IACZ,uBAAuB;IACvB,mBAAmB;IACnB,sBAAsB;IACtB,sBAAsB;IACtB,gBAAgB;IAChB,gBAAgB;IAChB,gCAAgC;IAChC,WAAW;IACX,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,uBAAuB;IACvB,0BAA0B;IAC1B,mBAAmB;IACnB,yBAAyB;IACzB,mBAAmB;IACnB,aAAa;IACb,iBAAiB;IACjB,uBAAuB;IACvB,mBAAmB;IACnB,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,eAAe;IACf,WAAW;IACX,qBAAqB;IACrB,aAAa;IACb,oBAAoB;IACpB,wBAAwB;IACxB,4BAA4B;IAC5B,qCAAqC;IACrC,yBAAyB;IACzB,sBAAsB;IACtB,kCAAkC;IAClC,mCAAmC;IACnC,6BAA6B;IAC7B,kBAAkB;IAClB,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,sBAAsB;IACtB,2BAA2B;IAC3B,2BAA2B;IAC3B,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,gCAAgC;IAChC,kBAAkB;IAClB,2BAA2B;IAC3B,oBAAoB;IACpB,yBAAyB;IACzB,gBAAgB;IAChB,4BAA4B;IAC5B,6BAA6B;IAC7B,wBAAwB;IACxB,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,oBAAoB;IACpB,gBAAgB;IAChB,eAAe;IACf,2BAA2B;IAC3B,wBAAwB;IACxB,qBAAqB;CACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"architecture-rules.js","sourceRoot":"","sources":["../../../src/check/catalogue/architecture-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-docs.d.ts","sourceRoot":"","sources":["../../../src/check/explain/domain-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4BzD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const DOMAIN_DOCS = {
|
|
2
|
+
'domain/value-object-class': {
|
|
3
|
+
why: 'A value of the model is a class extending ValueObject of the kernel, never a function that builds a plain object. The class compares by value with no identity (equals), checks its invariants once, in the static factory that is the only way in through a private constructor, keeps its behaviour next to its data, refuses an invalid input with the factory of the error of its concept, freezes its props, and is recognised with instanceof by a boundary mapper. A function answering { amount, currency } gives none of that: every caller re-validates, compares field by field, and the operations of the value scatter. So a file of domain/value-objects/ (or a *.vo.ts of the shared kernel) exports one class extending ValueObject, directly or through another value object of the project, with a private or protected constructor and static factories, and no function, arrow constant or object literal; the types of its props may be exported. In domain/ and in the shared kernel outside presentation/, an exported function that answers a record of data (data entries, no spread, nothing a call or new of the model built) is reported. A domain service, a state machine, a specification answering a boolean or an object of functions, a record of value objects the function builds, a record derived by a spread and a function declaring a return type of a package answer something else and are not concerned; a decision answered as a plain record is a value, written as a class or thrown as a refusal. The rule holds under "stack.values": "classes", which init writes; a config that does not say keeps the free form of 0.15.',
|
|
4
|
+
bad: `// domain/value-objects/money.vo.ts
|
|
5
|
+
export type Money = { readonly amount: number; readonly currency: string };
|
|
6
|
+
|
|
7
|
+
export const money = (amount: number, currency: string): Money => ({ amount, currency });`,
|
|
8
|
+
good: `// domain/value-objects/money.vo.ts (npx ddd-ts-kit generate value-object billing Money)
|
|
9
|
+
export type MoneyProps = { readonly amount: number; readonly currency: string };
|
|
10
|
+
|
|
11
|
+
export class Money extends ValueObject<MoneyProps> {
|
|
12
|
+
private constructor(props: MoneyProps) {
|
|
13
|
+
super(props);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
static of(amount: number, currency: string): Money {
|
|
17
|
+
if (!Number.isInteger(amount)) {
|
|
18
|
+
throw InvoiceError.invalidAmount(amount);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return new Money({ amount, currency });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
add(other: Money): Money {
|
|
25
|
+
return Money.of(this.props.amount + other.props.amount, this.props.currency);
|
|
26
|
+
}
|
|
27
|
+
}`,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=domain-docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-docs.js","sourceRoot":"","sources":["../../../src/check/explain/domain-docs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAsC;IAC5D,2BAA2B,EAAE;QAC3B,GAAG,EAAE,8kDAA8kD;QACnlD,GAAG,EAAE;;;0FAGiF;QACtF,IAAI,EAAE;;;;;;;;;;;;;;;;;;;EAmBR;KACC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-docs.d.ts","sourceRoot":"","sources":["../../../src/check/explain/rule-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-docs.d.ts","sourceRoot":"","sources":["../../../src/check/explain/rule-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAsBpD,oGAAoG;AACpG,eAAO,MAAM,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBvD,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AUTHZ_DOCS } from './authz-docs.js';
|
|
2
2
|
import { CLEAN_DOCS } from './clean-docs.js';
|
|
3
3
|
import { CONTEXT_DOCS } from './context-docs.js';
|
|
4
|
+
import { DOMAIN_DOCS } from './domain-docs.js';
|
|
4
5
|
import { ERRORS_DOCS } from './errors-docs.js';
|
|
5
6
|
import { EVENT_SOURCING_DOCS } from './event-sourcing-docs.js';
|
|
6
7
|
import { EVENTS_DOCS } from './events-docs.js';
|
|
@@ -22,6 +23,7 @@ export const RULE_DOCS = {
|
|
|
22
23
|
...AUTHZ_DOCS,
|
|
23
24
|
...CLEAN_DOCS,
|
|
24
25
|
...CONTEXT_DOCS,
|
|
26
|
+
...DOMAIN_DOCS,
|
|
25
27
|
...ERRORS_DOCS,
|
|
26
28
|
...EVENT_SOURCING_DOCS,
|
|
27
29
|
...EVENTS_DOCS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-docs.js","sourceRoot":"","sources":["../../../src/check/explain/rule-docs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oGAAoG;AACpG,MAAM,CAAC,MAAM,SAAS,GAAsC;IAC1D,GAAG,UAAU;IACb,GAAG,UAAU;IACb,GAAG,YAAY;IACf,GAAG,WAAW;IACd,GAAG,mBAAmB;IACtB,GAAG,WAAW;IACd,GAAG,YAAY;IACf,GAAG,aAAa;IAChB,GAAG,UAAU;IACb,GAAG,WAAW;IACd,GAAG,cAAc;IACjB,GAAG,gBAAgB;IACnB,GAAG,UAAU;IACb,GAAG,eAAe;IAClB,GAAG,WAAW;IACd,GAAG,aAAa;IAChB,GAAG,YAAY;IACf,GAAG,SAAS;IACZ,GAAG,WAAW;CACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"rule-docs.js","sourceRoot":"","sources":["../../../src/check/explain/rule-docs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,oGAAoG;AACpG,MAAM,CAAC,MAAM,SAAS,GAAsC;IAC1D,GAAG,UAAU;IACb,GAAG,UAAU;IACb,GAAG,YAAY;IACf,GAAG,WAAW;IACd,GAAG,WAAW;IACd,GAAG,mBAAmB;IACtB,GAAG,WAAW;IACd,GAAG,YAAY;IACf,GAAG,aAAa;IAChB,GAAG,UAAU;IACb,GAAG,WAAW;IACd,GAAG,cAAc;IACjB,GAAG,gBAAgB;IACnB,GAAG,UAAU;IACb,GAAG,eAAe;IAClB,GAAG,WAAW;IACd,GAAG,aAAa;IAChB,GAAG,YAAY;IACf,GAAG,SAAS;IACZ,GAAG,WAAW;CACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/check/fixtures/fixtures.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/check/fixtures/fixtures.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAwCtC,CAAC"}
|
|
@@ -35,6 +35,8 @@ import { TENANCY_FIXTURES } from './tenancy-fixtures.js';
|
|
|
35
35
|
import { TEST_FIXTURES } from './test-fixtures.js';
|
|
36
36
|
import { TRACING_FIXTURES } from './tracing-fixtures.js';
|
|
37
37
|
import { TREE_FIXTURES } from './tree-fixtures.js';
|
|
38
|
+
import { MODEL_FUNCTION_FIXTURES } from './model-function-fixtures.js';
|
|
39
|
+
import { VALUE_OBJECT_FILE_FIXTURES } from './value-object-file-fixtures.js';
|
|
38
40
|
/**
|
|
39
41
|
* Mini-projects proving each rule both ways. They ship with the CLI so that
|
|
40
42
|
* `ddd-ts-kit check --self` can verify an installed build, and the test suite
|
|
@@ -78,5 +80,7 @@ export const FIXTURES = [
|
|
|
78
80
|
...TEST_FIXTURES,
|
|
79
81
|
...TRACING_FIXTURES,
|
|
80
82
|
...TREE_FIXTURES,
|
|
83
|
+
...VALUE_OBJECT_FILE_FIXTURES,
|
|
84
|
+
...MODEL_FUNCTION_FIXTURES,
|
|
81
85
|
];
|
|
82
86
|
//# sourceMappingURL=fixtures.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../src/check/fixtures/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../src/check/fixtures/fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-function-fixtures.d.ts","sourceRoot":"","sources":["../../../src/check/fixtures/model-function-fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAqB5C,oGAAoG;AACpG,eAAO,MAAM,uBAAuB,EAAE,SAAS,OAAO,EAsGrD,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { PATHS } from './paths.js';
|
|
2
|
+
import { project } from './project.js';
|
|
3
|
+
import { SAMPLES } from './samples.js';
|
|
4
|
+
import { VALUE_FILES, VALUES } from './value-object-files.js';
|
|
5
|
+
const { RULE, SERVICE, SHARED_PLAIN, PLAIN } = VALUES;
|
|
6
|
+
const { classes, service } = VALUE_FILES;
|
|
7
|
+
const { BILLING } = PATHS;
|
|
8
|
+
const passing = (name, files) => ({ ruleId: RULE, name, expect: 'pass', files });
|
|
9
|
+
const failing = (name, content) => ({
|
|
10
|
+
ruleId: RULE,
|
|
11
|
+
name,
|
|
12
|
+
expect: { file: SERVICE },
|
|
13
|
+
files: classes(service(content)),
|
|
14
|
+
});
|
|
15
|
+
const MACHINE = `${BILLING}/domain/state-machines/invoice.state-machine.ts`;
|
|
16
|
+
/** What `domain/value-object-class` says of the functions of `domain/` and of the shared kernel. */
|
|
17
|
+
export const MODEL_FUNCTION_FIXTURES = [
|
|
18
|
+
passing('domain functions that answer a value object, a boolean, or a plain object only inside a callback', classes(service('export function invoiceTotal(lines: readonly Money[]): Money {\n const rows = lines.map((line) => {\n return { line, cents: 0 };\n });\n\n return rows.reduce((sum, { line }) => sum.add(line), Money.of(0));\n}\n'))),
|
|
19
|
+
passing('a specification answering an object of functions, literal or built from local closures', classes(service('export const invoiceTotal = (floor: Money) => {\n const isSatisfiedBy = (total: Money): boolean => total.equals(floor);\n\n return {\n isSatisfiedBy,\n describe(): string {\n return String(floor);\n },\n };\n};\n'))),
|
|
20
|
+
passing('a function that takes value objects and answers a record of value objects it builds', classes(service('export const invoiceTotal = (total: Money) => ({ first: Money.of(1), rest: total.add(total) });\n'))),
|
|
21
|
+
passing('a function that derives a record from another with a spread, as a reducer does', classes(service('type InvoiceState = { readonly status: string };\n\nexport const invoiceTotal = (state: InvoiceState, status: string): InvoiceState => ({ ...state, status });\n'))),
|
|
22
|
+
passing('a state machine declaration and a domain service class whose method answers an object', classes({
|
|
23
|
+
[MACHINE]: "import { defineStateMachine } from '@ddd-ts-kit/kernel';\n\nexport const invoiceLifecycle = defineStateMachine({\n states: ['draft', 'issued'],\n initial: ['draft'],\n transitions: { issue: { from: ['draft'], to: 'issued' } },\n refused: () => ({ code: 'REFUSED' }),\n});\n",
|
|
24
|
+
[`${BILLING}/test/unit/invoice.state-machine.spec.ts`]: SAMPLES.SPEC,
|
|
25
|
+
[`${BILLING}/domain/services/invoice-issue.service.ts`]: 'export class InvoiceIssueService {\n issue(): { cents: number } {\n return { cents: 0 };\n }\n}\n',
|
|
26
|
+
[`${BILLING}/test/unit/invoice-issue.service.spec.ts`]: SAMPLES.SPEC,
|
|
27
|
+
})),
|
|
28
|
+
passing('a spec and a presentation file of the shared kernel, outside the model, may build a plain object', classes({
|
|
29
|
+
[`${BILLING}/test/unit/money.spec.ts`]: `import { it } from 'vitest';\n\n${PLAIN}\nit('builds', () => money(1, 'EUR'));\n`,
|
|
30
|
+
'src/shared-kernel/presentation/money.ts': PLAIN,
|
|
31
|
+
})),
|
|
32
|
+
passing('a helper of the shared kernel that answers a type of a package', classes({
|
|
33
|
+
'src/shared-kernel/storable-stamp.ts': "import type { EventStamp } from '@ddd-ts-kit/kernel';\n\nexport function storableStamp(stamp: EventStamp): EventStamp {\n return { eventId: stamp.eventId, occurredAt: new Date(0), version: 1 };\n}\n",
|
|
34
|
+
})),
|
|
35
|
+
passing('a domain function written as a value, in a project whose config does not say "values"', project(service(PLAIN))),
|
|
36
|
+
failing('a domain function that builds a plain object', 'export function invoiceTotal(lines: readonly Money[], currency: string) {\n const cents = Math.round(lines.length);\n\n return { cents, currency };\n}\n'),
|
|
37
|
+
failing('a domain arrow function that answers a plain object', 'export const invoiceTotal = (line: Money, currency: string) => ({ line, currency });\n'),
|
|
38
|
+
failing('a domain constant bound to a function expression that builds a plain object', 'export const invoiceTotal = function (cents: number) {\n return { cents, currency: 0 };\n};\n'),
|
|
39
|
+
failing('a generic domain arrow function that answers a plain object', 'export const invoiceTotal = <T,>(cents: T) => ({ cents, currency: 0 });\n'),
|
|
40
|
+
failing('a domain function exported by an export list', 'export { invoiceTotal };\n\nfunction invoiceTotal(cents: number, currency: string) {\n return { cents, currency };\n}\n'),
|
|
41
|
+
failing('a domain arrow function exported by an export list', 'const invoiceTotal = (cents: number, currency: string) => ({ cents, currency });\n\nexport { invoiceTotal };\n'),
|
|
42
|
+
failing('a domain arrow function exported by default', 'export default (cents: number) => ({ cents, currency: 0 });\n'),
|
|
43
|
+
failing('a decision answered as a plain record', "export const invoiceTotal = (reason: string) => {\n return { kind: 'refused' as const, reason };\n};\n"),
|
|
44
|
+
failing('a value written as a record of data and closures', 'export const invoiceTotal = (cents: number) => ({ cents, doubled: (): number => cents * 2 });\n'),
|
|
45
|
+
{
|
|
46
|
+
ruleId: RULE,
|
|
47
|
+
name: 'a value of the shared kernel written as a function in a file not named *.vo.ts',
|
|
48
|
+
expect: { file: SHARED_PLAIN },
|
|
49
|
+
files: classes({ [SHARED_PLAIN]: PLAIN }),
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
//# sourceMappingURL=model-function-fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-function-fixtures.js","sourceRoot":"","sources":["../../../src/check/fixtures/model-function-fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Fixture } from './fixture.js';
|
|
2
|
+
/** What `domain/value-object-class` says of the files of `domain/value-objects/` and of the `*.vo.ts` of the shared kernel. */
|
|
3
|
+
export declare const VALUE_OBJECT_FILE_FIXTURES: readonly Fixture[];
|
|
4
|
+
//# sourceMappingURL=value-object-file-fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-object-file-fixtures.d.ts","sourceRoot":"","sources":["../../../src/check/fixtures/value-object-file-fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsB5C,+HAA+H;AAC/H,eAAO,MAAM,0BAA0B,EAAE,SAAS,OAAO,EA2FxD,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { PATHS } from './paths.js';
|
|
2
|
+
import { project } from './project.js';
|
|
3
|
+
import { SAMPLES } from './samples.js';
|
|
4
|
+
import { VALUE_FILES, VALUES } from './value-object-files.js';
|
|
5
|
+
const { RULE, MONEY, INVOICE_MONEY, SHARED, PROPS, PRIVATE, OF, PLAIN, KERNEL } = VALUES;
|
|
6
|
+
const { classes, money, VALUE_OBJECT, valueObject } = VALUE_FILES;
|
|
7
|
+
const passing = (name, files) => ({ ruleId: RULE, name, expect: 'pass', files });
|
|
8
|
+
/** A value object file holding `content`: the rule reports it in that file. */
|
|
9
|
+
const failing = (name, content, also) => ({
|
|
10
|
+
ruleId: RULE,
|
|
11
|
+
name,
|
|
12
|
+
expect: { file: MONEY },
|
|
13
|
+
...(also === undefined ? {} : { also }),
|
|
14
|
+
files: classes(valueObject(content)),
|
|
15
|
+
});
|
|
16
|
+
const PROTECTED = ' protected constructor(props: MoneyProps) {\n super(props);\n }\n\n';
|
|
17
|
+
/** What `domain/value-object-class` says of the files of `domain/value-objects/` and of the `*.vo.ts` of the shared kernel. */
|
|
18
|
+
export const VALUE_OBJECT_FILE_FIXTURES = [
|
|
19
|
+
passing('a value object class with a private constructor, a static factory and the type of its props', classes(valueObject(VALUE_OBJECT))),
|
|
20
|
+
passing('a value object extending another one of the project, and one of the shared kernel', classes({
|
|
21
|
+
...valueObject(money(PROTECTED, '').replace('export class Money', 'export abstract class Money')),
|
|
22
|
+
[INVOICE_MONEY]: `${VALUES.IMPORT_MONEY}export class InvoiceMoney extends Money {\n static due(cents: number): InvoiceMoney {\n return new InvoiceMoney({ cents });\n }\n}\n`,
|
|
23
|
+
[`${PATHS.BILLING}/test/unit/invoice-money.vo.spec.ts`]: SAMPLES.SPEC,
|
|
24
|
+
[SHARED]: VALUE_OBJECT,
|
|
25
|
+
})),
|
|
26
|
+
passing('a concrete value object with a protected constructor, and one that declares none', classes({
|
|
27
|
+
...valueObject(money(PROTECTED, VALUES.OF)),
|
|
28
|
+
[INVOICE_MONEY]: `${KERNEL}\nexport class InvoiceMoney extends ValueObject<{ readonly cents: number }> {\n static zero(): InvoiceMoney {\n return new InvoiceMoney({ cents: 0 });\n }\n}\n`,
|
|
29
|
+
[`${PATHS.BILLING}/test/unit/invoice-money.vo.spec.ts`]: SAMPLES.SPEC,
|
|
30
|
+
})),
|
|
31
|
+
passing('a value object class exported after its declaration, by `export default`', classes(valueObject(`${VALUE_OBJECT.replace('export class Money', 'class Money')}\nexport default Money;\n`))),
|
|
32
|
+
passing('a value object file written as a function, in a project whose config does not say "values"', project(valueObject(`${PROPS}\n${PLAIN}`))),
|
|
33
|
+
failing('a value object file holding an arrow function that builds a plain object', `${PROPS}\n${PLAIN}`),
|
|
34
|
+
failing('a value object class that does not extend ValueObject', money(' private constructor(private readonly props: MoneyProps) {}\n\n', OF, '')),
|
|
35
|
+
failing('a value object class with a public constructor', money(' constructor(props: MoneyProps) {\n super(props);\n }\n\n', OF)),
|
|
36
|
+
failing('a value object class without a static factory', money(PRIVATE, '')),
|
|
37
|
+
failing('a value object file that also exports a function', `${VALUE_OBJECT}\nexport function zero(): Money {\n return Money.of(0);\n}\n`, ['clean/one-export-per-file']),
|
|
38
|
+
failing('a value object file that exports a function by an export list', `${VALUE_OBJECT}\nexport { zero };\n\nfunction zero(): Money {\n return Money.of(0);\n}\n`, ['clean/one-export-per-file']),
|
|
39
|
+
failing('a value object file that exports an arrow constant by an export list', `${VALUE_OBJECT}\nconst zero = (): Money => Money.of(0);\n\nexport { zero };\n`, ['clean/one-export-per-file']),
|
|
40
|
+
failing('a value object file that exports a constant bound to a function expression', `${VALUE_OBJECT}\nexport const zero = function (): Money {\n return Money.of(0);\n};\n`, ['clean/one-export-per-file']),
|
|
41
|
+
failing('a value object file that also exports an object literal', `${VALUE_OBJECT}\nexport const ZERO = { cents: 0 };\n`),
|
|
42
|
+
failing('a value object file that exports a parenthesized object literal', `${VALUE_OBJECT}\nexport const ZERO = ({ cents: 0 });\n`),
|
|
43
|
+
failing('a value object file that exports an object literal `as const`', `${VALUE_OBJECT}\nexport const ZERO = { cents: 0 } as const;\n`),
|
|
44
|
+
failing('a value object file that exports an object literal that `satisfies` its props', `${VALUE_OBJECT}\nexport const ZERO = { cents: 0 } satisfies MoneyProps;\n`),
|
|
45
|
+
failing('a value object file whose default export is an object literal', `${VALUE_OBJECT}\nexport default { cents: 0 };\n`),
|
|
46
|
+
failing('a value object file that exports a second class', `${VALUE_OBJECT}\nexport class InvoiceMoney extends ValueObject<MoneyProps> {\n static of(): InvoiceMoney {\n return new InvoiceMoney({ cents: 0 });\n }\n}\n`, ['clean/one-export-per-file', 'naming/one-concept-per-file']),
|
|
47
|
+
{
|
|
48
|
+
ruleId: RULE,
|
|
49
|
+
name: 'a value object of the shared kernel written as a function',
|
|
50
|
+
expect: { file: SHARED },
|
|
51
|
+
files: classes({ [SHARED]: PLAIN }),
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
//# sourceMappingURL=value-object-file-fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-object-file-fixtures.js","sourceRoot":"","sources":["../../../src/check/fixtures/value-object-file-fixtures.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;AACzF,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;AAElE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,KAAuB,EAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAEpH,+EAA+E;AAC/E,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,IAAwB,EAAW,EAAE,CAAC,CAAC;IACrF,MAAM,EAAE,IAAI;IACZ,IAAI;IACJ,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;IACvB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACvC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,0EAA0E,CAAC;AAE7F,+HAA+H;AAC/H,MAAM,CAAC,MAAM,0BAA0B,GAAuB;IAC5D,OAAO,CACL,6FAA6F,EAC7F,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CACnC;IACD,OAAO,CACL,mFAAmF,EACnF,OAAO,CAAC;QACN,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,6BAA6B,CAAC,CAAC;QACjG,CAAC,aAAa,CAAC,EAAE,GAAG,MAAM,CAAC,YAAY,2IAA2I;QAClL,CAAC,GAAG,KAAK,CAAC,OAAO,qCAAqC,CAAC,EAAE,OAAO,CAAC,IAAI;QACrE,CAAC,MAAM,CAAC,EAAE,YAAY;KACvB,CAAC,CACH;IACD,OAAO,CACL,kFAAkF,EAClF,OAAO,CAAC;QACN,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC,aAAa,CAAC,EAAE,GAAG,MAAM,sKAAsK;QAChM,CAAC,GAAG,KAAK,CAAC,OAAO,qCAAqC,CAAC,EAAE,OAAO,CAAC,IAAI;KACtE,CAAC,CACH;IACD,OAAO,CACL,0EAA0E,EAC1E,OAAO,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAC9G;IACD,OAAO,CACL,4FAA4F,EAC5F,OAAO,CAAC,WAAW,CAAC,GAAG,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAC3C;IACD,OAAO,CAAC,0EAA0E,EAAE,GAAG,KAAK,KAAK,KAAK,EAAE,CAAC;IACzG,OAAO,CACL,uDAAuD,EACvD,KAAK,CAAC,kEAAkE,EAAE,EAAE,EAAE,EAAE,CAAC,CAClF;IACD,OAAO,CACL,gDAAgD,EAChD,KAAK,CAAC,gEAAgE,EAAE,EAAE,CAAC,CAC5E;IACD,OAAO,CAAC,+CAA+C,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5E,OAAO,CACL,kDAAkD,EAClD,GAAG,YAAY,+DAA+D,EAC9E,CAAC,2BAA2B,CAAC,CAC9B;IACD,OAAO,CACL,+DAA+D,EAC/D,GAAG,YAAY,4EAA4E,EAC3F,CAAC,2BAA2B,CAAC,CAC9B;IACD,OAAO,CACL,sEAAsE,EACtE,GAAG,YAAY,gEAAgE,EAC/E,CAAC,2BAA2B,CAAC,CAC9B;IACD,OAAO,CACL,4EAA4E,EAC5E,GAAG,YAAY,yEAAyE,EACxF,CAAC,2BAA2B,CAAC,CAC9B;IACD,OAAO,CACL,yDAAyD,EACzD,GAAG,YAAY,uCAAuC,CACvD;IACD,OAAO,CACL,iEAAiE,EACjE,GAAG,YAAY,yCAAyC,CACzD;IACD,OAAO,CACL,+DAA+D,EAC/D,GAAG,YAAY,gDAAgD,CAChE;IACD,OAAO,CACL,+EAA+E,EAC/E,GAAG,YAAY,4DAA4D,CAC5E;IACD,OAAO,CACL,+DAA+D,EAC/D,GAAG,YAAY,kCAAkC,CAClD;IACD,OAAO,CACL,iDAAiD,EACjD,GAAG,YAAY,oJAAoJ,EACnK,CAAC,2BAA2B,EAAE,6BAA6B,CAAC,CAC7D;IACD;QACE,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,2DAA2D;QACjE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACxB,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;KACpC;CACF,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FixtureFiles } from './fixture-files.js';
|
|
2
|
+
/** The files and sources the fixtures of `domain/value-object-class` share. */
|
|
3
|
+
export declare const VALUES: {
|
|
4
|
+
readonly RULE: 'domain/value-object-class';
|
|
5
|
+
readonly MONEY: "src/contexts/billing/domain/value-objects/money.vo.ts";
|
|
6
|
+
readonly INVOICE_MONEY: "src/contexts/billing/domain/value-objects/invoice-money.vo.ts";
|
|
7
|
+
readonly SERVICE: "src/contexts/billing/domain/services/invoice-total.service.ts";
|
|
8
|
+
readonly SHARED: 'src/shared-kernel/money.vo.ts';
|
|
9
|
+
readonly SHARED_PLAIN: 'src/shared-kernel/money.ts';
|
|
10
|
+
readonly KERNEL: "import { ValueObject } from '@ddd-ts-kit/kernel';\n";
|
|
11
|
+
readonly PROPS: 'export type MoneyProps = {\n readonly cents: number;\n};\n';
|
|
12
|
+
readonly PRIVATE: ' private constructor(props: MoneyProps) {\n super(props);\n }\n\n';
|
|
13
|
+
readonly OF: ' static of(cents: number): Money {\n return new Money({ cents });\n }\n\n';
|
|
14
|
+
readonly PLAIN: 'export const money = (cents: number, currency: string) => ({ cents, currency });\n';
|
|
15
|
+
readonly IMPORT_MONEY: "import { Money } from '@/contexts/billing/domain/value-objects/money.vo.js';\n\n";
|
|
16
|
+
};
|
|
17
|
+
/** The builders of the fixtures of `domain/value-object-class`. */
|
|
18
|
+
export declare const VALUE_FILES: {
|
|
19
|
+
money: typeof money;
|
|
20
|
+
classes: typeof classes;
|
|
21
|
+
service: typeof service;
|
|
22
|
+
valueObject: typeof valueObject;
|
|
23
|
+
VALUE_OBJECT: string;
|
|
24
|
+
};
|
|
25
|
+
/** `Money`, a class of `money.vo.ts` with the constructor, the factories and the heritage given. */
|
|
26
|
+
declare function money(constructor: string, factory: string, base?: string): string;
|
|
27
|
+
/** A project that writes its values as classes, as `init` writes it, holding `files`. */
|
|
28
|
+
declare function classes(files: FixtureFiles): FixtureFiles;
|
|
29
|
+
/** The value object and a domain service holding `content`, each with its spec. */
|
|
30
|
+
declare function service(content: string): FixtureFiles;
|
|
31
|
+
/** `money.vo.ts` holding `content`, with its spec. */
|
|
32
|
+
declare function valueObject(content: string): FixtureFiles;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=value-object-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-object-files.d.ts","sourceRoot":"","sources":["../../../src/check/fixtures/value-object-files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOvD,+EAA+E;AAC/E,eAAO,MAAM,MAAM;aACjB,IAAI,EAAE,2BAA2B;aACjC,KAAK;aACL,aAAa;aACb,OAAO;aACP,MAAM,EAAE,+BAA+B;aACvC,YAAY,EAAE,4BAA4B;aAC1C,MAAM,EAAE,qDAAqD;aAC7D,KAAK,EAAE,6DAA6D;aACpE,OAAO,EAAE,wEAAwE;aACjF,EAAE,EAAE,gFAAgF;aACpF,KAAK,EAAE,oFAAoF;aAC3F,YAAY,EAAE,kFAAkF;CACxF,CAAC;AAKX,mEAAmE;AACnE,eAAO,MAAM,WAAW;;;;;;CAAyD,CAAC;AAElF,oGAAoG;AACpG,iBAAS,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,SAAqC,GAAG,MAAM,CAEtG;AAED,yFAAyF;AACzF,iBAAS,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAElD;AAED,mFAAmF;AACnF,iBAAS,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAM9C;AAED,sDAAsD;AACtD,iBAAS,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAElD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { CONFIG_FILE } from '../../config/index.js';
|
|
2
|
+
import { config } from './config.js';
|
|
3
|
+
import { PATHS } from './paths.js';
|
|
4
|
+
import { project } from './project.js';
|
|
5
|
+
import { SAMPLES } from './samples.js';
|
|
6
|
+
const { BILLING } = PATHS;
|
|
7
|
+
/** The files and sources the fixtures of `domain/value-object-class` share. */
|
|
8
|
+
export const VALUES = {
|
|
9
|
+
RULE: 'domain/value-object-class',
|
|
10
|
+
MONEY: `${BILLING}/domain/value-objects/money.vo.ts`,
|
|
11
|
+
INVOICE_MONEY: `${BILLING}/domain/value-objects/invoice-money.vo.ts`,
|
|
12
|
+
SERVICE: `${BILLING}/domain/services/invoice-total.service.ts`,
|
|
13
|
+
SHARED: 'src/shared-kernel/money.vo.ts',
|
|
14
|
+
SHARED_PLAIN: 'src/shared-kernel/money.ts',
|
|
15
|
+
KERNEL: "import { ValueObject } from '@ddd-ts-kit/kernel';\n",
|
|
16
|
+
PROPS: 'export type MoneyProps = {\n readonly cents: number;\n};\n',
|
|
17
|
+
PRIVATE: ' private constructor(props: MoneyProps) {\n super(props);\n }\n\n',
|
|
18
|
+
OF: ' static of(cents: number): Money {\n return new Money({ cents });\n }\n\n',
|
|
19
|
+
PLAIN: 'export const money = (cents: number, currency: string) => ({ cents, currency });\n',
|
|
20
|
+
IMPORT_MONEY: "import { Money } from '@/contexts/billing/domain/value-objects/money.vo.js';\n\n",
|
|
21
|
+
};
|
|
22
|
+
/** The value object every passing fixture starts from: a private constructor and a static factory. */
|
|
23
|
+
const VALUE_OBJECT = money(VALUES.PRIVATE, VALUES.OF);
|
|
24
|
+
/** The builders of the fixtures of `domain/value-object-class`. */
|
|
25
|
+
export const VALUE_FILES = { money, classes, service, valueObject, VALUE_OBJECT };
|
|
26
|
+
/** `Money`, a class of `money.vo.ts` with the constructor, the factories and the heritage given. */
|
|
27
|
+
function money(constructor, factory, base = 'extends ValueObject<MoneyProps> ') {
|
|
28
|
+
return `${VALUES.KERNEL}\n${VALUES.PROPS}\nexport class Money ${base}{\n${constructor}${factory} add(other: Money): Money {\n return Money.of(this.props.cents + other.props.cents);\n }\n}\n`;
|
|
29
|
+
}
|
|
30
|
+
/** A project that writes its values as classes, as `init` writes it, holding `files`. */
|
|
31
|
+
function classes(files) {
|
|
32
|
+
return project(files, { [CONFIG_FILE]: config({ stack: { values: 'classes' } }) });
|
|
33
|
+
}
|
|
34
|
+
/** The value object and a domain service holding `content`, each with its spec. */
|
|
35
|
+
function service(content) {
|
|
36
|
+
return {
|
|
37
|
+
...valueObject(VALUE_OBJECT),
|
|
38
|
+
[VALUES.SERVICE]: `${VALUES.IMPORT_MONEY}${content}`,
|
|
39
|
+
[`${BILLING}/test/unit/invoice-total.service.spec.ts`]: SAMPLES.SPEC,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** `money.vo.ts` holding `content`, with its spec. */
|
|
43
|
+
function valueObject(content) {
|
|
44
|
+
return { [VALUES.MONEY]: content, [`${BILLING}/test/unit/money.vo.spec.ts`]: SAMPLES.SPEC };
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=value-object-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-object-files.js","sourceRoot":"","sources":["../../../src/check/fixtures/value-object-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAE1B,+EAA+E;AAC/E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,2BAA2B;IACjC,KAAK,EAAE,GAAG,OAAO,mCAAmC;IACpD,aAAa,EAAE,GAAG,OAAO,2CAA2C;IACpE,OAAO,EAAE,GAAG,OAAO,2CAA2C;IAC9D,MAAM,EAAE,+BAA+B;IACvC,YAAY,EAAE,4BAA4B;IAC1C,MAAM,EAAE,qDAAqD;IAC7D,KAAK,EAAE,6DAA6D;IACpE,OAAO,EAAE,wEAAwE;IACjF,EAAE,EAAE,gFAAgF;IACpF,KAAK,EAAE,oFAAoF;IAC3F,YAAY,EAAE,kFAAkF;CACxF,CAAC;AAEX,sGAAsG;AACtG,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAEtD,mEAAmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAElF,oGAAoG;AACpG,SAAS,KAAK,CAAC,WAAmB,EAAE,OAAe,EAAE,IAAI,GAAG,kCAAkC;IAC5F,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,wBAAwB,IAAI,MAAM,WAAW,GAAG,OAAO,oGAAoG,CAAC;AACtM,CAAC;AAED,yFAAyF;AACzF,SAAS,OAAO,CAAC,KAAmB;IAClC,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,mFAAmF;AACnF,SAAS,OAAO,CAAC,OAAe;IAC9B,OAAO;QACL,GAAG,WAAW,CAAC,YAAY,CAAC;QAC5B,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,YAAY,GAAG,OAAO,EAAE;QACpD,CAAC,GAAG,OAAO,0CAA0C,CAAC,EAAE,OAAO,CAAC,IAAI;KACrE,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,6BAA6B,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AAC9F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-value-object-class.d.ts","sourceRoot":"","sources":["../../../src/check/rules/domain-value-object-class.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAQ7C,eAAO,MAAM,sBAAsB,EAAE,IAQpC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { perFile } from '../support/per-file.js';
|
|
2
|
+
import { isModelFile } from '../values/is-model-file.js';
|
|
3
|
+
import { isValueObjectFile } from '../values/is-value-object-file.js';
|
|
4
|
+
import { plainValueFunctions } from '../values/plain-value-functions.js';
|
|
5
|
+
import { valueObjectFileFindings } from '../values/value-object-file-findings.js';
|
|
6
|
+
export const domainValueObjectClass = {
|
|
7
|
+
id: 'domain/value-object-class',
|
|
8
|
+
description: 'Under "stack.values": "classes", a value object is a class: a file of domain/value-objects/ (or a *.vo.ts of the shared kernel) exports one class extending ValueObject, with a private or protected constructor and static factories, and no function or object literal; no exported function of domain/ or of the shared kernel answers a record of data (no spread, nothing a call of the model built).',
|
|
9
|
+
scope: 'file',
|
|
10
|
+
run(project) {
|
|
11
|
+
return project.config.stack.values === 'classes' ? perFile(project, this.id, (file) => judge(project, file)) : [];
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
function judge(project, file) {
|
|
15
|
+
const { sharedKernelDir } = project.config;
|
|
16
|
+
if (isValueObjectFile(file.path, file.location, sharedKernelDir)) {
|
|
17
|
+
return valueObjectFileFindings(file, sharedKernelDir);
|
|
18
|
+
}
|
|
19
|
+
return isModelFile(file.path, file.location, sharedKernelDir) && !file.isTest ? plainValueFunctions(file) : [];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=domain-value-object-class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-value-object-class.js","sourceRoot":"","sources":["../../../src/check/rules/domain-value-object-class.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,EAAE,EAAE,2BAA2B;IAC/B,WAAW,EACT,4YAA4Y;IAC9Y,KAAK,EAAE,MAAM;IACb,GAAG,CAAC,OAAO;QACT,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpH,CAAC;CACF,CAAC;AAEF,SAAS,KAAK,CAAC,OAAgB,EAAE,IAAgB;IAC/C,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAE3C,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;QACjE,OAAO,uBAAuB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The brace opening the body of a class whose heritage starts at `from`, past the object types
|
|
3
|
+
* its type arguments may hold: `class Money extends ValueObject<{ readonly cents: number }> {`.
|
|
4
|
+
*/
|
|
5
|
+
export declare function classBodyBrace(code: string, from: number): number;
|
|
6
|
+
//# sourceMappingURL=class-body-brace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-body-brace.d.ts","sourceRoot":"","sources":["../../../src/check/structure/class-body-brace.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBjE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { matchingBracket } from '../text/matching-bracket.js';
|
|
2
|
+
/**
|
|
3
|
+
* The brace opening the body of a class whose heritage starts at `from`, past the object types
|
|
4
|
+
* its type arguments may hold: `class Money extends ValueObject<{ readonly cents: number }> {`.
|
|
5
|
+
*/
|
|
6
|
+
export function classBodyBrace(code, from) {
|
|
7
|
+
let angles = 0;
|
|
8
|
+
for (let i = from; i < code.length; i += 1) {
|
|
9
|
+
const char = code.charAt(i);
|
|
10
|
+
if (char === '{' && angles === 0) {
|
|
11
|
+
return i;
|
|
12
|
+
}
|
|
13
|
+
if (char === '<' || (char === '>' && code.charAt(i - 1) !== '=')) {
|
|
14
|
+
angles += char === '<' ? 1 : -1;
|
|
15
|
+
}
|
|
16
|
+
else if ('({['.includes(char)) {
|
|
17
|
+
i = matchingBracket(code, i);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return code.length - 1;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=class-body-brace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-body-brace.js","sourceRoot":"","sources":["../../../src/check/structure/class-body-brace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY;IACvD,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,IAAI,KAAK,GAAG,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-structure.d.ts","sourceRoot":"","sources":["../../../src/check/structure/read-structure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"read-structure.d.ts","sourceRoot":"","sources":["../../../src/check/structure/read-structure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACjD;AAQD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAKnD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { braceDepthAt } from '../text/brace-depth-at.js';
|
|
2
|
+
import { classBodyBrace } from './class-body-brace.js';
|
|
2
3
|
import { matchingBracket } from '../text/matching-bracket.js';
|
|
3
4
|
import { methodsOf } from './methods-of.js';
|
|
4
5
|
import { signatureAt } from './signature-at.js';
|
|
@@ -18,7 +19,8 @@ export function readStructure(scan) {
|
|
|
18
19
|
}
|
|
19
20
|
function classShape(scan, match) {
|
|
20
21
|
const { code } = scan;
|
|
21
|
-
const
|
|
22
|
+
const named = /^class\s+[\w$]+/.exec(match[0])?.[0].length ?? 0;
|
|
23
|
+
const bodyStart = classBodyBrace(code, match.index + named);
|
|
22
24
|
const bodyClose = matchingBracket(code, bodyStart);
|
|
23
25
|
const before = BEFORE_CLASS.exec(code.slice(Math.max(0, match.index - 40), match.index));
|
|
24
26
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-structure.js","sourceRoot":"","sources":["../../../src/check/structure/read-structure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,MAAM,KAAK,GAAG,6FAA6F,CAAC;AAC5G,MAAM,YAAY,GAAG,2DAA2D,CAAC;AAEjF,MAAM,QAAQ,GACZ,6GAA6G,CAAC;AAEhH;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC/E,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAU,EAAE,KAAsB;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"read-structure.js","sourceRoot":"","sources":["../../../src/check/structure/read-structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FunctionBody } from './function-body.js';
|
|
2
|
+
/**
|
|
3
|
+
* The object literals a function answers by itself, as the offsets of their `{`: the expression
|
|
4
|
+
* of an arrow, or what a `return` of its own block gives back. A `return` of a function nested
|
|
5
|
+
* in it answers for that function, not for this one.
|
|
6
|
+
*/
|
|
7
|
+
export declare function answeredLiterals(code: string, body: FunctionBody): number[];
|
|
8
|
+
//# sourceMappingURL=answered-literals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answered-literals.d.ts","sourceRoot":"","sources":["../../../src/check/values/answered-literals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAa3E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { literalAt } from './literal-at.js';
|
|
2
|
+
import { nestedBodies } from './nested-bodies.js';
|
|
3
|
+
const RETURN = /(?<![\w$.])return\b/g;
|
|
4
|
+
/**
|
|
5
|
+
* The object literals a function answers by itself, as the offsets of their `{`: the expression
|
|
6
|
+
* of an arrow, or what a `return` of its own block gives back. A `return` of a function nested
|
|
7
|
+
* in it answers for that function, not for this one.
|
|
8
|
+
*/
|
|
9
|
+
export function answeredLiterals(code, body) {
|
|
10
|
+
if (body.kind === 'expression') {
|
|
11
|
+
const literal = literalAt(code, body.start);
|
|
12
|
+
return literal === undefined ? [] : [literal];
|
|
13
|
+
}
|
|
14
|
+
const nested = nestedBodies(code, body.open, body.close);
|
|
15
|
+
const own = (index) => !nested.some(([open, close]) => index > open && index < close);
|
|
16
|
+
return [...code.matchAll(RETURN)]
|
|
17
|
+
.filter(({ index }) => index > body.open && index < body.close && own(index))
|
|
18
|
+
.flatMap(({ index, 0: keyword }) => literalAt(code, index + keyword.length) ?? []);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=answered-literals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answered-literals.js","sourceRoot":"","sources":["../../../src/check/values/answered-literals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,GAAG,sBAAsB,CAAC;AAEtC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAkB;IAC/D,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5C,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC;IAEvG,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC9B,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;SAC5E,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FunctionBody } from './function-body.js';
|
|
2
|
+
/** The body of the arrow function the expression at `from` is; undefined when the expression is not one. */
|
|
3
|
+
export declare function arrowBody(code: string, from: number): FunctionBody | undefined;
|
|
4
|
+
//# sourceMappingURL=arrow-body.d.ts.map
|