postgraphile 5.0.0-beta.8 → 5.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +2274 -4
  2. package/README.md +5 -11
  3. package/dist/cli.d.ts +2 -3
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +13 -12
  6. package/dist/cli.js.map +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +19 -8
  9. package/dist/index.js.map +1 -1
  10. package/dist/plugins/PgV4BehaviorPlugin.d.ts +3 -0
  11. package/dist/plugins/PgV4BehaviorPlugin.d.ts.map +1 -1
  12. package/dist/plugins/PgV4BehaviorPlugin.js +52 -51
  13. package/dist/plugins/PgV4BehaviorPlugin.js.map +1 -1
  14. package/dist/plugins/PgV4InflectionPlugin.d.ts +3 -0
  15. package/dist/plugins/PgV4InflectionPlugin.d.ts.map +1 -1
  16. package/dist/plugins/PgV4InflectionPlugin.js +17 -4
  17. package/dist/plugins/PgV4InflectionPlugin.js.map +1 -1
  18. package/dist/plugins/PgV4SimpleSubscriptionsPlugin.d.ts +2 -0
  19. package/dist/plugins/PgV4SimpleSubscriptionsPlugin.d.ts.map +1 -0
  20. package/dist/plugins/PgV4SimpleSubscriptionsPlugin.js +87 -0
  21. package/dist/plugins/PgV4SimpleSubscriptionsPlugin.js.map +1 -0
  22. package/dist/plugins/PgV4SmartTagsPlugin.d.ts +6 -0
  23. package/dist/plugins/PgV4SmartTagsPlugin.d.ts.map +1 -1
  24. package/dist/plugins/PgV4SmartTagsPlugin.js +37 -14
  25. package/dist/plugins/PgV4SmartTagsPlugin.js.map +1 -1
  26. package/dist/presets/amber.d.ts +1 -3
  27. package/dist/presets/amber.d.ts.map +1 -1
  28. package/dist/presets/amber.js +2 -4
  29. package/dist/presets/amber.js.map +1 -1
  30. package/dist/presets/lazy-jwt.d.ts +8 -1
  31. package/dist/presets/lazy-jwt.d.ts.map +1 -1
  32. package/dist/presets/lazy-jwt.js +18 -11
  33. package/dist/presets/lazy-jwt.js.map +1 -1
  34. package/dist/presets/relay.d.ts +8 -4
  35. package/dist/presets/relay.d.ts.map +1 -1
  36. package/dist/presets/relay.js +101 -96
  37. package/dist/presets/relay.js.map +1 -1
  38. package/dist/presets/v4.d.ts +29 -5
  39. package/dist/presets/v4.d.ts.map +1 -1
  40. package/dist/presets/v4.js +166 -38
  41. package/dist/presets/v4.js.map +1 -1
  42. package/dist/version.d.ts +1 -1
  43. package/dist/version.d.ts.map +1 -1
  44. package/dist/version.js +1 -1
  45. package/dist/version.js.map +1 -1
  46. package/fwd/@dataplan/pg/pg-sql2/index.d.ts +1 -0
  47. package/fwd/@dataplan/pg/pg-sql2/index.js +1 -0
  48. package/fwd/grafast/mermaid/index.d.ts +1 -0
  49. package/fwd/grafast/mermaid/index.js +1 -0
  50. package/fwd/grafserv/envelop/index.d.ts +1 -0
  51. package/fwd/grafserv/envelop/index.js +1 -0
  52. package/fwd/grafserv/hono/v4/index.d.ts +1 -0
  53. package/fwd/grafserv/hono/v4/index.js +1 -0
  54. package/fwd/grafserv/koa/v3/index.d.ts +1 -0
  55. package/fwd/grafserv/koa/v3/index.js +1 -0
  56. package/fwd/grafserv/lambda/v1/index.d.ts +1 -0
  57. package/fwd/grafserv/lambda/v1/index.js +1 -0
  58. package/fwd/grafserv/ruru/static/index.d.ts +1 -0
  59. package/fwd/grafserv/ruru/static/index.js +1 -0
  60. package/fwd/grafserv/whatwg-node__server/v4/index.d.ts +1 -0
  61. package/fwd/grafserv/whatwg-node__server/v4/index.js +1 -0
  62. package/fwd/graphile-build-pg/@dataplan/pg/adaptors/pg/index.d.ts +1 -0
  63. package/fwd/graphile-build-pg/@dataplan/pg/adaptors/pg/index.js +1 -0
  64. package/fwd/graphile-build-pg/@dataplan/pg/index.d.ts +1 -0
  65. package/fwd/graphile-build-pg/@dataplan/pg/index.js +1 -0
  66. package/fwd/graphile-build-pg/@dataplan/pg/pg-sql2/index.d.ts +1 -0
  67. package/fwd/graphile-build-pg/@dataplan/pg/pg-sql2/index.js +1 -0
  68. package/fwd/graphile-build-pg/pg-sql2/index.d.ts +1 -0
  69. package/fwd/graphile-build-pg/pg-sql2/index.js +1 -0
  70. package/package.json +110 -48
package/CHANGELOG.md CHANGED
@@ -1,5 +1,2279 @@
1
1
  # postgraphile
2
2
 
