@pothos/plugin-drizzle 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.md +351 -0
  2. package/README.md +784 -221
  3. package/dts/connection-helpers.d.ts +18 -8
  4. package/dts/connection-helpers.d.ts.map +1 -1
  5. package/dts/drizzle-field-builder.d.ts +4 -11
  6. package/dts/drizzle-field-builder.d.ts.map +1 -1
  7. package/dts/global-types.d.ts.map +1 -1
  8. package/dts/index.d.ts.map +1 -1
  9. package/dts/model-loader.d.ts +18 -17
  10. package/dts/model-loader.d.ts.map +1 -1
  11. package/dts/types.d.ts +81 -20
  12. package/dts/types.d.ts.map +1 -1
  13. package/dts/utils/adapter.d.ts +39 -0
  14. package/dts/utils/adapter.d.ts.map +1 -0
  15. package/dts/utils/await-selections.d.ts +12 -0
  16. package/dts/utils/await-selections.d.ts.map +1 -0
  17. package/dts/utils/config.d.ts +23 -3
  18. package/dts/utils/config.d.ts.map +1 -1
  19. package/dts/utils/cursors.d.ts +6 -6
  20. package/dts/utils/cursors.d.ts.map +1 -1
  21. package/dts/utils/map-query.d.ts +22 -21
  22. package/dts/utils/map-query.d.ts.map +1 -1
  23. package/dts/utils/path-info.d.ts +13 -0
  24. package/dts/utils/path-info.d.ts.map +1 -0
  25. package/dts/utils/relation-filter.d.ts +48 -0
  26. package/dts/utils/relation-filter.d.ts.map +1 -0
  27. package/dts/utils/selections.d.ts +2 -21
  28. package/dts/utils/selections.d.ts.map +1 -1
  29. package/esm/connection-helpers.d.ts +18 -8
  30. package/esm/connection-helpers.d.ts.map +1 -1
  31. package/esm/connection-helpers.js +52 -19
  32. package/esm/connection-helpers.js.map +1 -1
  33. package/esm/drizzle-field-builder.d.ts +4 -11
  34. package/esm/drizzle-field-builder.d.ts.map +1 -1
  35. package/esm/drizzle-field-builder.js +138 -96
  36. package/esm/drizzle-field-builder.js.map +1 -1
  37. package/esm/field-builder.js +61 -47
  38. package/esm/field-builder.js.map +1 -1
  39. package/esm/global-types.d.ts.map +1 -1
  40. package/esm/index.d.ts.map +1 -1
  41. package/esm/index.js +37 -61
  42. package/esm/index.js.map +1 -1
  43. package/esm/model-loader.d.ts +18 -17
  44. package/esm/model-loader.d.ts.map +1 -1
  45. package/esm/model-loader.js +76 -45
  46. package/esm/model-loader.js.map +1 -1
  47. package/esm/schema-builder.js +40 -149
  48. package/esm/schema-builder.js.map +1 -1
  49. package/esm/types.d.ts +81 -20
  50. package/esm/types.d.ts.map +1 -1
  51. package/esm/types.js +1 -0
  52. package/esm/types.js.map +1 -1
  53. package/esm/utils/adapter.d.ts +39 -0
  54. package/esm/utils/adapter.d.ts.map +1 -0
  55. package/esm/utils/adapter.js +137 -0
  56. package/esm/utils/adapter.js.map +1 -0
  57. package/esm/utils/await-selections.d.ts +12 -0
  58. package/esm/utils/await-selections.d.ts.map +1 -0
  59. package/esm/utils/await-selections.js +19 -0
  60. package/esm/utils/await-selections.js.map +1 -0
  61. package/esm/utils/config.d.ts +23 -3
  62. package/esm/utils/config.d.ts.map +1 -1
  63. package/esm/utils/config.js +1 -4
  64. package/esm/utils/config.js.map +1 -1
  65. package/esm/utils/cursors.d.ts +6 -6
  66. package/esm/utils/cursors.d.ts.map +1 -1
  67. package/esm/utils/cursors.js +55 -90
  68. package/esm/utils/cursors.js.map +1 -1
  69. package/esm/utils/map-query.d.ts +22 -21
  70. package/esm/utils/map-query.d.ts.map +1 -1
  71. package/esm/utils/map-query.js +40 -336
  72. package/esm/utils/map-query.js.map +1 -1
  73. package/esm/utils/path-info.d.ts +13 -0
  74. package/esm/utils/path-info.d.ts.map +1 -0
  75. package/esm/utils/path-info.js +37 -0
  76. package/esm/utils/path-info.js.map +1 -0
  77. package/esm/utils/relation-filter.d.ts +48 -0
  78. package/esm/utils/relation-filter.d.ts.map +1 -0
  79. package/esm/utils/relation-filter.js +92 -0
  80. package/esm/utils/relation-filter.js.map +1 -0
  81. package/esm/utils/selections.d.ts +2 -21
  82. package/esm/utils/selections.d.ts.map +1 -1
  83. package/esm/utils/selections.js +1 -133
  84. package/esm/utils/selections.js.map +1 -1
  85. package/lib/connection-helpers.js +51 -18
  86. package/lib/connection-helpers.js.map +1 -1
  87. package/lib/drizzle-field-builder.js +136 -94
  88. package/lib/drizzle-field-builder.js.map +1 -1
  89. package/lib/field-builder.js +58 -44
  90. package/lib/field-builder.js.map +1 -1
  91. package/lib/index.js +36 -60
  92. package/lib/index.js.map +1 -1
  93. package/lib/model-loader.js +76 -45
  94. package/lib/model-loader.js.map +1 -1
  95. package/lib/schema-builder.js +40 -149
  96. package/lib/schema-builder.js.map +1 -1
  97. package/lib/types.js +4 -0
  98. package/lib/types.js.map +1 -1
  99. package/lib/utils/adapter.js +147 -0
  100. package/lib/utils/adapter.js.map +1 -0
  101. package/lib/utils/await-selections.js +20 -0
  102. package/lib/utils/await-selections.js.map +1 -0
  103. package/lib/utils/config.js +1 -4
  104. package/lib/utils/config.js.map +1 -1
  105. package/lib/utils/cursors.js +47 -88
  106. package/lib/utils/cursors.js.map +1 -1
  107. package/lib/utils/map-query.js +28 -341
  108. package/lib/utils/map-query.js.map +1 -1
  109. package/lib/utils/path-info.js +39 -0
  110. package/lib/utils/path-info.js.map +1 -0
  111. package/lib/utils/relation-filter.js +91 -0
  112. package/lib/utils/relation-filter.js.map +1 -0
  113. package/lib/utils/selections.js +3 -158
  114. package/lib/utils/selections.js.map +1 -1
  115. package/package.json +8 -6
  116. package/src/connection-helpers.ts +167 -53
  117. package/src/drizzle-field-builder.ts +296 -176
  118. package/src/field-builder.ts +110 -77
  119. package/src/global-types.ts +0 -32
  120. package/src/index.ts +42 -68
  121. package/src/model-loader.ts +110 -71
  122. package/src/schema-builder.ts +76 -169
  123. package/src/types.ts +176 -44
  124. package/src/utils/adapter.ts +197 -0
  125. package/src/utils/await-selections.ts +31 -0
  126. package/src/utils/config.ts +1 -5
  127. package/src/utils/cursors.ts +53 -81
  128. package/src/utils/map-query.ts +51 -708
  129. package/src/utils/path-info.ts +40 -0
  130. package/src/utils/relation-filter.ts +185 -0
  131. package/src/utils/selections.ts +2 -207
  132. package/dts/utils/deep-equal.d.ts +0 -2
  133. package/dts/utils/deep-equal.d.ts.map +0 -1
  134. package/dts/utils/drizzle-graphql.d.ts +0 -2
  135. package/dts/utils/drizzle-graphql.d.ts.map +0 -1
  136. package/dts/utils/loader-map.d.ts +0 -11
  137. package/dts/utils/loader-map.d.ts.map +0 -1
  138. package/dts/utils/usage.d.ts +0 -5
  139. package/dts/utils/usage.d.ts.map +0 -1
  140. package/esm/utils/deep-equal.d.ts +0 -2
  141. package/esm/utils/deep-equal.d.ts.map +0 -1
  142. package/esm/utils/deep-equal.js +0 -45
  143. package/esm/utils/deep-equal.js.map +0 -1
  144. package/esm/utils/drizzle-graphql.d.ts +0 -2
  145. package/esm/utils/drizzle-graphql.d.ts.map +0 -1
  146. package/esm/utils/drizzle-graphql.js +0 -232
  147. package/esm/utils/drizzle-graphql.js.map +0 -1
  148. package/esm/utils/loader-map.d.ts +0 -11
  149. package/esm/utils/loader-map.d.ts.map +0 -1
  150. package/esm/utils/loader-map.js +0 -35
  151. package/esm/utils/loader-map.js.map +0 -1
  152. package/esm/utils/usage.d.ts +0 -5
  153. package/esm/utils/usage.d.ts.map +0 -1
  154. package/esm/utils/usage.js +0 -59
  155. package/esm/utils/usage.js.map +0 -1
  156. package/lib/utils/deep-equal.js +0 -55
  157. package/lib/utils/deep-equal.js.map +0 -1
  158. package/lib/utils/drizzle-graphql.js +0 -236
  159. package/lib/utils/drizzle-graphql.js.map +0 -1
  160. package/lib/utils/loader-map.js +0 -56
  161. package/lib/utils/loader-map.js.map +0 -1
  162. package/lib/utils/usage.js +0 -83
  163. package/lib/utils/usage.js.map +0 -1
  164. package/src/utils/deep-equal.ts +0 -57
  165. package/src/utils/drizzle-graphql.ts +0 -274
  166. package/src/utils/loader-map.ts +0 -49
  167. package/src/utils/usage.ts +0 -62
