@auto-engineer/server-generator-nestjs 1.147.0 → 1.149.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 (3) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +194 -134
  3. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,56 @@
1
1
  # @auto-engineer/server-generator-nestjs
2
2
 
3
+ ## 1.149.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`e1eebbd`](https://github.com/BeOnAuto/auto-engineer/commit/e1eebbdf4f209780e790094d2e6887c4fa809f98) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - - **server-generator-apollo-emmett**: add Given state ref hints to state.ts.ejs
8
+ - **server-generator-apollo-emmett**: context-aware nonCommandField instructions
9
+ - **server-generator-apollo-emmett**: add state context instruction
10
+ - **server-generator-apollo-emmett**: extract shared template helpers
11
+ - **server-generator-apollo-emmett**: filter state refs from hasGivenEvents in decide.ts.ejs
12
+
13
+ ### Patch Changes
14
+
15
+ - [`d38c81e`](https://github.com/BeOnAuto/auto-engineer/commit/d38c81e7bb442a39626564cf4f6d8d55b60d0a38) Thanks [@SamHatoum](https://github.com/SamHatoum)! -
16
+
17
+ - Updated dependencies [[`d38c81e`](https://github.com/BeOnAuto/auto-engineer/commit/d38c81e7bb442a39626564cf4f6d8d55b60d0a38), [`e1eebbd`](https://github.com/BeOnAuto/auto-engineer/commit/e1eebbdf4f209780e790094d2e6887c4fa809f98)]:
18
+ - @auto-engineer/narrative@1.149.0
19
+
20
+ ## 1.148.0
21
+
22
+ ### Minor Changes
23
+
24
+ - [`d5ba3a0`](https://github.com/BeOnAuto/auto-engineer/commit/d5ba3a0e3fb0f6a9ad7a3a8b1815590ea77a5b42) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - Added state context instruction to generated decide handlers, preventing unnecessary narrowing when Given steps contain only state references
25
+
26
+ - [`e0cdc4e`](https://github.com/BeOnAuto/auto-engineer/commit/e0cdc4e3363ad84d4bc49996a600ac75c97ccc38) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - Added context-aware classification of non-command fields in generated decide.ts scaffolds, distinguishing between date-derived, state-derived, and not-yet-tested fields
27
+
28
+ - [`9195db7`](https://github.com/BeOnAuto/auto-engineer/commit/9195db78cb707d658866cee99a1c73d34fb4efde) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - Extracted shared template helpers into a dedicated module for cleaner code generation
29
+
30
+ - [`abb6540`](https://github.com/BeOnAuto/auto-engineer/commit/abb6540db7196ed7935c8a8610695828f9035fc3) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - Added status variant hints from Given state references to the state template, helping implementers create matching discriminated union variants
31
+
32
+ - [`9195db7`](https://github.com/BeOnAuto/auto-engineer/commit/9195db78cb707d658866cee99a1c73d34fb4efde) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - Extracted shared template helper functions into a dedicated module for better code reuse across generators
33
+ - Simplified template specs by removing inline duplicate definitions in favor of the shared helpers
34
+
35
+ ### Patch Changes
36
+
37
+ - [`88fb1da`](https://github.com/BeOnAuto/auto-engineer/commit/88fb1da2b222de04dd4959d87657395ee960a6ce) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - - **server-generator-apollo-emmett**: skip empty file plans in scaffold output
38
+ - **server-generator-apollo-emmett**: filter state refs from given() in decide.specs.ts.ejs
39
+ - **server-generator-apollo-emmett**: move CS Given states from events to states array
40
+ - **global**: version packages
41
+ - **server-generator-apollo-emmett**: mark G1+G2 ketchup plan complete
42
+
43
+ - [`4255f6d`](https://github.com/BeOnAuto/auto-engineer/commit/4255f6db0d128979e573244a615886482ce799b0) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - Updated ketchup plan for state reference fix in decide template generator
44
+ - Marked generator bug fix milestones G1 and G2 as complete
45
+
46
+ - [`62f1ea3`](https://github.com/BeOnAuto/auto-engineer/commit/62f1ea3dd1b4275211574e3df9d9a6571ae9b27a) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - Fixed scaffold generation to correctly distinguish between event and state references in decision handlers
47
+ - Prevented contradictory instructions from appearing in generated code when Given clauses contain only state references
48
+
49
+ - [`ba4f5c9`](https://github.com/BeOnAuto/auto-engineer/commit/ba4f5c9749fb1c15d444e78ca9a2689817f039cb) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - Added implementation plan for decide.ts code generation fixes in the Apollo Emmett server generator
50
+
51
+ - Updated dependencies [[`88fb1da`](https://github.com/BeOnAuto/auto-engineer/commit/88fb1da2b222de04dd4959d87657395ee960a6ce), [`d5ba3a0`](https://github.com/BeOnAuto/auto-engineer/commit/d5ba3a0e3fb0f6a9ad7a3a8b1815590ea77a5b42), [`e0cdc4e`](https://github.com/BeOnAuto/auto-engineer/commit/e0cdc4e3363ad84d4bc49996a600ac75c97ccc38), [`4255f6d`](https://github.com/BeOnAuto/auto-engineer/commit/4255f6db0d128979e573244a615886482ce799b0), [`9195db7`](https://github.com/BeOnAuto/auto-engineer/commit/9195db78cb707d658866cee99a1c73d34fb4efde), [`abb6540`](https://github.com/BeOnAuto/auto-engineer/commit/abb6540db7196ed7935c8a8610695828f9035fc3), [`9195db7`](https://github.com/BeOnAuto/auto-engineer/commit/9195db78cb707d658866cee99a1c73d34fb4efde), [`62f1ea3`](https://github.com/BeOnAuto/auto-engineer/commit/62f1ea3dd1b4275211574e3df9d9a6571ae9b27a), [`ba4f5c9`](https://github.com/BeOnAuto/auto-engineer/commit/ba4f5c9749fb1c15d444e78ca9a2689817f039cb)]:
52
+ - @auto-engineer/narrative@1.148.0
53
+
3
54
  ## 1.147.0
4
55
 
5
56
  ### Minor Changes
package/README.md CHANGED
@@ -1,27 +1,22 @@
1
1
  # @auto-engineer/server-generator-nestjs
2
2
 
3
- | | |
4
- | --- | --- |
5
- | **Status** | EXPERIMENTAL - NOT READY FOR PRODUCTION |
6
- | **Stability** | APIs will change without notice |
7
- | **Completeness** | Features may be incomplete or broken |
8
-
9
3
  Generates complete NestJS servers from narrative domain models with CQRS, GraphQL, and MikroORM.
10
4
 
11
5
  ---
12
6
 
13
7
  ## Purpose
14
8
 
15
- Without `@auto-engineer/server-generator-nestjs`, you would have to manually scaffold NestJS modules, wire up CQRS command/query handlers, configure GraphQL resolvers, define MikroORM entities, and write boilerplate test files for every domain slice.
9
+ Without this package, you would manually scaffold NestJS modules, wire up CQRS command/query handlers, configure GraphQL resolvers, define MikroORM entities, and write boilerplate test files for every domain moment.
16
10
 
17
- This package takes a narrative model (JSON) describing your domain flows and slices, then generates a fully functional NestJS server with:
11
+ This package takes a `Model` object (from `@auto-engineer/narrative`) describing your domain scenes and moments, then generates a fully functional NestJS server with:
18
12
 
19
13
  - CQRS pattern via `@nestjs/cqrs` for command and query separation
20
- - GraphQL API via Apollo Server with auto-generated resolvers
21
- - MikroORM entities with SQLite persistence
22
- - Test scaffolds for each command handler
14
+ - GraphQL API via Apollo Server with auto-generated resolvers, inputs, and types
15
+ - MikroORM entities with SQLite persistence, including primary key detection and enum support
16
+ - Test scaffolds (vitest specs) for each command handler
17
+ - Consolidated entities per scene with fields merged from all moments
23
18
 
24
- The generated server is immediately runnable and provides a foundation for domain-driven development.
19
+ The generated server is immediately runnable after dependency installation.
25
20
 
26
21
  ---
27
22
 
@@ -31,11 +26,11 @@ The generated server is immediately runnable and provides a foundation for domai
31
26
  pnpm add @auto-engineer/server-generator-nestjs
32
27
  ```
33
28
 
34
- ## Quick Start
29
+ ---
35
30
 
36
- This package generates NestJS servers from domain models. Here is how to use it.
31
+ ## Quick Start
37
32
 
38
- ### 1. Register the handlers
33
+ ### 1. Register the command handler
39
34
 
40
35
  ```typescript
41
36
  import { COMMANDS } from "@auto-engineer/server-generator-nestjs";
@@ -45,22 +40,33 @@ const bus = createMessageBus();
45
40
  COMMANDS.forEach((cmd) => bus.register(cmd));
46
41
  ```
47
42
 
48
- ### 2. Send a command
43
+ ### 2. Send the GenerateServer command
49
44
 
50
45
  ```typescript
51
- const result = await bus.send({
46
+ import type { Model } from "@auto-engineer/narrative";
47
+
48
+ const model: Model = {
49
+ scenes: [
50
+ /* ... */
51
+ ],
52
+ messages: [
53
+ /* ... */
54
+ ],
55
+ };
56
+
57
+ const events = await bus.send({
52
58
  type: "GenerateServer",
53
59
  data: {
54
- modelPath: ".context/model.json",
60
+ model,
55
61
  destination: ".",
56
62
  },
63
+ requestId: "req-1",
57
64
  });
58
65
 
59
- console.log(result);
60
- // → { type: 'ServerGenerated', data: { serverDir: './server', ... } }
66
+ // events is an array: MomentGenerated[] followed by ServerGenerated or ServerGenerationFailed
61
67
  ```
62
68
 
63
- The command reads your model file, generates a complete NestJS server in the `server/` directory, and installs dependencies automatically.
69
+ The command generates a complete NestJS server in `<destination>/server/`, writes the model to `<destination>/.context/schema.json`, and runs `pnpm install`.
64
70
 
65
71
  ---
66
72
 
@@ -69,59 +75,90 @@ The command reads your model file, generates a complete NestJS server in the `se
69
75
  ### Run via CLI
70
76
 
71
77
  ```bash
72
- auto generate:server --model-path=.context/model.json --destination=.
78
+ auto generate:server --destination=.
73
79
  ```
74
80
 
75
- ### Run Programmatically
81
+ ### Run programmatically
76
82
 
77
83
  ```typescript
78
84
  import { commandHandler } from "@auto-engineer/server-generator-nestjs";
79
85
 
80
- const result = await commandHandler.handle({
86
+ const events = await commandHandler.handle({
81
87
  type: "GenerateServer",
82
88
  data: {
83
- modelPath: ".context/model.json",
89
+ model: myModel,
84
90
  destination: "/path/to/project",
85
91
  },
86
92
  requestId: "req-123",
93
+ correlationId: "corr-456",
87
94
  });
88
95
  ```
89
96
 
90
- ### Handle Errors
97
+ ### Track per-moment progress
98
+
99
+ The handler returns an array of events. A `MomentGenerated` event is emitted for each non-experience moment processed:
91
100
 
92
101
  ```typescript
93
- if (result.type === "ServerGenerationFailed") {
94
- console.error(result.data.error);
102
+ for (const event of events) {
103
+ if (event.type === "MomentGenerated") {
104
+ console.log(
105
+ `Generated: ${event.data.sceneName}.${event.data.momentName} (${event.data.momentType})`
106
+ );
107
+ }
95
108
  }
96
109
  ```
97
110
 
98
- ### Handle Per-Slice Progress
99
-
100
- The handler emits `SliceGeneratedEvent` for each domain slice processed:
111
+ ### Handle errors
101
112
 
102
113
  ```typescript
103
- const events = await commandHandler.handle(command);
104
-
105
- for (const event of events) {
106
- if (event.type === "SliceGenerated") {
107
- console.log(`Generated: ${event.data.flowName}.${event.data.sliceName}`);
108
- }
114
+ const lastEvent = events[events.length - 1];
115
+ if (lastEvent.type === "ServerGenerationFailed") {
116
+ console.error(lastEvent.data.error);
117
+ // lastEvent.data.model contains the original model for debugging
109
118
  }
110
119
  ```
111
120
 
112
- ### Enable Debug Logging
121
+ ### Skip dependency installation
122
+
123
+ Set the `DEPS_PRE_WARMED` environment variable to skip `pnpm install` in the generated server:
124
+
125
+ ```bash
126
+ DEPS_PRE_WARMED=true auto generate:server --destination=.
127
+ ```
128
+
129
+ ### Enable debug logging
113
130
 
114
131
  ```bash
115
- DEBUG=auto:server-generator-nestjs:* pnpm auto generate:server
132
+ DEBUG=auto:server-generator-nestjs:* auto generate:server --destination=.
116
133
  ```
117
134
 
118
135
  Available debug namespaces:
119
136
 
120
- - `auto:server-generator-nestjs` - General operation logging
121
- - `auto:server-generator-nestjs:schema` - Model parsing details
122
- - `auto:server-generator-nestjs:files` - File copy operations
123
- - `auto:server-generator-nestjs:deps` - Dependency installation
124
- - `auto:server-generator-nestjs:scaffold` - Scaffold generation
137
+ - `auto:server-generator-nestjs` -- General operation logging
138
+ - `auto:server-generator-nestjs:files` -- File copy operations
139
+ - `auto:server-generator-nestjs:deps` -- Dependency installation
140
+ - `auto:server-generator-nestjs:scaffold` -- Scaffold generation and template rendering
141
+ - `auto:server-generator-nestjs:entity` -- Entity consolidation
142
+ - `auto:server-generator-nestjs:extract:messages` -- Message extraction from specs
143
+
144
+ ### Use the scaffold functions directly
145
+
146
+ ```typescript
147
+ import {
148
+ generateScaffoldFilePlans,
149
+ writeScaffoldFilePlans,
150
+ } from "@auto-engineer/server-generator-nestjs/codegen/scaffoldFromSchema";
151
+
152
+ const filePlans = await generateScaffoldFilePlans(
153
+ model.scenes,
154
+ model.messages,
155
+ model.integrations,
156
+ "src/domain"
157
+ );
158
+
159
+ // Each plan has { outputPath: string, contents: string }
160
+ await writeScaffoldFilePlans(filePlans);
161
+ ```
125
162
 
126
163
  ---
127
164
 
@@ -137,60 +174,61 @@ import type {
137
174
  GenerateServerEvents,
138
175
  ServerGeneratedEvent,
139
176
  ServerGenerationFailedEvent,
140
- SliceGeneratedEvent,
177
+ MomentGeneratedEvent,
141
178
  } from "@auto-engineer/server-generator-nestjs";
142
179
  ```
143
180
 
144
181
  ### Commands
145
182
 
146
- | Command | CLI Alias | Description |
147
- | ---------------- | ----------------- | --------------------------------- |
148
- | `GenerateServer` | `generate:server` | Generate NestJS server from model |
183
+ | Command | CLI Alias | Category | Description |
184
+ | ---------------- | ----------------- | ---------- | -------------------------- |
185
+ | `GenerateServer` | `generate:server` | `generate` | Generate server from model |
149
186
 
150
187
  ### Command Fields
151
188
 
152
- | Field | Type | Required | Description |
153
- | ------------- | -------- | -------- | ------------------------------------------ |
154
- | `modelPath` | `string` | Yes | Path to the JSON model file |
155
- | `destination` | `string` | Yes | Destination directory for generated server |
189
+ | Field | Type | Required | Description |
190
+ | ------------- | ------- | -------- | ------------------------------------------ |
191
+ | `model` | `Model` | Yes | The narrative model object |
192
+ | `destination` | `string` | Yes | Destination directory for generated server |
156
193
 
157
194
  ### Events
158
195
 
159
- | Event | Description |
160
- | ----------------------------- | -------------------------------- |
161
- | `ServerGeneratedEvent` | Emitted on successful generation |
162
- | `ServerGenerationFailedEvent` | Emitted when generation fails |
163
- | `SliceGeneratedEvent` | Emitted for each slice processed |
196
+ | Event | When Emitted |
197
+ | ------------------------- | ---------------------------------------- |
198
+ | `MomentGenerated` | For each non-experience moment processed |
199
+ | `ServerGenerated` | On successful generation (final event) |
200
+ | `ServerGenerationFailed` | On failure (final event) |
164
201
 
165
- ### ServerGeneratedEvent Data
202
+ ### MomentGeneratedEvent Data
166
203
 
167
204
  ```typescript
168
205
  {
169
- modelPath: string;
170
- destination: string;
171
- serverDir: string;
206
+ sceneName: string; // Name of the scene
207
+ momentName: string; // Name of the moment
208
+ momentType: string; // "command" | "query" | "react"
209
+ schemaPath: string; // Path to the written schema.json
210
+ momentPath: string; // Relative path to the generated moment directory
172
211
  }
173
212
  ```
174
213
 
175
- ### ServerGenerationFailedEvent Data
214
+ ### ServerGeneratedEvent Data
176
215
 
177
216
  ```typescript
178
217
  {
179
- modelPath: string;
180
- destination: string;
181
- error: string;
218
+ modelPath: string; // Path to the written schema.json
219
+ destination: string; // The destination directory
220
+ serverDir: string; // Absolute path to the generated server/ directory
182
221
  }
183
222
  ```
184
223
 
185
- ### SliceGeneratedEvent Data
224
+ ### ServerGenerationFailedEvent Data
186
225
 
187
226
  ```typescript
188
227
  {
189
- flowName: string;
190
- sliceName: string;
191
- sliceType: string;
192
- schemaPath: string;
193
- slicePath: string;
228
+ modelPath: string; // Path to the written schema.json
229
+ destination: string; // The destination directory
230
+ error: string; // Error message or stack trace
231
+ model: Model; // The original model (for debugging)
194
232
  }
195
233
  ```
196
234
 
@@ -200,37 +238,61 @@ import type {
200
238
 
201
239
  ```
202
240
  src/
203
- ├── index.ts # Package entry point (exports COMMANDS)
241
+ ├── index.ts # Package entry: exports COMMANDS array and types
204
242
  ├── commands/
205
- │ └── generate-server.ts # Main command handler
243
+ │ └── generate-server.ts # GenerateServer command handler
206
244
  ├── codegen/
207
- │ ├── scaffoldFromSchema.ts # Scaffold orchestrator
208
- │ ├── entity-consolidation.ts # Entity field merging
209
- │ ├── types.ts # Core type definitions
210
- │ ├── extract/ # Message/GWT extraction
211
- │ │ ├── commands.ts # Command extraction
212
- │ │ ├── events.ts # Event extraction
213
- │ │ ├── states.ts # State extraction
214
- │ │ ├── fields.ts # Field extraction
215
- │ │ ├── gwt.ts # GWT mapping builders
216
- │ │ ├── graphql.ts # GraphQL query parsing
217
- │ │ └── imports.ts # Cross-slice imports
218
- │ ├── templates/ # EJS templates
219
- │ │ ├── command/ # Command slice templates
220
- │ │ ├── query/ # Query slice templates
221
- │ │ ├── entity/ # Entity templates
222
- │ │ └── module/ # NestJS module templates
245
+ │ ├── scaffoldFromSchema.ts # Scaffold orchestrator: scenes → file plans
246
+ │ ├── entity-consolidation.ts # Merges fields from all moments into one entity per scene
247
+ │ ├── types.ts # Message, Field, MessageDefinition, GwtCondition
248
+ │ ├── extract/ # Extracts typed messages from moment specs
249
+ │ │ ├── commands.ts # Command extraction from GWT when/then
250
+ │ │ ├── events.ts # Event extraction from GWT given/then/when
251
+ │ │ ├── states.ts # State extraction from data targets
252
+ │ │ ├── fields.ts # Field extraction from message definitions
253
+ │ │ ├── gwt.ts # GWT mapping builders for commands
254
+ │ │ ├── query.ts # GWT mapping builders for queries
255
+ │ │ ├── messages.ts # Dispatcher: routes extraction by moment type
256
+ ├── imports.ts # Cross-moment import path grouping
257
+ │ │ ├── projection.ts # Projection name/idField/singleton extraction
258
+ │ │ ├── data-sink.ts # Stream pattern extraction from data sinks
259
+ │ │ ├── step-converter.ts # Spec examples → GWT results
260
+ │ │ ├── step-types.ts # Step type guards and interfaces
261
+ │ │ └── type-helpers.ts # GraphQL/TS type conversion, enum detection
262
+ │ ├── templates/ # EJS templates for code generation
263
+ │ │ ├── command/ # command.ts, input.ts, handler.ts, resolver.ts, handler.specs.ts
264
+ │ │ ├── query/ # query.ts, type.ts, handler.ts, resolver.ts
265
+ │ │ ├── entity/ # entity.ts, index.ts
266
+ │ │ └── module/ # domain-module.ts, app-module.ts
223
267
  │ └── utils/
224
- │ └── path.ts # Path utilities
225
- └── shared/ # Files copied to generated server
226
- ├── main.ts # NestJS bootstrap
227
- ├── mikro-orm.config.ts # Database configuration
228
- └── graphql-types.ts # Shared GraphQL types
268
+ │ └── path.ts # toKebabCase, ensureDirExists, ensureDirPath
269
+ └── shared/ # Files copied into the generated server
270
+ ├── main.ts # NestJS bootstrap (port from PORT env or 4000)
271
+ ├── mikro-orm.config.ts # SQLite config (:memory: for test, ./db.sqlite otherwise)
272
+ └── graphql-types.ts # MutationResponse and MutationError GraphQL types
229
273
  ```
230
274
 
231
- ### Generated Server Structure
275
+ ### Generation Pipeline
276
+
277
+ ```mermaid
278
+ flowchart TD
279
+ A[GenerateServer command] --> B[Write model to .context/schema.json]
280
+ B --> C[Clear and create server/ directory]
281
+ C --> D[Copy shared files: main.ts, mikro-orm.config.ts, graphql-types.ts]
282
+ D --> E[Generate scaffold from model]
283
+ E --> F[Extract enums from message definitions]
284
+ F --> G[For each scene]
285
+ G --> H[Consolidate entity fields from all moments]
286
+ H --> I[Generate entity files]
287
+ I --> J[For each moment: render EJS templates]
288
+ J --> K[Generate domain module per scene]
289
+ K --> L[Generate app module]
290
+ L --> M[Write config: package.json, tsconfig.json, vitest.config.ts, .gitignore]
291
+ M --> N[pnpm install]
292
+ N --> O[Emit ServerGenerated event]
293
+ ```
232
294
 
233
- The command generates the following structure:
295
+ ### Generated Server Structure
234
296
 
235
297
  ```
236
298
  server/
@@ -238,52 +300,50 @@ server/
238
300
  ├── tsconfig.json
239
301
  ├── vitest.config.ts
240
302
  ├── mikro-orm.config.ts
303
+ ├── .gitignore
241
304
  └── src/
242
305
  ├── main.ts
306
+ ├── app.module.ts
243
307
  └── domain/
244
308
  ├── shared/
245
309
  │ └── graphql-types.ts
246
- ├── {flow-name}/
247
- ├── {slice-name}/
248
- │ │ ├── command.ts
249
- ├── input.ts
250
- ├── handler.ts
251
- │ ├── handler.specs.ts
252
- │ │ └── resolver.ts
253
- └── entities/
254
- └── {entity}.entity.ts
255
- └── {flow-name}.module.ts
310
+ └── {scene-name}/
311
+ ├── {scene-name}.module.ts
312
+ ├── entities/
313
+ │ ├── {scene-name}-entity.entity.ts
314
+ │ ├── index.ts
315
+ └── {enum-name}.enum.ts # if string literal unions exist
316
+ ├── {command-moment}/
317
+ ├── {moment-name}.command.ts
318
+ ├── {moment-name}.input.ts
319
+ │ ├── {moment-name}.handler.ts
320
+ │ ├── {moment-name}.handler.specs.ts
321
+ │ └── {moment-name}.resolver.ts
322
+ └── {query-moment}/
323
+ ├── {moment-name}.query.ts
324
+ ├── {moment-name}.type.ts
325
+ ├── {moment-name}.handler.ts
326
+ └── {moment-name}.resolver.ts
256
327
  ```
257
328
 
258
329
  ### Dependencies
259
330
 
260
331
  **Monorepo:**
261
332
 
262
- | Package | Usage |
263
- | -------------------------- | ----------------------------- |
264
- | `@auto-engineer/narrative` | Domain model type definitions |
265
-
266
- **External:**
267
-
268
- | Package | Usage |
269
- | ------------------- | --------------------------- |
270
- | `@nestjs/cqrs` | CQRS command/query pattern |
271
- | `@nestjs/graphql` | GraphQL schema generation |
272
- | `@nestjs/apollo` | Apollo Server integration |
273
- | `@mikro-orm/core` | ORM for entity persistence |
274
- | `@mikro-orm/sqlite` | SQLite database driver |
275
- | `ejs` | Template rendering engine |
276
- | `prettier` | Generated code formatting |
277
- | `change-case` | Naming convention utilities |
278
- | `execa` | Dependency installation |
279
-
280
- ---
281
-
282
- ## Known Limitations
283
-
284
- This generator is experimental. Current limitations include:
285
-
286
- - Schema extraction is incomplete for complex slice types
287
- - Generated code may require manual fixes
288
- - Test coverage is minimal
289
- - Only SQLite persistence is supported
333
+ | Package | Usage |
334
+ | -------------------------- | -------------------------------------------- |
335
+ | `@auto-engineer/narrative` | Model, Scene, Moment, and Spec type definitions |
336
+ | `@auto-engineer/cli` | Dev dependency for CLI integration |
337
+
338
+ **Key External:**
339
+
340
+ | Package | Usage |
341
+ | ------------------- | --------------------------------------- |
342
+ | `ejs` | Template rendering for code generation |
343
+ | `prettier` | Formatting all generated TypeScript |
344
+ | `change-case` | PascalCase/camelCase/kebab-case naming |
345
+ | `execa` | Running `pnpm install` in generated dir |
346
+ | `fs-extra` | File copy and JSON read/write |
347
+ | `@nestjs/*` | Used in generated server runtime |
348
+ | `@mikro-orm/*` | Used in generated server runtime |
349
+ | `@apollo/server` | Used in generated server runtime |
package/package.json CHANGED
@@ -40,7 +40,7 @@
40
40
  "ts-node": "^10.9.2",
41
41
  "type-fest": "^4.41.0",
42
42
  "uuid": "^11.0.0",
43
- "@auto-engineer/narrative": "1.147.0"
43
+ "@auto-engineer/narrative": "1.149.0"
44
44
  },
45
45
  "publishConfig": {
46
46
  "access": "public"
@@ -52,9 +52,9 @@
52
52
  "tsx": "^4.19.2",
53
53
  "typescript": "^5.8.3",
54
54
  "vitest": "^3.2.4",
55
- "@auto-engineer/cli": "1.147.0"
55
+ "@auto-engineer/cli": "1.149.0"
56
56
  },
57
- "version": "1.147.0",
57
+ "version": "1.149.0",
58
58
  "scripts": {
59
59
  "generate:server": "tsx src/cli/index.ts",
60
60
  "-DISABLE-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 -r src/shared dist/src",