shelving 1.236.0 → 1.236.2

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 (793) hide show
  1. package/api/cache/APICache.d.ts +69 -6
  2. package/api/cache/APICache.js +61 -5
  3. package/api/cache/EndpointCache.d.ts +75 -7
  4. package/api/cache/EndpointCache.js +75 -7
  5. package/api/endpoint/Endpoint.d.ts +141 -25
  6. package/api/endpoint/Endpoint.js +55 -9
  7. package/api/endpoint/util.d.ts +28 -6
  8. package/api/provider/APIProvider.d.ts +58 -14
  9. package/api/provider/APIProvider.js +24 -2
  10. package/api/provider/CachedAPIProvider.d.ts +58 -5
  11. package/api/provider/CachedAPIProvider.js +58 -6
  12. package/api/provider/ClientAPIProvider.d.ts +80 -4
  13. package/api/provider/ClientAPIProvider.js +75 -4
  14. package/api/provider/DebugAPIProvider.d.ts +40 -1
  15. package/api/provider/DebugAPIProvider.js +40 -1
  16. package/api/provider/JSONAPIProvider.d.ts +18 -2
  17. package/api/provider/JSONAPIProvider.js +18 -2
  18. package/api/provider/LoggingAPIProvider.d.ts +25 -2
  19. package/api/provider/LoggingAPIProvider.js +25 -2
  20. package/api/provider/MockAPIProvider.d.ts +72 -1
  21. package/api/provider/MockAPIProvider.js +60 -4
  22. package/api/provider/MockEndpointAPIProvider.d.ts +9 -0
  23. package/api/provider/MockEndpointAPIProvider.js +9 -0
  24. package/api/provider/ThroughAPIProvider.d.ts +67 -1
  25. package/api/provider/ThroughAPIProvider.js +67 -1
  26. package/api/provider/ValidationAPIProvider.d.ts +32 -1
  27. package/api/provider/ValidationAPIProvider.js +32 -1
  28. package/api/provider/XMLAPIProvider.d.ts +18 -2
  29. package/api/provider/XMLAPIProvider.js +18 -2
  30. package/api/store/EndpointStore.d.ts +24 -1
  31. package/api/store/EndpointStore.js +24 -1
  32. package/bun/BunPostgreSQLProvider.d.ts +38 -0
  33. package/bun/BunPostgreSQLProvider.js +38 -2
  34. package/cloudflare/CloudflareD1Provider.d.ts +29 -2
  35. package/cloudflare/CloudflareD1Provider.js +29 -2
  36. package/cloudflare/CloudflareKVProvider.d.ts +115 -0
  37. package/cloudflare/CloudflareKVProvider.js +115 -0
  38. package/cloudflare/types.d.ts +41 -7
  39. package/db/cache/CollectionCache.d.ts +83 -7
  40. package/db/cache/CollectionCache.js +83 -7
  41. package/db/cache/DBCache.d.ts +93 -8
  42. package/db/cache/DBCache.js +85 -7
  43. package/db/collection/Collection.d.ts +103 -15
  44. package/db/collection/Collection.js +58 -6
  45. package/db/migrate/DBMigrator.d.ts +29 -1
  46. package/db/migrate/DBMigrator.js +20 -1
  47. package/db/migrate/PostgreSQLMigrator.d.ts +8 -1
  48. package/db/migrate/PostgreSQLMigrator.js +8 -1
  49. package/db/migrate/SQLMigrator.d.ts +63 -4
  50. package/db/migrate/SQLMigrator.js +51 -1
  51. package/db/migrate/SQLiteMigrator.d.ts +8 -1
  52. package/db/migrate/SQLiteMigrator.js +8 -1
  53. package/db/provider/CacheDBProvider.d.ts +135 -1
  54. package/db/provider/CacheDBProvider.js +135 -1
  55. package/db/provider/ChangesDBProvider.d.ts +84 -3
  56. package/db/provider/ChangesDBProvider.js +77 -2
  57. package/db/provider/DBProvider.d.ts +148 -1
  58. package/db/provider/DBProvider.js +51 -1
  59. package/db/provider/DebugDBProvider.d.ts +118 -1
  60. package/db/provider/DebugDBProvider.js +118 -1
  61. package/db/provider/MemoryDBProvider.d.ts +262 -7
  62. package/db/provider/MemoryDBProvider.js +262 -7
  63. package/db/provider/MockDBProvider.d.ts +113 -2
  64. package/db/provider/MockDBProvider.js +106 -1
  65. package/db/provider/PostgreSQLProvider.d.ts +34 -2
  66. package/db/provider/PostgreSQLProvider.js +34 -4
  67. package/db/provider/SQLProvider.d.ts +250 -14
  68. package/db/provider/SQLProvider.js +237 -13
  69. package/db/provider/SQLiteProvider.d.ts +41 -1
  70. package/db/provider/SQLiteProvider.js +41 -4
  71. package/db/provider/ThroughDBProvider.d.ts +156 -1
  72. package/db/provider/ThroughDBProvider.js +156 -1
  73. package/db/provider/ValidationDBProvider.d.ts +120 -1
  74. package/db/provider/ValidationDBProvider.js +120 -1
  75. package/db/store/ItemStore.d.ts +38 -2
  76. package/db/store/ItemStore.js +38 -2
  77. package/db/store/QueryStore.d.ts +64 -6
  78. package/db/store/QueryStore.js +64 -6
  79. package/error/BaseError.d.ts +27 -2
  80. package/error/BaseError.js +14 -0
  81. package/error/Errors.d.ts +12 -1
  82. package/error/Errors.js +12 -1
  83. package/error/NetworkError.d.ts +13 -1
  84. package/error/NetworkError.js +13 -1
  85. package/error/RequestError.d.ts +90 -7
  86. package/error/RequestError.js +90 -7
  87. package/error/RequiredError.d.ts +11 -1
  88. package/error/RequiredError.js +11 -1
  89. package/error/ResponseError.d.ts +19 -2
  90. package/error/ResponseError.js +19 -2
  91. package/error/UnexpectedError.d.ts +14 -1
  92. package/error/UnexpectedError.js +14 -1
  93. package/error/UnimplementedError.d.ts +13 -1
  94. package/error/UnimplementedError.js +13 -1
  95. package/error/ValueError.d.ts +14 -1
  96. package/error/ValueError.js +14 -1
  97. package/extract/DirectoryExtractor.d.ts +35 -1
  98. package/extract/DirectoryExtractor.js +30 -0
  99. package/extract/Extractor.d.ts +21 -2
  100. package/extract/Extractor.js +7 -1
  101. package/extract/FileExtractor.d.ts +18 -0
  102. package/extract/FileExtractor.js +18 -0
  103. package/extract/IndexExtractor.d.ts +36 -1
  104. package/extract/IndexExtractor.js +31 -0
  105. package/extract/MarkupExtractor.d.ts +15 -0
  106. package/extract/MarkupExtractor.js +15 -0
  107. package/extract/MergingExtractor.d.ts +36 -1
  108. package/extract/MergingExtractor.js +31 -0
  109. package/extract/ModuleExtractor.d.ts +25 -1
  110. package/extract/ModuleExtractor.js +20 -0
  111. package/extract/PackageExtractor.d.ts +36 -1
  112. package/extract/PackageExtractor.js +31 -0
  113. package/extract/ThroughExtractor.d.ts +22 -1
  114. package/extract/ThroughExtractor.js +22 -1
  115. package/extract/TypescriptExtractor.d.ts +21 -0
  116. package/extract/TypescriptExtractor.js +28 -3
  117. package/firestore/client/FirestoreClientProvider.d.ts +129 -4
  118. package/firestore/client/FirestoreClientProvider.js +129 -4
  119. package/firestore/lite/FirestoreLiteProvider.d.ts +128 -3
  120. package/firestore/lite/FirestoreLiteProvider.js +128 -3
  121. package/firestore/server/FirestoreServerProvider.d.ts +129 -2
  122. package/firestore/server/FirestoreServerProvider.js +129 -2
  123. package/markup/MarkupParser.d.ts +57 -10
  124. package/markup/MarkupParser.js +50 -9
  125. package/markup/MarkupRule.d.ts +34 -1
  126. package/markup/Parser.d.ts +18 -0
  127. package/markup/Parser.js +11 -0
  128. package/markup/rule/blockquote.d.ts +3 -0
  129. package/markup/rule/blockquote.js +3 -0
  130. package/markup/rule/code.d.ts +3 -0
  131. package/markup/rule/code.js +3 -0
  132. package/markup/rule/fenced.d.ts +3 -0
  133. package/markup/rule/fenced.js +3 -0
  134. package/markup/rule/heading.d.ts +3 -0
  135. package/markup/rule/heading.js +3 -0
  136. package/markup/rule/index.d.ts +16 -3
  137. package/markup/rule/index.js +16 -3
  138. package/markup/rule/inline.d.ts +4 -1
  139. package/markup/rule/inline.js +5 -2
  140. package/markup/rule/linebreak.d.ts +3 -0
  141. package/markup/rule/linebreak.js +3 -0
  142. package/markup/rule/link.d.ts +6 -0
  143. package/markup/rule/link.js +6 -0
  144. package/markup/rule/ordered.d.ts +3 -0
  145. package/markup/rule/ordered.js +3 -0
  146. package/markup/rule/paragraph.d.ts +3 -0
  147. package/markup/rule/paragraph.js +3 -0
  148. package/markup/rule/separator.d.ts +3 -0
  149. package/markup/rule/separator.js +3 -0
  150. package/markup/rule/table.d.ts +3 -0
  151. package/markup/rule/table.js +3 -0
  152. package/markup/rule/unordered.d.ts +3 -0
  153. package/markup/rule/unordered.js +3 -0
  154. package/markup/util/regexp.d.ts +80 -3
  155. package/markup/util/regexp.js +44 -0
  156. package/package.json +1 -1
  157. package/react/createAPIContext.d.ts +15 -0
  158. package/react/createAPIContext.js +10 -0
  159. package/react/createDBContext.d.ts +15 -0
  160. package/react/createDBContext.js +10 -0
  161. package/react/useInstance.d.ts +11 -0
  162. package/react/useInstance.js +11 -0
  163. package/react/useLazy.d.ts +11 -0
  164. package/react/useMap.d.ts +14 -1
  165. package/react/useMap.js +14 -1
  166. package/react/useReduce.d.ts +12 -0
  167. package/react/useSequence.d.ts +10 -0
  168. package/react/useSequence.js +10 -0
  169. package/react/useStore.d.ts +16 -1
  170. package/schema/AddressSchema.d.ts +41 -4
  171. package/schema/AddressSchema.js +36 -3
  172. package/schema/ArraySchema.d.ts +48 -6
  173. package/schema/ArraySchema.js +40 -5
  174. package/schema/BooleanSchema.d.ts +59 -3
  175. package/schema/BooleanSchema.js +51 -2
  176. package/schema/ChoiceSchema.d.ts +61 -7
  177. package/schema/ChoiceSchema.js +44 -2
  178. package/schema/ColorSchema.d.ts +41 -8
  179. package/schema/ColorSchema.js +36 -7
  180. package/schema/CountrySchema.d.ts +44 -4
  181. package/schema/CountrySchema.js +39 -3
  182. package/schema/CurrencyAmountSchema.d.ts +104 -8
  183. package/schema/CurrencyAmountSchema.js +91 -4
  184. package/schema/CurrencyCodeSchema.d.ts +56 -4
  185. package/schema/CurrencyCodeSchema.js +49 -3
  186. package/schema/DataSchema.d.ts +101 -10
  187. package/schema/DataSchema.js +87 -8
  188. package/schema/DateSchema.d.ts +73 -4
  189. package/schema/DateSchema.js +57 -2
  190. package/schema/DateTimeSchema.d.ts +40 -3
  191. package/schema/DateTimeSchema.js +40 -3
  192. package/schema/DictionarySchema.d.ts +54 -4
  193. package/schema/DictionarySchema.js +47 -3
  194. package/schema/EmailSchema.d.ts +34 -3
  195. package/schema/EmailSchema.js +34 -3
  196. package/schema/EntitySchema.d.ts +45 -4
  197. package/schema/EntitySchema.js +38 -3
  198. package/schema/FileSchema.d.ts +45 -4
  199. package/schema/FileSchema.js +39 -3
  200. package/schema/KeySchema.d.ts +32 -3
  201. package/schema/KeySchema.js +32 -3
  202. package/schema/NullableSchema.d.ts +64 -4
  203. package/schema/NullableSchema.js +59 -3
  204. package/schema/NumberSchema.d.ts +137 -12
  205. package/schema/NumberSchema.js +127 -11
  206. package/schema/OptionalSchema.d.ts +61 -4
  207. package/schema/OptionalSchema.js +56 -4
  208. package/schema/PasswordSchema.d.ts +37 -1
  209. package/schema/PasswordSchema.js +32 -1
  210. package/schema/PhoneSchema.d.ts +40 -4
  211. package/schema/PhoneSchema.js +35 -3
  212. package/schema/RequiredSchema.d.ts +39 -3
  213. package/schema/RequiredSchema.js +41 -3
  214. package/schema/Schema.d.ts +67 -7
  215. package/schema/Schema.js +42 -6
  216. package/schema/SlugSchema.d.ts +37 -5
  217. package/schema/SlugSchema.js +37 -5
  218. package/schema/StringSchema.d.ts +124 -19
  219. package/schema/StringSchema.js +107 -17
  220. package/schema/ThroughSchema.d.ts +35 -2
  221. package/schema/ThroughSchema.js +30 -1
  222. package/schema/TimeSchema.d.ts +43 -3
  223. package/schema/TimeSchema.js +43 -3
  224. package/schema/URISchema.d.ts +67 -6
  225. package/schema/URISchema.js +60 -6
  226. package/schema/URLSchema.d.ts +69 -6
  227. package/schema/URLSchema.js +61 -6
  228. package/schema/UUIDSchema.d.ts +37 -4
  229. package/schema/UUIDSchema.js +37 -4
  230. package/sequence/DeferredSequence.d.ts +49 -3
  231. package/sequence/DeferredSequence.js +39 -3
  232. package/sequence/InspectSequence.d.ts +59 -5
  233. package/sequence/InspectSequence.js +59 -5
  234. package/sequence/LazySequence.d.ts +30 -2
  235. package/sequence/LazySequence.js +30 -2
  236. package/sequence/Sequence.d.ts +11 -0
  237. package/sequence/Sequence.js +10 -0
  238. package/sequence/ThroughSequence.d.ts +15 -0
  239. package/sequence/ThroughSequence.js +15 -0
  240. package/store/ArrayStore.d.ts +74 -11
  241. package/store/ArrayStore.js +74 -11
  242. package/store/BooleanStore.d.ts +19 -2
  243. package/store/BooleanStore.js +19 -2
  244. package/store/BusyStore.d.ts +13 -1
  245. package/store/BusyStore.js +13 -1
  246. package/store/DataStore.d.ts +118 -15
  247. package/store/DataStore.js +118 -15
  248. package/store/DictionaryStore.d.ts +66 -8
  249. package/store/DictionaryStore.js +66 -8
  250. package/store/FetchStore.d.ts +43 -6
  251. package/store/FetchStore.js +36 -5
  252. package/store/PathStore.d.ts +44 -5
  253. package/store/PathStore.js +44 -5
  254. package/store/PayloadFetchStore.d.ts +16 -1
  255. package/store/PayloadFetchStore.js +9 -1
  256. package/store/Store.d.ts +85 -16
  257. package/store/Store.js +52 -10
  258. package/store/URLStore.d.ts +173 -15
  259. package/store/URLStore.js +173 -15
  260. package/test/basics.d.ts +70 -0
  261. package/test/basics.js +60 -0
  262. package/test/people.d.ts +45 -0
  263. package/test/people.js +35 -0
  264. package/test/util.d.ts +30 -3
  265. package/test/util.js +30 -3
  266. package/ui/app/App.d.ts +14 -2
  267. package/ui/app/App.js +9 -2
  268. package/ui/app/App.tsx +14 -2
  269. package/ui/block/Address.d.ts +45 -3
  270. package/ui/block/Address.js +30 -3
  271. package/ui/block/Address.tsx +46 -3
  272. package/ui/block/Block.d.ts +23 -1
  273. package/ui/block/Block.js +13 -1
  274. package/ui/block/Block.tsx +23 -1
  275. package/ui/block/Blockquote.d.ts +21 -0
  276. package/ui/block/Blockquote.js +16 -0
  277. package/ui/block/Blockquote.tsx +22 -0
  278. package/ui/block/Caption.d.ts +21 -1
  279. package/ui/block/Caption.js +16 -1
  280. package/ui/block/Caption.tsx +22 -1
  281. package/ui/block/Card.d.ts +6 -0
  282. package/ui/block/Card.js +1 -0
  283. package/ui/block/Card.tsx +6 -0
  284. package/ui/block/Definitions.d.ts +18 -0
  285. package/ui/block/Definitions.js +13 -0
  286. package/ui/block/Definitions.tsx +19 -0
  287. package/ui/block/Divider.d.ts +21 -0
  288. package/ui/block/Divider.js +16 -0
  289. package/ui/block/Divider.tsx +22 -0
  290. package/ui/block/Heading.d.ts +20 -1
  291. package/ui/block/Heading.js +15 -0
  292. package/ui/block/Heading.tsx +21 -1
  293. package/ui/block/Image.d.ts +23 -0
  294. package/ui/block/Image.js +18 -0
  295. package/ui/block/Image.tsx +24 -0
  296. package/ui/block/Label.d.ts +18 -3
  297. package/ui/block/Label.js +13 -3
  298. package/ui/block/Label.tsx +18 -3
  299. package/ui/block/List.d.ts +30 -0
  300. package/ui/block/List.js +25 -0
  301. package/ui/block/List.tsx +32 -0
  302. package/ui/block/Panel.d.ts +13 -1
  303. package/ui/block/Panel.js +3 -0
  304. package/ui/block/Panel.tsx +13 -1
  305. package/ui/block/Paragraph.d.ts +23 -0
  306. package/ui/block/Paragraph.js +18 -0
  307. package/ui/block/Paragraph.tsx +24 -0
  308. package/ui/block/Preformatted.d.ts +20 -0
  309. package/ui/block/Preformatted.js +15 -0
  310. package/ui/block/Preformatted.tsx +21 -0
  311. package/ui/block/Prose.d.ts +14 -1
  312. package/ui/block/Prose.js +9 -1
  313. package/ui/block/Prose.tsx +14 -1
  314. package/ui/block/Section.d.ts +69 -6
  315. package/ui/block/Section.js +59 -6
  316. package/ui/block/Section.tsx +70 -6
  317. package/ui/block/Subheading.d.ts +20 -1
  318. package/ui/block/Subheading.js +15 -0
  319. package/ui/block/Subheading.tsx +21 -1
  320. package/ui/block/Table.d.ts +20 -0
  321. package/ui/block/Table.js +15 -0
  322. package/ui/block/Table.tsx +21 -0
  323. package/ui/block/Title.d.ts +20 -1
  324. package/ui/block/Title.js +15 -0
  325. package/ui/block/Title.tsx +21 -1
  326. package/ui/block/Video.d.ts +50 -3
  327. package/ui/block/Video.js +30 -3
  328. package/ui/block/Video.tsx +50 -3
  329. package/ui/dialog/Dialog.d.ts +28 -1
  330. package/ui/dialog/Dialog.js +18 -1
  331. package/ui/dialog/Dialog.tsx +28 -1
  332. package/ui/dialog/Dialogs.d.ts +53 -6
  333. package/ui/dialog/Dialogs.js +43 -6
  334. package/ui/dialog/Dialogs.tsx +53 -6
  335. package/ui/dialog/Modal.d.ts +13 -0
  336. package/ui/dialog/Modal.js +8 -0
  337. package/ui/dialog/Modal.tsx +13 -0
  338. package/ui/docs/DocumentationButtons.d.ts +5 -1
  339. package/ui/docs/DocumentationButtons.tsx +5 -1
  340. package/ui/docs/DocumentationCard.d.ts +6 -1
  341. package/ui/docs/DocumentationCard.js +6 -1
  342. package/ui/docs/DocumentationCard.tsx +6 -1
  343. package/ui/docs/DocumentationKind.d.ts +13 -1
  344. package/ui/docs/DocumentationKind.js +8 -0
  345. package/ui/docs/DocumentationKind.tsx +13 -1
  346. package/ui/docs/DocumentationPage.d.ts +6 -1
  347. package/ui/docs/DocumentationPage.js +6 -1
  348. package/ui/docs/DocumentationPage.tsx +6 -1
  349. package/ui/docs/DocumentationSignatures.d.ts +10 -1
  350. package/ui/docs/DocumentationSignatures.js +5 -0
  351. package/ui/docs/DocumentationSignatures.tsx +10 -1
  352. package/ui/form/ArrayInput.d.ts +15 -0
  353. package/ui/form/ArrayInput.tsx +15 -0
  354. package/ui/form/ArrayRadioInputs.d.ts +10 -0
  355. package/ui/form/ArrayRadioInputs.js +5 -0
  356. package/ui/form/ArrayRadioInputs.tsx +10 -0
  357. package/ui/form/Button.d.ts +19 -3
  358. package/ui/form/Button.js +14 -2
  359. package/ui/form/Button.tsx +19 -3
  360. package/ui/form/ButtonInput.d.ts +14 -1
  361. package/ui/form/ButtonInput.js +9 -1
  362. package/ui/form/ButtonInput.tsx +14 -1
  363. package/ui/form/ButtonInputPopover.d.ts +10 -0
  364. package/ui/form/ButtonInputPopover.js +5 -0
  365. package/ui/form/ButtonInputPopover.tsx +10 -0
  366. package/ui/form/ButtonPopover.d.ts +11 -1
  367. package/ui/form/ButtonPopover.js +6 -1
  368. package/ui/form/ButtonPopover.tsx +11 -1
  369. package/ui/form/CheckboxInput.d.ts +14 -1
  370. package/ui/form/CheckboxInput.js +9 -1
  371. package/ui/form/CheckboxInput.tsx +14 -1
  372. package/ui/form/ChoiceRadioInputs.d.ts +10 -0
  373. package/ui/form/ChoiceRadioInputs.tsx +10 -0
  374. package/ui/form/Clickable.d.ts +45 -5
  375. package/ui/form/Clickable.js +30 -3
  376. package/ui/form/Clickable.tsx +45 -5
  377. package/ui/form/DataInput.d.ts +14 -0
  378. package/ui/form/DataInput.tsx +14 -0
  379. package/ui/form/DateInput.d.ts +14 -0
  380. package/ui/form/DateInput.js +9 -0
  381. package/ui/form/DateInput.tsx +14 -0
  382. package/ui/form/DictionaryInput.d.ts +15 -0
  383. package/ui/form/DictionaryInput.tsx +15 -0
  384. package/ui/form/Field.d.ts +5 -0
  385. package/ui/form/Field.tsx +5 -0
  386. package/ui/form/FileInput.d.ts +14 -0
  387. package/ui/form/FileInput.js +9 -0
  388. package/ui/form/FileInput.tsx +14 -0
  389. package/ui/form/Form.d.ts +55 -6
  390. package/ui/form/Form.js +35 -3
  391. package/ui/form/Form.tsx +55 -6
  392. package/ui/form/FormContext.d.ts +24 -3
  393. package/ui/form/FormContext.js +5 -1
  394. package/ui/form/FormContext.tsx +24 -3
  395. package/ui/form/FormFields.d.ts +15 -2
  396. package/ui/form/FormFields.js +15 -2
  397. package/ui/form/FormFields.tsx +15 -2
  398. package/ui/form/FormFooter.d.ts +13 -3
  399. package/ui/form/FormFooter.js +8 -3
  400. package/ui/form/FormFooter.tsx +13 -3
  401. package/ui/form/FormInput.d.ts +21 -2
  402. package/ui/form/FormInput.js +16 -2
  403. package/ui/form/FormInput.tsx +21 -2
  404. package/ui/form/FormMessage.d.ts +8 -1
  405. package/ui/form/FormMessage.js +8 -1
  406. package/ui/form/FormMessage.tsx +8 -2
  407. package/ui/form/FormNotice.d.ts +8 -1
  408. package/ui/form/FormNotice.js +8 -1
  409. package/ui/form/FormNotice.tsx +8 -2
  410. package/ui/form/FormNotify.d.ts +8 -1
  411. package/ui/form/FormNotify.js +8 -1
  412. package/ui/form/FormNotify.tsx +8 -2
  413. package/ui/form/FormStore.d.ts +50 -6
  414. package/ui/form/FormStore.js +50 -6
  415. package/ui/form/FormStore.tsx +50 -6
  416. package/ui/form/Input.d.ts +65 -1
  417. package/ui/form/Input.js +60 -0
  418. package/ui/form/Input.tsx +77 -1
  419. package/ui/form/NumberInput.d.ts +14 -0
  420. package/ui/form/NumberInput.js +9 -0
  421. package/ui/form/NumberInput.tsx +14 -0
  422. package/ui/form/OutputInput.d.ts +13 -1
  423. package/ui/form/OutputInput.js +8 -1
  424. package/ui/form/OutputInput.tsx +13 -1
  425. package/ui/form/Popover.d.ts +18 -2
  426. package/ui/form/Popover.js +8 -2
  427. package/ui/form/Popover.tsx +18 -2
  428. package/ui/form/Progress.d.ts +26 -2
  429. package/ui/form/Progress.js +16 -2
  430. package/ui/form/Progress.tsx +26 -2
  431. package/ui/form/QueryInput.d.ts +14 -5
  432. package/ui/form/QueryInput.js +9 -5
  433. package/ui/form/QueryInput.tsx +14 -5
  434. package/ui/form/RadioInput.d.ts +14 -1
  435. package/ui/form/RadioInput.js +9 -1
  436. package/ui/form/RadioInput.tsx +14 -1
  437. package/ui/form/SchemaInput.d.ts +138 -7
  438. package/ui/form/SchemaInput.js +79 -4
  439. package/ui/form/SchemaInput.tsx +138 -7
  440. package/ui/form/SelectInput.d.ts +14 -0
  441. package/ui/form/SelectInput.tsx +14 -0
  442. package/ui/form/SubmitButton.d.ts +14 -1
  443. package/ui/form/SubmitButton.js +9 -1
  444. package/ui/form/SubmitButton.tsx +14 -1
  445. package/ui/form/TextInput.d.ts +15 -0
  446. package/ui/form/TextInput.js +10 -0
  447. package/ui/form/TextInput.tsx +15 -0
  448. package/ui/inline/Code.d.ts +29 -0
  449. package/ui/inline/Code.js +24 -0
  450. package/ui/inline/Code.tsx +31 -0
  451. package/ui/inline/Deleted.d.ts +23 -0
  452. package/ui/inline/Deleted.js +18 -0
  453. package/ui/inline/Deleted.tsx +24 -0
  454. package/ui/inline/Emphasis.d.ts +23 -0
  455. package/ui/inline/Emphasis.js +18 -0
  456. package/ui/inline/Emphasis.tsx +24 -0
  457. package/ui/inline/Inserted.d.ts +23 -0
  458. package/ui/inline/Inserted.js +18 -0
  459. package/ui/inline/Inserted.tsx +24 -0
  460. package/ui/inline/Link.d.ts +23 -0
  461. package/ui/inline/Link.js +18 -0
  462. package/ui/inline/Link.tsx +24 -0
  463. package/ui/inline/Mark.d.ts +23 -0
  464. package/ui/inline/Mark.js +18 -0
  465. package/ui/inline/Mark.tsx +24 -0
  466. package/ui/inline/Small.d.ts +23 -0
  467. package/ui/inline/Small.js +18 -0
  468. package/ui/inline/Small.tsx +24 -0
  469. package/ui/inline/Strong.d.ts +23 -0
  470. package/ui/inline/Strong.js +18 -0
  471. package/ui/inline/Strong.tsx +24 -0
  472. package/ui/inline/Subscript.d.ts +23 -0
  473. package/ui/inline/Subscript.js +18 -0
  474. package/ui/inline/Subscript.tsx +24 -0
  475. package/ui/inline/Superscript.d.ts +23 -0
  476. package/ui/inline/Superscript.js +18 -0
  477. package/ui/inline/Superscript.tsx +24 -0
  478. package/ui/inline/When.d.ts +42 -3
  479. package/ui/inline/When.js +27 -3
  480. package/ui/inline/When.tsx +42 -3
  481. package/ui/layout/CenteredLayout.d.ts +12 -1
  482. package/ui/layout/CenteredLayout.js +7 -1
  483. package/ui/layout/CenteredLayout.tsx +12 -1
  484. package/ui/layout/Layout.d.ts +12 -3
  485. package/ui/layout/Layout.js +12 -3
  486. package/ui/layout/Layout.ts +12 -3
  487. package/ui/layout/SidebarLayout.d.ts +12 -0
  488. package/ui/layout/SidebarLayout.js +7 -0
  489. package/ui/layout/SidebarLayout.tsx +12 -0
  490. package/ui/menu/Menu.d.ts +22 -0
  491. package/ui/menu/Menu.js +12 -0
  492. package/ui/menu/Menu.tsx +22 -0
  493. package/ui/misc/Catcher.d.ts +77 -5
  494. package/ui/misc/Catcher.js +47 -5
  495. package/ui/misc/Catcher.tsx +77 -5
  496. package/ui/misc/Loading.d.ts +20 -0
  497. package/ui/misc/Loading.js +15 -0
  498. package/ui/misc/Loading.tsx +20 -0
  499. package/ui/misc/Mapper.d.ts +13 -1
  500. package/ui/misc/Mapper.js +4 -0
  501. package/ui/misc/Mapper.tsx +13 -1
  502. package/ui/misc/Markup.d.ts +9 -1
  503. package/ui/misc/Markup.js +4 -0
  504. package/ui/misc/Markup.tsx +9 -1
  505. package/ui/misc/MetaContext.d.ts +24 -7
  506. package/ui/misc/MetaContext.js +19 -6
  507. package/ui/misc/MetaContext.tsx +24 -7
  508. package/ui/misc/StatusIcon.d.ts +16 -1
  509. package/ui/misc/StatusIcon.js +11 -1
  510. package/ui/misc/StatusIcon.tsx +16 -1
  511. package/ui/misc/Tag.d.ts +21 -0
  512. package/ui/misc/Tag.js +11 -0
  513. package/ui/misc/Tag.tsx +21 -0
  514. package/ui/notice/Message.d.ts +27 -1
  515. package/ui/notice/Message.js +22 -1
  516. package/ui/notice/Message.tsx +27 -1
  517. package/ui/notice/Notice.d.ts +24 -0
  518. package/ui/notice/Notice.js +19 -0
  519. package/ui/notice/Notice.tsx +24 -0
  520. package/ui/notice/NoticeStore.d.ts +30 -2
  521. package/ui/notice/NoticeStore.js +30 -2
  522. package/ui/notice/NoticeStore.ts +30 -2
  523. package/ui/notice/Notices.d.ts +11 -1
  524. package/ui/notice/Notices.js +6 -1
  525. package/ui/notice/Notices.tsx +11 -1
  526. package/ui/notice/NoticesStore.d.ts +23 -3
  527. package/ui/notice/NoticesStore.js +23 -3
  528. package/ui/notice/NoticesStore.ts +23 -3
  529. package/ui/page/HTML.d.ts +13 -2
  530. package/ui/page/HTML.js +8 -2
  531. package/ui/page/HTML.tsx +13 -2
  532. package/ui/page/Head.d.ts +5 -1
  533. package/ui/page/Head.js +5 -1
  534. package/ui/page/Head.tsx +5 -1
  535. package/ui/page/Page.d.ts +12 -1
  536. package/ui/page/Page.js +7 -1
  537. package/ui/page/Page.tsx +12 -1
  538. package/ui/router/Navigation.d.ts +11 -0
  539. package/ui/router/Navigation.js +6 -0
  540. package/ui/router/Navigation.tsx +11 -0
  541. package/ui/router/NavigationContext.d.ts +14 -2
  542. package/ui/router/NavigationContext.js +14 -2
  543. package/ui/router/NavigationContext.tsx +14 -2
  544. package/ui/router/NavigationStore.d.ts +29 -1
  545. package/ui/router/NavigationStore.js +29 -1
  546. package/ui/router/NavigationStore.tsx +29 -1
  547. package/ui/router/Router.d.ts +12 -1
  548. package/ui/router/Router.js +7 -1
  549. package/ui/router/Router.tsx +12 -1
  550. package/ui/router/Routes.d.ts +14 -4
  551. package/ui/router/Routes.tsx +14 -4
  552. package/ui/style/Color.d.ts +15 -2
  553. package/ui/style/Color.js +5 -0
  554. package/ui/style/Color.tsx +15 -2
  555. package/ui/style/Flex.d.ts +41 -4
  556. package/ui/style/Flex.js +26 -3
  557. package/ui/style/Flex.tsx +41 -4
  558. package/ui/style/Gap.d.ts +18 -3
  559. package/ui/style/Gap.js +8 -1
  560. package/ui/style/Gap.tsx +18 -3
  561. package/ui/style/Padding.d.ts +18 -3
  562. package/ui/style/Padding.js +8 -1
  563. package/ui/style/Padding.tsx +18 -3
  564. package/ui/style/Scroll.d.ts +36 -1
  565. package/ui/style/Scroll.js +26 -1
  566. package/ui/style/Scroll.tsx +37 -1
  567. package/ui/style/Space.d.ts +18 -3
  568. package/ui/style/Space.js +8 -1
  569. package/ui/style/Space.tsx +18 -3
  570. package/ui/style/Status.d.ts +23 -7
  571. package/ui/style/Status.js +13 -5
  572. package/ui/style/Status.tsx +23 -7
  573. package/ui/style/Tint.d.ts +7 -1
  574. package/ui/style/Tint.js +7 -1
  575. package/ui/style/Tint.tsx +7 -1
  576. package/ui/style/Typography.d.ts +38 -6
  577. package/ui/style/Typography.js +8 -0
  578. package/ui/style/Typography.tsx +38 -6
  579. package/ui/style/Width.d.ts +18 -1
  580. package/ui/style/Width.js +8 -0
  581. package/ui/style/Width.tsx +18 -1
  582. package/ui/transition/CollapseTransition.d.ts +13 -0
  583. package/ui/transition/CollapseTransition.js +8 -0
  584. package/ui/transition/CollapseTransition.tsx +13 -0
  585. package/ui/transition/FadeTransition.d.ts +13 -0
  586. package/ui/transition/FadeTransition.js +8 -0
  587. package/ui/transition/FadeTransition.tsx +13 -0
  588. package/ui/transition/HorizontalTransition.d.ts +13 -0
  589. package/ui/transition/HorizontalTransition.js +8 -0
  590. package/ui/transition/HorizontalTransition.tsx +13 -0
  591. package/ui/transition/Transition.d.ts +12 -4
  592. package/ui/transition/Transition.js +7 -3
  593. package/ui/transition/Transition.tsx +12 -4
  594. package/ui/transition/VerticalTransition.d.ts +13 -0
  595. package/ui/transition/VerticalTransition.js +8 -0
  596. package/ui/transition/VerticalTransition.tsx +13 -0
  597. package/ui/transition/util.d.ts +16 -6
  598. package/ui/transition/util.js +7 -1
  599. package/ui/transition/util.tsx +16 -6
  600. package/ui/tree/TreeApp.d.ts +11 -0
  601. package/ui/tree/TreeApp.js +6 -0
  602. package/ui/tree/TreeApp.tsx +11 -0
  603. package/ui/tree/TreeBreadcrumbs.d.ts +11 -0
  604. package/ui/tree/TreeBreadcrumbs.js +6 -0
  605. package/ui/tree/TreeBreadcrumbs.tsx +11 -0
  606. package/ui/tree/TreeButton.d.ts +9 -1
  607. package/ui/tree/TreeButton.js +4 -0
  608. package/ui/tree/TreeButton.tsx +9 -1
  609. package/ui/tree/TreeCard.d.ts +8 -1
  610. package/ui/tree/TreeCard.js +8 -1
  611. package/ui/tree/TreeCard.tsx +8 -1
  612. package/ui/tree/TreeCards.d.ts +16 -1
  613. package/ui/tree/TreeCards.js +11 -1
  614. package/ui/tree/TreeCards.tsx +16 -1
  615. package/ui/tree/TreeContext.d.ts +18 -1
  616. package/ui/tree/TreeContext.js +18 -1
  617. package/ui/tree/TreeContext.tsx +18 -1
  618. package/ui/tree/TreeMenu.d.ts +28 -1
  619. package/ui/tree/TreeMenu.js +23 -1
  620. package/ui/tree/TreeMenu.tsx +28 -1
  621. package/ui/tree/TreePage.d.ts +6 -0
  622. package/ui/tree/TreePage.js +6 -0
  623. package/ui/tree/TreePage.tsx +6 -0
  624. package/ui/tree/TreeRouter.d.ts +17 -2
  625. package/ui/tree/TreeRouter.js +12 -2
  626. package/ui/tree/TreeRouter.tsx +17 -2
  627. package/ui/tree/TreeSidebar.d.ts +11 -0
  628. package/ui/tree/TreeSidebar.js +6 -0
  629. package/ui/tree/TreeSidebar.tsx +11 -0
  630. package/ui/util/context.d.ts +13 -1
  631. package/ui/util/context.ts +13 -1
  632. package/ui/util/css.d.ts +17 -4
  633. package/ui/util/css.js +5 -1
  634. package/ui/util/css.ts +17 -4
  635. package/ui/util/event.d.ts +9 -1
  636. package/ui/util/event.js +9 -1
  637. package/ui/util/event.ts +9 -1
  638. package/ui/util/focus.d.ts +24 -5
  639. package/ui/util/focus.js +24 -5
  640. package/ui/util/focus.ts +24 -5
  641. package/ui/util/meta.d.ts +113 -21
  642. package/ui/util/meta.js +73 -13
  643. package/ui/util/meta.ts +113 -21
  644. package/ui/util/notice.d.ts +98 -10
  645. package/ui/util/notice.js +93 -9
  646. package/ui/util/notice.ts +98 -10
  647. package/ui/util/props.d.ts +10 -2
  648. package/ui/util/props.ts +10 -2
  649. package/ui/util/refresh.d.ts +10 -1
  650. package/ui/util/refresh.js +10 -1
  651. package/ui/util/refresh.ts +10 -1
  652. package/ui/util/scroll.d.ts +20 -4
  653. package/ui/util/scroll.js +20 -4
  654. package/ui/util/scroll.ts +20 -4
  655. package/ui/util/state.d.ts +19 -5
  656. package/ui/util/state.js +19 -5
  657. package/ui/util/state.ts +19 -5
  658. package/util/ansi.d.ts +118 -0
  659. package/util/ansi.js +116 -0
  660. package/util/array.d.ts +349 -33
  661. package/util/array.js +284 -27
  662. package/util/async.d.ts +87 -9
  663. package/util/async.js +80 -8
  664. package/util/base64.d.ts +56 -6
  665. package/util/base64.js +56 -6
  666. package/util/boolean.d.ts +75 -10
  667. package/util/boolean.js +75 -10
  668. package/util/buffer.d.ts +26 -3
  669. package/util/buffer.js +21 -3
  670. package/util/bytes.d.ts +42 -4
  671. package/util/bytes.js +32 -2
  672. package/util/class.d.ts +59 -8
  673. package/util/class.js +44 -5
  674. package/util/color.d.ts +131 -13
  675. package/util/color.js +126 -12
  676. package/util/constants.d.ts +132 -19
  677. package/util/constants.js +132 -19
  678. package/util/crypto.d.ts +17 -1
  679. package/util/crypto.js +17 -1
  680. package/util/currency.d.ts +38 -4
  681. package/util/currency.js +33 -3
  682. package/util/data.d.ts +139 -24
  683. package/util/data.js +39 -5
  684. package/util/date.d.ts +152 -18
  685. package/util/date.js +147 -17
  686. package/util/debug.d.ts +112 -11
  687. package/util/debug.js +114 -11
  688. package/util/dictionary.d.ts +205 -24
  689. package/util/dictionary.js +162 -17
  690. package/util/diff.d.ts +22 -3
  691. package/util/diff.js +11 -1
  692. package/util/dispose.d.ts +74 -2
  693. package/util/dispose.js +74 -2
  694. package/util/duration.d.ts +278 -16
  695. package/util/duration.js +267 -15
  696. package/util/element.d.ts +59 -6
  697. package/util/element.js +32 -3
  698. package/util/entity.d.ts +39 -6
  699. package/util/entity.js +5 -1
  700. package/util/entry.d.ts +56 -9
  701. package/util/entry.js +32 -4
  702. package/util/env.d.ts +26 -4
  703. package/util/env.js +26 -4
  704. package/util/equal.d.ts +181 -17
  705. package/util/equal.js +181 -17
  706. package/util/error.d.ts +57 -5
  707. package/util/error.js +52 -4
  708. package/util/file.d.ts +30 -7
  709. package/util/file.js +25 -6
  710. package/util/filter.d.ts +36 -4
  711. package/util/filter.js +31 -3
  712. package/util/focus.d.ts +9 -1
  713. package/util/focus.js +9 -1
  714. package/util/format.d.ts +186 -22
  715. package/util/format.js +135 -14
  716. package/util/function.d.ts +66 -11
  717. package/util/function.js +31 -4
  718. package/util/geo.d.ts +60 -8
  719. package/util/geo.js +45 -5
  720. package/util/hash.d.ts +21 -2
  721. package/util/hash.js +21 -2
  722. package/util/http.d.ts +134 -19
  723. package/util/http.js +94 -11
  724. package/util/hydrate.d.ts +19 -2
  725. package/util/hydrate.js +12 -1
  726. package/util/item.d.ts +70 -11
  727. package/util/item.js +35 -4
  728. package/util/iterate.d.ts +109 -13
  729. package/util/iterate.js +86 -10
  730. package/util/jwt.d.ts +47 -13
  731. package/util/jwt.js +36 -12
  732. package/util/lazy.d.ts +9 -6
  733. package/util/link.d.ts +10 -3
  734. package/util/link.js +5 -2
  735. package/util/log.d.ts +26 -3
  736. package/util/log.js +26 -3
  737. package/util/map.d.ts +144 -19
  738. package/util/map.js +101 -11
  739. package/util/merge.d.ts +23 -1
  740. package/util/merge.js +6 -0
  741. package/util/null.d.ts +102 -13
  742. package/util/null.js +92 -11
  743. package/util/number.d.ts +125 -8
  744. package/util/number.js +120 -7
  745. package/util/object.d.ts +263 -31
  746. package/util/object.js +154 -17
  747. package/util/path.d.ts +91 -15
  748. package/util/path.js +60 -9
  749. package/util/query.d.ts +78 -9
  750. package/util/query.js +58 -6
  751. package/util/random.d.ts +67 -4
  752. package/util/random.js +67 -4
  753. package/util/regexp.d.ts +201 -24
  754. package/util/regexp.js +106 -11
  755. package/util/sequence.d.ts +66 -8
  756. package/util/sequence.js +52 -7
  757. package/util/serialise.d.ts +7 -1
  758. package/util/serialise.js +7 -1
  759. package/util/set.d.ts +103 -13
  760. package/util/set.js +83 -9
  761. package/util/sort.d.ts +32 -7
  762. package/util/sort.js +26 -6
  763. package/util/source.d.ts +28 -3
  764. package/util/source.js +22 -2
  765. package/util/start.d.ts +62 -5
  766. package/util/start.js +47 -2
  767. package/util/string.d.ts +209 -25
  768. package/util/string.js +188 -21
  769. package/util/template.d.ts +58 -9
  770. package/util/template.js +45 -6
  771. package/util/timeout.d.ts +35 -11
  772. package/util/timeout.js +35 -11
  773. package/util/transform.d.ts +87 -8
  774. package/util/transform.js +75 -7
  775. package/util/tree.d.ts +39 -6
  776. package/util/tree.js +3 -0
  777. package/util/types.d.ts +8 -2
  778. package/util/undefined.d.ts +47 -6
  779. package/util/undefined.js +47 -6
  780. package/util/units.d.ts +107 -12
  781. package/util/units.js +97 -12
  782. package/util/update.d.ts +36 -4
  783. package/util/update.js +24 -2
  784. package/util/uri.d.ts +138 -6
  785. package/util/uri.js +44 -3
  786. package/util/url.d.ts +152 -7
  787. package/util/url.js +136 -5
  788. package/util/uuid.d.ts +28 -3
  789. package/util/uuid.js +28 -3
  790. package/util/validate.d.ts +85 -20
  791. package/util/validate.js +61 -12
  792. package/util/xml.d.ts +9 -10
  793. package/util/xml.js +9 -10
