@auto-engineer/narrative 1.138.0 → 1.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +5 -5
  3. package/.turbo/turbo-type-check.log +1 -1
  4. package/CHANGELOG.md +41 -0
  5. package/dist/scripts/convert-flow-exec.js +2 -2
  6. package/dist/scripts/convert-flow-exec.js.map +1 -1
  7. package/dist/scripts/print-schema.js +5 -5
  8. package/dist/scripts/print-schema.js.map +1 -1
  9. package/dist/src/fluent-builder.d.ts +29 -29
  10. package/dist/src/fluent-builder.d.ts.map +1 -1
  11. package/dist/src/fluent-builder.js +81 -81
  12. package/dist/src/fluent-builder.js.map +1 -1
  13. package/dist/src/{getNarratives.d.ts → getScenes.d.ts} +6 -6
  14. package/dist/src/getScenes.d.ts.map +1 -0
  15. package/dist/src/{getNarratives.js → getScenes.js} +16 -16
  16. package/dist/src/getScenes.js.map +1 -0
  17. package/dist/src/id/addAutoIds.d.ts.map +1 -1
  18. package/dist/src/id/addAutoIds.js +22 -22
  19. package/dist/src/id/addAutoIds.js.map +1 -1
  20. package/dist/src/id/hasAllIds.d.ts.map +1 -1
  21. package/dist/src/id/hasAllIds.js +2 -2
  22. package/dist/src/id/hasAllIds.js.map +1 -1
  23. package/dist/src/index.d.ts +8 -8
  24. package/dist/src/index.d.ts.map +1 -1
  25. package/dist/src/index.js +4 -4
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/loader/index.js +1 -1
  28. package/dist/src/loader/index.js.map +1 -1
  29. package/dist/src/loader/runtime-cjs.js +1 -1
  30. package/dist/src/loader/runtime-cjs.js.map +1 -1
  31. package/dist/src/narrative-context.d.ts +9 -9
  32. package/dist/src/narrative-context.d.ts.map +1 -1
  33. package/dist/src/narrative-context.js +47 -47
  34. package/dist/src/narrative-context.js.map +1 -1
  35. package/dist/src/narrative-registry.d.ts +6 -6
  36. package/dist/src/narrative-registry.d.ts.map +1 -1
  37. package/dist/src/narrative-registry.js +26 -26
  38. package/dist/src/narrative-registry.js.map +1 -1
  39. package/dist/src/narrative.d.ts +5 -5
  40. package/dist/src/narrative.d.ts.map +1 -1
  41. package/dist/src/narrative.js +26 -27
  42. package/dist/src/narrative.js.map +1 -1
  43. package/dist/src/parse-graphql-request.d.ts +1 -1
  44. package/dist/src/parse-graphql-request.d.ts.map +1 -1
  45. package/dist/src/parse-graphql-request.js +3 -3
  46. package/dist/src/parse-graphql-request.js.map +1 -1
  47. package/dist/src/samples/items.narrative.js +2 -2
  48. package/dist/src/samples/items.narrative.js.map +1 -1
  49. package/dist/src/samples/mixed-given-types.narrative.js +2 -2
  50. package/dist/src/samples/mixed-given-types.narrative.js.map +1 -1
  51. package/dist/src/samples/place-order.narrative.js +2 -2
  52. package/dist/src/samples/place-order.narrative.js.map +1 -1
  53. package/dist/src/samples/questionnaires.narrative.js +2 -2
  54. package/dist/src/samples/questionnaires.narrative.js.map +1 -1
  55. package/dist/src/samples/seasonal-assistant.schema.json +2 -2
  56. package/dist/src/samples/test-with-ids.narrative.js +2 -2
  57. package/dist/src/samples/test-with-ids.narrative.js.map +1 -1
  58. package/dist/src/schema.d.ts +136 -136
  59. package/dist/src/schema.d.ts.map +1 -1
  60. package/dist/src/schema.js +76 -76
  61. package/dist/src/schema.js.map +1 -1
  62. package/dist/src/slice-builder.d.ts +6 -6
  63. package/dist/src/slice-builder.d.ts.map +1 -1
  64. package/dist/src/slice-builder.js +21 -21
  65. package/dist/src/slice-builder.js.map +1 -1
  66. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js +1 -1
  67. package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js.map +1 -1
  68. package/dist/src/transformers/model-to-narrative/cross-module-imports.js +4 -4
  69. package/dist/src/transformers/model-to-narrative/cross-module-imports.js.map +1 -1
  70. package/dist/src/transformers/model-to-narrative/generators/compose.js +3 -3
  71. package/dist/src/transformers/model-to-narrative/generators/compose.js.map +1 -1
  72. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +2 -2
  73. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -1
  74. package/dist/src/transformers/model-to-narrative/generators/flow.js +20 -20
  75. package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -1
  76. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts +1 -1
  77. package/dist/src/transformers/model-to-narrative/generators/imports.d.ts.map +1 -1
  78. package/dist/src/transformers/model-to-narrative/generators/imports.js +1 -1
  79. package/dist/src/transformers/model-to-narrative/generators/imports.js.map +1 -1
  80. package/dist/src/transformers/model-to-narrative/generators/module-code.js +14 -14
  81. package/dist/src/transformers/model-to-narrative/generators/module-code.js.map +1 -1
  82. package/dist/src/transformers/model-to-narrative/index.d.ts +4 -4
  83. package/dist/src/transformers/model-to-narrative/index.d.ts.map +1 -1
  84. package/dist/src/transformers/model-to-narrative/index.js +1 -1
  85. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts +2 -2
  86. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts.map +1 -1
  87. package/dist/src/transformers/model-to-narrative/spec-traversal.js +5 -5
  88. package/dist/src/transformers/model-to-narrative/spec-traversal.js.map +1 -1
  89. package/dist/src/transformers/model-to-narrative/types.d.ts +1 -1
  90. package/dist/src/transformers/model-to-narrative/types.d.ts.map +1 -1
  91. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts +1 -1
  92. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts.map +1 -1
  93. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js +4 -4
  94. package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js.map +1 -1
  95. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts +1 -1
  96. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts.map +1 -1
  97. package/dist/src/transformers/model-to-narrative/validate-modules.js +19 -19
  98. package/dist/src/transformers/model-to-narrative/validate-modules.js.map +1 -1
  99. package/dist/src/transformers/narrative-to-model/assemble.d.ts +2 -2
  100. package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -1
  101. package/dist/src/transformers/narrative-to-model/assemble.js +10 -3
  102. package/dist/src/transformers/narrative-to-model/assemble.js.map +1 -1
  103. package/dist/src/transformers/narrative-to-model/debug.d.ts.map +1 -1
  104. package/dist/src/transformers/narrative-to-model/debug.js +1 -1
  105. package/dist/src/transformers/narrative-to-model/debug.js.map +1 -1
  106. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts +2 -2
  107. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts.map +1 -1
  108. package/dist/src/transformers/narrative-to-model/derive-modules.js +9 -9
  109. package/dist/src/transformers/narrative-to-model/derive-modules.js.map +1 -1
  110. package/dist/src/transformers/narrative-to-model/index.d.ts +2 -2
  111. package/dist/src/transformers/narrative-to-model/index.d.ts.map +1 -1
  112. package/dist/src/transformers/narrative-to-model/index.js +39 -39
  113. package/dist/src/transformers/narrative-to-model/index.js.map +1 -1
  114. package/dist/src/transformers/narrative-to-model/spec-processors.js +1 -1
  115. package/dist/src/transformers/narrative-to-model/spec-processors.js.map +1 -1
  116. package/dist/src/transformers/narrative-to-model/strings.d.ts +1 -1
  117. package/dist/src/transformers/narrative-to-model/strings.d.ts.map +1 -1
  118. package/dist/src/transformers/narrative-to-model/strings.js +6 -6
  119. package/dist/src/transformers/narrative-to-model/strings.js.map +1 -1
  120. package/dist/src/validate-slice-requests.d.ts +4 -4
  121. package/dist/src/validate-slice-requests.d.ts.map +1 -1
  122. package/dist/src/validate-slice-requests.js +34 -34
  123. package/dist/src/validate-slice-requests.js.map +1 -1
  124. package/dist/tsconfig.tsbuildinfo +1 -1
  125. package/package.json +4 -4
  126. package/scripts/convert-flow-exec.ts +2 -2
  127. package/scripts/print-schema.ts +8 -8
  128. package/src/fluent-builder.specs.ts +3 -3
  129. package/src/fluent-builder.ts +141 -141
  130. package/src/{getNarratives.cache.specs.ts → getScenes.cache.specs.ts} +45 -45
  131. package/src/{getNarratives.specs.ts → getScenes.specs.ts} +302 -300
  132. package/src/{getNarratives.ts → getScenes.ts} +20 -20
  133. package/src/id/addAutoIds.specs.ts +105 -105
  134. package/src/id/addAutoIds.ts +26 -26
  135. package/src/id/hasAllIds.specs.ts +59 -59
  136. package/src/id/hasAllIds.ts +6 -6
  137. package/src/index.ts +12 -13
  138. package/src/loader/index.ts +1 -1
  139. package/src/loader/runtime-cjs.ts +1 -1
  140. package/src/model-to-narrative.specs.ts +133 -135
  141. package/src/narrative-context.specs.ts +24 -24
  142. package/src/narrative-context.ts +61 -61
  143. package/src/narrative-registry.ts +31 -31
  144. package/src/narrative.ts +31 -33
  145. package/src/parse-graphql-request.specs.ts +5 -5
  146. package/src/parse-graphql-request.ts +3 -3
  147. package/src/samples/items.narrative.ts +2 -2
  148. package/src/samples/mixed-given-types.narrative.ts +2 -2
  149. package/src/samples/place-order.narrative.ts +2 -2
  150. package/src/samples/questionnaires.narrative.ts +2 -2
  151. package/src/samples/seasonal-assistant.schema.json +2 -2
  152. package/src/samples/test-with-ids.narrative.ts +2 -2
  153. package/src/schema.specs.ts +99 -91
  154. package/src/schema.ts +89 -89
  155. package/src/slice-builder.ts +30 -30
  156. package/src/transformers/model-to-narrative/analysis/lint-helpers.ts +1 -1
  157. package/src/transformers/model-to-narrative/cross-module-imports.specs.ts +43 -43
  158. package/src/transformers/model-to-narrative/cross-module-imports.ts +4 -4
  159. package/src/transformers/model-to-narrative/generators/compose.ts +4 -4
  160. package/src/transformers/model-to-narrative/generators/flow.ts +36 -36
  161. package/src/transformers/model-to-narrative/generators/imports.ts +1 -1
  162. package/src/transformers/model-to-narrative/generators/module-code.ts +15 -15
  163. package/src/transformers/model-to-narrative/index.ts +4 -4
  164. package/src/transformers/model-to-narrative/modules.specs.ts +58 -58
  165. package/src/transformers/model-to-narrative/spec-traversal.specs.ts +43 -43
  166. package/src/transformers/model-to-narrative/spec-traversal.ts +6 -6
  167. package/src/transformers/model-to-narrative/types.ts +1 -1
  168. package/src/transformers/model-to-narrative/utils/integration-extractor.ts +5 -5
  169. package/src/transformers/model-to-narrative/validate-modules.ts +22 -22
  170. package/src/transformers/narrative-to-model/assemble.ts +12 -4
  171. package/src/transformers/narrative-to-model/debug.ts +1 -1
  172. package/src/transformers/narrative-to-model/derive-modules.specs.ts +35 -35
  173. package/src/transformers/narrative-to-model/derive-modules.ts +11 -11
  174. package/src/transformers/narrative-to-model/index.ts +47 -47
  175. package/src/transformers/narrative-to-model/spec-processors.ts +1 -1
  176. package/src/transformers/narrative-to-model/strings.ts +6 -6
  177. package/src/transformers/narrative-to-model/type-inference.specs.ts +11 -11
  178. package/src/validate-slice-requests.specs.ts +113 -113
  179. package/src/validate-slice-requests.ts +49 -49
  180. package/dist/src/getNarratives.d.ts.map +0 -1
  181. package/dist/src/getNarratives.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import type { ClientSpecNode, Example, Model, Rule, Slice, Spec, Step } from '../index';
