@zenstackhq/runtime 2.16.0 → 3.0.0-alpha.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 (236) hide show
  1. package/LICENSE +1 -1
  2. package/dist/client.cjs +6094 -0
  3. package/dist/client.cjs.map +1 -0
  4. package/dist/client.d.cts +19 -0
  5. package/dist/client.d.ts +19 -0
  6. package/dist/client.js +6060 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/contract-DguafRNB.d.cts +1272 -0
  9. package/dist/contract-DguafRNB.d.ts +1272 -0
  10. package/dist/index.cjs +6088 -0
  11. package/dist/index.cjs.map +1 -0
  12. package/dist/index.d.cts +14 -0
  13. package/dist/index.d.ts +14 -0
  14. package/dist/index.js +6057 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/plugins/policy.cjs +2343 -0
  17. package/dist/plugins/policy.cjs.map +1 -0
  18. package/dist/plugins/policy.d.cts +24 -0
  19. package/dist/plugins/policy.d.ts +24 -0
  20. package/dist/plugins/policy.js +2307 -0
  21. package/dist/plugins/policy.js.map +1 -0
  22. package/dist/schema.cjs +110 -0
  23. package/dist/schema.cjs.map +1 -0
  24. package/dist/schema.d.cts +29 -0
  25. package/dist/schema.d.ts +29 -0
  26. package/dist/schema.js +85 -0
  27. package/dist/schema.js.map +1 -0
  28. package/dist/utils/pg-utils.cjs +39 -0
  29. package/dist/utils/pg-utils.cjs.map +1 -0
  30. package/dist/utils/pg-utils.d.cts +8 -0
  31. package/dist/utils/pg-utils.d.ts +8 -0
  32. package/dist/utils/pg-utils.js +16 -0
  33. package/dist/utils/pg-utils.js.map +1 -0
  34. package/{browser/index.js → dist/utils/sqlite-utils.cjs} +21 -37
  35. package/dist/utils/sqlite-utils.cjs.map +1 -0
  36. package/dist/utils/sqlite-utils.d.cts +8 -0
  37. package/dist/utils/sqlite-utils.d.ts +8 -0
  38. package/dist/utils/sqlite-utils.js +22 -0
  39. package/dist/utils/sqlite-utils.js.map +1 -0
  40. package/package.json +106 -117
  41. package/README.md +0 -5
  42. package/browser/index.d.mts +0 -13
  43. package/browser/index.d.ts +0 -13
  44. package/browser/index.js.map +0 -1
  45. package/browser/index.mjs +0 -33
  46. package/browser/index.mjs.map +0 -1
  47. package/constants.d.ts +0 -62
  48. package/constants.js +0 -76
  49. package/constants.js.map +0 -1
  50. package/cross/index.d.mts +0 -379
  51. package/cross/index.d.ts +0 -379
  52. package/cross/index.js +0 -923
  53. package/cross/index.js.map +0 -1
  54. package/cross/index.mjs +0 -881
  55. package/cross/index.mjs.map +0 -1
  56. package/edge.d.ts +0 -1
  57. package/edge.js +0 -18
  58. package/edge.js.map +0 -1
  59. package/encryption/index.d.ts +0 -25
  60. package/encryption/index.js +0 -74
  61. package/encryption/index.js.map +0 -1
  62. package/encryption/utils.d.ts +0 -9
  63. package/encryption/utils.js +0 -99
  64. package/encryption/utils.js.map +0 -1
  65. package/enhance-edge.d.ts +0 -1
  66. package/enhance-edge.js +0 -10
  67. package/enhance.d.ts +0 -1
  68. package/enhance.js +0 -10
  69. package/enhancements/edge/create-enhancement.d.ts +0 -42
  70. package/enhancements/edge/create-enhancement.js +0 -102
  71. package/enhancements/edge/create-enhancement.js.map +0 -1
  72. package/enhancements/edge/default-auth.d.ts +0 -8
  73. package/enhancements/edge/default-auth.js +0 -180
  74. package/enhancements/edge/default-auth.js.map +0 -1
  75. package/enhancements/edge/delegate.d.ts +0 -77
  76. package/enhancements/edge/delegate.js +0 -1293
  77. package/enhancements/edge/delegate.js.map +0 -1
  78. package/enhancements/edge/encryption.d.ts +0 -7
  79. package/enhancements/edge/encryption.js +0 -150
  80. package/enhancements/edge/encryption.js.map +0 -1
  81. package/enhancements/edge/index.d.ts +0 -4
  82. package/enhancements/edge/index.js +0 -21
  83. package/enhancements/edge/index.js.map +0 -1
  84. package/enhancements/edge/json-processor.d.ts +0 -7
  85. package/enhancements/edge/json-processor.js +0 -89
  86. package/enhancements/edge/json-processor.js.map +0 -1
  87. package/enhancements/edge/logger.d.ts +0 -29
  88. package/enhancements/edge/logger.js +0 -65
  89. package/enhancements/edge/logger.js.map +0 -1
  90. package/enhancements/edge/omit.d.ts +0 -7
  91. package/enhancements/edge/omit.js +0 -96
  92. package/enhancements/edge/omit.js.map +0 -1
  93. package/enhancements/edge/password.d.ts +0 -7
  94. package/enhancements/edge/password.js +0 -64
  95. package/enhancements/edge/password.js.map +0 -1
  96. package/enhancements/edge/policy/check-utils.d.ts +0 -5
  97. package/enhancements/edge/policy/check-utils.js +0 -20
  98. package/enhancements/edge/policy/check-utils.js.map +0 -1
  99. package/enhancements/edge/policy/handler.d.ts +0 -100
  100. package/enhancements/edge/policy/handler.js +0 -1440
  101. package/enhancements/edge/policy/handler.js.map +0 -1
  102. package/enhancements/edge/policy/index.d.ts +0 -19
  103. package/enhancements/edge/policy/index.js +0 -65
  104. package/enhancements/edge/policy/index.js.map +0 -1
  105. package/enhancements/edge/policy/policy-utils.d.ts +0 -181
  106. package/enhancements/edge/policy/policy-utils.js +0 -1356
  107. package/enhancements/edge/policy/policy-utils.js.map +0 -1
  108. package/enhancements/edge/promise.d.ts +0 -15
  109. package/enhancements/edge/promise.js +0 -99
  110. package/enhancements/edge/promise.js.map +0 -1
  111. package/enhancements/edge/proxy.d.ts +0 -120
  112. package/enhancements/edge/proxy.js +0 -287
  113. package/enhancements/edge/proxy.js.map +0 -1
  114. package/enhancements/edge/query-utils.d.ts +0 -53
  115. package/enhancements/edge/query-utils.js +0 -256
  116. package/enhancements/edge/query-utils.js.map +0 -1
  117. package/enhancements/edge/types.d.ts +0 -238
  118. package/enhancements/edge/types.js +0 -3
  119. package/enhancements/edge/types.js.map +0 -1
  120. package/enhancements/edge/utils.d.ts +0 -11
  121. package/enhancements/edge/utils.js +0 -49
  122. package/enhancements/edge/utils.js.map +0 -1
  123. package/enhancements/edge/where-visitor.d.ts +0 -32
  124. package/enhancements/edge/where-visitor.js +0 -86
  125. package/enhancements/edge/where-visitor.js.map +0 -1
  126. package/enhancements/node/create-enhancement.d.ts +0 -42
  127. package/enhancements/node/create-enhancement.js +0 -102
  128. package/enhancements/node/create-enhancement.js.map +0 -1
  129. package/enhancements/node/default-auth.d.ts +0 -8
  130. package/enhancements/node/default-auth.js +0 -180
  131. package/enhancements/node/default-auth.js.map +0 -1
  132. package/enhancements/node/delegate.d.ts +0 -77
  133. package/enhancements/node/delegate.js +0 -1293
  134. package/enhancements/node/delegate.js.map +0 -1
  135. package/enhancements/node/encryption.d.ts +0 -7
  136. package/enhancements/node/encryption.js +0 -150
  137. package/enhancements/node/encryption.js.map +0 -1
  138. package/enhancements/node/index.d.ts +0 -4
  139. package/enhancements/node/index.js +0 -21
  140. package/enhancements/node/index.js.map +0 -1
  141. package/enhancements/node/json-processor.d.ts +0 -7
  142. package/enhancements/node/json-processor.js +0 -89
  143. package/enhancements/node/json-processor.js.map +0 -1
  144. package/enhancements/node/logger.d.ts +0 -29
  145. package/enhancements/node/logger.js +0 -65
  146. package/enhancements/node/logger.js.map +0 -1
  147. package/enhancements/node/omit.d.ts +0 -7
  148. package/enhancements/node/omit.js +0 -96
  149. package/enhancements/node/omit.js.map +0 -1
  150. package/enhancements/node/password.d.ts +0 -7
  151. package/enhancements/node/password.js +0 -64
  152. package/enhancements/node/password.js.map +0 -1
  153. package/enhancements/node/policy/check-utils.d.ts +0 -5
  154. package/enhancements/node/policy/check-utils.js +0 -87
  155. package/enhancements/node/policy/check-utils.js.map +0 -1
  156. package/enhancements/node/policy/constraint-solver.d.ts +0 -27
  157. package/enhancements/node/policy/constraint-solver.js +0 -164
  158. package/enhancements/node/policy/constraint-solver.js.map +0 -1
  159. package/enhancements/node/policy/handler.d.ts +0 -100
  160. package/enhancements/node/policy/handler.js +0 -1440
  161. package/enhancements/node/policy/handler.js.map +0 -1
  162. package/enhancements/node/policy/index.d.ts +0 -19
  163. package/enhancements/node/policy/index.js +0 -65
  164. package/enhancements/node/policy/index.js.map +0 -1
  165. package/enhancements/node/policy/policy-utils.d.ts +0 -181
  166. package/enhancements/node/policy/policy-utils.js +0 -1356
  167. package/enhancements/node/policy/policy-utils.js.map +0 -1
  168. package/enhancements/node/promise.d.ts +0 -15
  169. package/enhancements/node/promise.js +0 -99
  170. package/enhancements/node/promise.js.map +0 -1
  171. package/enhancements/node/proxy.d.ts +0 -120
  172. package/enhancements/node/proxy.js +0 -287
  173. package/enhancements/node/proxy.js.map +0 -1
  174. package/enhancements/node/query-utils.d.ts +0 -53
  175. package/enhancements/node/query-utils.js +0 -256
  176. package/enhancements/node/query-utils.js.map +0 -1
  177. package/enhancements/node/types.d.ts +0 -238
  178. package/enhancements/node/types.js +0 -3
  179. package/enhancements/node/types.js.map +0 -1
  180. package/enhancements/node/utils.d.ts +0 -11
  181. package/enhancements/node/utils.js +0 -49
  182. package/enhancements/node/utils.js.map +0 -1
  183. package/enhancements/node/where-visitor.d.ts +0 -32
  184. package/enhancements/node/where-visitor.js +0 -86
  185. package/enhancements/node/where-visitor.js.map +0 -1
  186. package/error.d.ts +0 -11
  187. package/error.js +0 -22
  188. package/error.js.map +0 -1
  189. package/index.d.ts +0 -7
  190. package/index.js +0 -24
  191. package/index.js.map +0 -1
  192. package/local-helpers/index.d.ts +0 -6
  193. package/local-helpers/index.js +0 -23
  194. package/local-helpers/index.js.map +0 -1
  195. package/local-helpers/is-plain-object.d.ts +0 -1
  196. package/local-helpers/is-plain-object.js +0 -25
  197. package/local-helpers/is-plain-object.js.map +0 -1
  198. package/local-helpers/lower-case-first.d.ts +0 -1
  199. package/local-helpers/lower-case-first.js +0 -7
  200. package/local-helpers/lower-case-first.js.map +0 -1
  201. package/local-helpers/param-case.d.ts +0 -1
  202. package/local-helpers/param-case.js +0 -20
  203. package/local-helpers/param-case.js.map +0 -1
  204. package/local-helpers/sleep.d.ts +0 -1
  205. package/local-helpers/sleep.js +0 -9
  206. package/local-helpers/sleep.js.map +0 -1
  207. package/local-helpers/tiny-invariant.d.ts +0 -1
  208. package/local-helpers/tiny-invariant.js +0 -15
  209. package/local-helpers/tiny-invariant.js.map +0 -1
  210. package/local-helpers/upper-case-first.d.ts +0 -1
  211. package/local-helpers/upper-case-first.js +0 -7
  212. package/local-helpers/upper-case-first.js.map +0 -1
  213. package/model-meta.d.ts +0 -1
  214. package/model-meta.js +0 -10
  215. package/models.d.ts +0 -1
  216. package/models.js +0 -1
  217. package/types.d.ts +0 -200
  218. package/types.js +0 -4
  219. package/types.js.map +0 -1
  220. package/validation.d.ts +0 -24
  221. package/validation.js +0 -52
  222. package/validation.js.map +0 -1
  223. package/version.d.ts +0 -5
  224. package/version.js +0 -35
  225. package/version.js.map +0 -1
  226. package/zod/index.d.ts +0 -3
  227. package/zod/index.js +0 -5
  228. package/zod/input.d.ts +0 -1
  229. package/zod/input.js +0 -8
  230. package/zod/models.d.ts +0 -1
  231. package/zod/models.js +0 -8
  232. package/zod/objects.d.ts +0 -1
  233. package/zod/objects.js +0 -8
  234. package/zod-utils.d.ts +0 -12
  235. package/zod-utils.js +0 -97
  236. package/zod-utils.js.map +0 -1