@@ -1,60 +1,194 @@
1
1
  import { awaitDispose } from "../../util/dispose.js";
2
2
  import { DBProvider } from "./DBProvider.js";
3
3
  import { MemoryDBProvider } from "./MemoryDBProvider.js";
4
- /** Keep a copy of asynchronous remote data in a local synchronous cache. */
4
+ /**
5
+ * Database provider that keeps a copy of asynchronous remote data in a local synchronous cache.
6
+ *
7
+ * - Wraps a `source` provider and mirrors every read and write into an in-memory `MemoryDBProvider`, so subsequent reads can be served synchronously and live subscriptions stay seeded.
8
+ * - Reads fetch from `source`, then refresh the cache; writes hit `source`, then mirror the change into the cache.
9
+ * - Discover the cache from a wrapping layer with `getSource(CacheDBProvider, provider)` to seed stores from `.memory`.
10
+ *
11
+ * @example
12
+ * const provider = new CacheDBProvider(new FirestoreProvider());
13
+ * await provider.getItem(users, 123); // Fetches from source, then caches in memory.
14
+ *
15
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider
16
+ */
5
17
  export class CacheDBProvider extends DBProvider {
18
+ /**
19
+ * The wrapped source provider that data is fetched from and written to.
20
+ *
21
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/source
22
+ */
6
23
  source;
24
+ /**
25
+ * The in-memory provider holding the local synchronous cache of `source` data.
26
+ *
27
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/memory
28
+ */
7
29
  memory;
30
+ /**
31
+ * Create a new `CacheDBProvider` wrapping a source provider.
32
+ *
33
+ * @param source The provider to fetch from and write to.
34
+ * @param cache In-memory provider to use as the cache (a fresh `MemoryDBProvider` by default).
35
+ */
8
36
  constructor(source, cache = new MemoryDBProvider()) {
9
37
  super();
10
38
  this.source = source;
11
39
  this.memory = cache;
12
40
  }
41
+ /**
42
+ * Get an item from `source` by its id, refreshing the cache, or `undefined` if it doesn't exist.
43
+ *
44
+ * @param collection Collection the item belongs to.
45
+ * @param id Identifier of the item to get.
46
+ * @returns The item, or `undefined` if no item exists with that id.
47
+ * @example await provider.getItem(users, 123) // Item or undefined.
48
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/getItem
49
+ */
13
50
  async getItem(collection, id) {
14
51
  const item = await this.source.getItem(collection, id);
15
52
  const table = this.memory.getTable(collection);
16
53
  item ? table.setItem(id, item) : table.deleteItem(id);
17
54
  return item;
18
55
  }
56
+ /**
57
+ * Subscribe to live changes for a single item, mirroring each emission into the cache.
58
+ *
59
+ * @param collection Collection the item belongs to.
60
+ * @param id Identifier of the item to subscribe to.
61
+ * @returns Async sequence yielding the item (or `undefined`) on every change.
62
+ * @example for await (const item of provider.getItemSequence(users, 123)) console.log(item);
63
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/getItemSequence
64
+ */
19
65
  getItemSequence(collection, id) {
20
66
  return this.memory.getTable(collection).setItemSequence(id, this.source.getItemSequence(collection, id));
21
67
  }
68
+ /**
69
+ * Add a new item to `source` and mirror it into the cache.
70
+ *
71
+ * @param collection Collection to add the item to.
72
+ * @param data Data for the new item.
73
+ * @returns The generated identifier for the new item.
74
+ * @example await provider.addItem(users, { name: "Dave" }) // 123
75
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/addItem
76
+ */
22
77
  async addItem(collection, data) {
23
78
  const id = await this.source.addItem(collection, data);
24
79
  this.memory.getTable(collection).setItem(id, data);
25
80
  return id;
26
81
  }
82
+ /**
83
+ * Set (insert or overwrite) an item in `source` and mirror it into the cache.
84
+ *
85
+ * @param collection Collection the item belongs to.
86
+ * @param id Identifier of the item to set.
87
+ * @param data Full data to store for the item.
88
+ * @example await provider.setItem(users, 123, { name: "Dave" });
89
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/setItem
90
+ */
27
91
  async setItem(collection, id, data) {
28
92
  await this.source.setItem(collection, id, data);
29
93
  this.memory.getTable(collection).setItem(id, data);
30
94
  }
95
+ /**
96
+ * Apply partial updates to an item in `source` and mirror them into the cache.
97
+ *
98
+ * @param collection Collection the item belongs to.
99
+ * @param id Identifier of the item to update.
100
+ * @param updates Updates to apply to the item.
101
+ * @example await provider.updateItem(users, 123, { name: "Dave" });
102
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/updateItem
103
+ */
31
104
  async updateItem(collection, id, updates) {
32
105
  await this.source.updateItem(collection, id, updates);
33
106
  this.memory.getTable(collection).updateItem(id, updates);
34
107
  }
108
+ /**
109
+ * Delete an item from `source` and remove it from the cache.
110
+ *
111
+ * @param collection Collection the item belongs to.
112
+ * @param id Identifier of the item to delete.
113
+ * @example await provider.deleteItem(users, 123);
114
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/deleteItem
115
+ */
35
116
  async deleteItem(collection, id) {
36
117
  await this.source.deleteItem(collection, id);
37
118
  this.memory.getTable(collection).deleteItem(id);
38
119
  }
120
+ /**
121
+ * Count the items in `source` matching an optional query (not cached).
122
+ *
123
+ * @param collection Collection to count items in.
124
+ * @param query Query to filter the counted items (counts all items when omitted).
125
+ * @returns The number of matching items.
126
+ * @example await provider.countQuery(users, { age: 40 }) // 7
127
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/countQuery
128
+ */
39
129
  countQuery(collection, query) {
40
130
  return this.source.countQuery(collection, query);
41
131
  }
132
+ /**
133
+ * Get the items in `source` matching an optional query, refreshing the cache.
134
+ *
135
+ * @param collection Collection to query.
136
+ * @param query Query to filter, sort, and limit the items (returns all items when omitted).
137
+ * @returns An array of matching items.
138
+ * @example await provider.getQuery(users, { age: 40, $order: "name" }) // Items.
139
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/getQuery
140
+ */
42
141
  async getQuery(collection, query) {
43
142
  const items = await this.source.getQuery(collection, query);
44
143
  this.memory.getTable(collection).setItems(items);
45
144
  return items;
46
145
  }
146
+ /**
147
+ * Subscribe to live changes for a query, mirroring each emission into the cache.
148
+ *
149
+ * @param collection Collection to query.
150
+ * @param query Query to filter, sort, and limit the items.
151
+ * @returns Async sequence yielding the matching items on every change.
152
+ * @example for await (const items of provider.getQuerySequence(users, { age: 40 })) console.log(items);
153
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/getQuerySequence
154
+ */
47
155
  getQuerySequence(collection, query) {
48
156
  return this.memory.getTable(collection).setItemsSequence(this.source.getQuerySequence(collection, query));
49
157
  }
158
+ /**
159
+ * Set (overwrite) every item in `source` matching a query and mirror the change into the cache.
160
+ *
161
+ * @param collection Collection to write to.
162
+ * @param query Query selecting the items to set.
163
+ * @param data Full data to store for each matching item.
164
+ * @example await provider.setQuery(users, { age: 40 }, { active: true });
165
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/setQuery
166
+ */
50
167
  async setQuery(collection, query, data) {
51
168
  await this.source.setQuery(collection, query, data);
52
169
  this.memory.getTable(collection).setQuery(query, data);
53
170
  }
171
+ /**
172
+ * Apply partial updates to every item in `source` matching a query and mirror them into the cache.
173
+ *
174
+ * @param collection Collection to write to.
175
+ * @param query Query selecting the items to update.
176
+ * @param updates Updates to apply to each matching item.
177
+ * @example await provider.updateQuery(users, { age: 40 }, { active: true });
178
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/updateQuery
179
+ */
54
180
  async updateQuery(collection, query, updates) {
55
181
  await this.source.updateQuery(collection, query, updates);
56
182
  this.memory.getTable(collection).updateQuery(query, updates);
57
183
  }
184
+ /**
185
+ * Delete every item in `source` matching a query and remove them from the cache.
186
+ *
187
+ * @param collection Collection to delete from.
188
+ * @param query Query selecting the items to delete.
189
+ * @example await provider.deleteQuery(users, { active: false });
190
+ * @see https://dhoulb.github.io/shelving/db/provider/CacheDBProvider/CacheDBProvider/deleteQuery
191
+ */
58
192
  async deleteQuery(collection, query) {
59
193
  await this.source.deleteQuery(collection, query);
60
194
  this.memory.getTable(collection).deleteQuery(query);
@@ -5,7 +5,13 @@ import type { Query } from "../../util/query.js";
5
5
  import type { Updates } from "../../util/update.js";
6
6
  import type { Collection } from "../collection/Collection.js";
7
7
  import { ThroughDBProvider } from "./ThroughDBProvider.js";
8
- /** A structured log entry for a database change. */
8
+ /**
9
+ * Structured log entry recording a single database write performed through a `ChangesDBProvider`.
10
+ *
11
+ * - `action` is the kind of write; `collection` is the collection name; `id`, `query`, `data`, and `updates` carry whichever fields apply to that write.
12
+ *
13
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/DBChange
14
+ */
9
15
  export type DBChange<I extends Identifier> = {
10
16
  readonly action: "add" | "set" | "update" | "delete";
11
17
  readonly collection: string;
@@ -15,17 +21,92 @@ export type DBChange<I extends Identifier> = {
15
21
  readonly updates?: unknown;
16
22
  };
17
23
  /**
18
- * Database provider that keeps a log of any written changes to its `.changes` property.
19
- * - This is useful if you want to hook into a database to build out audit logging functionality.
24
+ * Database provider that records every write it performs to its `changes` log.
25
+ *
26
+ * - Wraps a `source` provider, delegates each write, then appends a `DBChange` entry describing what happened.
27
+ * - Useful for building audit logging, change feeds, or assertions in tests; reads are passed straight through and not logged.
28
+ *
29
+ * @example
30
+ * const provider = new ChangesDBProvider(new MemoryDBProvider());
31
+ * await provider.addItem(users, { name: "Dave" });
32
+ * provider.changes; // [{ action: "add", collection: "users", id: 123, data: { name: "Dave" } }]
33
+ *
34
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider
20
35
  */
21
36
  export declare class ChangesDBProvider<I extends Identifier, T extends Data> extends ThroughDBProvider<I, T> {
37
+ /**
38
+ * The log of writes performed through this provider, in the order they happened.
39
+ *
40
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/changes
41
+ */
22
42
  get changes(): ReadonlyArray<DBChange<I>>;
23
43
  readonly _changes: MutableArray<DBChange<I>>;
44
+ /**
45
+ * Add a new item, then log an `"add"` change.
46
+ *
47
+ * @param collection Collection to add the item to.
48
+ * @param data Data for the new item.
49
+ * @returns The generated identifier for the new item.
50
+ * @example await provider.addItem(users, { name: "Dave" }) // 123
51
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/addItem
52
+ */
24
53
  addItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, data: TT): Promise<II>;
54
+ /**
55
+ * Set (insert or overwrite) an item by its id, then log a `"set"` change.
56
+ *
57
+ * @param collection Collection the item belongs to.
58
+ * @param id Identifier of the item to set.
59
+ * @param data Full data to store for the item.
60
+ * @example await provider.setItem(users, 123, { name: "Dave" });
61
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/setItem
62
+ */
25
63
  setItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, data: TT): Promise<void>;
64
+ /**
65
+ * Apply partial updates to an item by its id, then log an `"update"` change.
66
+ *
67
+ * @param collection Collection the item belongs to.
68
+ * @param id Identifier of the item to update.
69
+ * @param updates Updates to apply to the item.
70
+ * @example await provider.updateItem(users, 123, { name: "Dave" });
71
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/updateItem
72
+ */
26
73
  updateItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, updates: Updates<Item<II, TT>>): Promise<void>;
74
+ /**
75
+ * Delete an item by its id, then log a `"delete"` change.
76
+ *
77
+ * @param collection Collection the item belongs to.
78
+ * @param id Identifier of the item to delete.
79
+ * @example await provider.deleteItem(users, 123);
80
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/deleteItem
81
+ */
27
82
  deleteItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<void>;
83
+ /**
84
+ * Set (overwrite) every item matching a query, then log a `"set"` change.
85
+ *
86
+ * @param collection Collection to write to.
87
+ * @param query Query selecting the items to set.
88
+ * @param data Full data to store for each matching item.
89
+ * @example await provider.setQuery(users, { age: 40 }, { active: true });
90
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/setQuery
91
+ */
28
92
  setQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, data: TT): Promise<void>;
