@auto-engineer/server-generator-nestjs 1.148.0 → 1.150.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/CHANGELOG.md +38 -0
- package/README.md +194 -134
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# @auto-engineer/server-generator-nestjs
|
|
2
2
|
|
|
3
|
+
## 1.150.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`a502d47`](https://github.com/BeOnAuto/auto-engineer/commit/a502d472df528a1c5d53905898220c2a3a49d8a5) Thanks [@osamanar](https://github.com/osamanar)! -
|
|
8
|
+
|
|
9
|
+
- [`c96a70e`](https://github.com/BeOnAuto/auto-engineer/commit/c96a70e49f9f64213450d0b9840bc9a8b2b1d77d) Thanks [@osamanar](https://github.com/osamanar)! -
|
|
10
|
+
|
|
11
|
+
- [`4343bca`](https://github.com/BeOnAuto/auto-engineer/commit/4343bcaa2576703ae578fd9b7f5ec5b9776702a9) Thanks [@osamanar](https://github.com/osamanar)! -
|
|
12
|
+
|
|
13
|
+
- [`28ffce9`](https://github.com/BeOnAuto/auto-engineer/commit/28ffce9c8b95f0c3ca61728bd1f667fa9416d461) Thanks [@osamanar](https://github.com/osamanar)! -
|
|
14
|
+
|
|
15
|
+
- [`3fd5dbf`](https://github.com/BeOnAuto/auto-engineer/commit/3fd5dbfbfb4f7a5fe71ae53105b31a1b0f30f911) Thanks [@osamanar](https://github.com/osamanar)! -
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- [`41f3df3`](https://github.com/BeOnAuto/auto-engineer/commit/41f3df3025445ba92208c2b007b8e29a40489309) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - - **global**: version packages
|
|
20
|
+
- **global**: major refresh to all the docs
|
|
21
|
+
- Updated dependencies [[`a502d47`](https://github.com/BeOnAuto/auto-engineer/commit/a502d472df528a1c5d53905898220c2a3a49d8a5), [`c96a70e`](https://github.com/BeOnAuto/auto-engineer/commit/c96a70e49f9f64213450d0b9840bc9a8b2b1d77d), [`4343bca`](https://github.com/BeOnAuto/auto-engineer/commit/4343bcaa2576703ae578fd9b7f5ec5b9776702a9), [`28ffce9`](https://github.com/BeOnAuto/auto-engineer/commit/28ffce9c8b95f0c3ca61728bd1f667fa9416d461), [`41f3df3`](https://github.com/BeOnAuto/auto-engineer/commit/41f3df3025445ba92208c2b007b8e29a40489309), [`3fd5dbf`](https://github.com/BeOnAuto/auto-engineer/commit/3fd5dbfbfb4f7a5fe71ae53105b31a1b0f30f911)]:
|
|
22
|
+
- @auto-engineer/narrative@1.150.0
|
|
23
|
+
|
|
24
|
+
## 1.149.0
|
|
25
|
+
|
|
26
|
+
### Minor Changes
|
|
27
|
+
|
|
28
|
+
- [`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
|
|
29
|
+
- **server-generator-apollo-emmett**: context-aware nonCommandField instructions
|
|
30
|
+
- **server-generator-apollo-emmett**: add state context instruction
|
|
31
|
+
- **server-generator-apollo-emmett**: extract shared template helpers
|
|
32
|
+
- **server-generator-apollo-emmett**: filter state refs from hasGivenEvents in decide.ts.ejs
|
|
33
|
+
|
|
34
|
+
### Patch Changes
|
|
35
|
+
|
|
36
|
+
- [`d38c81e`](https://github.com/BeOnAuto/auto-engineer/commit/d38c81e7bb442a39626564cf4f6d8d55b60d0a38) Thanks [@SamHatoum](https://github.com/SamHatoum)! -
|
|
37
|
+
|
|
38
|
+
- Updated dependencies [[`d38c81e`](https://github.com/BeOnAuto/auto-engineer/commit/d38c81e7bb442a39626564cf4f6d8d55b60d0a38), [`e1eebbd`](https://github.com/BeOnAuto/auto-engineer/commit/e1eebbdf4f209780e790094d2e6887c4fa809f98)]:
|
|
39
|
+
- @auto-engineer/narrative@1.149.0
|
|
40
|
+
|
|
3
41
|
## 1.148.0
|
|
4
42
|
|
|
5
43
|
### 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
|
|
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
|
|
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
|
|
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
|
-
|
|
29
|
+
---
|
|
35
30
|
|
|
36
|
-
|
|
31
|
+
## Quick Start
|
|
37
32
|
|
|
38
|
-
### 1. Register the
|
|
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
|
|
43
|
+
### 2. Send the GenerateServer command
|
|
49
44
|
|
|
50
45
|
```typescript
|
|
51
|
-
|
|
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
|
-
|
|
60
|
+
model,
|
|
55
61
|
destination: ".",
|
|
56
62
|
},
|
|
63
|
+
requestId: "req-1",
|
|
57
64
|
});
|
|
58
65
|
|
|
59
|
-
|
|
60
|
-
// → { type: 'ServerGenerated', data: { serverDir: './server', ... } }
|
|
66
|
+
// events is an array: MomentGenerated[] followed by ServerGenerated or ServerGenerationFailed
|
|
61
67
|
```
|
|
62
68
|
|
|
63
|
-
The command
|
|
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 --
|
|
78
|
+
auto generate:server --destination=.
|
|
73
79
|
```
|
|
74
80
|
|
|
75
|
-
### Run
|
|
81
|
+
### Run programmatically
|
|
76
82
|
|
|
77
83
|
```typescript
|
|
78
84
|
import { commandHandler } from "@auto-engineer/server-generator-nestjs";
|
|
79
85
|
|
|
80
|
-
const
|
|
86
|
+
const events = await commandHandler.handle({
|
|
81
87
|
type: "GenerateServer",
|
|
82
88
|
data: {
|
|
83
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
94
|
-
|
|
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
|
|
99
|
-
|
|
100
|
-
The handler emits `SliceGeneratedEvent` for each domain slice processed:
|
|
111
|
+
### Handle errors
|
|
101
112
|
|
|
102
113
|
```typescript
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
###
|
|
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:*
|
|
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`
|
|
121
|
-
- `auto:server-generator-nestjs:
|
|
122
|
-
- `auto:server-generator-nestjs:
|
|
123
|
-
- `auto:server-generator-nestjs:
|
|
124
|
-
- `auto:server-generator-nestjs:
|
|
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
|
-
|
|
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
|
|
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
|
|
153
|
-
| ------------- |
|
|
154
|
-
| `
|
|
155
|
-
| `destination` | `string` | Yes
|
|
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
|
|
160
|
-
|
|
|
161
|
-
| `
|
|
162
|
-
| `
|
|
163
|
-
| `
|
|
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
|
-
###
|
|
202
|
+
### MomentGeneratedEvent Data
|
|
166
203
|
|
|
167
204
|
```typescript
|
|
168
205
|
{
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
###
|
|
214
|
+
### ServerGeneratedEvent Data
|
|
176
215
|
|
|
177
216
|
```typescript
|
|
178
217
|
{
|
|
179
|
-
modelPath: string;
|
|
180
|
-
destination: string;
|
|
181
|
-
|
|
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
|
-
###
|
|
224
|
+
### ServerGenerationFailedEvent Data
|
|
186
225
|
|
|
187
226
|
```typescript
|
|
188
227
|
{
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
|
241
|
+
├── index.ts # Package entry: exports COMMANDS array and types
|
|
204
242
|
├── commands/
|
|
205
|
-
│ └── generate-server.ts #
|
|
243
|
+
│ └── generate-server.ts # GenerateServer command handler
|
|
206
244
|
├── codegen/
|
|
207
|
-
│ ├── scaffoldFromSchema.ts # Scaffold orchestrator
|
|
208
|
-
│ ├── entity-consolidation.ts #
|
|
209
|
-
│ ├── types.ts #
|
|
210
|
-
│ ├── extract/ #
|
|
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
|
-
│ │ ├──
|
|
217
|
-
│ │
|
|
218
|
-
│ ├──
|
|
219
|
-
│ │ ├──
|
|
220
|
-
│ │ ├──
|
|
221
|
-
│ │ ├──
|
|
222
|
-
│ │
|
|
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 #
|
|
225
|
-
└── shared/ # Files copied
|
|
226
|
-
├── main.ts # NestJS bootstrap
|
|
227
|
-
├── mikro-orm.config.ts #
|
|
228
|
-
└── graphql-types.ts #
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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` |
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
|
270
|
-
|
|
|
271
|
-
|
|
|
272
|
-
|
|
|
273
|
-
|
|
|
274
|
-
|
|
|
275
|
-
| `
|
|
276
|
-
|
|
|
277
|
-
|
|
|
278
|
-
| `
|
|
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.
|
|
43
|
+
"@auto-engineer/narrative": "1.150.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.
|
|
55
|
+
"@auto-engineer/cli": "1.150.0"
|
|
56
56
|
},
|
|
57
|
-
"version": "1.
|
|
57
|
+
"version": "1.150.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",
|