@@ -1,24 +1,5 @@
1
- import type { DBQueryConfig, TableRelationalConfig } from 'drizzle-orm';
2
- import type { PothosDrizzleSchemaConfig } from './config.js';
3
- import type { LoaderMappings } from './loader-map.js';
4
- export interface SelectionState {
5
- table: TableRelationalConfig;
6
- query: object;
7
- allColumns: boolean;
8
- columns: Set<string>;
9
- with: Map<string, SelectionState>;
10
- extras: Map<string, NonNullable<SelectionMap['extras']>[string]>;
11
- mappings: LoaderMappings;
12
- parent?: SelectionState;
13
- depth: number;
14
- skipDeferredFragments: boolean;
15
- }
1
+ import type { DBQueryConfig } from 'drizzle-orm';
16
2
  export type SelectionMap = DBQueryConfig<'one'>;
3
+ /** Drops keys holding `undefined`, so `{ where: cond ? filter : undefined }` reads as `{}`. */
17
4
  export declare function omitUndefinedKeys<T extends object>(query: T): T;
18
- export declare function selectionCompatible(state: SelectionState, selectionMap: SelectionMap | boolean, ignoreQuery?: boolean): boolean;
19
- export declare function stateCompatible(state: SelectionState, newState: SelectionState, ignoreQuery?: boolean): boolean;
20
- export declare function mergeState(state: SelectionState, newState: SelectionState): void;
21
- export declare function createState(table: TableRelationalConfig, skipDeferredFragments: boolean, parent?: SelectionState): SelectionState;
22
- export declare function mergeSelection(config: PothosDrizzleSchemaConfig, state: SelectionState, selection: SelectionMap | boolean): void;
23
- export declare function selectionToQuery(config: PothosDrizzleSchemaConfig, state: SelectionState): SelectionMap;
24
5
  //# sourceMappingURL=selections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"selections.d.ts","sourceRoot":"","sources":["../../src/utils/selections.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,qBAAqB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AAEhD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAK/D;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,YAAY,GAAG,OAAO,EACpC,WAAW,UAAQ,GAClB,OAAO,CA+BT;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,cAAc,EACxB,WAAW,UAAQ,GAClB,OAAO,CAQT;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,QAoBzE;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,qBAAqB,EAC5B,qBAAqB,EAAE,OAAO,EAC9B,MAAM,CAAC,EAAE,cAAc,GACtB,cAAc,CAahB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,YAAY,GAAG,OAAO,QA0DlC;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,cAAc,GACpB,YAAY,CA6Bd"}