93
+ /**
94
+ * Apply partial updates to every item matching a query, then log an `"update"` change.
95
+ *
96
+ * @param collection Collection to write to.
97
+ * @param query Query selecting the items to update.
98
+ * @param updates Updates to apply to each matching item.
99
+ * @example await provider.updateQuery(users, { age: 40 }, { active: true });
100
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/updateQuery
101
+ */
29
102
  updateQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, updates: Updates<TT>): Promise<void>;
103
+ /**
104
+ * Delete every item matching a query, then log a `"delete"` change.
105
+ *
106
+ * @param collection Collection to delete from.
107
+ * @param query Query selecting the items to delete.
108
+ * @example await provider.deleteQuery(users, { active: false });
109
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/deleteQuery
110
+ */
30
111
  deleteQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): Promise<void>;
31
112
  }
@@ -1,38 +1,113 @@
1
1
  import { ThroughDBProvider } from "./ThroughDBProvider.js";
2
2
  /**
3
- * Database provider that keeps a log of any written changes to its `.changes` property.
4
- * - This is useful if you want to hook into a database to build out audit logging functionality.
3
+ * Database provider that records every write it performs to its `changes` log.
4
+ *
5
+ * - Wraps a `source` provider, delegates each write, then appends a `DBChange` entry describing what happened.
6
+ * - Useful for building audit logging, change feeds, or assertions in tests; reads are passed straight through and not logged.
7
+ *
8
+ * @example
9
+ * const provider = new ChangesDBProvider(new MemoryDBProvider());
10
+ * await provider.addItem(users, { name: "Dave" });
11
+ * provider.changes; // [{ action: "add", collection: "users", id: 123, data: { name: "Dave" } }]
12
+ *
13
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider
5
14
  */
