ultimabase 0.0.0-stage → 0.1.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 (411) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +4 -2
  3. package/dist/access.d.ts +62 -0
  4. package/dist/access.d.ts.map +1 -0
  5. package/dist/access.js +258 -0
  6. package/dist/adapter-errors.d.ts +43 -0
  7. package/dist/adapter-errors.d.ts.map +1 -0
  8. package/dist/adapter-errors.js +72 -0
  9. package/dist/adapter-json.d.ts +20 -0
  10. package/dist/adapter-json.d.ts.map +1 -0
  11. package/dist/adapter-json.js +2 -0
  12. package/dist/adapter-migrations.d.ts +90 -0
  13. package/dist/adapter-migrations.d.ts.map +1 -0
  14. package/dist/adapter-migrations.js +1 -0
  15. package/dist/adapter.d.ts +333 -0
  16. package/dist/adapter.d.ts.map +1 -0
  17. package/dist/adapter.js +5 -0
  18. package/dist/aggregate.d.ts +31 -0
  19. package/dist/aggregate.d.ts.map +1 -0
  20. package/dist/aggregate.js +99 -0
  21. package/dist/app-internals.d.ts +10 -0
  22. package/dist/app-internals.d.ts.map +1 -0
  23. package/dist/app-internals.js +12 -0
  24. package/dist/app-options.d.ts +22 -0
  25. package/dist/app-options.d.ts.map +1 -0
  26. package/dist/app-options.js +3 -0
  27. package/dist/cascade.d.ts +47 -0
  28. package/dist/cascade.d.ts.map +1 -0
  29. package/dist/cascade.js +209 -0
  30. package/dist/cli-config.d.ts +6 -0
  31. package/dist/cli-config.d.ts.map +1 -0
  32. package/dist/cli-config.js +45 -0
  33. package/dist/cli-deploy.d.ts +14 -0
  34. package/dist/cli-deploy.d.ts.map +1 -0
  35. package/dist/cli-deploy.js +193 -0
  36. package/dist/cli-main.d.ts +15 -0
  37. package/dist/cli-main.d.ts.map +1 -0
  38. package/dist/cli-main.js +155 -0
  39. package/dist/cli-migrate.d.ts +20 -0
  40. package/dist/cli-migrate.d.ts.map +1 -0
  41. package/dist/cli-migrate.js +105 -0
  42. package/dist/cli.d.ts +3 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +4 -0
  45. package/dist/complete.d.ts +13 -0
  46. package/dist/complete.d.ts.map +1 -0
  47. package/dist/complete.js +60 -0
  48. package/dist/console-logger.d.ts +3 -0
  49. package/dist/console-logger.d.ts.map +1 -0
  50. package/dist/console-logger.js +62 -0
  51. package/dist/create-many.d.ts +7 -0
  52. package/dist/create-many.d.ts.map +1 -0
  53. package/dist/create-many.js +88 -0
  54. package/dist/decimal.d.ts +23 -0
  55. package/dist/decimal.d.ts.map +1 -0
  56. package/dist/decimal.js +50 -0
  57. package/dist/define-app.d.ts +59 -0
  58. package/dist/define-app.d.ts.map +1 -0
  59. package/dist/define-app.js +5 -0
  60. package/dist/define-enum.d.ts +6 -0
  61. package/dist/define-enum.d.ts.map +1 -0
  62. package/dist/define-enum.js +18 -0
  63. package/dist/define-function.d.ts +25 -0
  64. package/dist/define-function.d.ts.map +1 -0
  65. package/dist/define-function.js +111 -0
  66. package/dist/define-model.d.ts +48 -0
  67. package/dist/define-model.d.ts.map +1 -0
  68. package/dist/define-model.js +85 -0
  69. package/dist/definition.d.ts +179 -0
  70. package/dist/definition.d.ts.map +1 -0
  71. package/dist/definition.js +165 -0
  72. package/dist/delete-many.d.ts +13 -0
  73. package/dist/delete-many.d.ts.map +1 -0
  74. package/dist/delete-many.js +58 -0
  75. package/dist/engine.d.ts +16 -0
  76. package/dist/engine.d.ts.map +1 -0
  77. package/dist/engine.js +174 -0
  78. package/dist/errors.d.ts +50 -0
  79. package/dist/errors.d.ts.map +1 -0
  80. package/dist/errors.js +43 -0
  81. package/dist/exact.d.ts +20 -0
  82. package/dist/exact.d.ts.map +1 -0
  83. package/dist/exact.js +1 -0
  84. package/dist/feed.d.ts +6 -0
  85. package/dist/feed.d.ts.map +1 -0
  86. package/dist/feed.js +33 -0
  87. package/dist/field-codec.d.ts +11 -0
  88. package/dist/field-codec.d.ts.map +1 -0
  89. package/dist/field-codec.js +48 -0
  90. package/dist/field-rules.d.ts +57 -0
  91. package/dist/field-rules.d.ts.map +1 -0
  92. package/dist/field-rules.js +1 -0
  93. package/dist/field-type.d.ts +51 -0
  94. package/dist/field-type.d.ts.map +1 -0
  95. package/dist/field-type.js +106 -0
  96. package/dist/fields.d.ts +295 -0
  97. package/dist/fields.d.ts.map +1 -0
  98. package/dist/fields.js +1 -0
  99. package/dist/function.d.ts +126 -0
  100. package/dist/function.d.ts.map +1 -0
  101. package/dist/function.js +1 -0
  102. package/dist/functions.d.ts +18 -0
  103. package/dist/functions.d.ts.map +1 -0
  104. package/dist/functions.js +99 -0
  105. package/dist/group-by.d.ts +10 -0
  106. package/dist/group-by.d.ts.map +1 -0
  107. package/dist/group-by.js +145 -0
  108. package/dist/group-having.d.ts +8 -0
  109. package/dist/group-having.d.ts.map +1 -0
  110. package/dist/group-having.js +97 -0
  111. package/dist/hooks.d.ts +41 -0
  112. package/dist/hooks.d.ts.map +1 -0
  113. package/dist/hooks.js +149 -0
  114. package/dist/hosts.d.ts +3 -0
  115. package/dist/hosts.d.ts.map +1 -0
  116. package/dist/hosts.js +8 -0
  117. package/dist/identify.d.ts +15 -0
  118. package/dist/identify.d.ts.map +1 -0
  119. package/dist/identify.js +71 -0
  120. package/dist/index.d.ts +25 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +12 -0
  123. package/dist/internal.d.ts +28 -0
  124. package/dist/internal.d.ts.map +1 -0
  125. package/dist/internal.js +39 -0
  126. package/dist/lifecycle.d.ts +21 -0
  127. package/dist/lifecycle.d.ts.map +1 -0
  128. package/dist/lifecycle.js +149 -0
  129. package/dist/list-update.d.ts +12 -0
  130. package/dist/list-update.d.ts.map +1 -0
  131. package/dist/list-update.js +52 -0
  132. package/dist/live.d.ts +37 -0
  133. package/dist/live.d.ts.map +1 -0
  134. package/dist/live.js +139 -0
  135. package/dist/manifest.d.ts +11 -0
  136. package/dist/manifest.d.ts.map +1 -0
  137. package/dist/manifest.js +60 -0
  138. package/dist/memory-aggregate.d.ts +7 -0
  139. package/dist/memory-aggregate.d.ts.map +1 -0
  140. package/dist/memory-aggregate.js +107 -0
  141. package/dist/memory-conditions.d.ts +8 -0
  142. package/dist/memory-conditions.d.ts.map +1 -0
  143. package/dist/memory-conditions.js +82 -0
  144. package/dist/memory-draft.d.ts +34 -0
  145. package/dist/memory-draft.d.ts.map +1 -0
  146. package/dist/memory-draft.js +255 -0
  147. package/dist/memory-json.d.ts +6 -0
  148. package/dist/memory-json.d.ts.map +1 -0
  149. package/dist/memory-json.js +86 -0
  150. package/dist/memory-read.d.ts +45 -0
  151. package/dist/memory-read.d.ts.map +1 -0
  152. package/dist/memory-read.js +244 -0
  153. package/dist/memory-search.d.ts +16 -0
  154. package/dist/memory-search.d.ts.map +1 -0
  155. package/dist/memory-search.js +110 -0
  156. package/dist/memory-values.d.ts +23 -0
  157. package/dist/memory-values.d.ts.map +1 -0
  158. package/dist/memory-values.js +82 -0
  159. package/dist/memory.d.ts +4 -0
  160. package/dist/memory.d.ts.map +1 -0
  161. package/dist/memory.js +157 -0
  162. package/dist/migrate.d.ts +22 -0
  163. package/dist/migrate.d.ts.map +1 -0
  164. package/dist/migrate.js +131 -0
  165. package/dist/model.d.ts +239 -0
  166. package/dist/model.d.ts.map +1 -0
  167. package/dist/model.js +1 -0
  168. package/dist/nested-write.d.ts +64 -0
  169. package/dist/nested-write.d.ts.map +1 -0
  170. package/dist/nested-write.js +274 -0
  171. package/dist/number-update.d.ts +18 -0
  172. package/dist/number-update.d.ts.map +1 -0
  173. package/dist/number-update.js +96 -0
  174. package/dist/plugin-app.d.ts +48 -0
  175. package/dist/plugin-app.d.ts.map +1 -0
  176. package/dist/plugin-app.js +230 -0
  177. package/dist/plugin-code.d.ts +17 -0
  178. package/dist/plugin-code.d.ts.map +1 -0
  179. package/dist/plugin-code.js +125 -0
  180. package/dist/plugin-use.d.ts +22 -0
  181. package/dist/plugin-use.d.ts.map +1 -0
  182. package/dist/plugin-use.js +161 -0
  183. package/dist/plugin.d.ts +357 -0
  184. package/dist/plugin.d.ts.map +1 -0
  185. package/dist/plugin.js +17 -0
  186. package/dist/query-aggregate.d.ts +82 -0
  187. package/dist/query-aggregate.d.ts.map +1 -0
  188. package/dist/query-aggregate.js +1 -0
  189. package/dist/query-args.d.ts +41 -0
  190. package/dist/query-args.d.ts.map +1 -0
  191. package/dist/query-args.js +263 -0
  192. package/dist/query-bulk.d.ts +35 -0
  193. package/dist/query-bulk.d.ts.map +1 -0
  194. package/dist/query-bulk.js +1 -0
  195. package/dist/query-conditions.d.ts +9 -0
  196. package/dist/query-conditions.d.ts.map +1 -0
  197. package/dist/query-conditions.js +46 -0
  198. package/dist/query-context.d.ts +32 -0
  199. package/dist/query-context.d.ts.map +1 -0
  200. package/dist/query-context.js +55 -0
  201. package/dist/query-filter.d.ts +46 -0
  202. package/dist/query-filter.d.ts.map +1 -0
  203. package/dist/query-filter.js +1 -0
  204. package/dist/query-group.d.ts +82 -0
  205. package/dist/query-group.d.ts.map +1 -0
  206. package/dist/query-group.js +1 -0
  207. package/dist/query-json.d.ts +9 -0
  208. package/dist/query-json.d.ts.map +1 -0
  209. package/dist/query-json.js +66 -0
  210. package/dist/query-order.d.ts +15 -0
  211. package/dist/query-order.d.ts.map +1 -0
  212. package/dist/query-order.js +115 -0
  213. package/dist/query-project.d.ts +15 -0
  214. package/dist/query-project.d.ts.map +1 -0
  215. package/dist/query-project.js +45 -0
  216. package/dist/query-search.d.ts +24 -0
  217. package/dist/query-search.d.ts.map +1 -0
  218. package/dist/query-search.js +2 -0
  219. package/dist/query-values.d.ts +28 -0
  220. package/dist/query-values.d.ts.map +1 -0
  221. package/dist/query-values.js +91 -0
  222. package/dist/query-where.d.ts +46 -0
  223. package/dist/query-where.d.ts.map +1 -0
  224. package/dist/query-where.js +200 -0
  225. package/dist/query-write.d.ts +14 -0
  226. package/dist/query-write.d.ts.map +1 -0
  227. package/dist/query-write.js +260 -0
  228. package/dist/query.d.ts +254 -0
  229. package/dist/query.d.ts.map +1 -0
  230. package/dist/query.js +1 -0
  231. package/dist/record.d.ts +257 -0
  232. package/dist/record.d.ts.map +1 -0
  233. package/dist/record.js +1 -0
  234. package/dist/recorder.d.ts +32 -0
  235. package/dist/recorder.d.ts.map +1 -0
  236. package/dist/recorder.js +152 -0
  237. package/dist/relation-write.d.ts +41 -0
  238. package/dist/relation-write.d.ts.map +1 -0
  239. package/dist/relation-write.js +112 -0
  240. package/dist/relations.d.ts +42 -0
  241. package/dist/relations.d.ts.map +1 -0
  242. package/dist/relations.js +119 -0
  243. package/dist/rules.d.ts +97 -0
  244. package/dist/rules.d.ts.map +1 -0
  245. package/dist/rules.js +71 -0
  246. package/dist/running.d.ts +29 -0
  247. package/dist/running.d.ts.map +1 -0
  248. package/dist/running.js +39 -0
  249. package/dist/schema-indexes.d.ts +11 -0
  250. package/dist/schema-indexes.d.ts.map +1 -0
  251. package/dist/schema-indexes.js +59 -0
  252. package/dist/schema-virtuals.d.ts +19 -0
  253. package/dist/schema-virtuals.d.ts.map +1 -0
  254. package/dist/schema-virtuals.js +100 -0
  255. package/dist/schema.d.ts +35 -0
  256. package/dist/schema.d.ts.map +1 -0
  257. package/dist/schema.js +267 -0
  258. package/dist/scope.d.ts +46 -0
  259. package/dist/scope.d.ts.map +1 -0
  260. package/dist/scope.js +82 -0
  261. package/dist/scratch.d.ts +14 -0
  262. package/dist/scratch.d.ts.map +1 -0
  263. package/dist/scratch.js +10 -0
  264. package/dist/serve.d.ts +2 -0
  265. package/dist/serve.d.ts.map +1 -0
  266. package/dist/serve.js +4 -0
  267. package/dist/symbols.d.ts +10 -0
  268. package/dist/symbols.d.ts.map +1 -0
  269. package/dist/symbols.js +1 -0
  270. package/dist/transaction.d.ts +28 -0
  271. package/dist/transaction.d.ts.map +1 -0
  272. package/dist/transaction.js +156 -0
  273. package/dist/types.d.ts +58 -0
  274. package/dist/types.d.ts.map +1 -0
  275. package/dist/types.js +1 -0
  276. package/dist/update-many.d.ts +7 -0
  277. package/dist/update-many.d.ts.map +1 -0
  278. package/dist/update-many.js +182 -0
  279. package/dist/uuid.d.ts +7 -0
  280. package/dist/uuid.d.ts.map +1 -0
  281. package/dist/uuid.js +48 -0
  282. package/dist/validation.d.ts +24 -0
  283. package/dist/validation.d.ts.map +1 -0
  284. package/dist/validation.js +72 -0
  285. package/dist/virtual-read.d.ts +9 -0
  286. package/dist/virtual-read.d.ts.map +1 -0
  287. package/dist/virtual-read.js +145 -0
  288. package/dist/virtual.d.ts +142 -0
  289. package/dist/virtual.d.ts.map +1 -0
  290. package/dist/virtual.js +1 -0
  291. package/dist/write-context.d.ts +46 -0
  292. package/dist/write-context.d.ts.map +1 -0
  293. package/dist/write-context.js +102 -0
  294. package/dist/write-data.d.ts +26 -0
  295. package/dist/write-data.d.ts.map +1 -0
  296. package/dist/write-data.js +144 -0
  297. package/dist/write-plan.d.ts +107 -0
  298. package/dist/write-plan.d.ts.map +1 -0
  299. package/dist/write-plan.js +170 -0
  300. package/dist/write-target.d.ts +17 -0
  301. package/dist/write-target.d.ts.map +1 -0
  302. package/dist/write-target.js +59 -0
  303. package/dist/writes.d.ts +23 -0
  304. package/dist/writes.d.ts.map +1 -0
  305. package/dist/writes.js +246 -0
  306. package/dist/writing.d.ts +10 -0
  307. package/dist/writing.d.ts.map +1 -0
  308. package/dist/writing.js +66 -0
  309. package/package.json +42 -3
  310. package/src/access.ts +329 -0
  311. package/src/adapter-errors.ts +89 -0
  312. package/src/adapter-json.ts +21 -0
  313. package/src/adapter-migrations.ts +98 -0
  314. package/src/adapter.ts +363 -0
  315. package/src/aggregate.ts +136 -0
  316. package/src/app-internals.ts +26 -0
  317. package/src/app-options.ts +24 -0
  318. package/src/cascade.ts +297 -0
  319. package/src/cli-config.ts +45 -0
  320. package/src/cli-deploy.ts +235 -0
  321. package/src/cli-main.ts +166 -0
  322. package/src/cli-migrate.ts +143 -0
  323. package/src/cli.ts +5 -0
  324. package/src/complete.ts +73 -0
  325. package/src/console-logger.ts +87 -0
  326. package/src/create-many.ts +126 -0
  327. package/src/decimal.ts +74 -0
  328. package/src/define-app.ts +108 -0
  329. package/src/define-enum.ts +26 -0
  330. package/src/define-function.ts +188 -0
  331. package/src/define-model.ts +220 -0
  332. package/src/definition.ts +352 -0
  333. package/src/delete-many.ts +76 -0
  334. package/src/engine.ts +281 -0
  335. package/src/errors.ts +97 -0
  336. package/src/exact.ts +49 -0
  337. package/src/feed.ts +39 -0
  338. package/src/field-codec.ts +72 -0
  339. package/src/field-rules.ts +77 -0
  340. package/src/field-type.ts +219 -0
  341. package/src/fields.ts +383 -0
  342. package/src/function.ts +143 -0
  343. package/src/functions.ts +154 -0
  344. package/src/group-by.ts +186 -0
  345. package/src/group-having.ts +143 -0
  346. package/src/hooks.ts +215 -0
  347. package/src/hosts.ts +11 -0
  348. package/src/identify.ts +95 -0
  349. package/src/index.ts +125 -0
  350. package/src/internal.ts +68 -0
  351. package/src/lifecycle.ts +214 -0
  352. package/src/list-update.ts +71 -0
  353. package/src/live.ts +199 -0
  354. package/src/manifest.ts +71 -0
  355. package/src/memory-aggregate.ts +162 -0
  356. package/src/memory-conditions.ts +88 -0
  357. package/src/memory-draft.ts +319 -0
  358. package/src/memory-json.ts +91 -0
  359. package/src/memory-read.ts +311 -0
  360. package/src/memory-search.ts +149 -0
  361. package/src/memory-values.ts +106 -0
  362. package/src/memory.ts +173 -0
  363. package/src/migrate.ts +152 -0
  364. package/src/model.ts +312 -0
  365. package/src/nested-write.ts +390 -0
  366. package/src/number-update.ts +142 -0
  367. package/src/plugin-app.ts +308 -0
  368. package/src/plugin-code.ts +158 -0
  369. package/src/plugin-use.ts +217 -0
  370. package/src/plugin.ts +400 -0
  371. package/src/query-aggregate.ts +96 -0
  372. package/src/query-args.ts +375 -0
  373. package/src/query-bulk.ts +53 -0
  374. package/src/query-conditions.ts +53 -0
  375. package/src/query-context.ts +104 -0
  376. package/src/query-filter.ts +54 -0
  377. package/src/query-group.ts +137 -0
  378. package/src/query-json.ts +90 -0
  379. package/src/query-order.ts +158 -0
  380. package/src/query-project.ts +73 -0
  381. package/src/query-search.ts +31 -0
  382. package/src/query-values.ts +131 -0
  383. package/src/query-where.ts +318 -0
  384. package/src/query-write.ts +360 -0
  385. package/src/query.ts +400 -0
  386. package/src/record.ts +379 -0
  387. package/src/recorder.ts +212 -0
  388. package/src/relation-write.ts +176 -0
  389. package/src/relations.ts +165 -0
  390. package/src/rules.ts +188 -0
  391. package/src/running.ts +62 -0
  392. package/src/schema-indexes.ts +88 -0
  393. package/src/schema-virtuals.ts +134 -0
  394. package/src/schema.ts +367 -0
  395. package/src/scope.ts +123 -0
  396. package/src/scratch.ts +28 -0
  397. package/src/serve.ts +5 -0
  398. package/src/symbols.ts +11 -0
  399. package/src/transaction.ts +211 -0
  400. package/src/types.ts +79 -0
  401. package/src/update-many.ts +268 -0
  402. package/src/uuid.ts +51 -0
  403. package/src/validation.ts +107 -0
  404. package/src/virtual-read.ts +198 -0
  405. package/src/virtual.ts +187 -0
  406. package/src/write-context.ts +170 -0
  407. package/src/write-data.ts +188 -0
  408. package/src/write-plan.ts +273 -0
  409. package/src/write-target.ts +92 -0
  410. package/src/writes.ts +361 -0
  411. package/src/writing.ts +93 -0
