@auto-engineer/narrative 0.11.11 → 0.11.13
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 +1 -1
- package/CHANGELOG.md +22 -0
- package/dist/src/commands/export-schema-helper.js +1 -2
- package/dist/src/commands/export-schema-helper.js.map +1 -1
- package/dist/src/getNarratives.cache.specs.d.ts +2 -0
- package/dist/src/getNarratives.cache.specs.d.ts.map +1 -0
- package/dist/src/{getFlows.cache.specs.js → getNarratives.cache.specs.js} +19 -19
- package/dist/src/getNarratives.cache.specs.js.map +1 -0
- package/dist/src/getNarratives.specs.d.ts +2 -0
- package/dist/src/getNarratives.specs.d.ts.map +1 -0
- package/dist/src/{getFlows.specs.js → getNarratives.specs.js} +28 -41
- package/dist/src/getNarratives.specs.js.map +1 -0
- package/dist/src/id/addAutoIds.specs.js +6 -6
- package/dist/src/id/addAutoIds.specs.js.map +1 -1
- package/dist/src/id/hasAllIds.specs.js +16 -16
- package/dist/src/id/hasAllIds.specs.js.map +1 -1
- package/dist/src/model-to-narrative.specs.d.ts +2 -0
- package/dist/src/model-to-narrative.specs.d.ts.map +1 -0
- package/dist/src/{model-to-flow.specs.js → model-to-narrative.specs.js} +212 -4
- package/dist/src/model-to-narrative.specs.js.map +1 -0
- package/dist/src/narrative-context.d.ts.map +1 -1
- package/dist/src/narrative-context.js +0 -1
- package/dist/src/narrative-context.js.map +1 -1
- package/dist/src/narrative.d.ts +1 -0
- package/dist/src/narrative.d.ts.map +1 -1
- package/dist/src/narrative.js +11 -0
- package/dist/src/narrative.js.map +1 -1
- package/dist/src/samples/items.narrative.d.ts +2 -0
- package/dist/src/samples/items.narrative.d.ts.map +1 -0
- package/dist/src/samples/{items.flow.js → items.narrative.js} +1 -1
- package/dist/src/samples/items.narrative.js.map +1 -0
- package/dist/src/samples/mixed-given-types.narrative.d.ts +2 -0
- package/dist/src/samples/mixed-given-types.narrative.d.ts.map +1 -0
- package/dist/src/samples/{mixed-given-types.flow.js → mixed-given-types.narrative.js} +1 -2
- package/dist/src/samples/mixed-given-types.narrative.js.map +1 -0
- package/dist/src/samples/{place-order.flow.d.ts → place-order.narrative.d.ts} +2 -2
- package/dist/src/samples/place-order.narrative.d.ts.map +1 -0
- package/dist/src/samples/{place-order.flow.js → place-order.narrative.js} +1 -1
- package/dist/src/samples/place-order.narrative.js.map +1 -0
- package/dist/src/samples/questionnaires.narrative.d.ts +2 -0
- package/dist/src/samples/questionnaires.narrative.d.ts.map +1 -0
- package/dist/src/samples/{questionnaires.flow.js → questionnaires.narrative.js} +1 -3
- package/dist/src/samples/questionnaires.narrative.js.map +1 -0
- package/dist/src/samples/seasonal-assistant.schema.json +1 -1
- package/dist/src/samples/test-with-ids.narrative.d.ts +2 -0
- package/dist/src/samples/test-with-ids.narrative.d.ts.map +1 -0
- package/dist/src/samples/{test-with-ids.flow.js → test-with-ids.narrative.js} +1 -1
- package/dist/src/samples/test-with-ids.narrative.js.map +1 -0
- package/dist/src/schema.d.ts +2980 -2980
- package/dist/src/schema.d.ts.map +1 -1
- package/dist/src/schema.js +1 -0
- package/dist/src/schema.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/gwt.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/gwt.js +32 -8
- package/dist/src/transformers/model-to-narrative/generators/gwt.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/debug.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/debug.js +1 -1
- package/dist/src/transformers/narrative-to-model/debug.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/commands/export-schema-helper.ts +1 -2
- package/src/{getFlows.cache.specs.ts → getNarratives.cache.specs.ts} +18 -18
- package/src/{getFlows.specs.ts → getNarratives.specs.ts} +29 -41
- package/src/id/addAutoIds.specs.ts +6 -6
- package/src/id/hasAllIds.specs.ts +16 -16
- package/src/{model-to-flow.specs.ts → model-to-narrative.specs.ts} +215 -3
- package/src/narrative-context.ts +0 -1
- package/src/narrative.ts +16 -1
- package/src/samples/{mixed-given-types.flow.ts → mixed-given-types.narrative.ts} +0 -1
- package/src/samples/{place-order.flow.ts → place-order.narrative.ts} +2 -2
- package/src/samples/{questionnaires.flow.ts → questionnaires.narrative.ts} +0 -2
- package/src/samples/seasonal-assistant.schema.json +1 -1
- package/src/schema.ts +1 -0
- package/src/transformers/model-to-narrative/generators/gwt.ts +44 -9
- package/src/transformers/narrative-to-model/debug.ts +1 -1
- package/.turbo/turbo-format.log +0 -4
- package/.turbo/turbo-lint.log +0 -4
- package/.turbo/turbo-test.log +0 -14
- package/.turbo/turbo-type-check.log +0 -4
- package/dist/src/data-flow-builders.d.ts +0 -71
- package/dist/src/data-flow-builders.d.ts.map +0 -1
- package/dist/src/data-flow-builders.js +0 -326
- package/dist/src/data-flow-builders.js.map +0 -1
- package/dist/src/flow-context.d.ts +0 -25
- package/dist/src/flow-context.d.ts.map +0 -1
- package/dist/src/flow-context.js +0 -579
- package/dist/src/flow-context.js.map +0 -1
- package/dist/src/flow-context.specs.d.ts +0 -2
- package/dist/src/flow-context.specs.d.ts.map +0 -1
- package/dist/src/flow-context.specs.js +0 -185
- package/dist/src/flow-context.specs.js.map +0 -1
- package/dist/src/flow-registry.d.ts +0 -12
- package/dist/src/flow-registry.d.ts.map +0 -1
- package/dist/src/flow-registry.js +0 -46
- package/dist/src/flow-registry.js.map +0 -1
- package/dist/src/flow.d.ts +0 -49
- package/dist/src/flow.d.ts.map +0 -1
- package/dist/src/flow.js +0 -146
- package/dist/src/flow.js.map +0 -1
- package/dist/src/getFlows.cache.specs.d.ts +0 -2
- package/dist/src/getFlows.cache.specs.d.ts.map +0 -1
- package/dist/src/getFlows.cache.specs.js.map +0 -1
- package/dist/src/getFlows.d.ts +0 -21
- package/dist/src/getFlows.d.ts.map +0 -1
- package/dist/src/getFlows.js +0 -119
- package/dist/src/getFlows.js.map +0 -1
- package/dist/src/getFlows.specs.d.ts +0 -2
- package/dist/src/getFlows.specs.d.ts.map +0 -1
- package/dist/src/getFlows.specs.js.map +0 -1
- package/dist/src/model-to-flow.specs.d.ts +0 -2
- package/dist/src/model-to-flow.specs.d.ts.map +0 -1
- package/dist/src/model-to-flow.specs.js.map +0 -1
- package/dist/src/samples/items.flow.d.ts +0 -2
- package/dist/src/samples/items.flow.d.ts.map +0 -1
- package/dist/src/samples/items.flow.js.map +0 -1
- package/dist/src/samples/mixed-given-types.flow.d.ts +0 -2
- package/dist/src/samples/mixed-given-types.flow.d.ts.map +0 -1
- package/dist/src/samples/mixed-given-types.flow.js.map +0 -1
- package/dist/src/samples/place-order.flow.d.ts.map +0 -1
- package/dist/src/samples/place-order.flow.js.map +0 -1
- package/dist/src/samples/questionnaires.flow.d.ts +0 -2
- package/dist/src/samples/questionnaires.flow.d.ts.map +0 -1
- package/dist/src/samples/questionnaires.flow.js.map +0 -1
- package/dist/src/samples/test-with-ids.flow.d.ts +0 -2
- package/dist/src/samples/test-with-ids.flow.d.ts.map +0 -1
- package/dist/src/samples/test-with-ids.flow.js.map +0 -1
- package/dist/src/transformers/flow-to-model/assemble.d.ts +0 -3
- package/dist/src/transformers/flow-to-model/assemble.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/assemble.js +0 -9
- package/dist/src/transformers/flow-to-model/assemble.js.map +0 -1
- package/dist/src/transformers/flow-to-model/debug.d.ts +0 -3
- package/dist/src/transformers/flow-to-model/debug.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/debug.js +0 -6
- package/dist/src/transformers/flow-to-model/debug.js.map +0 -1
- package/dist/src/transformers/flow-to-model/example-shapes.d.ts +0 -6
- package/dist/src/transformers/flow-to-model/example-shapes.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/example-shapes.js +0 -60
- package/dist/src/transformers/flow-to-model/example-shapes.js.map +0 -1
- package/dist/src/transformers/flow-to-model/guards.d.ts +0 -15
- package/dist/src/transformers/flow-to-model/guards.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/guards.js +0 -18
- package/dist/src/transformers/flow-to-model/guards.js.map +0 -1
- package/dist/src/transformers/flow-to-model/index.d.ts +0 -4
- package/dist/src/transformers/flow-to-model/index.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/index.js +0 -193
- package/dist/src/transformers/flow-to-model/index.js.map +0 -1
- package/dist/src/transformers/flow-to-model/inlining.d.ts +0 -4
- package/dist/src/transformers/flow-to-model/inlining.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/inlining.js +0 -95
- package/dist/src/transformers/flow-to-model/inlining.js.map +0 -1
- package/dist/src/transformers/flow-to-model/integrations.d.ts +0 -36
- package/dist/src/transformers/flow-to-model/integrations.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/integrations.js +0 -147
- package/dist/src/transformers/flow-to-model/integrations.js.map +0 -1
- package/dist/src/transformers/flow-to-model/messages.d.ts +0 -5
- package/dist/src/transformers/flow-to-model/messages.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/messages.js +0 -88
- package/dist/src/transformers/flow-to-model/messages.js.map +0 -1
- package/dist/src/transformers/flow-to-model/normalize.d.ts +0 -3
- package/dist/src/transformers/flow-to-model/normalize.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/normalize.js +0 -23
- package/dist/src/transformers/flow-to-model/normalize.js.map +0 -1
- package/dist/src/transformers/flow-to-model/spec-processors.d.ts +0 -34
- package/dist/src/transformers/flow-to-model/spec-processors.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/spec-processors.js +0 -395
- package/dist/src/transformers/flow-to-model/spec-processors.js.map +0 -1
- package/dist/src/transformers/flow-to-model/strings.d.ts +0 -2
- package/dist/src/transformers/flow-to-model/strings.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/strings.js +0 -11
- package/dist/src/transformers/flow-to-model/strings.js.map +0 -1
- package/dist/src/transformers/flow-to-model/type-inference.d.ts +0 -3
- package/dist/src/transformers/flow-to-model/type-inference.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/type-inference.js +0 -92
- package/dist/src/transformers/flow-to-model/type-inference.js.map +0 -1
- package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts +0 -2
- package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/type-inference.specs.js +0 -167
- package/dist/src/transformers/flow-to-model/type-inference.specs.js.map +0 -1
- package/dist/src/transformers/flow-to-model/zod-adapter.d.ts +0 -6
- package/dist/src/transformers/flow-to-model/zod-adapter.d.ts.map +0 -1
- package/dist/src/transformers/flow-to-model/zod-adapter.js +0 -101
- package/dist/src/transformers/flow-to-model/zod-adapter.js.map +0 -1
- package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts +0 -2
- package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/analysis/extract-flow.js +0 -22
- package/dist/src/transformers/model-to-flow/analysis/extract-flow.js.map +0 -1
- package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts +0 -18
- package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js +0 -78
- package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js.map +0 -1
- package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts +0 -7
- package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/analysis/type-decls.js +0 -74
- package/dist/src/transformers/model-to-flow/analysis/type-decls.js.map +0 -1
- package/dist/src/transformers/model-to-flow/analysis/usage.d.ts +0 -9
- package/dist/src/transformers/model-to-flow/analysis/usage.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/analysis/usage.js +0 -90
- package/dist/src/transformers/model-to-flow/analysis/usage.js.map +0 -1
- package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts +0 -18
- package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/ast/emit-helpers.js +0 -159
- package/dist/src/transformers/model-to-flow/ast/emit-helpers.js.map +0 -1
- package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts +0 -2
- package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/formatting/prettier.js +0 -26
- package/dist/src/transformers/model-to-flow/formatting/prettier.js.map +0 -1
- package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts +0 -6
- package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/formatting/sort-types.js +0 -17
- package/dist/src/transformers/model-to-flow/formatting/sort-types.js.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/compose.d.ts +0 -6
- package/dist/src/transformers/model-to-flow/generators/compose.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/compose.js +0 -79
- package/dist/src/transformers/model-to-flow/generators/compose.js.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/flow.d.ts +0 -15
- package/dist/src/transformers/model-to-flow/generators/flow.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/flow.js +0 -316
- package/dist/src/transformers/model-to-flow/generators/flow.js.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/gwt.d.ts +0 -57
- package/dist/src/transformers/model-to-flow/generators/gwt.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/gwt.js +0 -186
- package/dist/src/transformers/model-to-flow/generators/gwt.js.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/imports.d.ts +0 -16
- package/dist/src/transformers/model-to-flow/generators/imports.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/imports.js +0 -57
- package/dist/src/transformers/model-to-flow/generators/imports.js.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/types.d.ts +0 -13
- package/dist/src/transformers/model-to-flow/generators/types.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/generators/types.js +0 -22
- package/dist/src/transformers/model-to-flow/generators/types.js.map +0 -1
- package/dist/src/transformers/model-to-flow/index.d.ts +0 -13
- package/dist/src/transformers/model-to-flow/index.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/index.js +0 -25
- package/dist/src/transformers/model-to-flow/index.js.map +0 -1
- package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts +0 -12
- package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/utils/integration-extractor.js +0 -64
- package/dist/src/transformers/model-to-flow/utils/integration-extractor.js.map +0 -1
- package/dist/src/transformers/model-to-flow/utils/strings.d.ts +0 -9
- package/dist/src/transformers/model-to-flow/utils/strings.d.ts.map +0 -1
- package/dist/src/transformers/model-to-flow/utils/strings.js +0 -11
- package/dist/src/transformers/model-to-flow/utils/strings.js.map +0 -1
- /package/src/samples/{items.flow.ts → items.narrative.ts} +0 -0
- /package/src/samples/{test-with-ids.flow.ts → test-with-ids.narrative.ts} +0 -0
|
@@ -1739,7 +1739,7 @@ narrative('Date Handling Flow', 'DATE-FLOW', () => {
|
|
|
1739
1739
|
narratives: [
|
|
1740
1740
|
{
|
|
1741
1741
|
name: 'Home Screen',
|
|
1742
|
-
sourceFile: '/path/to/homepage.
|
|
1742
|
+
sourceFile: '/path/to/homepage.narrative.ts',
|
|
1743
1743
|
slices: [
|
|
1744
1744
|
{
|
|
1745
1745
|
name: 'Active Surveys Summary',
|
|
@@ -1756,7 +1756,7 @@ narrative('Date Handling Flow', 'DATE-FLOW', () => {
|
|
|
1756
1756
|
},
|
|
1757
1757
|
{
|
|
1758
1758
|
name: 'Create Survey',
|
|
1759
|
-
sourceFile: '/path/to/homepage.
|
|
1759
|
+
sourceFile: '/path/to/homepage.narrative.ts',
|
|
1760
1760
|
slices: [
|
|
1761
1761
|
{
|
|
1762
1762
|
name: 'Create Survey Form',
|
|
@@ -1773,7 +1773,7 @@ narrative('Date Handling Flow', 'DATE-FLOW', () => {
|
|
|
1773
1773
|
},
|
|
1774
1774
|
{
|
|
1775
1775
|
name: 'Response Analytics',
|
|
1776
|
-
sourceFile: '/path/to/homepage.
|
|
1776
|
+
sourceFile: '/path/to/homepage.narrative.ts',
|
|
1777
1777
|
slices: [
|
|
1778
1778
|
{
|
|
1779
1779
|
name: 'Response Rate Charts',
|
|
@@ -1819,4 +1819,216 @@ narrative('Response Analytics', () => {
|
|
|
1819
1819
|
});
|
|
1820
1820
|
`);
|
|
1821
1821
|
});
|
|
1822
|
+
|
|
1823
|
+
it('should omit .when({}) when given has multiple items and when is empty', async () => {
|
|
1824
|
+
const modelWithEmptyWhen: Model = {
|
|
1825
|
+
variant: 'specs',
|
|
1826
|
+
narratives: [
|
|
1827
|
+
{
|
|
1828
|
+
name: 'Todo List Summary',
|
|
1829
|
+
id: 'TODO-001',
|
|
1830
|
+
slices: [
|
|
1831
|
+
{
|
|
1832
|
+
name: 'views completion summary',
|
|
1833
|
+
id: 'SUMMARY-001',
|
|
1834
|
+
type: 'query',
|
|
1835
|
+
client: {
|
|
1836
|
+
description: 'Summary view client',
|
|
1837
|
+
},
|
|
1838
|
+
server: {
|
|
1839
|
+
description: 'Summary calculation server',
|
|
1840
|
+
specs: {
|
|
1841
|
+
name: 'Summary Statistics',
|
|
1842
|
+
rules: [
|
|
1843
|
+
{
|
|
1844
|
+
id: 'RULE-SUMMARY',
|
|
1845
|
+
description: 'summary shows overall todo list statistics',
|
|
1846
|
+
examples: [
|
|
1847
|
+
{
|
|
1848
|
+
description: 'calculates summary from multiple todos',
|
|
1849
|
+
given: [
|
|
1850
|
+
{
|
|
1851
|
+
eventRef: 'TodoAdded',
|
|
1852
|
+
exampleData: {
|
|
1853
|
+
todoId: 'todo-001',
|
|
1854
|
+
description: 'Buy groceries',
|
|
1855
|
+
status: 'pending',
|
|
1856
|
+
addedAt: new Date('2030-01-01T09:00:00.000Z'),
|
|
1857
|
+
},
|
|
1858
|
+
},
|
|
1859
|
+
{
|
|
1860
|
+
eventRef: 'TodoAdded',
|
|
1861
|
+
exampleData: {
|
|
1862
|
+
todoId: 'todo-002',
|
|
1863
|
+
description: 'Write report',
|
|
1864
|
+
status: 'pending',
|
|
1865
|
+
addedAt: new Date('2030-01-01T09:10:00.000Z'),
|
|
1866
|
+
},
|
|
1867
|
+
},
|
|
1868
|
+
{
|
|
1869
|
+
eventRef: 'TodoMarkedInProgress',
|
|
1870
|
+
exampleData: {
|
|
1871
|
+
todoId: 'todo-001',
|
|
1872
|
+
markedAt: new Date('2030-01-01T10:00:00.000Z'),
|
|
1873
|
+
},
|
|
1874
|
+
},
|
|
1875
|
+
{
|
|
1876
|
+
eventRef: 'TodoMarkedComplete',
|
|
1877
|
+
exampleData: {
|
|
1878
|
+
todoId: 'todo-002',
|
|
1879
|
+
completedAt: new Date('2030-01-01T11:00:00.000Z'),
|
|
1880
|
+
},
|
|
1881
|
+
},
|
|
1882
|
+
],
|
|
1883
|
+
when: {
|
|
1884
|
+
eventRef: '',
|
|
1885
|
+
exampleData: {},
|
|
1886
|
+
},
|
|
1887
|
+
then: [
|
|
1888
|
+
{
|
|
1889
|
+
stateRef: 'TodoListSummary',
|
|
1890
|
+
exampleData: {
|
|
1891
|
+
summaryId: 'main-summary',
|
|
1892
|
+
totalTodos: 2,
|
|
1893
|
+
pendingCount: 0,
|
|
1894
|
+
inProgressCount: 1,
|
|
1895
|
+
completedCount: 1,
|
|
1896
|
+
completionPercentage: 50,
|
|
1897
|
+
},
|
|
1898
|
+
},
|
|
1899
|
+
],
|
|
1900
|
+
},
|
|
1901
|
+
],
|
|
1902
|
+
},
|
|
1903
|
+
],
|
|
1904
|
+
},
|
|
1905
|
+
},
|
|
1906
|
+
},
|
|
1907
|
+
],
|
|
1908
|
+
},
|
|
1909
|
+
],
|
|
1910
|
+
messages: [
|
|
1911
|
+
{
|
|
1912
|
+
type: 'event',
|
|
1913
|
+
name: 'TodoAdded',
|
|
1914
|
+
fields: [
|
|
1915
|
+
{ name: 'todoId', type: 'string', required: true },
|
|
1916
|
+
{ name: 'description', type: 'string', required: true },
|
|
1917
|
+
{ name: 'status', type: 'string', required: true },
|
|
1918
|
+
{ name: 'addedAt', type: 'Date', required: true },
|
|
1919
|
+
],
|
|
1920
|
+
source: 'internal',
|
|
1921
|
+
metadata: { version: 1 },
|
|
1922
|
+
},
|
|
1923
|
+
{
|
|
1924
|
+
type: 'event',
|
|
1925
|
+
name: 'TodoMarkedInProgress',
|
|
1926
|
+
fields: [
|
|
1927
|
+
{ name: 'todoId', type: 'string', required: true },
|
|
1928
|
+
{ name: 'markedAt', type: 'Date', required: true },
|
|
1929
|
+
],
|
|
1930
|
+
source: 'internal',
|
|
1931
|
+
metadata: { version: 1 },
|
|
1932
|
+
},
|
|
1933
|
+
{
|
|
1934
|
+
type: 'event',
|
|
1935
|
+
name: 'TodoMarkedComplete',
|
|
1936
|
+
fields: [
|
|
1937
|
+
{ name: 'todoId', type: 'string', required: true },
|
|
1938
|
+
{ name: 'completedAt', type: 'Date', required: true },
|
|
1939
|
+
],
|
|
1940
|
+
source: 'internal',
|
|
1941
|
+
metadata: { version: 1 },
|
|
1942
|
+
},
|
|
1943
|
+
{
|
|
1944
|
+
type: 'state',
|
|
1945
|
+
name: 'TodoListSummary',
|
|
1946
|
+
fields: [
|
|
1947
|
+
{ name: 'summaryId', type: 'string', required: true },
|
|
1948
|
+
{ name: 'totalTodos', type: 'number', required: true },
|
|
1949
|
+
{ name: 'pendingCount', type: 'number', required: true },
|
|
1950
|
+
{ name: 'inProgressCount', type: 'number', required: true },
|
|
1951
|
+
{ name: 'completedCount', type: 'number', required: true },
|
|
1952
|
+
{ name: 'completionPercentage', type: 'number', required: true },
|
|
1953
|
+
],
|
|
1954
|
+
metadata: { version: 1 },
|
|
1955
|
+
},
|
|
1956
|
+
],
|
|
1957
|
+
integrations: [],
|
|
1958
|
+
};
|
|
1959
|
+
|
|
1960
|
+
const code = await modelToNarrative(modelWithEmptyWhen);
|
|
1961
|
+
|
|
1962
|
+
expect(code).toEqual(`import { example, narrative, query, rule, specs } from '@auto-engineer/narrative';
|
|
1963
|
+
import type { Event, State } from '@auto-engineer/narrative';
|
|
1964
|
+
type TodoAdded = Event<
|
|
1965
|
+
'TodoAdded',
|
|
1966
|
+
{
|
|
1967
|
+
todoId: string;
|
|
1968
|
+
description: string;
|
|
1969
|
+
status: string;
|
|
1970
|
+
addedAt: Date;
|
|
1971
|
+
}
|
|
1972
|
+
>;
|
|
1973
|
+
type TodoMarkedInProgress = Event<
|
|
1974
|
+
'TodoMarkedInProgress',
|
|
1975
|
+
{
|
|
1976
|
+
todoId: string;
|
|
1977
|
+
markedAt: Date;
|
|
1978
|
+
}
|
|
1979
|
+
>;
|
|
1980
|
+
type TodoMarkedComplete = Event<
|
|
1981
|
+
'TodoMarkedComplete',
|
|
1982
|
+
{
|
|
1983
|
+
todoId: string;
|
|
1984
|
+
completedAt: Date;
|
|
1985
|
+
}
|
|
1986
|
+
>;
|
|
1987
|
+
type TodoListSummary = State<
|
|
1988
|
+
'TodoListSummary',
|
|
1989
|
+
{
|
|
1990
|
+
summaryId: string;
|
|
1991
|
+
totalTodos: number;
|
|
1992
|
+
pendingCount: number;
|
|
1993
|
+
inProgressCount: number;
|
|
1994
|
+
completedCount: number;
|
|
1995
|
+
completionPercentage: number;
|
|
1996
|
+
}
|
|
1997
|
+
>;
|
|
1998
|
+
narrative('Todo List Summary', 'TODO-001', () => {
|
|
1999
|
+
query('views completion summary', 'SUMMARY-001').server(() => {
|
|
2000
|
+
specs('Summary Statistics', () => {
|
|
2001
|
+
rule('summary shows overall todo list statistics', 'RULE-SUMMARY', () => {
|
|
2002
|
+
example('calculates summary from multiple todos')
|
|
2003
|
+
.given<TodoAdded>({
|
|
2004
|
+
todoId: 'todo-001',
|
|
2005
|
+
description: 'Buy groceries',
|
|
2006
|
+
status: 'pending',
|
|
2007
|
+
addedAt: new Date('2030-01-01T09:00:00.000Z'),
|
|
2008
|
+
})
|
|
2009
|
+
.and<TodoAdded>({
|
|
2010
|
+
todoId: 'todo-002',
|
|
2011
|
+
description: 'Write report',
|
|
2012
|
+
status: 'pending',
|
|
2013
|
+
addedAt: new Date('2030-01-01T09:10:00.000Z'),
|
|
2014
|
+
})
|
|
2015
|
+
.and<TodoMarkedInProgress>({ todoId: 'todo-001', markedAt: new Date('2030-01-01T10:00:00.000Z') })
|
|
2016
|
+
.and<TodoMarkedComplete>({ todoId: 'todo-002', completedAt: new Date('2030-01-01T11:00:00.000Z') })
|
|
2017
|
+
.then<TodoListSummary>({
|
|
2018
|
+
summaryId: 'main-summary',
|
|
2019
|
+
totalTodos: 2,
|
|
2020
|
+
pendingCount: 0,
|
|
2021
|
+
inProgressCount: 1,
|
|
2022
|
+
completedCount: 1,
|
|
2023
|
+
completionPercentage: 50,
|
|
2024
|
+
});
|
|
2025
|
+
});
|
|
2026
|
+
});
|
|
2027
|
+
});
|
|
2028
|
+
});
|
|
2029
|
+
`);
|
|
2030
|
+
|
|
2031
|
+
expect(code).not.toContain('.when({})');
|
|
2032
|
+
expect(code).not.toContain('.when<');
|
|
2033
|
+
});
|
|
1822
2034
|
});
|
package/src/narrative-context.ts
CHANGED
|
@@ -321,7 +321,6 @@ export function recordExample(description: string): void {
|
|
|
321
321
|
const rule = objectRules[context.currentRuleIndex];
|
|
322
322
|
rule.examples.push({
|
|
323
323
|
description,
|
|
324
|
-
when: { commandRef: '', exampleData: {} }, // Default, will be updated
|
|
325
324
|
then: [],
|
|
326
325
|
});
|
|
327
326
|
context.currentExampleIndex = rule.examples.length - 1;
|
package/src/narrative.ts
CHANGED
|
@@ -93,7 +93,7 @@ export function rule(description: string, idOrFn: string | (() => void), fn?: ()
|
|
|
93
93
|
callback();
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
export const example = (description: string) => {
|
|
96
|
+
export const example = (description: string): TypedExampleBuilder => {
|
|
97
97
|
recordExample(description);
|
|
98
98
|
return createExampleBuilder();
|
|
99
99
|
};
|
|
@@ -122,6 +122,7 @@ interface TypedExampleBuilder {
|
|
|
122
122
|
interface TypedGivenBuilder<G> {
|
|
123
123
|
and<U>(data: ExtractData<U> | ExtractData<U>[], context?: ContextFor<U>): TypedGivenBuilder<G | U>;
|
|
124
124
|
when<W>(data: ExtractData<W> | ExtractData<W>[], context?: ContextFor<W>): TypedGivenWhenBuilder<G, W>;
|
|
125
|
+
then<T>(data: ExtractData<T> | ExtractData<T>[], context?: ContextFor<T>): TypedGivenThenBuilder<G, never, T>;
|
|
125
126
|
}
|
|
126
127
|
|
|
127
128
|
interface TypedWhenBuilder<W> {
|
|
@@ -180,6 +181,20 @@ function createGivenBuilder<G>(): TypedGivenBuilder<G> {
|
|
|
180
181
|
},
|
|
181
182
|
};
|
|
182
183
|
},
|
|
184
|
+
then<T>(data: ExtractData<T> | ExtractData<T>[], context?: ContextFor<T>): TypedGivenThenBuilder<G, never, T> {
|
|
185
|
+
const thenItems = Array.isArray(data) ? data : [data];
|
|
186
|
+
recordThenData(thenItems, normalizeContext(context as Partial<Record<string, string>>));
|
|
187
|
+
return {
|
|
188
|
+
and<A>(
|
|
189
|
+
data: ExtractData<A> | ExtractData<A>[],
|
|
190
|
+
context?: ContextFor<A>,
|
|
191
|
+
): TypedGivenThenBuilder<G, never, T | A> {
|
|
192
|
+
const andItems = Array.isArray(data) ? data : [data];
|
|
193
|
+
recordAndThenData(andItems, normalizeContext(context as Partial<Record<string, string>>));
|
|
194
|
+
return createThenBuilder<never, T | A>() as TypedGivenThenBuilder<G, never, T | A>;
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
},
|
|
183
198
|
};
|
|
184
199
|
}
|
|
185
200
|
|
|
@@ -11,7 +11,7 @@ export interface OrderPlaced {
|
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
export interface
|
|
14
|
+
export interface PlaceOrderNarrative {
|
|
15
15
|
type: 'PlaceOrder';
|
|
16
16
|
data: {
|
|
17
17
|
productId: string;
|
|
@@ -41,7 +41,7 @@ flow('Place order', () => {
|
|
|
41
41
|
specs('User submits a new order', () => {
|
|
42
42
|
rule('Valid orders should be processed successfully', () => {
|
|
43
43
|
example('User places order for available product')
|
|
44
|
-
.when<
|
|
44
|
+
.when<PlaceOrderNarrative>({
|
|
45
45
|
productId: 'product_789',
|
|
46
46
|
quantity: 3,
|
|
47
47
|
})
|
|
@@ -135,7 +135,6 @@ flow('Questionnaires', 'AUTO-Q9m2Kp4Lx', () => {
|
|
|
135
135
|
link: 'https://app.example.com/q/q-001?participant=participant-abc',
|
|
136
136
|
sentAt: new Date('2030-01-01T09:00:00Z'),
|
|
137
137
|
})
|
|
138
|
-
.when({})
|
|
139
138
|
.then<QuestionnaireProgress>({
|
|
140
139
|
questionnaireId: 'q-001',
|
|
141
140
|
participantId: 'participant-abc',
|
|
@@ -259,7 +258,6 @@ flow('Questionnaires', 'AUTO-Q9m2Kp4Lx', () => {
|
|
|
259
258
|
answer: 'No',
|
|
260
259
|
savedAt: new Date('2030-01-01T09:05:00Z'),
|
|
261
260
|
})
|
|
262
|
-
.when({}) // FIX ME
|
|
263
261
|
.then<QuestionnaireProgress>({
|
|
264
262
|
questionnaireId: 'q-001',
|
|
265
263
|
participantId: 'participant-abc',
|
|
@@ -452,7 +452,7 @@
|
|
|
452
452
|
}
|
|
453
453
|
}
|
|
454
454
|
],
|
|
455
|
-
"sourceFile": "/Users/ramihatoum/WebstormProjects/xolvio/auto-engineer/examples/shopping-app/flows/shopping-assistant.
|
|
455
|
+
"sourceFile": "/Users/ramihatoum/WebstormProjects/xolvio/auto-engineer/examples/shopping-app/flows/shopping-assistant.narrative.ts"
|
|
456
456
|
}
|
|
457
457
|
],
|
|
458
458
|
"messages": [
|
package/src/schema.ts
CHANGED
|
@@ -181,6 +181,7 @@ const ExampleSchema = z
|
|
|
181
181
|
.describe('Given conditions'),
|
|
182
182
|
when: z
|
|
183
183
|
.union([CommandExampleSchema, EventExampleSchema, z.array(CommandExampleSchema), z.array(EventExampleSchema)])
|
|
184
|
+
.optional()
|
|
184
185
|
.describe('When action or events occur'),
|
|
185
186
|
then: z
|
|
186
187
|
.array(z.union([EventExampleSchema, StateExampleSchema, CommandExampleSchema, ErrorExampleSchema]))
|
|
@@ -164,26 +164,61 @@ function addEventWhenToChain(
|
|
|
164
164
|
);
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
function
|
|
167
|
+
function isEmptyEventWhen(when: { eventRef: string; exampleData: Record<string, unknown> }): boolean {
|
|
168
|
+
return (!when.eventRef || when.eventRef === '') && Object.keys(when.exampleData).length === 0;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function isEmptyCommandWhen(when: { commandRef: string; exampleData: Record<string, unknown> }): boolean {
|
|
172
|
+
return (!when.commandRef || when.commandRef === '') && Object.keys(when.exampleData).length === 0;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function isEmptyWhen(whenData: GWTBlock['when']): boolean {
|
|
176
|
+
if (!whenData) return true;
|
|
177
|
+
if (Array.isArray(whenData) && whenData.length === 0) return true;
|
|
178
|
+
if (typeof whenData === 'object' && 'eventRef' in whenData) {
|
|
179
|
+
return isEmptyEventWhen(whenData as { eventRef: string; exampleData: Record<string, unknown> });
|
|
180
|
+
}
|
|
181
|
+
if (typeof whenData === 'object' && 'commandRef' in whenData) {
|
|
182
|
+
return isEmptyCommandWhen(whenData as { commandRef: string; exampleData: Record<string, unknown> });
|
|
183
|
+
}
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function processWhenForSliceKind(
|
|
168
188
|
ts: typeof import('typescript'),
|
|
169
189
|
f: tsNS.NodeFactory,
|
|
170
190
|
exampleChain: tsNS.Expression,
|
|
171
|
-
|
|
191
|
+
when: GWTBlock['when'],
|
|
172
192
|
sliceKind: 'command' | 'react' | 'query' | 'experience',
|
|
173
193
|
messages?: Array<{ type: string; name: string; fields: Array<{ name: string; type: string; required: boolean }> }>,
|
|
174
194
|
): tsNS.Expression {
|
|
175
|
-
if (sliceKind === 'command' && isWhenCommand(
|
|
176
|
-
return addCommandWhenToChain(ts, f, exampleChain,
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
return addEventWhenToChain(ts, f, exampleChain,
|
|
180
|
-
}
|
|
181
|
-
|
|
195
|
+
if (sliceKind === 'command' && isWhenCommand(when)) {
|
|
196
|
+
return addCommandWhenToChain(ts, f, exampleChain, when, messages);
|
|
197
|
+
}
|
|
198
|
+
if ((sliceKind === 'react' || sliceKind === 'query') && isWhenEvents(when)) {
|
|
199
|
+
return addEventWhenToChain(ts, f, exampleChain, when[0], messages);
|
|
200
|
+
}
|
|
201
|
+
if (sliceKind === 'query' && when && !Array.isArray(when) && 'eventRef' in when) {
|
|
202
|
+
const whenEvent = when as { eventRef: string; exampleData: Record<string, unknown> };
|
|
182
203
|
return addEventWhenToChain(ts, f, exampleChain, whenEvent, messages);
|
|
183
204
|
}
|
|
184
205
|
return exampleChain;
|
|
185
206
|
}
|
|
186
207
|
|
|
208
|
+
function addWhenToChain(
|
|
209
|
+
ts: typeof import('typescript'),
|
|
210
|
+
f: tsNS.NodeFactory,
|
|
211
|
+
exampleChain: tsNS.Expression,
|
|
212
|
+
g: GWTBlock,
|
|
213
|
+
sliceKind: 'command' | 'react' | 'query' | 'experience',
|
|
214
|
+
messages?: Array<{ type: string; name: string; fields: Array<{ name: string; type: string; required: boolean }> }>,
|
|
215
|
+
): tsNS.Expression {
|
|
216
|
+
if (isEmptyWhen(g.when)) {
|
|
217
|
+
return exampleChain;
|
|
218
|
+
}
|
|
219
|
+
return processWhenForSliceKind(ts, f, exampleChain, g.when, sliceKind, messages);
|
|
220
|
+
}
|
|
221
|
+
|
|
187
222
|
function getThenTypeRef(firstThenItem: GWTBlock['then'][0]): string {
|
|
188
223
|
if ('eventRef' in firstThenItem) {
|
|
189
224
|
return (firstThenItem as { eventRef: string }).eventRef;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import createDebug from 'debug';
|
|
2
2
|
|
|
3
|
-
export const debugIntegrations = createDebug('auto:flow:
|
|
3
|
+
export const debugIntegrations = createDebug('auto:flow:getNarratives:integrations');
|
|
4
4
|
if (typeof debugIntegrations === 'object' && debugIntegrations !== null && 'color' in debugIntegrations) {
|
|
5
5
|
(debugIntegrations as { color: string }).color = '6';
|
|
6
6
|
}
|
package/.turbo/turbo-format.log
DELETED
package/.turbo/turbo-lint.log
DELETED
package/.turbo/turbo-test.log
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
> @auto-engineer/narrative@0.11.10 test /Users/sam/WebstormProjects/top/auto-engineer-2/packages/narrative
|
|
3
|
-
> vitest run --reporter=dot
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
RUN v3.2.4 /Users/sam/WebstormProjects/top/auto-engineer-2/packages/narrative
|
|
7
|
-
|
|
8
|
-
·································································
|
|
9
|
-
|
|
10
|
-
Test Files 8 passed (8)
|
|
11
|
-
Tests 65 passed (65)
|
|
12
|
-
Start at 15:23:05
|
|
13
|
-
Duration 2.32s (transform 1.53s, setup 0ms, collect 5.01s, tests 2.45s, environment 1ms, prepare 1.30s)
|
|
14
|
-
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import type { DataSinkItem, DataSourceItem, MessageTarget, Integration } from './types';
|
|
2
|
-
export interface ChainableSinkMethods {
|
|
3
|
-
additionalInstructions(instructions: string): ChainableSink;
|
|
4
|
-
withState(source: DataSourceItem | ChainableSource): ChainableSink;
|
|
5
|
-
}
|
|
6
|
-
export interface ChainableSourceMethods {
|
|
7
|
-
additionalInstructions(instructions: string): ChainableSource;
|
|
8
|
-
}
|
|
9
|
-
export type ChainableSink = DataSinkItem & ChainableSinkMethods;
|
|
10
|
-
export type ChainableSource = DataSourceItem & ChainableSourceMethods;
|
|
11
|
-
export interface FieldSelector {
|
|
12
|
-
[key: string]: boolean | FieldSelector;
|
|
13
|
-
}
|
|
14
|
-
declare abstract class MessageTargetBuilder<TResult> {
|
|
15
|
-
protected target: Partial<MessageTarget>;
|
|
16
|
-
protected instructions?: string;
|
|
17
|
-
fields(selector: FieldSelector): this;
|
|
18
|
-
additionalInstructions(instructions: string): this;
|
|
19
|
-
abstract build(): TResult;
|
|
20
|
-
}
|
|
21
|
-
export declare class EventSinkBuilder extends MessageTargetBuilder<DataSinkItem> {
|
|
22
|
-
constructor(name: string);
|
|
23
|
-
toStream(pattern: string): ChainableSink;
|
|
24
|
-
toIntegration(...systems: Integration[]): ChainableSink;
|
|
25
|
-
toDatabase(collection: string): ChainableSink;
|
|
26
|
-
toTopic(name: string): ChainableSink;
|
|
27
|
-
build(): DataSinkItem;
|
|
28
|
-
}
|
|
29
|
-
export declare class CommandSinkBuilder extends MessageTargetBuilder<DataSinkItem> {
|
|
30
|
-
private stateSource?;
|
|
31
|
-
constructor(name: string);
|
|
32
|
-
withState(source: DataSourceItem | ChainableSource): this;
|
|
33
|
-
toIntegration(system: Integration | string, messageName: string, messageType: 'command' | 'query' | 'reaction'): ChainableSink;
|
|
34
|
-
hints(hint: string): ChainableSink;
|
|
35
|
-
toDatabase(collection: string): ChainableSink;
|
|
36
|
-
toTopic(name: string): ChainableSink;
|
|
37
|
-
build(): DataSinkItem;
|
|
38
|
-
}
|
|
39
|
-
export declare class StateSinkBuilder extends MessageTargetBuilder<DataSinkItem> {
|
|
40
|
-
constructor(name: string);
|
|
41
|
-
toDatabase(collection: string): ChainableSink;
|
|
42
|
-
toStream(pattern: string): ChainableSink;
|
|
43
|
-
build(): DataSinkItem;
|
|
44
|
-
}
|
|
45
|
-
export declare class StateSourceBuilder extends MessageTargetBuilder<DataSourceItem> {
|
|
46
|
-
constructor(name: string);
|
|
47
|
-
fromProjection(name: string, idField: string): ChainableSource;
|
|
48
|
-
fromReadModel(name: string): ChainableSource;
|
|
49
|
-
fromDatabase(collection: string, query?: Record<string, unknown>): ChainableSource;
|
|
50
|
-
fromApi(endpoint: string, method?: string): ChainableSource;
|
|
51
|
-
fromIntegration(...systems: (Integration | string)[]): ChainableSource;
|
|
52
|
-
build(): DataSourceItem;
|
|
53
|
-
}
|
|
54
|
-
interface BuilderResult {
|
|
55
|
-
type: string;
|
|
56
|
-
__messageCategory: 'event' | 'command' | 'state';
|
|
57
|
-
}
|
|
58
|
-
export declare class DataSinkBuilder {
|
|
59
|
-
event(nameOrBuilder: string | BuilderResult): EventSinkBuilder;
|
|
60
|
-
command(nameOrBuilder: string | BuilderResult): CommandSinkBuilder;
|
|
61
|
-
state(nameOrBuilder: string | BuilderResult): StateSinkBuilder;
|
|
62
|
-
}
|
|
63
|
-
export declare class DataSourceBuilder {
|
|
64
|
-
state(nameOrBuilder: string | BuilderResult): StateSourceBuilder;
|
|
65
|
-
}
|
|
66
|
-
export declare const sink: () => DataSinkBuilder;
|
|
67
|
-
export declare const source: () => DataSourceBuilder;
|
|
68
|
-
export declare function typedSink(builderResult: BuilderResult): EventSinkBuilder | CommandSinkBuilder | StateSinkBuilder;
|
|
69
|
-
export declare function typedSource(builderResult: BuilderResult): StateSourceBuilder;
|
|
70
|
-
export {};
|
|
71
|
-
//# sourceMappingURL=data-flow-builders.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-flow-builders.d.ts","sourceRoot":"","sources":["../../src/data-flow-builders.ts"],"names":[],"mappings":"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"}
|