6
15
  export class ChangesDBProvider extends ThroughDBProvider {
16
+ /**
17
+ * The log of writes performed through this provider, in the order they happened.
18
+ *
19
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/changes
20
+ */
7
21
  get changes() {
8
22
  return this._changes;
9
23
  }
10
24
  _changes = [];
25
+ /**
26
+ * Add a new item, then log an `"add"` change.
27
+ *
28
+ * @param collection Collection to add the item to.
29
+ * @param data Data for the new item.
30
+ * @returns The generated identifier for the new item.
31
+ * @example await provider.addItem(users, { name: "Dave" }) // 123
32
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/addItem
33
+ */
11
34
  async addItem(collection, data) {
12
35
  const id = await super.addItem(collection, data);
13
36
  this._changes.push({ action: "add", collection: collection.name, id, data });
14
37
  return id;
15
38
  }
39
+ /**
40
+ * Set (insert or overwrite) an item by its id, then log a `"set"` change.
41
+ *
42
+ * @param collection Collection the item belongs to.
43
+ * @param id Identifier of the item to set.
44
+ * @param data Full data to store for the item.
45
+ * @example await provider.setItem(users, 123, { name: "Dave" });
46
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/setItem
47
+ */
16
48
  async setItem(collection, id, data) {
17
49
  await super.setItem(collection, id, data);
18
50
  this._changes.push({ action: "set", collection: collection.name, id, data });
19
51
  }
52
+ /**
53
+ * Apply partial updates to an item by its id, then log an `"update"` change.
54
+ *
55
+ * @param collection Collection the item belongs to.
56
+ * @param id Identifier of the item to update.
57
+ * @param updates Updates to apply to the item.
58
+ * @example await provider.updateItem(users, 123, { name: "Dave" });
59
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/updateItem
60
+ */
20
61
  async updateItem(collection, id, updates) {
21
62
  await super.updateItem(collection, id, updates);
22
63
  this._changes.push({ action: "update", collection: collection.name, id, updates });
23
64
  }
65
+ /**
66
+ * Delete an item by its id, then log a `"delete"` change.
67
+ *
68
+ * @param collection Collection the item belongs to.
69
+ * @param id Identifier of the item to delete.
70
+ * @example await provider.deleteItem(users, 123);
71
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/deleteItem
72
+ */
24
73
  async deleteItem(collection, id) {
25
74
  await super.deleteItem(collection, id);
26
75
  this._changes.push({ action: "delete", collection: collection.name, id });
27
76
  }
77
+ /**
78
+ * Set (overwrite) every item matching a query, then log a `"set"` change.
79
+ *
80
+ * @param collection Collection to write to.
81
+ * @param query Query selecting the items to set.
82
+ * @param data Full data to store for each matching item.
83
+ * @example await provider.setQuery(users, { age: 40 }, { active: true });
84
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/setQuery
85
+ */
28
86
  async setQuery(collection, query, data) {
29
87
  await super.setQuery(collection, query, data);
30
88
  this._changes.push({ action: "set", collection: collection.name, query, data });
31
89
  }
90
+ /**
91
+ * Apply partial updates to every item matching a query, then log an `"update"` change.
92
+ *
93
+ * @param collection Collection to write to.
94
+ * @param query Query selecting the items to update.
95
+ * @param updates Updates to apply to each matching item.
96
+ * @example await provider.updateQuery(users, { age: 40 }, { active: true });
97
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/updateQuery
98
+ */
32
99
  async updateQuery(collection, query, updates) {
33
100
  await super.updateQuery(collection, query, updates);
34
101
  this._changes.push({ action: "update", collection: collection.name, query, updates });
35
102
  }
103
+ /**
104
+ * Delete every item matching a query, then log a `"delete"` change.
105
+ *
106
+ * @param collection Collection to delete from.
107
+ * @param query Query selecting the items to delete.
108
+ * @example await provider.deleteQuery(users, { active: false });
109
+ * @see https://dhoulb.github.io/shelving/db/provider/ChangesDBProvider/ChangesDBProvider/deleteQuery
110
+ */
36
111
  async deleteQuery(collection, query) {
37
112
  await super.deleteQuery(collection, query);
38
113
  this._changes.push({ action: "delete", collection: collection.name, query });
@@ -3,22 +3,169 @@ import type { Identifier, Item, Items, ItemsSequence, OptionalItem, OptionalItem
3
3
  import type { Query } from "../../util/query.js";
4
4
  import type { Updates } from "../../util/update.js";
5
5
  import type { Collection } from "../collection/Collection.js";
6
- /** Provider with a fully asynchronous interface for database access. */
6
+ /**
7
+ * Provider with a fully asynchronous interface for database access.
8
+ *
9
+ * - Abstract base for every database provider; subclasses implement the storage backend (memory, SQL, remote, etc.).
10
+ * - All operations are keyed by a `Collection`, which carries the name plus identifier and data schemas.
11
+ * - Layered behaviour (caching, validation, logging) is added by wrapping a provider in a `Through*Provider`.
12
+ *
13
+ * @example
14
+ * const provider = new MemoryDBProvider();
15
+ * const id = await provider.addItem(users, { name: "Dave" });
16
+ *
17
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider
18
+ */
7
19
  export declare abstract class DBProvider<I extends Identifier = Identifier, T extends Data = Data> implements AsyncDisposable {
20
+ /**
21
+ * Get an item from a collection by its id, or `undefined` if it doesn't exist.
22
+ *
23
+ * @param collection Collection the item belongs to.
24
+ * @param id Identifier of the item to get.
25
+ * @returns The item, or `undefined` if no item exists with that id.
26
+ * @example await provider.getItem(users, 123) // Item or undefined.
27
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/getItem
28
+ */
8
29
  abstract getItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<OptionalItem<II, TT>>;
30
+ /**
31
+ * Get an item from a collection by its id, or throw if it doesn't exist.
32
+ *
33
+ * @param collection Collection the item belongs to.
34
+ * @param id Identifier of the item to get.
35
+ * @returns The item.
36
+ * @throws `RequiredError` if no item exists with that id.
37
+ * @example await provider.requireItem(users, 123) // Item (or throws).
38
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/requireItem
39
+ */
9
40
  requireItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<Item<II, TT>>;
41
+ /**
42
+ * Subscribe to live changes for a single item by its id.
43
+ *
44
+ * @param collection Collection the item belongs to.
45
+ * @param id Identifier of the item to subscribe to.
46
+ * @returns Async sequence yielding the item (or `undefined`) on every change.
47
+ * @example for await (const item of provider.getItemSequence(users, 123)) console.log(item);
48
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/getItemSequence
49
+ */
10
50
  abstract getItemSequence<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): OptionalItemSequence<II, TT>;
51
+ /**
52
+ * Add a new item to a collection and return its generated id.
53
+ *
54
+ * @param collection Collection to add the item to.
55
+ * @param data Data for the new item.
56
+ * @returns The generated identifier for the new item.
57
+ * @example await provider.addItem(users, { name: "Dave" }) // 123
58
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/addItem
59
+ */
11
60
  abstract addItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, data: TT): Promise<II>;
61
+ /**
62
+ * Set (insert or overwrite) the data for an item by its id.
63
+ *
64
+ * @param collection Collection the item belongs to.
65
+ * @param id Identifier of the item to set.
66
+ * @param data Full data to store for the item.
67
+ * @example await provider.setItem(users, 123, { name: "Dave" });
68
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/setItem
69
+ */
12
70
  abstract setItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, data: TT): Promise<void>;
71
+ /**
72
+ * Apply partial updates to an existing item by its id.
73
+ *
74
+ * @param collection Collection the item belongs to.
75
+ * @param id Identifier of the item to update.
76
+ * @param updates Updates to apply to the item.
77
+ * @example await provider.updateItem(users, 123, { name: "Dave" });
78
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/updateItem
79
+ */
13
80
  abstract updateItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, updates: Updates<Item<II, TT>>): Promise<void>;
