@proseql/core 0.1.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 (342) hide show
  1. package/LICENSE +21 -0
  2. package/dist/errors/crud-errors.d.ts +98 -0
  3. package/dist/errors/crud-errors.d.ts.map +1 -0
  4. package/dist/errors/crud-errors.js +23 -0
  5. package/dist/errors/crud-errors.js.map +1 -0
  6. package/dist/errors/index.d.ts +16 -0
  7. package/dist/errors/index.d.ts.map +1 -0
  8. package/dist/errors/index.js +12 -0
  9. package/dist/errors/index.js.map +1 -0
  10. package/dist/errors/migration-errors.d.ts +22 -0
  11. package/dist/errors/migration-errors.d.ts.map +1 -0
  12. package/dist/errors/migration-errors.js +14 -0
  13. package/dist/errors/migration-errors.js.map +1 -0
  14. package/dist/errors/plugin-errors.d.ts +15 -0
  15. package/dist/errors/plugin-errors.d.ts.map +1 -0
  16. package/dist/errors/plugin-errors.js +11 -0
  17. package/dist/errors/plugin-errors.js.map +1 -0
  18. package/dist/errors/query-errors.d.ts +31 -0
  19. package/dist/errors/query-errors.d.ts.map +1 -0
  20. package/dist/errors/query-errors.js +11 -0
  21. package/dist/errors/query-errors.js.map +1 -0
  22. package/dist/errors/storage-errors.d.ts +30 -0
  23. package/dist/errors/storage-errors.d.ts.map +1 -0
  24. package/dist/errors/storage-errors.js +11 -0
  25. package/dist/errors/storage-errors.js.map +1 -0
  26. package/dist/factories/crud-factory-with-relationships.d.ts +28 -0
  27. package/dist/factories/crud-factory-with-relationships.d.ts.map +1 -0
  28. package/dist/factories/crud-factory-with-relationships.js +8 -0
  29. package/dist/factories/crud-factory-with-relationships.js.map +1 -0
  30. package/dist/factories/crud-factory.d.ts +25 -0
  31. package/dist/factories/crud-factory.d.ts.map +1 -0
  32. package/dist/factories/crud-factory.js +8 -0
  33. package/dist/factories/crud-factory.js.map +1 -0
  34. package/dist/factories/database-effect.d.ts +241 -0
  35. package/dist/factories/database-effect.d.ts.map +1 -0
  36. package/dist/factories/database-effect.js +859 -0
  37. package/dist/factories/database-effect.js.map +1 -0
  38. package/dist/hooks/hook-runner.d.ts +60 -0
  39. package/dist/hooks/hook-runner.d.ts.map +1 -0
  40. package/dist/hooks/hook-runner.js +107 -0
  41. package/dist/hooks/hook-runner.js.map +1 -0
  42. package/dist/index.d.ts +84 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +110 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/indexes/index-lookup.d.ts +33 -0
  47. package/dist/indexes/index-lookup.d.ts.map +1 -0
  48. package/dist/indexes/index-lookup.js +180 -0
  49. package/dist/indexes/index-lookup.js.map +1 -0
  50. package/dist/indexes/index-manager.d.ts +118 -0
  51. package/dist/indexes/index-manager.d.ts.map +1 -0
  52. package/dist/indexes/index-manager.js +345 -0
  53. package/dist/indexes/index-manager.js.map +1 -0
  54. package/dist/indexes/search-index.d.ts +179 -0
  55. package/dist/indexes/search-index.d.ts.map +1 -0
  56. package/dist/indexes/search-index.js +405 -0
  57. package/dist/indexes/search-index.js.map +1 -0
  58. package/dist/migrations/migration-runner.d.ts +70 -0
  59. package/dist/migrations/migration-runner.d.ts.map +1 -0
  60. package/dist/migrations/migration-runner.js +271 -0
  61. package/dist/migrations/migration-runner.js.map +1 -0
  62. package/dist/migrations/migration-types.d.ts +63 -0
  63. package/dist/migrations/migration-types.d.ts.map +1 -0
  64. package/dist/migrations/migration-types.js +5 -0
  65. package/dist/migrations/migration-types.js.map +1 -0
  66. package/dist/operations/crud/create-with-relationships.d.ts +44 -0
  67. package/dist/operations/crud/create-with-relationships.d.ts.map +1 -0
  68. package/dist/operations/crud/create-with-relationships.js +483 -0
  69. package/dist/operations/crud/create-with-relationships.js.map +1 -0
  70. package/dist/operations/crud/create.d.ts +48 -0
  71. package/dist/operations/crud/create.d.ts.map +1 -0
  72. package/dist/operations/crud/create.js +333 -0
  73. package/dist/operations/crud/create.js.map +1 -0
  74. package/dist/operations/crud/delete-with-relationships.d.ts +63 -0
  75. package/dist/operations/crud/delete-with-relationships.d.ts.map +1 -0
  76. package/dist/operations/crud/delete-with-relationships.js +395 -0
  77. package/dist/operations/crud/delete-with-relationships.js.map +1 -0
  78. package/dist/operations/crud/delete.d.ts +58 -0
  79. package/dist/operations/crud/delete.d.ts.map +1 -0
  80. package/dist/operations/crud/delete.js +267 -0
  81. package/dist/operations/crud/delete.js.map +1 -0
  82. package/dist/operations/crud/unique-check.d.ts +114 -0
  83. package/dist/operations/crud/unique-check.d.ts.map +1 -0
  84. package/dist/operations/crud/unique-check.js +383 -0
  85. package/dist/operations/crud/unique-check.js.map +1 -0
  86. package/dist/operations/crud/update-with-relationships.d.ts +45 -0
  87. package/dist/operations/crud/update-with-relationships.d.ts.map +1 -0
  88. package/dist/operations/crud/update-with-relationships.js +516 -0
  89. package/dist/operations/crud/update-with-relationships.js.map +1 -0
  90. package/dist/operations/crud/update.d.ts +91 -0
  91. package/dist/operations/crud/update.d.ts.map +1 -0
  92. package/dist/operations/crud/update.js +505 -0
  93. package/dist/operations/crud/update.js.map +1 -0
  94. package/dist/operations/crud/upsert.d.ts +52 -0
  95. package/dist/operations/crud/upsert.d.ts.map +1 -0
  96. package/dist/operations/crud/upsert.js +386 -0
  97. package/dist/operations/crud/upsert.js.map +1 -0
  98. package/dist/operations/query/aggregate.d.ts +30 -0
  99. package/dist/operations/query/aggregate.d.ts.map +1 -0
  100. package/dist/operations/query/aggregate.js +227 -0
  101. package/dist/operations/query/aggregate.js.map +1 -0
  102. package/dist/operations/query/cursor-stream.d.ts +18 -0
  103. package/dist/operations/query/cursor-stream.d.ts.map +1 -0
  104. package/dist/operations/query/cursor-stream.js +199 -0
  105. package/dist/operations/query/cursor-stream.js.map +1 -0
  106. package/dist/operations/query/filter-stream.d.ts +12 -0
  107. package/dist/operations/query/filter-stream.d.ts.map +1 -0
  108. package/dist/operations/query/filter-stream.js +167 -0
  109. package/dist/operations/query/filter-stream.js.map +1 -0
  110. package/dist/operations/query/filter.d.ts +13 -0
  111. package/dist/operations/query/filter.d.ts.map +1 -0
  112. package/dist/operations/query/filter.js +267 -0
  113. package/dist/operations/query/filter.js.map +1 -0
  114. package/dist/operations/query/paginate-stream.d.ts +11 -0
  115. package/dist/operations/query/paginate-stream.d.ts.map +1 -0
  116. package/dist/operations/query/paginate-stream.js +22 -0
  117. package/dist/operations/query/paginate-stream.js.map +1 -0
  118. package/dist/operations/query/query-helpers.d.ts +14 -0
  119. package/dist/operations/query/query-helpers.d.ts.map +1 -0
  120. package/dist/operations/query/query-helpers.js +22 -0
  121. package/dist/operations/query/query-helpers.js.map +1 -0
  122. package/dist/operations/query/resolve-computed.d.ts +142 -0
  123. package/dist/operations/query/resolve-computed.d.ts.map +1 -0
  124. package/dist/operations/query/resolve-computed.js +197 -0
  125. package/dist/operations/query/resolve-computed.js.map +1 -0
  126. package/dist/operations/query/search.d.ts +110 -0
  127. package/dist/operations/query/search.d.ts.map +1 -0
  128. package/dist/operations/query/search.js +188 -0
  129. package/dist/operations/query/search.js.map +1 -0
  130. package/dist/operations/query/select-stream.d.ts +27 -0
  131. package/dist/operations/query/select-stream.d.ts.map +1 -0
  132. package/dist/operations/query/select-stream.js +88 -0
  133. package/dist/operations/query/select-stream.js.map +1 -0
  134. package/dist/operations/query/select.d.ts +54 -0
  135. package/dist/operations/query/select.d.ts.map +1 -0
  136. package/dist/operations/query/select.js +159 -0
  137. package/dist/operations/query/select.js.map +1 -0
  138. package/dist/operations/query/sort-stream.d.ts +46 -0
  139. package/dist/operations/query/sort-stream.d.ts.map +1 -0
  140. package/dist/operations/query/sort-stream.js +158 -0
  141. package/dist/operations/query/sort-stream.js.map +1 -0
  142. package/dist/operations/query/sort.d.ts +9 -0
  143. package/dist/operations/query/sort.d.ts.map +1 -0
  144. package/dist/operations/query/sort.js +58 -0
  145. package/dist/operations/query/sort.js.map +1 -0
  146. package/dist/operations/relationships/populate-stream.d.ts +29 -0
  147. package/dist/operations/relationships/populate-stream.d.ts.map +1 -0
  148. package/dist/operations/relationships/populate-stream.js +159 -0
  149. package/dist/operations/relationships/populate-stream.js.map +1 -0
  150. package/dist/operations/relationships/populate.d.ts +15 -0
  151. package/dist/operations/relationships/populate.d.ts.map +1 -0
  152. package/dist/operations/relationships/populate.js +228 -0
  153. package/dist/operations/relationships/populate.js.map +1 -0
  154. package/dist/plugins/plugin-hooks.d.ts +25 -0
  155. package/dist/plugins/plugin-hooks.d.ts.map +1 -0
  156. package/dist/plugins/plugin-hooks.js +64 -0
  157. package/dist/plugins/plugin-hooks.js.map +1 -0
  158. package/dist/plugins/plugin-registry.d.ts +26 -0
  159. package/dist/plugins/plugin-registry.d.ts.map +1 -0
  160. package/dist/plugins/plugin-registry.js +150 -0
  161. package/dist/plugins/plugin-registry.js.map +1 -0
  162. package/dist/plugins/plugin-types.d.ts +95 -0
  163. package/dist/plugins/plugin-types.d.ts.map +1 -0
  164. package/dist/plugins/plugin-types.js +6 -0
  165. package/dist/plugins/plugin-types.js.map +1 -0
  166. package/dist/plugins/plugin-validation.d.ts +49 -0
  167. package/dist/plugins/plugin-validation.d.ts.map +1 -0
  168. package/dist/plugins/plugin-validation.js +295 -0
  169. package/dist/plugins/plugin-validation.js.map +1 -0
  170. package/dist/reactive/change-event.d.ts +44 -0
  171. package/dist/reactive/change-event.d.ts.map +1 -0
  172. package/dist/reactive/change-event.js +49 -0
  173. package/dist/reactive/change-event.js.map +1 -0
  174. package/dist/reactive/change-pubsub.d.ts +32 -0
  175. package/dist/reactive/change-pubsub.d.ts.map +1 -0
  176. package/dist/reactive/change-pubsub.js +31 -0
  177. package/dist/reactive/change-pubsub.js.map +1 -0
  178. package/dist/reactive/evaluate-query.d.ts +62 -0
  179. package/dist/reactive/evaluate-query.d.ts.map +1 -0
  180. package/dist/reactive/evaluate-query.js +57 -0
  181. package/dist/reactive/evaluate-query.js.map +1 -0
  182. package/dist/reactive/watch-by-id.d.ts +53 -0
  183. package/dist/reactive/watch-by-id.d.ts.map +1 -0
  184. package/dist/reactive/watch-by-id.js +55 -0
  185. package/dist/reactive/watch-by-id.js.map +1 -0
  186. package/dist/reactive/watch.d.ts +78 -0
  187. package/dist/reactive/watch.d.ts.map +1 -0
  188. package/dist/reactive/watch.js +133 -0
  189. package/dist/reactive/watch.js.map +1 -0
  190. package/dist/serializers/codecs/hjson.d.ts +33 -0
  191. package/dist/serializers/codecs/hjson.d.ts.map +1 -0
  192. package/dist/serializers/codecs/hjson.js +40 -0
  193. package/dist/serializers/codecs/hjson.js.map +1 -0
  194. package/dist/serializers/codecs/json.d.ts +22 -0
  195. package/dist/serializers/codecs/json.d.ts.map +1 -0
  196. package/dist/serializers/codecs/json.js +28 -0
  197. package/dist/serializers/codecs/json.js.map +1 -0
  198. package/dist/serializers/codecs/json5.d.ts +26 -0
  199. package/dist/serializers/codecs/json5.d.ts.map +1 -0
  200. package/dist/serializers/codecs/json5.js +33 -0
  201. package/dist/serializers/codecs/json5.js.map +1 -0
  202. package/dist/serializers/codecs/jsonc.d.ts +29 -0
  203. package/dist/serializers/codecs/jsonc.d.ts.map +1 -0
  204. package/dist/serializers/codecs/jsonc.js +38 -0
  205. package/dist/serializers/codecs/jsonc.js.map +1 -0
  206. package/dist/serializers/codecs/jsonl.d.ts +17 -0
  207. package/dist/serializers/codecs/jsonl.d.ts.map +1 -0
  208. package/dist/serializers/codecs/jsonl.js +31 -0
  209. package/dist/serializers/codecs/jsonl.js.map +1 -0
  210. package/dist/serializers/codecs/prose.d.ts +419 -0
  211. package/dist/serializers/codecs/prose.d.ts.map +1 -0
  212. package/dist/serializers/codecs/prose.js +1060 -0
  213. package/dist/serializers/codecs/prose.js.map +1 -0
  214. package/dist/serializers/codecs/toml.d.ts +23 -0
  215. package/dist/serializers/codecs/toml.d.ts.map +1 -0
  216. package/dist/serializers/codecs/toml.js +66 -0
  217. package/dist/serializers/codecs/toml.js.map +1 -0
  218. package/dist/serializers/codecs/toon.d.ts +20 -0
  219. package/dist/serializers/codecs/toon.d.ts.map +1 -0
  220. package/dist/serializers/codecs/toon.js +33 -0
  221. package/dist/serializers/codecs/toon.js.map +1 -0
  222. package/dist/serializers/codecs/yaml.d.ts +24 -0
  223. package/dist/serializers/codecs/yaml.d.ts.map +1 -0
  224. package/dist/serializers/codecs/yaml.js +31 -0
  225. package/dist/serializers/codecs/yaml.js.map +1 -0
  226. package/dist/serializers/format-codec.d.ts +53 -0
  227. package/dist/serializers/format-codec.d.ts.map +1 -0
  228. package/dist/serializers/format-codec.js +148 -0
  229. package/dist/serializers/format-codec.js.map +1 -0
  230. package/dist/serializers/presets.d.ts +48 -0
  231. package/dist/serializers/presets.d.ts.map +1 -0
  232. package/dist/serializers/presets.js +72 -0
  233. package/dist/serializers/presets.js.map +1 -0
  234. package/dist/serializers/serializer-service.d.ts +11 -0
  235. package/dist/serializers/serializer-service.d.ts.map +1 -0
  236. package/dist/serializers/serializer-service.js +4 -0
  237. package/dist/serializers/serializer-service.js.map +1 -0
  238. package/dist/state/collection-state.d.ts +19 -0
  239. package/dist/state/collection-state.d.ts.map +1 -0
  240. package/dist/state/collection-state.js +15 -0
  241. package/dist/state/collection-state.js.map +1 -0
  242. package/dist/state/state-operations.d.ts +38 -0
  243. package/dist/state/state-operations.d.ts.map +1 -0
  244. package/dist/state/state-operations.js +65 -0
  245. package/dist/state/state-operations.js.map +1 -0
  246. package/dist/storage/in-memory-adapter-layer.d.ts +16 -0
  247. package/dist/storage/in-memory-adapter-layer.d.ts.map +1 -0
  248. package/dist/storage/in-memory-adapter-layer.js +81 -0
  249. package/dist/storage/in-memory-adapter-layer.js.map +1 -0
  250. package/dist/storage/persistence-effect.d.ts +244 -0
  251. package/dist/storage/persistence-effect.d.ts.map +1 -0
  252. package/dist/storage/persistence-effect.js +551 -0
  253. package/dist/storage/persistence-effect.js.map +1 -0
  254. package/dist/storage/storage-service.d.ts +22 -0
  255. package/dist/storage/storage-service.d.ts.map +1 -0
  256. package/dist/storage/storage-service.js +4 -0
  257. package/dist/storage/storage-service.js.map +1 -0
  258. package/dist/storage/transforms.d.ts +183 -0
  259. package/dist/storage/transforms.d.ts.map +1 -0
  260. package/dist/storage/transforms.js +263 -0
  261. package/dist/storage/transforms.js.map +1 -0
  262. package/dist/transactions/transaction.d.ts +87 -0
  263. package/dist/transactions/transaction.d.ts.map +1 -0
  264. package/dist/transactions/transaction.js +240 -0
  265. package/dist/transactions/transaction.js.map +1 -0
  266. package/dist/types/aggregate-types.d.ts +73 -0
  267. package/dist/types/aggregate-types.d.ts.map +1 -0
  268. package/dist/types/aggregate-types.js +14 -0
  269. package/dist/types/aggregate-types.js.map +1 -0
  270. package/dist/types/computed-types.d.ts +71 -0
  271. package/dist/types/computed-types.d.ts.map +1 -0
  272. package/dist/types/computed-types.js +8 -0
  273. package/dist/types/computed-types.js.map +1 -0
  274. package/dist/types/crud-relationship-types.d.ts +180 -0
  275. package/dist/types/crud-relationship-types.d.ts.map +1 -0
  276. package/dist/types/crud-relationship-types.js +17 -0
  277. package/dist/types/crud-relationship-types.js.map +1 -0
  278. package/dist/types/crud-types.d.ts +343 -0
  279. package/dist/types/crud-types.d.ts.map +1 -0
  280. package/dist/types/crud-types.js +43 -0
  281. package/dist/types/crud-types.js.map +1 -0
  282. package/dist/types/cursor-types.d.ts +52 -0
  283. package/dist/types/cursor-types.d.ts.map +1 -0
  284. package/dist/types/cursor-types.js +2 -0
  285. package/dist/types/cursor-types.js.map +1 -0
  286. package/dist/types/database-config-types.d.ts +196 -0
  287. package/dist/types/database-config-types.d.ts.map +1 -0
  288. package/dist/types/database-config-types.js +11 -0
  289. package/dist/types/database-config-types.js.map +1 -0
  290. package/dist/types/hook-types.d.ts +158 -0
  291. package/dist/types/hook-types.d.ts.map +1 -0
  292. package/dist/types/hook-types.js +6 -0
  293. package/dist/types/hook-types.js.map +1 -0
  294. package/dist/types/index-types.d.ts +42 -0
  295. package/dist/types/index-types.d.ts.map +1 -0
  296. package/dist/types/index-types.js +8 -0
  297. package/dist/types/index-types.js.map +1 -0
  298. package/dist/types/operators.d.ts +5 -0
  299. package/dist/types/operators.d.ts.map +1 -0
  300. package/dist/types/operators.js +297 -0
  301. package/dist/types/operators.js.map +1 -0
  302. package/dist/types/query-overloads.d.ts +54 -0
  303. package/dist/types/query-overloads.d.ts.map +1 -0
  304. package/dist/types/query-overloads.js +3 -0
  305. package/dist/types/query-overloads.js.map +1 -0
  306. package/dist/types/reactive-types.d.ts +75 -0
  307. package/dist/types/reactive-types.d.ts.map +1 -0
  308. package/dist/types/reactive-types.js +7 -0
  309. package/dist/types/reactive-types.js.map +1 -0
  310. package/dist/types/schema-types.d.ts +56 -0
  311. package/dist/types/schema-types.d.ts.map +1 -0
  312. package/dist/types/schema-types.js +8 -0
  313. package/dist/types/schema-types.js.map +1 -0
  314. package/dist/types/search-types.d.ts +82 -0
  315. package/dist/types/search-types.d.ts.map +1 -0
  316. package/dist/types/search-types.js +110 -0
  317. package/dist/types/search-types.js.map +1 -0
  318. package/dist/types/types.d.ts +286 -0
  319. package/dist/types/types.d.ts.map +1 -0
  320. package/dist/types/types.js +2 -0
  321. package/dist/types/types.js.map +1 -0
  322. package/dist/utils/id-generator.d.ts +97 -0
  323. package/dist/utils/id-generator.d.ts.map +1 -0
  324. package/dist/utils/id-generator.js +247 -0
  325. package/dist/utils/id-generator.js.map +1 -0
  326. package/dist/utils/nested-path.d.ts +56 -0
  327. package/dist/utils/nested-path.d.ts.map +1 -0
  328. package/dist/utils/nested-path.js +119 -0
  329. package/dist/utils/nested-path.js.map +1 -0
  330. package/dist/utils/path.d.ts +16 -0
  331. package/dist/utils/path.d.ts.map +1 -0
  332. package/dist/utils/path.js +24 -0
  333. package/dist/utils/path.js.map +1 -0
  334. package/dist/validators/foreign-key.d.ts +49 -0
  335. package/dist/validators/foreign-key.d.ts.map +1 -0
  336. package/dist/validators/foreign-key.js +153 -0
  337. package/dist/validators/foreign-key.js.map +1 -0
  338. package/dist/validators/schema-validator.d.ts +19 -0
  339. package/dist/validators/schema-validator.d.ts.map +1 -0
  340. package/dist/validators/schema-validator.js +34 -0
  341. package/dist/validators/schema-validator.js.map +1 -0
  342. package/package.json +57 -0
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Effect-based database factory.
3
+ *
4
+ * Creates an in-memory database with typed collections, each backed by
5
+ * Ref<ReadonlyMap<string, T>> for O(1) ID lookup and atomic state updates.
6
+ *
7
+ * Query pipeline: Ref snapshot → Stream.fromIterable → filter → populate → sort → paginate → select
8
+ * CRUD: Effect-based operations with typed error channels
9
+ * Persistence: Optional debounced save after each CRUD mutation via Effect.fork
10
+ */
11
+ import { Effect, Schema, type Scope, Stream } from "effect";
12
+ import { type DuplicateKeyError, type ForeignKeyError, type HookError, NotFoundError, OperationError, type TransactionError, type UniqueConstraintError, ValidationError } from "../errors/crud-errors.js";
13
+ import type { MigrationError } from "../errors/migration-errors.js";
14
+ import type { PluginError } from "../errors/plugin-errors.js";
15
+ import type { DanglingReferenceError } from "../errors/query-errors.js";
16
+ import type { SerializationError, StorageError, UnsupportedFormatError } from "../errors/storage-errors.js";
17
+ import type { DryRunResult } from "../migrations/migration-types.js";
18
+ import type { ProseQLPlugin } from "../plugins/plugin-types.js";
19
+ import { type FormatCodec } from "../serializers/format-codec.js";
20
+ import { SerializerRegistry } from "../serializers/serializer-service.js";
21
+ import { StorageAdapter } from "../storage/storage-service.js";
22
+ import { type AggregateConfig, type AggregateResult, type GroupedAggregateResult } from "../types/aggregate-types.js";
23
+ import type { CreateWithRelationshipsInput, DeleteWithRelationshipsOptions, DeleteWithRelationshipsResult, UpdateWithRelationshipsInput } from "../types/crud-relationship-types.js";
24
+ import type { CreateInput, CreateManyOptions, CreateManyResult, DeleteManyResult, MinimalEntity, TransactionContext, UpdateManyResult, UpdateWithOperators, UpsertInput, UpsertManyResult, UpsertResult } from "../types/crud-types.js";
25
+ import type { CursorConfig, RunnableCursorPage } from "../types/cursor-types.js";
26
+ import type { DatabaseConfig } from "../types/database-config-types.js";
27
+ import type { GenerateDatabase, GenerateDatabaseWithPersistence, RelationshipDef } from "../types/types.js";
28
+ /**
29
+ * An Effect with a lazy `runPromise` getter for non-Effect consumers.
30
+ * Accessing `.runPromise` runs the effect and returns a Promise.
31
+ */
32
+ export type RunnableEffect<A, E> = Effect.Effect<A, E, never> & {
33
+ readonly runPromise: Promise<A>;
34
+ };
35
+ /**
36
+ * A Stream with a lazy `runPromise` getter for non-Effect consumers.
37
+ * Accessing `.runPromise` collects the stream into an array and returns a Promise.
38
+ */
39
+ export type RunnableStream<A, E> = Stream.Stream<A, E, never> & {
40
+ readonly runPromise: Promise<ReadonlyArray<A>>;
41
+ };
42
+ type HasId = {
43
+ readonly id: string;
44
+ };
45
+ /**
46
+ * Shape of a single Effect-based collection.
47
+ * Query returns a RunnableStream (or RunnableCursorPage when cursor is specified),
48
+ * CRUD methods return RunnableEffects.
49
+ * Both have a `.runPromise` getter for non-Effect consumers.
50
+ */
51
+ export interface EffectCollection<T extends HasId> {
52
+ readonly query: (options?: {
53
+ readonly where?: Record<string, unknown>;
54
+ readonly populate?: Record<string, unknown>;
55
+ readonly sort?: Record<string, "asc" | "desc">;
56
+ readonly select?: Record<string, unknown> | ReadonlyArray<string>;
57
+ readonly limit?: number;
58
+ readonly offset?: number;
59
+ readonly cursor?: CursorConfig;
60
+ }) => RunnableStream<Record<string, unknown>, DanglingReferenceError | ValidationError> | RunnableCursorPage<Record<string, unknown>, DanglingReferenceError | ValidationError>;
61
+ readonly findById: (id: string) => RunnableEffect<T, NotFoundError>;
62
+ readonly create: (input: CreateInput<T>) => RunnableEffect<T, ValidationError | DuplicateKeyError | ForeignKeyError | HookError | UniqueConstraintError>;
63
+ readonly createMany: (inputs: ReadonlyArray<CreateInput<T>>, options?: CreateManyOptions) => RunnableEffect<CreateManyResult<T>, ValidationError | DuplicateKeyError | ForeignKeyError | HookError | UniqueConstraintError>;
64
+ readonly update: (id: string, updates: UpdateWithOperators<T & MinimalEntity>) => RunnableEffect<T, ValidationError | NotFoundError | ForeignKeyError | HookError | UniqueConstraintError>;
65
+ readonly updateMany: (predicate: (entity: T) => boolean, updates: UpdateWithOperators<T & MinimalEntity>) => RunnableEffect<UpdateManyResult<T>, ValidationError | ForeignKeyError | HookError | UniqueConstraintError>;
66
+ readonly delete: (id: string, options?: {
67
+ readonly soft?: boolean;
68
+ }) => RunnableEffect<T, NotFoundError | OperationError | ForeignKeyError | HookError>;
69
+ readonly deleteMany: (predicate: (entity: T) => boolean, options?: {
70
+ readonly soft?: boolean;
71
+ readonly limit?: number;
72
+ }) => RunnableEffect<DeleteManyResult<T>, OperationError | ForeignKeyError | HookError>;
73
+ readonly upsert: (input: UpsertInput<T>) => RunnableEffect<UpsertResult<T>, ValidationError | ForeignKeyError | HookError | UniqueConstraintError>;
74
+ readonly upsertMany: (inputs: ReadonlyArray<UpsertInput<T>>) => RunnableEffect<UpsertManyResult<T>, ValidationError | ForeignKeyError | HookError | UniqueConstraintError>;
75
+ readonly createWithRelationships: (input: CreateWithRelationshipsInput<T, Record<string, RelationshipDef>>) => RunnableEffect<T, ValidationError | ForeignKeyError | OperationError>;
76
+ readonly updateWithRelationships: (id: string, input: UpdateWithRelationshipsInput<T, Record<string, RelationshipDef>>) => RunnableEffect<T, ValidationError | NotFoundError | ForeignKeyError | OperationError>;
77
+ readonly deleteWithRelationships: (id: string, options?: DeleteWithRelationshipsOptions<T, Record<string, RelationshipDef>>) => RunnableEffect<DeleteWithRelationshipsResult<T>, NotFoundError | ValidationError | OperationError>;
78
+ readonly deleteManyWithRelationships: (predicate: (entity: T) => boolean, options?: DeleteWithRelationshipsOptions<T, Record<string, RelationshipDef>> & {
79
+ readonly limit?: number;
80
+ }) => RunnableEffect<{
81
+ readonly count: number;
82
+ readonly deleted: ReadonlyArray<T>;
83
+ readonly cascaded?: Record<string, {
84
+ readonly count: number;
85
+ readonly ids: ReadonlyArray<string>;
86
+ }>;
87
+ }, ValidationError | OperationError>;
88
+ readonly aggregate: <C extends AggregateConfig>(config: C) => C extends {
89
+ readonly groupBy: string | ReadonlyArray<string>;
90
+ } ? RunnableEffect<GroupedAggregateResult, never> : RunnableEffect<AggregateResult, never>;
91
+ /**
92
+ * Create a reactive subscription that emits query results whenever the collection changes.
93
+ *
94
+ * The stream:
95
+ * 1. Emits the current result set immediately upon subscription
96
+ * 2. Re-emits whenever the underlying data changes (create/update/delete/reload)
97
+ * 3. Deduplicates consecutive identical result sets to avoid spurious emissions
98
+ *
99
+ * The stream is scoped: it subscribes to change notifications on creation and
100
+ * automatically unsubscribes when the scope closes or the stream is interrupted.
101
+ *
102
+ * @param config - Optional query configuration (where, sort, select, limit, offset, debounceMs)
103
+ * @returns A scoped Effect that produces a Stream of result arrays
104
+ */
105
+ readonly watch: (config?: {
106
+ readonly where?: Record<string, unknown>;
107
+ readonly sort?: Record<string, "asc" | "desc">;
108
+ readonly select?: Record<string, unknown> | ReadonlyArray<string>;
109
+ readonly limit?: number;
110
+ readonly offset?: number;
111
+ readonly debounceMs?: number;
112
+ }) => Effect.Effect<Stream.Stream<ReadonlyArray<T>>, never, Scope.Scope>;
113
+ /**
114
+ * Create a reactive subscription for a single entity by ID.
115
+ *
116
+ * Emits the entity immediately if it exists (or null if not), then re-emits
117
+ * whenever the entity is created, updated, or deleted.
118
+ *
119
+ * The stream is scoped: it subscribes to change notifications on creation and
120
+ * automatically unsubscribes when the scope closes or the stream is interrupted.
121
+ *
122
+ * @param id - The entity ID to watch
123
+ * @returns A scoped Effect that produces a Stream of T | null
124
+ */
125
+ readonly watchById: (id: string) => Effect.Effect<Stream.Stream<T | null>, never, Scope.Scope>;
126
+ }
127
+ /**
128
+ * Database type: a record of collection names to EffectCollections,
129
+ * plus the $transaction method for atomic operations.
130
+ */
131
+ export type EffectDatabase<Config extends DatabaseConfig> = {
132
+ readonly [K in keyof Config]: EffectCollection<Schema.Schema.Type<Config[K]["schema"]> & HasId>;
133
+ } & {
134
+ /**
135
+ * Execute multiple operations atomically within a transaction.
136
+ * On success, all changes are committed and persistence is triggered.
137
+ * On failure, all changes are rolled back and the original error is re-raised.
138
+ */
139
+ readonly $transaction: <A, E>(fn: (ctx: TransactionContext) => Effect.Effect<A, E>) => RunnableEffect<A, E | TransactionError>;
140
+ };
141
+ /**
142
+ * Configuration for database persistence.
143
+ * When provided, CRUD mutations trigger debounced saves to disk.
144
+ */
145
+ export interface EffectDatabasePersistenceConfig {
146
+ /** Debounce delay in milliseconds (default 100) */
147
+ readonly writeDebounce?: number;
148
+ /**
149
+ * Plugin codecs to merge with the serializer registry.
150
+ * When provided, these codecs are layered on top of the user-provided
151
+ * SerializerRegistry service, with plugin codecs taking precedence.
152
+ * @internal Used by plugin system integration
153
+ */
154
+ readonly _pluginCodecs?: ReadonlyArray<FormatCodec>;
155
+ }
156
+ /**
157
+ * Extended database type with persistence control methods.
158
+ */
159
+ export type EffectDatabaseWithPersistence<Config extends DatabaseConfig> = EffectDatabase<Config> & {
160
+ /** Flush all pending debounced writes immediately. Returns a Promise. */
161
+ readonly flush: () => Promise<void>;
162
+ /** Returns the number of writes currently pending. */
163
+ readonly pendingCount: () => number;
164
+ /**
165
+ * Preview which files need migration and what transforms would apply.
166
+ * No transforms are executed. No files are written.
167
+ */
168
+ readonly $dryRunMigrations: () => RunnableEffect<DryRunResult, MigrationError | StorageError | SerializationError | UnsupportedFormatError>;
169
+ };
170
+ /**
171
+ * Options for creating an Effect-based database.
172
+ */
173
+ export interface EffectDatabaseOptions {
174
+ /** Plugins to load, providing custom codecs, operators, ID generators, and global hooks */
175
+ readonly plugins?: ReadonlyArray<ProseQLPlugin>;
176
+ }
177
+ /**
178
+ * Create an Effect-based in-memory database.
179
+ *
180
+ * Accepts a DatabaseConfig and optional initial data (arrays keyed by collection name).
181
+ * Returns an Effect that initializes Ref state for each collection and wires up
182
+ * the query pipeline and CRUD methods.
183
+ *
184
+ * Optionally accepts plugins that provide custom codecs, operators, ID generators,
185
+ * and global lifecycle hooks.
186
+ *
187
+ * Usage:
188
+ * ```ts
189
+ * const db = yield* createEffectDatabase(config, {
190
+ * users: [{ id: "1", name: "Alice", age: 30 }],
191
+ * companies: [{ id: "c1", name: "TechCorp" }],
192
+ * })
193
+ *
194
+ * // Query
195
+ * const results = yield* Stream.runCollect(db.users.query({ where: { age: { $gt: 18 } } }))
196
+ *
197
+ * // CRUD
198
+ * const user = yield* db.users.create({ name: "Bob", age: 25 })
199
+ * ```
200
+ *
201
+ * With plugins:
202
+ * ```ts
203
+ * const db = yield* createEffectDatabase(config, initialData, {
204
+ * plugins: [regexPlugin, snowflakeIdPlugin]
205
+ * })
206
+ * ```
207
+ */
208
+ export declare const createEffectDatabase: <Config extends DatabaseConfig>(config: Config, initialData?: { readonly [K in keyof Config]?: ReadonlyArray<Record<string, unknown>>; }, options?: EffectDatabaseOptions) => Effect.Effect<GenerateDatabase<Config>, MigrationError | PluginError>;
209
+ /**
210
+ * Create an Effect-based in-memory database with persistence.
211
+ *
212
+ * Like `createEffectDatabase`, but additionally wires debounced persistence hooks
213
+ * so that each CRUD mutation triggers a fire-and-forget save to disk.
214
+ *
215
+ * Collections with a `file` field in their config are persisted. Collections
216
+ * without a `file` are in-memory only.
217
+ *
218
+ * Requires `StorageAdapter` and `SerializerRegistry` services in the environment.
219
+ *
220
+ * Optionally accepts plugins that provide custom codecs, operators, ID generators,
221
+ * and global lifecycle hooks.
222
+ *
223
+ * Usage:
224
+ * ```ts
225
+ * const db = yield* createPersistentEffectDatabase(config, initialData, { writeDebounce: 200 })
226
+ * // CRUD mutations now trigger debounced saves
227
+ * yield* db.users.create({ name: "Alice", age: 30 })
228
+ * // Flush all pending writes before shutdown
229
+ * yield* db.flush()
230
+ * ```
231
+ *
232
+ * With plugins:
233
+ * ```ts
234
+ * const db = yield* createPersistentEffectDatabase(config, initialData, persistenceConfig, {
235
+ * plugins: [regexPlugin, snowflakeIdPlugin]
236
+ * })
237
+ * ```
238
+ */
239
+ export declare const createPersistentEffectDatabase: <Config extends DatabaseConfig>(config: Config, initialData?: { readonly [K in keyof Config]?: ReadonlyArray<Record<string, unknown>>; }, persistenceConfig?: EffectDatabasePersistenceConfig, options?: EffectDatabaseOptions) => Effect.Effect<GenerateDatabaseWithPersistence<Config>, MigrationError | StorageError | SerializationError | UnsupportedFormatError | ValidationError | PluginError, StorageAdapter | SerializerRegistry | Scope.Scope>;
240
+ export {};
241
+ //# sourceMappingURL=database-effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-effect.d.ts","sourceRoot":"","sources":["../../src/factories/database-effect.ts"],"names":[],"mappings":"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"}