package/src/query.ts ADDED
@@ -0,0 +1,400 @@
1
+ // Query arguments and results, in Prisma Client's form (D-20).
2
+ import type {
3
+ CreateData,
4
+ RecordOf,
5
+ RelationKeys,
6
+ ScalarKeys,
7
+ StoredValue,
8
+ SystemFields,
9
+ TargetFields,
10
+ UniqueKeys,
11
+ UpdateData,
12
+ } from './record.ts'
13
+ import type { Exact } from './exact.ts'
14
+ import type { JsonValue } from './fields.ts'
15
+ import type { AggregateArgs, Aggregates, IsOrdered } from './query-aggregate.ts'
16
+ import type { BulkQueries } from './query-bulk.ts'
17
+ import type {
18
+ JsonPathFilter,
19
+ ListFilter,
20
+ ScalarFilter,
21
+ } from './query-filter.ts'
22
+ import type { Relevance, SearchWhere } from './query-search.ts'
23
+ import type {
24
+ GroupByArgs,
25
+ GroupChecked,
26
+ GroupField,
27
+ Groups,
28
+ SortOrder,
29
+ } from './query-group.ts'
30
+ import type { Identity } from './rules.ts'
31
+ import type { fieldType } from './symbols.ts'
32
+ import type {
33
+ DefaultRow,
34
+ DefaultVirtualKeys,
35
+ VirtualArgs,
36
+ VirtualIncludes,
37
+ VirtualKeys,
38
+ VirtualOutput,
39
+ } from './virtual.ts'
40
+
41
+ type KindOf<X> = X extends { readonly [fieldType]: { readonly kind: infer K } }
42
+ ? K
43
+ : never
44
+ type TargetOf<X> = X extends {
45
+ readonly [fieldType]: { readonly target: infer T }
46
+ }
47
+ ? T
48
+ : never
49
+ type OptionalOne<X> = X extends {
50
+ readonly [fieldType]: { readonly options: { readonly optional: true } }
51
+ }
52
+ ? null
53
+ : never
54
+
55
+ type IsList<X> = X extends {
56
+ readonly [fieldType]: { readonly options: { readonly list: true } }
57
+ }
58
+ ? true
59
+ : false
60
+
61
+ /** A json field's value, any JSON without a schema, or a path filter (D-149). */
62
+ type JsonFilter<V> = V | ScalarFilter<NonNullable<V>> | JsonPathFilter
63
+
64
+ type FilterOf<X> =
65
+ IsList<X> extends true
66
+ ? StoredValue<X> extends readonly (infer E)[]
67
+ ? ListFilter<E>
68
+ : never
69
+ : KindOf<X> extends 'scalar'
70
+ ? X extends { readonly [fieldType]: { readonly json: true } }
71
+ ? JsonFilter<
72
+ unknown extends StoredValue<X> ? JsonValue : StoredValue<X>
73
+ >
74
+ : | StoredValue<X>
75
+ | ScalarFilter<NonNullable<StoredValue<X>>, IsOrdered<X>>
76
+ : KindOf<X> extends 'one'
77
+ ? {
78
+ readonly is?: Where<TargetFields<TargetOf<X>>> | null | undefined
79
+ readonly isNot?: Where<TargetFields<TargetOf<X>>> | null | undefined
80
+ }
81
+ : {
82
+ readonly some?: Where<TargetFields<TargetOf<X>>> | undefined
83
+ readonly every?: Where<TargetFields<TargetOf<X>>> | undefined
84
+ readonly none?: Where<TargetFields<TargetOf<X>>> | undefined
85
+ }
86
+
87
+ /** A plugin field type's stored field (D-122), `never` for a kernel one. */
88
+ type StoredOf<X> = X extends {
89
+ readonly [fieldType]: { readonly stored: infer S }
90
+ }
91
+ ? S
92
+ : never
93
+ /** The fields of a plugin field type, which only a `beforeFind` filters. */
94
+ type PluginKeys<F> = {
95
+ [K in keyof F]: [StoredOf<F[K]>] extends [never] ? never : K
96
+ }[keyof F]
97
+
98
+ /** The system fields' filters and the combinators of a `where` `W`. */
99
+ interface Filters<W> {
100
+ readonly id?: string | Omit<ScalarFilter<string>, 'mode'> | undefined
101
+ readonly createdAt?: Date | ScalarFilter<Date> | undefined
102
+ readonly updatedAt?: Date | ScalarFilter<Date> | undefined
103
+ readonly AND?: W | readonly W[] | undefined
104
+ readonly OR?: readonly W[] | undefined
105
+ readonly NOT?: W | readonly W[] | undefined
106
+ }
107
+
108
+ /** No `where` filters a virtual (D-151). */
109
+ export type Where<F> = {
110
+ readonly [K in Exclude<keyof F, PluginKeys<F> | VirtualKeys<F>>]?:
111
+ FilterOf<F[K]> | undefined
112
+ } & Filters<Where<F>> &
113
+ SearchWhere<F>
114
+
115
+ /** A `beforeFind`'s filter: a plugin field's in its stored form (D-122). */
116
+ export type FindWhere<F> = {
117
+ readonly [K in Exclude<keyof F, VirtualKeys<F>>]?:
118
+ | (K extends PluginKeys<F> ? FilterOf<StoredOf<F[K]>> : FilterOf<F[K]>)
119
+ | undefined
120
+ } & Filters<FindWhere<F>> &
121
+ SearchWhere<F>
122
+
123
+ /** A unique index's value: a scalar's, or a `one` relation's target id. */
124
+ type IndexValue<X> =
125
+ KindOf<X> extends 'one' ? string : NonNullable<StoredValue<X>>
126
+ /** A unique index, targeted flat with exactly its fields (D-52). */
127
+ type IndexTarget<F, X> = X extends readonly (infer K extends keyof F)[]
128
+ ? { readonly [P in K]: IndexValue<F[P]> }
129
+ : never
130
+
131
+ /**
132
+ * `findUnique` and single-row writes target `id`, a unique field or a unique
133
+ * index, whose fields `X` lists (D-52).
134
+ */
135
+ export type UniqueWhere<F, X = never> =
136
+ | { readonly id: string }
137
+ | {
138
+ [K in UniqueKeys<F>]: { readonly [P in K]: StoredValue<F[K]> }
139
+ }[UniqueKeys<F>]
140
+ | IndexTarget<F, X>
141
+
142
+ type Direction = 'asc' | 'desc'
143
+ /**
144
+ * A json field is not sorted: each database orders json its own way (D-94);
145
+ * nor is a list (D-120), nor a plugin field (D-122).
146
+ */
147
+ export type SortedKeys<F> = {
148
+ [K in Exclude<ScalarKeys<F>, PluginKeys<F>>]: F[K] extends {
149
+ readonly [fieldType]: { readonly json: true }
150
+ }
151
+ ? never
152
+ : IsList<F[K]> extends true
153
+ ? never
154
+ : K
155
+ }[Exclude<ScalarKeys<F>, PluginKeys<F>>]
156
+ type KeysOf<F, Kind> = {
157
+ [K in keyof F]: KindOf<F[K]> extends Kind ? K : never
158
+ }[keyof F]
159
+
160
+ /**
161
+ * An optional field sorts with its `null`s first or last (D-149), a `one`
162
+ * relation by its target's fields, a `many` by its count (D-134).
163
+ */
164
+ type Sorts<F> = {
165
+ readonly [K in SortedKeys<F> | keyof SystemFields]?:
166
+ SortOrder<K extends keyof RecordOf<F> ? RecordOf<F>[K] : never> | undefined
167
+ } & {
168
+ readonly [K in KeysOf<F, 'one'>]?:
169
+ Sorts<TargetFields<TargetOf<F[K]>>> | undefined
170
+ } & {
171
+ readonly [K in KeysOf<F, 'many'>]?: { readonly _count: Direction } | undefined
172
+ }
173
+ /** A read's sort, by its `_search`'s relevance too (D-148). */
174
+ export type OrderBy<F> = Sorts<F> & Relevance<F>
175
+
176
+ /** `_count`: every `many` relation, or the ones `select` names (D-134). */
177
+ type Count<F> =
178
+ | true
179
+ | {
180
+ readonly select: {
181
+ readonly [K in KeysOf<F, 'many'>]?:
182
+ | boolean
183
+ | { readonly where?: Where<TargetFields<TargetOf<F[K]>>> | undefined }
184
+ }
185
+ }
186
+
187
+ /** A model with a `many` relation takes `_count`. */
188
+ type Counts<F> = [KeysOf<F, 'many'>] extends [never]
189
+ ? unknown
190
+ : { readonly _count?: Count<F> | false }
191
+
192
+ type Counted<F, C> = C extends { readonly select: infer S }
193
+ ? {
194
+ readonly [
195
+ K in keyof S as S[K] extends false | undefined ? never : K
196
+ ]: number
197
+ }
198
+ : C extends true
199
+ ? { readonly [K in KeysOf<F, 'many'>]: number }
200
+ : unknown
201
+
202
+ /** The `_count` of a `select` or an `include` `A`. */
203
+ type CountOf<F, A> = A extends { readonly _count: infer C }
204
+ ? C extends false | undefined
205
+ ? unknown
206
+ : { readonly _count: Counted<F, C> }
207
+ : unknown
208
+
209
+ type RelationArgs<X> = Shaping<TargetFields<TargetOf<X>>> &
210
+ (KindOf<X> extends 'many'
211
+ ? {
212
+ readonly where?: Where<TargetFields<TargetOf<X>>> | undefined
213
+ readonly orderBy?: OrderBy<TargetFields<TargetOf<X>>> | undefined
214
+ readonly take?: number | undefined
215
+ readonly skip?: number | undefined
216
+ readonly cursor?: UniqueWhere<TargetFields<TargetOf<X>>> | undefined
217
+ }
218
+ : unknown)
219
+
220
+ export type Select<F> = {
221
+ readonly [K in keyof SystemFields]?: boolean
222
+ } & {
223
+ readonly [K in keyof F]?: KindOf<F[K]> extends 'scalar'
224
+ ? boolean
225
+ : KindOf<F[K]> extends 'virtual'
226
+ ? VirtualArgs<F[K]>
227
+ : boolean | RelationArgs<F[K]>
228
+ } & Counts<F>
229
+
230
+ /** A model without relations or virtuals takes no `include`. */
231
+ export type Include<F> = [RelationKeys<F> | VirtualKeys<F>] extends [never]
232
+ ? never
233
+ : {
234
+ readonly [K in RelationKeys<F>]?: boolean | RelationArgs<F[K]>
235
+ } & VirtualIncludes<F> &
236
+ Counts<F>
237
+
238
+ type Output<X, A> =
239
+ KindOf<X> extends 'scalar'
240
+ ? StoredValue<X>
241
+ : KindOf<X> extends 'virtual'
242
+ ? VirtualOutput<X, A>
243
+ : KindOf<X> extends 'one'
244
+ ? Payload<TargetFields<TargetOf<X>>, A> | OptionalOne<X>
245
+ : Payload<TargetFields<TargetOf<X>>, A>[]
246
+
247
+ type Selected<F, S> = {
248
+ readonly [
249
+ K in Exclude<keyof S, '_count'> as S[K] extends false | undefined
250
+ ? never
251
+ : K
252
+ ]: K extends keyof F
253
+ ? Output<F[K], S[K]>
254
+ : K extends keyof SystemFields
255
+ ? SystemFields[K]
256
+ : never
257
+ }
258
+
259
+ type Included<F, I> = {
260
+ readonly [
261
+ K in Exclude<keyof I, '_count'> as I[K] extends false | undefined
262
+ ? never
263
+ : K
264
+ ]: K extends keyof F ? Output<F[K], I[K]> : never
265
+ }
266
+
267
+ /** `omit`: scalars, system fields, default virtuals left out (D-135). */
268
+ export type OmitArgs<F> = {
269
+ readonly [K in keyof RecordOf<F> | DefaultVirtualKeys<F>]?: boolean
270
+ }
271
+
272
+ /** `select` and `omit` exclude each other (D-135). */
273
+ export type Shaping<F> = { readonly include?: Include<F> } & (
274
+ | { readonly select?: Select<F>; readonly omit?: undefined }
275
+ | { readonly select?: undefined; readonly omit?: OmitArgs<F> }
276
+ )
277
+
278
+ /** The scalar and system fields, less those `omit` sets to `true`. */
279
+ type Kept<F, A> = A extends { readonly omit: infer O }
280
+ ? Omit<
281
+ DefaultRow<F>,
282
+ { [K in keyof O]: O[K] extends true ? K : never }[keyof O]
283
+ >
284
+ : DefaultRow<F>
285
+
286
+ /** Without `select`, scalar fields return and relations do not (D-20). */
287
+ export type Payload<F, A> = A extends { readonly select: infer S }
288
+ ? Selected<F, S> & CountOf<F, S>
289
+ : A extends { readonly include: infer I }
290
+ ? Kept<F, A> & Included<F, I> & CountOf<F, I>
291
+ : Kept<F, A>
292
+
293
+ export type QueryOptions = { readonly as?: Identity }
294
+
295
+ /** `findFirst`; `cursor` starts at a unique target. */
296
+ export type FindFirstArgs<F, X = never> = Shaping<F> & {
297
+ readonly where?: Where<F> | undefined
298
+ readonly orderBy?: OrderBy<F> | readonly OrderBy<F>[] | undefined
299
+ readonly take?: number | undefined
300
+ readonly skip?: number | undefined
301
+ readonly cursor?: UniqueWhere<F, X> | undefined
302
+ }
303
+
304
+ /** `findMany`: `distinct` keeps one row per key, without `cursor` (D-147). */
305
+ export type FindManyArgs<F, X = never, N = never> = FindFirstArgs<F, X> & {
306
+ readonly distinct?:
307
+ readonly [GroupField<F, N>, ...GroupField<F, N>[]] | undefined
308
+ }
309
+
310
+ export type FindUniqueArgs<F, X = never> = Shaping<F> & {
311
+ readonly where: UniqueWhere<F, X>
312
+ }
313
+
314
+ export type CreateArgs<F, N = never> = Shaping<F> & {
315
+ readonly data: CreateData<F, N>
316
+ }
317
+
318
+ export type UpdateArgs<F, X = never, N = never> = Shaping<F> & {
319
+ readonly where: UniqueWhere<F, X>
320
+ readonly data: UpdateData<F, N>
321
+ }
322
+
323
+ /** `update` the row `where` targets, or `create` it when absent (D-142). */
324
+ export type UpsertArgs<F, X = never, N = never> = Shaping<F> & {
325
+ readonly where: UniqueWhere<F, X>
326
+ readonly create: CreateData<F, N>
327
+ readonly update: UpdateData<F, N>
328
+ }
329
+
330
+ /** Model methods (D-18), the subset the prototype measures. */
331
+ // Each query is a closure on its model: it can be passed around unbound.
332
+ /** `N` is the model's name, which nested creation needs (D-128). */
333
+ export interface Queries<F, X = never, N = never> extends BulkQueries<F> {
334
+ findMany<const A extends FindManyArgs<F, X, N>>(
335
+ this: void,
336
+ args?: A & NoInfer<Exact<A, FindManyArgs<F, X, N>>>,
337
+ options?: QueryOptions,
338
+ ): Promise<Payload<F, A>[]>
339
+ findFirst<const A extends FindFirstArgs<F, X>>(
340
+ this: void,
341
+ args?: A & NoInfer<Exact<A, FindFirstArgs<F, X>>>,
342
+ options?: QueryOptions,
343
+ ): Promise<Payload<F, A> | null>
344
+ findUnique<const A extends FindUniqueArgs<F, X>>(
345
+ this: void,
346
+ args: A & NoInfer<Exact<A, FindUniqueArgs<F, X>>>,
347
+ options?: QueryOptions,
348
+ ): Promise<Payload<F, A> | null>
349
+ /** `findFirst`, which fails with `NOT_FOUND` rather than `null` (D-135). */
350
+ findFirstOrThrow<const A extends FindFirstArgs<F, X>>(
351
+ this: void,
352
+ args?: A & NoInfer<Exact<A, FindFirstArgs<F, X>>>,
353
+ options?: QueryOptions,
354
+ ): Promise<Payload<F, A>>
355
+ /** `findUnique`, which fails with `NOT_FOUND` rather than `null` (D-135). */
356
+ findUniqueOrThrow<const A extends FindUniqueArgs<F, X>>(
357
+ this: void,
358
+ args: A & NoInfer<Exact<A, FindUniqueArgs<F, X>>>,
359
+ options?: QueryOptions,
360
+ ): Promise<Payload<F, A>>
361
+ count(
362
+ this: void,
363
+ args?: { readonly where?: Where<F> },
364
+ options?: QueryOptions,
365
+ ): Promise<number>
366
+ /** Of the rows the caller reads; server code only (D-143). */
367
+ aggregate<const A extends AggregateArgs<F>>(
368
+ this: void,
369
+ args: A & NoInfer<Exact<A, AggregateArgs<F>>>,
370
+ options?: QueryOptions,
371
+ ): Promise<Aggregates<F, A>>
372
+ /** Of the rows the caller reads, by `by`; server code only (D-146). */
373
+ groupBy<const A extends GroupByArgs<F, N>>(
374
+ this: void,
375
+ args: A & NoInfer<GroupChecked<F, N, A>>,
376
+ options?: QueryOptions,
377
+ ): Promise<Groups<F, N, A>>
378
+ create<const A extends CreateArgs<F, N>>(
379
+ this: void,
380
+ args: A & NoInfer<Exact<A, CreateArgs<F, N>>>,
381
+ options?: QueryOptions,
382
+ ): Promise<Payload<F, A>>
383
+ update<const A extends UpdateArgs<F, X, N>>(
384
+ this: void,
385
+ args: A & NoInfer<Exact<A, UpdateArgs<F, X, N>>>,
386
+ options?: QueryOptions,
387
+ ): Promise<Payload<F, A>>
388
+ /** The branch that runs applies its own rules and hooks (D-142). */
389
+ upsert<const A extends UpsertArgs<F, X, N>>(
390
+ this: void,
391
+ args: A & NoInfer<Exact<A, UpsertArgs<F, X, N>>>,
392
+ options?: QueryOptions,
393
+ ): Promise<Payload<F, A>>
394
+ /** Its relations and counts are read as they were before it (D-135). */
395
+ delete<const A extends FindUniqueArgs<F, X>>(
396
+ this: void,
397
+ args: A & NoInfer<Exact<A, FindUniqueArgs<F, X>>>,
398
+ options?: QueryOptions,
399
+ ): Promise<Payload<F, A>>
400
+ }