81
+ /**
82
+ * Delete an item from a collection by its id.
83
+ *
84
+ * @param collection Collection the item belongs to.
85
+ * @param id Identifier of the item to delete.
86
+ * @example await provider.deleteItem(users, 123);
87
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/deleteItem
88
+ */
14
89
  abstract deleteItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<void>;
90
+ /**
91
+ * Count the items in a collection matching an optional query.
92
+ *
93
+ * @param collection Collection to count items in.
94
+ * @param query Query to filter the counted items (counts all items when omitted).
95
+ * @returns The number of matching items.
96
+ * @example await provider.countQuery(users, { age: 40 }) // 7
97
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/countQuery
98
+ */
15
99
  countQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): Promise<number>;
100
+ /**
101
+ * Get the items in a collection matching an optional query.
102
+ *
103
+ * @param collection Collection to query.
104
+ * @param query Query to filter, sort, and limit the items (returns all items when omitted).
105
+ * @returns An array of matching items.
106
+ * @example await provider.getQuery(users, { age: 40, $order: "name" }) // Items.
107
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/getQuery
108
+ */
16
109
  abstract getQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): Promise<Items<II, TT>>;
110
+ /**
111
+ * Subscribe to live changes for the result of a query.
112
+ *
113
+ * @param collection Collection to query.
114
+ * @param query Query to filter, sort, and limit the items.
115
+ * @returns Async sequence yielding the matching items on every change.
116
+ * @example for await (const items of provider.getQuerySequence(users, { age: 40 })) console.log(items);
117
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/getQuerySequence
118
+ */
17
119
  abstract getQuerySequence<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): ItemsSequence<II, TT>;
