@auto-engineer/server-generator-apollo-emmett 1.125.0 → 1.125.1

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @auto-engineer/server-generator-apollo-emmett@1.125.0 build /home/runner/work/auto-engineer/auto-engineer/packages/server-generator-apollo-emmett
2
+ > @auto-engineer/server-generator-apollo-emmett@1.125.1 build /home/runner/work/auto-engineer/auto-engineer/packages/server-generator-apollo-emmett
3
3
  > tsc && tsx ../../scripts/fix-esm-imports.ts && rm -rf dist/src/codegen/templates && mkdir -p dist/src/codegen && cp -r src/codegen/templates dist/src/codegen/templates && cp src/server.ts dist/src && cp -r src/utils dist/src && cp -r src/domain dist/src
4
4
 
5
5
  Fixed ESM imports in dist/
@@ -1,14 +1,14 @@
1
1
 
2
- > @auto-engineer/server-generator-apollo-emmett@1.124.0 test /home/runner/work/auto-engineer/auto-engineer/packages/server-generator-apollo-emmett
2
+ > @auto-engineer/server-generator-apollo-emmett@1.125.0 test /home/runner/work/auto-engineer/auto-engineer/packages/server-generator-apollo-emmett
3
3
  > vitest run --reporter=dot
4
4
 
5
5
 
6
6
   RUN  v3.2.4 /home/runner/work/auto-engineer/auto-engineer/packages/server-generator-apollo-emmett
7
7
 
8
- ···············································································································································································································································-·························
8
+ ·················································································································································································································································-························
9
9
 
10
10
   Test Files  34 passed | 1 skipped (35)
11
-  Tests  264 passed | 1 skipped (265)
12
-  Start at  16:39:00
13
-  Duration  28.05s (transform 6.19s, setup 0ms, collect 57.01s, tests 11.02s, environment 10ms, prepare 5.49s)
11
+  Tests  265 passed | 1 skipped (266)
12
+  Start at  17:59:33
13
+  Duration  26.33s (transform 3.98s, setup 0ms, collect 54.47s, tests 11.04s, environment 8ms, prepare 4.63s)
14
14
 
@@ -1,4 +1,4 @@
1
1
 
2
- > @auto-engineer/server-generator-apollo-emmett@1.124.0 type-check /home/runner/work/auto-engineer/auto-engineer/packages/server-generator-apollo-emmett
2
+ > @auto-engineer/server-generator-apollo-emmett@1.125.0 type-check /home/runner/work/auto-engineer/auto-engineer/packages/server-generator-apollo-emmett
3
3
  > tsc --noEmit --project tsconfig.json
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @auto-engineer/server-generator-apollo-emmett
2
2
 
3
+ ## 1.125.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`7500c5b`](https://github.com/BeOnAuto/auto-engineer/commit/7500c5bd40cdae5cdf1e02bd26cbc5d6da13dc32) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - - **server-generator-apollo-emmett**: prefix unused aggregateStream state var with underscore
8
+ - **server-generator-apollo-emmett**: rename then to thenSends in reactor spec
9
+ - **server-generator-apollo-emmett**: align ReactorLike return type with MessageHandlerResult
10
+ - **server-generator-apollo-emmett**: scaffold full send in register.ts.ejs with multi-event
11
+ - **server-generator-apollo-emmett**: support multiple event-command pairs in react.ts.ejs
12
+
13
+ - [`6460797`](https://github.com/BeOnAuto/auto-engineer/commit/6460797056f3524e94328a8ca791267476878f5b) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: remove optional marker from projection state fields
14
+
15
+ - Updated dependencies [[`7500c5b`](https://github.com/BeOnAuto/auto-engineer/commit/7500c5bd40cdae5cdf1e02bd26cbc5d6da13dc32), [`6460797`](https://github.com/BeOnAuto/auto-engineer/commit/6460797056f3524e94328a8ca791267476878f5b)]:
16
+ - @auto-engineer/message-bus@1.125.1
17
+ - @auto-engineer/narrative@1.125.1
18
+
3
19
  ## 1.125.0
4
20
 
5
21
  ### Minor Changes
@@ -70,6 +70,69 @@ describe('state.ts.ejs', () => {
70
70
  `);
71
71
  });
72
72
 
73
+ it('should render projection state fields as required even when spec says required: false', async () => {
74
+ const spec: SpecsSchema = {
75
+ variant: 'specs',
76
+ narratives: [
77
+ {
78
+ name: 'Workout tracking',
79
+ slices: [
80
+ {
81
+ type: 'query',
82
+ name: 'Get workout history',
83
+ client: { specs: [] },
84
+ server: {
85
+ description: 'Projects workout history',
86
+ data: {
87
+ items: [
88
+ {
89
+ origin: {
90
+ type: 'projection',
91
+ name: 'WorkoutCompleted',
92
+ idField: 'id',
93
+ },
94
+ target: {
95
+ type: 'State',
96
+ name: 'WorkoutHistory',
97
+ },
98
+ },
99
+ ],
100
+ },
101
+ specs: [],
102
+ },
103
+ },
104
+ ],
105
+ },
106
+ ],
107
+ modules: [],
108
+ messages: [
109
+ {
110
+ type: 'state',
111
+ name: 'WorkoutHistory',
112
+ fields: [
113
+ { name: 'id', type: 'string', required: true },
114
+ { name: 'name', type: 'string', required: true },
115
+ { name: 'notes', type: 'string', required: false },
116
+ { name: 'calories', type: 'number', required: false },
117
+ ],
118
+ },
119
+ ],
120
+ };
121
+
122
+ const { plans } = await generateScaffoldFilePlans(spec.narratives, spec.messages, undefined, 'src/domain/flows');
123
+ const stateFile = plans.find((p) => p.outputPath.endsWith('state.ts'));
124
+
125
+ expect(stateFile?.contents).toMatchInlineSnapshot(`
126
+ "export type WorkoutHistory = {
127
+ id: string;
128
+ name: string;
129
+ notes: string;
130
+ calories: number;
131
+ };
132
+ "
133
+ `);
134
+ });
135
+
73
136
  it('should export fallback UnknownState when query slice has no data config', async () => {
74
137
  const spec: SpecsSchema = {
75
138
  variant: 'specs',
@@ -7,7 +7,7 @@ export type UnknownState = {
7
7
  <% for (const state of states) { -%>
8
8
  export type <%= pascalCase(state.type) %> = {
9
9
  <% for (const field of state.fields) { -%>
10
- <%- field.name %><%= field.required ? '' : '?' %>: <%- field.tsType %>;
10
+ <%- field.name %>: <%- field.tsType %>;
11
11
  <% } -%>
12
12
  };
13
13
  <% } -%>
package/package.json CHANGED
@@ -32,8 +32,8 @@
32
32
  "uuid": "^13.0.0",
33
33
  "web-streams-polyfill": "^4.1.0",
34
34
  "zod": "^3.22.4",
35
- "@auto-engineer/narrative": "1.125.0",
36
- "@auto-engineer/message-bus": "1.125.0"
35
+ "@auto-engineer/narrative": "1.125.1",
36
+ "@auto-engineer/message-bus": "1.125.1"
37
37
  },
38
38
  "publishConfig": {
39
39
  "access": "public"
@@ -44,9 +44,9 @@
44
44
  "typescript": "^5.8.3",
45
45
  "vitest": "^3.2.4",
46
46
  "tsx": "^4.19.2",
47
- "@auto-engineer/cli": "1.125.0"
47
+ "@auto-engineer/cli": "1.125.1"
48
48
  },
49
- "version": "1.125.0",
49
+ "version": "1.125.1",
50
50
  "scripts": {
51
51
  "generate:server": "tsx src/cli/index.ts",
52
52
  "build": "tsc && tsx ../../scripts/fix-esm-imports.ts && rm -rf dist/src/codegen/templates && mkdir -p dist/src/codegen && cp -r src/codegen/templates dist/src/codegen/templates && cp src/server.ts dist/src && cp -r src/utils dist/src && cp -r src/domain dist/src",
@@ -70,6 +70,69 @@ describe('state.ts.ejs', () => {
70
70
  `);
71
71
  });
72
72
 
73
+ it('should render projection state fields as required even when spec says required: false', async () => {
74
+ const spec: SpecsSchema = {
75
+ variant: 'specs',
76
+ narratives: [
77
+ {
78
+ name: 'Workout tracking',
79
+ slices: [
80
+ {
81
+ type: 'query',
82
+ name: 'Get workout history',
83
+ client: { specs: [] },
84
+ server: {
85
+ description: 'Projects workout history',
86
+ data: {
87
+ items: [
88
+ {
89
+ origin: {
90
+ type: 'projection',
91
+ name: 'WorkoutCompleted',
92
+ idField: 'id',
93
+ },
94
+ target: {
95
+ type: 'State',
96
+ name: 'WorkoutHistory',
97
+ },
98
+ },
99
+ ],
100
+ },
101
+ specs: [],
102
+ },
103
+ },
104
+ ],
105
+ },
106
+ ],
107
+ modules: [],
108
+ messages: [
109
+ {
110
+ type: 'state',
111
+ name: 'WorkoutHistory',
112
+ fields: [
113
+ { name: 'id', type: 'string', required: true },
114
+ { name: 'name', type: 'string', required: true },
115
+ { name: 'notes', type: 'string', required: false },
116
+ { name: 'calories', type: 'number', required: false },
117
+ ],
118
+ },
119
+ ],
120
+ };
121
+
122
+ const { plans } = await generateScaffoldFilePlans(spec.narratives, spec.messages, undefined, 'src/domain/flows');
123
+ const stateFile = plans.find((p) => p.outputPath.endsWith('state.ts'));
124
+
125
+ expect(stateFile?.contents).toMatchInlineSnapshot(`
126
+ "export type WorkoutHistory = {
127
+ id: string;
128
+ name: string;
129
+ notes: string;
130
+ calories: number;
131
+ };
132
+ "
133
+ `);
134
+ });
135
+
73
136
  it('should export fallback UnknownState when query slice has no data config', async () => {
74
137
  const spec: SpecsSchema = {
75
138
  variant: 'specs',
@@ -7,7 +7,7 @@ export type UnknownState = {
7
7
  <% for (const state of states) { -%>
8
8
  export type <%= pascalCase(state.type) %> = {
9
9
  <% for (const field of state.fields) { -%>
10
- <%- field.name %><%= field.required ? '' : '?' %>: <%- field.tsType %>;
10
+ <%- field.name %>: <%- field.tsType %>;
11
11
  <% } -%>
12
12
  };
13
13
  <% } -%>