@zenstackhq/runtime 2.16.0 → 3.0.0-alpha.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 (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
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/local-helpers/is-plain-object.ts","../../src/local-helpers/lower-case-first.ts","../../src/local-helpers/tiny-invariant.ts","../../src/cross/clone.ts","../../src/cross/model-data-visitor.ts","../../src/cross/model-meta.ts","../../src/cross/mutator.ts","../../src/cross/nested-read-visitor.ts","../../src/cross/types.ts","../../src/cross/utils.ts","../../src/cross/nested-write-visitor.ts","../../src/cross/query-analyzer.ts"],"sourcesContent":["function isObject(o: unknown) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function isPlainObject(o: unknown) {\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n const ctor = (o as { constructor: unknown }).constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n const prot = (ctor as { prototype: unknown }).prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (Object.prototype.hasOwnProperty.call(prot, 'isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n","export function lowerCaseFirst(input: string) {\n return input.charAt(0).toLowerCase() + input.slice(1);\n}\n","const isProduction = process.env.NODE_ENV === 'production';\nconst prefix = 'Invariant failed';\n\nexport function invariant(\n condition: unknown,\n message?: string,\n): asserts condition {\n if (condition) {\n return;\n }\n\n if (isProduction) {\n throw new Error(prefix);\n }\n\n throw new Error(message ? `${prefix}: ${message}` : prefix);\n}\n","import { isPlainObject } from '../local-helpers';\n\n/**\n * Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.\n */\nexport function clone<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((v) => clone(v)) as T;\n }\n\n if (typeof value === 'object') {\n if (!value || !isPlainObject(value)) {\n return value;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result: any = {};\n for (const key of Object.keys(value)) {\n result[key] = clone(value[key as keyof T]);\n }\n return result;\n }\n\n return value;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { resolveField, type ModelMeta } from '.';\n\n/**\n * Callback for @see ModelDataVisitor.\n */\nexport type ModelDataVisitorCallback = (model: string, data: any, scalarData: any) => void;\n\n/**\n * Visitor that traverses data returned by a Prisma query.\n */\nexport class ModelDataVisitor {\n constructor(private modelMeta: ModelMeta) {}\n\n /**\n * Visits the given model data.\n */\n visit(model: string, data: any, callback: ModelDataVisitorCallback) {\n if (!data || typeof data !== 'object') {\n return;\n }\n\n const scalarData: Record<string, unknown> = {};\n const subTasks: Array<{ model: string; data: any }> = [];\n\n for (const [k, v] of Object.entries(data)) {\n const field = resolveField(this.modelMeta, model, k);\n if (field && field.isDataModel) {\n if (field.isArray && Array.isArray(v)) {\n subTasks.push(...v.map((item) => ({ model: field.type, data: item })));\n } else {\n subTasks.push({ model: field.type, data: v });\n }\n } else {\n scalarData[k] = v;\n }\n }\n\n callback(model, data, scalarData);\n subTasks.forEach(({ model, data }) => this.visit(model, data, callback));\n }\n}\n","import { lowerCaseFirst } from '../local-helpers';\n\n/**\n * Runtime information of a data model or field attribute\n */\nexport type RuntimeAttribute = {\n /**\n * Attribute name\n */\n name: string;\n\n /**\n * Attribute arguments\n */\n args: Array<{ name?: string; value: unknown }>;\n};\n\n/**\n * Function for computing default value for a field\n */\nexport type FieldDefaultValueProvider = (userContext: unknown) => unknown;\n\n/**\n * Action to take when the related model is deleted or updated\n */\nexport type RelationAction = 'Cascade' | 'Restrict' | 'NoAction' | 'SetNull' | 'SetDefault';\n\n/**\n * Runtime information of a data model field\n */\nexport type FieldInfo = {\n /**\n * Field name\n */\n name: string;\n\n /**\n * Field type name\n */\n type: string;\n\n /**\n * If the field is an ID field or part of a multi-field ID\n */\n isId?: boolean;\n\n /**\n * If the field type is a data model (or an optional/array of data model)\n */\n isDataModel?: boolean;\n\n /**\n * If the field type is a type def (or an optional/array of type def)\n */\n isTypeDef?: boolean;\n\n /**\n * If the field is an array\n */\n isArray?: boolean;\n\n /**\n * If the field is optional\n */\n isOptional?: boolean;\n\n /**\n * Attributes on the field\n */\n attributes?: RuntimeAttribute[];\n\n /**\n * If the field is a relation field, the field name of the reverse side of the relation\n */\n backLink?: string;\n\n /**\n * If the field is the owner side of a relation\n */\n isRelationOwner?: boolean;\n\n /**\n * Action to take when the related model is deleted.\n */\n onDeleteAction?: RelationAction;\n\n /**\n * Action to take when the related model is updated.\n */\n onUpdateAction?: RelationAction;\n\n /**\n * If the field is a foreign key field\n */\n isForeignKey?: boolean;\n\n /**\n * If the field is a foreign key field, the field name of the corresponding relation field.\n * Only available on foreign key fields.\n */\n relationField?: string;\n\n /**\n * Mapping from relation's pk to fk. Only available on relation fields.\n */\n foreignKeyMapping?: Record<string, string>;\n\n /**\n * Model from which the field is inherited\n */\n inheritedFrom?: string;\n\n /**\n * A function that provides a default value for the field\n */\n defaultValueProvider?: FieldDefaultValueProvider;\n\n /**\n * If the field is an auto-increment field\n */\n isAutoIncrement?: boolean;\n};\n\n/**\n * Metadata for a model-level unique constraint\n * e.g.: @@unique([a, b])\n */\nexport type UniqueConstraint = { name: string; fields: string[] };\n\n/**\n * Metadata for a data model\n */\nexport type ModelInfo = {\n /**\n * Model name\n */\n name: string;\n\n /**\n * Base types (not including abstract base models).\n */\n baseTypes?: string[];\n\n /**\n * Fields\n */\n fields: Record<string, FieldInfo>;\n\n /**\n * Unique constraints\n */\n uniqueConstraints?: Record<string, UniqueConstraint>;\n\n /**\n * Attributes on the model\n */\n attributes?: RuntimeAttribute[];\n\n /**\n * Discriminator field name\n */\n discriminator?: string;\n};\n\n/**\n * Metadata for a type def\n */\nexport type TypeDefInfo = {\n /**\n * TypeDef name\n */\n name: string;\n\n /**\n * Fields\n */\n fields: Record<string, FieldInfo>;\n};\n\n/**\n * ZModel data model metadata\n */\nexport type ModelMeta = {\n /**\n * Data models\n */\n models: Record<string, ModelInfo>;\n\n /**\n * Type defs\n */\n typeDefs?: Record<string, TypeDefInfo>;\n\n /**\n * Mapping from model name to models that will be deleted because of it due to cascade delete\n */\n deleteCascade?: Record<string, string[]>;\n\n /**\n * Name of model that backs the `auth()` function\n */\n authModel?: string;\n\n /**\n * Optional map from full names to shortened names, used for extra fields/relations generated by ZenStack\n */\n shortNameMap?: Record<string, string>;\n};\n\n/**\n * Resolves a model field to its metadata. Returns undefined if not found.\n */\nexport function resolveField(\n modelMeta: ModelMeta,\n modelOrTypeDef: string,\n field: string,\n isTypeDef = false\n): FieldInfo | undefined {\n const container = isTypeDef ? modelMeta.typeDefs : modelMeta.models;\n return container?.[lowerCaseFirst(modelOrTypeDef)]?.fields?.[field];\n}\n\n/**\n * Resolves a model field to its metadata. Throws an error if not found.\n */\nexport function requireField(modelMeta: ModelMeta, model: string, field: string, isTypeDef = false) {\n const f = resolveField(modelMeta, model, field, isTypeDef);\n if (!f) {\n throw new Error(`Field ${model}.${field} cannot be resolved`);\n }\n return f;\n}\n\n/**\n * Gets all fields of a model.\n */\nexport function getFields(modelMeta: ModelMeta, model: string) {\n return modelMeta.models[lowerCaseFirst(model)]?.fields;\n}\n\n/**\n * Gets unique constraints of a model.\n */\nexport function getUniqueConstraints(modelMeta: ModelMeta, model: string) {\n return modelMeta.models[lowerCaseFirst(model)]?.uniqueConstraints;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { v4 as uuid } from 'uuid';\nimport {\n FieldInfo,\n NestedWriteVisitor,\n enumerate,\n getFields,\n getIdFields,\n type ModelMeta,\n type PrismaWriteActionType,\n} from '.';\nimport { clone } from './clone';\n\n/**\n * Tries to apply a mutation to a query result.\n *\n * @param queryModel the model of the query\n * @param queryOp the operation of the query\n * @param queryData the result data of the query\n * @param mutationModel the model of the mutation\n * @param mutationOp the operation of the mutation\n * @param mutationArgs the arguments of the mutation\n * @param modelMeta the model metadata\n * @param logging whether to log the mutation application\n * @returns the updated query data if the mutation is applicable, otherwise undefined\n */\nexport async function applyMutation(\n queryModel: string,\n queryOp: string,\n queryData: any,\n mutationModel: string,\n mutationOp: PrismaWriteActionType,\n mutationArgs: any,\n modelMeta: ModelMeta,\n logging: boolean\n) {\n if (!queryData || (typeof queryData !== 'object' && !Array.isArray(queryData))) {\n return undefined;\n }\n\n if (!queryOp.startsWith('find')) {\n // only findXXX results are applicable\n return undefined;\n }\n\n return await doApplyMutation(queryModel, queryData, mutationModel, mutationOp, mutationArgs, modelMeta, logging);\n}\n\nasync function doApplyMutation(\n queryModel: string,\n queryData: any,\n mutationModel: string,\n mutationOp: PrismaWriteActionType,\n mutationArgs: any,\n modelMeta: ModelMeta,\n logging: boolean\n) {\n let resultData = queryData;\n let updated = false;\n\n const visitor = new NestedWriteVisitor(modelMeta, {\n create: (model, args) => {\n if (\n model === queryModel &&\n Array.isArray(resultData) // \"create\" mutation is only relevant for arrays\n ) {\n const r = createMutate(queryModel, resultData, args, modelMeta, logging);\n if (r) {\n resultData = r;\n updated = true;\n }\n }\n },\n\n createMany: (model, args) => {\n if (\n model === queryModel &&\n args?.data &&\n Array.isArray(resultData) // \"createMany\" mutation is only relevant for arrays\n ) {\n for (const oneArg of enumerate(args.data)) {\n const r = createMutate(queryModel, resultData, oneArg, modelMeta, logging);\n if (r) {\n resultData = r;\n updated = true;\n }\n }\n }\n },\n\n update: (model, args) => {\n if (\n model === queryModel &&\n !Array.isArray(resultData) // array elements will be handled with recursion\n ) {\n const r = updateMutate(queryModel, resultData, model, args, modelMeta, logging);\n if (r) {\n resultData = r;\n updated = true;\n }\n }\n },\n\n upsert: (model, args) => {\n if (model === queryModel && args?.where && args?.create && args?.update) {\n const r = upsertMutate(queryModel, resultData, model, args, modelMeta, logging);\n if (r) {\n resultData = r;\n updated = true;\n }\n }\n },\n\n delete: (model, args) => {\n if (model === queryModel) {\n const r = deleteMutate(queryModel, resultData, model, args, modelMeta, logging);\n if (r) {\n resultData = r;\n updated = true;\n }\n }\n },\n });\n\n await visitor.visit(mutationModel, mutationOp, mutationArgs);\n\n const modelFields = getFields(modelMeta, queryModel);\n\n if (Array.isArray(resultData)) {\n // try to apply mutation to each item in the array, replicate the entire\n // array if any item is updated\n\n let arrayCloned = false;\n for (let i = 0; i < resultData.length; i++) {\n const item = resultData[i];\n if (\n !item ||\n typeof item !== 'object' ||\n item.$optimistic // skip items already optimistically updated\n ) {\n continue;\n }\n\n const r = await doApplyMutation(\n queryModel,\n item,\n mutationModel,\n mutationOp,\n mutationArgs,\n modelMeta,\n logging\n );\n\n if (r && typeof r === 'object') {\n if (!arrayCloned) {\n resultData = [...resultData];\n arrayCloned = true;\n }\n resultData[i] = r;\n updated = true;\n }\n }\n } else if (resultData !== null && typeof resultData === 'object') {\n // Clone resultData to prevent mutations affecting the loop\n const currentData = { ...resultData };\n\n // iterate over each field and apply mutation to nested data models\n for (const [key, value] of Object.entries(currentData)) {\n const fieldInfo = modelFields[key];\n if (!fieldInfo?.isDataModel) {\n continue;\n }\n\n const r = await doApplyMutation(\n fieldInfo.type,\n value,\n mutationModel,\n mutationOp,\n mutationArgs,\n modelMeta,\n logging\n );\n\n if (r && typeof r === 'object') {\n resultData = { ...resultData, [key]: r };\n updated = true;\n }\n }\n }\n\n return updated ? resultData : undefined;\n}\n\nfunction createMutate(queryModel: string, currentData: any, newData: any, modelMeta: ModelMeta, logging: boolean) {\n if (!newData) {\n return undefined;\n }\n\n const modelFields = getFields(modelMeta, queryModel);\n if (!modelFields) {\n return undefined;\n }\n\n const insert: any = {};\n const newDataFields = Object.keys(newData);\n\n Object.entries(modelFields).forEach(([name, field]) => {\n if (field.isDataModel && newData[name]) {\n // deal with \"connect\"\n assignForeignKeyFields(field, insert, newData[name]);\n return;\n }\n\n if (newDataFields.includes(name)) {\n insert[name] = clone(newData[name]);\n } else {\n const defaultAttr = field.attributes?.find((attr) => attr.name === '@default');\n if (field.type === 'DateTime') {\n // default value for DateTime field\n if (defaultAttr || field.attributes?.some((attr) => attr.name === '@updatedAt')) {\n insert[name] = new Date();\n }\n } else if (defaultAttr?.args?.[0]?.value !== undefined) {\n // other default value\n insert[name] = defaultAttr.args[0].value;\n }\n }\n });\n\n // add temp id value\n const idFields = getIdFields(modelMeta, queryModel, false);\n idFields.forEach((f) => {\n if (insert[f.name] === undefined) {\n if (f.type === 'Int' || f.type === 'BigInt') {\n const currMax = Array.isArray(currentData)\n ? Math.max(\n ...[...currentData].map((item) => {\n const idv = parseInt(item[f.name]);\n return isNaN(idv) ? 0 : idv;\n })\n )\n : 0;\n insert[f.name] = currMax + 1;\n } else {\n insert[f.name] = uuid();\n }\n }\n });\n\n insert.$optimistic = true;\n\n if (logging) {\n console.log(`Optimistic create for ${queryModel}:`, insert);\n }\n return [insert, ...(Array.isArray(currentData) ? currentData : [])];\n}\n\nfunction updateMutate(\n queryModel: string,\n currentData: any,\n mutateModel: string,\n mutateArgs: any,\n modelMeta: ModelMeta,\n logging: boolean\n) {\n if (!currentData || typeof currentData !== 'object') {\n return undefined;\n }\n\n if (!mutateArgs?.where || typeof mutateArgs.where !== 'object') {\n return undefined;\n }\n\n if (!mutateArgs?.data || typeof mutateArgs.data !== 'object') {\n return undefined;\n }\n\n if (!idFieldsMatch(mutateModel, currentData, mutateArgs.where, modelMeta)) {\n return undefined;\n }\n\n const modelFields = getFields(modelMeta, queryModel);\n if (!modelFields) {\n return undefined;\n }\n\n let updated = false;\n let resultData = currentData;\n\n for (const [key, value] of Object.entries<any>(mutateArgs.data)) {\n const fieldInfo = modelFields[key];\n if (!fieldInfo) {\n continue;\n }\n\n if (fieldInfo.isDataModel && !value?.connect) {\n // relation field but without \"connect\"\n continue;\n }\n\n if (!updated) {\n // clone\n resultData = { ...currentData };\n }\n\n if (fieldInfo.isDataModel) {\n // deal with \"connect\"\n assignForeignKeyFields(fieldInfo, resultData, value);\n } else {\n resultData[key] = clone(value);\n }\n resultData.$optimistic = true;\n updated = true;\n\n if (logging) {\n console.log(`Optimistic update for ${queryModel}:`, resultData);\n }\n }\n\n return updated ? resultData : undefined;\n}\n\nfunction upsertMutate(\n queryModel: string,\n currentData: any,\n model: string,\n args: { where: object; create: any; update: any },\n modelMeta: ModelMeta,\n logging: boolean\n) {\n let updated = false;\n let resultData = currentData;\n\n if (Array.isArray(resultData)) {\n // check if we should create or update\n const foundIndex = resultData.findIndex((x) => idFieldsMatch(model, x, args.where, modelMeta));\n if (foundIndex >= 0) {\n const updateResult = updateMutate(\n queryModel,\n resultData[foundIndex],\n model,\n { where: args.where, data: args.update },\n modelMeta,\n logging\n );\n if (updateResult) {\n // replace the found item with updated item\n resultData = [...resultData.slice(0, foundIndex), updateResult, ...resultData.slice(foundIndex + 1)];\n updated = true;\n }\n } else {\n const createResult = createMutate(queryModel, resultData, args.create, modelMeta, logging);\n if (createResult) {\n resultData = createResult;\n updated = true;\n }\n }\n } else {\n // try update only\n const updateResult = updateMutate(\n queryModel,\n resultData,\n model,\n { where: args.where, data: args.update },\n modelMeta,\n logging\n );\n if (updateResult) {\n resultData = updateResult;\n updated = true;\n }\n }\n\n return updated ? resultData : undefined;\n}\n\nfunction deleteMutate(\n queryModel: string,\n currentData: any,\n mutateModel: string,\n mutateArgs: any,\n modelMeta: ModelMeta,\n logging: boolean\n) {\n // TODO: handle mutation of nested reads?\n\n if (!currentData || !mutateArgs) {\n return undefined;\n }\n\n if (queryModel !== mutateModel) {\n return undefined;\n }\n\n let updated = false;\n let result = currentData;\n\n if (Array.isArray(currentData)) {\n for (const item of currentData) {\n if (idFieldsMatch(mutateModel, item, mutateArgs, modelMeta)) {\n result = (result as unknown[]).filter((x) => x !== item);\n updated = true;\n if (logging) {\n console.log(`Optimistic delete for ${queryModel}:`, item);\n }\n }\n }\n } else {\n if (idFieldsMatch(mutateModel, currentData, mutateArgs, modelMeta)) {\n result = null;\n updated = true;\n if (logging) {\n console.log(`Optimistic delete for ${queryModel}:`, currentData);\n }\n }\n }\n\n return updated ? result : undefined;\n}\n\nfunction idFieldsMatch(model: string, x: any, y: any, modelMeta: ModelMeta) {\n if (!x || !y || typeof x !== 'object' || typeof y !== 'object') {\n return false;\n }\n const idFields = getIdFields(modelMeta, model, false);\n if (idFields.length === 0) {\n return false;\n }\n return idFields.every((f) => x[f.name] === y[f.name]);\n}\n\nfunction assignForeignKeyFields(field: FieldInfo, resultData: any, mutationData: any) {\n // convert \"connect\" like `{ connect: { id: '...' } }` to foreign key fields\n // assignment: `{ userId: '...' }`\n if (!mutationData?.connect) {\n return;\n }\n\n if (!field.foreignKeyMapping) {\n return;\n }\n\n for (const [idField, fkField] of Object.entries(field.foreignKeyMapping)) {\n if (idField in mutationData.connect) {\n resultData[fkField] = mutationData.connect[idField];\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { resolveField, type FieldInfo, type ModelMeta } from './model-meta';\n\nexport type NestedReadVisitorCallback = {\n field?: (\n model: string,\n field: FieldInfo | undefined,\n kind: 'include' | 'select' | undefined,\n args: unknown\n ) => void | boolean;\n};\n\n/**\n * Visitor for nested read payload.\n */\nexport class NestedReadVisitor {\n constructor(private readonly modelMeta: ModelMeta, private readonly callback: NestedReadVisitorCallback) {}\n\n doVisit(model: string, field: FieldInfo | undefined, kind: 'include' | 'select' | undefined, args: unknown) {\n if (this.callback.field) {\n const r = this.callback.field(model, field, kind, args);\n if (r === false) {\n return;\n }\n }\n\n if (!args || typeof args !== 'object') {\n return;\n }\n\n let selectInclude: any;\n let nextKind: 'select' | 'include' | undefined;\n if ((args as any).select) {\n selectInclude = (args as any).select;\n nextKind = 'select';\n } else if ((args as any).include) {\n selectInclude = (args as any).include;\n nextKind = 'include';\n }\n\n if (selectInclude && typeof selectInclude === 'object') {\n for (const [k, v] of Object.entries(selectInclude)) {\n if (k === '_count' && typeof v === 'object' && v) {\n // recurse into { _count: { ... } }\n this.doVisit(model, field, kind, v);\n } else {\n const field = resolveField(this.modelMeta, model, k);\n if (field) {\n this.doVisit(field.type, field, nextKind, v);\n }\n }\n }\n }\n }\n\n visit(model: string, args: unknown) {\n this.doVisit(model, undefined, undefined, args);\n }\n}\n","/**\n * Prisma write operation kinds\n */\nexport const PrismaWriteActions = [\n 'create',\n 'createMany',\n 'createManyAndReturn',\n 'connectOrCreate',\n 'update',\n 'updateMany',\n 'updateManyAndReturn',\n 'upsert',\n 'connect',\n 'disconnect',\n 'set',\n 'delete',\n 'deleteMany',\n] as const;\n\n/**\n * Prisma write operation kinds\n */\nexport type PrismaWriteActionType = (typeof PrismaWriteActions)[number];\n\n/**\n * Maybe promise\n */\nexport type MaybePromise<T> = T | Promise<T> | PromiseLike<T>;\n","import { lowerCaseFirst } from '../local-helpers';\nimport { requireField, type ModelInfo, type ModelMeta, type TypeDefInfo } from '.';\n\n/**\n * Gets field names in a data model entity, filtering out internal fields.\n */\nexport function getModelFields(data: object) {\n return data ? Object.keys(data) : [];\n}\n\n/**\n * Array or scalar\n */\nexport type Enumerable<T> = T | Array<T>;\n\n/**\n * Uniformly enumerates an array or scalar.\n */\nexport function enumerate<T>(x: Enumerable<T>) {\n if (x === null || x === undefined) {\n return [];\n } else if (Array.isArray(x)) {\n return x;\n } else {\n return [x];\n }\n}\n\n/**\n * Zip two arrays or scalars.\n */\nexport function zip<T1, T2>(x: Enumerable<T1>, y: Enumerable<T2>): Array<[T1, T2]> {\n if (Array.isArray(x)) {\n if (!Array.isArray(y)) {\n throw new Error('x and y should be both array or both scalar');\n }\n if (x.length !== y.length) {\n throw new Error('x and y should have the same length');\n }\n return x.map((_, i) => [x[i], y[i]] as [T1, T2]);\n } else {\n if (Array.isArray(y)) {\n throw new Error('x and y should be both array or both scalar');\n }\n return [[x, y]];\n }\n}\n\n/**\n * Gets ID fields of a model.\n */\nexport function getIdFields(modelMeta: ModelMeta, model: string, throwIfNotFound = false) {\n const uniqueConstraints = modelMeta.models[lowerCaseFirst(model)]?.uniqueConstraints ?? {};\n\n const entries = Object.values(uniqueConstraints);\n if (entries.length === 0) {\n if (throwIfNotFound) {\n throw new Error(`Model ${model} does not have any id field`);\n }\n return [];\n }\n\n return entries[0].fields.map((f) => requireField(modelMeta, model, f));\n}\n\n/**\n * Gets info for a model.\n */\nexport function getModelInfo<Throw extends boolean = false>(\n modelMeta: ModelMeta,\n model: string,\n throwIfNotFound: Throw = false as Throw\n): Throw extends true ? ModelInfo : ModelInfo | undefined {\n const info = modelMeta.models[lowerCaseFirst(model)];\n if (!info && throwIfNotFound) {\n throw new Error(`Unable to load info for ${model}`);\n }\n return info;\n}\n\n/**\n * Gets info for a type def.\n */\nexport function getTypeDefInfo<Throw extends boolean = false>(\n modelMeta: ModelMeta,\n typeDef: string,\n throwIfNotFound: Throw = false as Throw\n): Throw extends true ? TypeDefInfo : TypeDefInfo | undefined {\n const info = modelMeta.typeDefs?.[lowerCaseFirst(typeDef)];\n if (!info && throwIfNotFound) {\n throw new Error(`Unable to load info for ${typeDef}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return info as any;\n}\n\n/**\n * Checks if a model is a delegate model.\n */\nexport function isDelegateModel(modelMeta: ModelMeta, model: string) {\n return !!getModelInfo(modelMeta, model)?.attributes?.some((attr) => attr.name === '@@delegate');\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { FieldInfo, ModelMeta } from './model-meta';\nimport { resolveField } from './model-meta';\nimport { MaybePromise, PrismaWriteActionType, PrismaWriteActions } from './types';\nimport { enumerate, getModelFields } from './utils';\n\ntype NestingPathItem = { field?: FieldInfo; model: string; where: any; unique: boolean };\n\n/**\n * Context for visiting\n */\nexport type NestedWriteVisitorContext = {\n /**\n * Parent data, can be used to replace fields\n */\n parent: any;\n\n /**\n * Current field, undefined if toplevel\n */\n field?: FieldInfo;\n\n /**\n * A top-down path of all nested update conditions and corresponding field till now\n */\n nestingPath: NestingPathItem[];\n};\n\n/**\n * NestedWriteVisitor's callback actions. A call back function should return true or void to indicate\n * that the visitor should continue traversing its children, or false to stop. It can also return an object\n * to let the visitor traverse it instead of its original children.\n */\nexport type NestedWriterVisitorCallback = {\n create?: (model: string, data: any, context: NestedWriteVisitorContext) => MaybePromise<boolean | object | void>;\n\n createMany?: (\n model: string,\n args: { data: any; skipDuplicates?: boolean },\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n connectOrCreate?: (\n model: string,\n args: { where: object; create: any },\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n connect?: (\n model: string,\n args: object,\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n disconnect?: (\n model: string,\n args: object,\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n set?: (model: string, args: object, context: NestedWriteVisitorContext) => MaybePromise<boolean | object | void>;\n\n update?: (model: string, args: object, context: NestedWriteVisitorContext) => MaybePromise<boolean | object | void>;\n\n updateMany?: (\n model: string,\n args: { where?: object; data: any },\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n upsert?: (\n model: string,\n args: { where: object; create: any; update: any },\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n delete?: (\n model: string,\n args: object | boolean,\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n deleteMany?: (\n model: string,\n args: any | object,\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n field?: (\n field: FieldInfo,\n action: PrismaWriteActionType,\n data: any,\n context: NestedWriteVisitorContext\n ) => MaybePromise<void>;\n};\n\n/**\n * Recursive visitor for nested write (create/update) payload.\n */\nexport class NestedWriteVisitor {\n constructor(private readonly modelMeta: ModelMeta, private readonly callback: NestedWriterVisitorCallback) {}\n\n private isPrismaWriteAction(value: string): value is PrismaWriteActionType {\n return PrismaWriteActions.includes(value as PrismaWriteActionType);\n }\n\n /**\n * Start visiting\n *\n * @see NestedWriterVisitorCallback\n */\n async visit(model: string, action: PrismaWriteActionType, args: any): Promise<void> {\n if (!args) {\n return;\n }\n\n let topData = args;\n\n switch (action) {\n // create has its data wrapped in 'data' field\n case 'create':\n topData = topData.data;\n break;\n\n case 'delete':\n case 'deleteMany':\n topData = topData.where;\n break;\n }\n\n await this.doVisit(model, action, topData, undefined, undefined, []);\n }\n\n private async doVisit(\n model: string,\n action: PrismaWriteActionType,\n data: any,\n parent: any,\n field: FieldInfo | undefined,\n nestingPath: NestingPathItem[]\n ): Promise<void> {\n if (!data) {\n return;\n }\n\n const toplevel = field == undefined;\n\n const context = { parent, field, nestingPath: [...nestingPath] };\n const pushNewContext = (field: FieldInfo | undefined, model: string, where: any, unique = false) => {\n return { ...context, nestingPath: [...context.nestingPath, { field, model, where, unique }] };\n };\n\n // visit payload\n switch (action) {\n case 'create':\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, {});\n let callbackResult: any;\n if (this.callback.create) {\n callbackResult = await this.callback.create(model, item, newContext);\n }\n if (callbackResult !== false) {\n const subPayload = typeof callbackResult === 'object' ? callbackResult : item;\n await this.visitSubPayload(model, action, subPayload, newContext.nestingPath);\n }\n }\n break;\n\n case 'createMany':\n case 'createManyAndReturn':\n if (data) {\n const newContext = pushNewContext(field, model, {});\n let callbackResult: any;\n if (this.callback.createMany) {\n callbackResult = await this.callback.createMany(model, data, newContext);\n }\n if (callbackResult !== false) {\n const subPayload = typeof callbackResult === 'object' ? callbackResult : data.data;\n await this.visitSubPayload(model, action, subPayload, newContext.nestingPath);\n }\n }\n break;\n\n case 'connectOrCreate':\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, item.where);\n let callbackResult: any;\n if (this.callback.connectOrCreate) {\n callbackResult = await this.callback.connectOrCreate(model, item, newContext);\n }\n if (callbackResult !== false) {\n const subPayload = typeof callbackResult === 'object' ? callbackResult : item.create;\n await this.visitSubPayload(model, action, subPayload, newContext.nestingPath);\n }\n }\n break;\n\n case 'connect':\n if (this.callback.connect) {\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, item, true);\n await this.callback.connect(model, item, newContext);\n }\n }\n break;\n\n case 'disconnect':\n // disconnect has two forms:\n // if relation is to-many, the payload is a unique filter object\n // if relation is to-one, the payload can only be boolean `true`\n if (this.callback.disconnect) {\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, item, typeof item === 'object');\n await this.callback.disconnect(model, item, newContext);\n }\n }\n break;\n\n case 'set':\n if (this.callback.set) {\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, item, true);\n await this.callback.set(model, item, newContext);\n }\n }\n break;\n\n case 'update':\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, item.where);\n let callbackResult: any;\n if (this.callback.update) {\n callbackResult = await this.callback.update(model, item, newContext);\n }\n if (callbackResult !== false) {\n const subPayload =\n typeof callbackResult === 'object'\n ? callbackResult\n : typeof item.data === 'object'\n ? item.data\n : item;\n await this.visitSubPayload(model, action, subPayload, newContext.nestingPath);\n }\n }\n break;\n\n case 'updateMany':\n case 'updateManyAndReturn':\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, item.where);\n let callbackResult: any;\n if (this.callback.updateMany) {\n callbackResult = await this.callback.updateMany(model, item, newContext);\n }\n if (callbackResult !== false) {\n const subPayload = typeof callbackResult === 'object' ? callbackResult : item;\n await this.visitSubPayload(model, action, subPayload, newContext.nestingPath);\n }\n }\n break;\n\n case 'upsert': {\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, item.where);\n let callbackResult: any;\n if (this.callback.upsert) {\n callbackResult = await this.callback.upsert(model, item, newContext);\n }\n if (callbackResult !== false) {\n if (typeof callbackResult === 'object') {\n await this.visitSubPayload(model, action, callbackResult, newContext.nestingPath);\n } else {\n await this.visitSubPayload(model, action, item.create, newContext.nestingPath);\n await this.visitSubPayload(model, action, item.update, newContext.nestingPath);\n }\n }\n }\n break;\n }\n\n case 'delete': {\n if (this.callback.delete) {\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, toplevel ? item.where : item);\n await this.callback.delete(model, item, newContext);\n }\n }\n break;\n }\n\n case 'deleteMany':\n if (this.callback.deleteMany) {\n for (const item of this.enumerateReverse(data)) {\n const newContext = pushNewContext(field, model, toplevel ? item.where : item);\n await this.callback.deleteMany(model, item, newContext);\n }\n }\n break;\n\n default: {\n throw new Error(`unhandled action type ${action}`);\n }\n }\n }\n\n private async visitSubPayload(\n model: string,\n action: PrismaWriteActionType,\n payload: any,\n nestingPath: NestingPathItem[]\n ) {\n for (const item of enumerate(payload)) {\n for (const field of getModelFields(item)) {\n const fieldInfo = resolveField(this.modelMeta, model, field);\n if (!fieldInfo) {\n continue;\n }\n\n if (fieldInfo.isDataModel) {\n if (item[field]) {\n // recurse into nested payloads\n for (const [subAction, subData] of Object.entries<any>(item[field])) {\n if (this.isPrismaWriteAction(subAction) && subData) {\n await this.doVisit(fieldInfo.type, subAction, subData, item[field], fieldInfo, [\n ...nestingPath,\n ]);\n }\n }\n }\n } else {\n // visit plain field\n if (this.callback.field) {\n await this.callback.field(fieldInfo, action, item[field], {\n parent: item,\n nestingPath,\n field: fieldInfo,\n });\n }\n }\n }\n }\n }\n\n // enumerate a (possible) array in reverse order, so that the enumeration\n // callback can safely delete the current item\n private *enumerateReverse(data: any) {\n if (Array.isArray(data)) {\n for (let i = data.length - 1; i >= 0; i--) {\n yield data[i];\n }\n } else {\n yield data;\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { lowerCaseFirst } from '../local-helpers';\nimport type { ModelMeta } from './model-meta';\nimport { NestedReadVisitor } from './nested-read-visitor';\nimport { NestedWriteVisitor } from './nested-write-visitor';\nimport type { PrismaWriteActionType } from './types';\nimport { getModelInfo } from './utils';\n\n/**\n * Gets models read (including nested ones) given a query args.\n * @param model\n * @param targetModels\n * @param modelMeta\n * @param args\n * @returns\n */\nexport function getReadModels(model: string, modelMeta: ModelMeta, args: any) {\n const result = new Set<string>();\n result.add(model);\n const visitor = new NestedReadVisitor(modelMeta, {\n field: (model) => {\n result.add(model);\n return true;\n },\n });\n visitor.visit(model, args);\n return [...result];\n}\n\n/**\n * Gets mutated models (including nested ones) given a mutation args.\n */\nexport async function getMutatedModels(\n model: string,\n operation: PrismaWriteActionType,\n mutationArgs: any,\n modelMeta: ModelMeta\n) {\n const result = new Set<string>();\n result.add(model);\n\n if (mutationArgs) {\n const addModel = (model: string) => void result.add(model);\n\n // add models that are cascaded deleted recursively\n const addCascades = (model: string) => {\n const cascades = new Set<string>();\n const visited = new Set<string>();\n collectDeleteCascades(model, modelMeta, cascades, visited);\n cascades.forEach((m) => addModel(m));\n };\n\n const visitor = new NestedWriteVisitor(modelMeta, {\n create: addModel,\n createMany: addModel,\n connectOrCreate: addModel,\n connect: addModel,\n disconnect: addModel,\n set: addModel,\n update: addModel,\n updateMany: addModel,\n upsert: addModel,\n delete: (model) => {\n addModel(model);\n addCascades(model);\n },\n deleteMany: (model) => {\n addModel(model);\n addCascades(model);\n },\n });\n await visitor.visit(model, operation, mutationArgs);\n }\n\n // include delegate base models recursively\n result.forEach((m) => {\n getBaseRecursively(m, modelMeta, result);\n });\n\n return [...result];\n}\n\nfunction collectDeleteCascades(model: string, modelMeta: ModelMeta, result: Set<string>, visited: Set<string>) {\n if (visited.has(model)) {\n // break circle\n return;\n }\n visited.add(model);\n\n const cascades = modelMeta.deleteCascade?.[lowerCaseFirst(model)];\n\n if (!cascades) {\n return;\n }\n\n cascades.forEach((m) => {\n result.add(m);\n collectDeleteCascades(m, modelMeta, result, visited);\n });\n}\n\nfunction getBaseRecursively(model: string, modelMeta: ModelMeta, result: Set<string>) {\n const bases = getModelInfo(modelMeta, model)?.baseTypes;\n if (bases) {\n bases.forEach((base) => {\n result.add(base);\n getBaseRecursively(base, modelMeta, result);\n });\n }\n}\n"],"mappings":"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","names":["model","data","field","field","model","model"]}
package/edge.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './enhance-edge';
package/edge.js DELETED
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./enhance-edge"), exports);
18
- //# sourceMappingURL=edge.js.map
package/edge.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"edge.js","sourceRoot":"","sources":["../src/edge.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Default encrypter
3
- */
4
- export declare class Encrypter {
5
- private readonly encryptionKey;
6
- private key;
7
- private keyDigest;
8
- constructor(encryptionKey: Uint8Array);
9
- /**
10
- * Encrypts the given data
11
- */
12
- encrypt(data: string): Promise<string>;
13
- }
14
- /**
15
- * Default decrypter
16
- */
17
- export declare class Decrypter {
18
- private readonly decryptionKeys;
19
- private keys;
20
- constructor(decryptionKeys: Uint8Array[]);
21
- /**
22
- * Decrypts the given data
23
- */
24
- decrypt(data: string): Promise<string>;
25
- }
@@ -1,74 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Decrypter = exports.Encrypter = void 0;
13
- const utils_1 = require("./utils");
14
- /**
15
- * Default encrypter
16
- */
17
- class Encrypter {
18
- constructor(encryptionKey) {
19
- this.encryptionKey = encryptionKey;
20
- if (encryptionKey.length !== utils_1.ENCRYPTION_KEY_BYTES) {
21
- throw new Error(`Encryption key must be ${utils_1.ENCRYPTION_KEY_BYTES} bytes`);
22
- }
23
- }
24
- /**
25
- * Encrypts the given data
26
- */
27
- encrypt(data) {
28
- return __awaiter(this, void 0, void 0, function* () {
29
- if (!this.key) {
30
- this.key = yield (0, utils_1.loadKey)(this.encryptionKey, ['encrypt']);
31
- }
32
- if (!this.keyDigest) {
33
- this.keyDigest = yield (0, utils_1.getKeyDigest)(this.encryptionKey);
34
- }
35
- return (0, utils_1._encrypt)(data, this.key, this.keyDigest);
36
- });
37
- }
38
- }
39
- exports.Encrypter = Encrypter;
40
- /**
41
- * Default decrypter
42
- */
43
- class Decrypter {
44
- constructor(decryptionKeys) {
45
- this.decryptionKeys = decryptionKeys;
46
- this.keys = [];
47
- if (decryptionKeys.length === 0) {
48
- throw new Error('At least one decryption key must be provided');
49
- }
50
- for (const key of decryptionKeys) {
51
- if (key.length !== utils_1.ENCRYPTION_KEY_BYTES) {
52
- throw new Error(`Decryption key must be ${utils_1.ENCRYPTION_KEY_BYTES} bytes`);
53
- }
54
- }
55
- }
56
- /**
57
- * Decrypts the given data
58
- */
59
- decrypt(data) {
60
- return __awaiter(this, void 0, void 0, function* () {
61
- if (this.keys.length === 0) {
62
- this.keys = yield Promise.all(this.decryptionKeys.map((key) => __awaiter(this, void 0, void 0, function* () {
63
- return ({
64
- key: yield (0, utils_1.loadKey)(key, ['decrypt']),
65
- digest: yield (0, utils_1.getKeyDigest)(key),
66
- });
67
- })));
68
- }
69
- return (0, utils_1._decrypt)(data, (digest) => __awaiter(this, void 0, void 0, function* () { return this.keys.filter((entry) => entry.digest === digest).map((entry) => entry.key); }));
70
- });
71
- }
72
- }
73
- exports.Decrypter = Decrypter;
74
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/encryption/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA0F;AAE1F;;GAEG;AACH,MAAa,SAAS;IAIlB,YAA6B,aAAyB;QAAzB,kBAAa,GAAb,aAAa,CAAY;QAClD,IAAI,aAAa,CAAC,MAAM,KAAK,4BAAoB,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,0BAA0B,4BAAoB,QAAQ,CAAC,CAAC;QAC5E,CAAC;IACL,CAAC;IAED;;OAEG;IACG,OAAO,CAAC,IAAY;;YACtB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACZ,IAAI,CAAC,GAAG,GAAG,MAAM,IAAA,eAAO,EAAC,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9D,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClB,IAAI,CAAC,SAAS,GAAG,MAAM,IAAA,oBAAY,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5D,CAAC;YAED,OAAO,IAAA,gBAAQ,EAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC;KAAA;CACJ;AAxBD,8BAwBC;AAED;;GAEG;AACH,MAAa,SAAS;IAGlB,YAA6B,cAA4B;QAA5B,mBAAc,GAAd,cAAc,CAAc;QAFjD,SAAI,GAA8C,EAAE,CAAC;QAGzD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,4BAAoB,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,0BAA0B,4BAAoB,QAAQ,CAAC,CAAC;YAC5E,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACG,OAAO,CAAC,IAAY;;YACtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CACzB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAO,GAAG,EAAE,EAAE;oBAAC,OAAA,CAAC;wBACpC,GAAG,EAAE,MAAM,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;wBACpC,MAAM,EAAE,MAAM,IAAA,oBAAY,EAAC,GAAG,CAAC;qBAClC,CAAC,CAAA;kBAAA,CAAC,CACN,CAAC;YACN,CAAC;YAED,OAAO,IAAA,gBAAQ,EAAC,IAAI,EAAE,CAAO,MAAM,EAAE,EAAE,gDACnC,OAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,GAAA,CACjF,CAAC;QACN,CAAC;KAAA;CACJ;AAhCD,8BAgCC"}
@@ -1,9 +0,0 @@
1
- export declare const ENCRYPTER_VERSION = 1;
2
- export declare const ENCRYPTION_KEY_BYTES = 32;
3
- export declare const IV_BYTES = 12;
4
- export declare const ALGORITHM = "AES-GCM";
5
- export declare const KEY_DIGEST_BYTES = 8;
6
- export declare function loadKey(key: Uint8Array, keyUsages: KeyUsage[]): Promise<CryptoKey>;
7
- export declare function getKeyDigest(key: Uint8Array): Promise<string>;
8
- export declare function _encrypt(data: string, key: CryptoKey, keyDigest: string): Promise<string>;
9
- export declare function _decrypt(data: string, findKey: (digest: string) => Promise<CryptoKey[]>): Promise<string>;
@@ -1,99 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.KEY_DIGEST_BYTES = exports.ALGORITHM = exports.IV_BYTES = exports.ENCRYPTION_KEY_BYTES = exports.ENCRYPTER_VERSION = void 0;
13
- exports.loadKey = loadKey;
14
- exports.getKeyDigest = getKeyDigest;
15
- exports._encrypt = _encrypt;
16
- exports._decrypt = _decrypt;
17
- const zod_1 = require("zod");
18
- exports.ENCRYPTER_VERSION = 1;
19
- exports.ENCRYPTION_KEY_BYTES = 32;
20
- exports.IV_BYTES = 12;
21
- exports.ALGORITHM = 'AES-GCM';
22
- exports.KEY_DIGEST_BYTES = 8;
23
- const encoder = new TextEncoder();
24
- const decoder = new TextDecoder();
25
- const encryptionMetaSchema = zod_1.z.object({
26
- // version
27
- v: zod_1.z.number(),
28
- // algorithm
29
- a: zod_1.z.string(),
30
- // key digest
31
- k: zod_1.z.string(),
32
- });
33
- function loadKey(key, keyUsages) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- return crypto.subtle.importKey('raw', key, exports.ALGORITHM, false, keyUsages);
36
- });
37
- }
38
- function getKeyDigest(key) {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- const rawDigest = yield crypto.subtle.digest('SHA-256', key);
41
- return new Uint8Array(rawDigest.slice(0, exports.KEY_DIGEST_BYTES)).reduce((acc, byte) => acc + byte.toString(16).padStart(2, '0'), '');
42
- });
43
- }
44
- function _encrypt(data, key, keyDigest) {
45
- return __awaiter(this, void 0, void 0, function* () {
46
- const iv = crypto.getRandomValues(new Uint8Array(exports.IV_BYTES));
47
- const encrypted = yield crypto.subtle.encrypt({
48
- name: exports.ALGORITHM,
49
- iv,
50
- }, key, encoder.encode(data));
51
- // combine IV and encrypted data into a single array of bytes
52
- const cipherBytes = [...iv, ...new Uint8Array(encrypted)];
53
- // encryption metadata
54
- const meta = { v: exports.ENCRYPTER_VERSION, a: exports.ALGORITHM, k: keyDigest };
55
- // convert concatenated result to base64 string
56
- return `${btoa(JSON.stringify(meta))}.${btoa(String.fromCharCode(...cipherBytes))}`;
57
- });
58
- }
59
- function _decrypt(data, findKey) {
60
- return __awaiter(this, void 0, void 0, function* () {
61
- const [metaText, cipherText] = data.split('.');
62
- if (!metaText || !cipherText) {
63
- throw new Error('Malformed encrypted data');
64
- }
65
- let metaObj;
66
- try {
67
- metaObj = JSON.parse(atob(metaText));
68
- }
69
- catch (error) {
70
- throw new Error('Malformed metadata');
71
- }
72
- // parse meta
73
- const { a: algorithm, k: keyDigest } = encryptionMetaSchema.parse(metaObj);
74
- // find a matching decryption key
75
- const keys = yield findKey(keyDigest);
76
- if (keys.length === 0) {
77
- throw new Error('No matching decryption key found');
78
- }
79
- // convert base64 back to bytes
80
- const bytes = Uint8Array.from(atob(cipherText), (c) => c.charCodeAt(0));
81
- // extract IV from the head
82
- const iv = bytes.slice(0, exports.IV_BYTES);
83
- const cipher = bytes.slice(exports.IV_BYTES);
84
- let lastError;
85
- for (const key of keys) {
86
- let decrypted;
87
- try {
88
- decrypted = yield crypto.subtle.decrypt({ name: algorithm, iv }, key, cipher);
89
- }
90
- catch (err) {
91
- lastError = err;
92
- continue;
93
- }
94
- return decoder.decode(decrypted);
95
- }
96
- throw lastError;
97
- });
98
- }
99
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/encryption/utils.ts"],"names":[],"mappings":"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"}
package/enhance-edge.d.ts DELETED
@@ -1 +0,0 @@
1
- export { auth, enhance, type PrismaClient } from '.zenstack/enhance-edge';
package/enhance-edge.js DELETED
@@ -1,10 +0,0 @@
1
- 'use strict';
2
- Object.defineProperty(exports, '__esModule', { value: true });
3
-
4
- try {
5
- exports.enhance = require('.zenstack/enhance-edge').enhance;
6
- } catch {
7
- exports.enhance = function () {
8
- throw new Error('Generated "enhance" function not found. Please run `zenstack generate` first.');
9
- };
10
- }
package/enhance.d.ts DELETED
@@ -1 +0,0 @@
1
- export { auth, enhance, type PrismaClient, type Enhanced } from '.zenstack/enhance';
package/enhance.js DELETED
@@ -1,10 +0,0 @@
1
- 'use strict';
2
- Object.defineProperty(exports, '__esModule', { value: true });
3
-
4
- try {
5
- exports.enhance = require('.zenstack/enhance').enhance;
6
- } catch {
7
- exports.enhance = function () {
8
- throw new Error('Generated "enhance" function not found. Please run `zenstack generate` first.');
9
- };
10
- }
@@ -1,42 +0,0 @@
1
- import { type ModelMeta } from '../../cross';
2
- import type { DbClientContract, EnhancementContext, EnhancementOptions, ZodSchemas } from '../../types';
3
- import type { PolicyDef } from './types';
4
- /**
5
- * Options for {@link createEnhancement}
6
- *
7
- * @private
8
- */
9
- export type InternalEnhancementOptions = EnhancementOptions & {
10
- /**
11
- * Policy definition
12
- */
13
- policy: PolicyDef;
14
- /**
15
- * Model metadata
16
- */
17
- modelMeta: ModelMeta;
18
- /**
19
- * Zod schemas for validation
20
- */
21
- zodSchemas?: ZodSchemas;
22
- /**
23
- * The Node module that contains PrismaClient
24
- */
25
- prismaModule: any;
26
- /**
27
- * A callback shared among enhancements to process the payload for including a relation
28
- * field. e.g.: `{ author: true }`.
29
- */
30
- processIncludeRelationPayload?: (prisma: DbClientContract, model: string, payload: unknown, options: InternalEnhancementOptions, context: EnhancementContext | undefined) => Promise<void>;
31
- };
32
- /**
33
- * Gets a Prisma client enhanced with all enhancement behaviors, including access
34
- * policy, field validation, field omission and password hashing.
35
- *
36
- * @private
37
- *
38
- * @param prisma The Prisma client to enhance.
39
- * @param context Context.
40
- * @param options Options.
41
- */
42
- export declare function createEnhancement<DbClient extends object>(prisma: DbClient, options: InternalEnhancementOptions, context?: EnhancementContext): DbClient;
@@ -1,102 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createEnhancement = createEnhancement;
7
- const semver_1 = __importDefault(require("semver"));
8
- const constants_1 = require("../../constants");
9
- const cross_1 = require("../../cross");
10
- const default_auth_1 = require("./default-auth");
11
- const delegate_1 = require("./delegate");
12
- const encryption_1 = require("./encryption");
13
- const json_processor_1 = require("./json-processor");
14
- const logger_1 = require("./logger");
15
- const omit_1 = require("./omit");
16
- const password_1 = require("./password");
17
- const policy_1 = require("./policy");
18
- /**
19
- * All enhancement kinds
20
- */
21
- const ALL_ENHANCEMENTS = ['password', 'omit', 'policy', 'validation', 'delegate', 'encryption'];
22
- /**
23
- * Gets a Prisma client enhanced with all enhancement behaviors, including access
24
- * policy, field validation, field omission and password hashing.
25
- *
26
- * @private
27
- *
28
- * @param prisma The Prisma client to enhance.
29
- * @param context Context.
30
- * @param options Options.
31
- */
32
- function createEnhancement(prisma, options, context) {
33
- var _a;
34
- if (!prisma) {
35
- throw new Error('Invalid prisma instance');
36
- }
37
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
- const prismaVer = prisma._clientVersion;
39
- if (prismaVer && semver_1.default.lt(prismaVer, constants_1.PRISMA_MINIMUM_VERSION)) {
40
- console.warn(`ZenStack requires Prisma version "${constants_1.PRISMA_MINIMUM_VERSION}" or higher. Detected version is "${prismaVer}".`);
41
- }
42
- // TODO: move the detection logic into each enhancement
43
- // TODO: how to properly cache the detection result?
44
- const allFields = Object.values(options.modelMeta.models).flatMap((modelInfo) => Object.values(modelInfo.fields));
45
- if (options.modelMeta.typeDefs) {
46
- allFields.push(...Object.values(options.modelMeta.typeDefs).flatMap((typeDefInfo) => Object.values(typeDefInfo.fields)));
47
- }
48
- const hasPassword = allFields.some((field) => { var _a; return (_a = field.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.name === '@password'); });
49
- const hasEncrypted = allFields.some((field) => { var _a; return (_a = field.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.name === '@encrypted'); });
50
- const hasOmit = allFields.some((field) => { var _a; return (_a = field.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.name === '@omit'); });
51
- const hasDefaultAuth = allFields.some((field) => field.defaultValueProvider);
52
- const hasTypeDefField = allFields.some((field) => field.isTypeDef);
53
- const kinds = (_a = options.kinds) !== null && _a !== void 0 ? _a : ALL_ENHANCEMENTS;
54
- let result = prisma;
55
- // delegate proxy needs to be wrapped inside policy proxy, since it may translate `deleteMany`
56
- // and `updateMany` to plain `delete` and `update`
57
- if (Object.values(options.modelMeta.models).some((model) => (0, cross_1.isDelegateModel)(options.modelMeta, model.name))) {
58
- if (!kinds.includes('delegate')) {
59
- const logger = new logger_1.Logger(prisma);
60
- logger.warn('Your ZModel contains delegate models but "delegate" enhancement kind is not enabled. This may result in unexpected behavior.');
61
- }
62
- else {
63
- result = (0, delegate_1.withDelegate)(result, options, context);
64
- }
65
- }
66
- // password and encrypted enhancement must be applied prior to policy because it changes then length of the field
67
- // and can break validation rules like `@length`
68
- if (hasPassword && kinds.includes('password')) {
69
- // @password proxy
70
- result = (0, password_1.withPassword)(result, options);
71
- }
72
- if (hasEncrypted && kinds.includes('encryption')) {
73
- if (!options.encryption) {
74
- throw new Error('Encryption options are required for @encrypted enhancement');
75
- }
76
- // @encrypted proxy
77
- result = (0, encryption_1.withEncrypted)(result, options);
78
- }
79
- // 'policy' and 'validation' enhancements are both enabled by `withPolicy`
80
- if (kinds.includes('policy') || kinds.includes('validation')) {
81
- result = (0, policy_1.withPolicy)(result, options, context);
82
- // if any enhancement is to introduce an inclusion of a relation field, the
83
- // inclusion payload must be processed by the policy enhancement for injecting
84
- // access control rules
85
- // TODO: this is currently a global callback shared among all enhancements, which
86
- // is far from ideal
87
- options.processIncludeRelationPayload = policy_1.policyProcessIncludeRelationPayload;
88
- if (kinds.includes('policy') && hasDefaultAuth) {
89
- // @default(auth()) proxy
90
- result = (0, default_auth_1.withDefaultAuth)(result, options, context);
91
- }
92
- }
93
- if (hasOmit && kinds.includes('omit')) {
94
- // @omit proxy
95
- result = (0, omit_1.withOmit)(result, options);
96
- }
97
- if (hasTypeDefField) {
98
- result = (0, json_processor_1.withJsonProcessor)(result, options);
99
- }
100
- return result;
101
- }
102
- //# sourceMappingURL=create-enhancement.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-enhancement.js","sourceRoot":"","sources":["../../../src/enhancements/edge/create-enhancement.ts"],"names":[],"mappings":";;;;;AA2EA,8CA8FC;AAzKD,oDAA4B;AAC5B,+CAAyD;AACzD,uCAA8D;AAQ9D,iDAAiD;AACjD,yCAA0C;AAC1C,6CAA6C;AAC7C,qDAAqD;AACrD,qCAAkC;AAClC,iCAAkC;AAClC,yCAA0C;AAC1C,qCAA2E;AAG3E;;GAEG;AACH,MAAM,gBAAgB,GAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AA0CnH;;;;;;;;;GASG;AACH,SAAgB,iBAAiB,CAC7B,MAAgB,EAChB,OAAmC,EACnC,OAA4B;;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,8DAA8D;IAC9D,MAAM,SAAS,GAAI,MAAc,CAAC,cAAc,CAAC;IACjD,IAAI,SAAS,IAAI,gBAAM,CAAC,EAAE,CAAC,SAAS,EAAE,kCAAsB,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,IAAI,CACR,qCAAqC,kCAAsB,qCAAqC,SAAS,IAAI,CAChH,CAAC;IACN,CAAC;IAED,uDAAuD;IACvD,oDAAoD;IAEpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAClH,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC7B,SAAS,CAAC,IAAI,CACV,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAC3G,CAAC;IACN,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA,EAAA,CAAC,CAAC;IAC3G,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAA,EAAA,CAAC,CAAC;IAC7G,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA,EAAA,CAAC,CAAC;IACnG,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEnE,MAAM,KAAK,GAAG,MAAA,OAAO,CAAC,KAAK,mCAAI,gBAAgB,CAAC;IAChD,IAAI,MAAM,GAAG,MAAM,CAAC;IAEpB,8FAA8F;IAC9F,kDAAkD;IAClD,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC1G,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CACP,8HAA8H,CACjI,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,IAAA,uBAAY,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED,iHAAiH;IACjH,gDAAgD;IAChD,IAAI,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,kBAAkB;QAClB,MAAM,GAAG,IAAA,uBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,YAAY,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAClF,CAAC;QAED,mBAAmB;QACnB,MAAM,GAAG,IAAA,0BAAa,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,0EAA0E;IAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,MAAM,GAAG,IAAA,mBAAU,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE9C,2EAA2E;QAC3E,8EAA8E;QAC9E,uBAAuB;QAEvB,iFAAiF;QACjF,oBAAoB;QAEpB,OAAO,CAAC,6BAA6B,GAAG,4CAAmC,CAAC;QAE5E,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC;YAC7C,yBAAyB;YACzB,MAAM,GAAG,IAAA,8BAAe,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,cAAc;QACd,MAAM,GAAG,IAAA,eAAQ,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QAClB,MAAM,GAAG,IAAA,kCAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -1,8 +0,0 @@
1
- import { EnhancementContext } from '../../types';
2
- import { InternalEnhancementOptions } from './create-enhancement';
3
- /**
4
- * Gets an enhanced Prisma client that supports `@default(auth())` attribute.
5
- *
6
- * @private
7
- */
8
- export declare function withDefaultAuth<DbClient extends object>(prisma: DbClient, options: InternalEnhancementOptions, context?: EnhancementContext): DbClient;