@auto-engineer/server-generator-nestjs 0.19.1 → 0.20.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/.turbo/turbo-build.log +5 -0
- package/.turbo/turbo-test.log +13 -0
- package/.turbo/turbo-type-check.log +4 -0
- package/CHANGELOG.md +2 -2
- package/dist/src/codegen/entity-consolidation.d.ts +19 -0
- package/dist/src/codegen/entity-consolidation.d.ts.map +1 -0
- package/dist/src/codegen/entity-consolidation.js +134 -0
- package/dist/src/codegen/entity-consolidation.js.map +1 -0
- package/dist/src/codegen/extract/commands.d.ts +25 -0
- package/dist/src/codegen/extract/commands.d.ts.map +1 -0
- package/dist/src/codegen/extract/commands.js +67 -0
- package/dist/src/codegen/extract/commands.js.map +1 -0
- package/dist/src/codegen/extract/data-sink.d.ts +6 -0
- package/dist/src/codegen/extract/data-sink.d.ts.map +1 -0
- package/dist/src/codegen/extract/data-sink.js +78 -0
- package/dist/src/codegen/extract/data-sink.js.map +1 -0
- package/dist/src/codegen/extract/events.d.ts +10 -0
- package/dist/src/codegen/extract/events.d.ts.map +1 -0
- package/dist/src/codegen/extract/events.js +42 -0
- package/dist/src/codegen/extract/events.js.map +1 -0
- package/dist/src/codegen/extract/fields.d.ts +3 -0
- package/dist/src/codegen/extract/fields.d.ts.map +1 -0
- package/dist/src/codegen/extract/fields.js +9 -0
- package/dist/src/codegen/extract/fields.js.map +1 -0
- package/dist/src/codegen/extract/graphql.d.ts +14 -0
- package/dist/src/codegen/extract/graphql.d.ts.map +1 -0
- package/dist/src/codegen/extract/graphql.js +81 -0
- package/dist/src/codegen/extract/graphql.js.map +1 -0
- package/dist/src/codegen/extract/gwt.d.ts +6 -0
- package/dist/src/codegen/extract/gwt.d.ts.map +1 -0
- package/dist/src/codegen/extract/gwt.js +64 -0
- package/dist/src/codegen/extract/gwt.js.map +1 -0
- package/dist/src/codegen/extract/imports.d.ts +29 -0
- package/dist/src/codegen/extract/imports.d.ts.map +1 -0
- package/dist/src/codegen/extract/imports.js +55 -0
- package/dist/src/codegen/extract/imports.js.map +1 -0
- package/dist/src/codegen/extract/index.d.ts +10 -0
- package/dist/src/codegen/extract/index.d.ts.map +1 -0
- package/dist/src/codegen/extract/index.js +10 -0
- package/dist/src/codegen/extract/index.js.map +1 -0
- package/dist/src/codegen/extract/messages.d.ts +17 -0
- package/dist/src/codegen/extract/messages.d.ts.map +1 -0
- package/dist/src/codegen/extract/messages.js +172 -0
- package/dist/src/codegen/extract/messages.js.map +1 -0
- package/dist/src/codegen/extract/projection.d.ts +5 -0
- package/dist/src/codegen/extract/projection.d.ts.map +1 -0
- package/dist/src/codegen/extract/projection.js +44 -0
- package/dist/src/codegen/extract/projection.js.map +1 -0
- package/dist/src/codegen/extract/query.d.ts +14 -0
- package/dist/src/codegen/extract/query.d.ts.map +1 -0
- package/dist/src/codegen/extract/query.js +17 -0
- package/dist/src/codegen/extract/query.js.map +1 -0
- package/dist/src/codegen/extract/states.d.ts +5 -0
- package/dist/src/codegen/extract/states.d.ts.map +1 -0
- package/dist/src/codegen/extract/states.js +48 -0
- package/dist/src/codegen/extract/states.js.map +1 -0
- package/dist/src/codegen/extract/step-converter.d.ts +17 -0
- package/dist/src/codegen/extract/step-converter.d.ts.map +1 -0
- package/dist/src/codegen/extract/step-converter.js +82 -0
- package/dist/src/codegen/extract/step-converter.js.map +1 -0
- package/dist/src/codegen/extract/step-types.d.ts +29 -0
- package/dist/src/codegen/extract/step-types.d.ts.map +1 -0
- package/dist/src/codegen/extract/step-types.js +16 -0
- package/dist/src/codegen/extract/step-types.js.map +1 -0
- package/dist/src/codegen/extract/type-helpers.d.ts +13 -0
- package/dist/src/codegen/extract/type-helpers.d.ts.map +1 -0
- package/dist/src/codegen/extract/type-helpers.js +98 -0
- package/dist/src/codegen/extract/type-helpers.js.map +1 -0
- package/dist/src/codegen/scaffoldFromSchema.d.ts +9 -0
- package/dist/src/codegen/scaffoldFromSchema.d.ts.map +1 -0
- package/dist/src/codegen/scaffoldFromSchema.js +389 -0
- package/dist/src/codegen/scaffoldFromSchema.js.map +1 -0
- package/dist/src/codegen/templates/command/command.ts.ejs +16 -0
- package/dist/src/codegen/templates/command/handler.specs.ts.ejs +50 -0
- package/dist/src/codegen/templates/command/handler.ts.ejs +30 -0
- package/dist/src/codegen/templates/command/input.ts.ejs +23 -0
- package/dist/src/codegen/templates/command/resolver.ts.ejs +56 -0
- package/dist/src/codegen/templates/entity/entity.ts.ejs +35 -0
- package/dist/src/codegen/templates/entity/index.ts.ejs +6 -0
- package/dist/src/codegen/templates/module/app-module.ts.ejs +65 -0
- package/dist/src/codegen/templates/module/domain-module.ts.ejs +46 -0
- package/dist/src/codegen/templates/query/handler.ts.ejs +25 -0
- package/dist/src/codegen/templates/query/query.ts.ejs +1 -0
- package/dist/src/codegen/templates/query/resolver.ts.ejs +20 -0
- package/dist/src/codegen/templates/query/type.ts.ejs +24 -0
- package/dist/src/codegen/types.d.ts +38 -0
- package/dist/src/codegen/types.d.ts.map +1 -0
- package/dist/src/codegen/types.js +2 -0
- package/dist/src/codegen/types.js.map +1 -0
- package/dist/src/codegen/utils/path.d.ts +4 -0
- package/dist/src/codegen/utils/path.d.ts.map +1 -0
- package/dist/src/codegen/utils/path.js +18 -0
- package/dist/src/codegen/utils/path.js.map +1 -0
- package/dist/src/commands/generate-server.d.ts +28 -0
- package/dist/src/commands/generate-server.d.ts.map +1 -0
- package/dist/src/commands/generate-server.js +421 -0
- package/dist/src/commands/generate-server.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/shared/graphql-types.ts +19 -0
- package/dist/src/shared/main.ts +27 -0
- package/dist/src/shared/mikro-orm.config.ts +18 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { extractGwtSpecsFromSlice } from './step-converter.js';
|
|
2
|
+
export function buildCommandGwtMapping(slice) {
|
|
3
|
+
if (slice.type !== 'command') {
|
|
4
|
+
return {};
|
|
5
|
+
}
|
|
6
|
+
const gwtSpecs = extractGwtSpecsFromSlice(slice);
|
|
7
|
+
const mapping = buildCommandMapping(gwtSpecs);
|
|
8
|
+
return enhanceMapping(mapping);
|
|
9
|
+
}
|
|
10
|
+
function isCommandRef(when) {
|
|
11
|
+
return !Array.isArray(when) && 'commandRef' in when;
|
|
12
|
+
}
|
|
13
|
+
function buildCommandMapping(gwtSpecs) {
|
|
14
|
+
const mapping = {};
|
|
15
|
+
for (const gwt of gwtSpecs) {
|
|
16
|
+
if (!isCommandRef(gwt.when)) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const command = gwt.when.commandRef;
|
|
20
|
+
if (typeof command === 'string' && command.length > 0) {
|
|
21
|
+
mapping[command] = mapping[command] ?? [];
|
|
22
|
+
mapping[command].push({
|
|
23
|
+
given: gwt.given,
|
|
24
|
+
when: gwt.when,
|
|
25
|
+
then: gwt.then,
|
|
26
|
+
description: gwt.description,
|
|
27
|
+
ruleDescription: gwt.ruleDescription,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return mapping;
|
|
32
|
+
}
|
|
33
|
+
function enhanceMapping(mapping) {
|
|
34
|
+
const enhancedMapping = {};
|
|
35
|
+
for (const command in mapping) {
|
|
36
|
+
const conditions = mapping[command];
|
|
37
|
+
const successfulData = findSuccessfulExampleData(conditions);
|
|
38
|
+
enhancedMapping[command] = conditions.map((gwt) => ({
|
|
39
|
+
...gwt,
|
|
40
|
+
failingFields: findFailingFields(gwt, successfulData),
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
return enhancedMapping;
|
|
44
|
+
}
|
|
45
|
+
function findSuccessfulExampleData(gwts) {
|
|
46
|
+
const successful = gwts.find((gwt) => gwt.then.some((t) => typeof t === 'object' && t !== null && 'eventRef' in t));
|
|
47
|
+
const whenData = Array.isArray(successful?.when) ? successful?.when[0]?.exampleData : successful?.when?.exampleData;
|
|
48
|
+
return typeof whenData === 'object' && whenData !== null ? whenData : {};
|
|
49
|
+
}
|
|
50
|
+
function findFailingFields(gwt, successfulData) {
|
|
51
|
+
const hasError = gwt.then.some((t) => typeof t === 'object' && t !== null && 'errorType' in t);
|
|
52
|
+
if (!hasError)
|
|
53
|
+
return [];
|
|
54
|
+
const whenData = Array.isArray(gwt.when) ? gwt.when[0]?.exampleData : gwt.when?.exampleData;
|
|
55
|
+
if (typeof whenData !== 'object' || whenData === null)
|
|
56
|
+
return [];
|
|
57
|
+
return Object.entries(whenData)
|
|
58
|
+
.filter(([key, val]) => {
|
|
59
|
+
const successVal = successfulData[key];
|
|
60
|
+
return val === '' && successVal !== '' && successVal !== undefined;
|
|
61
|
+
})
|
|
62
|
+
.map(([key]) => key);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=gwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gwt.js","sourceRoot":"","sources":["../../../../src/codegen/extract/gwt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAA6B,MAAM,kBAAkB,CAAC;AAGvF,MAAM,UAAU,sBAAsB,CAAC,KAAY;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,YAAY,CAAC,IAAqC;IACzD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,IAAI,IAAI,CAAC;AACtD,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgC;IAC3D,MAAM,OAAO,GAAmC,EAAE,CAAC;IAEnD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1C,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,eAAe,EAAE,GAAG,CAAC,eAAe;aACrC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,OAAuC;IAC7D,MAAM,eAAe,GAAoE,EAAE,CAAC;IAE5F,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,cAAc,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;QAE7D,eAAe,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClD,GAAG,GAAG;YACN,aAAa,EAAE,iBAAiB,CAAC,GAAG,EAAE,cAAc,CAAC;SACtD,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAoB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;IACpH,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC;IACpH,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAiB,EAAE,cAAuC;IACnF,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,WAAW,IAAI,CAAC,CAAC,CAAC;IAE/F,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;IAC5F,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAEjE,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QACrB,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,GAAG,KAAK,EAAE,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,SAAS,CAAC;IACrE,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Message } from '../types';
|
|
2
|
+
export interface ImportGroup {
|
|
3
|
+
importPath: string;
|
|
4
|
+
eventTypes: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface CrossSliceImportContext {
|
|
7
|
+
currentSliceName: string;
|
|
8
|
+
events: Message[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Groups events by their import paths, handling cross-slice imports correctly.
|
|
12
|
+
* Events from the current slice are imported from './events',
|
|
13
|
+
* while cross-slice events are imported from '../other-slice/events'.
|
|
14
|
+
*/
|
|
15
|
+
export declare function groupEventImports(context: CrossSliceImportContext): ImportGroup[];
|
|
16
|
+
/**
|
|
17
|
+
* Filters events to only include those from the current slice (source === 'then').
|
|
18
|
+
* Used for generating local event definitions.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLocalEvents(events: Message[]): Message[];
|
|
21
|
+
/**
|
|
22
|
+
* Extracts all unique event types from a list of events.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getAllEventTypes(events: Message[]): string[];
|
|
25
|
+
/**
|
|
26
|
+
* Creates a TypeScript union type string from event types.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createEventUnionType(events: Message[]): string;
|
|
29
|
+
//# sourceMappingURL=imports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../../../src/codegen/extract/imports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,GAAG,WAAW,EAAE,CA2BjF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAE3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAI5D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAG9D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { toKebabCase } from '../utils/path.js';
|
|
2
|
+
/**
|
|
3
|
+
* Groups events by their import paths, handling cross-slice imports correctly.
|
|
4
|
+
* Events from the current slice are imported from './events',
|
|
5
|
+
* while cross-slice events are imported from '../other-slice/events'.
|
|
6
|
+
*/
|
|
7
|
+
export function groupEventImports(context) {
|
|
8
|
+
const { currentSliceName, events } = context;
|
|
9
|
+
const importGroups = new Map();
|
|
10
|
+
for (const event of events) {
|
|
11
|
+
if (!event.type)
|
|
12
|
+
continue;
|
|
13
|
+
let importPath;
|
|
14
|
+
const isFromCurrentSlice = event.source === 'then' || event.sourceSliceName === currentSliceName || event.sourceSliceName == null;
|
|
15
|
+
if (isFromCurrentSlice) {
|
|
16
|
+
importPath = './events';
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
importPath = `../${toKebabCase(event.sourceSliceName ?? currentSliceName)}/events`;
|
|
20
|
+
}
|
|
21
|
+
if (!importGroups.has(importPath)) {
|
|
22
|
+
importGroups.set(importPath, []);
|
|
23
|
+
}
|
|
24
|
+
const eventTypes = importGroups.get(importPath);
|
|
25
|
+
if (!eventTypes.includes(event.type)) {
|
|
26
|
+
eventTypes.push(event.type);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return Array.from(importGroups.entries()).map(([importPath, eventTypes]) => ({
|
|
30
|
+
importPath,
|
|
31
|
+
eventTypes: eventTypes.sort(),
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Filters events to only include those from the current slice (source === 'then').
|
|
36
|
+
* Used for generating local event definitions.
|
|
37
|
+
*/
|
|
38
|
+
export function getLocalEvents(events) {
|
|
39
|
+
return events.filter((event) => event.source === 'then');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Extracts all unique event types from a list of events.
|
|
43
|
+
*/
|
|
44
|
+
export function getAllEventTypes(events) {
|
|
45
|
+
const eventTypes = events.map((event) => event.type).filter((type) => Boolean(type));
|
|
46
|
+
return Array.from(new Set(eventTypes)).sort();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Creates a TypeScript union type string from event types.
|
|
50
|
+
*/
|
|
51
|
+
export function createEventUnionType(events) {
|
|
52
|
+
const eventTypes = getAllEventTypes(events);
|
|
53
|
+
return eventTypes.length > 0 ? eventTypes.join(' | ') : 'never';
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../../../src/codegen/extract/imports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAY5C;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgC;IAChE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,SAAS;QAC1B,IAAI,UAAkB,CAAC;QACvB,MAAM,kBAAkB,GACtB,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,gBAAgB,IAAI,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC;QAEzG,IAAI,kBAAkB,EAAE,CAAC;YACvB,UAAU,GAAG,UAAU,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,eAAe,IAAI,gBAAgB,CAAC,SAAS,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,UAAU;QACV,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE;KAC9B,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAErG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './commands';
|
|
2
|
+
export * from './events';
|
|
3
|
+
export * from './gwt';
|
|
4
|
+
export * from './imports';
|
|
5
|
+
export * from './messages';
|
|
6
|
+
export * from './projection';
|
|
7
|
+
export * from './query';
|
|
8
|
+
export * from './states';
|
|
9
|
+
export * from './type-helpers';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/codegen/extract/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './commands.js';
|
|
2
|
+
export * from './events.js';
|
|
3
|
+
export * from './gwt.js';
|
|
4
|
+
export * from './imports.js';
|
|
5
|
+
export * from './messages.js';
|
|
6
|
+
export * from './projection.js';
|
|
7
|
+
export * from './query.js';
|
|
8
|
+
export * from './states.js';
|
|
9
|
+
export * from './type-helpers.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/codegen/extract/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Slice } from '@auto-engineer/narrative';
|
|
2
|
+
import type { Message, MessageDefinition } from '../types';
|
|
3
|
+
import type { CommandExample, EventExample } from './step-types';
|
|
4
|
+
export interface ExtractedMessages {
|
|
5
|
+
commands: Message[];
|
|
6
|
+
events: Message[];
|
|
7
|
+
states: Message[];
|
|
8
|
+
commandSchemasByName: Record<string, Message>;
|
|
9
|
+
projectionIdField?: string;
|
|
10
|
+
projectionSingleton?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ReactGwtSpec {
|
|
13
|
+
when?: EventExample[];
|
|
14
|
+
then: CommandExample[];
|
|
15
|
+
}
|
|
16
|
+
export declare function extractMessagesFromSpecs(slice: Slice, allMessages: MessageDefinition[]): ExtractedMessages;
|
|
17
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../../src/codegen/extract/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAO3D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQjE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IACtB,IAAI,EAAE,cAAc,EAAE,CAAC;CACxB;AA2KD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,CA+B1G"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import createDebug from 'debug';
|
|
2
|
+
import { extractCommandsFromGwt, extractCommandsFromThen } from './commands.js';
|
|
3
|
+
import { extractEventsFromGiven, extractEventsFromThen, extractEventsFromWhen } from './events.js';
|
|
4
|
+
import { extractFieldsFromMessage } from './fields.js';
|
|
5
|
+
import { extractProjectionIdField, extractProjectionSingleton } from './projection.js';
|
|
6
|
+
import { extractStatesFromData, extractStatesFromTarget } from './states.js';
|
|
7
|
+
import { extractGwtSpecsFromSlice } from './step-converter.js';
|
|
8
|
+
const debug = createDebug('auto:server-generator-nestjs:extract:messages');
|
|
9
|
+
const debugCommand = createDebug('auto:server-generator-nestjs:extract:messages:command');
|
|
10
|
+
const debugQuery = createDebug('auto:server-generator-nestjs:extract:messages:query');
|
|
11
|
+
const debugReact = createDebug('auto:server-generator-nestjs:extract:messages:react');
|
|
12
|
+
const debugDedupe = createDebug('auto:server-generator-nestjs:extract:messages:dedupe');
|
|
13
|
+
const EMPTY_EXTRACTED_MESSAGES = {
|
|
14
|
+
commands: [],
|
|
15
|
+
events: [],
|
|
16
|
+
states: [],
|
|
17
|
+
commandSchemasByName: {},
|
|
18
|
+
};
|
|
19
|
+
function deduplicateMessages(messages) {
|
|
20
|
+
debugDedupe('Deduplicating %d messages', messages.length);
|
|
21
|
+
const uniqueMap = new Map();
|
|
22
|
+
for (const message of messages) {
|
|
23
|
+
if (!uniqueMap.has(message.type)) {
|
|
24
|
+
uniqueMap.set(message.type, message);
|
|
25
|
+
debugDedupe(' Added unique message: %s', message.type);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
debugDedupe(' Skipped duplicate message: %s', message.type);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const result = Array.from(uniqueMap.values());
|
|
32
|
+
debugDedupe('Result: %d unique messages from %d total', result.length, messages.length);
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
function extractMessagesForCommand(slice, allMessages) {
|
|
36
|
+
debugCommand('Extracting messages for command slice: %s', slice.name);
|
|
37
|
+
if (slice.type !== 'command') {
|
|
38
|
+
debugCommand(' Slice type is not command, returning empty');
|
|
39
|
+
return EMPTY_EXTRACTED_MESSAGES;
|
|
40
|
+
}
|
|
41
|
+
const gwtSpecs = extractGwtSpecsFromSlice(slice);
|
|
42
|
+
debugCommand(' Found %d GWT specs', gwtSpecs.length);
|
|
43
|
+
const { commands, commandSchemasByName } = extractCommandsFromGwt(gwtSpecs, allMessages);
|
|
44
|
+
debugCommand(' Extracted %d commands', commands.length);
|
|
45
|
+
debugCommand(' Command schemas: %o', Object.keys(commandSchemasByName));
|
|
46
|
+
const events = gwtSpecs.flatMap((gwt) => {
|
|
47
|
+
const givenEventsOnly = gwt.given?.filter((item) => 'eventRef' in item);
|
|
48
|
+
const givenEvents = extractEventsFromGiven(givenEventsOnly, allMessages, slice.name);
|
|
49
|
+
const thenEventsOnly = gwt.then.filter((item) => 'eventRef' in item);
|
|
50
|
+
const thenEvents = extractEventsFromThen(thenEventsOnly, allMessages, slice.name);
|
|
51
|
+
debugCommand(' GWT: given=%d events, then=%d events', givenEvents.length, thenEvents.length);
|
|
52
|
+
return [...givenEvents, ...thenEvents];
|
|
53
|
+
});
|
|
54
|
+
debugCommand(' Total events extracted: %d', events.length);
|
|
55
|
+
const result = {
|
|
56
|
+
commands,
|
|
57
|
+
events: deduplicateMessages(events),
|
|
58
|
+
states: [],
|
|
59
|
+
commandSchemasByName,
|
|
60
|
+
};
|
|
61
|
+
debugCommand(' Final result: %d commands, %d events', result.commands.length, result.events.length);
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
function extractMessagesForQuery(slice, allMessages) {
|
|
65
|
+
debugQuery('Extracting messages for query slice: %s', slice.name);
|
|
66
|
+
if (slice.type !== 'query') {
|
|
67
|
+
debugQuery(' Slice type is not query, returning empty');
|
|
68
|
+
return EMPTY_EXTRACTED_MESSAGES;
|
|
69
|
+
}
|
|
70
|
+
const gwtSpecs = extractGwtSpecsFromSlice(slice);
|
|
71
|
+
debugQuery(' Found %d GWT specs', gwtSpecs.length);
|
|
72
|
+
const projectionIdField = extractProjectionIdField(slice);
|
|
73
|
+
debugQuery(' Projection ID field: %s', projectionIdField ?? 'none');
|
|
74
|
+
const projectionSingleton = extractProjectionSingleton(slice);
|
|
75
|
+
debugQuery(' Projection singleton: %s', projectionSingleton);
|
|
76
|
+
const events = gwtSpecs.flatMap((gwt) => {
|
|
77
|
+
const eventsFromGiven = Array.isArray(gwt.given)
|
|
78
|
+
? gwt.given.filter((item) => 'eventRef' in item)
|
|
79
|
+
: [];
|
|
80
|
+
let eventsFromWhen = [];
|
|
81
|
+
if (Array.isArray(gwt.when)) {
|
|
82
|
+
eventsFromWhen = gwt.when.filter((item) => 'eventRef' in item);
|
|
83
|
+
}
|
|
84
|
+
else if (gwt.when != null && typeof gwt.when === 'object' && 'eventRef' in gwt.when) {
|
|
85
|
+
const whenItem = gwt.when;
|
|
86
|
+
if (whenItem.eventRef && whenItem.eventRef.trim() !== '') {
|
|
87
|
+
eventsFromWhen = [whenItem];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const givenEvents = extractEventsFromGiven(eventsFromGiven, allMessages);
|
|
91
|
+
const whenEvents = eventsFromWhen
|
|
92
|
+
.map((eventExample) => {
|
|
93
|
+
const fields = extractFieldsFromMessage(eventExample.eventRef, 'event', allMessages);
|
|
94
|
+
const messageDef = allMessages.find((m) => m.type === 'event' && m.name === eventExample.eventRef);
|
|
95
|
+
const metadata = messageDef?.metadata;
|
|
96
|
+
return {
|
|
97
|
+
type: eventExample.eventRef,
|
|
98
|
+
fields,
|
|
99
|
+
source: 'when',
|
|
100
|
+
sourceFlowName: metadata?.sourceFlowName,
|
|
101
|
+
sourceSliceName: metadata?.sourceSliceName,
|
|
102
|
+
};
|
|
103
|
+
})
|
|
104
|
+
.filter((event) => event.type !== undefined);
|
|
105
|
+
return [...givenEvents, ...whenEvents];
|
|
106
|
+
});
|
|
107
|
+
debugQuery(' Extracted %d events total', events.length);
|
|
108
|
+
const states = extractStatesFromTarget(slice, allMessages);
|
|
109
|
+
debugQuery(' Extracted %d states from target', states.length);
|
|
110
|
+
const result = {
|
|
111
|
+
commands: [],
|
|
112
|
+
events: deduplicateMessages(events),
|
|
113
|
+
states,
|
|
114
|
+
commandSchemasByName: {},
|
|
115
|
+
projectionIdField,
|
|
116
|
+
projectionSingleton,
|
|
117
|
+
};
|
|
118
|
+
debugQuery(' Final result: %d events, %d states', result.events.length, result.states.length);
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
function extractMessagesForReact(slice, allMessages) {
|
|
122
|
+
debugReact('Extracting messages for react slice: %s', slice.name);
|
|
123
|
+
if (slice.type !== 'react') {
|
|
124
|
+
debugReact(' Slice type is not react, returning empty');
|
|
125
|
+
return EMPTY_EXTRACTED_MESSAGES;
|
|
126
|
+
}
|
|
127
|
+
const gwtSpecs = extractGwtSpecsFromSlice(slice);
|
|
128
|
+
debugReact(' Found %d GWT specs', gwtSpecs.length);
|
|
129
|
+
const reactGwtSpecs = gwtSpecs.map((gwt) => ({
|
|
130
|
+
when: Array.isArray(gwt.when) ? gwt.when : undefined,
|
|
131
|
+
then: gwt.then.filter((t) => 'commandRef' in t),
|
|
132
|
+
}));
|
|
133
|
+
const events = extractEventsFromWhen(reactGwtSpecs, allMessages);
|
|
134
|
+
debugReact(' Extracted %d events from when', events.length);
|
|
135
|
+
const { commands, commandSchemasByName } = extractCommandsFromThen(gwtSpecs, allMessages);
|
|
136
|
+
debugReact(' Extracted %d commands from then', commands.length);
|
|
137
|
+
debugReact(' Command schemas: %o', Object.keys(commandSchemasByName));
|
|
138
|
+
const states = extractStatesFromData(slice, allMessages);
|
|
139
|
+
debugReact(' Extracted %d states from data', states.length);
|
|
140
|
+
const result = {
|
|
141
|
+
commands,
|
|
142
|
+
events: deduplicateMessages(events),
|
|
143
|
+
states,
|
|
144
|
+
commandSchemasByName,
|
|
145
|
+
};
|
|
146
|
+
debugReact(' Final result: %d commands, %d events, %d states', result.commands.length, result.events.length, result.states.length);
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
export function extractMessagesFromSpecs(slice, allMessages) {
|
|
150
|
+
debug('Extracting messages from slice: %s (type: %s)', slice.name, slice.type);
|
|
151
|
+
debug(' Total message definitions available: %d', allMessages.length);
|
|
152
|
+
let result;
|
|
153
|
+
switch (slice.type) {
|
|
154
|
+
case 'command':
|
|
155
|
+
result = extractMessagesForCommand(slice, allMessages);
|
|
156
|
+
break;
|
|
157
|
+
case 'query':
|
|
158
|
+
result = extractMessagesForQuery(slice, allMessages);
|
|
159
|
+
break;
|
|
160
|
+
case 'react':
|
|
161
|
+
result = extractMessagesForReact(slice, allMessages);
|
|
162
|
+
break;
|
|
163
|
+
default: {
|
|
164
|
+
const unknownSlice = slice;
|
|
165
|
+
debug(' Unknown slice type: %s, returning empty', unknownSlice.type);
|
|
166
|
+
result = EMPTY_EXTRACTED_MESSAGES;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
debug(' Extraction complete: %d commands, %d events, %d states', result.commands.length, result.events.length, result.states.length);
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/codegen/extract/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Slice } from '@auto-engineer/narrative';
|
|
2
|
+
export declare function extractProjectionIdField(slice: Slice): string | undefined;
|
|
3
|
+
export declare function extractProjectionName(slice: Slice): string | undefined;
|
|
4
|
+
export declare function extractProjectionSingleton(slice: Slice): boolean;
|
|
5
|
+
//# sourceMappingURL=projection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../../src/codegen/extract/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AA0CtD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAEzE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAEtE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAWhE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
function hasOrigin(dataSource) {
|
|
2
|
+
return typeof dataSource === 'object' && dataSource !== null && 'origin' in dataSource;
|
|
3
|
+
}
|
|
4
|
+
function isProjectionOrigin(origin) {
|
|
5
|
+
if (typeof origin !== 'object' || origin === null) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const obj = origin;
|
|
9
|
+
return obj.type === 'projection';
|
|
10
|
+
}
|
|
11
|
+
function extractProjectionField(slice, fieldName) {
|
|
12
|
+
if (!('server' in slice))
|
|
13
|
+
return undefined;
|
|
14
|
+
const dataSource = slice.server?.data?.[0];
|
|
15
|
+
if (!hasOrigin(dataSource))
|
|
16
|
+
return undefined;
|
|
17
|
+
const origin = dataSource.origin;
|
|
18
|
+
if (isProjectionOrigin(origin)) {
|
|
19
|
+
const value = origin[fieldName];
|
|
20
|
+
if (typeof value === 'string') {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
export function extractProjectionIdField(slice) {
|
|
27
|
+
return extractProjectionField(slice, 'idField');
|
|
28
|
+
}
|
|
29
|
+
export function extractProjectionName(slice) {
|
|
30
|
+
return extractProjectionField(slice, 'name');
|
|
31
|
+
}
|
|
32
|
+
export function extractProjectionSingleton(slice) {
|
|
33
|
+
if (!('server' in slice))
|
|
34
|
+
return false;
|
|
35
|
+
const dataSource = slice.server?.data?.[0];
|
|
36
|
+
if (!hasOrigin(dataSource))
|
|
37
|
+
return false;
|
|
38
|
+
const origin = dataSource.origin;
|
|
39
|
+
if (isProjectionOrigin(origin)) {
|
|
40
|
+
return origin.singleton === true;
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../../src/codegen/extract/projection.ts"],"names":[],"mappings":"AAaA,SAAS,SAAS,CAAC,UAAmB;IACpC,OAAO,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,QAAQ,IAAI,UAAU,CAAC;AACzF,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;AACnC,CAAC;AAED,SAAS,sBAAsB,CAAmC,KAAY,EAAE,SAAY;IAC1F,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAE7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAY;IACnD,OAAO,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAChD,OAAO,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAY;IACrD,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAEzC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACjC,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Slice } from '@auto-engineer/narrative';
|
|
2
|
+
import type { EventExample } from './step-types';
|
|
3
|
+
interface QueryGwtCondition {
|
|
4
|
+
description: string;
|
|
5
|
+
given?: EventExample[];
|
|
6
|
+
when: EventExample[];
|
|
7
|
+
then: Array<{
|
|
8
|
+
stateRef: string;
|
|
9
|
+
exampleData: Record<string, unknown>;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export declare function buildQueryGwtMapping(slice: Slice): QueryGwtCondition[];
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/codegen/extract/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,cAAc,CAAC;AAE/D,UAAU,iBAAiB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,IAAI,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,iBAAiB,EAAE,CAgBtE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { extractGwtSpecsFromSlice } from './step-converter.js';
|
|
2
|
+
export function buildQueryGwtMapping(slice) {
|
|
3
|
+
if (slice.type !== 'query')
|
|
4
|
+
return [];
|
|
5
|
+
const gwtSpecs = extractGwtSpecsFromSlice(slice);
|
|
6
|
+
return gwtSpecs.map((gwt) => {
|
|
7
|
+
const givenEvents = Array.isArray(gwt.given) ? gwt.given.filter((i) => 'eventRef' in i) : [];
|
|
8
|
+
const whenEvents = Array.isArray(gwt.when) ? gwt.when.filter((i) => 'eventRef' in i) : [];
|
|
9
|
+
return {
|
|
10
|
+
description: gwt.description,
|
|
11
|
+
given: givenEvents.length > 0 ? givenEvents : undefined,
|
|
12
|
+
when: whenEvents,
|
|
13
|
+
then: gwt.then.filter((i) => 'stateRef' in i),
|
|
14
|
+
};
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../src/codegen/extract/query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAU5D,MAAM,UAAU,oBAAoB,CAAC,KAAY;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAEjD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChH,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7G,OAAO;YACL,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,KAAK,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YACvD,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC;SACjE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Slice } from '@auto-engineer/narrative';
|
|
2
|
+
import type { Message, MessageDefinition } from '../types';
|
|
3
|
+
export declare function extractStatesFromTarget(slice: Slice, allMessages: MessageDefinition[]): Message[];
|
|
4
|
+
export declare function extractStatesFromData(slice: Slice, allMessages: MessageDefinition[]): Message[];
|
|
5
|
+
//# sourceMappingURL=states.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../src/codegen/extract/states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AA2B3D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,OAAO,EAAE,CAWjG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,OAAO,EAAE,CA2B/F"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { extractFieldsFromMessage } from './fields.js';
|
|
2
|
+
function createStateMessage(stateName, allMessages) {
|
|
3
|
+
return {
|
|
4
|
+
type: stateName,
|
|
5
|
+
fields: extractFieldsFromMessage(stateName, 'state', allMessages),
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
function hasServerData(slice) {
|
|
9
|
+
return ('server' in slice &&
|
|
10
|
+
Boolean(slice.server) &&
|
|
11
|
+
'data' in slice.server &&
|
|
12
|
+
Array.isArray(slice.server.data) &&
|
|
13
|
+
slice.server.data.length > 0);
|
|
14
|
+
}
|
|
15
|
+
export function extractStatesFromTarget(slice, allMessages) {
|
|
16
|
+
if (!hasServerData(slice)) {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
const targets = slice.server.data
|
|
20
|
+
.map((d) => d.target?.name)
|
|
21
|
+
.filter((name) => typeof name === 'string');
|
|
22
|
+
const uniqueTargets = Array.from(new Set(targets));
|
|
23
|
+
return uniqueTargets.map((name) => createStateMessage(name, allMessages));
|
|
24
|
+
}
|
|
25
|
+
export function extractStatesFromData(slice, allMessages) {
|
|
26
|
+
if (!hasServerData(slice)) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const states = [];
|
|
30
|
+
const seenStates = new Set();
|
|
31
|
+
for (const dataItem of slice.server.data) {
|
|
32
|
+
const item = dataItem;
|
|
33
|
+
if (!('origin' in item) || typeof item.target?.name !== 'string') {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const stateName = item.target.name;
|
|
37
|
+
if (seenStates.has(stateName)) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const fields = extractFieldsFromMessage(stateName, 'state', allMessages);
|
|
41
|
+
if (fields.length > 0) {
|
|
42
|
+
states.push(createStateMessage(stateName, allMessages));
|
|
43
|
+
seenStates.add(stateName);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return states;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=states.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"states.js","sourceRoot":"","sources":["../../../../src/codegen/extract/states.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AASpD,SAAS,kBAAkB,CAAC,SAAiB,EAAE,WAAgC;IAC7E,OAAO;QACL,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,wBAAwB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAY;IACjC,OAAO,CACL,QAAQ,IAAI,KAAK;QACjB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,MAAM;QACtB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAY,EAAE,WAAgC;IACpF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAc,CAAC,MAAM,EAAE,IAAI,CAAC;SACxC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAY,EAAE,WAAgC;IAClF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,QAAoB,CAAC;QAClC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjE,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACnC,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;YACxD,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Example, Slice, Spec } from '@auto-engineer/narrative';
|
|
2
|
+
import { type CommandExample, type ErrorRef, type EventExample, getSliceType, type SliceType, type StateExample } from './step-types';
|
|
3
|
+
export type { CommandExample, ErrorRef, EventExample, SliceType, StateExample };
|
|
4
|
+
export { getSliceType };
|
|
5
|
+
export interface GwtResult {
|
|
6
|
+
given: EventExample[];
|
|
7
|
+
when: CommandExample | EventExample[];
|
|
8
|
+
then: Array<EventExample | StateExample | CommandExample | ErrorRef>;
|
|
9
|
+
description: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function stepsToGwt(example: Example, sliceType: SliceType): GwtResult;
|
|
12
|
+
export interface GwtConditionWithRule extends GwtResult {
|
|
13
|
+
ruleDescription: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function extractGwtFromSpecs(specs: Spec[], sliceType: SliceType): GwtConditionWithRule[];
|
|
16
|
+
export declare function extractGwtSpecsFromSlice(slice: Slice): GwtConditionWithRule[];
|
|
17
|
+
//# sourceMappingURL=step-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-converter.d.ts","sourceRoot":"","sources":["../../../../src/codegen/extract/step-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,YAAY,EAKZ,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,IAAI,EAAE,cAAc,GAAG,YAAY,EAAE,CAAC;IACtC,IAAI,EAAE,KAAK,CAAC,YAAY,GAAG,YAAY,GAAG,cAAc,GAAG,QAAQ,CAAC,CAAC;IACrE,WAAW,EAAE,MAAM,CAAC;CACrB;AAqED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAG5E;AAED,MAAM,WAAW,oBAAqB,SAAQ,SAAS;IACrD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,oBAAoB,EAAE,CAgB/F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,oBAAoB,EAAE,CAK7E"}
|