1
+ import type { ClientSpecNode, Example, Model, Moment, Rule, Spec, Step } from '../index';
2
2
  import { generateAutoId } from './generators';
3
3
 
4
4
  function ensureId(item: { id?: string }): void {
@@ -42,18 +42,18 @@ function processSpecs(specs: Spec[]): Spec[] {
42
42
  });
43
43
  }
44
44
 
45
- function processServerSpecs(slice: Slice): Slice {
45
+ function processServerSpecs(slice: Moment): Moment {
46
46
  if (!('server' in slice) || slice.server?.specs === undefined || !Array.isArray(slice.server.specs)) return slice;
47
47
 
48
- const modifiedSlice = structuredClone(slice);
48
+ const modifiedMoment = structuredClone(slice);
49
49
  if (
50
- 'server' in modifiedSlice &&
51
- modifiedSlice.server?.specs !== undefined &&
52
- Array.isArray(modifiedSlice.server.specs)
50
+ 'server' in modifiedMoment &&
51
+ modifiedMoment.server?.specs !== undefined &&
52
+ Array.isArray(modifiedMoment.server.specs)
53
53
  ) {
54
- modifiedSlice.server.specs = processSpecs(modifiedSlice.server.specs);
54
+ modifiedMoment.server.specs = processSpecs(modifiedMoment.server.specs);
55
55
  }
56
- return modifiedSlice;
56
+ return modifiedMoment;
57
57
  }
58
58
 
59
59
  function processClientSpecNodes(nodes: ClientSpecNode[]): ClientSpecNode[] {
@@ -67,27 +67,27 @@ function processClientSpecNodes(nodes: ClientSpecNode[]): ClientSpecNode[] {
67
67
  });
68
68
  }
