ddd-ts-kit 0.16.1 → 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.
Files changed (138) hide show
  1. package/README.fr.md +5 -4
  2. package/README.md +4 -3
  3. package/dist/check/business-names/closing-parenthesis.d.ts +3 -0
  4. package/dist/check/business-names/closing-parenthesis.d.ts.map +1 -0
  5. package/dist/check/business-names/closing-parenthesis.js +16 -0
  6. package/dist/check/business-names/closing-parenthesis.js.map +1 -0
  7. package/dist/check/business-names/declared-bindings.d.ts +4 -0
  8. package/dist/check/business-names/declared-bindings.d.ts.map +1 -0
  9. package/dist/check/business-names/declared-bindings.js +41 -0
  10. package/dist/check/business-names/declared-bindings.js.map +1 -0
  11. package/dist/check/business-names/generic-words-of.d.ts +4 -0
  12. package/dist/check/business-names/generic-words-of.d.ts.map +1 -0
  13. package/dist/check/business-names/generic-words-of.js +7 -0
  14. package/dist/check/business-names/generic-words-of.js.map +1 -0
  15. package/dist/check/business-names/generic-words.d.ts +7 -0
  16. package/dist/check/business-names/generic-words.d.ts.map +1 -0
  17. package/dist/check/business-names/generic-words.js +26 -0
  18. package/dist/check/business-names/generic-words.js.map +1 -0
  19. package/dist/check/business-names/identifier-at.d.ts +3 -0
  20. package/dist/check/business-names/identifier-at.d.ts.map +1 -0
  21. package/dist/check/business-names/identifier-at.js +6 -0
  22. package/dist/check/business-names/identifier-at.js.map +1 -0
  23. package/dist/check/business-names/judges-names.d.ts +7 -0
  24. package/dist/check/business-names/judges-names.d.ts.map +1 -0
  25. package/dist/check/business-names/judges-names.js +14 -0
  26. package/dist/check/business-names/judges-names.js.map +1 -0
  27. package/dist/check/business-names/named-binding.d.ts +12 -0
  28. package/dist/check/business-names/named-binding.d.ts.map +1 -0
  29. package/dist/check/business-names/named-binding.js +2 -0
  30. package/dist/check/business-names/named-binding.js.map +1 -0
  31. package/dist/check/business-names/named-bindings.d.ts +4 -0
  32. package/dist/check/business-names/named-bindings.d.ts.map +1 -0
  33. package/dist/check/business-names/named-bindings.js +8 -0
  34. package/dist/check/business-names/named-bindings.js.map +1 -0
  35. package/dist/check/business-names/opening-bracket.d.ts +3 -0
  36. package/dist/check/business-names/opening-bracket.d.ts.map +1 -0
  37. package/dist/check/business-names/opening-bracket.js +16 -0
  38. package/dist/check/business-names/opening-bracket.js.map +1 -0
  39. package/dist/check/business-names/parameter-bindings.d.ts +4 -0
  40. package/dist/check/business-names/parameter-bindings.d.ts.map +1 -0
  41. package/dist/check/business-names/parameter-bindings.js +28 -0
  42. package/dist/check/business-names/parameter-bindings.js.map +1 -0
  43. package/dist/check/business-names/parameter-lists.d.ts +14 -0
  44. package/dist/check/business-names/parameter-lists.d.ts.map +1 -0
  45. package/dist/check/business-names/parameter-lists.js +109 -0
  46. package/dist/check/business-names/parameter-lists.js.map +1 -0
  47. package/dist/check/business-names/pattern-bindings.d.ts +7 -0
  48. package/dist/check/business-names/pattern-bindings.d.ts.map +1 -0
  49. package/dist/check/business-names/pattern-bindings.js +31 -0
  50. package/dist/check/business-names/pattern-bindings.js.map +1 -0
  51. package/dist/check/business-names/property-bindings.d.ts +7 -0
  52. package/dist/check/business-names/property-bindings.d.ts.map +1 -0
  53. package/dist/check/business-names/property-bindings.js +31 -0
  54. package/dist/check/business-names/property-bindings.js.map +1 -0
  55. package/dist/check/business-names/suggested-name.d.ts +8 -0
  56. package/dist/check/business-names/suggested-name.d.ts.map +1 -0
  57. package/dist/check/business-names/suggested-name.js +28 -0
  58. package/dist/check/business-names/suggested-name.js.map +1 -0
  59. package/dist/check/business-names/top-level-separator.d.ts +3 -0
  60. package/dist/check/business-names/top-level-separator.d.ts.map +1 -0
  61. package/dist/check/business-names/top-level-separator.js +23 -0
  62. package/dist/check/business-names/top-level-separator.js.map +1 -0
  63. package/dist/check/catalogue/architecture-rules.d.ts.map +1 -1
  64. package/dist/check/catalogue/architecture-rules.js +2 -0
  65. package/dist/check/catalogue/architecture-rules.js.map +1 -1
  66. package/dist/check/explain/tree-docs.d.ts.map +1 -1
  67. package/dist/check/explain/tree-docs.js +11 -0
  68. package/dist/check/explain/tree-docs.js.map +1 -1
  69. package/dist/check/fixtures/business-name-fixtures.d.ts +3 -0
  70. package/dist/check/fixtures/business-name-fixtures.d.ts.map +1 -0
  71. package/dist/check/fixtures/business-name-fixtures.js +98 -0
  72. package/dist/check/fixtures/business-name-fixtures.js.map +1 -0
  73. package/dist/check/fixtures/fixtures.d.ts.map +1 -1
  74. package/dist/check/fixtures/fixtures.js +2 -0
  75. package/dist/check/fixtures/fixtures.js.map +1 -1
  76. package/dist/check/rules/naming-business-name.d.ts +3 -0
  77. package/dist/check/rules/naming-business-name.d.ts.map +1 -0
  78. package/dist/check/rules/naming-business-name.js +41 -0
  79. package/dist/check/rules/naming-business-name.js.map +1 -0
  80. package/dist/config/config.d.ts +8 -0
  81. package/dist/config/config.d.ts.map +1 -1
  82. package/dist/config/parse-business-names.d.ts +4 -0
  83. package/dist/config/parse-business-names.d.ts.map +1 -0
  84. package/dist/config/parse-business-names.js +14 -0
  85. package/dist/config/parse-business-names.js.map +1 -0
  86. package/dist/config/parse-config.d.ts.map +1 -1
  87. package/dist/config/parse-config.js +2 -0
  88. package/dist/config/parse-config.js.map +1 -1
  89. package/dist/config/serialize-config.js +9 -1
  90. package/dist/config/serialize-config.js.map +1 -1
  91. package/dist/generate/kinds/query-kind.d.ts.map +1 -1
  92. package/dist/generate/kinds/query-kind.js +2 -1
  93. package/dist/generate/kinds/query-kind.js.map +1 -1
  94. package/dist/generate/kinds/route/write-controller.d.ts.map +1 -1
  95. package/dist/generate/kinds/route/write-controller.js +2 -1
  96. package/dist/generate/kinds/route/write-controller.js.map +1 -1
  97. package/dist/generate/kinds/route-kind.d.ts.map +1 -1
  98. package/dist/generate/kinds/route-kind.js +2 -1
  99. package/dist/generate/kinds/route-kind.js.map +1 -1
  100. package/dist/generate/searched-elements.d.ts +13 -0
  101. package/dist/generate/searched-elements.d.ts.map +1 -0
  102. package/dist/generate/searched-elements.js +63 -0
  103. package/dist/generate/searched-elements.js.map +1 -0
  104. package/dist/init/manifest/versions.js +24 -24
  105. package/dist/naming/index.d.ts +2 -0
  106. package/dist/naming/index.d.ts.map +1 -1
  107. package/dist/naming/index.js +2 -0
  108. package/dist/naming/index.js.map +1 -1
  109. package/dist/naming/plural.d.ts +3 -0
  110. package/dist/naming/plural.d.ts.map +1 -0
  111. package/dist/naming/plural.js +8 -0
  112. package/dist/naming/plural.js.map +1 -0
  113. package/dist/naming/singular.d.ts +3 -0
  114. package/dist/naming/singular.d.ts.map +1 -0
  115. package/dist/naming/singular.js +11 -0
  116. package/dist/naming/singular.js.map +1 -0
  117. package/dist/naming/to-name.d.ts.map +1 -1
  118. package/dist/naming/to-name.js +1 -6
  119. package/dist/naming/to-name.js.map +1 -1
  120. package/dist/version.d.ts +1 -1
  121. package/dist/version.js +1 -1
  122. package/package.json +2 -2
  123. package/templates/command/handler.declared.ts.tpl +3 -3
  124. package/templates/command/handler.ts.tpl +3 -3
  125. package/templates/controller/controller.search.ts.tpl +1 -1
  126. package/templates/init/rules/application.md.tpl +1 -1
  127. package/templates/init/rules/domain.md.tpl +1 -1
  128. package/templates/init/scripts/events.ts.tpl +6 -6
  129. package/templates/init/scripts/openapi.ts.tpl +2 -2
  130. package/templates/pipeline/package-scripts.json +1 -1
  131. package/templates/policy/policy.declared.ts.tpl +1 -1
  132. package/templates/policy/policy.ts.tpl +1 -1
  133. package/templates/presets/identity/context/infrastructure/persistence/drizzle-search-members-reader.repository.drizzle.ts.tpl +2 -2
  134. package/templates/presets/identity/context/presentation/http/organisations/search-members/search-members.controller.ts.tpl +2 -2
  135. package/templates/presets/identity/context/test/integration/search-members-reader.spec.ts.tpl +1 -1
  136. package/templates/query/search.reader.fake.ts.tpl +1 -1
  137. package/templates/query/search.reader.in-memory.ts.tpl +20 -18
  138. package/templates/route/route.search.ts.tpl +1 -1