package/cross/index.mjs DELETED
@@ -1,881 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __defProps = Object.defineProperties;
3
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
- var __spreadValues = (a, b) => {
9
- for (var prop in b || (b = {}))
10
- if (__hasOwnProp.call(b, prop))
11
- __defNormalProp(a, prop, b[prop]);
12
- if (__getOwnPropSymbols)
13
- for (var prop of __getOwnPropSymbols(b)) {
14
- if (__propIsEnum.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
16
- }
17
- return a;
18
- };
19
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- var __async = (__this, __arguments, generator) => {
21
- return new Promise((resolve, reject) => {
22
- var fulfilled = (value) => {
23
- try {
24
- step(generator.next(value));
25
- } catch (e) {
26
- reject(e);
27
- }
28
- };
29
- var rejected = (value) => {
30
- try {
31
- step(generator.throw(value));
32
- } catch (e) {
33
- reject(e);
34
- }
35
- };
36
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
37
- step((generator = generator.apply(__this, __arguments)).next());
38
- });
39
- };
40
-
41
- // src/local-helpers/is-plain-object.ts
42
- function isObject(o) {
43
- return Object.prototype.toString.call(o) === "[object Object]";
44
- }
45
- function isPlainObject(o) {
46
- if (isObject(o) === false) return false;
47
- const ctor = o.constructor;
48
- if (ctor === void 0) return true;
49
- const prot = ctor.prototype;
50
- if (isObject(prot) === false) return false;
51
- if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) {
52
- return false;
53
- }
54
- return true;
55
- }
56
-
57
- // src/local-helpers/lower-case-first.ts
58
- function lowerCaseFirst(input) {
59
- return input.charAt(0).toLowerCase() + input.slice(1);
60
- }
61
-
62
- // src/local-helpers/tiny-invariant.ts
63
- var isProduction = process.env.NODE_ENV === "production";
64
-
65
- // src/cross/clone.ts
66
- function clone(value) {
67
- if (Array.isArray(value)) {
68
- return value.map((v) => clone(v));
69
- }
70
- if (typeof value === "object") {
71
- if (!value || !isPlainObject(value)) {
72
- return value;
73
- }
74
- const result = {};
75
- for (const key of Object.keys(value)) {
76
- result[key] = clone(value[key]);
77
- }
78
- return result;
79
- }
80
- return value;
81
- }
82
-
83
- // src/cross/model-data-visitor.ts
84
- var ModelDataVisitor = class {
85
- constructor(modelMeta) {
86
- this.modelMeta = modelMeta;
87
- }
88
- /**
89
- * Visits the given model data.
90
- */
91
- visit(model, data, callback) {
92
- if (!data || typeof data !== "object") {
93
- return;
94
- }
95
- const scalarData = {};
96
- const subTasks = [];
97
- for (const [k, v] of Object.entries(data)) {
98
- const field = resolveField(this.modelMeta, model, k);
99
- if (field && field.isDataModel) {
100
- if (field.isArray && Array.isArray(v)) {
101
- subTasks.push(...v.map((item) => ({ model: field.type, data: item })));
102
- } else {
103
- subTasks.push({ model: field.type, data: v });
104
- }
105
- } else {
106
- scalarData[k] = v;
107
- }
108
- }
109
- callback(model, data, scalarData);
110
- subTasks.forEach(({ model: model2, data: data2 }) => this.visit(model2, data2, callback));
111
- }
112
- };
113
-
114
- // src/cross/model-meta.ts
115
- function resolveField(modelMeta, modelOrTypeDef, field, isTypeDef = false) {
116
- var _a, _b;
117
- const container = isTypeDef ? modelMeta.typeDefs : modelMeta.models;
118
- return (_b = (_a = container == null ? void 0 : container[lowerCaseFirst(modelOrTypeDef)]) == null ? void 0 : _a.fields) == null ? void 0 : _b[field];
119
- }
120
- function requireField(modelMeta, model, field, isTypeDef = false) {
121
- const f = resolveField(modelMeta, model, field, isTypeDef);
122
- if (!f) {
123
- throw new Error(`Field ${model}.${field} cannot be resolved`);
124
- }
125
- return f;
126
- }
127
- function getFields(modelMeta, model) {
128
- var _a;
129
- return (_a = modelMeta.models[lowerCaseFirst(model)]) == null ? void 0 : _a.fields;
130
- }
131
- function getUniqueConstraints(modelMeta, model) {
132
- var _a;
133
- return (_a = modelMeta.models[lowerCaseFirst(model)]) == null ? void 0 : _a.uniqueConstraints;
134
- }
135
-
136
- // src/cross/mutator.ts
137
- import { v4 as uuid } from "uuid";
138
- function applyMutation(queryModel, queryOp, queryData, mutationModel, mutationOp, mutationArgs, modelMeta, logging) {
139
- return __async(this, null, function* () {
140
- if (!queryData || typeof queryData !== "object" && !Array.isArray(queryData)) {
141
- return void 0;
142
- }
143
- if (!queryOp.startsWith("find")) {
144
- return void 0;
145
- }
146
- return yield doApplyMutation(queryModel, queryData, mutationModel, mutationOp, mutationArgs, modelMeta, logging);
147
- });
148
- }
149
- function doApplyMutation(queryModel, queryData, mutationModel, mutationOp, mutationArgs, modelMeta, logging) {
150
- return __async(this, null, function* () {
151
- let resultData = queryData;
152
- let updated = false;
153
- const visitor = new NestedWriteVisitor(modelMeta, {
154
- create: (model, args) => {
155
- if (model === queryModel && Array.isArray(resultData)) {
156
- const r = createMutate(queryModel, resultData, args, modelMeta, logging);
157
- if (r) {
158
- resultData = r;
159
- updated = true;
160
- }
161
- }
162
- },
163
- createMany: (model, args) => {
164
- if (model === queryModel && (args == null ? void 0 : args.data) && Array.isArray(resultData)) {
165
- for (const oneArg of enumerate(args.data)) {
166
- const r = createMutate(queryModel, resultData, oneArg, modelMeta, logging);
167
- if (r) {
168
- resultData = r;
169
- updated = true;
170
- }
171
- }
172
- }
173
- },
174
- update: (model, args) => {
175
- if (model === queryModel && !Array.isArray(resultData)) {
176
- const r = updateMutate(queryModel, resultData, model, args, modelMeta, logging);
177
- if (r) {
178
- resultData = r;
179
- updated = true;
180
- }
181
- }
182
- },
183
- upsert: (model, args) => {
184
- if (model === queryModel && (args == null ? void 0 : args.where) && (args == null ? void 0 : args.create) && (args == null ? void 0 : args.update)) {
185
- const r = upsertMutate(queryModel, resultData, model, args, modelMeta, logging);
186
- if (r) {
187
- resultData = r;
188
- updated = true;
189
- }
190
- }
191
- },
192
- delete: (model, args) => {
193
- if (model === queryModel) {
194
- const r = deleteMutate(queryModel, resultData, model, args, modelMeta, logging);
195
- if (r) {
196
- resultData = r;
197
- updated = true;
198
- }
199
- }
200
- }
201
- });
202
- yield visitor.visit(mutationModel, mutationOp, mutationArgs);
203
- const modelFields = getFields(modelMeta, queryModel);
204
- if (Array.isArray(resultData)) {
205
- let arrayCloned = false;
206
- for (let i = 0; i < resultData.length; i++) {
207
- const item = resultData[i];
208
- if (!item || typeof item !== "object" || item.$optimistic) {
209
- continue;
210
- }
211
- const r = yield doApplyMutation(
212
- queryModel,
213
- item,
214
- mutationModel,
215
- mutationOp,
216
- mutationArgs,
217
- modelMeta,
218
- logging
219
- );
220
- if (r && typeof r === "object") {
221
- if (!arrayCloned) {
222
- resultData = [...resultData];
223
- arrayCloned = true;
224
- }
225
- resultData[i] = r;
226
- updated = true;
227
- }
228
- }
229
- } else if (resultData !== null && typeof resultData === "object") {
230
- const currentData = __spreadValues({}, resultData);
231
- for (const [key, value] of Object.entries(currentData)) {
232
- const fieldInfo = modelFields[key];
233
- if (!(fieldInfo == null ? void 0 : fieldInfo.isDataModel)) {
234
- continue;
235
- }
236
- const r = yield doApplyMutation(
237
- fieldInfo.type,
238
- value,
239
- mutationModel,
240
- mutationOp,
241
- mutationArgs,
242
- modelMeta,
243
- logging
244
- );
245
- if (r && typeof r === "object") {
246
- resultData = __spreadProps(__spreadValues({}, resultData), { [key]: r });
247
- updated = true;
248
- }
249
- }
250
- }
251
- return updated ? resultData : void 0;
252
- });
253
- }
254
- function createMutate(queryModel, currentData, newData, modelMeta, logging) {
255
- if (!newData) {
256
- return void 0;
257
- }
258
- const modelFields = getFields(modelMeta, queryModel);
259
- if (!modelFields) {
260
- return void 0;
261
- }
262
- const insert = {};
263
- const newDataFields = Object.keys(newData);
264
- Object.entries(modelFields).forEach(([name, field]) => {
265
- var _a, _b, _c, _d;
266
- if (field.isDataModel && newData[name]) {
267
- assignForeignKeyFields(field, insert, newData[name]);
268
- return;
269
- }
270
- if (newDataFields.includes(name)) {
271
- insert[name] = clone(newData[name]);
272
- } else {
273
- const defaultAttr = (_a = field.attributes) == null ? void 0 : _a.find((attr) => attr.name === "@default");
274
- if (field.type === "DateTime") {
275
- if (defaultAttr || ((_b = field.attributes) == null ? void 0 : _b.some((attr) => attr.name === "@updatedAt"))) {
276
- insert[name] = /* @__PURE__ */ new Date();
277
- }
278
- } else if (((_d = (_c = defaultAttr == null ? void 0 : defaultAttr.args) == null ? void 0 : _c[0]) == null ? void 0 : _d.value) !== void 0) {
279
- insert[name] = defaultAttr.args[0].value;
280
- }
281
- }
282
- });
283
- const idFields = getIdFields(modelMeta, queryModel, false);
284
- idFields.forEach((f) => {
285
- if (insert[f.name] === void 0) {
286
- if (f.type === "Int" || f.type === "BigInt") {
287
- const currMax = Array.isArray(currentData) ? Math.max(
288
- ...[...currentData].map((item) => {
289
- const idv = parseInt(item[f.name]);
290
- return isNaN(idv) ? 0 : idv;
291
- })
292
- ) : 0;
293
- insert[f.name] = currMax + 1;
294
- } else {
295
- insert[f.name] = uuid();
296
- }
297
- }
298
- });
299
- insert.$optimistic = true;
300
- if (logging) {
301
- console.log(`Optimistic create for ${queryModel}:`, insert);
302
- }
303
- return [insert, ...Array.isArray(currentData) ? currentData : []];
304
- }
305
- function updateMutate(queryModel, currentData, mutateModel, mutateArgs, modelMeta, logging) {
306
- if (!currentData || typeof currentData !== "object") {
307
- return void 0;
308
- }
309
- if (!(mutateArgs == null ? void 0 : mutateArgs.where) || typeof mutateArgs.where !== "object") {
310
- return void 0;
311
- }
312
- if (!(mutateArgs == null ? void 0 : mutateArgs.data) || typeof mutateArgs.data !== "object") {
313
- return void 0;
314
- }
315
- if (!idFieldsMatch(mutateModel, currentData, mutateArgs.where, modelMeta)) {
316
- return void 0;
317
- }
318
- const modelFields = getFields(modelMeta, queryModel);
319
- if (!modelFields) {
320
- return void 0;
321
- }
322
- let updated = false;
323
- let resultData = currentData;
324
- for (const [key, value] of Object.entries(mutateArgs.data)) {
325
- const fieldInfo = modelFields[key];
326
- if (!fieldInfo) {
327
- continue;
328
- }
329
- if (fieldInfo.isDataModel && !(value == null ? void 0 : value.connect)) {
330
- continue;
331
- }
332
- if (!updated) {
333
- resultData = __spreadValues({}, currentData);
334
- }
335
- if (fieldInfo.isDataModel) {
336
- assignForeignKeyFields(fieldInfo, resultData, value);
337
- } else {
338
- resultData[key] = clone(value);
339
- }
340
- resultData.$optimistic = true;
341
- updated = true;
342
- if (logging) {
343
- console.log(`Optimistic update for ${queryModel}:`, resultData);
344
- }
345
- }
346
- return updated ? resultData : void 0;
347
- }
348
- function upsertMutate(queryModel, currentData, model, args, modelMeta, logging) {
349
- let updated = false;
350
- let resultData = currentData;
351
- if (Array.isArray(resultData)) {
352
- const foundIndex = resultData.findIndex((x) => idFieldsMatch(model, x, args.where, modelMeta));
353
- if (foundIndex >= 0) {
354
- const updateResult = updateMutate(
355
- queryModel,
356
- resultData[foundIndex],
357
- model,
358
- { where: args.where, data: args.update },
359
- modelMeta,
360
- logging
361
- );
362
- if (updateResult) {
363
- resultData = [...resultData.slice(0, foundIndex), updateResult, ...resultData.slice(foundIndex + 1)];
364
- updated = true;
365
- }
366
- } else {
367
- const createResult = createMutate(queryModel, resultData, args.create, modelMeta, logging);
368
- if (createResult) {
369
- resultData = createResult;
370
- updated = true;
371
- }
372
- }
373
- } else {
374
- const updateResult = updateMutate(
375
- queryModel,
376
- resultData,
377
- model,
378
- { where: args.where, data: args.update },
379
- modelMeta,
380
- logging
381
- );
382
- if (updateResult) {
383
- resultData = updateResult;
384
- updated = true;
385
- }
386
- }
387
- return updated ? resultData : void 0;
388
- }
389
- function deleteMutate(queryModel, currentData, mutateModel, mutateArgs, modelMeta, logging) {
390
- if (!currentData || !mutateArgs) {
391
- return void 0;
392
- }
393
- if (queryModel !== mutateModel) {
394
- return void 0;
395
- }
396
- let updated = false;
397
- let result = currentData;
398
- if (Array.isArray(currentData)) {
399
- for (const item of currentData) {
400
- if (idFieldsMatch(mutateModel, item, mutateArgs, modelMeta)) {
401
- result = result.filter((x) => x !== item);
402
- updated = true;
403
- if (logging) {
404
- console.log(`Optimistic delete for ${queryModel}:`, item);
405
- }
406
- }
407
- }
408
- } else {
409
- if (idFieldsMatch(mutateModel, currentData, mutateArgs, modelMeta)) {
410
- result = null;
411
- updated = true;
412
- if (logging) {
413
- console.log(`Optimistic delete for ${queryModel}:`, currentData);
414
- }
415
- }
416
- }
417
- return updated ? result : void 0;
418
- }
419
- function idFieldsMatch(model, x, y, modelMeta) {
420
- if (!x || !y || typeof x !== "object" || typeof y !== "object") {
421
- return false;
422
- }
423
- const idFields = getIdFields(modelMeta, model, false);
424
- if (idFields.length === 0) {
425
- return false;
426
- }
427
- return idFields.every((f) => x[f.name] === y[f.name]);
428
- }
429
- function assignForeignKeyFields(field, resultData, mutationData) {
430
- if (!(mutationData == null ? void 0 : mutationData.connect)) {
431
- return;
432
- }
433
- if (!field.foreignKeyMapping) {
434
- return;
435
- }
436
- for (const [idField, fkField] of Object.entries(field.foreignKeyMapping)) {
437
- if (idField in mutationData.connect) {
438
- resultData[fkField] = mutationData.connect[idField];
439
- }
440
- }
441
- }
442
-
443
- // src/cross/nested-read-visitor.ts
444
- var NestedReadVisitor = class {
445
- constructor(modelMeta, callback) {
446
- this.modelMeta = modelMeta;
447
- this.callback = callback;
448
- }
449
- doVisit(model, field, kind, args) {
450
- if (this.callback.field) {
451
- const r = this.callback.field(model, field, kind, args);
452
- if (r === false) {
453
- return;
454
- }
455
- }
456
- if (!args || typeof args !== "object") {
457
- return;
458
- }
459
- let selectInclude;
460
- let nextKind;
461
- if (args.select) {
462
- selectInclude = args.select;
463
- nextKind = "select";
464
- } else if (args.include) {
465
- selectInclude = args.include;
466
- nextKind = "include";
467
- }
468
- if (selectInclude && typeof selectInclude === "object") {
469
- for (const [k, v] of Object.entries(selectInclude)) {
470
- if (k === "_count" && typeof v === "object" && v) {
471
- this.doVisit(model, field, kind, v);
472
- } else {
473
- const field2 = resolveField(this.modelMeta, model, k);
474
- if (field2) {
475
- this.doVisit(field2.type, field2, nextKind, v);
476
- }
477
- }
478
- }
479
- }
480
- }
481
- visit(model, args) {
482
- this.doVisit(model, void 0, void 0, args);
483
- }
484
- };
485
-
486
- // src/cross/types.ts
487
- var PrismaWriteActions = [
488
- "create",
489
- "createMany",
490
- "createManyAndReturn",
491
- "connectOrCreate",
492
- "update",
493
- "updateMany",
494
- "updateManyAndReturn",
495
- "upsert",
496
- "connect",
497
- "disconnect",
498
- "set",
499
- "delete",
500
- "deleteMany"
501
- ];
502
-
503
- // src/cross/utils.ts
504
- function getModelFields(data) {
505
- return data ? Object.keys(data) : [];
506
- }
507
- function enumerate(x) {
508
- if (x === null || x === void 0) {
509
- return [];
510
- } else if (Array.isArray(x)) {
511
- return x;
512
- } else {
513
- return [x];
514
- }
515
- }
516
- function zip(x, y) {
517
- if (Array.isArray(x)) {
518
- if (!Array.isArray(y)) {
519
- throw new Error("x and y should be both array or both scalar");
520
- }
521
- if (x.length !== y.length) {
522
- throw new Error("x and y should have the same length");
523
- }
524
- return x.map((_, i) => [x[i], y[i]]);
525
- } else {
526
- if (Array.isArray(y)) {
527
- throw new Error("x and y should be both array or both scalar");
528
- }
529
- return [[x, y]];
530
- }
531
- }
532
- function getIdFields(modelMeta, model, throwIfNotFound = false) {
533
- var _a, _b;
534
- const uniqueConstraints = (_b = (_a = modelMeta.models[lowerCaseFirst(model)]) == null ? void 0 : _a.uniqueConstraints) != null ? _b : {};
535
- const entries = Object.values(uniqueConstraints);
536
- if (entries.length === 0) {
537
- if (throwIfNotFound) {
538
- throw new Error(`Model ${model} does not have any id field`);
539
- }
540
- return [];
541
- }
542
- return entries[0].fields.map((f) => requireField(modelMeta, model, f));
543
- }
544
- function getModelInfo(modelMeta, model, throwIfNotFound = false) {
545
- const info = modelMeta.models[lowerCaseFirst(model)];
546
- if (!info && throwIfNotFound) {
547
- throw new Error(`Unable to load info for ${model}`);
548
- }
549
- return info;
550
- }
551
- function getTypeDefInfo(modelMeta, typeDef, throwIfNotFound = false) {
552
- var _a;
553
- const info = (_a = modelMeta.typeDefs) == null ? void 0 : _a[lowerCaseFirst(typeDef)];
554
- if (!info && throwIfNotFound) {
555
- throw new Error(`Unable to load info for ${typeDef}`);
556
- }
557
- return info;
558
- }
559
- function isDelegateModel(modelMeta, model) {
560
- var _a, _b;
561
- return !!((_b = (_a = getModelInfo(modelMeta, model)) == null ? void 0 : _a.attributes) == null ? void 0 : _b.some((attr) => attr.name === "@@delegate"));
562
- }
563
-
564
- // src/cross/nested-write-visitor.ts
565
- var NestedWriteVisitor = class {
566
- constructor(modelMeta, callback) {
567
- this.modelMeta = modelMeta;
568
- this.callback = callback;
569
- }
570
- isPrismaWriteAction(value) {
571
- return PrismaWriteActions.includes(value);
572
- }
573
- /**
574
- * Start visiting
575
- *
576
- * @see NestedWriterVisitorCallback
577
- */
578
- visit(model, action, args) {
579
- return __async(this, null, function* () {
580
- if (!args) {
581
- return;
582
- }
583
- let topData = args;
584
- switch (action) {
585
- case "create":
586
- topData = topData.data;
587
- break;
588
- case "delete":
589
- case "deleteMany":
590
- topData = topData.where;
591
- break;
592
- }
593
- yield this.doVisit(model, action, topData, void 0, void 0, []);
594
- });
595
- }
596
- doVisit(model, action, data, parent, field, nestingPath) {
597
- return __async(this, null, function* () {
598
- if (!data) {
599
- return;
600
- }
601
- const toplevel = field == void 0;
602
- const context = { parent, field, nestingPath: [...nestingPath] };
603
- const pushNewContext = (field2, model2, where, unique = false) => {
604
- return __spreadProps(__spreadValues({}, context), { nestingPath: [...context.nestingPath, { field: field2, model: model2, where, unique }] });
605
- };
606
- switch (action) {
607
- case "create":
608
- for (const item of this.enumerateReverse(data)) {
609
- const newContext = pushNewContext(field, model, {});
610
- let callbackResult;
611
- if (this.callback.create) {
612
- callbackResult = yield this.callback.create(model, item, newContext);
613
- }
614
- if (callbackResult !== false) {
615
- const subPayload = typeof callbackResult === "object" ? callbackResult : item;
616
- yield this.visitSubPayload(model, action, subPayload, newContext.nestingPath);
617
- }
618
- }
619
- break;
620
- case "createMany":
621
- case "createManyAndReturn":
622
- if (data) {
623
- const newContext = pushNewContext(field, model, {});
624
- let callbackResult;
625
- if (this.callback.createMany) {
626
- callbackResult = yield this.callback.createMany(model, data, newContext);
627
- }
628
- if (callbackResult !== false) {
629
- const subPayload = typeof callbackResult === "object" ? callbackResult : data.data;
630
- yield this.visitSubPayload(model, action, subPayload, newContext.nestingPath);
631
- }
632
- }
633
- break;
634
- case "connectOrCreate":
635
- for (const item of this.enumerateReverse(data)) {
636
- const newContext = pushNewContext(field, model, item.where);
637
- let callbackResult;
638
- if (this.callback.connectOrCreate) {
639
- callbackResult = yield this.callback.connectOrCreate(model, item, newContext);
640
- }
641
- if (callbackResult !== false) {
642
- const subPayload = typeof callbackResult === "object" ? callbackResult : item.create;
643
- yield this.visitSubPayload(model, action, subPayload, newContext.nestingPath);
644
- }
645
- }
646
- break;
647
- case "connect":
648
- if (this.callback.connect) {
649
- for (const item of this.enumerateReverse(data)) {
650
- const newContext = pushNewContext(field, model, item, true);
651
- yield this.callback.connect(model, item, newContext);
652
- }
653
- }
654
- break;
655
- case "disconnect":
656
- if (this.callback.disconnect) {
657
- for (const item of this.enumerateReverse(data)) {
658
- const newContext = pushNewContext(field, model, item, typeof item === "object");
659
- yield this.callback.disconnect(model, item, newContext);
660
- }
661
- }
662
- break;
663
- case "set":
664
- if (this.callback.set) {
665
- for (const item of this.enumerateReverse(data)) {
666
- const newContext = pushNewContext(field, model, item, true);
667
- yield this.callback.set(model, item, newContext);
668
- }
669
- }
670
- break;
671
- case "update":
672
- for (const item of this.enumerateReverse(data)) {
673
- const newContext = pushNewContext(field, model, item.where);
674
- let callbackResult;
675
- if (this.callback.update) {
676
- callbackResult = yield this.callback.update(model, item, newContext);
677
- }
678
- if (callbackResult !== false) {
679
- const subPayload = typeof callbackResult === "object" ? callbackResult : typeof item.data === "object" ? item.data : item;
680
- yield this.visitSubPayload(model, action, subPayload, newContext.nestingPath);
681
- }
682
- }
683
- break;
684
- case "updateMany":
685
- case "updateManyAndReturn":
686
- for (const item of this.enumerateReverse(data)) {
687
- const newContext = pushNewContext(field, model, item.where);
688
- let callbackResult;
689
- if (this.callback.updateMany) {
690
- callbackResult = yield this.callback.updateMany(model, item, newContext);
691
- }
692
- if (callbackResult !== false) {
693
- const subPayload = typeof callbackResult === "object" ? callbackResult : item;
694
- yield this.visitSubPayload(model, action, subPayload, newContext.nestingPath);
695
- }
696
- }
697
- break;
698
- case "upsert": {
699
- for (const item of this.enumerateReverse(data)) {
700
- const newContext = pushNewContext(field, model, item.where);
701
- let callbackResult;
702
- if (this.callback.upsert) {
703
- callbackResult = yield this.callback.upsert(model, item, newContext);
704
- }
705
- if (callbackResult !== false) {
706
- if (typeof callbackResult === "object") {
707
- yield this.visitSubPayload(model, action, callbackResult, newContext.nestingPath);
708
- } else {
709
- yield this.visitSubPayload(model, action, item.create, newContext.nestingPath);
710
- yield this.visitSubPayload(model, action, item.update, newContext.nestingPath);
711
- }
712
- }
713
- }
714
- break;
715
- }
716
- case "delete": {
717
- if (this.callback.delete) {
718
- for (const item of this.enumerateReverse(data)) {
719
- const newContext = pushNewContext(field, model, toplevel ? item.where : item);
720
- yield this.callback.delete(model, item, newContext);
721
- }
722
- }
723
- break;
724
- }
725
- case "deleteMany":
726
- if (this.callback.deleteMany) {
727
- for (const item of this.enumerateReverse(data)) {
728
- const newContext = pushNewContext(field, model, toplevel ? item.where : item);
729
- yield this.callback.deleteMany(model, item, newContext);
730
- }
731
- }
732
- break;
733
- default: {
734
- throw new Error(`unhandled action type ${action}`);
735
- }
736
- }
737
- });
738
- }
739
- visitSubPayload(model, action, payload, nestingPath) {
740
- return __async(this, null, function* () {
741
- for (const item of enumerate(payload)) {
742
- for (const field of getModelFields(item)) {
743
- const fieldInfo = resolveField(this.modelMeta, model, field);
744
- if (!fieldInfo) {
745
- continue;
746
- }
747
- if (fieldInfo.isDataModel) {
748
- if (item[field]) {
749
- for (const [subAction, subData] of Object.entries(item[field])) {
750
- if (this.isPrismaWriteAction(subAction) && subData) {
751
- yield this.doVisit(fieldInfo.type, subAction, subData, item[field], fieldInfo, [
752
- ...nestingPath
753
- ]);
754
- }
755
- }
756
- }
757
- } else {
758
- if (this.callback.field) {
759
- yield this.callback.field(fieldInfo, action, item[field], {
760
- parent: item,
761
- nestingPath,
762
- field: fieldInfo
763
- });
764
- }
765
- }
766
- }
767
- }
768
- });
769
- }
770
- // enumerate a (possible) array in reverse order, so that the enumeration
771
- // callback can safely delete the current item
772
- *enumerateReverse(data) {
773
- if (Array.isArray(data)) {
774
- for (let i = data.length - 1; i >= 0; i--) {
775
- yield data[i];
776
- }
777
- } else {
778
- yield data;
779
- }
780
- }
781
- };
782
-
783
- // src/cross/query-analyzer.ts
784
- function getReadModels(model, modelMeta, args) {
785
- const result = /* @__PURE__ */ new Set();
786
- result.add(model);
787
- const visitor = new NestedReadVisitor(modelMeta, {
788
- field: (model2) => {
789
- result.add(model2);
790
- return true;
791
- }
792
- });
793
- visitor.visit(model, args);
794
- return [...result];
795
- }
796
- function getMutatedModels(model, operation, mutationArgs, modelMeta) {
797
- return __async(this, null, function* () {
798
- const result = /* @__PURE__ */ new Set();
799
- result.add(model);
800
- if (mutationArgs) {
801
- const addModel = (model2) => void result.add(model2);
802
- const addCascades = (model2) => {
803
- const cascades = /* @__PURE__ */ new Set();
804
- const visited = /* @__PURE__ */ new Set();
805
- collectDeleteCascades(model2, modelMeta, cascades, visited);
806
- cascades.forEach((m) => addModel(m));
807
- };
808
- const visitor = new NestedWriteVisitor(modelMeta, {
809
- create: addModel,
810
- createMany: addModel,
811
- connectOrCreate: addModel,
812
- connect: addModel,
813
- disconnect: addModel,
814
- set: addModel,
815
- update: addModel,
816
- updateMany: addModel,
817
- upsert: addModel,
818
- delete: (model2) => {
819
- addModel(model2);
820
- addCascades(model2);
821
- },
822
- deleteMany: (model2) => {
823
- addModel(model2);
824
- addCascades(model2);
825
- }
826
- });
827
- yield visitor.visit(model, operation, mutationArgs);
828
- }
829
- result.forEach((m) => {
830
- getBaseRecursively(m, modelMeta, result);
831
- });
832
- return [...result];
833
- });
834
- }
835
- function collectDeleteCascades(model, modelMeta, result, visited) {
836
- var _a;
837
- if (visited.has(model)) {
838
- return;
839
- }
840
- visited.add(model);
841
- const cascades = (_a = modelMeta.deleteCascade) == null ? void 0 : _a[lowerCaseFirst(model)];
842
- if (!cascades) {
843
- return;
844
- }
845
- cascades.forEach((m) => {
846
- result.add(m);
847
- collectDeleteCascades(m, modelMeta, result, visited);
848
- });
849
- }
850
- function getBaseRecursively(model, modelMeta, result) {
851
- var _a;
852
- const bases = (_a = getModelInfo(modelMeta, model)) == null ? void 0 : _a.baseTypes;
853
- if (bases) {
854
- bases.forEach((base) => {
855
- result.add(base);
856
- getBaseRecursively(base, modelMeta, result);
857
- });
858
- }
859
- }
860
- export {
861
- ModelDataVisitor,
862
- NestedReadVisitor,
863
- NestedWriteVisitor,
864
- PrismaWriteActions,
865
- applyMutation,
866
- clone,
867
- enumerate,
868
- getFields,
869
- getIdFields,
870
- getModelFields,
871
- getModelInfo,
872
- getMutatedModels,
873
- getReadModels,
874
- getTypeDefInfo,
875
- getUniqueConstraints,
876
- isDelegateModel,
877
- requireField,
878
- resolveField,
879
- zip
880
- };
881
- //# sourceMappingURL=index.mjs.map