@auto-engineer/server-generator-apollo-emmett 0.10.4 → 0.11.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 (104) hide show
  1. package/.turbo/turbo-build.log +6 -0
  2. package/.turbo/turbo-format.log +5 -0
  3. package/.turbo/turbo-lint.log +4 -0
  4. package/.turbo/turbo-test.log +22 -0
  5. package/.turbo/turbo-type-check.log +5 -0
  6. package/CHANGELOG.md +20 -0
  7. package/dist/src/codegen/extract/events.d.ts +2 -2
  8. package/dist/src/codegen/extract/events.d.ts.map +1 -1
  9. package/dist/src/codegen/extract/events.js +16 -6
  10. package/dist/src/codegen/extract/events.js.map +1 -1
  11. package/dist/src/codegen/extract/gwt.js +7 -22
  12. package/dist/src/codegen/extract/gwt.js.map +1 -1
  13. package/dist/src/codegen/extract/imports.d.ts +29 -0
  14. package/dist/src/codegen/extract/imports.d.ts.map +1 -0
  15. package/dist/src/codegen/extract/imports.js +55 -0
  16. package/dist/src/codegen/extract/imports.js.map +1 -0
  17. package/dist/src/codegen/extract/index.d.ts +1 -0
  18. package/dist/src/codegen/extract/index.d.ts.map +1 -1
  19. package/dist/src/codegen/extract/index.js +1 -0
  20. package/dist/src/codegen/extract/index.js.map +1 -1
  21. package/dist/src/codegen/extract/messages.d.ts.map +1 -1
  22. package/dist/src/codegen/extract/messages.js +33 -7
  23. package/dist/src/codegen/extract/messages.js.map +1 -1
  24. package/dist/src/codegen/extract/query.d.ts +3 -1
  25. package/dist/src/codegen/extract/query.d.ts.map +1 -1
  26. package/dist/src/codegen/extract/query.js +12 -12
  27. package/dist/src/codegen/extract/query.js.map +1 -1
  28. package/dist/src/codegen/scaffoldFromSchema.d.ts.map +1 -1
  29. package/dist/src/codegen/scaffoldFromSchema.js +9 -1
  30. package/dist/src/codegen/scaffoldFromSchema.js.map +1 -1
  31. package/dist/src/codegen/templates/command/decide.specs.specs.ts +235 -8
  32. package/dist/src/codegen/templates/command/decide.specs.ts +8 -8
  33. package/dist/src/codegen/templates/command/decide.specs.ts.ejs +95 -30
  34. package/dist/src/codegen/templates/command/decide.ts.ejs +2 -2
  35. package/dist/src/codegen/templates/command/events.ts.ejs +2 -2
  36. package/dist/src/codegen/templates/command/evolve.ts.ejs +3 -3
  37. package/dist/src/codegen/templates/command/handle.specs.ts +6 -6
  38. package/dist/src/codegen/templates/command/handle.ts.ejs +3 -3
  39. package/dist/src/codegen/templates/query/projection.specs.specs.ts +623 -0
  40. package/dist/src/codegen/templates/query/projection.specs.ts +1 -1
  41. package/dist/src/codegen/templates/query/projection.specs.ts.ejs +176 -52
  42. package/dist/src/codegen/templates/query/projection.ts.ejs +30 -29
  43. package/dist/src/codegen/templates/query/query.resolver.specs.ts +190 -5
  44. package/dist/src/codegen/templates/query/query.resolver.ts.ejs +31 -9
  45. package/dist/src/codegen/templates/react/react.specs.specs.ts +8 -5
  46. package/dist/src/codegen/templates/react/react.specs.ts +4 -4
  47. package/dist/src/codegen/templates/react/react.specs.ts.ejs +118 -67
  48. package/dist/src/codegen/templates/react/react.ts.ejs +4 -4
  49. package/dist/src/codegen/templates/react/register.specs.ts +2 -2
  50. package/dist/src/codegen/templates/react/register.ts.ejs +2 -2
  51. package/dist/src/codegen/types.d.ts +2 -0
  52. package/dist/src/codegen/types.d.ts.map +1 -1
  53. package/dist/src/commands/generate-server.d.ts.map +1 -1
  54. package/dist/src/commands/generate-server.js +3 -0
  55. package/dist/src/commands/generate-server.js.map +1 -1
  56. package/dist/src/domain/shared/ReadModel.d.ts +2 -2
  57. package/dist/src/domain/shared/ReadModel.d.ts.map +1 -1
  58. package/dist/src/domain/shared/ReadModel.js +2 -2
  59. package/dist/src/domain/shared/ReadModel.js.map +1 -1
  60. package/dist/src/domain/shared/ReadModel.ts +3 -3
  61. package/dist/src/domain/shared/types.d.ts +5 -3
  62. package/dist/src/domain/shared/types.d.ts.map +1 -1
  63. package/dist/src/domain/shared/types.js.map +1 -1
  64. package/dist/src/domain/shared/types.ts +5 -3
  65. package/dist/src/server.js +54 -7
  66. package/dist/src/server.js.map +1 -1
  67. package/dist/src/server.ts +53 -15
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +8 -5
  70. package/src/codegen/extract/events.ts +20 -3
  71. package/src/codegen/extract/gwt.ts +10 -26
  72. package/src/codegen/extract/imports.ts +71 -0
  73. package/src/codegen/extract/index.ts +1 -0
  74. package/src/codegen/extract/messages.ts +34 -7
  75. package/src/codegen/extract/query.ts +17 -19
  76. package/src/codegen/scaffoldFromSchema.ts +13 -0
  77. package/src/codegen/templates/command/decide.specs.specs.ts +235 -8
  78. package/src/codegen/templates/command/decide.specs.ts +8 -8
  79. package/src/codegen/templates/command/decide.specs.ts.ejs +95 -30
  80. package/src/codegen/templates/command/decide.ts.ejs +2 -2
  81. package/src/codegen/templates/command/events.ts.ejs +2 -2
  82. package/src/codegen/templates/command/evolve.ts.ejs +3 -3
  83. package/src/codegen/templates/command/handle.specs.ts +6 -6
  84. package/src/codegen/templates/command/handle.ts.ejs +3 -3
  85. package/src/codegen/templates/query/projection.specs.specs.ts +623 -0
  86. package/src/codegen/templates/query/projection.specs.ts +1 -1
  87. package/src/codegen/templates/query/projection.specs.ts.ejs +176 -52
  88. package/src/codegen/templates/query/projection.ts.ejs +30 -29
  89. package/src/codegen/templates/query/query.resolver.specs.ts +190 -5
  90. package/src/codegen/templates/query/query.resolver.ts.ejs +31 -9
  91. package/src/codegen/templates/react/react.specs.specs.ts +8 -5
  92. package/src/codegen/templates/react/react.specs.ts +4 -4
  93. package/src/codegen/templates/react/react.specs.ts.ejs +118 -67
  94. package/src/codegen/templates/react/react.ts.ejs +4 -4
  95. package/src/codegen/templates/react/register.specs.ts +2 -2
  96. package/src/codegen/templates/react/register.ts.ejs +2 -2
  97. package/src/codegen/types.ts +2 -0
  98. package/src/commands/generate-server.ts +3 -0
  99. package/src/domain/shared/ReadModel.ts +3 -3
  100. package/src/domain/shared/types.ts +5 -3
  101. package/src/server.ts +53 -15
  102. package/dist/src/codegen/templates/query/projection.specs.specs..ts +0 -296
  103. package/src/codegen/scaffoldFromSchema.query-slice-register.specs.ts +0 -179
  104. package/src/codegen/templates/query/projection.specs.specs..ts +0 -296