120
+ /**
121
+ * Set (overwrite) the data for every item matching a query.
122
+ *
123
+ * @param collection Collection to write to.
124
+ * @param query Query selecting the items to set.
125
+ * @param data Full data to store for each matching item.
126
+ * @example await provider.setQuery(users, { age: 40 }, { active: true });
127
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/setQuery
128
+ */
18
129
  abstract setQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, data: TT): Promise<void>;
130
+ /**
131
+ * Apply partial updates to every item matching a query.
132
+ *
133
+ * @param collection Collection to write to.
134
+ * @param query Query selecting the items to update.
135
+ * @param updates Updates to apply to each matching item.
136
+ * @example await provider.updateQuery(users, { age: 40 }, { active: true });
137
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/updateQuery
138
+ */
19
139
  abstract updateQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, updates: Updates<TT>): Promise<void>;
140
+ /**
141
+ * Delete every item matching a query.
142
+ *
143
+ * @param collection Collection to delete from.
144
+ * @param query Query selecting the items to delete.
145
+ * @example await provider.deleteQuery(users, { active: false });
146
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/deleteQuery
147
+ */
20
148
  abstract deleteQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): Promise<void>;
149
+ /**
150
+ * Get the first item matching a query, or `undefined` if there are none.
151
+ *
152
+ * @param collection Collection to query.
153
+ * @param query Query to filter and sort the items.
154
+ * @returns The first matching item, or `undefined` if none match.
155
+ * @example await provider.getFirst(users, { $order: "name" }) // Item or undefined.
156
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/getFirst
157
+ */
21
158
  getFirst<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): Promise<OptionalItem<II, TT>>;
