@auto-engineer/narrative 1.139.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.
- package/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-test.log +5 -5
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +18 -0
- package/dist/scripts/convert-flow-exec.js +2 -2
- package/dist/scripts/convert-flow-exec.js.map +1 -1
- package/dist/scripts/print-schema.js +5 -5
- package/dist/scripts/print-schema.js.map +1 -1
- package/dist/src/fluent-builder.d.ts +29 -29
- package/dist/src/fluent-builder.d.ts.map +1 -1
- package/dist/src/fluent-builder.js +81 -81
- package/dist/src/fluent-builder.js.map +1 -1
- package/dist/src/{getNarratives.d.ts → getScenes.d.ts} +6 -6
- package/dist/src/getScenes.d.ts.map +1 -0
- package/dist/src/{getNarratives.js → getScenes.js} +16 -16
- package/dist/src/getScenes.js.map +1 -0
- package/dist/src/id/addAutoIds.d.ts.map +1 -1
- package/dist/src/id/addAutoIds.js +22 -22
- package/dist/src/id/addAutoIds.js.map +1 -1
- package/dist/src/id/hasAllIds.d.ts.map +1 -1
- package/dist/src/id/hasAllIds.js +2 -2
- package/dist/src/id/hasAllIds.js.map +1 -1
- package/dist/src/index.d.ts +8 -8
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/loader/index.js +1 -1
- package/dist/src/loader/index.js.map +1 -1
- package/dist/src/loader/runtime-cjs.js +1 -1
- package/dist/src/loader/runtime-cjs.js.map +1 -1
- package/dist/src/narrative-context.d.ts +9 -9
- package/dist/src/narrative-context.d.ts.map +1 -1
- package/dist/src/narrative-context.js +47 -47
- package/dist/src/narrative-context.js.map +1 -1
- package/dist/src/narrative-registry.d.ts +6 -6
- package/dist/src/narrative-registry.d.ts.map +1 -1
- package/dist/src/narrative-registry.js +26 -26
- package/dist/src/narrative-registry.js.map +1 -1
- package/dist/src/narrative.d.ts +5 -5
- package/dist/src/narrative.d.ts.map +1 -1
- package/dist/src/narrative.js +26 -27
- package/dist/src/narrative.js.map +1 -1
- package/dist/src/parse-graphql-request.d.ts +1 -1
- package/dist/src/parse-graphql-request.d.ts.map +1 -1
- package/dist/src/parse-graphql-request.js +3 -3
- package/dist/src/parse-graphql-request.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 +2 -2
- package/dist/src/samples/mixed-given-types.narrative.js.map +1 -1
- package/dist/src/samples/place-order.narrative.js +2 -2
- package/dist/src/samples/place-order.narrative.js.map +1 -1
- package/dist/src/samples/questionnaires.narrative.js +2 -2
- package/dist/src/samples/questionnaires.narrative.js.map +1 -1
- package/dist/src/samples/seasonal-assistant.schema.json +2 -2
- package/dist/src/samples/test-with-ids.narrative.js +2 -2
- package/dist/src/samples/test-with-ids.narrative.js.map +1 -1
- package/dist/src/schema.d.ts +136 -136
- package/dist/src/schema.d.ts.map +1 -1
- package/dist/src/schema.js +76 -76
- package/dist/src/schema.js.map +1 -1
- package/dist/src/slice-builder.d.ts +6 -6
- package/dist/src/slice-builder.d.ts.map +1 -1
- package/dist/src/slice-builder.js +21 -21
- package/dist/src/slice-builder.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js +1 -1
- package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/cross-module-imports.js +4 -4
- package/dist/src/transformers/model-to-narrative/cross-module-imports.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/compose.js +3 -3
- package/dist/src/transformers/model-to-narrative/generators/compose.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +2 -2
- package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/flow.js +20 -20
- package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -1
- 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 +1 -1
- package/dist/src/transformers/model-to-narrative/generators/imports.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/generators/module-code.js +14 -14
- package/dist/src/transformers/model-to-narrative/generators/module-code.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/index.d.ts +4 -4
- 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/spec-traversal.d.ts +2 -2
- package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/spec-traversal.js +5 -5
- package/dist/src/transformers/model-to-narrative/spec-traversal.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/types.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/types.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js +4 -4
- package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/validate-modules.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/validate-modules.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/validate-modules.js +19 -19
- package/dist/src/transformers/model-to-narrative/validate-modules.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/assemble.d.ts +2 -2
- package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/assemble.js +10 -3
- package/dist/src/transformers/narrative-to-model/assemble.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/src/transformers/narrative-to-model/derive-modules.d.ts +2 -2
- package/dist/src/transformers/narrative-to-model/derive-modules.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/derive-modules.js +9 -9
- package/dist/src/transformers/narrative-to-model/derive-modules.js.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 +39 -39
- package/dist/src/transformers/narrative-to-model/index.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/spec-processors.js +1 -1
- package/dist/src/transformers/narrative-to-model/spec-processors.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/strings.d.ts +1 -1
- package/dist/src/transformers/narrative-to-model/strings.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/strings.js +6 -6
- package/dist/src/transformers/narrative-to-model/strings.js.map +1 -1
- package/dist/src/validate-slice-requests.d.ts +4 -4
- package/dist/src/validate-slice-requests.d.ts.map +1 -1
- package/dist/src/validate-slice-requests.js +34 -34
- package/dist/src/validate-slice-requests.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/scripts/convert-flow-exec.ts +2 -2
- package/scripts/print-schema.ts +8 -8
- package/src/fluent-builder.specs.ts +3 -3
- package/src/fluent-builder.ts +141 -141
- package/src/{getNarratives.cache.specs.ts → getScenes.cache.specs.ts} +45 -45
- package/src/{getNarratives.specs.ts → getScenes.specs.ts} +302 -300
- package/src/{getNarratives.ts → getScenes.ts} +20 -20
- package/src/id/addAutoIds.specs.ts +105 -105
- package/src/id/addAutoIds.ts +26 -26
- package/src/id/hasAllIds.specs.ts +59 -59
- package/src/id/hasAllIds.ts +6 -6
- package/src/index.ts +12 -13
- package/src/loader/index.ts +1 -1
- package/src/loader/runtime-cjs.ts +1 -1
- package/src/model-to-narrative.specs.ts +133 -135
- package/src/narrative-context.specs.ts +24 -24
- package/src/narrative-context.ts +61 -61
- package/src/narrative-registry.ts +31 -31
- package/src/narrative.ts +31 -33
- package/src/parse-graphql-request.specs.ts +5 -5
- package/src/parse-graphql-request.ts +3 -3
- package/src/samples/items.narrative.ts +2 -2
- package/src/samples/mixed-given-types.narrative.ts +2 -2
- package/src/samples/place-order.narrative.ts +2 -2
- package/src/samples/questionnaires.narrative.ts +2 -2
- package/src/samples/seasonal-assistant.schema.json +2 -2
- package/src/samples/test-with-ids.narrative.ts +2 -2
- package/src/schema.specs.ts +99 -91
- package/src/schema.ts +89 -89
- package/src/slice-builder.ts +30 -30
- package/src/transformers/model-to-narrative/analysis/lint-helpers.ts +1 -1
- package/src/transformers/model-to-narrative/cross-module-imports.specs.ts +43 -43
- package/src/transformers/model-to-narrative/cross-module-imports.ts +4 -4
- package/src/transformers/model-to-narrative/generators/compose.ts +4 -4
- package/src/transformers/model-to-narrative/generators/flow.ts +36 -36
- package/src/transformers/model-to-narrative/generators/imports.ts +1 -1
- package/src/transformers/model-to-narrative/generators/module-code.ts +15 -15
- package/src/transformers/model-to-narrative/index.ts +4 -4
- package/src/transformers/model-to-narrative/modules.specs.ts +58 -58
- package/src/transformers/model-to-narrative/spec-traversal.specs.ts +43 -43
- package/src/transformers/model-to-narrative/spec-traversal.ts +6 -6
- package/src/transformers/model-to-narrative/types.ts +1 -1
- package/src/transformers/model-to-narrative/utils/integration-extractor.ts +5 -5
- package/src/transformers/model-to-narrative/validate-modules.ts +22 -22
- package/src/transformers/narrative-to-model/assemble.ts +12 -4
- package/src/transformers/narrative-to-model/debug.ts +1 -1
- package/src/transformers/narrative-to-model/derive-modules.specs.ts +35 -35
- package/src/transformers/narrative-to-model/derive-modules.ts +11 -11
- package/src/transformers/narrative-to-model/index.ts +47 -47
- package/src/transformers/narrative-to-model/spec-processors.ts +1 -1
- package/src/transformers/narrative-to-model/strings.ts +6 -6
- package/src/transformers/narrative-to-model/type-inference.specs.ts +11 -11
- package/src/validate-slice-requests.specs.ts +113 -113
- package/src/validate-slice-requests.ts +49 -49
- package/dist/src/getNarratives.d.ts.map +0 -1
- package/dist/src/getNarratives.js.map +0 -1
package/package.json
CHANGED
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"typescript": "^5.9.2",
|
|
27
27
|
"zod": "^3.22.4",
|
|
28
28
|
"zod-to-json-schema": "^3.22.3",
|
|
29
|
-
"@auto-engineer/file-store": "1.
|
|
30
|
-
"@auto-engineer/message-bus": "1.
|
|
31
|
-
"@auto-engineer/id": "1.
|
|
29
|
+
"@auto-engineer/file-store": "1.140.0",
|
|
30
|
+
"@auto-engineer/message-bus": "1.140.0",
|
|
31
|
+
"@auto-engineer/id": "1.140.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/node": "^20.0.0",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"publishConfig": {
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
|
-
"version": "1.
|
|
41
|
+
"version": "1.140.0",
|
|
42
42
|
"scripts": {
|
|
43
43
|
"build": "tsx scripts/build.ts",
|
|
44
44
|
"test": "vitest run --reporter=dot",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { NodeFileStore } from '@auto-engineer/file-store/node';
|
|
4
|
-
import {
|
|
4
|
+
import { getScenes } from '../src';
|
|
5
5
|
|
|
6
6
|
const main = async () => {
|
|
7
7
|
try {
|
|
8
|
-
const result = await
|
|
8
|
+
const result = await getScenes({ vfs: new NodeFileStore(), root: path.resolve(__dirname) });
|
|
9
9
|
const schema = result.toModel();
|
|
10
10
|
console.log(JSON.stringify(schema, null, 2));
|
|
11
11
|
} catch (error) {
|
package/scripts/print-schema.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
CommandMomentSchema,
|
|
4
4
|
IntegrationSchema,
|
|
5
5
|
MessageSchema,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
QueryMomentSchema,
|
|
7
|
+
ReactMomentSchema,
|
|
8
|
+
SceneSchema,
|
|
9
9
|
} from '../src';
|
|
10
10
|
|
|
11
11
|
const schemas = Object.fromEntries(
|
|
12
12
|
Object.entries({
|
|
13
|
-
|
|
13
|
+
scene: SceneSchema,
|
|
14
14
|
message: MessageSchema,
|
|
15
15
|
integration: IntegrationSchema,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
commandMoment: CommandMomentSchema,
|
|
17
|
+
queryMoment: QueryMomentSchema,
|
|
18
|
+
reactMoment: ReactMomentSchema,
|
|
19
19
|
}).map(([k, v]) => [
|
|
20
20
|
k,
|
|
21
21
|
zodToJsonSchema(v, {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
2
2
|
import { command, react } from './fluent-builder';
|
|
3
|
-
import {
|
|
3
|
+
import { clearCurrentScene, startScene } from './narrative-context';
|
|
4
4
|
import { createIntegration } from './types';
|
|
5
5
|
|
|
6
6
|
// Test integrations
|
|
@@ -9,11 +9,11 @@ const Twilio = createIntegration('twilio', 'Twilio');
|
|
|
9
9
|
|
|
10
10
|
describe('via method', () => {
|
|
11
11
|
beforeEach(() => {
|
|
12
|
-
|
|
12
|
+
startScene('test-flow');
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
afterEach(() => {
|
|
16
|
-
|
|
16
|
+
clearCurrentScene();
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
it('should accept a single integration', () => {
|
package/src/fluent-builder.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import createDebug from 'debug';
|
|
2
2
|
import { type ASTNode, print } from 'graphql';
|
|
3
|
-
import type {
|
|
3
|
+
import type { CommandMoment, ExperienceMoment, QueryMoment, ReactMoment } from './index';
|
|
4
4
|
import {
|
|
5
|
-
|
|
5
|
+
addMoment,
|
|
6
6
|
endClientBlock,
|
|
7
7
|
endServerBlock,
|
|
8
|
-
|
|
8
|
+
getCurrentMoment,
|
|
9
9
|
startClientBlock,
|
|
10
10
|
startServerBlock,
|
|
11
11
|
} from './narrative-context';
|
|
@@ -32,125 +32,125 @@ if ('color' in debugExperience && typeof debugExperience === 'object') {
|
|
|
32
32
|
(debugExperience as { color: string }).color = '5';
|
|
33
33
|
} // magenta
|
|
34
34
|
|
|
35
|
-
export interface
|
|
36
|
-
stream(name: string):
|
|
37
|
-
client(fn: () => void):
|
|
38
|
-
client(description: string, fn: () => void):
|
|
39
|
-
server(fn: () => void):
|
|
40
|
-
server(description: string, fn: () => void):
|
|
41
|
-
via(integration: Integration | Integration[]):
|
|
42
|
-
retries(count: number):
|
|
43
|
-
request(mutation: unknown):
|
|
35
|
+
export interface FluentCommandMomentBuilder {
|
|
36
|
+
stream(name: string): FluentCommandMomentBuilder;
|
|
37
|
+
client(fn: () => void): FluentCommandMomentBuilder;
|
|
38
|
+
client(description: string, fn: () => void): FluentCommandMomentBuilder;
|
|
39
|
+
server(fn: () => void): FluentCommandMomentBuilder;
|
|
40
|
+
server(description: string, fn: () => void): FluentCommandMomentBuilder;
|
|
41
|
+
via(integration: Integration | Integration[]): FluentCommandMomentBuilder;
|
|
42
|
+
retries(count: number): FluentCommandMomentBuilder;
|
|
43
|
+
request(mutation: unknown): FluentCommandMomentBuilder;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
export interface
|
|
47
|
-
client(fn: () => void):
|
|
48
|
-
client(description: string, fn: () => void):
|
|
49
|
-
server(fn: () => void):
|
|
50
|
-
server(description: string, fn: () => void):
|
|
51
|
-
request(query: unknown):
|
|
46
|
+
export interface FluentQueryMomentBuilder {
|
|
47
|
+
client(fn: () => void): FluentQueryMomentBuilder;
|
|
48
|
+
client(description: string, fn: () => void): FluentQueryMomentBuilder;
|
|
49
|
+
server(fn: () => void): FluentQueryMomentBuilder;
|
|
50
|
+
server(description: string, fn: () => void): FluentQueryMomentBuilder;
|
|
51
|
+
request(query: unknown): FluentQueryMomentBuilder;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
export interface
|
|
55
|
-
server(fn: () => void):
|
|
56
|
-
server(description: string, fn: () => void):
|
|
57
|
-
via(integration: Integration | Integration[]):
|
|
58
|
-
retries(count: number):
|
|
54
|
+
export interface FluentReactionMomentBuilder {
|
|
55
|
+
server(fn: () => void): FluentReactionMomentBuilder;
|
|
56
|
+
server(description: string, fn: () => void): FluentReactionMomentBuilder;
|
|
57
|
+
via(integration: Integration | Integration[]): FluentReactionMomentBuilder;
|
|
58
|
+
retries(count: number): FluentReactionMomentBuilder;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
export interface
|
|
62
|
-
client(fn: () => void):
|
|
63
|
-
client(description: string, fn: () => void):
|
|
61
|
+
export interface FluentExperienceMomentBuilder {
|
|
62
|
+
client(fn: () => void): FluentExperienceMomentBuilder;
|
|
63
|
+
client(description: string, fn: () => void): FluentExperienceMomentBuilder;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
class
|
|
67
|
-
private
|
|
66
|
+
class CommandMomentBuilderImpl implements FluentCommandMomentBuilder {
|
|
67
|
+
private moment: CommandMoment;
|
|
68
68
|
|
|
69
69
|
constructor(name: string, id?: string) {
|
|
70
|
-
debugCommand('Creating command
|
|
71
|
-
this.
|
|
70
|
+
debugCommand('Creating command moment: %s', name);
|
|
71
|
+
this.moment = {
|
|
72
72
|
type: 'command',
|
|
73
73
|
name,
|
|
74
74
|
id,
|
|
75
75
|
client: { specs: [] },
|
|
76
76
|
server: { description: '', specs: [], data: undefined },
|
|
77
77
|
};
|
|
78
|
-
|
|
79
|
-
debugCommand('Command
|
|
78
|
+
addMoment(this.moment);
|
|
79
|
+
debugCommand('Command moment added to scene: %s', name);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
stream(name: string):
|
|
83
|
-
debugCommand('Setting stream for
|
|
84
|
-
this.
|
|
82
|
+
stream(name: string): FluentCommandMomentBuilder {
|
|
83
|
+
debugCommand('Setting stream for moment %s: %s', this.moment.name, name);
|
|
84
|
+
this.moment.stream = name;
|
|
85
85
|
return this;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
client(fn: () => void):
|
|
89
|
-
client(description: string, fn: () => void):
|
|
90
|
-
client(descriptionOrFn: string | (() => void), fn?: () => void):
|
|
88
|
+
client(fn: () => void): FluentCommandMomentBuilder;
|
|
89
|
+
client(description: string, fn: () => void): FluentCommandMomentBuilder;
|
|
90
|
+
client(descriptionOrFn: string | (() => void), fn?: () => void): FluentCommandMomentBuilder {
|
|
91
91
|
const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
|
|
92
92
|
|
|
93
|
-
debugCommand('Adding client block to
|
|
93
|
+
debugCommand('Adding client block to moment %s', this.moment.name);
|
|
94
94
|
|
|
95
95
|
if (callback) {
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
96
|
+
const moment = getCurrentMoment();
|
|
97
|
+
if (moment) {
|
|
98
98
|
debugCommand('Starting client block execution');
|
|
99
|
-
startClientBlock(
|
|
99
|
+
startClientBlock(moment);
|
|
100
100
|
callback();
|
|
101
101
|
endClientBlock();
|
|
102
102
|
debugCommand('Client block execution completed');
|
|
103
103
|
} else {
|
|
104
|
-
debugCommand('WARNING: No current
|
|
104
|
+
debugCommand('WARNING: No current moment found for client block');
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
return this;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
server(fn: () => void):
|
|
112
|
-
server(description: string, fn: () => void):
|
|
113
|
-
server(descriptionOrFn: string | (() => void), fn?: () => void):
|
|
111
|
+
server(fn: () => void): FluentCommandMomentBuilder;
|
|
112
|
+
server(description: string, fn: () => void): FluentCommandMomentBuilder;
|
|
113
|
+
server(descriptionOrFn: string | (() => void), fn?: () => void): FluentCommandMomentBuilder {
|
|
114
114
|
const description = typeof descriptionOrFn === 'string' ? descriptionOrFn : '';
|
|
115
115
|
const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
|
|
116
116
|
|
|
117
|
-
debugCommand('Adding server block to
|
|
117
|
+
debugCommand('Adding server block to moment %s, description: "%s"', this.moment.name, description);
|
|
118
118
|
|
|
119
119
|
if (callback) {
|
|
120
|
-
const
|
|
121
|
-
if (
|
|
120
|
+
const moment = getCurrentMoment();
|
|
121
|
+
if (moment) {
|
|
122
122
|
debugCommand('Starting server block execution');
|
|
123
|
-
startServerBlock(
|
|
123
|
+
startServerBlock(moment, description);
|
|
124
124
|
callback();
|
|
125
125
|
endServerBlock();
|
|
126
126
|
debugCommand('Server block execution completed');
|
|
127
127
|
} else {
|
|
128
|
-
debugCommand('WARNING: No current
|
|
128
|
+
debugCommand('WARNING: No current moment found for server block');
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
return this;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
via(integration: Integration | Integration[]):
|
|
135
|
+
via(integration: Integration | Integration[]): FluentCommandMomentBuilder {
|
|
136
136
|
const integrations = Array.isArray(integration) ? integration : [integration];
|
|
137
|
-
this.
|
|
138
|
-
debugCommand('Set integrations for
|
|
137
|
+
this.moment.via = integrations.map((i) => i.name);
|
|
138
|
+
debugCommand('Set integrations for moment %s: %o', this.moment.name, this.moment.via);
|
|
139
139
|
return this;
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
retries(count: number):
|
|
143
|
-
debugCommand('Setting retries for
|
|
142
|
+
retries(count: number): FluentCommandMomentBuilder {
|
|
143
|
+
debugCommand('Setting retries for moment %s: %d', this.moment.name, count);
|
|
144
144
|
// Store retries in additionalInstructions or metadata
|
|
145
|
-
this.
|
|
145
|
+
this.moment.additionalInstructions = `retries: ${count}`;
|
|
146
146
|
return this;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
request(query: unknown):
|
|
150
|
-
debugCommand('Setting request for
|
|
149
|
+
request(query: unknown): FluentCommandMomentBuilder {
|
|
150
|
+
debugCommand('Setting request for moment %s', this.moment.name);
|
|
151
151
|
if (typeof query === 'string') {
|
|
152
152
|
debugCommand('Request is string, length: %d', query.length);
|
|
153
|
-
this.
|
|
153
|
+
this.moment.request = query;
|
|
154
154
|
} else if (
|
|
155
155
|
query !== null &&
|
|
156
156
|
query !== undefined &&
|
|
@@ -159,8 +159,8 @@ class CommandSliceBuilderImpl implements FluentCommandSliceBuilder {
|
|
|
159
159
|
query.kind === 'Document'
|
|
160
160
|
) {
|
|
161
161
|
debugCommand('Request is GraphQL AST Document, converting to SDL');
|
|
162
|
-
this.
|
|
163
|
-
debugCommand('Converted SDL length: %d', this.
|
|
162
|
+
this.moment.request = print(query as ASTNode); // ✅ convert AST to SDL string
|
|
163
|
+
debugCommand('Converted SDL length: %d', this.moment.request.length);
|
|
164
164
|
} else {
|
|
165
165
|
debugCommand('ERROR: Invalid GraphQL query format');
|
|
166
166
|
throw new Error('Invalid GraphQL query format');
|
|
@@ -169,74 +169,74 @@ class CommandSliceBuilderImpl implements FluentCommandSliceBuilder {
|
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
class
|
|
173
|
-
private
|
|
172
|
+
class QueryMomentBuilderImpl implements FluentQueryMomentBuilder {
|
|
173
|
+
private moment: QueryMoment;
|
|
174
174
|
|
|
175
175
|
constructor(name: string, id?: string) {
|
|
176
|
-
debugQuery('Creating query
|
|
177
|
-
this.
|
|
176
|
+
debugQuery('Creating query moment: %s', name);
|
|
177
|
+
this.moment = {
|
|
178
178
|
type: 'query',
|
|
179
179
|
name,
|
|
180
180
|
id,
|
|
181
181
|
client: { specs: [] },
|
|
182
182
|
server: { description: '', specs: [], data: undefined },
|
|
183
183
|
};
|
|
184
|
-
|
|
185
|
-
debugQuery('Query
|
|
184
|
+
addMoment(this.moment);
|
|
185
|
+
debugQuery('Query moment added to scene: %s', name);
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
client(fn: () => void):
|
|
189
|
-
client(description: string, fn: () => void):
|
|
190
|
-
client(descriptionOrFn: string | (() => void), fn?: () => void):
|
|
188
|
+
client(fn: () => void): FluentQueryMomentBuilder;
|
|
189
|
+
client(description: string, fn: () => void): FluentQueryMomentBuilder;
|
|
190
|
+
client(descriptionOrFn: string | (() => void), fn?: () => void): FluentQueryMomentBuilder {
|
|
191
191
|
const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
|
|
192
192
|
|
|
193
|
-
debugQuery('Adding client block to
|
|
193
|
+
debugQuery('Adding client block to moment %s', this.moment.name);
|
|
194
194
|
|
|
195
195
|
if (callback) {
|
|
196
|
-
const
|
|
197
|
-
if (
|
|
196
|
+
const moment = getCurrentMoment();
|
|
197
|
+
if (moment) {
|
|
198
198
|
debugQuery('Starting client block execution');
|
|
199
|
-
startClientBlock(
|
|
199
|
+
startClientBlock(moment);
|
|
200
200
|
callback();
|
|
201
201
|
endClientBlock();
|
|
202
202
|
debugQuery('Client block execution completed');
|
|
203
203
|
} else {
|
|
204
|
-
debugQuery('WARNING: No current
|
|
204
|
+
debugQuery('WARNING: No current moment found for client block');
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
return this;
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
-
server(fn: () => void):
|
|
212
|
-
server(description: string, fn: () => void):
|
|
213
|
-
server(descriptionOrFn: string | (() => void), fn?: () => void):
|
|
211
|
+
server(fn: () => void): FluentQueryMomentBuilder;
|
|
212
|
+
server(description: string, fn: () => void): FluentQueryMomentBuilder;
|
|
213
|
+
server(descriptionOrFn: string | (() => void), fn?: () => void): FluentQueryMomentBuilder {
|
|
214
214
|
const description = typeof descriptionOrFn === 'string' ? descriptionOrFn : '';
|
|
215
215
|
const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
|
|
216
216
|
|
|
217
|
-
debugQuery('Adding server block to
|
|
217
|
+
debugQuery('Adding server block to moment %s, description: "%s"', this.moment.name, description);
|
|
218
218
|
|
|
219
219
|
if (callback) {
|
|
220
|
-
const
|
|
221
|
-
if (
|
|
220
|
+
const moment = getCurrentMoment();
|
|
221
|
+
if (moment) {
|
|
222
222
|
debugQuery('Starting server block execution');
|
|
223
|
-
startServerBlock(
|
|
223
|
+
startServerBlock(moment, description);
|
|
224
224
|
callback();
|
|
225
225
|
endServerBlock();
|
|
226
226
|
debugQuery('Server block execution completed');
|
|
227
227
|
} else {
|
|
228
|
-
debugQuery('WARNING: No current
|
|
228
|
+
debugQuery('WARNING: No current moment found for server block');
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
return this;
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
request(query: unknown):
|
|
236
|
-
debugQuery('Setting request for
|
|
235
|
+
request(query: unknown): FluentQueryMomentBuilder {
|
|
236
|
+
debugQuery('Setting request for moment %s', this.moment.name);
|
|
237
237
|
if (typeof query === 'string') {
|
|
238
238
|
debugQuery('Request is string, length: %d', query.length);
|
|
239
|
-
this.
|
|
239
|
+
this.moment.request = query;
|
|
240
240
|
} else if (
|
|
241
241
|
query !== null &&
|
|
242
242
|
query !== undefined &&
|
|
@@ -245,8 +245,8 @@ class QuerySliceBuilderImpl implements FluentQuerySliceBuilder {
|
|
|
245
245
|
query.kind === 'Document'
|
|
246
246
|
) {
|
|
247
247
|
debugQuery('Request is GraphQL AST Document, converting to SDL');
|
|
248
|
-
this.
|
|
249
|
-
debugQuery('Converted SDL length: %d', this.
|
|
248
|
+
this.moment.request = print(query as ASTNode); // ✅ convert AST to SDL string
|
|
249
|
+
debugQuery('Converted SDL length: %d', this.moment.request.length);
|
|
250
250
|
} else {
|
|
251
251
|
debugQuery('ERROR: Invalid GraphQL query format');
|
|
252
252
|
throw new Error('Invalid GraphQL query format');
|
|
@@ -255,92 +255,92 @@ class QuerySliceBuilderImpl implements FluentQuerySliceBuilder {
|
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
class
|
|
259
|
-
private
|
|
258
|
+
class ReactionMomentBuilderImpl implements FluentReactionMomentBuilder {
|
|
259
|
+
private moment: ReactMoment;
|
|
260
260
|
|
|
261
261
|
constructor(name: string, id?: string) {
|
|
262
|
-
debugReact('Creating reaction
|
|
263
|
-
this.
|
|
262
|
+
debugReact('Creating reaction moment: %s', name);
|
|
263
|
+
this.moment = {
|
|
264
264
|
type: 'react',
|
|
265
265
|
name,
|
|
266
266
|
id,
|
|
267
267
|
server: { specs: [], data: undefined },
|
|
268
268
|
};
|
|
269
|
-
|
|
270
|
-
debugReact('Reaction
|
|
269
|
+
addMoment(this.moment);
|
|
270
|
+
debugReact('Reaction moment added to scene: %s', name);
|
|
271
271
|
}
|
|
272
272
|
|
|
273
|
-
server(fn: () => void):
|
|
274
|
-
server(description: string, fn: () => void):
|
|
275
|
-
server(descriptionOrFn: string | (() => void), fn?: () => void):
|
|
273
|
+
server(fn: () => void): FluentReactionMomentBuilder;
|
|
274
|
+
server(description: string, fn: () => void): FluentReactionMomentBuilder;
|
|
275
|
+
server(descriptionOrFn: string | (() => void), fn?: () => void): FluentReactionMomentBuilder {
|
|
276
276
|
const description = typeof descriptionOrFn === 'string' ? descriptionOrFn : '';
|
|
277
277
|
const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
|
|
278
278
|
|
|
279
|
-
debugReact('Adding server block to
|
|
279
|
+
debugReact('Adding server block to moment %s, description: "%s"', this.moment.name, description);
|
|
280
280
|
|
|
281
281
|
if (callback) {
|
|
282
|
-
const
|
|
283
|
-
if (
|
|
282
|
+
const moment = getCurrentMoment();
|
|
283
|
+
if (moment) {
|
|
284
284
|
debugReact('Starting server block execution');
|
|
285
|
-
startServerBlock(
|
|
285
|
+
startServerBlock(moment, description);
|
|
286
286
|
callback();
|
|
287
287
|
endServerBlock();
|
|
288
288
|
debugReact('Server block execution completed');
|
|
289
289
|
} else {
|
|
290
|
-
debugReact('WARNING: No current
|
|
290
|
+
debugReact('WARNING: No current moment found for server block');
|
|
291
291
|
}
|
|
292
292
|
}
|
|
293
293
|
|
|
294
294
|
return this;
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
-
via(integration: Integration | Integration[]):
|
|
297
|
+
via(integration: Integration | Integration[]): FluentReactionMomentBuilder {
|
|
298
298
|
const integrations = Array.isArray(integration) ? integration : [integration];
|
|
299
|
-
this.
|
|
300
|
-
debugReact('Set integrations for
|
|
299
|
+
this.moment.via = integrations.map((i) => i.name);
|
|
300
|
+
debugReact('Set integrations for moment %s: %o', this.moment.name, this.moment.via);
|
|
301
301
|
return this;
|
|
302
302
|
}
|
|
303
303
|
|
|
304
|
-
retries(count: number):
|
|
305
|
-
debugReact('Setting retries for
|
|
304
|
+
retries(count: number): FluentReactionMomentBuilder {
|
|
305
|
+
debugReact('Setting retries for moment %s: %d', this.moment.name, count);
|
|
306
306
|
// Store retries in additionalInstructions or metadata
|
|
307
|
-
this.
|
|
307
|
+
this.moment.additionalInstructions = `retries: ${count}`;
|
|
308
308
|
return this;
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
311
|
|
|
312
|
-
class
|
|
313
|
-
private
|
|
312
|
+
class ExperienceMomentBuilderImpl implements FluentExperienceMomentBuilder {
|
|
313
|
+
private moment: ExperienceMoment;
|
|
314
314
|
|
|
315
315
|
constructor(name: string, id?: string) {
|
|
316
|
-
debugExperience('Creating experience
|
|
317
|
-
this.
|
|
316
|
+
debugExperience('Creating experience moment: %s', name);
|
|
317
|
+
this.moment = {
|
|
318
318
|
type: 'experience',
|
|
319
319
|
name,
|
|
320
320
|
id,
|
|
321
321
|
client: { specs: [] },
|
|
322
322
|
};
|
|
323
|
-
|
|
324
|
-
debugExperience('Experience
|
|
323
|
+
addMoment(this.moment);
|
|
324
|
+
debugExperience('Experience moment added to scene: %s', name);
|
|
325
325
|
}
|
|
326
326
|
|
|
327
|
-
client(fn: () => void):
|
|
328
|
-
client(description: string, fn: () => void):
|
|
329
|
-
client(descriptionOrFn: string | (() => void), fn?: () => void):
|
|
327
|
+
client(fn: () => void): FluentExperienceMomentBuilder;
|
|
328
|
+
client(description: string, fn: () => void): FluentExperienceMomentBuilder;
|
|
329
|
+
client(descriptionOrFn: string | (() => void), fn?: () => void): FluentExperienceMomentBuilder {
|
|
330
330
|
const callback = typeof descriptionOrFn === 'function' ? descriptionOrFn : fn;
|
|
331
331
|
|
|
332
|
-
debugExperience('Adding client block to
|
|
332
|
+
debugExperience('Adding client block to moment %s', this.moment.name);
|
|
333
333
|
|
|
334
334
|
if (callback) {
|
|
335
|
-
const
|
|
336
|
-
if (
|
|
335
|
+
const moment = getCurrentMoment();
|
|
336
|
+
if (moment) {
|
|
337
337
|
debugExperience('Starting client block execution');
|
|
338
|
-
startClientBlock(
|
|
338
|
+
startClientBlock(moment);
|
|
339
339
|
callback();
|
|
340
340
|
endClientBlock();
|
|
341
341
|
debugExperience('Client block execution completed');
|
|
342
342
|
} else {
|
|
343
|
-
debugExperience('WARNING: No current
|
|
343
|
+
debugExperience('WARNING: No current moment found for client block');
|
|
344
344
|
}
|
|
345
345
|
}
|
|
346
346
|
|
|
@@ -348,32 +348,32 @@ class ExperienceSliceBuilderImpl implements FluentExperienceSliceBuilder {
|
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
350
|
|
|
351
|
-
export const command = (name: string, id?: string):
|
|
352
|
-
debug('Creating command
|
|
353
|
-
return new
|
|
351
|
+
export const command = (name: string, id?: string): FluentCommandMomentBuilder => {
|
|
352
|
+
debug('Creating command moment: %s', name);
|
|
353
|
+
return new CommandMomentBuilderImpl(name, id);
|
|
354
354
|
};
|
|
355
355
|
|
|
356
|
-
export const query = (name: string, id?: string):
|
|
357
|
-
debug('Creating query
|
|
358
|
-
return new
|
|
356
|
+
export const query = (name: string, id?: string): FluentQueryMomentBuilder => {
|
|
357
|
+
debug('Creating query moment: %s', name);
|
|
358
|
+
return new QueryMomentBuilderImpl(name, id);
|
|
359
359
|
};
|
|
360
360
|
|
|
361
|
-
export const react = (name: string, id?: string):
|
|
362
|
-
debug('Creating react
|
|
363
|
-
return new
|
|
361
|
+
export const react = (name: string, id?: string): FluentReactionMomentBuilder => {
|
|
362
|
+
debug('Creating react moment: %s', name);
|
|
363
|
+
return new ReactionMomentBuilderImpl(name, id);
|
|
364
364
|
};
|
|
365
365
|
|
|
366
|
-
export const experience = (name: string, id?: string):
|
|
367
|
-
debug('Creating experience
|
|
368
|
-
return new
|
|
366
|
+
export const experience = (name: string, id?: string): FluentExperienceMomentBuilder => {
|
|
367
|
+
debug('Creating experience moment: %s', name);
|
|
368
|
+
return new ExperienceMomentBuilderImpl(name, id);
|
|
369
369
|
};
|
|
370
370
|
|
|
371
|
-
export const decide = (name: string, id?: string):
|
|
372
|
-
debug('Creating command
|
|
373
|
-
return new
|
|
371
|
+
export const decide = (name: string, id?: string): FluentCommandMomentBuilder => {
|
|
372
|
+
debug('Creating command moment via decide alias: %s', name);
|
|
373
|
+
return new CommandMomentBuilderImpl(name, id);
|
|
374
374
|
};
|
|
375
375
|
|
|
376
|
-
export const evolve = (name: string, id?: string):
|
|
377
|
-
debug('Creating query
|
|
378
|
-
return new
|
|
376
|
+
export const evolve = (name: string, id?: string): FluentQueryMomentBuilder => {
|
|
377
|
+
debug('Creating query moment via evolve alias: %s', name);
|
|
378
|
+
return new QueryMomentBuilderImpl(name, id);
|
|
379
379
|
};
|