@@ -2,21 +2,67 @@ import 'reflect-metadata';
2
2
  import { ApolloServer } from 'apollo-server';
3
3
  import { buildSchema } from 'type-graphql';
4
4
  import { loadProjections, loadRegisterFiles, loadResolvers } from './utils/index.js';
5
- import { getInMemoryEventStore, getInMemoryMessageBus, projections, forwardToMessageBus, } from '@event-driven-io/emmett';
5
+ import { getInMemoryMessageBus, getInMemoryDatabase, handleInMemoryProjections } from '@event-driven-io/emmett';
6
+ import { getSQLiteEventStore } from '@event-driven-io/emmett-sqlite';
6
7
  async function start() {
7
8
  const loadedProjections = await loadProjections('src/domain/flows/**/projection.{ts,js}');
8
9
  const registrations = await loadRegisterFiles('src/domain/flows/**/register.{ts,js}');
9
10
  const messageBus = getInMemoryMessageBus();
10
- const eventStore = getInMemoryEventStore({
11
- projections: projections.inline(loadedProjections),
12
- hooks: {
13
- onAfterCommit: forwardToMessageBus(messageBus),
14
- },
11
+ const database = getInMemoryDatabase();
12
+ const eventStore = getSQLiteEventStore({
13
+ fileName: './event-store.sqlite',
14
+ schema: { autoMigration: 'CreateOrUpdate' },
15
15
  });
16
+ try {
17
+ await eventStore.readStream('__init__');
18
+ }
19
+ catch {
20
+ // Expected on fresh DB - schema gets created on first operation
21
+ }
16
22
  await Promise.all(registrations.map((r) => r.register(messageBus, eventStore)));
23
+ const consumer = eventStore.consumer();
24
+ consumer.processor({
25
+ processorId: 'projection-updater',
26
+ startFrom: 'BEGINNING',
27
+ eachMessage: async (event) => {
28
+ await handleInMemoryProjections({
29
+ projections: loadedProjections,
30
+ database,
31
+ events: [event],
32
+ });
33
+ },
34
+ });
35
+ consumer.processor({
36
+ processorId: 'forward-to-message-bus',
37
+ startFrom: 'BEGINNING',
38
+ eachMessage: async (evt) => {
39
+ await messageBus.publish(evt);
40
+ },
41
+ });
42
+ consumer.start().catch((err) => {
43
+ console.error('Consumer crashed:', err);
44
+ process.exit(1);
45
+ });
46
+ const shutdown = async () => {
47
+ console.log('Shutting down...');
48
+ try {
49
+ await consumer.stop?.();
50
+ }
51
+ catch {
52
+ /* empty */
53
+ }
54
+ try {
55
+ await consumer.close?.();
56
+ }
57
+ catch {
58
+ /* empty */
59
+ }
60
+ process.exit(0);
61
+ };
62
+ process.on('SIGINT', () => void shutdown());
63
+ process.on('SIGTERM', () => void shutdown());
17
64
  const resolvers = await loadResolvers('src/domain/flows/**/*.resolver.{ts,js}');
18
65
  const schema = await buildSchema({
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
66
  resolvers: resolvers,
21
67
  });
22
68
  const server = new ApolloServer({
@@ -24,6 +70,7 @@ async function start() {
24
70
  context: () => ({
25
71
  eventStore,
26
72
  messageBus,
73
+ database,
27
74
  }),
28
75
  });
29
76
  const { url } = await server.listen({ port: 4000 });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AAEjC,KAAK,UAAU,KAAK;IAClB,MAAM,iBAAiB,GAAG,MAAM,eAAe,CAAC,wCAAwC,CAAC,CAAC;IAC1F,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,sCAAsC,CAAC,CAAC;IAEtF,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;IAE3C,MAAM,UAAU,GAAG,qBAAqB,CAAC;QACvC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAClD,KAAK,EAAE;YACL,aAAa,EAAE,mBAAmB,CAAC,UAAU,CAAC;SAC/C;KACF,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAEhF,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,wCAAwC,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;QAC/B,8DAA8D;QAC9D,SAAS,EAAE,SAAoF;KAChG,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,MAAM;QACN,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YACd,UAAU;YACV,UAAU;SACX,CAAC;KACH,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,KAAK,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
@@ -2,38 +2,76 @@ import 'reflect-metadata';
2
2
  import { ApolloServer } from 'apollo-server';
3
3
  import { buildSchema } from 'type-graphql';
4
4
  import { loadProjections, loadRegisterFiles, loadResolvers } from './utils';
5
- import {
6
- getInMemoryEventStore,
7
- getInMemoryMessageBus,
8
- projections,
9
- forwardToMessageBus,
10
- } from '@event-driven-io/emmett';
5
+ import { getInMemoryMessageBus, getInMemoryDatabase, handleInMemoryProjections } from '@event-driven-io/emmett';
6
+ import { getSQLiteEventStore } from '@event-driven-io/emmett-sqlite';
11
7
 
12
8
  async function start() {
13
9
  const loadedProjections = await loadProjections('src/domain/flows/**/projection.{ts,js}');
14
10
  const registrations = await loadRegisterFiles('src/domain/flows/**/register.{ts,js}');
15
11
 
16
12
  const messageBus = getInMemoryMessageBus();
13
+ const database = getInMemoryDatabase();
17
14
 
18
- const eventStore = getInMemoryEventStore({
19
- projections: projections.inline(loadedProjections),
20
- hooks: {
21
- onAfterCommit: forwardToMessageBus(messageBus),
22
- },
15
+ const eventStore = getSQLiteEventStore({
16
+ fileName: './event-store.sqlite',
17
+ schema: { autoMigration: 'CreateOrUpdate' },
23
18
  });
24
-
19
+ try {
20
+ await eventStore.readStream('__init__');
21
+ } catch {
22
+ // Expected on fresh DB - schema gets created on first operation
23
+ }
25
24
  await Promise.all(registrations.map((r) => r.register(messageBus, eventStore)));
26
-
25
+ const consumer = eventStore.consumer();
26
+ consumer.processor({
27
+ processorId: 'projection-updater',
28
+ startFrom: 'BEGINNING',
29
+ eachMessage: async (event) => {
30
+ await handleInMemoryProjections({
31
+ projections: loadedProjections,
32
+ database,
33
+ events: [event],
34
+ });
35
+ },
36
+ });
37
+ consumer.processor({
38
+ processorId: 'forward-to-message-bus',
39
+ startFrom: 'BEGINNING',
40
+ eachMessage: async (evt) => {
41
+ await messageBus.publish(evt);
42
+ },
43
+ });
44
+ consumer.start().catch((err) => {
45
+ console.error('Consumer crashed:', err);
46
+ process.exit(1);
47
+ });
48
+ const shutdown = async () => {
49
+ console.log('Shutting down...');
50
+ try {
51
+ await consumer.stop?.();
52
+ } catch {
53
+ /* empty */
54
+ }
55
+ try {
56
+ await consumer.close?.();
57
+ } catch {
58
+ /* empty */
59
+ }
60
+ process.exit(0);
61
+ };
62
+ process.on('SIGINT', () => void shutdown());
63
+ process.on('SIGTERM', () => void shutdown());
27
64
  const resolvers = await loadResolvers('src/domain/flows/**/*.resolver.{ts,js}');
65
+ type ResolverClass = new (...args: unknown[]) => unknown;
28
66
  const schema = await buildSchema({
29
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
- resolvers: resolvers as unknown as [(...args: any[]) => any, ...Array<(...args: any[]) => any>],
67
+ resolvers: resolvers as unknown as [ResolverClass, ...ResolverClass[]],
31
68
  });
32
69
  const server = new ApolloServer({
33
70
  schema,
34
71
  context: () => ({
35
72
  eventStore,
36
73
  messageBus,
74
+ database,
37
75
  }),
38
76
  });
39
77
  const { url } = await server.listen({ port: 4000 });