159
+ /**
160
+ * Get the first item matching a query, or throw if there are none.
161
+ *
162
+ * @param collection Collection to query.
163
+ * @param query Query to filter and sort the items.
164
+ * @returns The first matching item.
165
+ * @throws `RequiredError` if no item matches the query.
166
+ * @example await provider.requireFirst(users, { $order: "name" }) // Item (or throws).
167
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/requireFirst
168
+ */
22
169
  requireFirst<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): Promise<Item<II, TT>>;
23
170
  [Symbol.asyncDispose](): Promise<void>;
24
171
  }
@@ -1,8 +1,30 @@
1
1
  import { RequiredError } from "../../error/RequiredError.js";
2
2
  import { countArray, getFirst } from "../../util/array.js";
3
3
  import { awaitDispose } from "../../util/dispose.js";
4
- /** Provider with a fully asynchronous interface for database access. */
4
+ /**
5
+ * Provider with a fully asynchronous interface for database access.
6
+ *
7
+ * - Abstract base for every database provider; subclasses implement the storage backend (memory, SQL, remote, etc.).
8
+ * - All operations are keyed by a `Collection`, which carries the name plus identifier and data schemas.
9
+ * - Layered behaviour (caching, validation, logging) is added by wrapping a provider in a `Through*Provider`.
10
+ *
11
+ * @example
12
+ * const provider = new MemoryDBProvider();
13
+ * const id = await provider.addItem(users, { name: "Dave" });
14
+ *
15
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider
16
+ */
5
17
  export class DBProvider {
18
+ /**
19
+ * Get an item from a collection by its id, or throw if it doesn't exist.
20
+ *
21
+ * @param collection Collection the item belongs to.
22
+ * @param id Identifier of the item to get.
23
+ * @returns The item.
24
+ * @throws `RequiredError` if no item exists with that id.
25
+ * @example await provider.requireItem(users, 123) // Item (or throws).
26
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/requireItem
27
+ */
6
28
  async requireItem(collection, id) {
7
29
  const item = await this.getItem(collection, id);
8
30
  if (!item)
@@ -14,12 +36,40 @@ export class DBProvider {
14
36
  });
15
37
  return item;
16
38
  }