3
+ ## 5.0.0-rc.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#2767](https://github.com/graphile/crystal/pull/2767)
8
+ [`9797500`](https://github.com/graphile/crystal/commit/9797500071f4bbd0cc1b73c74e7f402cb1bb687f)
9
+ Thanks [@benjie](https://github.com/benjie)! - Use tuple comparison for cursor
10
+ pagination when possible.
11
+
12
+ - [#2736](https://github.com/graphile/crystal/pull/2736)
13
+ [`3fb7111`](https://github.com/graphile/crystal/commit/3fb71118462ba2d97f045023c715e4b0a447766a)
14
+ Thanks [@benjie](https://github.com/benjie)! - `wrapPlans()` now automatically
15
+ applies `fieldArgs` when you call the underlying `plan()`, so your wrapper
16
+ applies _after_ field args have been applied. This helps address invalid plan
17
+ heirarchy issues due to side effects your plan wrappers may wish to add and
18
+ similar. Opt out via
19
+ `{ autoApplyFieldArgs: false, plan(plan, $parent, fieldArgs) { ... } }`.
20
+
21
+ - [#2752](https://github.com/graphile/crystal/pull/2752)
22
+ [`92781a1`](https://github.com/graphile/crystal/commit/92781a183b3548902ed92b152ae915d597d62b97)
23
+ Thanks [@benjie](https://github.com/benjie)! - Softens the requirements for a
24
+ column/relation to be treated as "indexed" to reflect the optimizations in
25
+ Postgres v18+. (This may result in more fields, filters, orders and relations
26
+ appearing in your PostGraphile schema - you can use
27
+ `@behavior -filterBy -orderBy` on columns and
28
+ `@behavior -select -list -connection -single -manyToMany` on foreign key
29
+ constraints to remove them again.)
30
+
31
+ - [#2745](https://github.com/graphile/crystal/pull/2745)
32
+ [`71adb87`](https://github.com/graphile/crystal/commit/71adb87f21069f70df1c1f8b90146bd176bd30fe)
33
+ Thanks [@benjie](https://github.com/benjie)! - V4 compat with smart tags: only
34
+ add behavior if non-empty.
35
+
36
+ - [#2756](https://github.com/graphile/crystal/pull/2756)
37
+ [`982c1a5`](https://github.com/graphile/crystal/commit/982c1a566da21706f85c7bfb0adda210e251e6e1)
38
+ Thanks [@benjie](https://github.com/benjie)! - Fixes bug with parsing arrays
39
+ that use alternative delimeters (e.g. `;` instead of `,`) - for example
40
+ `box[]`.
41
+
42
+ - [#2777](https://github.com/graphile/crystal/pull/2777)
43
+ [`6a4e3b9`](https://github.com/graphile/crystal/commit/6a4e3b9ec182f7d066600aee0f8cc21d451b0ae2)
44
+ Thanks [@benjie](https://github.com/benjie)! - Implement queue for
45
+ `watchGather`/`watchSchema`/etc and integrate with grafserv's `setPreset`
46
+ middleware. Promises returned by such now delay schema application, preventing
47
+ growing concurrent work.
48
+
49
+ - [#2758](https://github.com/graphile/crystal/pull/2758)
50
+ [`eb39702`](https://github.com/graphile/crystal/commit/eb3970215a61a78e18359e6ebb473c2cb3991bd7)
51
+ Thanks [@benjie](https://github.com/benjie)! - Apply `pgOrderByNullsLast` to
52
+ computed columns too.
53
+
54
+ - [#2777](https://github.com/graphile/crystal/pull/2777)
55
+ [`c6cbe61`](https://github.com/graphile/crystal/commit/c6cbe6175b0f1f034db59d42cbe594e7d329aba6)
56
+ Thanks [@benjie](https://github.com/benjie)! - Tighten our public API surface
57
+ by:
58
+ - renaming `EventStreamHeandlerResult` to the correctly spelt
59
+ `EventStreamHandlerResult` (and keeping only a deprecated alias for the old
60
+ name)
61
+ - dropping the long-deprecated Grafast exports `InterfaceOrUnionPlans` (use
62
+ `InterfacePlan` or `UnionPlan` as appropriate), `deepEval` (should be
63
+ `applyTransforms`) and `DeepEvalStep` (should be `ApplyTransformsStep`)
64
+ - removing the `PgAdaptorOptions` alias in favour of `PgAdaptorSettings`
65
+ - deleting the PostGraphile preset aliases `postgraphilePresetAmber` should be
66
+ `PostGraphileAmberPreset`) and `PgRelayPreset` (should be
67
+ `PostGraphileRelayPreset`), and updating all first-party usage to the
68
+ canonical names
69
+
70
+ - [`8a5a7c5`](https://github.com/graphile/crystal/commit/8a5a7c536fc4b9b702600c5cc3d413724670c327)
71
+ Thanks [@benjie](https://github.com/benjie)! - Bump to release candidate
72
+
73
+ - [#2785](https://github.com/graphile/crystal/pull/2785)
74
+ [`b6821f5`](https://github.com/graphile/crystal/commit/b6821f5f4dc13abd0b605be7396c1b3c36e66177)
75
+ Thanks [@benjie](https://github.com/benjie)! - Fix types for abstract type's
76
+ `planType` method:
77
+ 1. `AbtractTypePlan`'s `TSpecifier` generic is now the first generic parameter
78
+ (previously second) and now represents the specifier _data_, not the
79
+ _step_.
80
+ 2. Existence of `planType`'s second parameter (`info`) is now reflected in the
81
+ types.
82
+ 3. The same changes are made for `UnionPlan` and `InterfacePlan`.
83
+
84
+ If you were using `graphql-codegen-grafast`, be sure to update to the latest
85
+ version and regenerate the types so these changes are reflected.
86
+
87
+ - Updated dependencies
88
+ [[`9797500`](https://github.com/graphile/crystal/commit/9797500071f4bbd0cc1b73c74e7f402cb1bb687f),
89
+ [`be318e6`](https://github.com/graphile/crystal/commit/be318e666c18ee06e62291d3e7ed7d0d1345eb3b),
90
+ [`abb623d`](https://github.com/graphile/crystal/commit/abb623d59e517c0949f0fef5440b817103c685bf),
91
+ [`3fb7111`](https://github.com/graphile/crystal/commit/3fb71118462ba2d97f045023c715e4b0a447766a),
92
+ [`31b388c`](https://github.com/graphile/crystal/commit/31b388c6d5546640af7dcf4e6021643e47892ed1),
93
+ [`8a852d2`](https://github.com/graphile/crystal/commit/8a852d21c80c7b06f2b3dd9fa01727e2d8a5522b),
94
+ [`92781a1`](https://github.com/graphile/crystal/commit/92781a183b3548902ed92b152ae915d597d62b97),
95
+ [`930240a`](https://github.com/graphile/crystal/commit/930240a4a7d3373f5691d495df752bb8fedac2af),
96
+ [`7b86454`](https://github.com/graphile/crystal/commit/7b864546fa81803ce0e573a2efa2e7f0905b2040),
97
+ [`42a0785`](https://github.com/graphile/crystal/commit/42a0785ddabf58812a22d764eeddfde9362974e5),
98
+ [`d196d60`](https://github.com/graphile/crystal/commit/d196d60664fbc9ffd410c11645db27554b22ac0b),
99
+ [`982c1a5`](https://github.com/graphile/crystal/commit/982c1a566da21706f85c7bfb0adda210e251e6e1),
100
+ [`6a4e3b9`](https://github.com/graphile/crystal/commit/6a4e3b9ec182f7d066600aee0f8cc21d451b0ae2),
101
+ [`eb39702`](https://github.com/graphile/crystal/commit/eb3970215a61a78e18359e6ebb473c2cb3991bd7),
102
+ [`c6cbe61`](https://github.com/graphile/crystal/commit/c6cbe6175b0f1f034db59d42cbe594e7d329aba6),
103
+ [`d4ac603`](https://github.com/graphile/crystal/commit/d4ac603da7df6ea01aaa483a7cb29b1e514a90cd),
104
+ [`f23e0e0`](https://github.com/graphile/crystal/commit/f23e0e0da9105a973dd8ac76f8ae519345d0a5b1),
105
+ [`8a5a7c5`](https://github.com/graphile/crystal/commit/8a5a7c536fc4b9b702600c5cc3d413724670c327),
106
+ [`ea0135f`](https://github.com/graphile/crystal/commit/ea0135fac3f43850b65828f2ff2b01a34cfdff15),
107
+ [`91b8376`](https://github.com/graphile/crystal/commit/91b83765f9ded133031c1de53d6b3926c8011bf5),
108
+ [`b6821f5`](https://github.com/graphile/crystal/commit/b6821f5f4dc13abd0b605be7396c1b3c36e66177)]:
109
+ - @dataplan/pg@1.0.0-rc.1
110
+ - grafast@1.0.0-rc.1
111
+ - graphile-utils@5.0.0-rc.1
112
+ - pg-sql2@5.0.0-rc.1
113
+ - graphile-build-pg@5.0.0-rc.1
114
+ - graphile-build@5.0.0-rc.1
115
+ - grafserv@1.0.0-rc.1
116
+ - @dataplan/json@1.0.0-rc.1
117
+ - graphile-config@1.0.0-rc.1
118
+ - tamedevil@0.1.0-rc.1
119
+ - @graphile/lru@5.0.0-rc.1
120
+
121
+ ## 5.0.0-beta.49
122
+
123
+ ### Patch Changes
124
+
125
+ - [#2730](https://github.com/graphile/crystal/pull/2730)
126
+ [`4c3cf22`](https://github.com/graphile/crystal/commit/4c3cf22592f44cb28e399434474ca5fcef0e1a3b)
127
+ Thanks [@benjie](https://github.com/benjie)! - Update `graphql` version range
128
+
129
+ - [#2142](https://github.com/graphile/crystal/pull/2142)
130
+ [`0465b4a`](https://github.com/graphile/crystal/commit/0465b4a038cc8d7ef4a857fb929a3c3b0104441c)
131
+ Thanks [@benjie](https://github.com/benjie)! - GraphQL v16.9.0+ is now
132
+ required for enum thunk support (enums will now break without this)
133
+
134
+ - [#2723](https://github.com/graphile/crystal/pull/2723)
135
+ [`e790f7a`](https://github.com/graphile/crystal/commit/e790f7ac7933c8ed01465688e20c2af76d2a79e8)
136
+ Thanks [@benjie](https://github.com/benjie)! - `@dataplan/pg` now exports
137
+ `sql` from `pg-sql2` and also adds forwards to the whole module
138
+ (`import ... from '@dataplan/pg/pg-sql2'`)
139
+
140
+ - [#2721](https://github.com/graphile/crystal/pull/2721)
141
+ [`a27b599`](https://github.com/graphile/crystal/commit/a27b5996544169314575d2361bc438515a4a3db5)
142
+ Thanks [@benjie](https://github.com/benjie)! - Simple subscriptions plugin now
143
+ supports `initialEvent` argument, as in V4.
144
+
145
+ - [#2718](https://github.com/graphile/crystal/pull/2718)
146
+ [`74e15d5`](https://github.com/graphile/crystal/commit/74e15d5bf2c6aada713711722aa31fb8b2da232d)
147
+ Thanks [@benjie](https://github.com/benjie)! - Port the
148
+ ["enum table domains" feature](https://github.com/graphile/graphile-engine/pull/832)
149
+ from PostGraphile V4, so enum table values can be used as input and output
150
+ from PostgreSQL functions.
151
+
152
+ - [#2725](https://github.com/graphile/crystal/pull/2725)
153
+ [`d414491`](https://github.com/graphile/crystal/commit/d41449156d4983466fee4f34e3e361df4d561b3e)
154
+ Thanks [@benjie](https://github.com/benjie)! - Enable partitions to be exposed
155
+ via the `@partitionExpose child` or `@partitionExpose both` smart tags on the
156
+ partitioned table. Also adds a global configuration option for managing the
157
+ default setting for this (`parent` by default: only expose the parent
158
+ partitioned table, not its underlying child partitions).
159
+ - Updated dependencies
160
+ [[`2814c63`](https://github.com/graphile/crystal/commit/2814c639983437e9883de040c64cceda433a2687),
161
+ [`4c3cf22`](https://github.com/graphile/crystal/commit/4c3cf22592f44cb28e399434474ca5fcef0e1a3b),
162
+ [`7ce4d41`](https://github.com/graphile/crystal/commit/7ce4d41f9befce7c26e52cbfd7bf98febc764968),
163
+ [`0465b4a`](https://github.com/graphile/crystal/commit/0465b4a038cc8d7ef4a857fb929a3c3b0104441c),
164
+ [`71e0af2`](https://github.com/graphile/crystal/commit/71e0af265c90e9d9d0dc764cc552f7470e860251),
165
+ [`a26ad3e`](https://github.com/graphile/crystal/commit/a26ad3ebcc008acb9a6f5216e3f27ef74f138953),
166
+ [`a0a6082`](https://github.com/graphile/crystal/commit/a0a6082173247caf8f76df925a9d8e7926792663),
167
+ [`ab96e5f`](https://github.com/graphile/crystal/commit/ab96e5f58aa3315db9b85b452b048f600cb8353e),
168
+ [`278b4d3`](https://github.com/graphile/crystal/commit/278b4d398eb7db1935caba4155e1d1727284a370),
169
+ [`eaa771b`](https://github.com/graphile/crystal/commit/eaa771b34dbdac1c4d701faa8fb5947e9cf1d1be),
170
+ [`b539002`](https://github.com/graphile/crystal/commit/b539002a627bf3d595ffb994e871dfc2eb5c2b64),
171
+ [`e28e4d9`](https://github.com/graphile/crystal/commit/e28e4d9b651a8ee40582006de34dd011309ba4e1),
172
+ [`020b579`](https://github.com/graphile/crystal/commit/020b5791b57282d6fcbd42d0cbfd8be9e95cee47),
173
+ [`e790f7a`](https://github.com/graphile/crystal/commit/e790f7ac7933c8ed01465688e20c2af76d2a79e8),
174
+ [`32ba479`](https://github.com/graphile/crystal/commit/32ba479160eb5b9ceb5dbb10161a37b62a20f3aa),
175
+ [`c8412aa`](https://github.com/graphile/crystal/commit/c8412aa73875aafe64317cc4c655654a86486047),
176
+ [`13eb44b`](https://github.com/graphile/crystal/commit/13eb44b0c8fb56252f1ecb3aea99d8f0fe10e3fa),
177
+ [`d0c15cc`](https://github.com/graphile/crystal/commit/d0c15ccc32ed8dec19ff068f851529132dc93302),
178
+ [`74e15d5`](https://github.com/graphile/crystal/commit/74e15d5bf2c6aada713711722aa31fb8b2da232d),
179
+ [`3488ac0`](https://github.com/graphile/crystal/commit/3488ac0e0e3ffe0dd2a072858390df51e0ebaf39),
180
+ [`b20a63f`](https://github.com/graphile/crystal/commit/b20a63f5ee77734ce2e3aa71f9f4de3c00e27e55),
181
+ [`bffbb77`](https://github.com/graphile/crystal/commit/bffbb775ea76d1add85422866a6b7e904d2311af),
182
+ [`d414491`](https://github.com/graphile/crystal/commit/d41449156d4983466fee4f34e3e361df4d561b3e),
183
+ [`c48ca48`](https://github.com/graphile/crystal/commit/c48ca4840227b8e5e6a1dc198a189cfd911a602b),
184
+ [`05f3e44`](https://github.com/graphile/crystal/commit/05f3e449a771aefcd9a81c6275a376ad87e3d316),
185
+ [`81c62bb`](https://github.com/graphile/crystal/commit/81c62bb9f9b05f7ff1251695712e1777de7315f9)]:
186
+ - graphile-utils@5.0.0-beta.45
187
+ - graphile-build-pg@5.0.0-beta.47
188
+ - graphile-build@5.0.0-beta.39
189
+ - @dataplan/pg@0.0.1-beta.39
190
+ - grafserv@0.1.1-beta.29
191
+ - grafast@0.1.1-beta.27
192
+
193
+ ## 5.0.0-beta.48
194
+
195
+ ### Patch Changes
196
+
197
+ - [#2700](https://github.com/graphile/crystal/pull/2700)
198
+ [`dcd3583`](https://github.com/graphile/crystal/commit/dcd35835d86eb2758bbbc8e24ce647e97dee42b6)
199
+ Thanks [@benjie](https://github.com/benjie)! - Switch to consistently using
200
+ workspace:^ dependencies (in an attempt to appease pnpm)
201
+ - Updated dependencies
202
+ [[`dcd3583`](https://github.com/graphile/crystal/commit/dcd35835d86eb2758bbbc8e24ce647e97dee42b6)]:
203
+ - graphile-build-pg@5.0.0-beta.46
204
+ - @dataplan/pg@0.0.1-beta.38
205
+
206
+ ## 5.0.0-beta.47
207
+
208
+ ### Patch Changes
209
+
210
+ - [#2675](https://github.com/graphile/crystal/pull/2675)
211
+ [`b09719f`](https://github.com/graphile/crystal/commit/b09719f5107eada15104c2bbfa4f1290af0a4465)
212
+ Thanks [@slaskis](https://github.com/slaskis)! - Fix "simple subscriptions"
213
+ `ListenPayload.relatedNode` following the overhaul of polymorphism (thanks
214
+ @slaskis for the reproduction in the test suite!)
215
+
216
+ - [#2686](https://github.com/graphile/crystal/pull/2686)
217
+ [`5dbb9e8`](https://github.com/graphile/crystal/commit/5dbb9e87850ce8de29ab4fec18c9d06333b642de)
218
+ Thanks [@benjie](https://github.com/benjie)! - Fix a bug with mutations where
219
+ the results of computed columns were calculated using the snapshot from before
220
+ the mutation (due to the way Postgres works). Solved by breaking the
221
+ post-mutation function calls out into a separate post-mutation statement.
222
+
223
+ - [#2690](https://github.com/graphile/crystal/pull/2690)
224
+ [`208364f`](https://github.com/graphile/crystal/commit/208364f9423abd240a0772b661986aae6e185c47)
225
+ Thanks [@benjie](https://github.com/benjie)! - Add keepalive to grafserv
226
+ websocket connections.
227
+
228
+ - [#2689](https://github.com/graphile/crystal/pull/2689)
229
+ [`6762c70`](https://github.com/graphile/crystal/commit/6762c7005c56d17c06cebb6857e8d295d86399eb)
230
+ Thanks [@benjie](https://github.com/benjie)! - Fix bug in
231
+ PgIndexBehaviorsPlugin that would treat all view attributes as unindexed.
232
+ Views can't have indexes, so we must give them the benefit of the doubt.
233
+
234
+ - [#2694](https://github.com/graphile/crystal/pull/2694)
235
+ [`13513dd`](https://github.com/graphile/crystal/commit/13513ddaea15ad9498a77de7c4e92679498f99ca)
236
+ Thanks [@benjie](https://github.com/benjie)! - Add support for `onError` RFC
237
+ with `PROPAGATE`, `NULL` and `HALT` behaviors implemented.
238
+
239
+ - [#2659](https://github.com/graphile/crystal/pull/2659)
240
+ [`bc2b188`](https://github.com/graphile/crystal/commit/bc2b188a50e00f153dc68df6955399c5917130bd)
241
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 Tracking of side effects has
242
+ been completely overhauled, the main difference for users is that if you hit
243
+ issues you may need to ensure that **this.hasSideEffects = true**, if set, is
244
+ the last thing that your step does in its constructor (previously, doing this
245
+ anywhere in the constructor was okay). This should fix a number of oddities
246
+ around side effects and their impact on the operation plan - essentially it's
247
+ a lot stricter now.
248
+
249
+ - [#2691](https://github.com/graphile/crystal/pull/2691)
250
+ [`703d162`](https://github.com/graphile/crystal/commit/703d162df2cc148ac343c1339b8e7df750aa781d)
251
+ Thanks [@benjie](https://github.com/benjie)! - Deprecate
252
+ `withPgClient`/`withPgClientTransaction` because people are using them
253
+ incorrectly and causing themselves N+1 issues. Instead, rename to
254
+ `sideEffectWithPgClient` and introduce new `loadOneWithPgClient` and
255
+ `loadManyWithPgClient` helpers that people should use instead of
256
+ `withPgClient`.
257
+
258
+ - [#2659](https://github.com/graphile/crystal/pull/2659)
259
+ [`4a9072b`](https://github.com/graphile/crystal/commit/4a9072bfa3d3e86c6013caf2b89a31e87f2bb421)
260
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 **Building connections
261
+ overhauled** - `connection()` has been overhauled, please re-read the docs on
262
+ this and adjust your plans as necessary.
263
+ - If your custom steps have the `connectionClone` method, the first argument
264
+ (`$connection`) has been removed because connection depends on your
265
+ collection step (rather than the other way around as it was previously) -
266
+ this should simplify implementation.
267
+ - Custom steps that are used with `connection()` are now just assumed to be
268
+ simple lists unless they indicate otherwise using `paginationSupport` (see
269
+ the `connection()` docs) - this means you can use any (list-returning) step
270
+ with `connection()`! 🎉
271
+ - `PgPageInfoStep` is no more. Various other steps have been rearranged and
272
+ had (mostly internal, or at least extremely rarely used) methods renamed,
273
+ replaced or removed. (E.g. `PgSelectSingleStep` no longer has `.node()` or
274
+ `.cursor()` methods since it is no longer implicitly an "edge step".)
275
+ - `@stream` has been optimized somewhat, no longer requiring multiple
276
+ independent streams from the database as required previously (and as would
277
+ be required by GraphQL.js under the same circumstances)
278
+
279
+ - [#2687](https://github.com/graphile/crystal/pull/2687)
280
+ [`7766c19`](https://github.com/graphile/crystal/commit/7766c19ecefd3aebc965306db90ba29b3b05200c)
281
+ Thanks [@benjie](https://github.com/benjie)! - Fix issue whereby
282
+ nodeId:insert/nodeId:update permissions were not rejected by PgRBACPlugin when
283
+ the underlying columns were not writable.
284
+
285
+ - [#2678](https://github.com/graphile/crystal/pull/2678)
286
+ [`6dafac1`](https://github.com/graphile/crystal/commit/6dafac162955291e5147c21e57734b44e30acb98)
287
+ Thanks [@benjie](https://github.com/benjie)! - Remove peer dependency
288
+ optionality in an attempt to satisfy pnpm's installation algorithms
289
+
290
+ - [#2692](https://github.com/graphile/crystal/pull/2692)
291
+ [`aa8fb3d`](https://github.com/graphile/crystal/commit/aa8fb3dbd23b0c3b6b8039922cb4ab7293b51844)
292
+ Thanks [@benjie](https://github.com/benjie)! - Forbid export of 'build', this
293
+ has required a slight degradation of the
294
+ makeAddPgTableConditionPlugin/addPgTableCondition signature for people using
295
+ the legacy signature - namely the entire build object is no longer available
296
+ in the callback that is the fourth argument. (Only have 3 arguments to your
297
+ call? You're not impacted!) In the unlikely event this causes you any issues,
298
+ your best bet is to move to the `apply()` approach (only use the 3 documented
299
+ arguments), but we can also potentially expand the parts of build that are
300
+ made available.
301
+
302
+ - [#2688](https://github.com/graphile/crystal/pull/2688)
303
+ [`e15f886`](https://github.com/graphile/crystal/commit/e15f886cae1041416b44b74b75426f8d43000dcf)
304
+ Thanks [@benjie](https://github.com/benjie)! - Fixes bug where two different
305
+ plugins with the same name would be allowed to exist in the same (resolved)
306
+ preset. Users of dynamically created presets and plugins (e.g.
307
+ `makeV4Preset(...)` in PostGraphile) should be wary not to include two calls
308
+ to the same factory in their preset (directly or indirectly).
309
+
310
+ - [#2659](https://github.com/graphile/crystal/pull/2659)
311
+ [`185d449`](https://github.com/graphile/crystal/commit/185d449ed30d29c9134cc898b50a1473ab2910a2)
312
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 `loadOne` and `loadMany` no
313
+ longer accept 2-4 arguments; instead exactly two arguments are accepted.
314
+ **There is a codeshift available** in the repository
315
+ (`shifts/loadArguments.ts`) that you can execute with `jscodeshift` (see
316
+ comment at top of file) to do this rewrite for you across your codebase. Be
317
+ sure to check the results carefully!
318
+
319
+ The first argument is unchanged, the second argument is either the loader
320
+ callback (as before) or a "loader object":
321
+ - `shared` (optional) - replaces the `unary` argument, and works as before
322
+ except you may now also use a thunk! (See below)
323
+ - `ioEquivalence` (optional) - as before
324
+ - `load` (required) - the loader callback
325
+ - `name` (optional) - display name for the callback (will appear in plan
326
+ diagrams)
327
+ - `paginationSupport` (optional) - only relevant to loadMany, add this to
328
+ indicate which optimizations your loader callback supports (see the
329
+ documentation) - for example, does it support applying a `limit`?
330
+
331
+ **The motivation for the "loader object"** is that every step that calls a
332
+ given load function should have the same `ioEquivalence`, `shared`, `name` and
333
+ `paginationSupport` - so rather than defining them in each of your plan
334
+ resolvers, we should **associate the metadata with the callback directly**.
335
+
336
+ To make this practical, `shared` (previously: `unary`) can now be a callback
337
+ so that you can create steps to provide any shared details, e.g. database or
338
+ API clients from `context()`.
339
+
340
+ Ultimately the aim is to move this boilerplate out of your plan resolvers and
341
+ instead to co-locate it with your data loading callbacks:
342
+
343
+ ```diff
344
+ function User_friends($user, { $first }) {
345
+ const $userId = get($user, "id");
346
+ - const $apiClient = context().get("apiClient");
347
+ - const $collection = loadMany(
348
+ - $userId,
349
+ - null, // ioEquivalence
350
+ - $apiClient, // shared (previously 'unary')
351
+ - batchGetFriendsByUserId // load callback
352
+ - );
353
+ + const $collection = loadMany($userId, batchGetFriendIdsByUserId);
354
+ $collection.setParam("limit", $first);
355
+ return $collection;
356
+ }
357
+
358
+ const batchGetFriendsByUserId =
359
+ + {
360
+ + shared: () => context().get("apiClient"),
361
+ + load:
362
+ (userIds, info) => {
363
+ - const apiClient = info.unary;
364
+ + const apiClient = info.shared;
365
+ /* ... */
366
+ }
367
+ + }
368
+ ```
369
+
370
+ - [#2657](https://github.com/graphile/crystal/pull/2657)
371
+ [`f83b191`](https://github.com/graphile/crystal/commit/f83b191f39c9d521fd12563cca6aa20d1a6f0494)
372
+ Thanks [@dependabot](https://github.com/apps/dependabot)! - Add support for
373
+ Koa v3 (via v2 code) and update package exports.
374
+
375
+ - Updated dependencies
376
+ [[`5dbb9e8`](https://github.com/graphile/crystal/commit/5dbb9e87850ce8de29ab4fec18c9d06333b642de),
377
+ [`cfd4c3c`](https://github.com/graphile/crystal/commit/cfd4c3cff0ef40ed87a2c700b7719c1ca0e73588),
378
+ [`c3f9c38`](https://github.com/graphile/crystal/commit/c3f9c38cb00ad4553e4bc3c04e16a7c77bd16142),
379
+ [`68a1243`](https://github.com/graphile/crystal/commit/68a1243f104227ebf7d1f3cedcbec49dc3c8e258),
380
+ [`3d5c464`](https://github.com/graphile/crystal/commit/3d5c4641df66b431066efd6c74b67ca0d38ba7f4),
381
+ [`208364f`](https://github.com/graphile/crystal/commit/208364f9423abd240a0772b661986aae6e185c47),
382
+ [`6762c70`](https://github.com/graphile/crystal/commit/6762c7005c56d17c06cebb6857e8d295d86399eb),
383
+ [`05b971e`](https://github.com/graphile/crystal/commit/05b971e2d63cb5c946512bb83e6c255a7d9ec93f),
384
+ [`13513dd`](https://github.com/graphile/crystal/commit/13513ddaea15ad9498a77de7c4e92679498f99ca),
385
+ [`bc2b188`](https://github.com/graphile/crystal/commit/bc2b188a50e00f153dc68df6955399c5917130bd),
386
+ [`5bea9c1`](https://github.com/graphile/crystal/commit/5bea9c14b7b20609eec1593fe3109f8d6c170b44),
387
+ [`87a4c92`](https://github.com/graphile/crystal/commit/87a4c92dc89093a8bd601dcd692910eadf0c4cd3),
388
+ [`703d162`](https://github.com/graphile/crystal/commit/703d162df2cc148ac343c1339b8e7df750aa781d),
389
+ [`c13813e`](https://github.com/graphile/crystal/commit/c13813eecb42c0d9a6703540c022e318e18c5751),
390
+ [`4a9072b`](https://github.com/graphile/crystal/commit/4a9072bfa3d3e86c6013caf2b89a31e87f2bb421),
391
+ [`7766c19`](https://github.com/graphile/crystal/commit/7766c19ecefd3aebc965306db90ba29b3b05200c),
392
+ [`6dafac1`](https://github.com/graphile/crystal/commit/6dafac162955291e5147c21e57734b44e30acb98),
393
+ [`aa8fb3d`](https://github.com/graphile/crystal/commit/aa8fb3dbd23b0c3b6b8039922cb4ab7293b51844),
394
+ [`e15f886`](https://github.com/graphile/crystal/commit/e15f886cae1041416b44b74b75426f8d43000dcf),
395
+ [`34efed0`](https://github.com/graphile/crystal/commit/34efed09892d4b6533f40026de4a6b0a8a35035d),
396
+ [`185d449`](https://github.com/graphile/crystal/commit/185d449ed30d29c9134cc898b50a1473ab2910a2),
397
+ [`e2048e2`](https://github.com/graphile/crystal/commit/e2048e260bf99ed946f92d6ea579e08f126ba4d5),
398
+ [`33c7784`](https://github.com/graphile/crystal/commit/33c7784a8c81ac29c1e2e4a8733d04c30ef7035b),
399
+ [`f83b191`](https://github.com/graphile/crystal/commit/f83b191f39c9d521fd12563cca6aa20d1a6f0494)]:
400
+ - graphile-build-pg@5.0.0-beta.45
401
+ - @dataplan/pg@0.0.1-beta.37
402
+ - graphile-config@0.0.1-beta.18
403
+ - grafast@0.1.1-beta.26
404
+ - graphile-build@5.0.0-beta.38
405
+ - graphile-utils@5.0.0-beta.44
406
+ - tamedevil@0.0.0-beta.9
407
+ - grafserv@0.1.1-beta.28
408
+
409
+ ## 5.0.0-beta.46
410
+
411
+ ### Patch Changes
412
+
413
+ - Updated dependencies
414
+ [[`9e21b2a`](https://github.com/graphile/crystal/commit/9e21b2ac0814c351d68f50b5a121699e088209bd),
415
+ [`2adfd6e`](https://github.com/graphile/crystal/commit/2adfd6efedd1ab6831605526a515c683a7e95c2c),
416
+ [`8cfd4b3`](https://github.com/graphile/crystal/commit/8cfd4b37057ec54814f2f53f96a42400cbde69ca),
417
+ [`73f626b`](https://github.com/graphile/crystal/commit/73f626b8065389f226f66a4752112cf6b013855a),
418
+ [`6113518`](https://github.com/graphile/crystal/commit/61135188900c39d0cb6bd2f9c0033f0954cd0e6a)]:
419
+ - graphile-build@5.0.0-beta.37
420
+ - graphile-build-pg@5.0.0-beta.44
421
+ - @dataplan/json@0.0.1-beta.33
422
+ - @dataplan/pg@0.0.1-beta.36
423
+ - grafast@0.1.1-beta.25
424
+ - graphile-utils@5.0.0-beta.43
425
+
426
+ ## 5.0.0-beta.45
427
+
428
+ ### Patch Changes
429
+
430
+ - [#2635](https://github.com/graphile/crystal/pull/2635)
431
+ [`85c8364`](https://github.com/graphile/crystal/commit/85c83642b6fe7abcdb17c6879fbafbe162175843)
432
+ Thanks [@benjie](https://github.com/benjie)! - Remove non-functional fields
433
+ generated from mode:union-returning functions from the schema.
434
+ - Updated dependencies
435
+ [[`85c8364`](https://github.com/graphile/crystal/commit/85c83642b6fe7abcdb17c6879fbafbe162175843)]:
436
+ - graphile-build-pg@5.0.0-beta.43
437
+
438
+ ## 5.0.0-beta.44
439
+
440
+ ### Patch Changes
441
+
442
+ - [#2559](https://github.com/graphile/crystal/pull/2559)
443
+ [`4c8f028`](https://github.com/graphile/crystal/commit/4c8f028a7e5c4388efbab53ea65e7b3018ab6d47)
444
+ Thanks [@benjie](https://github.com/benjie)! - Remove `make...Plugin`
445
+ prefix/suffix from plugin factories. (Old name is still supported but
446
+ deprecated, this is non-breaking.)
447
+
448
+ - [#2571](https://github.com/graphile/crystal/pull/2571)
449
+ [`5451c90`](https://github.com/graphile/crystal/commit/5451c9031e341bdae16dc1b7a3b6b19154056701)
450
+ Thanks [@slaskis](https://github.com/slaskis)! - Add support for JSONPath type
451
+ (thanks @slaskis!)
452
+
453
+ - [#2578](https://github.com/graphile/crystal/pull/2578)
454
+ [`1d76d2f`](https://github.com/graphile/crystal/commit/1d76d2f0d19b4d56895ee9988440a35d2c60f9f9)
455
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 **Ruru has been "rebuilt"!
456
+ The loading methods and APIs have changed!**
457
+
458
+ Ruru is now built on top of GraphiQL v5, which moves to using the Monaco
459
+ editor (the same editor used in VSCode) enabling more familiar keybindings and
460
+ more features (e.g. press F1 in the editor to see the command palette, and you
461
+ can now add comments in the variables JSON). This has required a
462
+ rearchitecture to Ruru's previously "single file" approach since Monaco uses
463
+ workers which require additional files.
464
+
465
+ In this release we have embraced the bundle splitting approach. We now bundle
466
+ both `prettier` and `mermaid`, and they are now loaded on-demand.
467
+
468
+ Usage instructions for all environments have had to change since we can no
469
+ longer serve Ruru as a single HTML file. We now include helpers for serving
470
+ Ruru's static files from whatever JS-based webserver you are using.
471
+
472
+ We've also added some additional improvements:
473
+ - Formatting with prettier now maintains the cursor position
474
+ (`Ctrl-Shift-P`/`Meta-Shift-P`/`Cmd-Shift-P` depending on platform)
475
+ - All editors are now formatted, not just the GraphQL editor
476
+ - Prettier and mermaid should now work offline
477
+ - Even more GraphiQL props are now passed through, including
478
+ `inputValueDeprecation` and `schemaDeprecation` which you can set to false
479
+ if your GraphQL server is, _ahem_, a little behind the GraphQL spec draft.
480
+
481
+ 🚨 **Changes you need to make:** 🚨
482
+ - If you are using Ruru directly (i.e. importing from `ruru/server`), please
483
+ see the new Ruru README for setup instructions, you'll want to switch out
484
+ your previous setup. In particular, `ruru/bundle` no longer exists and you
485
+ now need to serve the static files (via `ruru/static`).
486
+ - `defaultHTMLParts` is no more; instead `config.htmlParts` (also
487
+ `preset.ruru.htmlParts` for Graphile Config users) now allows the entries to
488
+ be callback functions reducing boilerplate:
489
+ ```diff
490
+ -import { defaultHTMLParts } from "ruru/server";
491
+ const config = {
492
+ htmlParts: {
493
+ - metaTags: defaultHTMLParts.metaTags + "<!-- local override -->",
494
+ + metaTags: (base) => base + "<!-- local override -->",
495
+ }
496
+ }
497
+ ```
498
+ (alternatively you can use `makeHTMLParts(config)`)
499
+ - Grafserv users: `plugin.grafserv.middleware.ruruHTMLParts` is renamed to
500
+ `ruruHTML` and wraps the generation of the HTML - simply trim `Parts` from
501
+ the name and be sure calling `next()` is the final line of the function
502
+ ```diff
503
+ const plugin = {
504
+ grafserv: {
505
+ middleware: {
506
+ - ruruHTMLParts(next, event) {
507
+ + ruruHTML(next, event) {
508
+ const { htmlParts, request } = event;
509
+ htmlParts.titleTag = `<title>${escapeHTML(
510
+ "Ruru | " + request.getHeader("host"),
511
+ )}</title>`;
512
+ return next();
513
+ },
514
+ },
515
+ },
516
+ };
517
+ ```
518
+
519
+ Additional changes:
520
+ - `RuruConfig.clientConfig` has been added for props to explicitly pass to
521
+ Ruru making it explicit that these will be sent to the client
522
+ - `RuruServerConfig` has deprecated the client options `editorTheme`,
523
+ `debugTools` and `eventSourceInit` at the top level; instead these should be
524
+ passed via `RuruServerConfig.clientConfig` making it explicit these will be
525
+ sent to the client and expanding to cover more props
526
+ ```diff
527
+ const config = {
528
+ endpoint: "/graphql",
529
+ + clientConfig: {
530
+ editorTheme: "dark",
531
+ + },
532
+ }
533
+ ```
534
+
535
+ - [#2571](https://github.com/graphile/crystal/pull/2571)
536
+ [`7147cb0`](https://github.com/graphile/crystal/commit/7147cb07e4d7286bb3b9e949164a2a232d59e28c)
537
+ Thanks [@slaskis](https://github.com/slaskis)! - 🚨 Give built-in codecs a
538
+ concept of "natural sorting" and "natural equality"; disable ordering by
539
+ default for those without natural sorting, disable filtering by default for
540
+ those without natural equality. Those using AmberPreset will have some order
541
+ enum options and filter options removed from their schema; V4 preset users
542
+ should be unaffected. To restore the previous items, a small plugin can be
543
+ introduced, see:
544
+ https://github.com/slaskis/crystal/blob/bb940399a3a741c0982b53fffbe4604eebe6ffb0/postgraphile/postgraphile/src/plugins/PgV4BehaviorPlugin.ts#L81-L98
545
+
546
+ - [#2593](https://github.com/graphile/crystal/pull/2593)
547
+ [`7847c0b`](https://github.com/graphile/crystal/commit/7847c0b09aa6be5526df8ccdb3f429e680a2da03)
548
+ Thanks [@benjie](https://github.com/benjie)! - Fixes a bug where ordering or
549
+ filtering by 'via' attributes (such as those from polymorphic 'relational'
550
+ tables) resulted in an error.
551
+
552
+ - [#2593](https://github.com/graphile/crystal/pull/2593)
553
+ [`0e6c4e0`](https://github.com/graphile/crystal/commit/0e6c4e062be3ecb79c0ae30c89fad1550a0b5e98)
554
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 `resource.resolveVia()` has
555
+ changed result format; from `{ relation: string, attribute: string }` to
556
+ `{ relationName: string, attributeName: string, relation: PgCodecRelation, attribute: PgCodecAttribute }`.
557
+ If you use `resolveVia`, please be sure to extract the correct properties.
558
+
559
+ - [#2600](https://github.com/graphile/crystal/pull/2600)
560
+ [`ad588ec`](https://github.com/graphile/crystal/commit/ad588ecde230359f56800e414b7c5fa1aed14957)
561
+ Thanks [@benjie](https://github.com/benjie)! - Mark all
562
+ peerDependencies=dependencies modules as optional peerDependencies to make
563
+ pnpm marginally happier hopefully.
564
+
565
+ - [#2598](https://github.com/graphile/crystal/pull/2598)
566
+ [`e8bb5be`](https://github.com/graphile/crystal/commit/e8bb5be91df242d3c2b8ed4e7010d48feffdcfe2)
567
+ Thanks [@benjie](https://github.com/benjie)! - Amber and V4 preset now
568
+ implicitly import `postgraphile` which imports the Graphile Config types you
569
+ need from graphile-build, grafast, etc automatically.
570
+ - Updated dependencies
571
+ [[`4c8f028`](https://github.com/graphile/crystal/commit/4c8f028a7e5c4388efbab53ea65e7b3018ab6d47),
572
+ [`5451c90`](https://github.com/graphile/crystal/commit/5451c9031e341bdae16dc1b7a3b6b19154056701),
573
+ [`1d76d2f`](https://github.com/graphile/crystal/commit/1d76d2f0d19b4d56895ee9988440a35d2c60f9f9),
574
+ [`c54c6db`](https://github.com/graphile/crystal/commit/c54c6db320b3967ab16784a504770c9b5ef24494),
575
+ [`7147cb0`](https://github.com/graphile/crystal/commit/7147cb07e4d7286bb3b9e949164a2a232d59e28c),
576
+ [`7847c0b`](https://github.com/graphile/crystal/commit/7847c0b09aa6be5526df8ccdb3f429e680a2da03),
577
+ [`9d86063`](https://github.com/graphile/crystal/commit/9d86063aacf2d064c35bd62e2cf58ea687910ac8),
578
+ [`a480f6d`](https://github.com/graphile/crystal/commit/a480f6d22605fbb0d0fcdf6845cbdf294d3194b5),
579
+ [`0e6c4e0`](https://github.com/graphile/crystal/commit/0e6c4e062be3ecb79c0ae30c89fad1550a0b5e98),
580
+ [`ad588ec`](https://github.com/graphile/crystal/commit/ad588ecde230359f56800e414b7c5fa1aed14957)]:
581
+ - graphile-build-pg@5.0.0-beta.42
582
+ - graphile-utils@5.0.0-beta.42
583
+ - @dataplan/pg@0.0.1-beta.35
584
+ - grafserv@0.1.1-beta.27
585
+ - grafast@0.1.1-beta.24
586
+ - graphile-build@5.0.0-beta.36
587
+
588
+ ## 5.0.0-beta.43
589
+
590
+ ### Patch Changes
591
+
592
+ - [#2577](https://github.com/graphile/crystal/pull/2577)
593
+ [`0c6b1f1`](https://github.com/graphile/crystal/commit/0c6b1f1e188f6e2913832adfed9ca76dfdc25c47)
594
+ Thanks [@benjie](https://github.com/benjie)! - Update dependencies
595
+
596
+ - Updated dependencies
597
+ [[`0c6b1f1`](https://github.com/graphile/crystal/commit/0c6b1f1e188f6e2913832adfed9ca76dfdc25c47),
598
+ [`1f4544d`](https://github.com/graphile/crystal/commit/1f4544d011a1442688c4e34b677f7123f3ae6927),
599
+ [`e0cdabe`](https://github.com/graphile/crystal/commit/e0cdabe25c8894da550546c93bc03b895585544c),
600
+ [`faee38b`](https://github.com/graphile/crystal/commit/faee38bbff0421bbccfaa77c0dffa5c2d44e2b92)]:
601
+ - graphile-build-pg@5.0.0-beta.41
602
+ - graphile-build@5.0.0-beta.35
603
+ - graphile-utils@5.0.0-beta.41
604
+ - graphile-config@0.0.1-beta.17
605
+ - @dataplan/pg@0.0.1-beta.34
606
+ - grafserv@0.1.1-beta.26
607
+ - grafast@0.1.1-beta.23
608
+ - @dataplan/json@0.0.1-beta.32
609
+
610
+ ## 5.0.0-beta.42
611
+
612
+ ### Patch Changes
613
+
614
+ - [#2575](https://github.com/graphile/crystal/pull/2575)
615
+ [`5c802ea6819361eed36b75f246ae0adb35b14669`](https://github.com/graphile/crystal/commit/5c802ea6819361eed36b75f246ae0adb35b14669)
616
+ Thanks [@benjie](https://github.com/benjie)! - Fixes a bug in relational
617
+ polymorphism where PostgreSQL functions returning polymorphic records were
618
+ causing planning errors.
619
+ - Updated dependencies
620
+ [[`5c802ea6819361eed36b75f246ae0adb35b14669`](https://github.com/graphile/crystal/commit/5c802ea6819361eed36b75f246ae0adb35b14669)]:
621
+ - graphile-build-pg@5.0.0-beta.40
622
+ - graphile-utils@5.0.0-beta.40
623
+ - @dataplan/pg@0.0.1-beta.33
624
+ - graphile-build@5.0.0-beta.34
625
+
626
+ ## 5.0.0-beta.41
627
+
628
+ ### Patch Changes
629
+
630
+ - [#2444](https://github.com/graphile/crystal/pull/2444)
631
+ [`192a27e08763ea26607344a2ea6c7f5c595cc2a3`](https://github.com/graphile/crystal/commit/192a27e08763ea26607344a2ea6c7f5c595cc2a3)
632
+ Thanks [@benjie](https://github.com/benjie)! - Upgrade to Mermaid 11, and
633
+ reduce verbosity of polymorphism in plan diagrams.
634
+
635
+ - [#2525](https://github.com/graphile/crystal/pull/2525)
636
+ [`09d95319be3e25e023dfbab9d1542dfe06f65355`](https://github.com/graphile/crystal/commit/09d95319be3e25e023dfbab9d1542dfe06f65355)
637
+ Thanks [@benjie](https://github.com/benjie)! - Plan computed column inputs
638
+ (particularly Node IDs) in the root layer plan, allowing for greater plan
639
+ deduplication and more efficient SQL generation.
640
+
641
+ - [#2478](https://github.com/graphile/crystal/pull/2478)
642
+ [`a830770e775a65ce1d09fa767f38e84f5c0e5139`](https://github.com/graphile/crystal/commit/a830770e775a65ce1d09fa767f38e84f5c0e5139)
643
+ Thanks [@benjie](https://github.com/benjie)! - Use new .addRef and .getRef
644
+ methods from grafast.
645
+
646
+ - [#2482](https://github.com/graphile/crystal/pull/2482)
647
+ [`459e1869a2ec58925b2bac5458af487c52a8ca37`](https://github.com/graphile/crystal/commit/459e1869a2ec58925b2bac5458af487c52a8ca37)
648
+ Thanks [@benjie](https://github.com/benjie)! - Minimum version of Node.js
649
+ bumped to Node 22 (the latest LTS).
650
+
651
+ - [#2521](https://github.com/graphile/crystal/pull/2521)
652
+ [`c43ed67b9d3acbadb172ee88ba9c2a4d32528a25`](https://github.com/graphile/crystal/commit/c43ed67b9d3acbadb172ee88ba9c2a4d32528a25)
653
+ Thanks [@benjie](https://github.com/benjie)! - Fix bug in nullable nodeID
654
+ handling for computed column arguments with the Relay preset that was causing
655
+ the entire select to be inhibited on null/undefined.
656
+
657
+ - [#2527](https://github.com/graphile/crystal/pull/2527)
658
+ [`576fb8bad56cb940ab444574d752e914d462018a`](https://github.com/graphile/crystal/commit/576fb8bad56cb940ab444574d752e914d462018a)
659
+ Thanks [@{](https://github.com/{)! - In order to make the libraries more type
660
+ safe, `makeGrafastSchema` (from `grafast`) and `makeExtendSchemaPlugin` (from
661
+ `postgraphile/utils`) have deprecated the `typeDefs`/`plans` pattern since
662
+ `plans` (like `resolvers` in the traditional format) ended up being a
663
+ mish-mash of lots of different types and `__`-prefixed fields for special
664
+ cases.
665
+
666
+ Instead the configuration should be split into `typeDefs` with `objects`,
667
+ `interfaces`, `unions`, `inputObjects`, `scalars` and `enums`; and object and
668
+ input object fields should be specified via the `plans` entry within the type
669
+ to avoid conflicts with `resolveType`/`isTypeOf`/`planType`/`scope` and
670
+ similar type-level (rather than field-level) properties. Similarly, enum
671
+ values should be added under a `values` property. This also means these
672
+ type-level fields no longer have the `__` prefix.
673
+
674
+ Migration is quite straightforward:
675
+ 1. **Add new top-level properties**. Add `objects`, `interfaces`, `unions`,
676
+ `inputObjects`, `scalars`, and `enums` as top level properties alongside
677
+ `typeDefs` and `plans`. Each should be an empty object. You can skip any
678
+ where you're not defining types of that kind.
679
+ 1. **Split definitions based on type kind**. For each type defined in `plans`
680
+ move it into the appropriate new property based on the keyword used to
681
+ define the type in the `typeDefs` (`type` &rarr; `objects`, `interface`
682
+ &rarr; `interfaces`, `union` &rarr; `unions`, `input object` &rarr;
683
+ `inputObjects`, `scalar` &rarr; `scalars`, `enum` &rarr; `enums`).
684
+ 1. **Move field plans into nested `plans: {...}` object**. For each type
685
+ defined in the new `objects` and `inputObjects` maps: create a
686
+ `plans: { ... }` entry inside the type and move all fields (anything not
687
+ prefixed with `__`) inside this new (nested) property.
688
+ 1. **Move enum values into nested `values: {...}` object**. For each type
689
+ defined in the new `enums` map: create a `values: { ... }` entry inside the
690
+ type and move all values (anything not prefixed with `__`) inside this new
691
+ (nested) property.
692
+ 1. **Remove `__` prefixes**. For each type across
693
+ `objects`/`interfaces`/`unions`/`interfaceObjects`/`scalars` and `enums`:
694
+ remove the `__` prefix from any methods/properties.
695
+
696
+ Example:
697
+
698
+ ```diff
699
+ typeDefs: ...,
700
+ -plans: {
701
+ +objects: {
702
+
703
+ - __isTypeOf(v) {
704
+ + isTypeOf(v) {
705
+ return v.username != null;
706
+ },
707
+ + plans: {
708
+ fieldName($source, fieldArgs) {
709
+ // ...
710
+ },
711
+ + },
712
+ },
713
+ +},
714
+ +interfaces: {,
715
+ MyInterface: {
716
+ - __resolveType($specifier) {
717
+ + resolveType($specifier) {
718
+ // ...
719
+ }
720
+ }
721
+ +},
722
+ +enums: {
723
+ MyEnum: {
724
+ + values: {
725
+ ONE: {value: 1},
726
+ TWO: {value: 2},
727
+ THREE: {value: 3},
728
+ + }
729
+ }
730
+ },
731
+ ```
732
+
733
+ Other changes:
734
+ - `ObjectPlans`/`GrafastPlans`/`FieldPlans`/`InputObjectPlans`/`ScalarPlans`
735
+ all changed to signular
736
+ - `InterfaceOrUnionPlans` split to `InterfacePlan`/`UnionPlan` (identical
737
+ currently)
738
+ - Shape of `ObjectPlan`/`InterfacePlan`/`UnionPlan` has changed;
739
+ `DeprecatedObjectPlan`/etc exist for backcompat
740
+ - `FieldArgs` can now accept an input shape indicating the args and their
741
+ types
742
+ - `FieldPlanResolver<TArgs, TParentStep, TResultStep>` has switched the order
743
+ of the first two generic parameters:
744
+ `FieldPlanResolver<TParentStep, TArgs, TResultStep>` - this is to reflect
745
+ the order of the arguments to the function. Also null has been removed from
746
+ the generics.
747
+ - Various generics (including `GrafastFieldConfig`) that used to take a
748
+ GraphQL type instance as a generic parameter no longer do - you need to use
749
+ external code generation because TypeScript cannot handle the dynamic
750
+ creation.
751
+ - `GrafastFieldConfig` last two generics swapped order.
752
+ - `GrafastArgumentConfig` generics completely changed
753
+
754
+ - [#2548](https://github.com/graphile/crystal/pull/2548)
755
+ [`45adaff886e7cd72b864150927be6c0cb4a7dfe8`](https://github.com/graphile/crystal/commit/45adaff886e7cd72b864150927be6c0cb4a7dfe8)
756
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 Complete overhaul of
757
+ polymorphism:
758
+ - Centralized the responsibility of polymorphic resolution from field plan
759
+ resolvers into abstract types.
760
+ - Eliminated the concept of "polymorphic capable" steps: any step may now be
761
+ used for polymorphism.
762
+ - Steps such as `polymorphicBranch`, `pgPolymorphism`, and other polymorphism
763
+ related steps no longer exist as they are no longer supported in this new
764
+ paradigm.
765
+ - Abstract types gain a `planType` method: passed a `$specifier` step from the
766
+ field plan resolver, and returns an `AbstractTypePlanner` object which
767
+ returns a `$__typename` step indicating the concrete object type name for
768
+ this `$specifier` along with an (optional) `planForType(objectType)` method
769
+ to plan how to turn the `$specifier` into a step suitable for usage by the
770
+ given object type (assuming the `$__typename` matches).
771
+ - No more exponential branching: we now merge the previous polymorphic branch
772
+ into a single `$specifier` step before planning the next level of
773
+ polymorphism.
774
+
775
+ PostGraphile Postgres-level polymorphism users are unaffected (all changes
776
+ have been done for you); SQL queries are now slightly smaller, and in general
777
+ there may be fewer requests to the DB.
778
+
779
+ If you've written your own plan resolvers by hand, first: thanks for being
780
+ brave! Second, sorry... You're going to have to rewrite them. Hopefully the
781
+ result will be a net reduction in complexity though &mdash; you can move
782
+ repetative polymorphism handling code from the field plan resolvers themselves
783
+ to the new `planType` method on the abstract type. It's hard to explain all
784
+ the possible ways of re-writing these plans, so read the docs about the new
785
+ pattern first and, if you still need help, please do reach out
786
+ [on Discord](https://discord.gg/graphile)!
787
+
788
+ This is the last breaking change to hand written plan resolvers that we expect
789
+ to make before the v1.0 release (other than some improvements around
790
+ TypeScript types) and marks the completion of the fourth and final epic that
791
+ was outlined in the first Grafast Working Group. With this change, we're much
792
+ closer to moving to release candidate status!
793
+
794
+ - [#2523](https://github.com/graphile/crystal/pull/2523)
795
+ [`b05d57b932ea00d10715dcab9f79d443408881fc`](https://github.com/graphile/crystal/commit/b05d57b932ea00d10715dcab9f79d443408881fc)
796
+ Thanks [@Dacjan](https://github.com/Dacjan)! - Fix bug with `@ref ... plural`
797
+ smart tag where multiple `@refVia` are present but the target type is not
798
+ abstract.
799
+ - Updated dependencies
800
+ [[`0e36cb9077c76710d2e407830323f86c5038126e`](https://github.com/graphile/crystal/commit/0e36cb9077c76710d2e407830323f86c5038126e),
801
+ [`5a26196eff8fd1956d73e0b8fdf5cfcb7f01b7d3`](https://github.com/graphile/crystal/commit/5a26196eff8fd1956d73e0b8fdf5cfcb7f01b7d3),
802
+ [`c0c3f48fa9f60cb9a4436ea135979b779ecc71ec`](https://github.com/graphile/crystal/commit/c0c3f48fa9f60cb9a4436ea135979b779ecc71ec),
803
+ [`cef9a37f846b4af105ac20960530d65c9f44afa9`](https://github.com/graphile/crystal/commit/cef9a37f846b4af105ac20960530d65c9f44afa9),
804
+ [`56ce94a847c6a4094643665cbf5d3712f56140b6`](https://github.com/graphile/crystal/commit/56ce94a847c6a4094643665cbf5d3712f56140b6),
805
+ [`070467c4ea693a2516fc8006bebb88b1ab96fb26`](https://github.com/graphile/crystal/commit/070467c4ea693a2516fc8006bebb88b1ab96fb26),
806
+ [`192a27e08763ea26607344a2ea6c7f5c595cc2a3`](https://github.com/graphile/crystal/commit/192a27e08763ea26607344a2ea6c7f5c595cc2a3),
807
+ [`142e39f26ce329f09bee0b5427f1ddc5103e610e`](https://github.com/graphile/crystal/commit/142e39f26ce329f09bee0b5427f1ddc5103e610e),
808
+ [`6ef6abce15936a896156d5316020df55cf7d18e3`](https://github.com/graphile/crystal/commit/6ef6abce15936a896156d5316020df55cf7d18e3),
809
+ [`17b160d5450e20e0f5c6597d5cffe125ece49d65`](https://github.com/graphile/crystal/commit/17b160d5450e20e0f5c6597d5cffe125ece49d65),
810
+ [`0239c2d519300a72f545e0db7c371adae4ade2a9`](https://github.com/graphile/crystal/commit/0239c2d519300a72f545e0db7c371adae4ade2a9),
811
+ [`09d95319be3e25e023dfbab9d1542dfe06f65355`](https://github.com/graphile/crystal/commit/09d95319be3e25e023dfbab9d1542dfe06f65355),
812
+ [`873b24dc70cea68e236e5dcf5bc7ff8f46fa43fe`](https://github.com/graphile/crystal/commit/873b24dc70cea68e236e5dcf5bc7ff8f46fa43fe),
813
+ [`eb771be5e8b06a0cd53476cb36495e7e1aca56b7`](https://github.com/graphile/crystal/commit/eb771be5e8b06a0cd53476cb36495e7e1aca56b7),
814
+ [`0ea439d33ccef7f8d01ac5f54893ab2bbf1cbd4d`](https://github.com/graphile/crystal/commit/0ea439d33ccef7f8d01ac5f54893ab2bbf1cbd4d),
815
+ [`8034614d1078b1bd177b6e7fcc949420614e3245`](https://github.com/graphile/crystal/commit/8034614d1078b1bd177b6e7fcc949420614e3245),
816
+ [`a830770e775a65ce1d09fa767f38e84f5c0e5139`](https://github.com/graphile/crystal/commit/a830770e775a65ce1d09fa767f38e84f5c0e5139),
817
+ [`459e1869a2ec58925b2bac5458af487c52a8ca37`](https://github.com/graphile/crystal/commit/459e1869a2ec58925b2bac5458af487c52a8ca37),
818
+ [`c350e49e372ec12a4cbf04fb6b4260e01832d12b`](https://github.com/graphile/crystal/commit/c350e49e372ec12a4cbf04fb6b4260e01832d12b),
819
+ [`3176ea3e57d626b39613a73117ef97627370ec83`](https://github.com/graphile/crystal/commit/3176ea3e57d626b39613a73117ef97627370ec83),
820
+ [`46a42f5547c041289aa98657ebc6815f4b6c8539`](https://github.com/graphile/crystal/commit/46a42f5547c041289aa98657ebc6815f4b6c8539),
821
+ [`a87bbd76f1a8b60fd86de65922746d830cc160b4`](https://github.com/graphile/crystal/commit/a87bbd76f1a8b60fd86de65922746d830cc160b4),
822
+ [`be3f174c5aae8fe78a240e1bc4e1de7f18644b43`](https://github.com/graphile/crystal/commit/be3f174c5aae8fe78a240e1bc4e1de7f18644b43),
823
+ [`c43ed67b9d3acbadb172ee88ba9c2a4d32528a25`](https://github.com/graphile/crystal/commit/c43ed67b9d3acbadb172ee88ba9c2a4d32528a25),
824
+ [`576fb8bad56cb940ab444574d752e914d462018a`](https://github.com/graphile/crystal/commit/576fb8bad56cb940ab444574d752e914d462018a),
825
+ [`9f459101fa4428aa4bac71531e75f99e33da8e17`](https://github.com/graphile/crystal/commit/9f459101fa4428aa4bac71531e75f99e33da8e17),
826
+ [`921665df8babe2651ab3b5886ab68bb518f2125b`](https://github.com/graphile/crystal/commit/921665df8babe2651ab3b5886ab68bb518f2125b),
827
+ [`78bb1a615754d772a5fda000e96073c91fa9eba7`](https://github.com/graphile/crystal/commit/78bb1a615754d772a5fda000e96073c91fa9eba7),
828
+ [`c9cd0cc72a4db4b02b2bdf770161c9346cb4b174`](https://github.com/graphile/crystal/commit/c9cd0cc72a4db4b02b2bdf770161c9346cb4b174),
829
+ [`ab0bcda5fc3c136eea09493a7d9ed4542975858e`](https://github.com/graphile/crystal/commit/ab0bcda5fc3c136eea09493a7d9ed4542975858e),
830
+ [`455f4811d37ad8fff91183c7a88621bcf9d79acf`](https://github.com/graphile/crystal/commit/455f4811d37ad8fff91183c7a88621bcf9d79acf),
831
+ [`45adaff886e7cd72b864150927be6c0cb4a7dfe8`](https://github.com/graphile/crystal/commit/45adaff886e7cd72b864150927be6c0cb4a7dfe8),
832
+ [`b05d57b932ea00d10715dcab9f79d443408881fc`](https://github.com/graphile/crystal/commit/b05d57b932ea00d10715dcab9f79d443408881fc)]:
833
+ - grafast@0.1.1-beta.22
834
+ - pg-sql2@5.0.0-beta.9
835
+ - @dataplan/pg@0.0.1-beta.33
836
+ - grafserv@0.1.1-beta.25
837
+ - graphile-build-pg@5.0.0-beta.39
838
+ - @dataplan/json@0.0.1-beta.31
839
+ - graphile-build@5.0.0-beta.34
840
+ - graphile-utils@5.0.0-beta.39
841
+ - graphile-config@0.0.1-beta.16
842
+ - @graphile/lru@5.0.0-beta.4
843
+ - tamedevil@0.0.0-beta.8
844
+
845
+ ## 5.0.0-beta.40
846
+
847
+ ### Patch Changes
848
+
849
+ - Updated dependencies []:
850
+ - grafserv@0.1.1-beta.24
851
+ - graphile-build-pg@5.0.0-beta.38
852
+ - @dataplan/pg@0.0.1-beta.32
853
+ - graphile-utils@5.0.0-beta.38
854
+
855
+ ## 5.0.0-beta.39
856
+
857
+ ### Patch Changes
858
+
859
+ - [#2335](https://github.com/graphile/crystal/pull/2335)
860
+ [`2f31836cb89a7ab27a8919803fe12b53a46d77e4`](https://github.com/graphile/crystal/commit/2f31836cb89a7ab27a8919803fe12b53a46d77e4)
861
+ Thanks [@benjie](https://github.com/benjie)! - PgSelectStep and PgUnionAllStep
862
+ now return objects rather than arrays/streams; thanks to the new Grafast
863
+ .items() method and these classes being "opaque" steps this is _mostly_ a
864
+ non-breaking change.
865
+
866
+ - [#2424](https://github.com/graphile/crystal/pull/2424)
867
+ [`e6da5d956ab696932410e7172cedfacba71dbf5e`](https://github.com/graphile/crystal/commit/e6da5d956ab696932410e7172cedfacba71dbf5e)
868
+ Thanks [@benjie](https://github.com/benjie)! - Small tweaks to make exported
869
+ schemas have nicer formatting.
870
+
871
+ - [#2335](https://github.com/graphile/crystal/pull/2335)
872
+ [`72b300b436a7acedaa7d0e3a7a5458d15a0e5396`](https://github.com/graphile/crystal/commit/72b300b436a7acedaa7d0e3a7a5458d15a0e5396)
873
+ Thanks [@benjie](https://github.com/benjie)! - PgSelectStep's stream behavior
874
+ updated to match the latest logic in Grafast.
875
+
876
+ - [#2376](https://github.com/graphile/crystal/pull/2376)
877
+ [`da6f3c04efe3d8634c0bc3fcf93ac2518de85322`](https://github.com/graphile/crystal/commit/da6f3c04efe3d8634c0bc3fcf93ac2518de85322)
878
+ Thanks [@benjie](https://github.com/benjie)! - Overhaul Grafast to remove more
879
+ input planning - inputs should be evaluated at runtime - and remove more
880
+ plan-time step evaluation.
881
+
882
+ `FieldArgs.get` is no more; use `FieldArgs.getRaw` or use `bakedInput()`
883
+ (TODO: document) to get the "baked" version of a raw input value.
884
+
885
+ Input object fields no longer have `applyPlan`/`inputPlan`, instead having the
886
+ runtime equivalents `apply()` and `baked()`. `FieldArgs` is no longer
887
+ available on input object fields, since these fields are no longer called at
888
+ plantime; instead, the actual value is passed.
889
+
890
+ `FieldArgs` gains `.typeAt(path)` method that details the GraphQL input type
891
+ at the given path.
892
+
893
+ Field arguments are no longer passed `FieldArgs`, instead they're passed a
894
+ (similar) `FieldArg` object representing the argument value itself.
895
+
896
+ `autoApplyAfterParentPlan` is no more - instead if an argument has `applyPlan`
897
+ it will be called automatically unless it was called during the field plan
898
+ resolver itself.
899
+
900
+ `autoApplyAfterParentSubscribePlan` is no more - instead if an argument has
901
+ `applySubscribePlan` it will be called automatically unless it was called
902
+ during the field plan resolver itself.
903
+
904
+ Field arguments no longer support `inputPlan` - use `bakedInput()` if you need
905
+ that.
906
+
907
+ Input fields no longer support `inputPlan`, `applyPlan`,
908
+ `autoApplyAfterParentInputPlan` nor `autoApplyAfterParentApplyPlan`. Instead,
909
+ `apply()` (which is called by `applyStep()` at runtime) has been added.
910
+
911
+ `sqlValueWithCodec(value, codec)` can be used at runtime in places where
912
+ `$step.placeholder($value, codec)` would have been used previously.
913
+ `placeholder` has been removed from all places that are now runtime - namely
914
+ the list of modifiers below...
915
+
916
+ The following `ModifierStep` classes have all dropped their `Step` suffix,
917
+ these `Modifier` classes now all run at runtime, and are thus no longer steps;
918
+ they're invoked as part of the new `applyInput()` (TODO: document) step:
919
+ - `ModifierStep` &rArr; `Modifier`
920
+ - `PgBooleanFilterStep` &rArr; `PgBooleanFilter`
921
+ - `PgClassFilterStep` &rArr; `PgClassFilter`
922
+ - `PgConditionCapableParentStep` &rArr; `PgConditionCapableParent`
923
+ - `PgConditionLikeStep` &rArr; `PgConditionLike`
924
+ - `PgConditionStepMode` &rArr; `PgConditionMode`
925
+ - `PgConditionStep` &rArr; `PgCondition`
926
+ - `PgManyFilterStep` &rArr; `PgManyFilter`
927
+ - `PgOrFilterStep` &rArr; `PgOrFilter`
928
+ - `PgTempTableStep` &rArr; `PgTempTable`
929
+ - `SetterCapableStep` &rArr; `SetterCapable`
930
+ - `SetterStep` &rArr; `Setter`
931
+
932
+ (Interestingly, other than the removal of `placeholder` and the fact they deal
933
+ with runtime values rather than steps now, they're very similar to what they
934
+ were before.)
935
+
936
+ The deprecated forms of the above have been removed.
937
+
938
+ Methods that rely on these modifier plans have been removed:
939
+ - `PgUnionAllStep.wherePlan` - use
940
+ `fieldArg.apply($unionAll, qb => qb.whereBuilder())` instead
941
+ - `PgUnionAllStep.havingPlan` - use
942
+ `fieldArg.apply($unionAll, qb => qb.havingBuilder())` instead
943
+ - Same for PgSelectStep
944
+
945
+ The following gain query builders:
946
+ - `PgInsertSingle`
947
+ - `PgUpdateSingle`
948
+ - `PgDeleteSingle`
949
+
950
+ Query builders gain `meta`, an object that can be augmented with metadata
951
+ about the operation (typically this relates to cursors and similar
952
+ functionality). This is now used to implement `clientMutationId`.
953
+
954
+ Extends query builders with additional functionality.
955
+
956
+ Many of the types have had their generics changed, TypeScript should guide you
957
+ if you have issues here.
958
+
959
+ `NodeIdHandler` now requires a `getIdentifiers` method that runs at runtime
960
+ and returns the identifiers from a decoded NodeId string.
961
+
962
+ Types around GraphQL Global Object Identification (i.e. `Node` / `id`) have
963
+ changed.
964
+
965
+ - [#2357](https://github.com/graphile/crystal/pull/2357)
966
+ [`8026b982a81776fb3d1d808392970c2d678c4023`](https://github.com/graphile/crystal/commit/8026b982a81776fb3d1d808392970c2d678c4023)
967
+ Thanks [@benjie](https://github.com/benjie)! - Start migrating away from
968
+ `applyPlan`/`inputPlan`. ~~When adding an argument to a field you can now
969
+ augment the field's plan resolver via `context.addToPlanResolver` hook~~ (this
970
+ was later replaced with new `inputApply()` step, and arguments still keep
971
+ `applyPlan` though input object fields lose it). Use this and other changes to
972
+ move handling of orderBy to runtime from plantime.
973
+
974
+ Introduces runtime query builder for `PgSelectStep` and `PgUnionAllStep`, and
975
+ `PgSelectStep.apply()`/`PgUnionAllStep.apply()` so that you can register
976
+ callbacks that will augment the query builder at runtime.
977
+
978
+ - Updated dependencies
979
+ [[`d34014a9a3c469154cc796086ba13719954731e5`](https://github.com/graphile/crystal/commit/d34014a9a3c469154cc796086ba13719954731e5),
980
+ [`d3ae3415c230784fdfefc9d192ad93aca462bceb`](https://github.com/graphile/crystal/commit/d3ae3415c230784fdfefc9d192ad93aca462bceb),
981
+ [`98516379ac355a0833a64e002f3717cc3a1d6473`](https://github.com/graphile/crystal/commit/98516379ac355a0833a64e002f3717cc3a1d6473),
982
+ [`f8602d05eed3247c90b87c55d7af580d1698effc`](https://github.com/graphile/crystal/commit/f8602d05eed3247c90b87c55d7af580d1698effc),
983
+ [`65df25534fa3f787ba2ab7fd9547d295ff2b1288`](https://github.com/graphile/crystal/commit/65df25534fa3f787ba2ab7fd9547d295ff2b1288),
984
+ [`1b3c76efd27df73eab3a5a1d221ce13de4cd6b1a`](https://github.com/graphile/crystal/commit/1b3c76efd27df73eab3a5a1d221ce13de4cd6b1a),
985
+ [`f6e22692b628703b8ea48e580dc0b6f0bcbc9c5a`](https://github.com/graphile/crystal/commit/f6e22692b628703b8ea48e580dc0b6f0bcbc9c5a),
986
+ [`e10c372dafbe0d6014b1e946349b22f40aa87ef9`](https://github.com/graphile/crystal/commit/e10c372dafbe0d6014b1e946349b22f40aa87ef9),
987
+ [`c3538050abbb485cf1d43f7c870b89f1ad7c2218`](https://github.com/graphile/crystal/commit/c3538050abbb485cf1d43f7c870b89f1ad7c2218),
988
+ [`3c0a925f26f10cae627a23c49c75ccd8d76b60c8`](https://github.com/graphile/crystal/commit/3c0a925f26f10cae627a23c49c75ccd8d76b60c8),
989
+ [`fcaeb48844156e258a037f420ea1505edb50c52a`](https://github.com/graphile/crystal/commit/fcaeb48844156e258a037f420ea1505edb50c52a),
990
+ [`68926abc31c32ce527327ffbb1ede4b0b7be446b`](https://github.com/graphile/crystal/commit/68926abc31c32ce527327ffbb1ede4b0b7be446b),
991
+ [`98c5009e21e423b0da22c2cb70cdb62909578f50`](https://github.com/graphile/crystal/commit/98c5009e21e423b0da22c2cb70cdb62909578f50),
992
+ [`4b49dbd2df3b339a2ba3f1e9ff400fa1a125298b`](https://github.com/graphile/crystal/commit/4b49dbd2df3b339a2ba3f1e9ff400fa1a125298b),
993
+ [`d7950e8e28ec6106a4ce2f7fe5e35d88b10eac48`](https://github.com/graphile/crystal/commit/d7950e8e28ec6106a4ce2f7fe5e35d88b10eac48),
994
+ [`c8f1971ea4198633ec97f72f82abf65089f71a88`](https://github.com/graphile/crystal/commit/c8f1971ea4198633ec97f72f82abf65089f71a88),
995
+ [`182ed0564104f59b012e0f9ffd452556b0927750`](https://github.com/graphile/crystal/commit/182ed0564104f59b012e0f9ffd452556b0927750),
996
+ [`dd3d22eab73a8554715bf1111e30586251f69a88`](https://github.com/graphile/crystal/commit/dd3d22eab73a8554715bf1111e30586251f69a88),
997
+ [`a120a8e43b24dfc174950cdbb69e481272a0b45e`](https://github.com/graphile/crystal/commit/a120a8e43b24dfc174950cdbb69e481272a0b45e),
998
+ [`be1e558d6a1a8cae3bf4b5724c340469d8837504`](https://github.com/graphile/crystal/commit/be1e558d6a1a8cae3bf4b5724c340469d8837504),
999
+ [`3b0f5082b2272997ce33ce8823a4752513d19e28`](https://github.com/graphile/crystal/commit/3b0f5082b2272997ce33ce8823a4752513d19e28),
1000
+ [`84f06eafa051e907a3050237ac6ee5aefb184652`](https://github.com/graphile/crystal/commit/84f06eafa051e907a3050237ac6ee5aefb184652),
1001
+ [`4a3aeaa77c8b8d2e39c1a9d05581d0c613b812cf`](https://github.com/graphile/crystal/commit/4a3aeaa77c8b8d2e39c1a9d05581d0c613b812cf),
1002
+ [`3789326b2e2fdb86519acc75e606c752ddefe590`](https://github.com/graphile/crystal/commit/3789326b2e2fdb86519acc75e606c752ddefe590),
1003
+ [`12d3a7174949794a1679132635e196f5dadce8a2`](https://github.com/graphile/crystal/commit/12d3a7174949794a1679132635e196f5dadce8a2),
1004
+ [`ab7658ac44e1a5a0a98c6bb688a26d94b1175cc1`](https://github.com/graphile/crystal/commit/ab7658ac44e1a5a0a98c6bb688a26d94b1175cc1),
1005
+ [`bc2a00d35f0a1954dba22e857adc3f4e2f5118e5`](https://github.com/graphile/crystal/commit/bc2a00d35f0a1954dba22e857adc3f4e2f5118e5),
1006
+ [`ceeb9a6b63e566b09298e0440a385943302ad0f9`](https://github.com/graphile/crystal/commit/ceeb9a6b63e566b09298e0440a385943302ad0f9),
1007
+ [`3e8c64bef928295494119e15e1e55cbdadb696fa`](https://github.com/graphile/crystal/commit/3e8c64bef928295494119e15e1e55cbdadb696fa),
1008
+ [`0fc2db95d90df918cf5c59ef85f22ac78d8000d3`](https://github.com/graphile/crystal/commit/0fc2db95d90df918cf5c59ef85f22ac78d8000d3),
1009
+ [`d68c5831ed66dc8a7a79aab2100ca733409c6f72`](https://github.com/graphile/crystal/commit/d68c5831ed66dc8a7a79aab2100ca733409c6f72),
1010
+ [`90e81a5deeae554a8be2dd55dcd01489860e96e6`](https://github.com/graphile/crystal/commit/90e81a5deeae554a8be2dd55dcd01489860e96e6),
1011
+ [`836c8327a5ca1bd3c69f72055e71d00694de363e`](https://github.com/graphile/crystal/commit/836c8327a5ca1bd3c69f72055e71d00694de363e),
1012
+ [`2f31836cb89a7ab27a8919803fe12b53a46d77e4`](https://github.com/graphile/crystal/commit/2f31836cb89a7ab27a8919803fe12b53a46d77e4),
1013
+ [`c59132eb7a93bc82493d2f1ca050db8aaea9f4d1`](https://github.com/graphile/crystal/commit/c59132eb7a93bc82493d2f1ca050db8aaea9f4d1),
1014
+ [`7c38cdeffe034c9b4f5cdd03a8f7f446bd52dcb7`](https://github.com/graphile/crystal/commit/7c38cdeffe034c9b4f5cdd03a8f7f446bd52dcb7),
1015
+ [`728888b28fcd2a6fc481e0ccdfe20d41181a091f`](https://github.com/graphile/crystal/commit/728888b28fcd2a6fc481e0ccdfe20d41181a091f),
1016
+ [`f4f39092d7a51517668384945895d3b450237cce`](https://github.com/graphile/crystal/commit/f4f39092d7a51517668384945895d3b450237cce),
1017
+ [`5cf3dc9d158891eaf324b2cd4f485d1d4bbb6b5e`](https://github.com/graphile/crystal/commit/5cf3dc9d158891eaf324b2cd4f485d1d4bbb6b5e),
1018
+ [`925689578ee9def403382df70f0e003bb299c166`](https://github.com/graphile/crystal/commit/925689578ee9def403382df70f0e003bb299c166),
1019
+ [`83d3b533e702cc875b46ba2ca02bf3642b421be8`](https://github.com/graphile/crystal/commit/83d3b533e702cc875b46ba2ca02bf3642b421be8),
1020
+ [`7001138c38e09822ad13db1018c62d2cac37941e`](https://github.com/graphile/crystal/commit/7001138c38e09822ad13db1018c62d2cac37941e),
1021
+ [`e9e7e33665e22ec397e9ead054d2e4aad3eadc8c`](https://github.com/graphile/crystal/commit/e9e7e33665e22ec397e9ead054d2e4aad3eadc8c),
1022
+ [`bb6ec8d834e3e630e28316196246f514114a2296`](https://github.com/graphile/crystal/commit/bb6ec8d834e3e630e28316196246f514114a2296),
1023
+ [`3e188c2e981193d228ba3b7433f5e326336f629b`](https://github.com/graphile/crystal/commit/3e188c2e981193d228ba3b7433f5e326336f629b),
1024
+ [`07a5469e5d3d050a7bcab928bb751c9e150d2e49`](https://github.com/graphile/crystal/commit/07a5469e5d3d050a7bcab928bb751c9e150d2e49),
1025
+ [`e6da5d956ab696932410e7172cedfacba71dbf5e`](https://github.com/graphile/crystal/commit/e6da5d956ab696932410e7172cedfacba71dbf5e),
1026
+ [`2b1918d053f590cdc534c8cb81f7e74e96c1bbe6`](https://github.com/graphile/crystal/commit/2b1918d053f590cdc534c8cb81f7e74e96c1bbe6),
1027
+ [`037a1bcdc8ed8493d4748e08c18f258e4382a815`](https://github.com/graphile/crystal/commit/037a1bcdc8ed8493d4748e08c18f258e4382a815),
1028
+ [`72b300b436a7acedaa7d0e3a7a5458d15a0e5396`](https://github.com/graphile/crystal/commit/72b300b436a7acedaa7d0e3a7a5458d15a0e5396),
1029
+ [`770363214ee630746cddc9080dec22bbf38a3bb5`](https://github.com/graphile/crystal/commit/770363214ee630746cddc9080dec22bbf38a3bb5),
1030
+ [`d1ecb39693a341f85762b27012ec4ea013857b0c`](https://github.com/graphile/crystal/commit/d1ecb39693a341f85762b27012ec4ea013857b0c),
1031
+ [`042ebafe11fcf7e2ecac9b131265a55dddd42a6d`](https://github.com/graphile/crystal/commit/042ebafe11fcf7e2ecac9b131265a55dddd42a6d),
1032
+ [`fa005eb0783c58a2476add984fbdd462e0e91dbe`](https://github.com/graphile/crystal/commit/fa005eb0783c58a2476add984fbdd462e0e91dbe),
1033
+ [`7bb77961a38abea8a07980a3f47bc3ca22dac8f8`](https://github.com/graphile/crystal/commit/7bb77961a38abea8a07980a3f47bc3ca22dac8f8),
1034
+ [`df0e5a0f968cf6f9ae97b68745a9a2f391324bf5`](https://github.com/graphile/crystal/commit/df0e5a0f968cf6f9ae97b68745a9a2f391324bf5),
1035
+ [`ef4cf75acd80e6b9c700c2b5a7ace899e565ef7f`](https://github.com/graphile/crystal/commit/ef4cf75acd80e6b9c700c2b5a7ace899e565ef7f),
1036
+ [`ba2bfa15deaaddd92757a56c2b761624afe940bd`](https://github.com/graphile/crystal/commit/ba2bfa15deaaddd92757a56c2b761624afe940bd),
1037
+ [`c041fd250372c57601188b65a6411c8f440afab6`](https://github.com/graphile/crystal/commit/c041fd250372c57601188b65a6411c8f440afab6),
1038
+ [`629b45aab49151810f6efc18ac18f7d735626433`](https://github.com/graphile/crystal/commit/629b45aab49151810f6efc18ac18f7d735626433),
1039
+ [`6d19724330d50d076aab9442660fa8abddd095cb`](https://github.com/graphile/crystal/commit/6d19724330d50d076aab9442660fa8abddd095cb),
1040
+ [`ca5bc1a834df7b894088fb8602a12f9fcff55b38`](https://github.com/graphile/crystal/commit/ca5bc1a834df7b894088fb8602a12f9fcff55b38),
1041
+ [`da6f3c04efe3d8634c0bc3fcf93ac2518de85322`](https://github.com/graphile/crystal/commit/da6f3c04efe3d8634c0bc3fcf93ac2518de85322),
1042
+ [`8026b982a81776fb3d1d808392970c2d678c4023`](https://github.com/graphile/crystal/commit/8026b982a81776fb3d1d808392970c2d678c4023),
1043
+ [`d257a1a1e59a7d4da0bf67345c07b04c04a2f7da`](https://github.com/graphile/crystal/commit/d257a1a1e59a7d4da0bf67345c07b04c04a2f7da),
1044
+ [`00d79e6f5608affc3f36bb0ce4ca2547230174e7`](https://github.com/graphile/crystal/commit/00d79e6f5608affc3f36bb0ce4ca2547230174e7),
1045
+ [`412b92a0b1e03ad962521f630b57a996d8620cf6`](https://github.com/graphile/crystal/commit/412b92a0b1e03ad962521f630b57a996d8620cf6),
1046
+ [`15854c5109114919b3d38fa675c539cda1f634a1`](https://github.com/graphile/crystal/commit/15854c5109114919b3d38fa675c539cda1f634a1),
1047
+ [`f0bc64b71914dfdd3612f4b65370401fd85b97bc`](https://github.com/graphile/crystal/commit/f0bc64b71914dfdd3612f4b65370401fd85b97bc)]:
1048
+ - grafast@0.1.1-beta.21
1049
+ - @dataplan/pg@0.0.1-beta.32
1050
+ - pg-sql2@5.0.0-beta.8
1051
+ - graphile-build-pg@5.0.0-beta.38
1052
+ - graphile-utils@5.0.0-beta.38
1053
+ - graphile-build@5.0.0-beta.33
1054
+ - @dataplan/json@0.0.1-beta.30
1055
+ - graphile-config@0.0.1-beta.15
1056
+ - grafserv@0.1.1-beta.23
1057
+
1058
+ ## 5.0.0-beta.38
1059
+
1060
+ ### Patch Changes
1061
+
1062
+ - Updated dependencies
1063
+ [[`fc9d64eb8`](https://github.com/graphile/crystal/commit/fc9d64eb8002d3b72625bc505ed76c07f4296d68),
1064
+ [`a2dbad945`](https://github.com/graphile/crystal/commit/a2dbad9457195bec797d72e4e6d45f45278f9f69),
1065
+ [`31078842a`](https://github.com/graphile/crystal/commit/31078842ad0eeaa7111491fa9eb5e3bd026fb38a),
1066
+ [`5a0ec31de`](https://github.com/graphile/crystal/commit/5a0ec31deae91f1dd17a77a4bb7c1a911a27e26a)]:
1067
+ - @dataplan/pg@0.0.1-beta.31
1068
+ - grafast@0.1.1-beta.20
1069
+ - graphile-build-pg@5.0.0-beta.37
1070
+ - graphile-utils@5.0.0-beta.37
1071
+ - @dataplan/json@0.0.1-beta.29
1072
+ - grafserv@0.1.1-beta.22
1073
+ - graphile-build@5.0.0-beta.32
1074
+
1075
+ ## 5.0.0-beta.37
1076
+
1077
+ ### Patch Changes
1078
+
1079
+ - Updated dependencies
1080
+ [[`83c546509`](https://github.com/graphile/crystal/commit/83c546509d24be2955a56120981363ad3c3a5f3f)]:
1081
+ - graphile-config@0.0.1-beta.14
1082
+ - @dataplan/pg@0.0.1-beta.30
1083
+ - grafast@0.1.1-beta.19
1084
+ - grafserv@0.1.1-beta.21
1085
+ - graphile-build@5.0.0-beta.31
1086
+ - graphile-build-pg@5.0.0-beta.36
1087
+ - graphile-utils@5.0.0-beta.36
1088
+ - @dataplan/json@0.0.1-beta.28
1089
+
1090
+ ## 5.0.0-beta.36
1091
+
1092
+ ### Patch Changes
1093
+
1094
+ - [#2279](https://github.com/graphile/crystal/pull/2279)
1095
+ [`b336a5829`](https://github.com/graphile/crystal/commit/b336a58291cfec7aef884d3843172d408abfaf3c)
1096
+ Thanks [@benjie](https://github.com/benjie)! - Introduce step caching to
1097
+ reduce deduplication workload safely, thereby reducing planning time for many
1098
+ larger queries.
1099
+ - Updated dependencies
1100
+ [[`7580bc16a`](https://github.com/graphile/crystal/commit/7580bc16a050fd8d916c6dabe9d1ded980090349),
1101
+ [`b336a5829`](https://github.com/graphile/crystal/commit/b336a58291cfec7aef884d3843172d408abfaf3c)]:
1102
+ - graphile-config@0.0.1-beta.13
1103
+ - @dataplan/pg@0.0.1-beta.29
1104
+ - grafast@0.1.1-beta.18
1105
+ - grafserv@0.1.1-beta.20
1106
+ - graphile-build@5.0.0-beta.30
1107
+ - graphile-build-pg@5.0.0-beta.35
1108
+ - graphile-utils@5.0.0-beta.35
1109
+ - @dataplan/json@0.0.1-beta.27
1110
+
1111
+ ## 5.0.0-beta.35
1112
+
1113
+ ### Patch Changes
1114
+
1115
+ - [#2269](https://github.com/graphile/crystal/pull/2269)
1116
+ [`bee1db4f4`](https://github.com/graphile/crystal/commit/bee1db4f442502b62cb05cd0f7092990328497b8)
1117
+ Thanks [@benjie](https://github.com/benjie)! - Hotfix to inflection changes in
1118
+ beta.34 - fixes behavior of `orderByAttributeEnum` and removes V4 override of
1119
+ `_joinAttributeNames` which shouldn't be necessary (and seems to do more harm
1120
+ than good).
1121
+ - Updated dependencies
1122
+ [[`bee1db4f4`](https://github.com/graphile/crystal/commit/bee1db4f442502b62cb05cd0f7092990328497b8)]:
1123
+ - graphile-build-pg@5.0.0-beta.34
1124
+ - graphile-utils@5.0.0-beta.34
1125
+
1126
+ ## 5.0.0-beta.34
1127
+
1128
+ ### Patch Changes
1129
+
1130
+ - [#2251](https://github.com/graphile/crystal/pull/2251)
1131
+ [`555d65cce`](https://github.com/graphile/crystal/commit/555d65ccecb875f1e34cb40108176f0ddc11df64)
1132
+ Thanks [@benjie](https://github.com/benjie)! - We now enforce GraphQL name
1133
+ checks earlier and supply more information to better reveal where any invalid
1134
+ names are originating.
1135
+
1136
+ - [#2251](https://github.com/graphile/crystal/pull/2251)
1137
+ [`efa25d97d`](https://github.com/graphile/crystal/commit/efa25d97df2e00f13bc29806d396a8366a121031)
1138
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 **Inflection changes!** V4
1139
+ preset should be (mostly) unaffected, but Amber preset will likely have
1140
+ changes between `ID` and `ROW_ID` in various places, plus missing underscores
1141
+ may reappear/etc. Be sure to diff your schema before/after this update (as you
1142
+ should with every update... and to be honest, with everything else that
1143
+ changes your schema).
1144
+
1145
+ Normally `camelCase`/`upperCamelCase`/`constantCase`/etc are the final step
1146
+ before we name a field/type/enumValue/etc; however it turns out that some
1147
+ inflectors were using the camel-cased output as input to their own
1148
+ inflection - for example, when calculating the name of a relation it would
1149
+ take the column names _camel-cased_ and then combine them into a string which
1150
+ was then camel-cased again. Even worse, when these values are then used in an
1151
+ enum, it would then be _constant-cased_, so you end up with string 👉
1152
+ camel-case 👉 concatenate 👉 camel-case 👉 concatenate 👉 constant-case. This
1153
+ lead to certain edge cases where fields with numbers or underscores may come
1154
+ out in unexpected ways.
1155
+
1156
+ This release creates "raw" backing inflectors for a few things that remove the
1157
+ final step (camel-casing) so that later usage may choose to use the raw value
1158
+ rather than the camel-cased value. And due to this, we've also moved the `id`
1159
+ 👉 `rowId` tweaks from the `attribute()` inflector into the `_attributeName()`
1160
+ inflector - which is where most of the changes have come from. We've undone
1161
+ this change in the V4 preset, so if you don't use the V5 preset but need to
1162
+ undo this change, please check out the V4 overrides of:
1163
+ - [`_attributeName`](https://github.com/graphile/crystal/blob/ca9c872ff6c95915bd9e2f33c1370d86742ce815/postgraphile/postgraphile/src/presets/v4.ts#L135-L145)
1164
+ - [`_joinAttributeNames`](https://github.com/graphile/crystal/blob/ca9c872ff6c95915bd9e2f33c1370d86742ce815/postgraphile/postgraphile/src/plugins/PgV4InflectionPlugin.ts#L131-L138)
1165
+ - [`attribute`](https://github.com/graphile/crystal/blob/ca9c872ff6c95915bd9e2f33c1370d86742ce815/postgraphile/postgraphile/src/presets/v4.ts#L158-L169)
1166
+
1167
+ Note: the V4 preset is fairly stable, but the Amber preset is being constantly
1168
+ iterated to improve the OOTB V5 experience - it will only be stable once
1169
+ V5.0.0 is released.
1170
+
1171
+ - [#2252](https://github.com/graphile/crystal/pull/2252)
1172
+ [`d88b69d05`](https://github.com/graphile/crystal/commit/d88b69d0591601fb44b3e6e71b137b8235e70157)
1173
+ Thanks [@benjie](https://github.com/benjie)! - V4 preset now supports
1174
+ extendedErrors, showErrorStack and bodySizeLimit options.
1175
+
1176
+ - [#2257](https://github.com/graphile/crystal/pull/2257)
1177
+ [`2a37fb99a`](https://github.com/graphile/crystal/commit/2a37fb99a04784647dff6ab8c5bfffb072cc6e8a)
1178
+ Thanks [@benjie](https://github.com/benjie)! - Overhaul how PostgreSQL arrays
1179
+ are handled, and fix the "empty arrays become null" bug caused by using
1180
+ `array_agg()`.
1181
+
1182
+ - [#2265](https://github.com/graphile/crystal/pull/2265)
1183
+ [`5d9f2de85`](https://github.com/graphile/crystal/commit/5d9f2de8519b216732b17464d0b326ec8d7c58de)
1184
+ Thanks [@benjie](https://github.com/benjie)! - Prevents inlining (via joins)
1185
+ child PgSelect queries into parents when the parent is relying on implicit
1186
+ ordering coming from a function or suitably flagged subquery.
1187
+ - Updated dependencies
1188
+ [[`555d65cce`](https://github.com/graphile/crystal/commit/555d65ccecb875f1e34cb40108176f0ddc11df64),
1189
+ [`866673e14`](https://github.com/graphile/crystal/commit/866673e14f7ad76b6f6d83d1b4e3a4eff8fdba37),
1190
+ [`69ab227b5`](https://github.com/graphile/crystal/commit/69ab227b5e1c057a6fc8ebba87bde80d5aa7f3c8),
1191
+ [`efa25d97d`](https://github.com/graphile/crystal/commit/efa25d97df2e00f13bc29806d396a8366a121031),
1192
+ [`9a0f9e78c`](https://github.com/graphile/crystal/commit/9a0f9e78c4ee46f50f49bb068baddef7e1de4119),
1193
+ [`d13b76f0f`](https://github.com/graphile/crystal/commit/d13b76f0fef2a58466ecb44880af62d25910e83e),
1194
+ [`b167bd849`](https://github.com/graphile/crystal/commit/b167bd8499be5866b71bac6594d55bd768fda1d0),
1195
+ [`a202145c5`](https://github.com/graphile/crystal/commit/a202145c5af3e5467424e6772d532c2db1eb67c6),
1196
+ [`7bf045282`](https://github.com/graphile/crystal/commit/7bf04528264c3b9c509f148253fed96d3394141d),
1197
+ [`2a37fb99a`](https://github.com/graphile/crystal/commit/2a37fb99a04784647dff6ab8c5bfffb072cc6e8a),
1198
+ [`5d9f2de85`](https://github.com/graphile/crystal/commit/5d9f2de8519b216732b17464d0b326ec8d7c58de),
1199
+ [`6a13ecbd4`](https://github.com/graphile/crystal/commit/6a13ecbd45534c39c846c1d8bc58242108426dd1),
1200
+ [`84f07626d`](https://github.com/graphile/crystal/commit/84f07626d9dd9e22f6ae6a1045053df046fbc4ea),
1201
+ [`86e228299`](https://github.com/graphile/crystal/commit/86e22829996a745dc1f8cbaf32e709b1bd346e79),
1202
+ [`933786868`](https://github.com/graphile/crystal/commit/9337868689f4f05ab5faf2d4bb18a8ad8e23e189),
1203
+ [`cba6ee06d`](https://github.com/graphile/crystal/commit/cba6ee06d38ec5ae4ef4dafa58569fad61f239ac)]:
1204
+ - graphile-build-pg@5.0.0-beta.33
1205
+ - graphile-build@5.0.0-beta.29
1206
+ - grafserv@0.1.1-beta.19
1207
+ - grafast@0.1.1-beta.17
1208
+ - graphile-config@0.0.1-beta.12
1209
+ - pg-sql2@5.0.0-beta.7
1210
+ - @dataplan/pg@0.0.1-beta.28
1211
+ - graphile-utils@5.0.0-beta.33
1212
+ - @dataplan/json@0.0.1-beta.26
1213
+
1214
+ ## 5.0.0-beta.33
1215
+
1216
+ ### Patch Changes
1217
+
1218
+ - [#2229](https://github.com/graphile/crystal/pull/2229)
1219
+ [`87bdf9730`](https://github.com/graphile/crystal/commit/87bdf973036a3801e44b22cfc9f0feb639de4aa9)
1220
+ Thanks [@benjie](https://github.com/benjie)! - Fixes bug handling optional
1221
+ arguments to computed column functions.
1222
+
1223
+ - [#2230](https://github.com/graphile/crystal/pull/2230)
1224
+ [`aa480f6a3`](https://github.com/graphile/crystal/commit/aa480f6a3db8b545ff113e7a3a4b479be42a0eab)
1225
+ Thanks [@benjie](https://github.com/benjie)! - Fix bug recognizing the
1226
+ required-ness of arguments to functions using `out` args or `returns table` -
1227
+ this particularly affects people using `pgStrictFunctions` and should result
1228
+ in a couple of required arguments becoming nullable.
1229
+ - Updated dependencies
1230
+ [[`87bdf9730`](https://github.com/graphile/crystal/commit/87bdf973036a3801e44b22cfc9f0feb639de4aa9),
1231
+ [`5626c7d36`](https://github.com/graphile/crystal/commit/5626c7d3649285e11fe9857dfa319d2883d027eb),
1232
+ [`bf2a2e72a`](https://github.com/graphile/crystal/commit/bf2a2e72ab78a01f5aba6cda97b5a125563b1f3d),
1233
+ [`76c7340b7`](https://github.com/graphile/crystal/commit/76c7340b74d257c454beec883384d19ef078b21e),
1234
+ [`aa480f6a3`](https://github.com/graphile/crystal/commit/aa480f6a3db8b545ff113e7a3a4b479be42a0eab)]:
1235
+ - graphile-build-pg@5.0.0-beta.32
1236
+ - graphile-config@0.0.1-beta.11
1237
+ - grafserv@0.1.1-beta.18
1238
+ - grafast@0.1.1-beta.16
1239
+ - graphile-utils@5.0.0-beta.32
1240
+ - @dataplan/pg@0.0.1-beta.27
1241
+ - graphile-build@5.0.0-beta.28
1242
+ - @dataplan/json@0.0.1-beta.25
1243
+
1244
+ ## 5.0.0-beta.32
1245
+
1246
+ ### Patch Changes
1247
+
1248
+ - Updated dependencies
1249
+ [[`632691409`](https://github.com/graphile/crystal/commit/6326914098af55f20ac85ccf3537e75910a7dafa)]:
1250
+ - graphile-build-pg@5.0.0-beta.31
1251
+ - graphile-build@5.0.0-beta.27
1252
+ - graphile-utils@5.0.0-beta.31
1253
+
1254
+ ## 5.0.0-beta.31
1255
+
1256
+ ### Patch Changes
1257
+
1258
+ - Updated dependencies
1259
+ [[`0b1f7b577`](https://github.com/graphile/crystal/commit/0b1f7b577114a49b8e3283823845ec6e37484240)]:
1260
+ - graphile-build-pg@5.0.0-beta.30
1261
+ - graphile-build@5.0.0-beta.26
1262
+ - graphile-utils@5.0.0-beta.30
1263
+
1264
+ ## 5.0.0-beta.30
1265
+
1266
+ ### Patch Changes
1267
+
1268
+ - [#2197](https://github.com/graphile/crystal/pull/2197)
1269
+ [`d7e6e714f`](https://github.com/graphile/crystal/commit/d7e6e714f0cc5656112703484298b77538b2dccc)
1270
+ Thanks [@benjie](https://github.com/benjie)! - Amber preset now supports
1271
+ `@resultFieldName` on mutation functions, like V4 preset does.
1272
+
1273
+ - [#2187](https://github.com/graphile/crystal/pull/2187)
1274
+ [`bb006ec7b`](https://github.com/graphile/crystal/commit/bb006ec7bdab24192c84f093ce3f92969aeb7279)
1275
+ Thanks [@benjie](https://github.com/benjie)! - Fix behavior inheritance
1276
+ especially around functions incorrectly inheriting from their underlying
1277
+ codecs, bugs in unlogged/temp table behavior, and incorrect skipping of
1278
+ generating table types. You may find after this change you have fields
1279
+ appearing in your schema that were not present before, typically these will
1280
+ represent database functions where you `@omit`'d the underlying table -
1281
+ omitting the table should not prevent a function from accessing it. Further,
1282
+ fix behavior of `@omit read` emulation to add
1283
+ `-connection -list -array -single`.
1284
+
1285
+ - [#2156](https://github.com/graphile/crystal/pull/2156)
1286
+ [`6fdc6cad8`](https://github.com/graphile/crystal/commit/6fdc6cad8f8d1230202df533d05cc2bd80538f09)
1287
+ Thanks [@benjie](https://github.com/benjie)! - Added `pgRegistry.pgExecutors`
1288
+ so executors don't need to be looked up from a resource (this causes
1289
+ confusion) - instead they can be referenced directly. By default there's one
1290
+ executor called `main`, i.e. `build.input.pgRegistry.pgExecutors.main`.
1291
+
1292
+ - [#2175](https://github.com/graphile/crystal/pull/2175)
1293
+ [`c69b2fdec`](https://github.com/graphile/crystal/commit/c69b2fdec2d73f1101440eb96fe126f9ad77db98)
1294
+ Thanks [@benjie](https://github.com/benjie)! - Fix 'Container is falsy' error
1295
+ message the latest Babel patch release would cause.
1296
+
1297
+ - [#2191](https://github.com/graphile/crystal/pull/2191)
1298
+ [`1eac03ec2`](https://github.com/graphile/crystal/commit/1eac03ec2e9da65c64b7754c04292f43da82c40b)
1299
+ Thanks [@benjie](https://github.com/benjie)! - Broaden types around
1300
+ `pgSelectSingleFromRecord`
1301
+
1302
+ - [#2158](https://github.com/graphile/crystal/pull/2158)
1303
+ [`dfac43992`](https://github.com/graphile/crystal/commit/dfac43992019b0b6c1d113d2490a87eb03d103d7)
1304
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 Amber preset no longer
1305
+ enables backward pagination options (`before`, `last`) on functions by
1306
+ default - add `+backwards` behavior to these functions to enable. If you're
1307
+ using the V4 preset you should be unaffected by this change because it enables
1308
+ `+backwards` by default.
1309
+
1310
+ - [#2160](https://github.com/graphile/crystal/pull/2160)
1311
+ [`426e9320e`](https://github.com/graphile/crystal/commit/426e9320e76ef95927eebb6fe4072050b6208771)
1312
+ Thanks [@benjie](https://github.com/benjie)! - Massive overhaul of the
1313
+ behavior system which now has a centralized registry of known behaviors and
1314
+ applies behaviors in a more careful and nuanced way, removing many hacks and
1315
+ workarounds, and ultimately meaning that `defaultBehavior: "-*"` should now
1316
+ operate correctly. Importantly, `addBehaviorToTags()` has been removed - you
1317
+ should use `plugin.schema.entityBehaviors` to indicate behaviors as shown in
1318
+ this PR - do not mod the tags directly unless they're explicitly meant to be
1319
+ overrides.
1320
+
1321
+ Technically this is a significant breaking change (besides the removal of the
1322
+ `addBehaviorToTags()` helper) because the order in which behaviors are applied
1323
+ has changed, and so a different behavior might ultimately "win". This shows up
1324
+ in places where there is ambiguity, for example if you add `@filterable` to a
1325
+ function that you don't have execute permissions on, that function will now
1326
+ show up in the schema since user overrides (smart tags) "win" versus inferred
1327
+ behaviors such as introspected permissions; this wasn't the case before.
1328
+ Hopefully most users will not notice any difference, and for those who do, the
1329
+ `graphile behavior debug` CLI may be able to help you figure out what's going
1330
+ on.
1331
+
1332
+ Be sure to print your schema before and after this update and look for
1333
+ changes; if there are changes then you likely need to fix the relevant
1334
+ behaviors/smart tags. (Hopefully there's no changes for you!)
1335
+
1336
+ You'll also need to change any places where you're specifying behaviors that
1337
+ will be type checked; you can either cast your existing strings e.g.
1338
+ `defaultBehavior: "+connection -list" as GraphileBuild.BehaviorString`, or
1339
+ preferably you can specify your behaviors as an array, which should give you
1340
+ auto-complete on each entry; e.g. `defaultBehavior: ["connection", "-list"]`.
1341
+
1342
+ - [#2188](https://github.com/graphile/crystal/pull/2188)
1343
+ [`282eb909f`](https://github.com/graphile/crystal/commit/282eb909f3e2dc74fb262714248d29056464fb1d)
1344
+ Thanks [@benjie](https://github.com/benjie)! - PostGraphile V4 preset now
1345
+ automatically includes the Amber preset on which it relies.
1346
+
1347
+ - [#2202](https://github.com/graphile/crystal/pull/2202)
1348
+ [`2efadc0f8`](https://github.com/graphile/crystal/commit/2efadc0f80c3a0c172fb94c770afecc5447e832b)
1349
+ Thanks [@benjie](https://github.com/benjie)! - Postgres v17 support
1350
+
1351
+ - [#2151](https://github.com/graphile/crystal/pull/2151)
1352
+ [`e8a9fd424`](https://github.com/graphile/crystal/commit/e8a9fd4243981b892364148eca1df66620ddeb87)
1353
+ Thanks [@benjie](https://github.com/benjie)! - Fix bug preventing using
1354
+ certain steps as input to `resource.find({...})` and `resource.get({...})`.
1355
+
1356
+ - [#2188](https://github.com/graphile/crystal/pull/2188)
1357
+ [`cc0941731`](https://github.com/graphile/crystal/commit/cc0941731a1679bc04ce7b7fd4254009bb5f1f62)
1358
+ Thanks [@benjie](https://github.com/benjie)! - Overhaul the way in which
1359
+ `graphile-config` presets work such that including a preset at two different
1360
+ layers shouldn't result in unexpected behavior.
1361
+
1362
+ - [#2157](https://github.com/graphile/crystal/pull/2157)
1363
+ [`50f6ce456`](https://github.com/graphile/crystal/commit/50f6ce456de3edd084869b54ee9f2eaf51a7fa0c)
1364
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 PostGraphile now ignores
1365
+ unlogged database tables by default.
1366
+
1367
+ - [#2190](https://github.com/graphile/crystal/pull/2190)
1368
+ [`b0865d169`](https://github.com/graphile/crystal/commit/b0865d1691105b5419009954c98c8109a27a5d81)
1369
+ Thanks [@benjie](https://github.com/benjie)! - Apply `assertNotAsync` and
1370
+ `assertNotPromise` in more places to detect plan resolvers returning promises.
1371
+
1372
+ - [#2199](https://github.com/graphile/crystal/pull/2199)
1373
+ [`3b09b414f`](https://github.com/graphile/crystal/commit/3b09b414ff43c34593373fa1f242481b0c7ada70)
1374
+ Thanks [@benjie](https://github.com/benjie)! - Database enum comments are now
1375
+ reflected in the schema.
1376
+
1377
+ - [#2196](https://github.com/graphile/crystal/pull/2196)
1378
+ [`b7b6dd64f`](https://github.com/graphile/crystal/commit/b7b6dd64fcc07f2ca15528fd39d61297d743dcc6)
1379
+ Thanks [@benjie](https://github.com/benjie)! - 🚨 `@notNull` on a volatile
1380
+ function now results in the field on the payload becoming non-null, not the
1381
+ mutation field itself.
1382
+
1383
+ - [#2155](https://github.com/graphile/crystal/pull/2155)
1384
+ [`8b472cd51`](https://github.com/graphile/crystal/commit/8b472cd51cd66d8227f9f2722d09c0a774792b0f)
1385
+ Thanks [@benjie](https://github.com/benjie)! - `disablePlugins` now supports
1386
+ TypeScript auto-completion of known plugin names. Other names are still
1387
+ accepted without error, so this is just a minor DX improvement rather than
1388
+ type safety.
1389
+
1390
+ - [#2198](https://github.com/graphile/crystal/pull/2198)
1391
+ [`ba637b56d`](https://github.com/graphile/crystal/commit/ba637b56d79a14f82fe555739921724eab0c07f7)
1392
+ Thanks [@benjie](https://github.com/benjie)! - Ensure that interface subtypes
1393
+ are added to schema even if not referenced directly.
1394
+ - Updated dependencies
1395
+ [[`d7e6e714f`](https://github.com/graphile/crystal/commit/d7e6e714f0cc5656112703484298b77538b2dccc),
1396
+ [`d5834def1`](https://github.com/graphile/crystal/commit/d5834def1fb84f3e2c0c0a6f146f8249a6df890a),
1397
+ [`bb006ec7b`](https://github.com/graphile/crystal/commit/bb006ec7bdab24192c84f093ce3f92969aeb7279),
1398
+ [`653929af0`](https://github.com/graphile/crystal/commit/653929af0a99a8a4d52b66e66c736be668b8700a),
1399
+ [`6fdc6cad8`](https://github.com/graphile/crystal/commit/6fdc6cad8f8d1230202df533d05cc2bd80538f09),
1400
+ [`42b982463`](https://github.com/graphile/crystal/commit/42b9824637a6c05e02935f2b05b5e8e0c61965a6),
1401
+ [`eb69c7361`](https://github.com/graphile/crystal/commit/eb69c7361fc7bf8c5b1ce342eeb698bd28c9e013),
1402
+ [`54054b873`](https://github.com/graphile/crystal/commit/54054b8733236ba7b2f2fa47d84e085f7196e3f9),
1403
+ [`884a4b429`](https://github.com/graphile/crystal/commit/884a4b4297af90fdadaf73addd524f1fbbcfdcce),
1404
+ [`0df171123`](https://github.com/graphile/crystal/commit/0df17112300a8ea391dfd220c5f05d362ceaa58a),
1405
+ [`1eac03ec2`](https://github.com/graphile/crystal/commit/1eac03ec2e9da65c64b7754c04292f43da82c40b),
1406
+ [`dfac43992`](https://github.com/graphile/crystal/commit/dfac43992019b0b6c1d113d2490a87eb03d103d7),
1407
+ [`38835313a`](https://github.com/graphile/crystal/commit/38835313ad93445206dccdd4cf07b90c5a6e4377),
1408
+ [`426e9320e`](https://github.com/graphile/crystal/commit/426e9320e76ef95927eebb6fe4072050b6208771),
1409
+ [`e8a9fd424`](https://github.com/graphile/crystal/commit/e8a9fd4243981b892364148eca1df66620ddeb87),
1410
+ [`cc0941731`](https://github.com/graphile/crystal/commit/cc0941731a1679bc04ce7b7fd4254009bb5f1f62),
1411
+ [`50f6ce456`](https://github.com/graphile/crystal/commit/50f6ce456de3edd084869b54ee9f2eaf51a7fa0c),
1412
+ [`b0865d169`](https://github.com/graphile/crystal/commit/b0865d1691105b5419009954c98c8109a27a5d81),
1413
+ [`3b09b414f`](https://github.com/graphile/crystal/commit/3b09b414ff43c34593373fa1f242481b0c7ada70),
1414
+ [`b7b6dd64f`](https://github.com/graphile/crystal/commit/b7b6dd64fcc07f2ca15528fd39d61297d743dcc6),
1415
+ [`8b472cd51`](https://github.com/graphile/crystal/commit/8b472cd51cd66d8227f9f2722d09c0a774792b0f),
1416
+ [`ba637b56d`](https://github.com/graphile/crystal/commit/ba637b56d79a14f82fe555739921724eab0c07f7),
1417
+ [`9cd9bb522`](https://github.com/graphile/crystal/commit/9cd9bb5222a9f0398ee4b8bfa4f741b6de2a2192)]:
1418
+ - graphile-build-pg@5.0.0-beta.29
1419
+ - grafast@0.1.1-beta.15
1420
+ - graphile-build@5.0.0-beta.25
1421
+ - @dataplan/pg@0.0.1-beta.26
1422
+ - graphile-config@0.0.1-beta.10
1423
+ - graphile-utils@5.0.0-beta.29
1424
+ - @dataplan/json@0.0.1-beta.24
1425
+ - grafserv@0.1.1-beta.17
1426
+
1427
+ ## 5.0.0-beta.29
1428
+
1429
+ ### Patch Changes
1430
+
1431
+ - [#2149](https://github.com/graphile/crystal/pull/2149)
1432
+ [`52ef49ca9`](https://github.com/graphile/crystal/commit/52ef49ca9357e63d0aa5c06ac089bf57ee991c73)
1433
+ Thanks [@benjie](https://github.com/benjie)! - Fixed a bug in 'relational'
1434
+ polymorphism where relations to each of the concrete types would
1435
+ non-sensically be added to each of the concrete types.
1436
+ - Updated dependencies
1437
+ [[`52ef49ca9`](https://github.com/graphile/crystal/commit/52ef49ca9357e63d0aa5c06ac089bf57ee991c73),
1438
+ [`82ce02cd9`](https://github.com/graphile/crystal/commit/82ce02cd93df3df3c9570c3528483c4f720ff9bb),
1439
+ [`871d32b2a`](https://github.com/graphile/crystal/commit/871d32b2a18df0d257880fc54a61d9e68c4607d6),
1440
+ [`e8a0c4441`](https://github.com/graphile/crystal/commit/e8a0c4441cd04402974cd0af6b80816c9cda91e7),
1441
+ [`d9d07b97b`](https://github.com/graphile/crystal/commit/d9d07b97b41c928033b9a920931ae0ccccf88e82),
1442
+ [`a26e3a30c`](https://github.com/graphile/crystal/commit/a26e3a30c02f963f8f5e9c9d021e871f33689e1b),
1443
+ [`eca7e62e2`](https://github.com/graphile/crystal/commit/eca7e62e2a09af77f4f166a281dab81d009d9ec1),
1444
+ [`02c11a4d4`](https://github.com/graphile/crystal/commit/02c11a4d42bf434dffc9354b300e8d791c4eeb2d)]:
1445
+ - graphile-build-pg@5.0.0-beta.28
1446
+ - @dataplan/pg@0.0.1-beta.25
1447
+ - grafast@0.1.1-beta.14
1448
+ - graphile-build@5.0.0-beta.24
1449
+ - graphile-utils@5.0.0-beta.28
1450
+ - @dataplan/json@0.0.1-beta.23
1451
+ - grafserv@0.1.1-beta.16
1452
+
1453
+ ## 5.0.0-beta.28
1454
+
1455
+ ### Patch Changes
1456
+
1457
+ - Updated dependencies
1458
+ [[`807650035`](https://github.com/graphile/crystal/commit/8076500354a3e2bc2de1b6c4e947bd710cc5bddc)]:
1459
+ - @dataplan/pg@0.0.1-beta.24
1460
+ - grafast@0.1.1-beta.13
1461
+ - graphile-build-pg@5.0.0-beta.27
1462
+ - graphile-utils@5.0.0-beta.27
1463
+ - @dataplan/json@0.0.1-beta.22
1464
+ - grafserv@0.1.1-beta.15
1465
+ - graphile-build@5.0.0-beta.23
1466
+
1467
+ ## 5.0.0-beta.27
1468
+
1469
+ ### Patch Changes
1470
+
1471
+ - [#2129](https://github.com/graphile/crystal/pull/2129)
1472
+ [`1f67999eb`](https://github.com/graphile/crystal/commit/1f67999eb11435562ca76e8e7349aaadc28390f6)
1473
+ Thanks [@benjie](https://github.com/benjie)! - Fix bug in orderBy planning
1474
+ that caused a new plan to be required for every request.
1475
+
1476
+ - [#2121](https://github.com/graphile/crystal/pull/2121)
1477
+ [`8bdc553b7`](https://github.com/graphile/crystal/commit/8bdc553b79aae21a27d22a4e1f1e57ee2e5d1d3f)
1478
+ Thanks [@benjie](https://github.com/benjie)! - Add support for accepting
1479
+ poolConfig via makePgService
1480
+
1481
+ - [#2128](https://github.com/graphile/crystal/pull/2128)
1482
+ [`4e102b1a1`](https://github.com/graphile/crystal/commit/4e102b1a1cd232e6f6703df0706415f01831dab2)
1483
+ Thanks [@adamni21](https://github.com/adamni21)! - Reduce planning cost of
1484
+ large input object trees by evaluating keys up front (thanks to @adamni21).
1485
+
1486
+ - [#1985](https://github.com/graphile/crystal/pull/1985)
1487
+ [`d6102714e`](https://github.com/graphile/crystal/commit/d6102714e4fec35952784c988c1617c789eee0cd)
1488
+ Thanks [@hannesj](https://github.com/hannesj)! - 🚨 PostgreSQL adaptor is no
1489
+ longer loaded via string value; instead you must pass the adaptor instance
1490
+ directly. If you have `adaptor: "@dataplan/pg/adaptors/pg"` then replace it
1491
+ with `adaptor: await import("@dataplan/pg/adaptors/pg")`. (This shouldn't
1492
+ cause you issues because you _should_ be using `makePgService` to construct
1493
+ your `pgServices` rather than building raw objects.)
1494
+
1495
+ 🚨 If you've implemented a custom PgAdaptor, talk to Benjie about how to port
1496
+ it. (Should be straightforward, but no point me figuring it out if no-one has
1497
+ done it yet 🤷)
1498
+
1499
+ This change improves bundle-ability by reducing the number of dynamic imports.
1500
+
1501
+ Also: `PgAdaptorOptions` has been renamed to `PgAdaptorSettings`, so please do
1502
+ a global find and replace for that.
1503
+
1504
+ - [#2094](https://github.com/graphile/crystal/pull/2094)
1505
+ [`c0e50a1b4`](https://github.com/graphile/crystal/commit/c0e50a1b4f1c95bfcafb5458dce0d5e56852d7d0)
1506
+ Thanks [@benjie](https://github.com/benjie)! - makeWrapPlansPlugin more likely
1507
+ to be exportable.
1508
+
1509
+ - Updated dependencies
1510
+ [[`1f67999eb`](https://github.com/graphile/crystal/commit/1f67999eb11435562ca76e8e7349aaadc28390f6),
1511
+ [`1bd50b61e`](https://github.com/graphile/crystal/commit/1bd50b61ebb10b7d09b3612c2e2767c41cca3b78),
1512
+ [`8bdc553b7`](https://github.com/graphile/crystal/commit/8bdc553b79aae21a27d22a4e1f1e57ee2e5d1d3f),
1513
+ [`61f8bbca5`](https://github.com/graphile/crystal/commit/61f8bbca5badda5b27872e0ee01a2d4c1372210d),
1514
+ [`4e102b1a1`](https://github.com/graphile/crystal/commit/4e102b1a1cd232e6f6703df0706415f01831dab2),
1515
+ [`1cabbd311`](https://github.com/graphile/crystal/commit/1cabbd311bdefd7ce78f8dacbf61a42237a6c73c),
1516
+ [`7bb1573ba`](https://github.com/graphile/crystal/commit/7bb1573ba45a4d8b7fa9ad53cdd79686d2641383),
1517
+ [`590b6fdf5`](https://github.com/graphile/crystal/commit/590b6fdf5d04a392c4cc9e8bdad83278377c547b),
1518
+ [`18addb385`](https://github.com/graphile/crystal/commit/18addb3852525aa91019a36d58fa2fecd8b5b443),
1519
+ [`d6102714e`](https://github.com/graphile/crystal/commit/d6102714e4fec35952784c988c1617c789eee0cd),
1520
+ [`6ed615e55`](https://github.com/graphile/crystal/commit/6ed615e557b2ab1fb57f1e68c06730a8e3da7175),
1521
+ [`b25cc539c`](https://github.com/graphile/crystal/commit/b25cc539c00aeda7a943c37509aaae4dc7812317),
1522
+ [`867f33136`](https://github.com/graphile/crystal/commit/867f331365346fc46ed1e0d23c79719846e398f4),
1523
+ [`925123497`](https://github.com/graphile/crystal/commit/925123497cf17b5e145ab80f62fa9de768a977ae),
1524
+ [`cf535c210`](https://github.com/graphile/crystal/commit/cf535c21078da06c14dd12f30e9b4378da4ded03),
1525
+ [`c0e50a1b4`](https://github.com/graphile/crystal/commit/c0e50a1b4f1c95bfcafb5458dce0d5e56852d7d0),
1526
+ [`acf99b190`](https://github.com/graphile/crystal/commit/acf99b190954e3c5926e820daed68dfe8eb3ee1f),
1527
+ [`4967a197f`](https://github.com/graphile/crystal/commit/4967a197fd2c71ee2a581fe29470ee9f30e74de5),
1528
+ [`1908e1ba1`](https://github.com/graphile/crystal/commit/1908e1ba11883a34dac66f985fc20ab160e572b1),
1529
+ [`084d80be6`](https://github.com/graphile/crystal/commit/084d80be6e17187c9a9932bcf079e3f460368782),
1530
+ [`aa0474755`](https://github.com/graphile/crystal/commit/aa0474755142a758fc58c5c1a30b8c754bc84e7c)]:
1531
+ - graphile-build-pg@5.0.0-beta.26
1532
+ - grafast@0.1.1-beta.12
1533
+ - @dataplan/pg@0.0.1-beta.23
1534
+ - grafserv@0.1.1-beta.14
1535
+ - graphile-utils@5.0.0-beta.26
1536
+ - @dataplan/json@0.0.1-beta.21
1537
+ - graphile-build@5.0.0-beta.22
1538
+
1539
+ ## 5.0.0-beta.26
1540
+
1541
+ ### Patch Changes
1542
+
1543
+ - [#2071](https://github.com/graphile/crystal/pull/2071)
1544
+ [`582bd768f`](https://github.com/graphile/crystal/commit/582bd768fec403ce3284f293b85b9fd86e4d3f40)
1545
+ Thanks [@benjie](https://github.com/benjie)! - `GrafastExecutionArgs` now
1546
+ accepts `resolvedPreset` and `requestContext` directly; passing these through
1547
+ additional arguments is now deprecated and support will be removed in a future
1548
+ revision. This affects:
1549
+ - `grafast()`
1550
+ - `execute()`
1551
+ - `subscribe()`
1552
+ - `hookArgs()`
1553
+
1554
+ `graphile-config` has gained a middleware system which is more powerful than
1555
+ it's AsyncHooks system. Old hooks can be emulated through the middleware
1556
+ system safely since middleware is a superset of hooks' capabilities.
1557
+ `applyHooks` has been renamed to `orderedApply` (because it applies to more
1558
+ than just hooks), calling `applyHooks` will still work but is deprecated.
1559
+
1560
+ 🚨 `grafast` no longer automatically reads your `graphile.config.ts` or
1561
+ similar; you must do that yourself and pass the `resolvedPreset` to grafast
1562
+ via the `args`. This is to aid in bundling of grafast since it should not need
1563
+ to read from filesystem or dynamically load modules.
1564
+
1565
+ `grafast` no longer outputs performance warning when you set
1566
+ `GRAPHILE_ENV=development`.
1567
+
1568
+ 🚨 `plugin.grafast.hooks.args` is now `plugin.grafast.middleware.prepareArgs`,
1569
+ and the signature has changed - you must be sure to call the `next()` function
1570
+ and ctx/resolvedPreset can be extracted directly from `args`:
1571
+
1572
+ ```diff
1573
+ const plugin = {
1574
+ grafast: {
1575
+ - hooks: {
1576
+ + middleware: {
1577
+ - args({ args, ctx, resolvedPreset }) {
1578
+ + prepareArgs(next, { args }) {
1579
+ + const { requestContext: ctx, resolvedPreset } = args;
1580
+ // ...
1581
+ + return next();
1582
+ }
1583
+ }
1584
+ }
1585
+ }
1586
+ ```
1587
+
1588
+ Many more middleware have been added; use TypeScript's autocomplete to see
1589
+ what's available until we have proper documentation for them.
1590
+
1591
+ `plugin.grafserv.hooks.*` are still supported but deprecated; instead use
1592
+ middleware `plugin.grafserv.middleware.*` (note that call signatures have
1593
+ changed slightly, similar to the diff above):
1594
+ - `hooks.init` -> `middleware.setPreset`
1595
+ - `hooks.processGraphQLRequestBody` -> `middleware.processGraphQLRequestBody`
1596
+ - `hooks.ruruHTMLParts` -> `middleware.ruruHTMLParts`
1597
+
1598
+ A few TypeScript types related to Hooks have been renamed, but their old names
1599
+ are still available, just deprecated. They will be removed in a future update:
1600
+ - `HookObject` -> `FunctionalityObject`
1601
+ - `PluginHook` -> `CallbackOrDescriptor`
1602
+ - `PluginHookObject` -> `CallbackDescriptor`
1603
+ - `PluginHookCallback` -> `UnwrapCallback`
1604
+
1605
+ - Updated dependencies
1606
+ [[`582bd768f`](https://github.com/graphile/crystal/commit/582bd768fec403ce3284f293b85b9fd86e4d3f40)]:
1607
+ - graphile-build@5.0.0-beta.21
1608
+ - graphile-config@0.0.1-beta.9
1609
+ - @dataplan/pg@0.0.1-beta.22
1610
+ - grafserv@0.1.1-beta.13
1611
+ - grafast@0.1.1-beta.11
1612
+ - graphile-build-pg@5.0.0-beta.25
1613
+ - graphile-utils@5.0.0-beta.25
1614
+ - @dataplan/json@0.0.1-beta.20
1615
+
1616
+ ## 5.0.0-beta.25
1617
+
1618
+ ### Patch Changes
1619
+
1620
+ - Updated dependencies
1621
+ [[`3c161f7e1`](https://github.com/graphile/crystal/commit/3c161f7e13375105b1035a7d5d1c0f2b507ca5c7),
1622
+ [`a674a9923`](https://github.com/graphile/crystal/commit/a674a9923bc908c9315afa40e0cb256ee0953d16),
1623
+ [`b7cfeffd1`](https://github.com/graphile/crystal/commit/b7cfeffd1019d61c713a5054c4f5929960a2a6ab)]:
1624
+ - grafast@0.1.1-beta.10
1625
+ - @dataplan/json@0.0.1-beta.19
1626
+ - @dataplan/pg@0.0.1-beta.21
1627
+ - grafserv@0.1.1-beta.12
1628
+ - graphile-build@5.0.0-beta.20
1629
+ - graphile-build-pg@5.0.0-beta.24
1630
+ - graphile-utils@5.0.0-beta.24
1631
+
1632
+ ## 5.0.0-beta.24
1633
+
1634
+ ### Patch Changes
1635
+
1636
+ - [#2064](https://github.com/graphile/crystal/pull/2064)
1637
+ [`437570f97`](https://github.com/graphile/crystal/commit/437570f97e8520afaf3d0d0b514d1f4c31546b76)
1638
+ Thanks [@benjie](https://github.com/benjie)! - Fix a bug relating to Global
1639
+ Object Identifiers (specifically in update mutations, but probably elsewhere
1640
+ too) related to early exit.
1641
+ - Updated dependencies
1642
+ [[`437570f97`](https://github.com/graphile/crystal/commit/437570f97e8520afaf3d0d0b514d1f4c31546b76)]:
1643
+ - graphile-build-pg@5.0.0-beta.23
1644
+ - grafast@0.1.1-beta.9
1645
+ - graphile-utils@5.0.0-beta.23
1646
+ - @dataplan/json@0.0.1-beta.18
1647
+ - @dataplan/pg@0.0.1-beta.20
1648
+ - grafserv@0.1.1-beta.11
1649
+ - graphile-build@5.0.0-beta.19
1650
+
1651
+ ## 5.0.0-beta.23
1652
+
1653
+ ### Patch Changes
1654
+
1655
+ - [#2056](https://github.com/graphile/crystal/pull/2056)
1656
+ [`1842af661`](https://github.com/graphile/crystal/commit/1842af661950d5f962b65f6362a45a3b9c8f15e8)
1657
+ Thanks [@benjie](https://github.com/benjie)! - Improve exporting of resource
1658
+ options (neater export code)
1659
+
1660
+ - Updated dependencies
1661
+ [[`1842af661`](https://github.com/graphile/crystal/commit/1842af661950d5f962b65f6362a45a3b9c8f15e8),
1662
+ [`bd5a908a4`](https://github.com/graphile/crystal/commit/bd5a908a4d04310f90dfb46ad87398ffa993af3b)]:
1663
+ - graphile-build-pg@5.0.0-beta.22
1664
+ - graphile-build@5.0.0-beta.18
1665
+ - grafast@0.1.1-beta.8
1666
+ - graphile-utils@5.0.0-beta.22
1667
+ - @dataplan/json@0.0.1-beta.17
1668
+ - @dataplan/pg@0.0.1-beta.19
1669
+ - grafserv@0.1.1-beta.10
1670
+
1671
+ ## 5.0.0-beta.22
1672
+
1673
+ ### Patch Changes
1674
+
1675
+ - [#2015](https://github.com/graphile/crystal/pull/2015)
1676
+ [`5eca6d65a`](https://github.com/graphile/crystal/commit/5eca6d65a816bac3d0ceaa6cafa7df1a79c2be47)
1677
+ Thanks [@benjie](https://github.com/benjie)! - Use `inhibitOnNull` when
1678
+ decoding a spec ID to prevent it being consumed if invalid (e.g. don't allow
1679
+ using a 'Post' node ID to fetch a 'Person' record).
1680
+
1681
+ - [#1994](https://github.com/graphile/crystal/pull/1994)
1682
+ [`ab08cbf9c`](https://github.com/graphile/crystal/commit/ab08cbf9c504c3cc22495a99a965e7634c18a6a3)
1683
+ Thanks [@benjie](https://github.com/benjie)! - Introduce
1684
+ `interface SQLable {[$toSQL](): SQL}` to `pg-sql2` and use it to simplify SQL
1685
+ fragments in various places.
1686
+
1687
+ - [#1978](https://github.com/graphile/crystal/pull/1978)
1688
+ [`a287a57c2`](https://github.com/graphile/crystal/commit/a287a57c2765da0fb6a132ea0953f64453210ceb)
1689
+ Thanks [@benjie](https://github.com/benjie)! - Breaking: `connection()` step
1690
+ now accepts configuration object in place of 2nd argument onwards:
1691
+
1692
+ ```diff
1693
+ -return connection($list, nodePlan, cursorPlan);
1694
+ +return connection($list, { nodePlan, cursorPlan });
1695
+ ```
1696
+
1697
+ Feature: `edgeDataPlan` can be specified as part of this configuration object,
1698
+ allowing you to associate edge data with your connection edges:
1699
+
1700
+ ```ts
1701
+ return connection($list, {
1702
+ edgeDataPlan($item) {
1703
+ return object({ item: $item, otherThing: $otherThing });
1704
+ },
1705
+ });
1706
+
1707
+ // ...
1708
+
1709
+ const plans = {
1710
+ FooEdge: {
1711
+ otherThing($edge) {
1712
+ return $edge.data().get("otherThing");
1713
+ },
1714
+ },
1715
+ };
1716
+ ```
1717
+
1718
+ Feature: `ConnectionStep` and `EdgeStep` gain `get()` methods, so
1719
+ `*Connection.edges`, `*Connection.nodes`, `*Connection.pageInfo`, `*Edge.node`
1720
+ and `*Edge.cursor` no longer need plans to be defined.
1721
+
1722
+ - [#2006](https://github.com/graphile/crystal/pull/2006)
1723
+ [`7ad35fe4d`](https://github.com/graphile/crystal/commit/7ad35fe4d9b20f6ec82dc95c362390a87e25b42c)
1724
+ Thanks [@benjie](https://github.com/benjie)! - When replacing inflectors via
1725
+ `plugin.inflection.replace.<inflector_name>` the first argument is the
1726
+ previous inflector (or null). Previously this was typed including the
1727
+ `this: Inflection` argument which meant to appease TypeScript you needed to do
1728
+ `previous.call(this, arg1, arg2)`, but this was never necessary in JS. This is
1729
+ now fixed, and you can now issue `previous(arg1, arg2)` from TypeScript
1730
+ without error.
1731
+
1732
+ - [#2050](https://github.com/graphile/crystal/pull/2050)
1733
+ [`272608c13`](https://github.com/graphile/crystal/commit/272608c135e4ef0f76b8b5a9f764494a3f3ad779)
1734
+ Thanks [@benjie](https://github.com/benjie)! - Add missing EXPORTABLE (and
1735
+ remove excessive EXPORTABLE) to fix schema exports.
1736
+
1737
+ - [#1995](https://github.com/graphile/crystal/pull/1995)
1738
+ [`e0d69e518`](https://github.com/graphile/crystal/commit/e0d69e518a98c70f9b90f59d243ce33978c1b5a1)
1739
+ Thanks [@benjie](https://github.com/benjie)! - Refactoring of unary logic.
1740
+
1741
+ - [#2048](https://github.com/graphile/crystal/pull/2048)
1742
+ [`db8ceed0f`](https://github.com/graphile/crystal/commit/db8ceed0f17923eb78ff09c9f3f28800a5c7e3b6)
1743
+ Thanks [@benjie](https://github.com/benjie)! - Help detect more invalid
1744
+ presets and plugins (bad imports) by forbidding keys starting with a capital
1745
+ or the key `default`.
1746
+
1747
+ - [#2046](https://github.com/graphile/crystal/pull/2046)
1748
+ [`966203504`](https://github.com/graphile/crystal/commit/96620350467ab8c65b56adf2f055e19450f8e772)
1749
+ Thanks [@benjie](https://github.com/benjie)! - Envelop peer dependency
1750
+ upgraded to V5
1751
+
1752
+ - [#1973](https://github.com/graphile/crystal/pull/1973)
1753
+ [`a0e82b9c5`](https://github.com/graphile/crystal/commit/a0e82b9c5f4e585f1af1e147299cd07944ece6f8)
1754
+ Thanks [@benjie](https://github.com/benjie)! - Add 'unary steps' concept to
1755
+ codebase and refactor to using new executeV2 execution method which leverages
1756
+ them. Backwards compatibility maintained, but users should move to executeV2.
1757
+
1758
+ - [#1989](https://github.com/graphile/crystal/pull/1989)
1759
+ [`c48d3da7f`](https://github.com/graphile/crystal/commit/c48d3da7fe4fac2562fab5f085d252a0bfb6f0b6)
1760
+ Thanks [@benjie](https://github.com/benjie)! - Make it so that more pgSelect
1761
+ queries optimize themselves into parent queries via new step.canAddDependency
1762
+ helper.
1763
+
1764
+ - [#2006](https://github.com/graphile/crystal/pull/2006)
1765
+ [`bee0a0a68`](https://github.com/graphile/crystal/commit/bee0a0a68d48816f84b1a7f5ec69bd6069211426)
1766
+ Thanks [@benjie](https://github.com/benjie)! - Adopt improved inflection
1767
+ typings.
1768
+
1769
+ - [#2019](https://github.com/graphile/crystal/pull/2019)
1770
+ [`51a94417f`](https://github.com/graphile/crystal/commit/51a94417fb62b54d309be184f4be479bc267c2b7)
1771
+ Thanks [@benjie](https://github.com/benjie)! - Now possible to filter by relay
1772
+ node identifiers without weird results if you pass an incompatible node id
1773
+ (e.g. a 'Post' ID where a 'User' ID was expected) - significantly improves the
1774
+ Relay preset.
1775
+
1776
+ - [#1988](https://github.com/graphile/crystal/pull/1988)
1777
+ [`81d17460c`](https://github.com/graphile/crystal/commit/81d17460ced08608814635779c5cf997c19c101d)
1778
+ Thanks [@benjie](https://github.com/benjie)! - Fix issue with record types
1779
+ when attributes need to be cast; this previously caused errors with computed
1780
+ columns when passed particular arguments.
1781
+ - Updated dependencies
1782
+ [[`357d475f5`](https://github.com/graphile/crystal/commit/357d475f54fecc8c51892e0346d6872b34132430),
1783
+ [`30bcd6c12`](https://github.com/graphile/crystal/commit/30bcd6c12e59f878617ea987c35a2f589ce05cb8),
1784
+ [`3551725e7`](https://github.com/graphile/crystal/commit/3551725e71c3ed876554e19e5ab2c1dcb0fb1143),
1785
+ [`80836471e`](https://github.com/graphile/crystal/commit/80836471e5cedb29dee63bc5002550c4f1713cfd),
1786
+ [`b788dd868`](https://github.com/graphile/crystal/commit/b788dd86849e703cc3aa863fd9190c36a087b865),
1787
+ [`5eca6d65a`](https://github.com/graphile/crystal/commit/5eca6d65a816bac3d0ceaa6cafa7df1a79c2be47),
1788
+ [`a5c20fefb`](https://github.com/graphile/crystal/commit/a5c20fefb571dea6d1187515dc48dd547e9e6204),
1789
+ [`1ce08980e`](https://github.com/graphile/crystal/commit/1ce08980e2a52ed9bc81564d248c19648ecd3616),
1790
+ [`ab08cbf9c`](https://github.com/graphile/crystal/commit/ab08cbf9c504c3cc22495a99a965e7634c18a6a3),
1791
+ [`dff4f2535`](https://github.com/graphile/crystal/commit/dff4f2535ac6ce893089b312fcd5fffcd98573a5),
1792
+ [`a287a57c2`](https://github.com/graphile/crystal/commit/a287a57c2765da0fb6a132ea0953f64453210ceb),
1793
+ [`45e10950b`](https://github.com/graphile/crystal/commit/45e10950b533f97cdd986e5442e2e160a8e431a2),
1794
+ [`2fe56f9a6`](https://github.com/graphile/crystal/commit/2fe56f9a6dac03484ace45c29c2223a65f9ca1db),
1795
+ [`fed603d71`](https://github.com/graphile/crystal/commit/fed603d719c02f33e12190f925c9e3b06c581fac),
1796
+ [`ed6e0d278`](https://github.com/graphile/crystal/commit/ed6e0d2788217a1c419634837f4208013eaf2923),
1797
+ [`86168b740`](https://github.com/graphile/crystal/commit/86168b740510aef17bde7ae21f1d0eebb0c5c9b3),
1798
+ [`7ad35fe4d`](https://github.com/graphile/crystal/commit/7ad35fe4d9b20f6ec82dc95c362390a87e25b42c),
1799
+ [`e82e4911e`](https://github.com/graphile/crystal/commit/e82e4911e32138df1b90ec0fde555ea963018d21),
1800
+ [`94a05064e`](https://github.com/graphile/crystal/commit/94a05064ea05108685ff71174a9f871ab5b4c147),
1801
+ [`272608c13`](https://github.com/graphile/crystal/commit/272608c135e4ef0f76b8b5a9f764494a3f3ad779),
1802
+ [`42ece5aa6`](https://github.com/graphile/crystal/commit/42ece5aa6ca05345ebc17fb5c7d55df3b79b7612),
1803
+ [`e0d69e518`](https://github.com/graphile/crystal/commit/e0d69e518a98c70f9b90f59d243ce33978c1b5a1),
1804
+ [`e22cb4dfa`](https://github.com/graphile/crystal/commit/e22cb4dfa94b60d1b99c374e8c28943373bd8496),
1805
+ [`db8ceed0f`](https://github.com/graphile/crystal/commit/db8ceed0f17923eb78ff09c9f3f28800a5c7e3b6),
1806
+ [`a5a0816bd`](https://github.com/graphile/crystal/commit/a5a0816bddc85a841770202db57457ff13137852),
1807
+ [`6699388ec`](https://github.com/graphile/crystal/commit/6699388ec167d35c71220ce5d9113cac578da6cb),
1808
+ [`966203504`](https://github.com/graphile/crystal/commit/96620350467ab8c65b56adf2f055e19450f8e772),
1809
+ [`c1645b249`](https://github.com/graphile/crystal/commit/c1645b249aae949a548cd916e536ccfb63e5ab35),
1810
+ [`ed8bbaa3c`](https://github.com/graphile/crystal/commit/ed8bbaa3cd1563a7601ca8c6b0412633b0ea4ce9),
1811
+ [`a0e82b9c5`](https://github.com/graphile/crystal/commit/a0e82b9c5f4e585f1af1e147299cd07944ece6f8),
1812
+ [`14e2412ee`](https://github.com/graphile/crystal/commit/14e2412ee368e8d53abf6774c7f0069f32d4e8a3),
1813
+ [`c48d3da7f`](https://github.com/graphile/crystal/commit/c48d3da7fe4fac2562fab5f085d252a0bfb6f0b6),
1814
+ [`57ab0e1e7`](https://github.com/graphile/crystal/commit/57ab0e1e72c01213b21d3efc539cd655d83d993a),
1815
+ [`8442242e4`](https://github.com/graphile/crystal/commit/8442242e43cac7d89ca0c413cf42c9fabf6f247f),
1816
+ [`bee0a0a68`](https://github.com/graphile/crystal/commit/bee0a0a68d48816f84b1a7f5ec69bd6069211426),
1817
+ [`51a94417f`](https://github.com/graphile/crystal/commit/51a94417fb62b54d309be184f4be479bc267c2b7),
1818
+ [`64ce7b765`](https://github.com/graphile/crystal/commit/64ce7b7650530251aec38a51089da66f914c19b4),
1819
+ [`cba842357`](https://github.com/graphile/crystal/commit/cba84235786acbd77ade53bae7a3fba4a9be1eb7),
1820
+ [`2fa77d0f2`](https://github.com/graphile/crystal/commit/2fa77d0f237cdb98d3dafb6b5e4083a2c6c38673),
1821
+ [`81d17460c`](https://github.com/graphile/crystal/commit/81d17460ced08608814635779c5cf997c19c101d)]:
1822
+ - @dataplan/json@0.0.1-beta.16
1823
+ - @dataplan/pg@0.0.1-beta.18
1824
+ - grafast@0.1.1-beta.7
1825
+ - tamedevil@0.0.0-beta.7
1826
+ - graphile-build-pg@5.0.0-beta.21
1827
+ - pg-sql2@5.0.0-beta.6
1828
+ - graphile-build@5.0.0-beta.17
1829
+ - graphile-utils@5.0.0-beta.21
1830
+ - graphile-config@0.0.1-beta.8
1831
+ - grafserv@0.1.1-beta.9
1832
+
1833
+ ## 5.0.0-beta.21
1834
+
1835
+ ### Patch Changes
1836
+
1837
+ - [#1955](https://github.com/graphile/crystal/pull/1955)
1838
+ [`6c6be29f1`](https://github.com/graphile/crystal/commit/6c6be29f12b24782c926b2bc62ed2ede09ac05de)
1839
+ Thanks [@benjie](https://github.com/benjie)! - Steps are now prevented from
1840
+ calling other steps' lifecycle methods. GRAPHILE_ENV is actively encouraged,
1841
+ and falls back to NODE_ENV.
1842
+
1843
+ - [#1944](https://github.com/graphile/crystal/pull/1944)
1844
+ [`6c80c44b7`](https://github.com/graphile/crystal/commit/6c80c44b76a5eb30cc2b1555ba81a4b6236f4300)
1845
+ Thanks [@benjie](https://github.com/benjie)! - Fix accidental double-encoding
1846
+ of values on their way to postgres.
1847
+
1848
+ - [#1949](https://github.com/graphile/crystal/pull/1949)
1849
+ [`179d25b09`](https://github.com/graphile/crystal/commit/179d25b09bb3272eeef564067b8e512d8de0112f)
1850
+ Thanks [@benjie](https://github.com/benjie)! - Add support for registering
1851
+ PgCodecs via plugins, add support for ltree type, improve error messages, no
1852
+ longer need to set a gather namespace to use cache/state.
1853
+
1854
+ - [#1958](https://github.com/graphile/crystal/pull/1958)
1855
+ [`8315e8d01`](https://github.com/graphile/crystal/commit/8315e8d01c118cebc4ebbc53a2f264b958b252ad)
1856
+ Thanks [@benjie](https://github.com/benjie)! - EXPORTABLE now accepts a third
1857
+ argument, `nameHint`, which is used to hint what variable name to use for the
1858
+ given value. Used this in `graphile-export` along with some fixes and
1859
+ optimizations to improve the exports further.
1860
+
1861
+ - [#1946](https://github.com/graphile/crystal/pull/1946)
1862
+ [`9d53dde72`](https://github.com/graphile/crystal/commit/9d53dde726b7304962e921b88a159649e49156e5)
1863
+ Thanks [@benjie](https://github.com/benjie)! - Exporting a schema now performs
1864
+ ESLint 'no-use-before-define' check to catch even more invalid export
1865
+ conditions. Fix `registerNodeIdCodec` calls caught by this.
1866
+ - Updated dependencies
1867
+ [[`9f85c614d`](https://github.com/graphile/crystal/commit/9f85c614d48dc745c5fed15333dbb75af7fddc88),
1868
+ [`6c6be29f1`](https://github.com/graphile/crystal/commit/6c6be29f12b24782c926b2bc62ed2ede09ac05de),
1869
+ [`6c80c44b7`](https://github.com/graphile/crystal/commit/6c80c44b76a5eb30cc2b1555ba81a4b6236f4300),
1870
+ [`179d25b09`](https://github.com/graphile/crystal/commit/179d25b09bb3272eeef564067b8e512d8de0112f),
1871
+ [`8315e8d01`](https://github.com/graphile/crystal/commit/8315e8d01c118cebc4ebbc53a2f264b958b252ad),
1872
+ [`9d53dde72`](https://github.com/graphile/crystal/commit/9d53dde726b7304962e921b88a159649e49156e5)]:
1873
+ - @dataplan/pg@0.0.1-beta.17
1874
+ - grafast@0.1.1-beta.6
1875
+ - graphile-build-pg@5.0.0-beta.20
1876
+ - graphile-build@5.0.0-beta.16
1877
+ - graphile-utils@5.0.0-beta.20
1878
+ - tamedevil@0.0.0-beta.6
1879
+ - @dataplan/json@0.0.1-beta.15
1880
+ - grafserv@0.1.1-beta.8
1881
+
1882
+ ## 5.0.0-beta.20
1883
+
1884
+ ### Patch Changes
1885
+
1886
+ - [#1927](https://github.com/graphile/crystal/pull/1927)
1887
+ [`00d32d887`](https://github.com/graphile/crystal/commit/00d32d887a6ae01374a4fda1babab7c8f14832c0)
1888
+ Thanks [@benjie](https://github.com/benjie)! - Excludes table constraints on
1889
+ tables from extensions if configured to not include extensions.
1890
+
1891
+ - [#1927](https://github.com/graphile/crystal/pull/1927)
1892
+ [`c62eee10b`](https://github.com/graphile/crystal/commit/c62eee10b445f9455bf2a0524ad2b828bdf4ffa6)
1893
+ Thanks [@benjie](https://github.com/benjie)! - Add pg_am to pg-introspection
1894
+ to enable determining index access method
1895
+
1896
+ - [#1934](https://github.com/graphile/crystal/pull/1934)
1897
+ [`9ac0ddc01`](https://github.com/graphile/crystal/commit/9ac0ddc014bfceb60b4b5641d6e8db605cc6a79b)
1898
+ Thanks [@benjie](https://github.com/benjie)! - Automatically detect when a
1899
+ `graphile-export` export is invalid, and throw an error indicating which
1900
+ method needs to have `EXPORTABLE` added around it.
1901
+
1902
+ - [#1931](https://github.com/graphile/crystal/pull/1931)
1903
+ [`941e28003`](https://github.com/graphile/crystal/commit/941e280038a735014a9fe4e24fc534a197fac0f2)
1904
+ Thanks [@benjie](https://github.com/benjie)! - Add support for deprecated
1905
+ arguments to Ruru.
1906
+
1907
+ - [#1935](https://github.com/graphile/crystal/pull/1935)
1908
+ [`8ea67f891`](https://github.com/graphile/crystal/commit/8ea67f8910693edaf70daa9952e35d8396166f38)
1909
+ Thanks [@benjie](https://github.com/benjie)! - Fix lots of things related to
1910
+ exporting a schema with `graphile-export`.
1911
+
1912
+ - [#1931](https://github.com/graphile/crystal/pull/1931)
1913
+ [`068be2f51`](https://github.com/graphile/crystal/commit/068be2f51d7a9c17311f26c6c9451985397c9e1f)
1914
+ Thanks [@benjie](https://github.com/benjie)! - Fix issue typing into Ruru
1915
+ explorer plugin - characters no longer overwritten.
1916
+
1917
+ - [#1929](https://github.com/graphile/crystal/pull/1929)
1918
+ [`7587ca9e0`](https://github.com/graphile/crystal/commit/7587ca9e0f2bb93d0b22d1e2979d7b7912363600)
1919
+ Thanks [@benjie](https://github.com/benjie)! - PgLazyJWTPreset: return 401
1920
+ error when validation of JWT fails.
1921
+
1922
+ - [#1935](https://github.com/graphile/crystal/pull/1935)
1923
+ [`e20e66ed7`](https://github.com/graphile/crystal/commit/e20e66ed71b499ee5bbf05105f981809fd302212)
1924
+ Thanks [@benjie](https://github.com/benjie)! - Make even more of the schema
1925
+ exportable, including handling scalars with no parseLiteral definition.
1926
+
1927
+ - [#1931](https://github.com/graphile/crystal/pull/1931)
1928
+ [`ec3112c7b`](https://github.com/graphile/crystal/commit/ec3112c7b58d142b4b1d86cbb7de4ca80bbfda00)
1929
+ Thanks [@benjie](https://github.com/benjie)! - Add support for deprecating
1930
+ arguments to makeExtendSchemaPlugin
1931
+
1932
+ - Updated dependencies
1933
+ [[`49fd8afed`](https://github.com/graphile/crystal/commit/49fd8afed1afe573ea76a2a7a821dfa5d6288e2d),
1934
+ [`63dd7ea99`](https://github.com/graphile/crystal/commit/63dd7ea992d30ad711dd85a73a127484a0e35479),
1935
+ [`d801c9778`](https://github.com/graphile/crystal/commit/d801c9778a86d61e060896460af9fe62a733534a),
1936
+ [`c21252541`](https://github.com/graphile/crystal/commit/c212525410cb2d97a808964ad727d0a68dd15f8b),
1937
+ [`3a2ea80ee`](https://github.com/graphile/crystal/commit/3a2ea80ee470b2aef91366727d7d60a0c65067f5),
1938
+ [`ef44c29b2`](https://github.com/graphile/crystal/commit/ef44c29b24a1ad5a042ae1536a4546dd64b17195),
1939
+ [`8ea67f891`](https://github.com/graphile/crystal/commit/8ea67f8910693edaf70daa9952e35d8396166f38),
1940
+ [`5de3e86eb`](https://github.com/graphile/crystal/commit/5de3e86eba1ddfe5e07732d0325c63e5d72d4b5b),
1941
+ [`e20e66ed7`](https://github.com/graphile/crystal/commit/e20e66ed71b499ee5bbf05105f981809fd302212),
1942
+ [`ec3112c7b`](https://github.com/graphile/crystal/commit/ec3112c7b58d142b4b1d86cbb7de4ca80bbfda00)]:
1943
+ - tamedevil@0.0.0-beta.5
1944
+ - grafast@0.1.1-beta.5
1945
+ - grafserv@0.1.1-beta.7
1946
+ - graphile-build-pg@5.0.0-beta.19
1947
+ - graphile-build@5.0.0-beta.15
1948
+ - graphile-utils@5.0.0-beta.19
1949
+ - @dataplan/json@0.0.1-beta.14
1950
+ - @dataplan/pg@0.0.1-beta.16
1951
+ - pg-sql2@5.0.0-beta.5
1952
+ - graphile-config@0.0.1-beta.7
1953
+
1954
+ ## 5.0.0-beta.19
1955
+
1956
+ ### Patch Changes
1957
+
1958
+ - [#1895](https://github.com/graphile/crystal/pull/1895)
1959
+ [`555a2be03`](https://github.com/graphile/crystal/commit/555a2be037f49bd599abbaafe6e5d5ab190c96d6)
1960
+ Thanks [@enisdenjo](https://github.com/enisdenjo)! - Fix issue with aggregates
1961
+ for polymorphic connections.
1962
+
1963
+ - [#1917](https://github.com/graphile/crystal/pull/1917)
1964
+ [`886833e2e`](https://github.com/graphile/crystal/commit/886833e2e319f23d905d7184ca88fca701b94044)
1965
+ Thanks [@benjie](https://github.com/benjie)! - Add `polymorphicBranch` step to
1966
+ core to help users deal with simple polymorphic use cases.
1967
+
1968
+ - [#1904](https://github.com/graphile/crystal/pull/1904)
1969
+ [`5b2db0c75`](https://github.com/graphile/crystal/commit/5b2db0c7586182523015f8f79fa4d43f98679c1e)
1970
+ Thanks [@benjie](https://github.com/benjie)! - Add pgRefDetails to scope for
1971
+ some ref-generated fields, to enable plugins to hook them.
1972
+
1973
+ - [#1920](https://github.com/graphile/crystal/pull/1920)
1974
+ [`635af159f`](https://github.com/graphile/crystal/commit/635af159fd412171030dbaee3a82b661c516a9f8)
1975
+ Thanks [@benjie](https://github.com/benjie)! - Add ability to set (and infer)
1976
+ scopes to makeExtendSchemaPlugin
1977
+
1978
+ - [#1905](https://github.com/graphile/crystal/pull/1905)
1979
+ [`184773382`](https://github.com/graphile/crystal/commit/184773382f074a3b5339e4cfabec55173cd4f1e1)
1980
+ Thanks [@benjie](https://github.com/benjie)! - Enable specifying the
1981
+ polymorphic subtype a function returns via `@returnType MyType` smart tag.
1982
+
1983
+ - [#1901](https://github.com/graphile/crystal/pull/1901)
1984
+ [`f97d7976a`](https://github.com/graphile/crystal/commit/f97d7976a683a1e2cb0fed1ce0e30aeff8cc1886)
1985
+ Thanks [@benjie](https://github.com/benjie)! - Loosens step assertion from
1986
+ Query type so it can be served from `constant(true)`.
1987
+ - Updated dependencies
1988
+ [[`555a2be03`](https://github.com/graphile/crystal/commit/555a2be037f49bd599abbaafe6e5d5ab190c96d6),
1989
+ [`1b6c2f636`](https://github.com/graphile/crystal/commit/1b6c2f6360a316a8dc550c60e28c61deea538f19),
1990
+ [`de7add402`](https://github.com/graphile/crystal/commit/de7add402bd4a45c8782fce69bf210635360cbe8),
1991
+ [`a2176ea32`](https://github.com/graphile/crystal/commit/a2176ea324db0801249661b30e9c9d314c6fb159),
1992
+ [`886833e2e`](https://github.com/graphile/crystal/commit/886833e2e319f23d905d7184ca88fca701b94044),
1993
+ [`5b2db0c75`](https://github.com/graphile/crystal/commit/5b2db0c7586182523015f8f79fa4d43f98679c1e),
1994
+ [`635af159f`](https://github.com/graphile/crystal/commit/635af159fd412171030dbaee3a82b661c516a9f8),
1995
+ [`184773382`](https://github.com/graphile/crystal/commit/184773382f074a3b5339e4cfabec55173cd4f1e1),
1996
+ [`f97d7976a`](https://github.com/graphile/crystal/commit/f97d7976a683a1e2cb0fed1ce0e30aeff8cc1886)]:
1997
+ - @dataplan/pg@0.0.1-beta.15
1998
+ - tamedevil@0.0.0-beta.4
1999
+ - grafserv@0.1.1-beta.6
2000
+ - graphile-utils@5.0.0-beta.18
2001
+ - grafast@0.1.1-beta.4
2002
+ - graphile-build-pg@5.0.0-beta.18
2003
+ - graphile-build@5.0.0-beta.14
2004
+ - @dataplan/json@0.0.1-beta.13
2005
+
2006
+ ## 5.0.0-beta.18
2007
+
2008
+ ### Patch Changes
2009
+
2010
+ - [#1892](https://github.com/graphile/crystal/pull/1892)
2011
+ [`0df5511ac`](https://github.com/graphile/crystal/commit/0df5511ac8b79ea34f8d12ebf8feeb421f8fe971)
2012
+ Thanks [@benjie](https://github.com/benjie)! - Fix plugin ordering bug that
2013
+ ignored before/after when there was no provider; this now means
2014
+ PgSmartTagsPlugin is correctly loaded before PgFakeConstraintPlugin, fixing
2015
+ the `postgraphile.tags.json5` file.
2016
+
2017
+ - [#1894](https://github.com/graphile/crystal/pull/1894)
2018
+ [`7851d89ab`](https://github.com/graphile/crystal/commit/7851d89ab4216b0252583f0068a69900fa2ddc88)
2019
+ Thanks [@benjie](https://github.com/benjie)! - Fix logic around RBAC
2020
+ permissions for tables and sequences.
2021
+
2022
+ - Updated dependencies
2023
+ [[`0df5511ac`](https://github.com/graphile/crystal/commit/0df5511ac8b79ea34f8d12ebf8feeb421f8fe971)]:
2024
+ - graphile-config@0.0.1-beta.6
2025
+ - @dataplan/pg@0.0.1-beta.14
2026
+ - grafast@0.1.1-beta.3
2027
+ - grafserv@0.1.1-beta.5
2028
+ - graphile-build@5.0.0-beta.13
2029
+ - graphile-build-pg@5.0.0-beta.17
2030
+ - graphile-utils@5.0.0-beta.17
2031
+ - @dataplan/json@0.0.1-beta.12
2032
+
2033
+ ## 5.0.0-beta.17
2034
+
2035
+ ### Patch Changes
2036
+
2037
+ - [#1884](https://github.com/graphile/crystal/pull/1884)
2038
+ [`bce0636d4`](https://github.com/graphile/crystal/commit/bce0636d424476664672166193a181c83476423a)
2039
+ Thanks [@benjie](https://github.com/benjie)! - Fixes multiple pgServices codec
2040
+ name conflicts by prepending the service name if it's not 'main'.
2041
+
2042
+ - [#1867](https://github.com/graphile/crystal/pull/1867)
2043
+ [`004889258`](https://github.com/graphile/crystal/commit/004889258e22a19ffe9a641f57e4ddd5299db9bf)
2044
+ Thanks [@benjie](https://github.com/benjie)! - Fix bug in CLI parser where
2045
+ omitting `--watch` would force `watch: false` even if config sets
2046
+ `watch: true`.
2047
+
2048
+ - [#1817](https://github.com/graphile/crystal/pull/1817)
2049
+ [`f305c3278`](https://github.com/graphile/crystal/commit/f305c327848eb7baef46c5384a7cc5af6f79db8d)
2050
+ Thanks [@benjie](https://github.com/benjie)! - Add support for limiting
2051
+ polymorphic plans (only some of them, specifically `pgUnionAll()` right now)
2052
+ to limit the types of their results; exposed via an experimental 'only'
2053
+ argument on fields, for example
2054
+ `allApplications(only: [GcpApplication, AwsApplication])` would limit the type
2055
+ of applications returned to only be the two specified.
2056
+
2057
+ - [#1885](https://github.com/graphile/crystal/pull/1885)
2058
+ [`9e1df08b7`](https://github.com/graphile/crystal/commit/9e1df08b702ae32870a8f1324bab37f447cba868)
2059
+ Thanks [@benjie](https://github.com/benjie)! - Fix `orderBy:null` regression
2060
+
2061
+ - [#1878](https://github.com/graphile/crystal/pull/1878)
2062
+ [`e04238c0a`](https://github.com/graphile/crystal/commit/e04238c0aee46cc86ba61d6461b6636c2f9d1183)
2063
+ Thanks [@benjie](https://github.com/benjie)! - Add emulation for
2064
+ `--simple-subscriptions` to V4 preset.
2065
+
2066
+ - [#1884](https://github.com/graphile/crystal/pull/1884)
2067
+ [`c66c3527c`](https://github.com/graphile/crystal/commit/c66c3527ce2bb38afa37242ecb5a22247efd6db9)
2068
+ Thanks [@benjie](https://github.com/benjie)! - List codecs can now have names.
2069
+
2070
+ - Updated dependencies
2071
+ [[`3fdc2bce4`](https://github.com/graphile/crystal/commit/3fdc2bce42418773f808c5b8309dfb361cd95ce9),
2072
+ [`aeef362b5`](https://github.com/graphile/crystal/commit/aeef362b5744816f01e4a6f714bbd77f92332bc5),
2073
+ [`8a76db07f`](https://github.com/graphile/crystal/commit/8a76db07f4c110cecc6225504f9a05ccbcbc7b92),
2074
+ [`bce0636d4`](https://github.com/graphile/crystal/commit/bce0636d424476664672166193a181c83476423a),
2075
+ [`f305c3278`](https://github.com/graphile/crystal/commit/f305c327848eb7baef46c5384a7cc5af6f79db8d),
2076
+ [`3b558e0c1`](https://github.com/graphile/crystal/commit/3b558e0c110dd49e5d51e49a5ad6463a9ed68ecb),
2077
+ [`2ae8d33aa`](https://github.com/graphile/crystal/commit/2ae8d33aa83955649dcd6e7489604b059ed2daf4),
2078
+ [`9e1df08b7`](https://github.com/graphile/crystal/commit/9e1df08b702ae32870a8f1324bab37f447cba868),
2079
+ [`8a0cdb95f`](https://github.com/graphile/crystal/commit/8a0cdb95f200b28b0ea1ab5caa12b23dce5f374f),
2080
+ [`dbd91fdd8`](https://github.com/graphile/crystal/commit/dbd91fdd836f041b6e2ff9d358c6a6f521f43914),
2081
+ [`995e25035`](https://github.com/graphile/crystal/commit/995e250352217fdf8f036b8ed6cad3fab520817f),
2082
+ [`f1d5ad18e`](https://github.com/graphile/crystal/commit/f1d5ad18e1cd0d59b9e74f619ec6b0de57f07b17),
2083
+ [`c66c3527c`](https://github.com/graphile/crystal/commit/c66c3527ce2bb38afa37242ecb5a22247efd6db9),
2084
+ [`f66cc40b3`](https://github.com/graphile/crystal/commit/f66cc40b3bc5bf2e7f92fe5a6bd5638e2a51ac2b),
2085
+ [`f18635a5c`](https://github.com/graphile/crystal/commit/f18635a5cf55845c9534d82bb483e5fbb9ed179e),
2086
+ [`1c9f1c0ed`](https://github.com/graphile/crystal/commit/1c9f1c0edf4e621a5b6345d3a41527a18143c6ae),
2087
+ [`9fb5cc06e`](https://github.com/graphile/crystal/commit/9fb5cc06ee52165378392969172e6ee8128833f6)]:
2088
+ - grafast@0.1.1-beta.2
2089
+ - graphile-utils@5.0.0-beta.16
2090
+ - graphile-build-pg@5.0.0-beta.16
2091
+ - @dataplan/pg@0.0.1-beta.13
2092
+ - graphile-build@5.0.0-beta.12
2093
+ - graphile-config@0.0.1-beta.5
2094
+ - grafserv@0.1.1-beta.4
2095
+ - @dataplan/json@0.0.1-beta.11
2096
+
2097
+ ## 5.0.0-beta.16
2098
+
2099
+ ### Patch Changes
2100
+
2101
+ - [#1834](https://github.com/graphile/crystal/pull/1834)
2102
+ [`2e7fc6449`](https://github.com/graphile/crystal/commit/2e7fc6449c2d08c44c32985811bb2e233a04056b)
2103
+ Thanks [@benjie](https://github.com/benjie)! - Fix issue with watch mode where
2104
+ schema omits database resources in some situations.
2105
+ - Updated dependencies
2106
+ [[`9696a1b08`](https://github.com/graphile/crystal/commit/9696a1b0885442f44e3a6ca6a4909ec96a445884),
2107
+ [`49fcb0d58`](https://github.com/graphile/crystal/commit/49fcb0d585b31b291c9072c339d6f5b550eefc9f),
2108
+ [`2e7fc6449`](https://github.com/graphile/crystal/commit/2e7fc6449c2d08c44c32985811bb2e233a04056b),
2109
+ [`7aef73319`](https://github.com/graphile/crystal/commit/7aef73319a8a147c700727be62427e1eefdefbf8)]:
2110
+ - grafserv@0.1.1-beta.3
2111
+ - grafast@0.1.1-beta.1
2112
+ - graphile-build-pg@5.0.0-beta.15
2113
+ - graphile-config@0.0.1-beta.4
2114
+ - @dataplan/pg@0.0.1-beta.12
2115
+ - @dataplan/json@0.0.1-beta.10
2116
+ - graphile-build@5.0.0-beta.11
2117
+ - graphile-utils@5.0.0-beta.15
2118
+
2119
+ ## 5.0.0-beta.15
2120
+
2121
+ ### Patch Changes
2122
+
2123
+ - [#1799](https://github.com/graphile/crystal/pull/1799)
2124
+ [`3dd5d86d6`](https://github.com/graphile/crystal/commit/3dd5d86d6c1ea7ba106c08e8a315ec47ed6cfa2d)
2125
+ Thanks [@jvandermey](https://github.com/jvandermey)! - Can now pass onEdit
2126
+ callbacks through the Ruru config via the plugin system; e.g. to update the
2127
+ URL search params with the current editor state.
2128
+
2129
+ - [#1801](https://github.com/graphile/crystal/pull/1801)
2130
+ [`2d447a6b4`](https://github.com/graphile/crystal/commit/2d447a6b45d7db2813bd957f412cd959e2185759)
2131
+ Thanks [@benjie](https://github.com/benjie)! - Fix bug where the owner of a
2132
+ database object wasn't seen as having any privileges.
2133
+ - Updated dependencies
2134
+ [[`2d447a6b4`](https://github.com/graphile/crystal/commit/2d447a6b45d7db2813bd957f412cd959e2185759)]:
2135
+ - graphile-build-pg@5.0.0-beta.14
2136
+ - graphile-utils@5.0.0-beta.14
2137
+ - grafserv@0.1.1-beta.2
2138
+ - @dataplan/pg@0.0.1-beta.11
2139
+
2140
+ ## 5.0.0-beta.14
2141
+
2142
+ ### Patch Changes
2143
+
2144
+ - [#1796](https://github.com/graphile/crystal/pull/1796)
2145
+ [`ebb0b817e`](https://github.com/graphile/crystal/commit/ebb0b817e3efe210445d3f3396ff4bc53ebab3e7)
2146
+ Thanks [@benjie](https://github.com/benjie)! - Can now set initial query and
2147
+ variables in Ruru via the plugin system; e.g. to set query/variables based on
2148
+ query string.
2149
+
2150
+ - [#1797](https://github.com/graphile/crystal/pull/1797)
2151
+ [`26e0bc726`](https://github.com/graphile/crystal/commit/26e0bc72653cd8dcef4b6cfb3c76876a5e620a12)
2152
+ Thanks [@benjie](https://github.com/benjie)! - Fix that smart tags were not
2153
+ copied onto enum codecs.
2154
+
2155
+ - Updated dependencies
2156
+ [[`781a89758`](https://github.com/graphile/crystal/commit/781a89758fff2712f0080d8fafb4048da189b782),
2157
+ [`a38e650d6`](https://github.com/graphile/crystal/commit/a38e650d67d6c7ff0cf5b853377622090ede3a50),
2158
+ [`26e0bc726`](https://github.com/graphile/crystal/commit/26e0bc72653cd8dcef4b6cfb3c76876a5e620a12)]:
2159
+ - grafserv@0.1.1-beta.1
2160
+ - graphile-build-pg@5.0.0-beta.13
2161
+ - @dataplan/pg@0.0.1-beta.11
2162
+ - graphile-utils@5.0.0-beta.13
2163
+
2164
+ ## 5.0.0-beta.13
2165
+
2166
+ ### Patch Changes
2167
+
2168
+ - Updated dependencies
2169
+ [[`2805edc68`](https://github.com/graphile/crystal/commit/2805edc68b90546bf71ffd293af4d87a79345825)]:
2170
+ - pg-sql2@5.0.0-beta.4
2171
+ - @dataplan/pg@0.0.1-beta.10
2172
+ - grafast@0.1.1-beta.0
2173
+ - graphile-build-pg@5.0.0-beta.12
2174
+ - graphile-utils@5.0.0-beta.12
2175
+
2176
+ ## 5.0.0-beta.12
2177
+
2178
+ ### Patch Changes
2179
+
2180
+ - [#1779](https://github.com/graphile/crystal/pull/1779)
2181
+ [`4a4d26d87`](https://github.com/graphile/crystal/commit/4a4d26d87ce74589429b8ca5126a7bfdf30351b8)
2182
+ Thanks [@benjie](https://github.com/benjie)! - Fix a polymorphic planning
2183
+ issue.
2184
+
2185
+ - [#1778](https://github.com/graphile/crystal/pull/1778)
2186
+ [`b2bce88da`](https://github.com/graphile/crystal/commit/b2bce88da26c7a8965468be16fc2d935eadd3434)
2187
+ Thanks [@benjie](https://github.com/benjie)! - Enable source maps in modules
2188
+ where it was disabled.
2189
+
2190
+ - [#1780](https://github.com/graphile/crystal/pull/1780)
2191
+ [`861a8a306`](https://github.com/graphile/crystal/commit/861a8a306ef42a821da19e77903ddd7e8130bfb3)
2192
+ Thanks [@benjie](https://github.com/benjie)! - Fix an issue with side effect
2193
+ plans and polymorphism
2194
+
2195
+ - [#1770](https://github.com/graphile/crystal/pull/1770)
2196
+ [`9a84bc6dd`](https://github.com/graphile/crystal/commit/9a84bc6dd5b33c1919f75f867df1f61c78686695)
2197
+ Thanks [@benjie](https://github.com/benjie)! - Fix issues around enum tables:
2198
+ indicate when an enum table codec replaces a regular attribute codec, expose
2199
+ helpers for working with enum tables, and don't exclude enum table references
2200
+ when using the Relay preset.
2201
+
2202
+ - [#1774](https://github.com/graphile/crystal/pull/1774)
2203
+ [`7d55d2c34`](https://github.com/graphile/crystal/commit/7d55d2c343880d7e665f9743f6ae7e39343c22cc)
2204
+ Thanks [@benjie](https://github.com/benjie)! - Add
2205
+ `preset.gather.pgIdentifiers` setting (values: 'qualified' or 'unqualified');
2206
+ if set to 'unqualified' then we will not add the schema name to table or
2207
+ function identifiers - it's up to you to ensure they're present in the
2208
+ `search_path` (which you can set via `pgSettings` on a per-request basis).
2209
+ - Updated dependencies
2210
+ [[`eeccfd675`](https://github.com/graphile/crystal/commit/eeccfd67585a79330197886fdc98335562e08c0a),
2211
+ [`4a4d26d87`](https://github.com/graphile/crystal/commit/4a4d26d87ce74589429b8ca5126a7bfdf30351b8),
2212
+ [`b2bce88da`](https://github.com/graphile/crystal/commit/b2bce88da26c7a8965468be16fc2d935eadd3434),
2213
+ [`861a8a306`](https://github.com/graphile/crystal/commit/861a8a306ef42a821da19e77903ddd7e8130bfb3),
2214
+ [`9a84bc6dd`](https://github.com/graphile/crystal/commit/9a84bc6dd5b33c1919f75f867df1f61c78686695),
2215
+ [`b728d7fb9`](https://github.com/graphile/crystal/commit/b728d7fb91eb29fbb21d955af5fd9cb4278f6222),
2216
+ [`264158f03`](https://github.com/graphile/crystal/commit/264158f034e7b6ebc1a9a94d92b7e4fb746c5fac),
2217
+ [`2d31f058b`](https://github.com/graphile/crystal/commit/2d31f058b34d3f5ef11699582b9a4960a4ebc471),
2218
+ [`7d55d2c34`](https://github.com/graphile/crystal/commit/7d55d2c343880d7e665f9743f6ae7e39343c22cc)]:
2219
+ - graphile-utils@5.0.0-beta.11
2220
+ - grafast@0.1.1-beta.0
2221
+ - @dataplan/json@0.0.1-beta.9
2222
+ - @dataplan/pg@0.0.1-beta.9
2223
+ - graphile-build-pg@5.0.0-beta.11
2224
+ - graphile-build@5.0.0-beta.10
2225
+ - grafserv@0.1.1-beta.0
2226
+
2227
+ ## 5.0.0-beta.11
2228
+
2229
+ ### Patch Changes
2230
+
2231
+ - [#514](https://github.com/graphile/crystal-pre-merge/pull/514)
2232
+ [`c9848f693`](https://github.com/graphile/crystal-pre-merge/commit/c9848f6936a5abd7740c0638bfb458fb5551f03b)
2233
+ Thanks [@benjie](https://github.com/benjie)! - Update package.json repository
2234
+ information
2235
+
2236
+ - Updated dependencies
2237
+ [[`c9848f693`](https://github.com/graphile/crystal-pre-merge/commit/c9848f6936a5abd7740c0638bfb458fb5551f03b),
2238
+ [`ede1092fe`](https://github.com/graphile/crystal-pre-merge/commit/ede1092fe197719b6fa786f4cfa75f6a1f4c56c1),
2239
+ [`566983fbd`](https://github.com/graphile/crystal-pre-merge/commit/566983fbd99c4b2df8c4ebd6260521670a2b7dfc),
2240
+ [`409bf6071`](https://github.com/graphile/crystal-pre-merge/commit/409bf607180d4d8faec658c803e5ec4d1a00c451)]:
2241
+ - graphile-build-pg@5.0.0-beta.10
2242
+ - graphile-build@5.0.0-beta.9
2243
+ - graphile-utils@5.0.0-beta.10
2244
+ - @dataplan/json@0.0.1-beta.8
2245
+ - graphile-config@0.0.1-beta.3
2246
+ - @dataplan/pg@0.0.1-beta.8
2247
+ - grafserv@0.0.1-beta.9
2248
+ - grafast@0.0.1-beta.8
2249
+ - tamedevil@0.0.0-beta.3
2250
+ - pg-sql2@5.0.0-beta.3
2251
+ - @graphile/lru@5.0.0-beta.3
2252
+
2253
+ ## 5.0.0-beta.10
2254
+
2255
+ ### Patch Changes
2256
+
2257
+ - Updated dependencies []:
2258
+ - grafserv@0.0.1-beta.8
2259
+ - graphile-build-pg@5.0.0-beta.9
2260
+ - @dataplan/pg@0.0.1-beta.7
2261
+ - graphile-utils@5.0.0-beta.9
2262
+
2263
+ ## 5.0.0-beta.9
2264
+
2265
+ ### Patch Changes
2266
+
2267
+ - Updated dependencies
2268
+ [[`3700e204f`](https://github.com/benjie/crystal/commit/3700e204f430db182c92ca7abc82017c81fa1f9b)]:
2269
+ - grafast@0.0.1-beta.7
2270
+ - @dataplan/json@0.0.1-beta.7
2271
+ - @dataplan/pg@0.0.1-beta.7
2272
+ - grafserv@0.0.1-beta.7
2273
+ - graphile-build@5.0.0-beta.8
2274
+ - graphile-build-pg@5.0.0-beta.9
2275
+ - graphile-utils@5.0.0-beta.9
2276
+
3
2277
  ## 5.0.0-beta.8
4
2278
 
5
2279
  ### Patch Changes
@@ -570,7 +2844,6 @@
570
2844
  [`ff91a5660`](https://github.com/benjie/crystal/commit/ff91a5660c5a33ab32555ab3da12f880179d9892)
571
2845
  Thanks [@benjie](https://github.com/benjie)! - Added
572
2846
  `postgraphile/presets/relay` preset:
573
-
574
2847
  - Hides primary key columns from output schema, and includes `id: ID` instead
575
2848
  - Hides foreign key columns from output schema, expecting you to use the
576
2849
  relation instead
@@ -1366,7 +3639,6 @@
1366
3639
  resources, and more. So, we've renamed lots of things as part of the API
1367
3640
  stabilization work. You're probably only affected by the first 2 bullet
1368
3641
  points.
1369
-
1370
3642
  - `pgConfigs` -> `pgServices` (also applies to related `pgConfig` terms such
1371
3643
  as `makePgConfig` -> `makePgService`, `MakePgConfigOptions` ->
1372
3644
  `MakePgServiceOptions`, etc) - see your `graphile.config.ts` or equivalent
@@ -1818,7 +4090,6 @@
1818
4090
  [`652cf1073`](https://github.com/benjie/crystal/commit/652cf107316ea5832f69c6a55574632187f5c876)
1819
4091
  Thanks [@benjie](https://github.com/benjie)! - 🚨 Breaking changes around
1820
4092
  types and postgres configuration:
1821
-
1822
4093
  - `GraphileBuild.GraphileResolverContext` renamed to `Grafast.Context`
1823
4094
  - `GraphileConfig.GraphQLRequestContext` renamed to `Grafast.RequestContext`
1824
4095
  - `Grafast.PgDatabaseAdaptorOptions` renaed to
@@ -1872,7 +4143,6 @@
1872
4143
 
1873
4144
  - [`72bf5f535`](undefined) - Overhaul the behavior system (see
1874
4145
  https://postgraphile.org/postgraphile/next/behavior).
1875
-
1876
4146
  - Adds `schema.defaultBehavior` configuration option to save having to write a
1877
4147
  plugin for such a simple task
1878
4148
  - Changes a bunch of behavior strings: