@auto-engineer/narrative 0.13.3 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +26 -0
- package/README.md +151 -99
- package/dist/scripts/convert-flow-exec.js +2 -2
- package/dist/scripts/convert-flow-exec.js.map +1 -1
- package/dist/scripts/convert-flow-helper.js +3 -4
- package/dist/scripts/convert-flow-helper.js.map +1 -1
- package/dist/scripts/convert-flow.js +4 -4
- package/dist/scripts/convert-flow.js.map +1 -1
- package/dist/scripts/print-schema.js +1 -1
- package/dist/scripts/print-schema.js.map +1 -1
- package/dist/src/commands/export-schema-helper.js +9 -9
- package/dist/src/commands/export-schema-helper.js.map +1 -1
- package/dist/src/commands/export-schema.d.ts.map +1 -1
- package/dist/src/commands/export-schema.js +49 -68
- package/dist/src/commands/export-schema.js.map +1 -1
- package/dist/src/data-narrative-builders.d.ts +1 -1
- package/dist/src/data-narrative-builders.d.ts.map +1 -1
- package/dist/src/data-narrative-builders.js +13 -19
- package/dist/src/data-narrative-builders.js.map +1 -1
- package/dist/src/fluent-builder.d.ts.map +1 -1
- package/dist/src/fluent-builder.js +2 -2
- package/dist/src/fluent-builder.js.map +1 -1
- package/dist/src/fluent-builder.specs.js +2 -2
- package/dist/src/fluent-builder.specs.js.map +1 -1
- package/dist/src/getNarratives.cache.specs.js +5 -5
- package/dist/src/getNarratives.cache.specs.js.map +1 -1
- package/dist/src/getNarratives.d.ts +1 -1
- package/dist/src/getNarratives.d.ts.map +1 -1
- package/dist/src/getNarratives.js +6 -3
- package/dist/src/getNarratives.js.map +1 -1
- package/dist/src/getNarratives.specs.js +6 -6
- package/dist/src/getNarratives.specs.js.map +1 -1
- package/dist/src/id/addAutoIds.d.ts +1 -1
- package/dist/src/id/addAutoIds.d.ts.map +1 -1
- package/dist/src/id/addAutoIds.js.map +1 -1
- package/dist/src/id/addAutoIds.specs.js +1 -1
- package/dist/src/id/addAutoIds.specs.js.map +1 -1
- package/dist/src/id/hasAllIds.d.ts +1 -1
- package/dist/src/id/hasAllIds.d.ts.map +1 -1
- package/dist/src/id/hasAllIds.specs.js +1 -1
- package/dist/src/id/hasAllIds.specs.js.map +1 -1
- package/dist/src/id/index.d.ts +1 -1
- package/dist/src/id/index.d.ts.map +1 -1
- package/dist/src/id/index.js +1 -1
- package/dist/src/id/index.js.map +1 -1
- package/dist/src/index.d.ts +14 -17
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -10
- package/dist/src/index.js.map +1 -1
- package/dist/src/integration-export-registry.d.ts +2 -2
- package/dist/src/integration-export-registry.d.ts.map +1 -1
- package/dist/src/integration-registry.d.ts +1 -1
- package/dist/src/integration-registry.d.ts.map +1 -1
- package/dist/src/integration-registry.js +1 -0
- package/dist/src/integration-registry.js.map +1 -1
- package/dist/src/loader/fs-path.js +2 -2
- package/dist/src/loader/fs-path.js.map +1 -1
- package/dist/src/loader/graph.d.ts +2 -2
- package/dist/src/loader/graph.d.ts.map +1 -1
- package/dist/src/loader/graph.js +2 -2
- package/dist/src/loader/graph.js.map +1 -1
- package/dist/src/loader/index.d.ts +1 -1
- package/dist/src/loader/index.d.ts.map +1 -1
- package/dist/src/loader/index.js +5 -5
- package/dist/src/loader/index.js.map +1 -1
- package/dist/src/loader/resolver.js +1 -1
- package/dist/src/loader/resolver.js.map +1 -1
- package/dist/src/loader/runtime-cjs.d.ts.map +1 -1
- package/dist/src/loader/runtime-cjs.js +2 -2
- package/dist/src/loader/runtime-cjs.js.map +1 -1
- package/dist/src/loader/ts-utils.js +5 -5
- package/dist/src/loader/ts-utils.js.map +1 -1
- package/dist/src/model-to-narrative.specs.js +73 -98
- package/dist/src/model-to-narrative.specs.js.map +1 -1
- package/dist/src/narrative-context.d.ts +4 -4
- package/dist/src/narrative-context.d.ts.map +1 -1
- package/dist/src/narrative-context.js +2 -2
- package/dist/src/narrative-context.js.map +1 -1
- package/dist/src/narrative-context.specs.js +118 -3
- package/dist/src/narrative-context.specs.js.map +1 -1
- package/dist/src/narrative-registry.d.ts +1 -1
- package/dist/src/narrative-registry.d.ts.map +1 -1
- package/dist/src/narrative-registry.js +1 -1
- package/dist/src/narrative-registry.js.map +1 -1
- package/dist/src/narrative.d.ts +3 -3
- package/dist/src/narrative.d.ts.map +1 -1
- package/dist/src/narrative.js +15 -17
- package/dist/src/narrative.js.map +1 -1
- package/dist/src/node.d.ts +1 -1
- package/dist/src/node.d.ts.map +1 -1
- package/dist/src/node.js +1 -1
- package/dist/src/node.js.map +1 -1
- package/dist/src/samples/items.narrative.js +2 -2
- package/dist/src/samples/items.narrative.js.map +1 -1
- package/dist/src/samples/mixed-given-types.narrative.js +1 -1
- package/dist/src/samples/mixed-given-types.narrative.js.map +1 -1
- package/dist/src/samples/place-order.narrative.js +1 -1
- package/dist/src/samples/place-order.narrative.js.map +1 -1
- package/dist/src/samples/questionnaires.narrative.js +1 -1
- package/dist/src/samples/questionnaires.narrative.js.map +1 -1
- package/dist/src/samples/test-with-ids.narrative.js +1 -1
- package/dist/src/samples/test-with-ids.narrative.js.map +1 -1
- package/dist/src/schema-test.js +1 -1
- package/dist/src/schema-test.js.map +1 -1
- package/dist/src/schema.d.ts +264 -264
- package/dist/src/slice-builder.d.ts.map +1 -1
- package/dist/src/slice-builder.js +1 -1
- package/dist/src/slice-builder.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/ast/emit-helpers.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/ast/emit-helpers.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/formatting/sort-types.js +1 -1
- package/dist/src/transformers/model-to-narrative/formatting/sort-types.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/compose.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/generators/compose.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/compose.js +4 -4
- package/dist/src/transformers/model-to-narrative/generators/compose.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/gwt.d.ts +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 +47 -57
- package/dist/src/transformers/model-to-narrative/generators/gwt.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/gwt.specs.d.ts +2 -0
- package/dist/src/transformers/model-to-narrative/generators/gwt.specs.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/gwt.specs.js +142 -0
- package/dist/src/transformers/model-to-narrative/generators/gwt.specs.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/imports.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/generators/imports.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/imports.js +0 -4
- package/dist/src/transformers/model-to-narrative/generators/imports.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/types.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/generators/types.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/index.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/index.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/index.js +1 -1
- package/dist/src/transformers/model-to-narrative/index.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/assemble.d.ts +1 -1
- package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/example-shapes.d.ts +1 -1
- package/dist/src/transformers/narrative-to-model/example-shapes.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/index.d.ts +2 -2
- package/dist/src/transformers/narrative-to-model/index.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/index.js +5 -5
- package/dist/src/transformers/narrative-to-model/index.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/inlining.d.ts +2 -2
- package/dist/src/transformers/narrative-to-model/inlining.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/integrations.d.ts +2 -2
- package/dist/src/transformers/narrative-to-model/integrations.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/integrations.js +3 -3
- package/dist/src/transformers/narrative-to-model/integrations.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/messages.d.ts +2 -2
- package/dist/src/transformers/narrative-to-model/messages.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/messages.js +1 -1
- package/dist/src/transformers/narrative-to-model/messages.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/normalize.d.ts +1 -1
- package/dist/src/transformers/narrative-to-model/normalize.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/spec-processors.d.ts +3 -3
- package/dist/src/transformers/narrative-to-model/spec-processors.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/spec-processors.js +2 -2
- package/dist/src/transformers/narrative-to-model/spec-processors.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/type-inference.d.ts +1 -1
- package/dist/src/transformers/narrative-to-model/type-inference.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/type-inference.js +1 -1
- package/dist/src/transformers/narrative-to-model/type-inference.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/type-inference.specs.js +1 -1
- package/dist/src/transformers/narrative-to-model/type-inference.specs.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/zod-adapter.d.ts +2 -2
- package/dist/src/transformers/narrative-to-model/zod-adapter.d.ts.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -12
- package/scripts/convert-flow-exec.ts +2 -2
- package/scripts/convert-flow-helper.ts +3 -4
- package/scripts/convert-flow.ts +4 -4
- package/scripts/print-schema.ts +2 -2
- package/src/commands/export-schema-helper.ts +10 -12
- package/src/commands/export-schema.ts +50 -70
- package/src/data-narrative-builders.ts +8 -11
- package/src/fluent-builder.specs.ts +2 -2
- package/src/fluent-builder.ts +6 -6
- package/src/getNarratives.cache.specs.ts +6 -6
- package/src/getNarratives.specs.ts +6 -6
- package/src/getNarratives.ts +13 -5
- package/src/id/addAutoIds.specs.ts +2 -2
- package/src/id/addAutoIds.ts +1 -1
- package/src/id/hasAllIds.specs.ts +1 -1
- package/src/id/hasAllIds.ts +1 -1
- package/src/id/index.ts +1 -1
- package/src/index.ts +61 -54
- package/src/integration-export-registry.ts +2 -2
- package/src/integration-registry.ts +2 -1
- package/src/loader/fs-path.ts +2 -2
- package/src/loader/graph.ts +9 -9
- package/src/loader/index.ts +7 -7
- package/src/loader/resolver.ts +1 -1
- package/src/loader/runtime-cjs.ts +3 -3
- package/src/loader/ts-utils.ts +5 -5
- package/src/model-to-narrative.specs.ts +76 -99
- package/src/narrative-context.specs.ts +138 -4
- package/src/narrative-context.ts +6 -7
- package/src/narrative-registry.ts +2 -2
- package/src/narrative.ts +27 -33
- package/src/node.ts +1 -2
- package/src/samples/items.narrative.ts +3 -3
- package/src/samples/mixed-given-types.narrative.ts +2 -2
- package/src/samples/place-order.narrative.ts +1 -1
- package/src/samples/questionnaires.narrative.ts +10 -10
- package/src/samples/test-with-ids.narrative.ts +2 -2
- package/src/schema-test.ts +1 -1
- package/src/slice-builder.ts +2 -2
- package/src/transformers/model-to-narrative/ast/emit-helpers.ts +1 -1
- package/src/transformers/model-to-narrative/formatting/sort-types.ts +1 -1
- package/src/transformers/model-to-narrative/generators/compose.ts +5 -5
- package/src/transformers/model-to-narrative/generators/flow.ts +9 -9
- package/src/transformers/model-to-narrative/generators/gwt.specs.ts +157 -0
- package/src/transformers/model-to-narrative/generators/gwt.ts +80 -122
- package/src/transformers/model-to-narrative/generators/imports.ts +0 -4
- package/src/transformers/model-to-narrative/generators/types.ts +1 -1
- package/src/transformers/model-to-narrative/index.ts +2 -2
- package/src/transformers/narrative-to-model/assemble.ts +1 -1
- package/src/transformers/narrative-to-model/example-shapes.ts +1 -1
- package/src/transformers/narrative-to-model/index.ts +7 -7
- package/src/transformers/narrative-to-model/inlining.ts +2 -2
- package/src/transformers/narrative-to-model/integrations.ts +5 -5
- package/src/transformers/narrative-to-model/messages.ts +3 -3
- package/src/transformers/narrative-to-model/normalize.ts +1 -1
- package/src/transformers/narrative-to-model/spec-processors.ts +4 -4
- package/src/transformers/narrative-to-model/type-inference.specs.ts +2 -2
- package/src/transformers/narrative-to-model/type-inference.ts +2 -2
- package/src/transformers/narrative-to-model/zod-adapter.ts +2 -2
- package/src/types.ts +1 -1
- package/dist/src/commands/export-schema-runner.d.ts +0 -3
- package/dist/src/commands/export-schema-runner.d.ts.map +0 -1
- package/dist/src/commands/export-schema-runner.js +0 -53
- package/dist/src/commands/export-schema-runner.js.map +0 -1
- package/eslint.config.ts +0 -12
- package/src/commands/export-schema-runner.ts +0 -74
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# @auto-engineer/flow
|
|
2
2
|
|
|
3
|
+
## 0.15.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- version bump
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies []:
|
|
12
|
+
- @auto-engineer/message-bus@0.15.0
|
|
13
|
+
- @auto-engineer/file-store@0.15.0
|
|
14
|
+
- @auto-engineer/id@0.15.0
|
|
15
|
+
|
|
16
|
+
## 0.14.0
|
|
17
|
+
|
|
18
|
+
### Minor Changes
|
|
19
|
+
|
|
20
|
+
- Rewrite CLI and Pipeline
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- Updated dependencies []:
|
|
25
|
+
- @auto-engineer/file-store@0.14.0
|
|
26
|
+
- @auto-engineer/id@0.14.0
|
|
27
|
+
- @auto-engineer/message-bus@0.14.0
|
|
28
|
+
|
|
3
29
|
## 0.13.3
|
|
4
30
|
|
|
5
31
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,141 +1,193 @@
|
|
|
1
|
-
# @auto-engineer/
|
|
1
|
+
# @auto-engineer/narrative
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
TypeScript DSL for defining business narratives using BDD patterns with Given/When/Then syntax.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
---
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Purpose
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
npm install -g @auto-engineer/cli
|
|
11
|
-
npm install @auto-engineer/flow
|
|
12
|
-
```
|
|
9
|
+
Without `@auto-engineer/narrative`, you would have to manually structure behavioral specifications, write boilerplate for command/query definitions, and handle the conversion between specification code and JSON models.
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
This package enables developers to express system behavior through narratives containing slices (commands, queries, reactions, experiences). Each slice supports client and server specifications using Gherkin-style Given/When/Then syntax.
|
|
15
12
|
|
|
16
|
-
|
|
13
|
+
---
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// ... other plugins
|
|
23
|
-
],
|
|
24
|
-
};
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm add @auto-engineer/narrative
|
|
25
19
|
```
|
|
26
20
|
|
|
27
|
-
##
|
|
21
|
+
## Quick Start
|
|
28
22
|
|
|
29
|
-
|
|
23
|
+
```typescript
|
|
24
|
+
import { flow, command, specs, rule, example, type Event, type Command } from '@auto-engineer/narrative';
|
|
25
|
+
|
|
26
|
+
type OrderPlaced = Event<'OrderPlaced', { orderId: string }>;
|
|
27
|
+
type PlaceOrder = Command<'PlaceOrder', { productId: string }>;
|
|
28
|
+
|
|
29
|
+
flow('Orders', () => {
|
|
30
|
+
command('Place order')
|
|
31
|
+
.server(() => {
|
|
32
|
+
specs('Order placement', () => {
|
|
33
|
+
rule('Valid orders are processed', () => {
|
|
34
|
+
example('User places order')
|
|
35
|
+
.when<PlaceOrder>({ productId: 'p-001' })
|
|
36
|
+
.then<OrderPlaced>({ orderId: 'o-001' });
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
```
|
|
30
42
|
|
|
31
|
-
|
|
32
|
-
- `export:schema` - Export flow schema to JSON
|
|
43
|
+
---
|
|
33
44
|
|
|
34
|
-
##
|
|
45
|
+
## How-to Guides
|
|
35
46
|
|
|
36
|
-
|
|
47
|
+
### Define a Command Slice
|
|
37
48
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
```typescript
|
|
50
|
+
import { flow, command, specs, rule, example } from '@auto-engineer/narrative';
|
|
51
|
+
|
|
52
|
+
flow('Users', () => {
|
|
53
|
+
command('Create user')
|
|
54
|
+
.stream('user-${userId}')
|
|
55
|
+
.server(() => {
|
|
56
|
+
specs('User creation', () => {
|
|
57
|
+
rule('Valid users created', () => {
|
|
58
|
+
example('New user')
|
|
59
|
+
.when({ name: 'John' })
|
|
60
|
+
.then({ userId: 'u-001' });
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
```
|
|
43
66
|
|
|
44
|
-
|
|
67
|
+
### Define a Query Slice
|
|
45
68
|
|
|
46
|
-
|
|
69
|
+
```typescript
|
|
70
|
+
import { flow, query, describe, it, data, source } from '@auto-engineer/narrative';
|
|
71
|
+
|
|
72
|
+
flow('Products', () => {
|
|
73
|
+
query('View products')
|
|
74
|
+
.client(() => {
|
|
75
|
+
describe('Product list', () => {
|
|
76
|
+
it('displays all products');
|
|
77
|
+
});
|
|
78
|
+
})
|
|
79
|
+
.server(() => {
|
|
80
|
+
data([source().state('Products').fromProjection('ProductsProjection', 'id')]);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
```
|
|
47
84
|
|
|
48
|
-
Define
|
|
85
|
+
### Define Data Sinks and Sources
|
|
49
86
|
|
|
50
87
|
```typescript
|
|
51
|
-
import { flow } from '@auto-engineer/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
88
|
+
import { flow, command, data, sink, source } from '@auto-engineer/narrative';
|
|
89
|
+
|
|
90
|
+
flow('Payments', () => {
|
|
91
|
+
command('Process payment')
|
|
92
|
+
.server(() => {
|
|
93
|
+
data([
|
|
94
|
+
sink().event('PaymentProcessed').toStream('payment-${paymentId}'),
|
|
95
|
+
source().state('Account').fromProjection('Accounts', 'accountId'),
|
|
96
|
+
]);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
62
99
|
```
|
|
63
100
|
|
|
64
|
-
###
|
|
65
|
-
|
|
66
|
-
Generate GraphQL schemas from flow definitions:
|
|
101
|
+
### Load Narratives from File System
|
|
67
102
|
|
|
68
103
|
```typescript
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
104
|
+
import { getNarratives } from '@auto-engineer/narrative';
|
|
105
|
+
import { NodeFileStore } from '@auto-engineer/file-store';
|
|
106
|
+
|
|
107
|
+
const vfs = new NodeFileStore();
|
|
108
|
+
const result = await getNarratives({ vfs, root: '/path/to/src' });
|
|
109
|
+
const model = result.toModel();
|
|
72
110
|
```
|
|
73
111
|
|
|
74
|
-
|
|
112
|
+
---
|
|
75
113
|
|
|
76
|
-
|
|
114
|
+
## API Reference
|
|
115
|
+
|
|
116
|
+
### Package Exports
|
|
77
117
|
|
|
78
118
|
```typescript
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
119
|
+
import {
|
|
120
|
+
flow, narrative,
|
|
121
|
+
command, query, react, experience,
|
|
122
|
+
specs, rule, example, describe, it, should,
|
|
123
|
+
client, server, data,
|
|
124
|
+
sink, source,
|
|
125
|
+
getNarratives, modelToNarrative,
|
|
126
|
+
addAutoIds, hasAllIds,
|
|
127
|
+
gql,
|
|
128
|
+
type Event, type Command, type State,
|
|
129
|
+
} from '@auto-engineer/narrative';
|
|
130
|
+
|
|
131
|
+
import { COMMANDS, exportSchemaCommandHandler } from '@auto-engineer/narrative/node';
|
|
87
132
|
```
|
|
88
133
|
|
|
89
|
-
###
|
|
134
|
+
### Entry Points
|
|
90
135
|
|
|
91
|
-
|
|
136
|
+
| Entry Point | Import Path | Description |
|
|
137
|
+
|-------------|-------------|-------------|
|
|
138
|
+
| Main | `@auto-engineer/narrative` | Core DSL and types |
|
|
139
|
+
| Node | `@auto-engineer/narrative/node` | Command handlers |
|
|
92
140
|
|
|
93
|
-
|
|
94
|
-
import { testFlow } from '@auto-engineer/flow/testing';
|
|
141
|
+
### Slice Types
|
|
95
142
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
143
|
+
| Type | Description | Client | Server |
|
|
144
|
+
|------|-------------|--------|--------|
|
|
145
|
+
| `command` | User actions that modify state | Yes | Yes |
|
|
146
|
+
| `query` | Read operations | Yes | Yes |
|
|
147
|
+
| `react` | Event reactions | No | Yes |
|
|
148
|
+
| `experience` | UI-only behaviors | Yes | No |
|
|
102
149
|
|
|
103
|
-
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
```
|
|
150
|
+
### Message Types
|
|
107
151
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
152
|
+
```typescript
|
|
153
|
+
type Event<Type extends string, Data> = { type: Type; data: Data };
|
|
154
|
+
type Command<Type extends string, Data> = { type: Type; data: Data };
|
|
155
|
+
type State<Type extends string, Data> = { type: Type; data: Data };
|
|
156
|
+
```
|
|
111
157
|
|
|
112
|
-
|
|
113
|
-
- Messages: Strongly-typed data structures for communication
|
|
114
|
-
- Integrations: External service connectors with retry and error handling
|
|
115
|
-
- Context: Runtime environment providing access to integrations and utilities
|
|
116
|
-
- Registry: Central repository for flow definitions and metadata
|
|
158
|
+
---
|
|
117
159
|
|
|
118
|
-
##
|
|
160
|
+
## Architecture
|
|
119
161
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
162
|
+
```
|
|
163
|
+
src/
|
|
164
|
+
├── index.ts
|
|
165
|
+
├── node.ts
|
|
166
|
+
├── narrative.ts
|
|
167
|
+
├── fluent-builder.ts
|
|
168
|
+
├── schema.ts
|
|
169
|
+
├── types.ts
|
|
170
|
+
├── data-narrative-builders.ts
|
|
171
|
+
├── loader/
|
|
172
|
+
├── transformers/
|
|
173
|
+
├── id/
|
|
174
|
+
└── commands/
|
|
175
|
+
```
|
|
131
176
|
|
|
132
|
-
|
|
177
|
+
### Key Concepts
|
|
133
178
|
|
|
134
|
-
|
|
179
|
+
- **Narratives**: Business capabilities containing slices
|
|
180
|
+
- **Slices**: Behavioral units (command, query, react, experience)
|
|
181
|
+
- **Specifications**: BDD-style Given/When/Then assertions
|
|
182
|
+
- **Data Flow**: Sinks (outbound) and Sources (inbound)
|
|
135
183
|
|
|
136
|
-
|
|
137
|
-
- **@auto-engineer/frontend-generator-react-graphql**: Creates React components from flow-generated GraphQL schemas
|
|
138
|
-
- **@auto-engineer/server-implementer**: Implements flow handlers with AI assistance
|
|
139
|
-
- **@auto-engineer/information-architect**: Generates information architecture from flow definitions
|
|
184
|
+
### Dependencies
|
|
140
185
|
|
|
141
|
-
|
|
186
|
+
| Package | Usage |
|
|
187
|
+
|---------|-------|
|
|
188
|
+
| `@auto-engineer/file-store` | Virtual file system |
|
|
189
|
+
| `@auto-engineer/id` | ID generation |
|
|
190
|
+
| `@auto-engineer/message-bus` | Command/Event types |
|
|
191
|
+
| `zod` | Schema validation |
|
|
192
|
+
| `typescript` | AST parsing |
|
|
193
|
+
| `graphql` | GraphQL query parsing |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
2
|
+
import path from 'node:path';
|
|
3
3
|
import { NodeFileStore } from '@auto-engineer/file-store/node';
|
|
4
|
-
import
|
|
4
|
+
import { getNarratives } from '../src/index.js';
|
|
5
5
|
const main = async () => {
|
|
6
6
|
try {
|
|
7
7
|
const result = await getNarratives({ vfs: new NodeFileStore(), root: path.resolve(__dirname) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-flow-exec.js","sourceRoot":"","sources":["../../scripts/convert-flow-exec.ts"],"names":[],"mappings":";AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"convert-flow-exec.js","sourceRoot":"","sources":["../../scripts/convert-flow-exec.ts"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAChG,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { spawn } from 'child_process';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { join } from 'path';
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { unlinkSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { dirname, join, resolve } from 'node:path';
|
|
6
5
|
const main = async () => {
|
|
7
6
|
const flowPath = process.argv[2];
|
|
8
7
|
if (!flowPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-flow-helper.js","sourceRoot":"","sources":["../../scripts/convert-flow-helper.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"convert-flow-helper.js","sourceRoot":"","sources":["../../scripts/convert-flow-helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import { existsSync,
|
|
4
|
-
import {
|
|
5
|
-
import { fileURLToPath } from 'url';
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { existsSync, statSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { dirname, join, relative, resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
6
|
const runInContext = (flowPath, projectRoot) => {
|
|
7
7
|
return new Promise((resolve, reject) => {
|
|
8
8
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-flow.js","sourceRoot":"","sources":["../../scripts/convert-flow.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"convert-flow.js","sourceRoot":"","sources":["../../scripts/convert-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CommandSliceSchema, NarrativeSchema, IntegrationSchema, MessageSchema, QuerySliceSchema, ReactSliceSchema, } from '../src/index.js';
|
|
2
1
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
2
|
+
import { CommandSliceSchema, IntegrationSchema, MessageSchema, NarrativeSchema, QuerySliceSchema, ReactSliceSchema, } from '../src/index.js';
|
|
3
3
|
const schemas = Object.fromEntries(Object.entries({
|
|
4
4
|
narrative: NarrativeSchema,
|
|
5
5
|
message: MessageSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"print-schema.js","sourceRoot":"","sources":["../../scripts/print-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"print-schema.js","sourceRoot":"","sources":["../../scripts/print-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,QAAQ,CAAC;AAEhB,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,OAAO,CAAC;IACb,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,iBAAiB;IAC9B,YAAY,EAAE,kBAAkB;IAChC,UAAU,EAAE,gBAAgB;IAC5B,UAAU,EAAE,gBAAgB;CAC7B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACjB,CAAC;IACD,eAAe,CAAC,CAAC,EAAE;QACjB,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,aAAa;QACrB,cAAc,EAAE,aAAa;QAC7B,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACtC,CAAC;CACH,CAAC,CACH,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { NodeFileStore } from '@auto-engineer/file-store/node';
|
|
1
2
|
import createDebug from 'debug';
|
|
2
3
|
import { getFs } from './filestore.node.js';
|
|
3
|
-
import { NodeFileStore } from '@auto-engineer/file-store/node';
|
|
4
4
|
const debug = createDebug('auto:narrative:export-schema-helper');
|
|
5
5
|
if ('color' in debug && typeof debug === 'object') {
|
|
6
6
|
debug.color = '4';
|
|
@@ -13,7 +13,7 @@ const main = async () => {
|
|
|
13
13
|
const fs = await getFileStore();
|
|
14
14
|
const projectNarrativePath = fs.join(directory, 'node_modules', '@auto-engineer', 'narrative', 'dist', 'src', 'getNarratives.js');
|
|
15
15
|
debug('Importing getNarratives from: %s', projectNarrativePath);
|
|
16
|
-
const { pathToFileURL } = await import('url');
|
|
16
|
+
const { pathToFileURL } = await import('node:url');
|
|
17
17
|
const narrativeModule = (await import(pathToFileURL(projectNarrativePath).href));
|
|
18
18
|
const { getNarratives } = narrativeModule;
|
|
19
19
|
const narrativesPath = fs.join(directory, 'narratives');
|
|
@@ -27,16 +27,16 @@ const main = async () => {
|
|
|
27
27
|
await fs.ensureDir(contextDir);
|
|
28
28
|
await fs.writeText(outPath, json);
|
|
29
29
|
debug('Schema written to: %s', outPath);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
success: true,
|
|
33
|
-
outputPath: outPath,
|
|
34
|
-
}));
|
|
30
|
+
const resultPath = fs.join(contextDir, '.export-result.json');
|
|
31
|
+
await fs.writeText(resultPath, JSON.stringify({ success: true, outputPath: outPath }));
|
|
35
32
|
}
|
|
36
33
|
catch (error) {
|
|
37
34
|
debug('Error occurred: %o', error);
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
const getFileStore = getFs;
|
|
36
|
+
const fss = await getFileStore();
|
|
37
|
+
const resultPath = fss.join(process.argv[2] || process.cwd(), '.context', '.export-result.json');
|
|
38
|
+
await fss.ensureDir(fss.dirname(resultPath));
|
|
39
|
+
await fss.writeText(resultPath, JSON.stringify({
|
|
40
40
|
success: false,
|
|
41
41
|
error: error instanceof Error ? error.message : 'Unknown error occurred',
|
|
42
42
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-schema-helper.js","sourceRoot":"","sources":["../../../src/commands/export-schema-helper.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"export-schema-helper.js","sourceRoot":"","sources":["../../../src/commands/export-schema-helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-schema.d.ts","sourceRoot":"","sources":["../../../src/commands/export-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"export-schema.d.ts","sourceRoot":"","sources":["../../../src/commands/export-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAwB,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAQ5F,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,cAAc,EACd;IACE,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,KAAK,CACrC,gBAAgB,EAChB;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CACF,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,KAAK,CACzC,oBAAoB,EACpB;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CACF,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,uBAAuB,CAAC;AAE/E,eAAO,MAAM,cAAc;;;;;;GA4BzB,CAAC;AAEH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,CAoExD;AAGD,eAAe,cAAc,CAAC"}
|
|
@@ -6,14 +6,18 @@ if ('color' in debug && typeof debug === 'object') {
|
|
|
6
6
|
}
|
|
7
7
|
export const commandHandler = defineCommandHandler({
|
|
8
8
|
name: 'ExportSchema',
|
|
9
|
+
displayName: 'Export Schema',
|
|
9
10
|
alias: 'export:schema',
|
|
10
11
|
description: 'Export flow schemas to context directory',
|
|
11
12
|
category: 'export',
|
|
12
13
|
icon: 'download',
|
|
13
|
-
events: [
|
|
14
|
+
events: [
|
|
15
|
+
{ name: 'SchemaExported', displayName: 'Schema Exported' },
|
|
16
|
+
{ name: 'SchemaExportFailed', displayName: 'Schema Export Failed' },
|
|
17
|
+
],
|
|
14
18
|
fields: {
|
|
15
19
|
directory: {
|
|
16
|
-
description: 'Context directory path',
|
|
20
|
+
description: 'Context directory path (defaults to current working directory)',
|
|
17
21
|
required: true,
|
|
18
22
|
},
|
|
19
23
|
},
|
|
@@ -31,79 +35,56 @@ export const commandHandler = defineCommandHandler({
|
|
|
31
35
|
},
|
|
32
36
|
});
|
|
33
37
|
export async function handleExportSchemaCommand(command) {
|
|
34
|
-
const
|
|
38
|
+
const directory = command.data.directory ?? process.cwd();
|
|
35
39
|
try {
|
|
36
40
|
// Run the helper script with tsx
|
|
37
41
|
const { getFs } = await import('./filestore.node.js');
|
|
38
42
|
const fs = await getFs();
|
|
39
43
|
const __dirname = fs.dirname(new URL(import.meta.url).href);
|
|
40
44
|
const helperScript = fs.join(__dirname, 'export-schema-helper.js');
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
});
|
|
55
|
-
let stdout = '';
|
|
56
|
-
child.stdout.on('data', (data) => {
|
|
57
|
-
stdout += data.toString();
|
|
58
|
-
});
|
|
59
|
-
child.on('close', (code) => {
|
|
60
|
-
try {
|
|
61
|
-
// Extract JSON from stdout - look for the last line that starts with '{'
|
|
62
|
-
const lines = stdout.trim().split('\n');
|
|
63
|
-
const jsonLine = lines.reverse().find((line) => line.trim().startsWith('{'));
|
|
64
|
-
if (jsonLine == null) {
|
|
65
|
-
throw new Error('No JSON output found');
|
|
66
|
-
}
|
|
67
|
-
const result = JSON.parse(jsonLine);
|
|
68
|
-
if (result.success === true) {
|
|
69
|
-
resolve({
|
|
70
|
-
type: 'SchemaExported',
|
|
71
|
-
data: {
|
|
72
|
-
directory,
|
|
73
|
-
outputPath: result.outputPath ?? '',
|
|
74
|
-
},
|
|
75
|
-
timestamp: new Date(),
|
|
76
|
-
requestId: command.requestId,
|
|
77
|
-
correlationId: command.correlationId,
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
resolve({
|
|
82
|
-
type: 'SchemaExportFailed',
|
|
83
|
-
data: {
|
|
84
|
-
directory,
|
|
85
|
-
error: result.error ?? 'Unknown error',
|
|
86
|
-
},
|
|
87
|
-
timestamp: new Date(),
|
|
88
|
-
requestId: command.requestId,
|
|
89
|
-
correlationId: command.correlationId,
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
resolve({
|
|
95
|
-
type: 'SchemaExportFailed',
|
|
96
|
-
data: {
|
|
97
|
-
directory,
|
|
98
|
-
error: code === 0 ? 'Failed to parse result' : `Process failed with code ${code}`,
|
|
99
|
-
},
|
|
100
|
-
timestamp: new Date(),
|
|
101
|
-
requestId: command.requestId,
|
|
102
|
-
correlationId: command.correlationId,
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
});
|
|
45
|
+
const resultPath = fs.join(directory, '.context', '.export-result.json');
|
|
46
|
+
const { spawnSync } = await import('node:child_process');
|
|
47
|
+
spawnSync('node', [helperScript, directory], {
|
|
48
|
+
cwd: directory,
|
|
49
|
+
encoding: 'utf-8',
|
|
50
|
+
stdio: 'ignore',
|
|
51
|
+
env: {
|
|
52
|
+
...process.env,
|
|
53
|
+
NODE_ENV: process.env.NODE_ENV ?? 'development',
|
|
54
|
+
DEBUG: process.env.DEBUG,
|
|
55
|
+
DEBUG_COLORS: process.env.DEBUG_COLORS,
|
|
56
|
+
DEBUG_HIDE_DATE: 'true',
|
|
57
|
+
},
|
|
106
58
|
});
|
|
59
|
+
const resultJson = await fs.readText(resultPath);
|
|
60
|
+
if (resultJson == null) {
|
|
61
|
+
return {
|
|
62
|
+
type: 'SchemaExportFailed',
|
|
63
|
+
data: { directory, error: 'No result file found' },
|
|
64
|
+
timestamp: new Date(),
|
|
65
|
+
requestId: command.requestId,
|
|
66
|
+
correlationId: command.correlationId,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const parsed = JSON.parse(resultJson);
|
|
70
|
+
if (parsed.success === true) {
|
|
71
|
+
return {
|
|
72
|
+
type: 'SchemaExported',
|
|
73
|
+
data: { directory, outputPath: parsed.outputPath ?? '' },
|
|
74
|
+
timestamp: new Date(),
|
|
75
|
+
requestId: command.requestId,
|
|
76
|
+
correlationId: command.correlationId,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
return {
|
|
81
|
+
type: 'SchemaExportFailed',
|
|
82
|
+
data: { directory, error: parsed.error ?? 'Unknown error' },
|
|
83
|
+
timestamp: new Date(),
|
|
84
|
+
requestId: command.requestId,
|
|
85
|
+
correlationId: command.correlationId,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
107
88
|
}
|
|
108
89
|
catch (error) {
|
|
109
90
|
const message = error instanceof Error ? error.message : String(error);
|