39
+ /**
40
+ * Count the items in a collection matching an optional query.
41
+ *
42
+ * @param collection Collection to count items in.
43
+ * @param query Query to filter the counted items (counts all items when omitted).
44
+ * @returns The number of matching items.
45
+ * @example await provider.countQuery(users, { age: 40 }) // 7
46
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/countQuery
47
+ */
17
48
  async countQuery(collection, query) {
18
49
  return countArray(await this.getQuery(collection, query));
19
50
  }
51
+ /**
52
+ * Get the first item matching a query, or `undefined` if there are none.
53
+ *
54
+ * @param collection Collection to query.
55
+ * @param query Query to filter and sort the items.
56
+ * @returns The first matching item, or `undefined` if none match.
57
+ * @example await provider.getFirst(users, { $order: "name" }) // Item or undefined.
58
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/getFirst
59
+ */
20
60
  async getFirst(collection, query) {
21
61
  return getFirst(await this.getQuery(collection, { ...query, $limit: 1 }));
22
62
  }
63
+ /**
64
+ * Get the first item matching a query, or throw if there are none.
65
+ *
66
+ * @param collection Collection to query.
67
+ * @param query Query to filter and sort the items.
68
+ * @returns The first matching item.
69
+ * @throws `RequiredError` if no item matches the query.
70
+ * @example await provider.requireFirst(users, { $order: "name" }) // Item (or throws).
71
+ * @see https://dhoulb.github.io/shelving/db/provider/DBProvider/DBProvider/requireFirst
72
+ */
23
73
  async requireFirst(collection, query) {
24
74
  const first = await this.getFirst(collection, query);
25
75
  if (!first)