@auto-engineer/narrative 1.88.0 → 1.90.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 +6 -6
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +92 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/parse-graphql-request.d.ts +17 -0
- package/dist/src/parse-graphql-request.d.ts.map +1 -0
- package/dist/src/parse-graphql-request.js +77 -0
- package/dist/src/parse-graphql-request.js.map +1 -0
- package/dist/src/validate-slice-requests.d.ts +9 -0
- package/dist/src/validate-slice-requests.d.ts.map +1 -0
- package/dist/src/validate-slice-requests.js +235 -0
- package/dist/src/validate-slice-requests.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/ketchup-plan.md +13 -0
- package/package.json +4 -4
- package/src/index.ts +4 -1
- package/src/parse-graphql-request.specs.ts +52 -0
- package/src/parse-graphql-request.ts +99 -0
- package/src/validate-slice-requests.specs.ts +850 -0
- package/src/validate-slice-requests.ts +298 -0
package/.turbo/turbo-build.log
CHANGED
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
|
|
2
|
-
> @auto-engineer/narrative@1.
|
|
2
|
+
> @auto-engineer/narrative@1.89.0 test /home/runner/work/auto-engineer/auto-engineer/packages/narrative
|
|
3
3
|
> vitest run --reporter=dot
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
[1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/auto-engineer/auto-engineer/packages/narrative[39m
|
|
7
7
|
|
|
8
|
-
[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m
|
|
8
|
+
[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m[33m[39m[32m·[39m
|
|
9
9
|
|
|
10
|
-
[2m Test Files [22m [1m[
|
|
11
|
-
[2m Tests [22m [1m[
|
|
12
|
-
[2m Start at [22m
|
|
13
|
-
[2m Duration [22m
|
|
10
|
+
[2m Test Files [22m [1m[32m20 passed[39m[22m[90m (20)[39m
|
|
11
|
+
[2m Tests [22m [1m[32m258 passed[39m[22m[90m (258)[39m
|
|
12
|
+
[2m Start at [22m 00:21:57
|
|
13
|
+
[2m Duration [22m 37.48s[2m (transform 8.60s, setup 0ms, collect 47.43s, tests 29.19s, environment 5ms, prepare 12.77s)[22m
|
|
14
14
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,97 @@
|
|
|
1
1
|
# @auto-engineer/flow
|
|
2
2
|
|
|
3
|
+
## 1.90.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`090369e`](https://github.com/BeOnAuto/auto-engineer/commit/090369eb6c4a788a051851d93ad78e147f0ffa15) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - - **server-generator-apollo-emmett**: filter event And-steps from react Then items
|
|
8
|
+
- **narrative**: export validateSliceRequests and add integration tests
|
|
9
|
+
- **narrative**: add nested field validation for query slice requests
|
|
10
|
+
- **narrative**: add query validation for operation type, state, and top-level fields
|
|
11
|
+
- **narrative**: add mutation validation to validate-slice-requests
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [`3311f9b`](https://github.com/BeOnAuto/auto-engineer/commit/3311f9bdbc2e133f094a054f1526f653886302ab) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - Standardized formatting and improved code readability in the create-auto-app package
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [[`3311f9b`](https://github.com/BeOnAuto/auto-engineer/commit/3311f9bdbc2e133f094a054f1526f653886302ab), [`090369e`](https://github.com/BeOnAuto/auto-engineer/commit/090369eb6c4a788a051851d93ad78e147f0ffa15)]:
|
|
18
|
+
- @auto-engineer/file-store@1.90.0
|
|
19
|
+
- @auto-engineer/id@1.90.0
|
|
20
|
+
- @auto-engineer/message-bus@1.90.0
|
|
21
|
+
|
|
22
|
+
## 1.89.0
|
|
23
|
+
|
|
24
|
+
### Minor Changes
|
|
25
|
+
|
|
26
|
+
- [`93ff5a5`](https://github.com/BeOnAuto/auto-engineer/commit/93ff5a559f087bb875b2b1e165713e1dc6fbea5b) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: embed instructions in scaffold templates
|
|
27
|
+
|
|
28
|
+
- [`514525d`](https://github.com/BeOnAuto/auto-engineer/commit/514525d0ae9542693fc44e6922fd0c31d229c8c9) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: export validateSliceRequests and add integration tests
|
|
29
|
+
|
|
30
|
+
- [`7af6ae4`](https://github.com/BeOnAuto/auto-engineer/commit/7af6ae46d50a7115da047d07824a4d3e4983338f) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: add nested field validation for query slice requests
|
|
31
|
+
|
|
32
|
+
- [`971394a`](https://github.com/BeOnAuto/auto-engineer/commit/971394ad8d47faad27acf6c4fa82d11010568cda) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: type-annotate aggregateStream + dynamic error listing
|
|
33
|
+
|
|
34
|
+
- [`dbfbe69`](https://github.com/BeOnAuto/auto-engineer/commit/dbfbe69e5fc1efb8a65df1d3d480b36c9666b95a) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: add validate-slice-requests skeleton with parse safety
|
|
35
|
+
|
|
36
|
+
- [`d7b3af9`](https://github.com/BeOnAuto/auto-engineer/commit/d7b3af912b1e9f7e4f0bfc91b65768341f87229c) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: add query validation for operation type, state, and top-level fields
|
|
37
|
+
|
|
38
|
+
- [`a36fc79`](https://github.com/BeOnAuto/auto-engineer/commit/a36fc79f40d236b49983574a7f8607e9028e3daf) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: filter linking field to primitive types only
|
|
39
|
+
|
|
40
|
+
- [`73ef7b1`](https://github.com/BeOnAuto/auto-engineer/commit/73ef7b1f2818e72cc5b1cc77400f44ed948e0d39) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: filter event And-steps from react Then items
|
|
41
|
+
|
|
42
|
+
- [`ea41643`](https://github.com/BeOnAuto/auto-engineer/commit/ea41643cbd1303f50313e7dd20d92d4f3a775114) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: use parsedRequest for command mutation names
|
|
43
|
+
|
|
44
|
+
- [`3e9cf93`](https://github.com/BeOnAuto/auto-engineer/commit/3e9cf93af40df9636ae33b9e749dd85ca0b0802e) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: add expectEvents typing shim to decide.specs.ts.ejs
|
|
45
|
+
|
|
46
|
+
- [`0231c5f`](https://github.com/BeOnAuto/auto-engineer/commit/0231c5f5a771786d6534c8a0f9d6dd2856d6b893) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: parseGraphQlRequest accepts mutation operations
|
|
47
|
+
|
|
48
|
+
- [`aacffe9`](https://github.com/BeOnAuto/auto-engineer/commit/aacffe9244a1b364f550caf9b0d5d9ce9c905c2c) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-nestjs**: use parsedRequest for mutation and query names
|
|
49
|
+
|
|
50
|
+
- [`a527ccc`](https://github.com/BeOnAuto/auto-engineer/commit/a527ccc39d7f769609252ebefcb4b26e5fe84316) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: add mutation validation to validate-slice-requests
|
|
51
|
+
|
|
52
|
+
### Patch Changes
|
|
53
|
+
|
|
54
|
+
- [`dc9b7d9`](https://github.com/BeOnAuto/auto-engineer/commit/dc9b7d9cbcebaf5e34025b6f08b9152f87a67073) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: update ketchup plan for bursts 13-14
|
|
55
|
+
|
|
56
|
+
- [`1d1f519`](https://github.com/BeOnAuto/auto-engineer/commit/1d1f519fa17ba95228e58ef12ce64e3919c0697d) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: add ketchup plan for validate-slice-requests
|
|
57
|
+
|
|
58
|
+
- [`8bbbc30`](https://github.com/BeOnAuto/auto-engineer/commit/8bbbc309734ff5dce3b51473f018caa31208fa7a) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: mark burst 18 done in ketchup plan
|
|
59
|
+
|
|
60
|
+
- [`aabe8ae`](https://github.com/BeOnAuto/auto-engineer/commit/aabe8ae4feb13e8ee4b6d3e8a7ef50bb845eaebf) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - - **server-generator-apollo-emmett**: derive stable metadata.now for ISO date fields
|
|
61
|
+
- **server-generator-apollo-emmett**: resolve findOne idField from events when missing in Then state
|
|
62
|
+
- **server-generator-apollo-emmett**: return array idField natively from extraction
|
|
63
|
+
- **server-implementer**: add prompt guardrails for phantom enums and hardcoded projections
|
|
64
|
+
- **server-generator-apollo-emmett**: align instruction comment with \_state parameter name
|
|
65
|
+
|
|
66
|
+
- [`5af523f`](https://github.com/BeOnAuto/auto-engineer/commit/5af523f9cb5d1a4e6275589e1f12173637c6458e) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: fix [object Object] serialization bugs
|
|
67
|
+
|
|
68
|
+
- [`a4053ef`](https://github.com/BeOnAuto/auto-engineer/commit/a4053ef91284b9718bacef58ebd3ab250d4cda79) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: update decide.specs.ts snapshots for dynamic errors
|
|
69
|
+
|
|
70
|
+
- [`b63c308`](https://github.com/BeOnAuto/auto-engineer/commit/b63c308209f0316ea3b0433a82d46dec8e15169a) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-implementer**: add anti-hardcoding rules for decide functions
|
|
71
|
+
|
|
72
|
+
- [`1947b66`](https://github.com/BeOnAuto/auto-engineer/commit/1947b66d0b4687abcde75f29fc32c8665b929582) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: move burst 17 to done in ketchup plan
|
|
73
|
+
|
|
74
|
+
- [`16c9541`](https://github.com/BeOnAuto/auto-engineer/commit/16c954130331be27f54f2e1ef451545b7e22161d) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: extract parseGraphQlRequest to narrative package
|
|
75
|
+
|
|
76
|
+
- [`bad8ef9`](https://github.com/BeOnAuto/auto-engineer/commit/bad8ef9ceb73f9b7efda58f821073ec9894ee7fb) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: rename ParsedGraphQlQuery to ParsedGraphQlOperation
|
|
77
|
+
|
|
78
|
+
- [`a058731`](https://github.com/BeOnAuto/auto-engineer/commit/a0587319d6772df61b4004df1584d884222e7304) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **global**: add ketchup plan for parsedRequest mutation names
|
|
79
|
+
|
|
80
|
+
- [`d6f6ef6`](https://github.com/BeOnAuto/auto-engineer/commit/d6f6ef6f79ceb712ccfcf00a22789c55d6e9a0b4) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: omit non-command fields from Then assertions
|
|
81
|
+
- **server-generator-apollo-emmett**: derive stable metadata.now for ISO date fields
|
|
82
|
+
- **server-generator-apollo-emmett**: resolve findOne idField from events when missing in Then state
|
|
83
|
+
- **server-generator-apollo-emmett**: return array idField natively from extraction
|
|
84
|
+
- **server-implementer**: add prompt guardrails for phantom enums and hardcoded projections
|
|
85
|
+
|
|
86
|
+
- [`667b53f`](https://github.com/BeOnAuto/auto-engineer/commit/667b53f02b3cc933efe520022dd2f85ba1fbec3b) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: move burst 14 to done in ketchup plan
|
|
87
|
+
|
|
88
|
+
- [`e69b385`](https://github.com/BeOnAuto/auto-engineer/commit/e69b38526ab9fd522ef91955a3ee98ed3c611473) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **narrative**: mark all bursts done in ketchup plan
|
|
89
|
+
|
|
90
|
+
- Updated dependencies [[`dc9b7d9`](https://github.com/BeOnAuto/auto-engineer/commit/dc9b7d9cbcebaf5e34025b6f08b9152f87a67073), [`93ff5a5`](https://github.com/BeOnAuto/auto-engineer/commit/93ff5a559f087bb875b2b1e165713e1dc6fbea5b), [`514525d`](https://github.com/BeOnAuto/auto-engineer/commit/514525d0ae9542693fc44e6922fd0c31d229c8c9), [`7af6ae4`](https://github.com/BeOnAuto/auto-engineer/commit/7af6ae46d50a7115da047d07824a4d3e4983338f), [`1d1f519`](https://github.com/BeOnAuto/auto-engineer/commit/1d1f519fa17ba95228e58ef12ce64e3919c0697d), [`8bbbc30`](https://github.com/BeOnAuto/auto-engineer/commit/8bbbc309734ff5dce3b51473f018caa31208fa7a), [`aabe8ae`](https://github.com/BeOnAuto/auto-engineer/commit/aabe8ae4feb13e8ee4b6d3e8a7ef50bb845eaebf), [`971394a`](https://github.com/BeOnAuto/auto-engineer/commit/971394ad8d47faad27acf6c4fa82d11010568cda), [`5af523f`](https://github.com/BeOnAuto/auto-engineer/commit/5af523f9cb5d1a4e6275589e1f12173637c6458e), [`a4053ef`](https://github.com/BeOnAuto/auto-engineer/commit/a4053ef91284b9718bacef58ebd3ab250d4cda79), [`dbfbe69`](https://github.com/BeOnAuto/auto-engineer/commit/dbfbe69e5fc1efb8a65df1d3d480b36c9666b95a), [`d7b3af9`](https://github.com/BeOnAuto/auto-engineer/commit/d7b3af912b1e9f7e4f0bfc91b65768341f87229c), [`a36fc79`](https://github.com/BeOnAuto/auto-engineer/commit/a36fc79f40d236b49983574a7f8607e9028e3daf), [`73ef7b1`](https://github.com/BeOnAuto/auto-engineer/commit/73ef7b1f2818e72cc5b1cc77400f44ed948e0d39), [`ea41643`](https://github.com/BeOnAuto/auto-engineer/commit/ea41643cbd1303f50313e7dd20d92d4f3a775114), [`3e9cf93`](https://github.com/BeOnAuto/auto-engineer/commit/3e9cf93af40df9636ae33b9e749dd85ca0b0802e), [`0231c5f`](https://github.com/BeOnAuto/auto-engineer/commit/0231c5f5a771786d6534c8a0f9d6dd2856d6b893), [`b63c308`](https://github.com/BeOnAuto/auto-engineer/commit/b63c308209f0316ea3b0433a82d46dec8e15169a), [`1947b66`](https://github.com/BeOnAuto/auto-engineer/commit/1947b66d0b4687abcde75f29fc32c8665b929582), [`aacffe9`](https://github.com/BeOnAuto/auto-engineer/commit/aacffe9244a1b364f550caf9b0d5d9ce9c905c2c), [`a527ccc`](https://github.com/BeOnAuto/auto-engineer/commit/a527ccc39d7f769609252ebefcb4b26e5fe84316), [`16c9541`](https://github.com/BeOnAuto/auto-engineer/commit/16c954130331be27f54f2e1ef451545b7e22161d), [`bad8ef9`](https://github.com/BeOnAuto/auto-engineer/commit/bad8ef9ceb73f9b7efda58f821073ec9894ee7fb), [`a058731`](https://github.com/BeOnAuto/auto-engineer/commit/a0587319d6772df61b4004df1584d884222e7304), [`d6f6ef6`](https://github.com/BeOnAuto/auto-engineer/commit/d6f6ef6f79ceb712ccfcf00a22789c55d6e9a0b4), [`667b53f`](https://github.com/BeOnAuto/auto-engineer/commit/667b53f02b3cc933efe520022dd2f85ba1fbec3b), [`e69b385`](https://github.com/BeOnAuto/auto-engineer/commit/e69b38526ab9fd522ef91955a3ee98ed3c611473)]:
|
|
91
|
+
- @auto-engineer/file-store@1.89.0
|
|
92
|
+
- @auto-engineer/id@1.89.0
|
|
93
|
+
- @auto-engineer/message-bus@1.89.0
|
|
94
|
+
|
|
3
95
|
## 1.88.0
|
|
4
96
|
|
|
5
97
|
### Minor Changes
|
package/dist/src/index.d.ts
CHANGED
|
@@ -10,9 +10,13 @@ export { getNarratives } from './getNarratives';
|
|
|
10
10
|
export { addAutoIds, hasAllIds } from './id';
|
|
11
11
|
export type { ExampleBuilder, GivenBuilder, SliceTypeValueInterface, ThenBuilder, WhenBuilder } from './narrative';
|
|
12
12
|
export { client, data, describe, example, it, narrative, narrative as flow, request, rule, SliceType, server, should, specs, thenError, } from './narrative';
|
|
13
|
+
export type { ParsedArg, ParsedGraphQlOperation } from './parse-graphql-request';
|
|
14
|
+
export { parseGraphQlRequest, parseSliceRequest } from './parse-graphql-request';
|
|
13
15
|
export * from './schema';
|
|
14
16
|
export { createNarrativeSpec, given as testGiven, when as testWhen } from './testing';
|
|
15
17
|
export type { GeneratedNarratives } from './transformers/model-to-narrative';
|
|
16
18
|
export { modelToNarrative } from './transformers/model-to-narrative';
|
|
17
19
|
export { detectQueryAction, extractQueryNameFromRequest } from './transformers/narrative-to-model/spec-processors';
|
|
20
|
+
export type { SliceRequestValidationError } from './validate-slice-requests';
|
|
21
|
+
export { validateSliceRequests } from './validate-slice-requests';
|
|
18
22
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,YAAY,EACV,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,cAAc,EACd,WAAW,EACX,KAAK,EACL,WAAW,EACX,aAAa,EACb,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,GAAG,GAAI,SAAS,oBAAoB,EAAE,GAAG,QAAQ,OAAO,EAAE,WAKtE,CAAC;AAEF,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,uBAAuB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnH,OAAO,EACL,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,EAAE,EACF,SAAS,EACT,SAAS,IAAI,IAAI,EACjB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,MAAM,EACN,KAAK,EACL,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,SAAS,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AACtF,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,YAAY,EACV,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,cAAc,EACd,WAAW,EACX,KAAK,EACL,WAAW,EACX,aAAa,EACb,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,GAAG,GAAI,SAAS,oBAAoB,EAAE,GAAG,QAAQ,OAAO,EAAE,WAKtE,CAAC;AAEF,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,uBAAuB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnH,OAAO,EACL,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,EAAE,EACF,SAAS,EACT,SAAS,IAAI,IAAI,EACjB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,MAAM,EACN,KAAK,EACL,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjF,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,SAAS,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AACtF,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AACnH,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -11,8 +11,10 @@ export { command, decide, evolve, experience, query, react } from './fluent-buil
|
|
|
11
11
|
export { getNarratives } from './getNarratives.js';
|
|
12
12
|
export { addAutoIds, hasAllIds } from './id/index.js';
|
|
13
13
|
export { client, data, describe, example, it, narrative, narrative as flow, request, rule, SliceType, server, should, specs, thenError, } from './narrative.js';
|
|
14
|
+
export { parseGraphQlRequest, parseSliceRequest } from './parse-graphql-request.js';
|
|
14
15
|
export * from './schema.js';
|
|
15
16
|
export { createNarrativeSpec, given as testGiven, when as testWhen } from './testing.js';
|
|
16
17
|
export { modelToNarrative } from './transformers/model-to-narrative/index.js';
|
|
17
18
|
export { detectQueryAction, extractQueryNameFromRequest } from './transformers/narrative-to-model/spec-processors.js';
|
|
19
|
+
export { validateSliceRequests } from './validate-slice-requests.js';
|
|
18
20
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAiBlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,OAA6B,EAAE,GAAG,MAAiB,EAAE,EAAE;IACzE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AAIF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAOzD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAE7C,OAAO,EACL,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,EAAE,EACF,SAAS,EACT,SAAS,IAAI,IAAI,EACjB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,MAAM,EACN,KAAK,EACL,SAAS,GACV,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAiBlC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,OAA6B,EAAE,GAAG,MAAiB,EAAE,EAAE;IACzE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AAIF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAOzD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAE7C,OAAO,EACL,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,EAAE,EACF,SAAS,EACT,SAAS,IAAI,IAAI,EACjB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,MAAM,EACN,KAAK,EACL,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjF,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,SAAS,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAEnH,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface ParsedArg {
|
|
2
|
+
name: string;
|
|
3
|
+
tsType: string;
|
|
4
|
+
graphqlType: string;
|
|
5
|
+
nullable: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface ParsedGraphQlOperation {
|
|
8
|
+
operationName: string;
|
|
9
|
+
args: ParsedArg[];
|
|
10
|
+
}
|
|
11
|
+
export declare function convertJsonAstToSdl(request: string): string;
|
|
12
|
+
export declare function parseGraphQlRequest(request: string): ParsedGraphQlOperation;
|
|
13
|
+
export declare function parseSliceRequest(slice: {
|
|
14
|
+
request?: string;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}): ParsedGraphQlOperation | undefined;
|
|
17
|
+
//# sourceMappingURL=parse-graphql-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-graphql-request.d.ts","sourceRoot":"","sources":["../../src/parse-graphql-request.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB;AA8BD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAY3D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,CAkC3E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,GAAG,sBAAsB,GAAG,SAAS,CAGrC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { parse, print } from 'graphql';
|
|
2
|
+
function getTypeName(typeNode) {
|
|
3
|
+
if (typeNode.kind === 'NamedType') {
|
|
4
|
+
return { graphqlType: typeNode.name.value, nullable: true };
|
|
5
|
+
}
|
|
6
|
+
else if (typeNode.kind === 'NonNullType') {
|
|
7
|
+
const inner = getTypeName(typeNode.type);
|
|
8
|
+
return { ...inner, nullable: false };
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return getTypeName(typeNode.type);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function graphqlToTs(type) {
|
|
15
|
+
switch (type) {
|
|
16
|
+
case 'String':
|
|
17
|
+
return 'string';
|
|
18
|
+
case 'Int':
|
|
19
|
+
case 'Float':
|
|
20
|
+
case 'Number':
|
|
21
|
+
return 'number';
|
|
22
|
+
case 'Boolean':
|
|
23
|
+
return 'boolean';
|
|
24
|
+
case 'Date':
|
|
25
|
+
return 'Date';
|
|
26
|
+
default:
|
|
27
|
+
return type;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function convertJsonAstToSdl(request) {
|
|
31
|
+
if (request.startsWith('{') && request.includes('"kind"')) {
|
|
32
|
+
try {
|
|
33
|
+
const ast = JSON.parse(request);
|
|
34
|
+
if (typeof ast === 'object' && ast !== null && 'kind' in ast && ast.kind === 'Document') {
|
|
35
|
+
return print(ast);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// If parsing fails, assume it's already a GraphQL string
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return request;
|
|
43
|
+
}
|
|
44
|
+
export function parseGraphQlRequest(request) {
|
|
45
|
+
const sdlRequest = convertJsonAstToSdl(request);
|
|
46
|
+
const ast = parse(sdlRequest);
|
|
47
|
+
const op = ast.definitions.find((d) => d.kind === 'OperationDefinition' && (d.operation === 'query' || d.operation === 'mutation'));
|
|
48
|
+
if (!op)
|
|
49
|
+
throw new Error('No query or mutation operation found');
|
|
50
|
+
const operationName = op.name?.value;
|
|
51
|
+
if (operationName == null)
|
|
52
|
+
throw new Error('Operation must have a name');
|
|
53
|
+
const args = (op.variableDefinitions ?? []).map((def) => {
|
|
54
|
+
const varName = def.variable.name.value;
|
|
55
|
+
const { graphqlType, nullable } = getTypeName(def.type);
|
|
56
|
+
return {
|
|
57
|
+
name: varName,
|
|
58
|
+
graphqlType,
|
|
59
|
+
tsType: graphqlToTs(graphqlType),
|
|
60
|
+
nullable,
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
const field = op.selectionSet.selections[0];
|
|
64
|
+
if (field?.kind !== 'Field' || !field.name.value) {
|
|
65
|
+
throw new Error('Selection must be a field');
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
operationName: field.name.value,
|
|
69
|
+
args,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export function parseSliceRequest(slice) {
|
|
73
|
+
if (slice.request == null)
|
|
74
|
+
return undefined;
|
|
75
|
+
return parseGraphQlRequest(slice.request);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=parse-graphql-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-graphql-request.js","sourceRoot":"","sources":["../../src/parse-graphql-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Model } from './schema';
|
|
2
|
+
export interface SliceRequestValidationError {
|
|
3
|
+
type: 'request_parse_error' | 'mutation_wrong_operation_type' | 'mutation_missing_input_arg' | 'mutation_input_type_mismatch' | 'mutation_message_not_found' | 'query_wrong_operation_type' | 'query_state_not_found' | 'query_field_not_found' | 'query_nested_field_not_found';
|
|
4
|
+
message: string;
|
|
5
|
+
flowName: string;
|
|
6
|
+
sliceName: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function validateSliceRequests(model: Model): SliceRequestValidationError[];
|
|
9
|
+
//# sourceMappingURL=validate-slice-requests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-slice-requests.d.ts","sourceRoot":"","sources":["../../src/validate-slice-requests.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,KAAK,EAAc,MAAM,UAAU,CAAC;AAEhE,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EACA,qBAAqB,GACrB,+BAA+B,GAC/B,4BAA4B,GAC5B,8BAA8B,GAC9B,4BAA4B,GAC5B,4BAA4B,GAC5B,uBAAuB,GACvB,uBAAuB,GACvB,8BAA8B,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AA+CD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,2BAA2B,EAAE,CAWjF"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { parse } from 'graphql';
|
|
2
|
+
import { convertJsonAstToSdl } from './parse-graphql-request.js';
|
|
3
|
+
function parseRequestSafe(request) {
|
|
4
|
+
const sdl = convertJsonAstToSdl(request);
|
|
5
|
+
let ast;
|
|
6
|
+
try {
|
|
7
|
+
ast = parse(sdl);
|
|
8
|
+
}
|
|
9
|
+
catch (e) {
|
|
10
|
+
return { ok: false, error: e instanceof Error ? e.message : String(e) };
|
|
11
|
+
}
|
|
12
|
+
const op = ast.definitions.find((d) => d.kind === 'OperationDefinition');
|
|
13
|
+
if (!op) {
|
|
14
|
+
return { ok: false, error: 'No operation found in request' };
|
|
15
|
+
}
|
|
16
|
+
if (!op.name) {
|
|
17
|
+
return { ok: false, error: 'Operation must have a name' };
|
|
18
|
+
}
|
|
19
|
+
return { ok: true, operation: op };
|
|
20
|
+
}
|
|
21
|
+
function validateSlice(slice, model, flowName) {
|
|
22
|
+
if (!slice.request || slice.request.trim() === '')
|
|
23
|
+
return [];
|
|
24
|
+
const sliceName = slice.name;
|
|
25
|
+
const parsed = parseRequestSafe(slice.request);
|
|
26
|
+
if (!parsed.ok) {
|
|
27
|
+
return [{ type: 'request_parse_error', message: parsed.error, flowName, sliceName }];
|
|
28
|
+
}
|
|
29
|
+
if (slice.type === 'command') {
|
|
30
|
+
return validateMutationRequest(parsed.operation, model, flowName, sliceName);
|
|
31
|
+
}
|
|
32
|
+
return validateQueryRequest(parsed.operation, model, slice, flowName, sliceName);
|
|
33
|
+
}
|
|
34
|
+
export function validateSliceRequests(model) {
|
|
35
|
+
const errors = [];
|
|
36
|
+
for (const narrative of model.narratives) {
|
|
37
|
+
for (const slice of narrative.slices) {
|
|
38
|
+
if (slice.type !== 'command' && slice.type !== 'query')
|
|
39
|
+
continue;
|
|
40
|
+
errors.push(...validateSlice(slice, model, narrative.name));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return errors;
|
|
44
|
+
}
|
|
45
|
+
function unwrapType(typeNode) {
|
|
46
|
+
if (typeNode.kind === 'NamedType')
|
|
47
|
+
return typeNode.name.value;
|
|
48
|
+
return unwrapType(typeNode.type);
|
|
49
|
+
}
|
|
50
|
+
function validateMutationRequest(operation, model, flowName, sliceName) {
|
|
51
|
+
const errors = [];
|
|
52
|
+
const operationName = operation.name.value;
|
|
53
|
+
if (operation.operation !== 'mutation') {
|
|
54
|
+
errors.push({
|
|
55
|
+
type: 'mutation_wrong_operation_type',
|
|
56
|
+
message: `Command slice '${sliceName}' request should be a mutation, but found ${operation.operation}`,
|
|
57
|
+
flowName,
|
|
58
|
+
sliceName,
|
|
59
|
+
});
|
|
60
|
+
return errors;
|
|
61
|
+
}
|
|
62
|
+
const inputVar = (operation.variableDefinitions ?? []).find((v) => v.variable.name.value === 'input');
|
|
63
|
+
if (!inputVar) {
|
|
64
|
+
errors.push({
|
|
65
|
+
type: 'mutation_missing_input_arg',
|
|
66
|
+
message: `Mutation '${operationName}' is missing required $input variable`,
|
|
67
|
+
flowName,
|
|
68
|
+
sliceName,
|
|
69
|
+
});
|
|
70
|
+
return errors;
|
|
71
|
+
}
|
|
72
|
+
const inputTypeName = unwrapType(inputVar.type);
|
|
73
|
+
const expectedTypeName = `${operationName}Input`;
|
|
74
|
+
if (inputTypeName !== expectedTypeName) {
|
|
75
|
+
errors.push({
|
|
76
|
+
type: 'mutation_input_type_mismatch',
|
|
77
|
+
message: `Mutation '${operationName}' input type should be '${expectedTypeName}', but found '${inputTypeName}'`,
|
|
78
|
+
flowName,
|
|
79
|
+
sliceName,
|
|
80
|
+
});
|
|
81
|
+
return errors;
|
|
82
|
+
}
|
|
83
|
+
const commandExists = model.messages.some((m) => m.type === 'command' && m.name === operationName);
|
|
84
|
+
if (!commandExists) {
|
|
85
|
+
errors.push({
|
|
86
|
+
type: 'mutation_message_not_found',
|
|
87
|
+
message: `No command message '${operationName}' found in model.messages`,
|
|
88
|
+
flowName,
|
|
89
|
+
sliceName,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return errors;
|
|
93
|
+
}
|
|
94
|
+
function isInlineObject(ts) {
|
|
95
|
+
return /^\{[\s\S]*\}$/.test(ts.trim());
|
|
96
|
+
}
|
|
97
|
+
function isInlineObjectArray(ts) {
|
|
98
|
+
const t = ts.trim();
|
|
99
|
+
return /^Array<\{[\s\S]*\}>$/.test(t) || /^\{[\s\S]*\}\[\]$/.test(t);
|
|
100
|
+
}
|
|
101
|
+
function extractObjectBody(tsType) {
|
|
102
|
+
const t = tsType.trim();
|
|
103
|
+
let inner;
|
|
104
|
+
if (t.startsWith('Array<{') && t.endsWith('}>')) {
|
|
105
|
+
inner = t.slice(6, -1);
|
|
106
|
+
}
|
|
107
|
+
else if (t.endsWith('[]')) {
|
|
108
|
+
inner = t.slice(0, -2).trim();
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
inner = t;
|
|
112
|
+
}
|
|
113
|
+
const match = inner.match(/^\{([\s\S]*)\}$/);
|
|
114
|
+
return match ? match[1] : null;
|
|
115
|
+
}
|
|
116
|
+
function splitFieldsRespectingNesting(body) {
|
|
117
|
+
const fields = [];
|
|
118
|
+
let current = '';
|
|
119
|
+
let depth = 0;
|
|
120
|
+
for (const char of body) {
|
|
121
|
+
if (char === '<' || char === '{')
|
|
122
|
+
depth++;
|
|
123
|
+
if (char === '>' || char === '}')
|
|
124
|
+
depth--;
|
|
125
|
+
if ((char === ';' || char === ',') && depth === 0) {
|
|
126
|
+
const trimmed = current.trim();
|
|
127
|
+
if (trimmed)
|
|
128
|
+
fields.push(trimmed);
|
|
129
|
+
current = '';
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
current += char;
|
|
133
|
+
}
|
|
134
|
+
const trimmed = current.trim();
|
|
135
|
+
if (trimmed)
|
|
136
|
+
fields.push(trimmed);
|
|
137
|
+
return fields;
|
|
138
|
+
}
|
|
139
|
+
function extractInlineFieldNames(tsType) {
|
|
140
|
+
const body = extractObjectBody(tsType);
|
|
141
|
+
if (body === null)
|
|
142
|
+
return [];
|
|
143
|
+
return splitFieldsRespectingNesting(body)
|
|
144
|
+
.map((part) => part.split(':')[0].trim())
|
|
145
|
+
.filter((name) => name.length > 0);
|
|
146
|
+
}
|
|
147
|
+
function resolveNestedFieldNames(fieldType, model) {
|
|
148
|
+
const trimmed = fieldType.trim();
|
|
149
|
+
if (isInlineObject(trimmed) || isInlineObjectArray(trimmed)) {
|
|
150
|
+
return extractInlineFieldNames(trimmed);
|
|
151
|
+
}
|
|
152
|
+
const referencedMessage = model.messages.find((m) => m.name === trimmed);
|
|
153
|
+
if (referencedMessage) {
|
|
154
|
+
return referencedMessage.fields.map((f) => f.name);
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
function extractSelections(selectionSet) {
|
|
159
|
+
const fields = [];
|
|
160
|
+
for (const sel of selectionSet.selections) {
|
|
161
|
+
if (sel.kind !== 'Field')
|
|
162
|
+
continue;
|
|
163
|
+
if (sel.name.value === '__typename')
|
|
164
|
+
continue;
|
|
165
|
+
const field = { name: sel.name.value };
|
|
166
|
+
if (sel.selectionSet) {
|
|
167
|
+
field.children = extractSelections(sel.selectionSet);
|
|
168
|
+
}
|
|
169
|
+
fields.push(field);
|
|
170
|
+
}
|
|
171
|
+
return fields;
|
|
172
|
+
}
|
|
173
|
+
function validateQueryRequest(operation, model, slice, flowName, sliceName) {
|
|
174
|
+
const errors = [];
|
|
175
|
+
const operationName = operation.name.value;
|
|
176
|
+
if (operation.operation !== 'query') {
|
|
177
|
+
errors.push({
|
|
178
|
+
type: 'query_wrong_operation_type',
|
|
179
|
+
message: `Query slice '${sliceName}' request should be a query, but found ${operation.operation}`,
|
|
180
|
+
flowName,
|
|
181
|
+
sliceName,
|
|
182
|
+
});
|
|
183
|
+
return errors;
|
|
184
|
+
}
|
|
185
|
+
const targetName = slice.server?.data?.items?.[0]?.target?.name;
|
|
186
|
+
if (!targetName)
|
|
187
|
+
return errors;
|
|
188
|
+
const stateMessage = model.messages.find((m) => m.type === 'state' && m.name === targetName);
|
|
189
|
+
if (!stateMessage) {
|
|
190
|
+
errors.push({
|
|
191
|
+
type: 'query_state_not_found',
|
|
192
|
+
message: `State '${targetName}' referenced by query '${operationName}' not found in model.messages`,
|
|
193
|
+
flowName,
|
|
194
|
+
sliceName,
|
|
195
|
+
});
|
|
196
|
+
return errors;
|
|
197
|
+
}
|
|
198
|
+
const rootSelection = operation.selectionSet.selections[0];
|
|
199
|
+
if (!rootSelection || rootSelection.kind !== 'Field' || !rootSelection.selectionSet)
|
|
200
|
+
return errors;
|
|
201
|
+
const selectedFields = extractSelections(rootSelection.selectionSet);
|
|
202
|
+
const stateFieldNames = new Set(stateMessage.fields.map((f) => f.name));
|
|
203
|
+
for (const sel of selectedFields) {
|
|
204
|
+
if (!stateFieldNames.has(sel.name)) {
|
|
205
|
+
errors.push({
|
|
206
|
+
type: 'query_field_not_found',
|
|
207
|
+
message: `Field '${sel.name}' in query '${operationName}' not found on state '${targetName}'`,
|
|
208
|
+
flowName,
|
|
209
|
+
sliceName,
|
|
210
|
+
});
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (sel.children && sel.children.length > 0) {
|
|
214
|
+
const stateField = stateMessage.fields.find((f) => f.name === sel.name);
|
|
215
|
+
if (!stateField)
|
|
216
|
+
continue;
|
|
217
|
+
const nestedNames = resolveNestedFieldNames(stateField.type, model);
|
|
218
|
+
if (nestedNames === null)
|
|
219
|
+
continue;
|
|
220
|
+
const nestedNameSet = new Set(nestedNames);
|
|
221
|
+
for (const child of sel.children) {
|
|
222
|
+
if (!nestedNameSet.has(child.name)) {
|
|
223
|
+
errors.push({
|
|
224
|
+
type: 'query_nested_field_not_found',
|
|
225
|
+
message: `Nested field '${child.name}' in query '${operationName}' not found on type of '${sel.name}'`,
|
|
226
|
+
flowName,
|
|
227
|
+
sliceName,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return errors;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=validate-slice-requests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-slice-requests.js","sourceRoot":"","sources":["../../src/validate-slice-requests.ts"],"names":[],"mappings":"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"}
|