@@ -17,38 +17,40 @@ import type {
17
17
  @Repository({{name.pascal}}Reader)
18
18
  {{/if}}
19
19
  export class InMemory{{name.pascal}}Reader implements {{name.pascal}}Reader {
20
- protected readonly items: readonly {{name.pascal}}Item[] = [];
20
+ protected readonly {{search.elements}}: readonly {{name.pascal}}Item[] = [];
21
21
 
22
22
  async search(scope: AccessScope, page: PageRequest<{{name.pascal}}Sort>): Promise<{{name.pascal}}Result> {
23
23
  // TODO(domain): replace these canned lines by a real read of the projection; a production adapter (SQL view, search index) implements the same port next to this file, turns the scope into a condition of its statement, and orders by the sort field then by `id` in the same direction, so that a cursor resumes on a total order.
24
- const visible = this.items.filter((item) => isVisible(item, scope)).sort(inOrder(page));
24
+ const visible = this.{{search.elements}}.filter(isVisibleTo(scope)).sort(inOrder(page));
25
25
  const start = page.kind === 'offset' ? page.offset : positionAfter(visible, page.cursor);
26
- const items = visible.slice(start, start + page.limit);
26
+ const {{search.elements}} = visible.slice(start, start + page.limit);
27
27
 
28
28
  if (page.kind === 'offset') {
29
- return pageOf(items, { total: visible.length });
29
+ return pageOf({{search.elements}}, { total: visible.length });
30
30
  }
31
31
 
32
- const last = items.at(-1);
32
+ const last = {{search.elements}}.at(-1);
33
33
 
34
34
  return pageOf(
35
- items,
35
+ {{search.elements}},
36
36
  last !== undefined && start + page.limit < visible.length ? { nextCursor: encodeCursor({ id: last.id }) } : {},
37
37
  );
38
38
  }
39
39
  }
40
40
 
41
- function isVisible(item: {{name.pascal}}Item, scope: AccessScope): boolean {
42
- switch (scope.kind) {
43
- case 'all':
44
- return true;
45
- case 'none':
46
- return false;
47
- case 'ids':
48
- return scope.ids.includes(item.id);
49
- case 'filter':
50
- return Object.entries(scope.filter).every(([field, value]) => Reflect.get(item, field) === value);
51
- }
41
+ function isVisibleTo(scope: AccessScope): ({{search.element}}: {{name.pascal}}Item) => boolean {
42
+ return ({{search.element}}) => {
43
+ switch (scope.kind) {
44
+ case 'all':
45
+ return true;
46
+ case 'none':
47
+ return false;
48
+ case 'ids':
49
+ return scope.ids.includes({{search.element}}.id);
50
+ case 'filter':
51
+ return Object.entries(scope.filter).every(([field, value]) => Reflect.get({{search.element}}, field) === value);
52
+ }
53
+ };
52
54
  }
53
55
 
54
56
  function inOrder(page: PageRequest<{{name.pascal}}Sort>): (left: {{name.pascal}}Item, right: {{name.pascal}}Item) => number {
@@ -68,5 +70,5 @@ function positionAfter(visible: readonly {{name.pascal}}Item[], cursor: string |
68
70
  throw new InvalidPageRequestError('The cursor of a page is the nextCursor of a previous page');
69
71
  }
70
72
 
71
- return visible.findIndex((item) => item.id === id) + 1;
73
+ return visible.findIndex(({{search.element}}) => {{search.element}}.id === id) + 1;
72
74
  }
@@ -84,7 +84,7 @@ export function {{name.camel}}Route(queries: QueryBus): Route {
84
84
  // TODO(domain): hand the criteria of the query over too, once the query schema declares them next to the page; map each line to its public fields.
85
85
  const page = await queries.execute(new {{route.input}}(actorOf(input.context.principal), input.query));
86
86
 
87
- return { status: 200, body: pageResponse(page, (item) => ({ id: item.id })) };
87
+ return { status: 200, body: pageResponse(page, ({{search.element}}) => ({ id: {{search.element}}.id })) };
88
88
  },
89
89
  );
90
90
  }