@auto-engineer/server-generator-nestjs 0.11.16

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 (143) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/LICENSE +10 -0
  3. package/README.md +290 -0
  4. package/dist/src/codegen/entity-consolidation.d.ts +19 -0
  5. package/dist/src/codegen/entity-consolidation.d.ts.map +1 -0
  6. package/dist/src/codegen/entity-consolidation.js +134 -0
  7. package/dist/src/codegen/entity-consolidation.js.map +1 -0
  8. package/dist/src/codegen/extract/commands.d.ts +25 -0
  9. package/dist/src/codegen/extract/commands.d.ts.map +1 -0
  10. package/dist/src/codegen/extract/commands.js +67 -0
  11. package/dist/src/codegen/extract/commands.js.map +1 -0
  12. package/dist/src/codegen/extract/data-sink.d.ts +6 -0
  13. package/dist/src/codegen/extract/data-sink.d.ts.map +1 -0
  14. package/dist/src/codegen/extract/data-sink.js +78 -0
  15. package/dist/src/codegen/extract/data-sink.js.map +1 -0
  16. package/dist/src/codegen/extract/events.d.ts +10 -0
  17. package/dist/src/codegen/extract/events.d.ts.map +1 -0
  18. package/dist/src/codegen/extract/events.js +42 -0
  19. package/dist/src/codegen/extract/events.js.map +1 -0
  20. package/dist/src/codegen/extract/fields.d.ts +3 -0
  21. package/dist/src/codegen/extract/fields.d.ts.map +1 -0
  22. package/dist/src/codegen/extract/fields.js +9 -0
  23. package/dist/src/codegen/extract/fields.js.map +1 -0
  24. package/dist/src/codegen/extract/graphql.d.ts +14 -0
  25. package/dist/src/codegen/extract/graphql.d.ts.map +1 -0
  26. package/dist/src/codegen/extract/graphql.js +81 -0
  27. package/dist/src/codegen/extract/graphql.js.map +1 -0
  28. package/dist/src/codegen/extract/gwt.d.ts +6 -0
  29. package/dist/src/codegen/extract/gwt.d.ts.map +1 -0
  30. package/dist/src/codegen/extract/gwt.js +64 -0
  31. package/dist/src/codegen/extract/gwt.js.map +1 -0
  32. package/dist/src/codegen/extract/imports.d.ts +29 -0
  33. package/dist/src/codegen/extract/imports.d.ts.map +1 -0
  34. package/dist/src/codegen/extract/imports.js +55 -0
  35. package/dist/src/codegen/extract/imports.js.map +1 -0
  36. package/dist/src/codegen/extract/index.d.ts +10 -0
  37. package/dist/src/codegen/extract/index.d.ts.map +1 -0
  38. package/dist/src/codegen/extract/index.js +10 -0
  39. package/dist/src/codegen/extract/index.js.map +1 -0
  40. package/dist/src/codegen/extract/messages.d.ts +17 -0
  41. package/dist/src/codegen/extract/messages.d.ts.map +1 -0
  42. package/dist/src/codegen/extract/messages.js +172 -0
  43. package/dist/src/codegen/extract/messages.js.map +1 -0
  44. package/dist/src/codegen/extract/projection.d.ts +5 -0
  45. package/dist/src/codegen/extract/projection.d.ts.map +1 -0
  46. package/dist/src/codegen/extract/projection.js +44 -0
  47. package/dist/src/codegen/extract/projection.js.map +1 -0
  48. package/dist/src/codegen/extract/query.d.ts +14 -0
  49. package/dist/src/codegen/extract/query.d.ts.map +1 -0
  50. package/dist/src/codegen/extract/query.js +17 -0
  51. package/dist/src/codegen/extract/query.js.map +1 -0
  52. package/dist/src/codegen/extract/states.d.ts +5 -0
  53. package/dist/src/codegen/extract/states.d.ts.map +1 -0
  54. package/dist/src/codegen/extract/states.js +48 -0
  55. package/dist/src/codegen/extract/states.js.map +1 -0
  56. package/dist/src/codegen/extract/step-converter.d.ts +17 -0
  57. package/dist/src/codegen/extract/step-converter.d.ts.map +1 -0
  58. package/dist/src/codegen/extract/step-converter.js +82 -0
  59. package/dist/src/codegen/extract/step-converter.js.map +1 -0
  60. package/dist/src/codegen/extract/step-types.d.ts +29 -0
  61. package/dist/src/codegen/extract/step-types.d.ts.map +1 -0
  62. package/dist/src/codegen/extract/step-types.js +16 -0
  63. package/dist/src/codegen/extract/step-types.js.map +1 -0
  64. package/dist/src/codegen/extract/type-helpers.d.ts +13 -0
  65. package/dist/src/codegen/extract/type-helpers.d.ts.map +1 -0
  66. package/dist/src/codegen/extract/type-helpers.js +98 -0
  67. package/dist/src/codegen/extract/type-helpers.js.map +1 -0
  68. package/dist/src/codegen/scaffoldFromSchema.d.ts +9 -0
  69. package/dist/src/codegen/scaffoldFromSchema.d.ts.map +1 -0
  70. package/dist/src/codegen/scaffoldFromSchema.js +389 -0
  71. package/dist/src/codegen/scaffoldFromSchema.js.map +1 -0
  72. package/dist/src/codegen/templates/command/command.ts.ejs +16 -0
  73. package/dist/src/codegen/templates/command/handler.specs.ts.ejs +50 -0
  74. package/dist/src/codegen/templates/command/handler.ts.ejs +30 -0
  75. package/dist/src/codegen/templates/command/input.ts.ejs +23 -0
  76. package/dist/src/codegen/templates/command/resolver.ts.ejs +56 -0
  77. package/dist/src/codegen/templates/entity/entity.ts.ejs +35 -0
  78. package/dist/src/codegen/templates/entity/index.ts.ejs +6 -0
  79. package/dist/src/codegen/templates/module/app-module.ts.ejs +65 -0
  80. package/dist/src/codegen/templates/module/domain-module.ts.ejs +46 -0
  81. package/dist/src/codegen/templates/query/handler.ts.ejs +25 -0
  82. package/dist/src/codegen/templates/query/query.ts.ejs +1 -0
  83. package/dist/src/codegen/templates/query/resolver.ts.ejs +20 -0
  84. package/dist/src/codegen/templates/query/type.ts.ejs +24 -0
  85. package/dist/src/codegen/types.d.ts +38 -0
  86. package/dist/src/codegen/types.d.ts.map +1 -0
  87. package/dist/src/codegen/types.js +2 -0
  88. package/dist/src/codegen/types.js.map +1 -0
  89. package/dist/src/codegen/utils/path.d.ts +4 -0
  90. package/dist/src/codegen/utils/path.d.ts.map +1 -0
  91. package/dist/src/codegen/utils/path.js +18 -0
  92. package/dist/src/codegen/utils/path.js.map +1 -0
  93. package/dist/src/commands/generate-server.d.ts +28 -0
  94. package/dist/src/commands/generate-server.d.ts.map +1 -0
  95. package/dist/src/commands/generate-server.js +421 -0
  96. package/dist/src/commands/generate-server.js.map +1 -0
  97. package/dist/src/index.d.ts +3 -0
  98. package/dist/src/index.d.ts.map +1 -0
  99. package/dist/src/index.js +3 -0
  100. package/dist/src/index.js.map +1 -0
  101. package/dist/src/shared/graphql-types.ts +19 -0
  102. package/dist/src/shared/main.ts +27 -0
  103. package/dist/src/shared/mikro-orm.config.ts +18 -0
  104. package/dist/tsconfig.tsbuildinfo +1 -0
  105. package/package.json +70 -0
  106. package/src/codegen/entity-consolidation.ts +213 -0
  107. package/src/codegen/extract/commands.ts +108 -0
  108. package/src/codegen/extract/data-sink.ts +93 -0
  109. package/src/codegen/extract/events.ts +63 -0
  110. package/src/codegen/extract/fields.ts +17 -0
  111. package/src/codegen/extract/graphql.ts +103 -0
  112. package/src/codegen/extract/gwt.ts +79 -0
  113. package/src/codegen/extract/imports.ts +71 -0
  114. package/src/codegen/extract/index.ts +9 -0
  115. package/src/codegen/extract/messages.ts +232 -0
  116. package/src/codegen/extract/projection.ts +62 -0
  117. package/src/codegen/extract/query.ts +28 -0
  118. package/src/codegen/extract/states.ts +69 -0
  119. package/src/codegen/extract/step-converter.ts +124 -0
  120. package/src/codegen/extract/step-types.ts +51 -0
  121. package/src/codegen/extract/type-helpers.ts +102 -0
  122. package/src/codegen/scaffoldFromSchema.ts +559 -0
  123. package/src/codegen/templates/command/command.ts.ejs +16 -0
  124. package/src/codegen/templates/command/handler.specs.ts.ejs +50 -0
  125. package/src/codegen/templates/command/handler.ts.ejs +30 -0
  126. package/src/codegen/templates/command/input.ts.ejs +23 -0
  127. package/src/codegen/templates/command/resolver.ts.ejs +56 -0
  128. package/src/codegen/templates/entity/entity.ts.ejs +35 -0
  129. package/src/codegen/templates/entity/index.ts.ejs +6 -0
  130. package/src/codegen/templates/module/app-module.ts.ejs +65 -0
  131. package/src/codegen/templates/module/domain-module.ts.ejs +46 -0
  132. package/src/codegen/templates/query/handler.ts.ejs +25 -0
  133. package/src/codegen/templates/query/query.ts.ejs +1 -0
  134. package/src/codegen/templates/query/resolver.ts.ejs +20 -0
  135. package/src/codegen/templates/query/type.ts.ejs +24 -0
  136. package/src/codegen/types.ts +39 -0
  137. package/src/codegen/utils/path.ts +20 -0
  138. package/src/commands/generate-server.ts +551 -0
  139. package/src/index.ts +10 -0
  140. package/src/shared/graphql-types.ts +19 -0
  141. package/src/shared/main.ts +27 -0
  142. package/src/shared/mikro-orm.config.ts +18 -0
  143. package/tsconfig.json +12 -0