69
69
 
70
- function processClientSpecs(slice: Slice): Slice {
70
+ function processClientSpecs(slice: Moment): Moment {
71
71
  if (!('client' in slice) || slice.client?.specs === undefined || !Array.isArray(slice.client.specs)) return slice;
72
72
 
73
- const modifiedSlice = structuredClone(slice);
74
- if ('client' in modifiedSlice && modifiedSlice.client?.specs !== undefined) {
75
- modifiedSlice.client.specs = processClientSpecNodes(modifiedSlice.client.specs);
73
+ const modifiedMoment = structuredClone(slice);
74
+ if ('client' in modifiedMoment && modifiedMoment.client?.specs !== undefined) {
75
+ modifiedMoment.client.specs = processClientSpecNodes(modifiedMoment.client.specs);
76
76
  }
77
- return modifiedSlice;
77
+ return modifiedMoment;
78
78
  }
79
79
 
80
- function processDataItems(slice: Slice): Slice {
80
+ function processDataItems(slice: Moment): Moment {
81
81
  if (!('server' in slice) || !slice.server?.data) return slice;
82
82
 
83
- const modifiedSlice = structuredClone(slice);
84
- if ('server' in modifiedSlice && modifiedSlice.server?.data) {
83
+ const modifiedMoment = structuredClone(slice);
84
+ if ('server' in modifiedMoment && modifiedMoment.server?.data) {
85
85
  // Ensure the data wrapper has an ID
86
- ensureId(modifiedSlice.server.data);
86
+ ensureId(modifiedMoment.server.data);
87
87
 
88
88
  // Process items array if it exists
89
- if (Array.isArray(modifiedSlice.server.data.items)) {
90
- modifiedSlice.server.data.items = modifiedSlice.server.data.items.map((item) => {
89
+ if (Array.isArray(modifiedMoment.server.data.items)) {
90
+ modifiedMoment.server.data.items = modifiedMoment.server.data.items.map((item) => {
91
91
  const itemCopy = { ...item };
92
92
  ensureId(itemCopy);
93
93
  if ('destination' in itemCopy && itemCopy._withState) {
@@ -98,10 +98,10 @@ function processDataItems(slice: Slice): Slice {
98
98
  });
99
99
  }
100
100
  }
101
- return modifiedSlice;
101
+ return modifiedMoment;
102
102
  }
103
103
 
104
- function processSlice(slice: Slice): Slice {
104
+ function processMoment(slice: Moment): Moment {
105
105
  let sliceCopy = { ...slice };
106
106
  ensureId(sliceCopy);
107
107
  sliceCopy = processServerSpecs(sliceCopy);
@@ -112,11 +112,11 @@ function processSlice(slice: Slice): Slice {
112
112
 
113
113
  export function addAutoIds(specs: Model): Model {
114
114
  const result = structuredClone(specs);
115
- result.narratives = result.narratives.map((narrative) => {
116
- const narrativeCopy = { ...narrative };
117
- ensureId(narrativeCopy);
118
- narrativeCopy.slices = narrative.slices.map(processSlice);
119
- return narrativeCopy;
115
+ result.scenes = result.scenes.map((scene) => {
116
+ const sceneCopy = { ...scene };
117
+ ensureId(sceneCopy);
118
+ sceneCopy.moments = scene.moments.map(processMoment);
119
+ return sceneCopy;
120
120
  });
121
121
  return result;
122
122
  }
@@ -5,13 +5,13 @@ import { addAutoIds, hasAllIds } from './index';
5
5
  describe('hasAllIds', () => {
6
6
  const createModelWithoutIds = (): Model => ({
7
7
  variant: 'specs',
8
- narratives: [
8
+ scenes: [
9
9
  {
10
10
  name: 'Test Flow Without IDs',
11
- slices: [
11
+ moments: [
12
12
  {
13
13
  type: 'command',
14
- name: 'Test slice without ID',
14
+ name: 'Test moment without ID',
15
15
  client: { specs: [] },
16
16
  server: {
17
17
  description: 'Test server',
@@ -39,14 +39,14 @@ describe('hasAllIds', () => {
39
39
 
40
40
  const createModelWithIds = (): Model => ({
41
41
  variant: 'specs',
42
- narratives: [
42
+ scenes: [
43
43
  {
44
44
  name: 'Test Flow with IDs',
45
45
  id: 'FLOW-001',
46
- slices: [
46
+ moments: [
47
47
  {
48
48
  type: 'command',
49
- name: 'Test slice with ID',
49
+ name: 'Test moment with ID',
50
50
  id: 'SLICE-001',
51
51
  client: { specs: [] },
52
52
  server: {
@@ -77,14 +77,14 @@ describe('hasAllIds', () => {
77
77
 
78
78
  const createModelWithFullIds = (): Model => ({
79
79
  variant: 'specs',
80
- narratives: [
80
+ scenes: [
81
81
  {
82
82
  name: 'Test Flow with Full IDs',
83
83
  id: 'FLOW-001',
84
- slices: [
84
+ moments: [
85
85
  {
86
86
  type: 'command',
87
- name: 'Test slice with ID',
87
+ name: 'Test moment with ID',
88
88
  id: 'SLICE-001',
89
89
  client: { specs: [] },
90
90
  server: {
@@ -136,14 +136,14 @@ describe('hasAllIds', () => {
136
136
  modules: [],
137
137
  });
138
138
 
139
- const createMultipleFlowsModel = (includeAllIds: boolean, includeAllSliceIds: boolean): Model => ({
139
+ const createMultipleFlowsModel = (includeAllIds: boolean, includeAllMomentIds: boolean): Model => ({
140
140
  variant: 'specs',
141
- narratives: [
141
+ scenes: [
142
142
  {
143
143
  name: 'Home Screen',
144
144
  id: 'aifPcU3hw',
145
145
  sourceFile: '/path/to/homepage.narrative.ts',
146
- slices: [
146
+ moments: [
147
147
  {
148
148
  name: 'Active Surveys Summary',
149
149
  id: 'slice1',
@@ -156,10 +156,10 @@ describe('hasAllIds', () => {
156
156
  name: 'Create Survey',
157
157
  id: includeAllIds ? 'MPviTMrQC' : undefined,
158
158
  sourceFile: '/path/to/homepage.narrative.ts',
159
- slices: [
159
+ moments: [
160
160
  {
161
161
  name: 'Create Survey Form',
162
- id: includeAllSliceIds ? 'slice2' : undefined,
162
+ id: includeAllMomentIds ? 'slice2' : undefined,
163
163
  type: 'experience',
164
164
  client: { specs: [{ type: 'it', id: 'it2', title: 'allow entering survey title' }] },
165
165
  },
@@ -169,7 +169,7 @@ describe('hasAllIds', () => {
169
169
  name: 'Response Analytics',
170
170
  id: 'eME978Euk',
171
171
  sourceFile: '/path/to/homepage.narrative.ts',
172
- slices: [
172
+ moments: [
173
173
  {
174
174
  name: 'Response Rate Charts',
175
175
  id: 'slice3',
@@ -200,17 +200,17 @@ describe('hasAllIds', () => {
200
200
  expect(hasAllIds(model)).toBe(true);
201
201
  });
202
202
 
203
- it('should return false if any slice is missing an ID', () => {
203
+ it('should return false if any moment is missing an ID', () => {
204
204
  const model = createModelWithIds();
205
205
  const modifiedModel = structuredClone(model);
206
- modifiedModel.narratives[0].slices[0].id = '';
206
+ modifiedModel.scenes[0].moments[0].id = '';
207
207
  expect(hasAllIds(modifiedModel)).toBe(false);
208
208
  });
209
209
 
210
210
  it('should return false if any rule is missing an ID', () => {
211
211
  const model = createModelWithIds();
212
212
  const modifiedModel = structuredClone(model);
213
- const slice = modifiedModel.narratives[0].slices[0];
213
+ const slice = modifiedModel.scenes[0].moments[0];
214
214
  if ('server' in slice && slice.server?.specs !== undefined && Array.isArray(slice.server.specs)) {
215
215
  slice.server.specs[0].rules[0].id = '';
216
216
  }
@@ -227,7 +227,7 @@ describe('hasAllIds', () => {
227
227
  expect(hasAllIds(model)).toBe(false);
228
228
  });
229
229
 
230
- it('should return false when any slice in multiple flows with same sourceFile is missing ID', () => {
230
+ it('should return false when any moment in multiple flows with same sourceFile is missing ID', () => {
231
231
  const model = createMultipleFlowsModel(true, false);
232
232
  expect(hasAllIds(model)).toBe(false);
233
233
  });
@@ -235,7 +235,7 @@ describe('hasAllIds', () => {
235
235
  it('should return false if any spec is missing an ID', () => {
236
236
  const model = createModelWithFullIds();
237
237
  const modifiedModel = structuredClone(model);
238
- const slice = modifiedModel.narratives[0].slices[0];
238
+ const slice = modifiedModel.scenes[0].moments[0];
239
239
  if ('server' in slice && slice.server?.specs !== undefined && Array.isArray(slice.server.specs)) {
240
240
  slice.server.specs[0].id = '';
241
241
  }
@@ -245,7 +245,7 @@ describe('hasAllIds', () => {
245
245
  it('should return false if any example is missing an ID', () => {
246
246
  const model = createModelWithFullIds();
247
247
  const modifiedModel = structuredClone(model);
248
- const slice = modifiedModel.narratives[0].slices[0];
248
+ const slice = modifiedModel.scenes[0].moments[0];
249
249
  if ('server' in slice && slice.server?.specs !== undefined && Array.isArray(slice.server.specs)) {
250
250
  slice.server.specs[0].rules[0].examples[0].id = '';
251
251
  }
@@ -255,7 +255,7 @@ describe('hasAllIds', () => {
255
255
  it('should return false if any step is missing an ID', () => {
256
256
  const model = createModelWithFullIds();
257
257
  const modifiedModel = structuredClone(model);
258
- const slice = modifiedModel.narratives[0].slices[0];
258
+ const slice = modifiedModel.scenes[0].moments[0];
259
259
  if ('server' in slice && slice.server?.specs !== undefined && Array.isArray(slice.server.specs)) {
260
260
  slice.server.specs[0].rules[0].examples[0].steps[0].id = '';
261
261
  }
@@ -265,14 +265,14 @@ describe('hasAllIds', () => {
265
265
  it('should return false if step with error is missing an ID', () => {
266
266
  const model: Model = {
267
267
  variant: 'specs',
268
- narratives: [
268
+ scenes: [
269
269
  {
270
270
  name: 'Test Flow',
271
271
  id: 'FLOW-001',
272
- slices: [
272
+ moments: [
273
273
  {
274
274
  type: 'command',
275
- name: 'Test slice',
275
+ name: 'Test moment',
276
276
  id: 'SLICE-001',
277
277
  client: { specs: [] },
278
278
  server: {
@@ -322,13 +322,13 @@ describe('hasAllIds', () => {
322
322
  it('should return false if client it spec is missing an ID', () => {
323
323
  const model: Model = {
324
324
  variant: 'specs',
325
- narratives: [
325
+ scenes: [
326
326
  {
327
327
  name: 'Test Flow',
328
328
  id: 'FLOW-001',
329
- slices: [
329
+ moments: [
330
330
  {
331
- name: 'Test slice',
331
+ name: 'Test moment',
332
332
  id: 'SLICE-001',
333
333
  type: 'experience',
334
334
  client: {
@@ -348,13 +348,13 @@ describe('hasAllIds', () => {
348
348
  it('should return false if client describe spec is missing an ID', () => {
349
349
  const model: Model = {
350
350
  variant: 'specs',
351
- narratives: [
351
+ scenes: [
352
352
  {
353
353
  name: 'Test Flow',
354
354
  id: 'FLOW-001',
355
- slices: [
355
+ moments: [
356
356
  {
357
- name: 'Test slice',
357
+ name: 'Test moment',
358
358
  id: 'SLICE-001',
359
359
  type: 'experience',
360
360
  client: {
@@ -380,13 +380,13 @@ describe('hasAllIds', () => {
380
380
  it('should return false if nested client it spec is missing an ID', () => {
381
381
  const model: Model = {
382
382
  variant: 'specs',
383
- narratives: [
383
+ scenes: [
384
384
  {
385
385
  name: 'Test Flow',
386
386
  id: 'FLOW-001',
387
- slices: [
387
+ moments: [
388
388
  {
389
- name: 'Test slice',
389
+ name: 'Test moment',
390
390
  id: 'SLICE-001',
391
391
  type: 'experience',
392
392
  client: {
@@ -413,13 +413,13 @@ describe('hasAllIds', () => {
413
413
  it('should return true for client specs with all IDs', () => {
414
414
  const model: Model = {
415
415
  variant: 'specs',
416
- narratives: [
416
+ scenes: [
417
417
  {
418
418
  name: 'Test Flow',
419
419
  id: 'FLOW-001',
420
- slices: [
420
+ moments: [
421
421
  {
422
- name: 'Test slice',
422
+ name: 'Test moment',
423
423
  id: 'SLICE-001',
424
424
  type: 'experience',
425
425
  client: {
@@ -455,14 +455,14 @@ describe('hasAllIds', () => {
455
455
  it('should return false when data wrapper is missing an ID', () => {
456
456
  const model: Model = {
457
457
  variant: 'specs',
458
- narratives: [
458
+ scenes: [
459
459
  {
460
460
  name: 'Test Flow',
461
461
  id: 'FLOW-001',
462
- slices: [
462
+ moments: [
463
463
  {
464
464
  type: 'command',
465
- name: 'Test slice',
465
+ name: 'Test moment',
466
466
  id: 'SLICE-001',
467
467
  client: { specs: [] },
468
468
  server: {
@@ -492,14 +492,14 @@ describe('hasAllIds', () => {
492
492
  it('should return false when data sink item is missing an ID', () => {
493
493
  const model: Model = {
494
494
  variant: 'specs',
495
- narratives: [
495
+ scenes: [
496
496
  {
497
497
  name: 'Test Flow',
498
498
  id: 'FLOW-001',
499
- slices: [
499
+ moments: [
500
500
  {
501
501
  type: 'command',
502
- name: 'Test slice',
502
+ name: 'Test moment',
503
503
  id: 'SLICE-001',
504
504
  client: { specs: [] },
505
505
  server: {
@@ -529,14 +529,14 @@ describe('hasAllIds', () => {
529
529
  it('should return false when data source item is missing an ID', () => {
530
530
  const model: Model = {
531
531
  variant: 'specs',
532
- narratives: [
532
+ scenes: [
533
533
  {
534
534
  name: 'Test Flow',
535
535
  id: 'FLOW-001',
536
- slices: [
536
+ moments: [
537
537
  {
538
538
  type: 'query',
539
- name: 'Test slice',
539
+ name: 'Test moment',
540
540
  id: 'SLICE-001',
541
541
  client: { specs: [] },
542
542
  server: {
@@ -566,14 +566,14 @@ describe('hasAllIds', () => {
566
566
  it('should return false when nested _withState source is missing an ID', () => {
567
567
  const model: Model = {
568
568
  variant: 'specs',
569
- narratives: [
569
+ scenes: [
570
570
  {
571
571
  name: 'Test Flow',
572
572
  id: 'FLOW-001',
573
- slices: [
573
+ moments: [
574
574
  {
575
575
  type: 'command',
576
- name: 'Test slice',
576
+ name: 'Test moment',
577
577
  id: 'SLICE-001',
578
578
  client: { specs: [] },
579
579
  server: {
@@ -608,14 +608,14 @@ describe('hasAllIds', () => {
608
608
  it('should return true when all data items have IDs', () => {
609
609
  const model: Model = {
610
610
  variant: 'specs',
611
- narratives: [
611
+ scenes: [
612
612
  {
613
613
  name: 'Test Flow',
614
614
  id: 'FLOW-001',
615
- slices: [
615
+ moments: [
616
616
  {
617
617
  type: 'command',
618
- name: 'Test slice',
618
+ name: 'Test moment',
619
619
  id: 'SLICE-001',
620
620
  client: { specs: [] },
621
621
  server: {
@@ -651,14 +651,14 @@ describe('hasAllIds', () => {
651
651
  it('should return true when sink with _withState both have IDs', () => {
652
652
  const model: Model = {
653
653
  variant: 'specs',
654
- narratives: [
654
+ scenes: [
655
655
  {
656
656
  name: 'Test Flow',
657
657
  id: 'FLOW-001',
658
- slices: [
658
+ moments: [
659
659
  {
660
660
  type: 'command',
661
- name: 'Test slice',
661
+ name: 'Test moment',
662
662
  id: 'SLICE-001',
663
663
  client: { specs: [] },
664
664
  server: {
@@ -691,17 +691,17 @@ describe('hasAllIds', () => {
691
691
  expect(hasAllIds(model)).toBe(true);
692
692
  });
693
693
 
694
- it('should return true when slice has no data', () => {
694
+ it('should return true when moment has no data', () => {
695
695
  const model: Model = {
696
696
  variant: 'specs',
697
- narratives: [
697
+ scenes: [
698
698
  {
699
699
  name: 'Test Flow',
700
700
  id: 'FLOW-001',
701
- slices: [
701
+ moments: [
702
702
  {
703
703
  type: 'command',
704
- name: 'Test slice',
704
+ name: 'Test moment',
705
705
  id: 'SLICE-001',
706
706
  client: { specs: [] },
707
707
  server: {
@@ -1,4 +1,4 @@
1
- import type { ClientSpecNode, Example, Model, Rule, Slice, Spec, Step } from '../index';
1
+ import type { ClientSpecNode, Example, Model, Moment, Rule, Spec, Step } from '../index';
2
2
 
3
3
  function hasValidId(item: { id?: string }): boolean {
4
4
  return item.id !== undefined && item.id !== '';
@@ -20,7 +20,7 @@ function hasSpecIds(specs: Spec[]): boolean {
20
20
  return specs.every((spec) => hasValidId(spec) && hasRuleIds(spec.rules));
21
21
  }
22
22
 
23
- function hasServerSpecIds(slice: Slice): boolean {
23
+ function hasServerSpecIds(slice: Moment): boolean {
24
24
  if (!('server' in slice) || slice.server?.specs === undefined || !Array.isArray(slice.server.specs)) return true;
25
25
  return hasSpecIds(slice.server.specs);
26
26
  }
@@ -35,12 +35,12 @@ function hasClientSpecNodeIds(nodes: ClientSpecNode[]): boolean {
35
35
  });
36
36
  }
37
37
 
38
- function hasClientSpecIds(slice: Slice): boolean {
38
+ function hasClientSpecIds(slice: Moment): boolean {
39
39
  if (!('client' in slice) || slice.client?.specs === undefined || !Array.isArray(slice.client.specs)) return true;
40
40
  return hasClientSpecNodeIds(slice.client.specs);
41
41
  }
42
42
 
43
- function hasDataIds(slice: Slice): boolean {
43
+ function hasDataIds(slice: Moment): boolean {
44
44
  if (!('server' in slice) || !slice.server?.data) return true;
45
45
 
46
46
  // Validate the data wrapper has an ID
@@ -58,10 +58,10 @@ function hasDataIds(slice: Slice): boolean {
58
58
  });
59
59
  }
60
60
 
61
- function hasSliceIds(slice: Slice): boolean {
61
+ function hasMomentIds(slice: Moment): boolean {
62
62
  return hasValidId(slice) && hasServerSpecIds(slice) && hasClientSpecIds(slice) && hasDataIds(slice);
63
63
  }
64
64
 
65
65
  export function hasAllIds(specs: Model): boolean {
66
- return specs.narratives.every((narrative) => hasValidId(narrative) && narrative.slices.every(hasSliceIds));
66
+ return specs.scenes.every((scene) => hasValidId(scene) && scene.moments.every(hasMomentIds));
67
67
  }
package/src/index.ts CHANGED
@@ -28,38 +28,37 @@ export type { DataTargetItem, FieldSelector } from './data-narrative-builders';
28
28
 
29
29
  export { sink, source, target } from './data-narrative-builders';
30
30
  export type {
31
- FluentCommandSliceBuilder,
32
- FluentExperienceSliceBuilder,
33
- FluentQuerySliceBuilder,
34
- FluentReactionSliceBuilder,
31
+ FluentCommandMomentBuilder,
32
+ FluentExperienceMomentBuilder,
33
+ FluentQueryMomentBuilder,
34
+ FluentReactionMomentBuilder,
35
35
  } from './fluent-builder';
36
36
  export { command, decide, evolve, experience, query, react } from './fluent-builder';
37
- export { getNarratives } from './getNarratives';
37
+ export { getScenes } from './getScenes';
38
38
  export { addAutoIds, hasAllIds } from './id';
39
- export type { ExampleBuilder, GivenBuilder, SliceTypeValueInterface, ThenBuilder, WhenBuilder } from './narrative';
39
+ export type { ExampleBuilder, GivenBuilder, MomentTypeValueInterface, ThenBuilder, WhenBuilder } from './narrative';
40
40
  export {
41
41
  client,
42
42
  data,
43
43
  describe,
44
44
  example,
45
45
  it,
46
- narrative,
47
- narrative as flow,
46
+ MomentType,
48
47
  request,
49
48
  rule,
50
- SliceType,
49
+ scene,
51
50
  server,
52
51
  should,
53
52
  specs,
54
53
  thenError,
55
54
  } from './narrative';
56
55
  export type { ParsedArg, ParsedGraphQlOperation } from './parse-graphql-request';
57
- export { parseGraphQlRequest, parseSliceRequest } from './parse-graphql-request';
56
+ export { parseGraphQlRequest, parseMomentRequest } from './parse-graphql-request';
58
57
  export * from './schema';
59
58
  export { createNarrativeSpec, given as testGiven, when as testWhen } from './testing';
60
- export type { GeneratedNarratives } from './transformers/model-to-narrative';
59
+ export type { GeneratedScenes } from './transformers/model-to-narrative';
61
60
  export { modelToNarrative } from './transformers/model-to-narrative';
62
61
  export { detectQueryAction, extractQueryNameFromRequest } from './transformers/narrative-to-model/spec-processors';
63
62
  export { isInlineObject, isInlineObjectArray, parseInlineObjectFields } from './ts-type-helpers';
64
- export type { SliceRequestValidationError } from './validate-slice-requests';
65
- export { validateSliceRequests } from './validate-slice-requests';
63
+ export type { MomentRequestValidationError } from './validate-slice-requests';
64
+ export { validateMomentRequests } from './validate-slice-requests';
@@ -65,7 +65,7 @@ export async function executeAST(
65
65
 
66
66
  runGraph(entryFiles, final.graph);
67
67
 
68
- const flowsCount = registry.getAllNarratives().length;
68
+ const flowsCount = registry.getAllScenes().length;
69
69
  const integrationsCount = integrationRegistry.getAll().length;
70
70
 
71
71
  debug(
@@ -160,5 +160,5 @@ export function runGraph(entryFiles: string[], graph: Graph): void {
160
160
  }
161
161
 
162
162
  for (const entry of entryFiles) loadFromVfs(entry);
163
- debug('runGraph: flows=%d integrations=%d', registry.getAllNarratives().length, integrationRegistry.getAll().length);
163
+ debug('runGraph: flows=%d integrations=%d', registry.getAllScenes().length, integrationRegistry.getAll().length);
164
164
  }