1
+ {"version":3,"file":"selections.d.ts","sourceRoot":"","sources":["../../src/utils/selections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AAEhD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAK/D"}
@@ -1,139 +1,7 @@
1
- import { PothosValidationError } from '@pothos/core';
2
- import { deepEqual } from './deep-equal.js';
3
- export function omitUndefinedKeys(query) {
1
+ /** Drops keys holding `undefined`, so `{ where: cond ? filter : undefined }` reads as `{}`. */ export function omitUndefinedKeys(query) {
4
2
  const entries = Object.entries(query);
5
3
  const defined = entries.filter(([, value])=>value !== undefined);
6
4
  return defined.length === entries.length ? query : Object.fromEntries(defined);
7
5
  }
8
- export function selectionCompatible(state, selectionMap, ignoreQuery = false) {
9
- if (typeof selectionMap === 'boolean') {
10
- return ignoreQuery || !selectionMap || Object.keys(state.query).length === 0;
11
- }
12
- const { with: withSelection, extras, columns: _, ...query } = selectionMap;
13
- if (withSelection && Object.entries(withSelection).some(([key, value])=>value && state.with.has(key) && // TODO: make sure nested extras are normalized
14
- !selectionCompatible(state.with.get(key), value))) {
15
- return false;
16
- }
17
- if (extras && Object.entries(extras).some(([key, value])=>{
18
- const existing = state.extras.get(key);
19
- return existing && existing !== value;
20
- })) {
21
- return false;
22
- }
23
- return ignoreQuery || deepEqual(state.query, omitUndefinedKeys(query));
24
- }
25
- export function stateCompatible(state, newState, ignoreQuery = false) {
26
- for (const [name, relationState] of newState.with){
27
- if (state.with.has(name) && !stateCompatible(state.with.get(name), relationState)) {
28
- return false;
29
- }
30
- }
31
- return ignoreQuery || deepEqual(state.query, newState.query);
32
- }
33
- export function mergeState(state, newState) {
34
- for (const [name, relationState] of newState.with){
35
- if (state.with.has(name)) {
36
- mergeState(state.with.get(name), relationState);
37
- }
38
- }
39
- if (!state.allColumns) {
40
- if (newState.allColumns) {
41
- state.allColumns = true;
42
- } else {
43
- for (const name of newState.columns){
44
- state.columns.add(name);
45
- }
46
- }
47
- }
48
- for (const [name, value] of newState.extras){
49
- state.extras.set(name, value);
50
- }
51
- }
52
- export function createState(table, skipDeferredFragments, parent) {
53
- return {
54
- table,
55
- skipDeferredFragments,
56
- parent,
57
- query: {},
58
- columns: new Set(),
59
- with: new Map(),
60
- extras: new Map(),
61
- mappings: {},
62
- allColumns: false,
63
- depth: parent ? parent.depth + 1 : 0
64
- };
65
- }
66
- export function mergeSelection(config, state, selection) {
67
- const { with: withSelection, extras, columns, ...query } = typeof selection === 'boolean' ? selection === true ? {} : {
68
- columns: {}
69
- } : selection;
70
- if (withSelection) {
71
- for (const [key, value] of Object.entries(withSelection)){
72
- const relation = state.table.relations[key];
73
- if (!relation) {
74
- throw new PothosValidationError(`Relation ${key} does not exist on ${state.table.name}`);
75
- }
76
- merge(config.relations[relation.targetTableName], key, value);
77
- }
78
- }
79
- const normalizedQuery = omitUndefinedKeys(query);
80
- if (Object.keys(normalizedQuery).length > 0) {
81
- state.query = normalizedQuery;
82
- }
83
- if (extras) {
84
- for (const [key, value] of Object.entries(extras)){
85
- state.extras.set(key, value);
86
- }
87
- }
88
- if (state.allColumns) {
89
- return;
90
- }
91
- if (columns && !state.allColumns) {
92
- for (const [key, value] of Object.entries(columns)){
93
- if (value) {
94
- state.columns.add(key);
95
- }
96
- }
97
- } else {
98
- state.allColumns = true;
99
- }
100
- function merge(table, key, value) {
101
- if (!value) {
102
- return;
103
- }
104
- if (state.with.has(key)) {
105
- mergeSelection(config, state.with.get(key), value);
106
- } else {
107
- const relatedState = createState(table, state.skipDeferredFragments, state);
108
- mergeSelection(config, relatedState, value);
109
- state.with.set(key, relatedState);
110
- }
111
- }
112
- }
113
- export function selectionToQuery(config, state) {
114
- const query = {
115
- ...omitUndefinedKeys(state.query),
116
- columns: undefined,
117
- with: {},
118
- extras: {}
119
- };
120
- if (!state.allColumns) {
121
- query.columns = {};
122
- for (const key of state.columns){
123
- query.columns[key] = true;
124
- }
125
- for (const column of config.getPrimaryKey(state.table.name)){
126
- const tsName = config.columnToTsName(column);
127
- query.columns[tsName] = true;
128
- }
129
- }
130
- for (const [key, value] of state.extras){
131
- query.extras[key] = value;
132
- }
133
- state.with.forEach((sel, relation)=>{
134
- query.with[relation] = selectionToQuery(config, sel);
135
- });
136
- return query;
137
- }
138
6
 
139
7
  //# sourceMappingURL=selections.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/selections.ts"],"names":["PothosValidationError","deepEqual","omitUndefinedKeys","query","entries","Object","defined","filter","value","undefined","length","fromEntries","selectionCompatible","state","selectionMap","ignoreQuery","keys","with","withSelection","extras","columns","_","some","key","has","get","existing","stateCompatible","newState","name","relationState","mergeState","allColumns","add","set","createState","table","skipDeferredFragments","parent","Set","Map","mappings","depth","mergeSelection","config","selection","relation","relations","merge","targetTableName","normalizedQuery","relatedState","selectionToQuery","column","getPrimaryKey","tsName","columnToTsName","forEach","sel"],"mappings":"AAAA,SAASA,qBAAqB,QAAQ,eAAe;AAGrD,SAASC,SAAS,QAAQ,kBAAkB;AAkB5C,OAAO,SAASC,kBAAoCC,KAAQ;IAC1D,MAAMC,UAAUC,OAAOD,OAAO,CAACD;IAC/B,MAAMG,UAAUF,QAAQG,MAAM,CAAC,CAAC,GAAGC,MAAM,GAAKA,UAAUC;IAExD,OAAOH,QAAQI,MAAM,KAAKN,QAAQM,MAAM,GAAGP,QAASE,OAAOM,WAAW,CAACL;AACzE;AAEA,OAAO,SAASM,oBACdC,KAAqB,EACrBC,YAAoC,EACpCC,cAAc,KAAK;IAEnB,IAAI,OAAOD,iBAAiB,WAAW;QACrC,OAAOC,eAAe,CAACD,gBAAgBT,OAAOW,IAAI,CAACH,MAAMV,KAAK,EAAEO,MAAM,KAAK;IAC7E;IAEA,MAAM,EAAEO,MAAMC,aAAa,EAAEC,MAAM,EAAEC,SAASC,CAAC,EAAE,GAAGlB,OAAO,GAAGW;IAE9D,IACEI,iBACAb,OAAOD,OAAO,CAACc,eAAeI,IAAI,CAChC,CAAC,CAACC,KAAKf,MAAM,GACXA,SACAK,MAAMI,IAAI,CAACO,GAAG,CAACD,QACf,+CAA+C;QAC/C,CAACX,oBAAoBC,MAAMI,IAAI,CAACQ,GAAG,CAACF,MAAOf,SAE/C;QACA,OAAO;IACT;IAEA,IACEW,UACAd,OAAOD,OAAO,CAACe,QAAQG,IAAI,CAAC,CAAC,CAACC,KAAKf,MAAM;QACvC,MAAMkB,WAAWb,MAAMM,MAAM,CAACM,GAAG,CAACF;QAClC,OAAOG,YAAYA,aAAalB;IAClC,IACA;QACA,OAAO;IACT;IAEA,OAAOO,eAAed,UAAUY,MAAMV,KAAK,EAAED,kBAAkBC;AACjE;AAEA,OAAO,SAASwB,gBACdd,KAAqB,EACrBe,QAAwB,EACxBb,cAAc,KAAK;IAEnB,KAAK,MAAM,CAACc,MAAMC,cAAc,IAAIF,SAASX,IAAI,CAAE;QACjD,IAAIJ,MAAMI,IAAI,CAACO,GAAG,CAACK,SAAS,CAACF,gBAAgBd,MAAMI,IAAI,CAACQ,GAAG,CAACI,OAAQC,gBAAgB;YAClF,OAAO;QACT;IACF;IAEA,OAAOf,eAAed,UAAUY,MAAMV,KAAK,EAAEyB,SAASzB,KAAK;AAC7D;AAEA,OAAO,SAAS4B,WAAWlB,KAAqB,EAAEe,QAAwB;IACxE,KAAK,MAAM,CAACC,MAAMC,cAAc,IAAIF,SAASX,IAAI,CAAE;QACjD,IAAIJ,MAAMI,IAAI,CAACO,GAAG,CAACK,OAAO;YACxBE,WAAWlB,MAAMI,IAAI,CAACQ,GAAG,CAACI,OAAQC;QACpC;IACF;IAEA,IAAI,CAACjB,MAAMmB,UAAU,EAAE;QACrB,IAAIJ,SAASI,UAAU,EAAE;YACvBnB,MAAMmB,UAAU,GAAG;QACrB,OAAO;YACL,KAAK,MAAMH,QAAQD,SAASR,OAAO,CAAE;gBACnCP,MAAMO,OAAO,CAACa,GAAG,CAACJ;YACpB;QACF;IACF;IAEA,KAAK,MAAM,CAACA,MAAMrB,MAAM,IAAIoB,SAAST,MAAM,CAAE;QAC3CN,MAAMM,MAAM,CAACe,GAAG,CAACL,MAAMrB;IACzB;AACF;AAEA,OAAO,SAAS2B,YACdC,KAA4B,EAC5BC,qBAA8B,EAC9BC,MAAuB;IAEvB,OAAO;QACLF;QACAC;QACAC;QACAnC,OAAO,CAAC;QACRiB,SAAS,IAAImB;QACbtB,MAAM,IAAIuB;QACVrB,QAAQ,IAAIqB;QACZC,UAAU,CAAC;QACXT,YAAY;QACZU,OAAOJ,SAASA,OAAOI,KAAK,GAAG,IAAI;IACrC;AACF;AAEA,OAAO,SAASC,eACdC,MAAiC,EACjC/B,KAAqB,EACrBgC,SAAiC;IAEjC,MAAM,EACJ5B,MAAMC,aAAa,EACnBC,MAAM,EACNC,OAAO,EACP,GAAGjB,OACJ,GAAG,OAAO0C,cAAc,YAAaA,cAAc,OAAO,CAAC,IAAI;QAAEzB,SAAS,CAAC;IAAE,IAAKyB;IACnF,IAAI3B,eAAe;QACjB,KAAK,MAAM,CAACK,KAAKf,MAAM,IAAIH,OAAOD,OAAO,CAACc,eAAgB;YACxD,MAAM4B,WAAWjC,MAAMuB,KAAK,CAACW,SAAS,CAACxB,IAAI;YAE3C,IAAI,CAACuB,UAAU;gBACb,MAAM,IAAI9C,sBAAsB,CAAC,SAAS,EAAEuB,IAAI,mBAAmB,EAAEV,MAAMuB,KAAK,CAACP,IAAI,EAAE;YACzF;YAEAmB,MAAMJ,OAAOG,SAAS,CAACD,SAASG,eAAe,CAAC,EAAE1B,KAAKf;QACzD;IACF;IAEA,MAAM0C,kBAAkBhD,kBAAkBC;IAC1C,IAAIE,OAAOW,IAAI,CAACkC,iBAAiBxC,MAAM,GAAG,GAAG;QAC3CG,MAAMV,KAAK,GAAG+C;IAChB;IAEA,IAAI/B,QAAQ;QACV,KAAK,MAAM,CAACI,KAAKf,MAAM,IAAIH,OAAOD,OAAO,CAACe,QAAS;YACjDN,MAAMM,MAAM,CAACe,GAAG,CAACX,KAAKf;QACxB;IACF;IAEA,IAAIK,MAAMmB,UAAU,EAAE;QACpB;IACF;IAEA,IAAIZ,WAAW,CAACP,MAAMmB,UAAU,EAAE;QAChC,KAAK,MAAM,CAACT,KAAKf,MAAM,IAAIH,OAAOD,OAAO,CAACgB,SAAU;YAClD,IAAIZ,OAAO;gBACTK,MAAMO,OAAO,CAACa,GAAG,CAACV;YACpB;QACF;IACF,OAAO;QACLV,MAAMmB,UAAU,GAAG;IACrB;IAEA,SAASgB,MAAMZ,KAA4B,EAAEb,GAAW,EAAEf,KAA8B;QACtF,IAAI,CAACA,OAAO;YACV;QACF;QAEA,IAAIK,MAAMI,IAAI,CAACO,GAAG,CAACD,MAAM;YACvBoB,eAAeC,QAAQ/B,MAAMI,IAAI,CAACQ,GAAG,CAACF,MAAOf;QAC/C,OAAO;YACL,MAAM2C,eAAehB,YAAYC,OAAOvB,MAAMwB,qBAAqB,EAAExB;YACrE8B,eAAeC,QAAQO,cAAc3C;YACrCK,MAAMI,IAAI,CAACiB,GAAG,CAACX,KAAK4B;QACtB;IACF;AACF;AAEA,OAAO,SAASC,iBACdR,MAAiC,EACjC/B,KAAqB;IAErB,MAAMV,QAA4D;QAChE,GAAGD,kBAAkBW,MAAMV,KAAK,CAAC;QACjCiB,SAASX;QACTQ,MAAM,CAAC;QACPE,QAAQ,CAAC;IACX;IAEA,IAAI,CAACN,MAAMmB,UAAU,EAAE;QACrB7B,MAAMiB,OAAO,GAAG,CAAC;QACjB,KAAK,MAAMG,OAAOV,MAAMO,OAAO,CAAE;YAC/BjB,MAAMiB,OAAO,AAAC,CAACG,IAAI,GAAG;QACxB;QAEA,KAAK,MAAM8B,UAAUT,OAAOU,aAAa,CAACzC,MAAMuB,KAAK,CAACP,IAAI,EAAG;YAC3D,MAAM0B,SAASX,OAAOY,cAAc,CAACH;YACrClD,MAAMiB,OAAO,AAAC,CAACmC,OAAO,GAAG;QAC3B;IACF;IAEA,KAAK,MAAM,CAAChC,KAAKf,MAAM,IAAIK,MAAMM,MAAM,CAAE;QACvChB,MAAMgB,MAAM,AAAC,CAACI,IAAI,GAAGf;IACvB;IAEAK,MAAMI,IAAI,CAACwC,OAAO,CAAC,CAACC,KAAKZ;QACvB3C,MAAMc,IAAI,AAAC,CAAC6B,SAAS,GAAGM,iBAAiBR,QAAQc;IACnD;IAEA,OAAOvD;AACT"}
1
+ {"version":3,"sources":["../../src/utils/selections.ts"],"names":["omitUndefinedKeys","query","entries","Object","defined","filter","value","undefined","length","fromEntries"],"mappings":"AAIA,6FAA6F,GAC7F,OAAO,SAASA,kBAAoCC,KAAQ;IAC1D,MAAMC,UAAUC,OAAOD,OAAO,CAACD;IAC/B,MAAMG,UAAUF,QAAQG,MAAM,CAAC,CAAC,GAAGC,MAAM,GAAKA,UAAUC;IAExD,OAAOH,QAAQI,MAAM,KAAKN,QAAQM,MAAM,GAAGP,QAASE,OAAOM,WAAW,CAACL;AACzE"}
@@ -8,30 +8,40 @@ Object.defineProperty(exports, "drizzleConnectionHelpers", {
8
8
  return drizzleConnectionHelpers;
9
9
  }
10
10
  });
11
+ const _core = require("@pothos/core");
12
+ const _adapter = require("./utils/adapter.js");
13
+ const _awaitselections = require("./utils/await-selections.js");
11
14
  const _config = require("./utils/config.js");
12
15
  const _cursors = require("./utils/cursors.js");
13
16
  const _mapquery = require("./utils/map-query.js");
14
17
  const _refs = require("./utils/refs.js");
15
18
  const _selections = require("./utils/selections.js");
16
19
  var _builder_options_drizzle, _builder_options_drizzle1;
17
- function drizzleConnectionHelpers(builder, refOrType, { select, resolveNode, query, args: createArgs, maxSize = (_builder_options_drizzle = builder.options.drizzle) === null || _builder_options_drizzle === void 0 ? void 0 : _builder_options_drizzle.maxConnectionSize, defaultSize = (_builder_options_drizzle1 = builder.options.drizzle) === null || _builder_options_drizzle1 === void 0 ? void 0 : _builder_options_drizzle1.defaultConnectionSize }) {
20
+ function drizzleConnectionHelpers(builder, refOrType, { select, resolveNode, query, args: createArgs, maxSize = (_builder_options_drizzle = builder.options.drizzle) === null || _builder_options_drizzle === void 0 ? void 0 : _builder_options_drizzle.maxConnectionSize, defaultSize = (_builder_options_drizzle1 = builder.options.drizzle) === null || _builder_options_drizzle1 === void 0 ? void 0 : _builder_options_drizzle1.defaultConnectionSize } = {}) {
18
21
  const config = (0, _config.getSchemaConfig)(builder);
22
+ const adapter = (0, _adapter.drizzleAdapter)(config);
19
23
  const tableName = typeof refOrType === 'string' ? refOrType : refOrType.tableName;
20
- function resolve(list, args, ctx, parent) {
21
- const { select, cursorFields } = getQueryArgs(args, ctx);
24
+ /** The user's `query`, a promise when its callback is async, which the caller awaits. */ const baseQueryFor = (args, ctx)=>(0, _core.completeValue)(typeof query === 'function' ? query(args, ctx) : query, orEmpty);
25
+ // Built once per helper, so a synchronous `resolve` allocates nothing beyond the connection.
26
+ const resolveList = (baseQuery, list, args, ctx, parent)=>{
27
+ const { select, cursorFields } = getQueryArgs(args, ctx, baseQuery);
22
28
  const formatCursor = (0, _cursors.getCursorFormatter)(cursorFields, config);
23
29
  return (0, _cursors.wrapConnectionResult)(list, args, select.limit, formatCursor, resolveNode !== null && resolveNode !== void 0 ? resolveNode : (edge)=>edge, parent);
30
+ };
31
+ function resolve(list, args, ctx, parent) {
32
+ const baseQuery = baseQueryFor(args, ctx);
33
+ return (0, _core.isThenable)(baseQuery) ? baseQuery.then((resolved)=>resolveList(resolved, list, args, ctx, parent)) : resolveList(baseQuery, list, args, ctx, parent);
24
34
  }
25
- const getQueryArgs = (args, ctx)=>{
26
- var _ref, _ref1;
27
- const { limit, orderBy, where, ...fieldQuery } = (_ref = typeof query === 'function' ? query(args, ctx) : query) !== null && _ref !== void 0 ? _ref : {};
35
+ const getQueryArgs = (args, ctx, baseQuery)=>{
36
+ var _ref;
37
+ const { limit, orderBy, where, ...fieldQuery } = baseQuery;
28
38
  const table = config.relations[tableName];
29
39
  const { cursorFields, columns, ...connectionQuery } = (0, _cursors.drizzleCursorConnectionQuery)({
30
40
  ctx,
31
41
  maxSize,
32
42
  defaultSize: typeof defaultSize === 'function' ? defaultSize(args, ctx) : defaultSize,
33
43
  args,
34
- orderBy: (_ref1 = typeof orderBy === 'function' ? orderBy(table) : orderBy) !== null && _ref1 !== void 0 ? _ref1 : (0, _config.getSchemaConfig)(builder).getPrimaryKey(tableName),
44
+ orderBy: (_ref = typeof orderBy === 'function' ? orderBy(table) : orderBy) !== null && _ref !== void 0 ? _ref : (0, _config.getSchemaConfig)(builder).getPrimaryKey(tableName),
35
45
  extras: fieldQuery.extras,
36
46
  where,
37
47
  config,
@@ -50,16 +60,20 @@ function drizzleConnectionHelpers(builder, refOrType, { select, resolveNode, que
50
60
  cursorFields
51
61
  };
52
62
  };
53
- function getQuery(args, ctx, nestedSelectionOrInfo) {
54
- var _ref;
55
- var _builder_options_drizzle;
63
+ /**
64
+ * The connection's query, built from the helper's own `select` and `query` and the selection
65
+ * beneath the field. Synchronous unless `awaitSelections` says otherwise: an async `select` or
66
+ * `query`, or an async selection beneath the connection, throws rather than returning a promise
67
+ * the declared type denies.
68
+ */ function getQuery(args, ctx, nestedSelectionOrInfo, options) {
56
69
  const nestedSelection = typeof nestedSelectionOrInfo === 'function' ? nestedSelectionOrInfo : (select, path)=>(0, _mapquery.queryFromInfo)({
57
70
  info: nestedSelectionOrInfo,
58
71
  context: ctx,
59
72
  config,
60
- select,
73
+ select: select,
61
74
  path
62
75
  });
76
+ // Both callbacks start now; the query waits for whichever of them is async.
63
77
  const nestedSelect = select ? select((sel)=>nestedSelection(sel, [
64
78
  'edges',
65
79
  'node'
@@ -67,20 +81,39 @@ function drizzleConnectionHelpers(builder, refOrType, { select, resolveNode, que
67
81
  'edges',
68
82
  'node'
69
83
  ]);
70
- const queryArgs = getQueryArgs(args, ctx);
71
- const selectState = (0, _selections.createState)(config.relations[tableName], (_ref = (_builder_options_drizzle = builder.options.drizzle) === null || _builder_options_drizzle === void 0 ? void 0 : _builder_options_drizzle.skipDeferredFragments) !== null && _ref !== void 0 ? _ref : true);
72
- (0, _selections.mergeSelection)(config, selectState, queryArgs.select);
84
+ let baseQuery;
85
+ try {
86
+ baseQuery = baseQueryFor(args, ctx);
87
+ } catch (error) {
88
+ // The selection has already started. Preserve the query error while handling any
89
+ // later rejection from the selection that this invocation can no longer consume.
90
+ if ((0, _core.isThenable)(nestedSelect)) {
91
+ nestedSelect.then(()=>{}, ()=>{});
92
+ }
93
+ throw error;
94
+ }
95
+ const built = (0, _core.isThenable)(nestedSelect) || (0, _core.isThenable)(baseQuery) ? Promise.all([
96
+ nestedSelect,
97
+ baseQuery
98
+ ]).then(([nested, base])=>buildQuery(nested, base, args, ctx)) : buildQuery(nestedSelect, baseQuery, args, ctx);
99
+ return (0, _awaitselections.checkAwaitSelections)(built, options === null || options === void 0 ? void 0 : options.awaitSelections, 'getQuery', `the ${String(tableName)} connection`);
100
+ }
101
+ // Built once per helper, so a synchronous `getQuery` allocates nothing beyond the query.
102
+ function buildQuery(nestedSelect, baseQuery, args, ctx) {
103
+ const node = adapter.createNode(config.relations[tableName]);
104
+ adapter.mergeQuery(node, getQueryArgs(args, ctx, baseQuery).select);
73
105
  if (typeof nestedSelect === 'object' && nestedSelect) {
74
- (0, _selections.mergeSelection)(config, selectState, nestedSelect);
106
+ adapter.mergeQuery(node, nestedSelect);
75
107
  }
76
- const baseQuery = typeof query === 'function' ? query(args, ctx) : query !== null && query !== void 0 ? query : {};
77
- const queryResult = (0, _selections.selectionToQuery)(config, selectState);
78
108
  return (0, _selections.omitUndefinedKeys)({
79
109
  ...baseQuery,
80
- ...queryResult
110
+ ...adapter.toQuery(node)
81
111
  });
82
112
  }
83
113
  const getArgs = ()=>createArgs ? builder.args(createArgs) : {};
114
+ function orEmpty(baseQuery) {
115
+ return baseQuery !== null && baseQuery !== void 0 ? baseQuery : {};
116
+ }
84
117
  return {
85
118
  ref: typeof refOrType === 'string' ? (0, _refs.getRefFromModel)(refOrType, builder) : refOrType,
86
119
  resolve,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection-helpers.ts"],"names":["drizzleConnectionHelpers","builder","refOrType","select","resolveNode","query","args","createArgs","maxSize","options","drizzle","maxConnectionSize","defaultSize","defaultConnectionSize","config","getSchemaConfig","tableName","resolve","list","ctx","parent","cursorFields","getQueryArgs","formatCursor","getCursorFormatter","wrapConnectionResult","limit","edge","orderBy","where","fieldQuery","table","relations","columns","connectionQuery","drizzleCursorConnectionQuery","getPrimaryKey","extras","Math","abs","getQuery","nestedSelectionOrInfo","nestedSelection","path","queryFromInfo","info","context","nestedSelect","sel","queryArgs","selectState","createState","skipDeferredFragments","mergeSelection","baseQuery","queryResult","selectionToQuery","omitUndefinedKeys","getArgs","ref","getRefFromModel"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/connection-helpers.ts"],"names":["drizzleConnectionHelpers","builder","refOrType","select","resolveNode","query","args","createArgs","maxSize","options","drizzle","maxConnectionSize","defaultSize","defaultConnectionSize","config","getSchemaConfig","adapter","drizzleAdapter","tableName","baseQueryFor","ctx","completeValue","orEmpty","resolveList","baseQuery","list","parent","cursorFields","getQueryArgs","formatCursor","getCursorFormatter","wrapConnectionResult","limit","edge","resolve","isThenable","then","resolved","orderBy","where","fieldQuery","table","relations","columns","connectionQuery","drizzleCursorConnectionQuery","getPrimaryKey","extras","Math","abs","getQuery","nestedSelectionOrInfo","nestedSelection","path","queryFromInfo","info","context","nestedSelect","sel","error","built","Promise","all","nested","base","buildQuery","checkAwaitSelections","awaitSelections","String","node","createNode","mergeQuery","omitUndefinedKeys","toQuery","getArgs","ref","getRefFromModel"],"mappings":"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"}