@@ -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"}
@@ -0,0 +1,82 @@
1
+ import { getSliceType, isStepWithDocString, isStepWithError, resolveMajorKeyword, } from './step-types.js';
2
+ export { getSliceType };
3
+ function parseSteps(example) {
4
+ const given = [];
5
+ const whenItems = [];
6
+ const thenItems = [];
7
+ const thenErrors = [];
8
+ let effectiveKeyword = 'Given';
9
+ for (const step of example.steps) {
10
+ if (isStepWithError(step)) {
11
+ thenErrors.push({ errorType: step.error.type, message: step.error.message });
12
+ continue;
13
+ }
14
+ if (!isStepWithDocString(step))
15
+ continue;
16
+ effectiveKeyword = resolveMajorKeyword(step.keyword, effectiveKeyword);
17
+ const exampleData = step.docString ?? {};
18
+ if (effectiveKeyword === 'Given') {
19
+ given.push({ eventRef: step.text, exampleData });
20
+ }
21
+ else if (effectiveKeyword === 'When') {
22
+ whenItems.push({ text: step.text, exampleData });
23
+ }
24
+ else if (effectiveKeyword === 'Then') {
25
+ thenItems.push({ text: step.text, exampleData });
26
+ }
27
+ }
28
+ return { given, whenItems, thenItems, thenErrors };
29
+ }
30
+ function buildGwtResult(sliceType, parsed, description) {
31
+ const { given, whenItems, thenItems, thenErrors } = parsed;
32
+ if (sliceType === 'command') {
33
+ return {
34
+ given,
35
+ when: { commandRef: whenItems[0]?.text ?? '', exampleData: whenItems[0]?.exampleData ?? {} },
36
+ then: [...thenItems.map((t) => ({ eventRef: t.text, exampleData: t.exampleData })), ...thenErrors],
37
+ description,
38
+ };
39
+ }
40
+ if (sliceType === 'react') {
41
+ return {
42
+ given,
43
+ when: whenItems.map((w) => ({ eventRef: w.text, exampleData: w.exampleData })),
44
+ then: [...thenItems.map((t) => ({ commandRef: t.text, exampleData: t.exampleData })), ...thenErrors],
45
+ description,
46
+ };
47
+ }
48
+ return {
49
+ given,
50
+ when: whenItems.map((w) => ({ eventRef: w.text, exampleData: w.exampleData })),
51
+ then: [...thenItems.map((t) => ({ stateRef: t.text, exampleData: t.exampleData })), ...thenErrors],
52
+ description,
53
+ };
54
+ }
55
+ export function stepsToGwt(example, sliceType) {
56
+ const parsed = parseSteps(example);
57
+ return buildGwtResult(sliceType, parsed, example.name);
58
+ }
59
+ export function extractGwtFromSpecs(specs, sliceType) {
60
+ const results = [];
61
+ for (const spec of specs) {
62
+ for (const rule of spec.rules) {
63
+ for (const example of rule.examples) {
64
+ const gwt = stepsToGwt(example, sliceType);
65
+ results.push({
66
+ ...gwt,
67
+ ruleDescription: rule.name,
68
+ });
69
+ }
70
+ }
71
+ }
72
+ return results;
73
+ }
74
+ export function extractGwtSpecsFromSlice(slice) {
75
+ if (!('server' in slice))
76
+ return [];
77
+ const specs = slice.server?.specs;
78
+ if (!Array.isArray(specs) || specs.length === 0)
79
+ return [];
80
+ return extractGwtFromSpecs(specs, getSliceType(slice));
81
+ }
82
+ //# sourceMappingURL=step-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-converter.js","sourceRoot":"","sources":["../../../../src/codegen/extract/step-converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Slice, Step, StepWithDocStringSchema, StepWithErrorSchema } from '@auto-engineer/narrative';
2
+ import type { z } from 'zod';
3
+ export type StepWithDocString = z.infer<typeof StepWithDocStringSchema>;
4
+ export type StepWithError = z.infer<typeof StepWithErrorSchema>;
5
+ export type StepKeyword = StepWithDocString['keyword'];
6
+ export type MajorKeyword = Exclude<StepKeyword, 'And'>;
7
+ export type ErrorType = StepWithError['error']['type'];
8
+ export type SliceType = Extract<Slice['type'], 'command' | 'query' | 'react'>;
9
+ export declare function getSliceType(slice: Slice): SliceType;
10
+ export declare function isStepWithDocString(step: Step): step is StepWithDocString;
11
+ export declare function isStepWithError(step: Step): step is StepWithError;
12
+ export declare function resolveMajorKeyword(keyword: StepKeyword, current: MajorKeyword): MajorKeyword;
13
+ export interface CommandExample {
14
+ commandRef: string;
15
+ exampleData: Record<string, unknown>;
16
+ }
17
+ export interface EventExample {
18
+ eventRef: string;
19
+ exampleData: Record<string, unknown>;
20
+ }
21
+ export interface StateExample {
22
+ stateRef: string;
23
+ exampleData: Record<string, unknown>;
24
+ }
25
+ export interface ErrorRef {
26
+ errorType: ErrorType;
27
+ message?: string;
28
+ }
29
+ //# sourceMappingURL=step-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-types.d.ts","sourceRoot":"","sources":["../../../../src/codegen/extract/step-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC1G,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACvD,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;AAE9E,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAKpD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,iBAAiB,CAEzE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,aAAa,CAEjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CAE7F;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,16 @@
1
+ export function getSliceType(slice) {
2
+ if (slice.type === 'command' || slice.type === 'query' || slice.type === 'react') {
3
+ return slice.type;
4
+ }
5
+ return 'command';
6
+ }
7
+ export function isStepWithDocString(step) {
8
+ return 'text' in step;
9
+ }
10
+ export function isStepWithError(step) {
11
+ return 'error' in step;
12
+ }
13
+ export function resolveMajorKeyword(keyword, current) {
14
+ return keyword === 'And' ? current : keyword;
15
+ }
16
+ //# sourceMappingURL=step-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-types.js","sourceRoot":"","sources":["../../../../src/codegen/extract/step-types.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjF,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAU;IAC5C,OAAO,MAAM,IAAI,IAAI,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAU;IACxC,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAoB,EAAE,OAAqB;IAC7E,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare function isInlineObject(ts: string): boolean;
2
+ export declare function isInlineObjectArray(ts: string): boolean;
3
+ export declare function baseTs(ts: string): string;
4
+ export declare function createIsEnumType(toTsFieldType: (ts: string) => string): (tsType: string) => boolean;
5
+ export declare function createFieldUsesDate(graphqlType: (ts: string) => string): (ts: string) => boolean;
6
+ export declare function createFieldUsesJSON(graphqlType: (ts: string) => string): (ts: string) => boolean;
7
+ export declare function createFieldUsesFloat(graphqlType: (ts: string) => string): (ts: string) => boolean;
8
+ export declare function extractEnumName(tsType: string, toTsFieldType: (ts: string) => string): string;
9
+ export declare function createCollectEnumNames(isEnumType: (tsType: string) => boolean, toTsFieldType: (ts: string) => string): (fields: Array<{
10
+ type?: string;
11
+ tsType?: string;
12
+ }>) => string[];
13
+ //# sourceMappingURL=type-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-helpers.d.ts","sourceRoot":"","sources":["../../../../src/codegen/extract/type-helpers.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,IAC5D,QAAQ,MAAM,KAAG,OAAO,CAsBjC;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,IAC7D,IAAI,MAAM,KAAG,OAAO,CAO7B;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,IAC7D,IAAI,MAAM,KAAG,OAAO,CAO7B;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,IAC9D,IAAI,MAAM,KAAG,OAAO,CAsB7B;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAK7F;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,IAC3G,QAAQ,KAAK,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,KAAG,MAAM,EAAE,CAUrE"}
@@ -0,0 +1,98 @@
1
+ export function isInlineObject(ts) {
2
+ return /^\{[\s\S]*\}$/.test((ts ?? '').trim());
3
+ }
4
+ export function isInlineObjectArray(ts) {
5
+ const t = (ts ?? '').trim();
6
+ return /^Array<\{[\s\S]*\}>$/.test(t) || /^\{[\s\S]*\}\[\]$/.test(t);
7
+ }
8
+ export function baseTs(ts) {
9
+ return (ts ?? 'string').replace(/\s*\|\s*null\b/g, '').trim();
10
+ }
11
+ export function createIsEnumType(toTsFieldType) {
12
+ return (tsType) => {
13
+ const converted = toTsFieldType(tsType);
14
+ const base = converted
15
+ .replace(/\s*\|\s*null\b/g, '')
16
+ .replace(/\[\]$/, '')
17
+ .trim();
18
+ return (/^[A-Z][a-zA-Z0-9]*$/.test(base) &&
19
+ ![
20
+ 'String',
21
+ 'Number',
22
+ 'Boolean',
23
+ 'Date',
24
+ 'ID',
25
+ 'Int',
26
+ 'Float',
27
+ 'GraphQLISODateTime',
28
+ 'GraphQLJSON',
29
+ 'JSON',
30
+ ].includes(base));
31
+ };
32
+ }
33
+ export function createFieldUsesDate(graphqlType) {
34
+ return (ts) => {
35
+ const b = baseTs(ts);
36
+ const gqlType = graphqlType(b);
37
+ if (gqlType.includes('GraphQLISODateTime'))
38
+ return true;
39
+ if (isInlineObject(b) || isInlineObjectArray(b))
40
+ return /:\s*Date\b/.test(b);
41
+ return false;
42
+ };
43
+ }
44
+ export function createFieldUsesJSON(graphqlType) {
45
+ return (ts) => {
46
+ const b = baseTs(ts);
47
+ const gqlType = graphqlType(b);
48
+ if (gqlType.includes('GraphQLJSON') || gqlType.includes('JSON'))
49
+ return true;
50
+ if (isInlineObject(b) || isInlineObjectArray(b))
51
+ return /:\s*(unknown|any|object)\b/.test(b);
52
+ return false;
53
+ };
54
+ }
55
+ export function createFieldUsesFloat(graphqlType) {
56
+ return (ts) => {
57
+ const b = baseTs(ts);
58
+ const gqlType = graphqlType(b);
59
+ if (gqlType.includes('Float'))
60
+ return true;
61
+ if (isInlineObject(b) || isInlineObjectArray(b)) {
62
+ const inner = b.trim().startsWith('Array<')
63
+ ? b
64
+ .trim()
65
+ .replace(/^Array<\{/, '{')
66
+ .replace(/}>$/, '}')
67
+ : b.trim().replace(/\[\]$/, '');
68
+ const match = inner.match(/^\{([\s\S]*)\}$/);
69
+ const body = match ? match[1] : '';
70
+ const rawFields = body.split(/[,;]\s*/).filter(Boolean);
71
+ return rawFields.some((f) => {
72
+ const parts = f.split(':');
73
+ const type = parts.slice(1).join(':').trim();
74
+ return type.length > 0 && graphqlType(type).includes('Float');
75
+ });
76
+ }
77
+ return false;
78
+ };
79
+ }
80
+ export function extractEnumName(tsType, toTsFieldType) {
81
+ return toTsFieldType(tsType)
82
+ .replace(/\s*\|\s*null\b/g, '')
83
+ .replace(/\[\]$/, '')
84
+ .trim();
85
+ }
86
+ export function createCollectEnumNames(isEnumType, toTsFieldType) {
87
+ return (fields) => {
88
+ const enumNames = new Set();
89
+ for (const field of fields) {
90
+ const fieldType = field.type ?? field.tsType;
91
+ if (fieldType !== undefined && fieldType !== null && fieldType.length > 0 && isEnumType(fieldType)) {
92
+ enumNames.add(extractEnumName(fieldType, toTsFieldType));
93
+ }
94
+ }
95
+ return Array.from(enumNames).sort();
96
+ };
97
+ }
98
+ //# sourceMappingURL=type-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-helpers.js","sourceRoot":"","sources":["../../../../src/codegen/extract/type-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Model, Narrative } from '@auto-engineer/narrative';
2
+ export interface FilePlan {
3
+ outputPath: string;
4
+ contents: string;
5
+ }
6
+ export declare function generateScaffoldFilePlans(flows: Narrative[], messages: Model['messages'], integrations?: Model['integrations'], baseDir?: string): Promise<FilePlan[]>;
7
+ export declare function writeScaffoldFilePlans(plans: FilePlan[]): Promise<void>;
8
+ export declare function scaffoldFromSchema(flows: Narrative[], messages: Model['messages'], baseDir?: string): Promise<void>;
9
+ //# sourceMappingURL=scaffoldFromSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffoldFromSchema.d.ts","sourceRoot":"","sources":["../../../src/codegen/scaffoldFromSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAS,MAAM,0BAA0B,CAAC;AAsLxE,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AA0TD,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,SAAS,EAAE,EAClB,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,EAC3B,YAAY,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,EACpC,OAAO,SAAe,GACrB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAqCrB;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7E;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,EAAE,EAClB,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,EAC3B,OAAO,SAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAGf"}