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
@@ -5,24 +5,179 @@ import type { Sourceable } from "../../util/source.js";
5
5
  import type { Updates } from "../../util/update.js";
6
6
  import type { Collection } from "../collection/Collection.js";
7
7
  import type { DBProvider } from "./DBProvider.js";
8
- /** A provider that passes through to an asynchronous source. */
8
+ /**
9
+ * Database provider that passes every operation straight through to a wrapped `source` provider.
10
+ *
11
+ * - Base for the layered `Through*Provider` family (validation, caching, logging, change tracking); subclasses override individual methods to add behaviour and call `super` to delegate.
12
+ * - Exposes `source` and implements `Sourceable`, so wrapped providers can be discovered with `getSource()` / `requireSource()`.
13
+ *
14
+ * @example
15
+ * const provider = new ValidationDBProvider(new MemoryDBProvider());
16
+ *
17
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider
18
+ */
9
19
  export declare class ThroughDBProvider<I extends Identifier, T extends Data> implements DBProvider<I, T>, Sourceable<DBProvider<I, T>> {
20
+ /**
21
+ * The wrapped source provider that every operation is delegated to.
22
+ *
23
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/source
24
+ */
10
25
  readonly source: DBProvider<I, T>;
26
+ /**
27
+ * Create a new `ThroughDBProvider` wrapping a source provider.
28
+ *
29
+ * @param source The provider to delegate all operations to.
30
+ */
11
31
  constructor(source: DBProvider<I, T>);
32
+ /**
33
+ * Get an item from a collection by its id, or `undefined` if it doesn't exist.
34
+ *
35
+ * @param collection Collection the item belongs to.
36
+ * @param id Identifier of the item to get.
37
+ * @returns The item, or `undefined` if no item exists with that id.
38
+ * @example await provider.getItem(users, 123) // Item or undefined.
39
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getItem
40
+ */
12
41
  getItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<OptionalItem<II, TT>>;
42
+ /**
43
+ * Get an item from a collection by its id, or throw if it doesn't exist.
44
+ *
45
+ * @param collection Collection the item belongs to.
46
+ * @param id Identifier of the item to get.
47
+ * @returns The item.
48
+ * @throws `RequiredError` if no item exists with that id.
49
+ * @example await provider.requireItem(users, 123) // Item (or throws).
50
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/requireItem
51
+ */
13
52
  requireItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<Item<II, TT>>;
53
+ /**
54
+ * Subscribe to live changes for a single item by its id.
55
+ *
56
+ * @param collection Collection the item belongs to.
57
+ * @param id Identifier of the item to subscribe to.
58
+ * @returns Async sequence yielding the item (or `undefined`) on every change.
59
+ * @example for await (const item of provider.getItemSequence(users, 123)) console.log(item);
60
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getItemSequence
61
+ */
14
62
  getItemSequence<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): OptionalItemSequence<II, TT>;
63
+ /**
64
+ * Add a new item to a collection and return its generated id.
65
+ *
66
+ * @param collection Collection to add the item to.
67
+ * @param data Data for the new item.
68
+ * @returns The generated identifier for the new item.
69
+ * @example await provider.addItem(users, { name: "Dave" }) // 123
70
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/addItem
71
+ */
15
72
  addItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, data: TT): Promise<II>;
73
+ /**
74
+ * Set (insert or overwrite) the data for an item by its id.
75
+ *
76
+ * @param collection Collection the item belongs to.
77
+ * @param id Identifier of the item to set.
78
+ * @param data Full data to store for the item.
79
+ * @example await provider.setItem(users, 123, { name: "Dave" });
80
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/setItem
81
+ */
16
82
  setItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, data: TT): Promise<void>;
83
+ /**
84
+ * Apply partial updates to an existing item by its id.
85
+ *
86
+ * @param collection Collection the item belongs to.
87
+ * @param id Identifier of the item to update.
88
+ * @param updates Updates to apply to the item.
89
+ * @example await provider.updateItem(users, 123, { name: "Dave" });
90
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/updateItem
91
+ */
17
92
  updateItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, updates: Updates<Item<II, TT>>): Promise<void>;
93
+ /**
94
+ * Delete an item from a collection by its id.
95
+ *
96
+ * @param collection Collection the item belongs to.
97
+ * @param id Identifier of the item to delete.
98
+ * @example await provider.deleteItem(users, 123);
99
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/deleteItem
100
+ */
18
101
  deleteItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<void>;
102
+ /**
103
+ * Count the items in a collection matching an optional query.
104
+ *
105
+ * @param collection Collection to count items in.
106
+ * @param query Query to filter the counted items (counts all items when omitted).
107
+ * @returns The number of matching items.
108
+ * @example await provider.countQuery(users, { age: 40 }) // 7
109
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/countQuery
110
+ */
19
111
  countQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): Promise<number>;
112
+ /**
113
+ * Get the items in a collection matching an optional query.
114
+ *
115
+ * @param collection Collection to query.
116
+ * @param query Query to filter, sort, and limit the items (returns all items when omitted).
117
+ * @returns An array of matching items.
118
+ * @example await provider.getQuery(users, { age: 40, $order: "name" }) // Items.
119
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getQuery
120
+ */
20
121
  getQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): Promise<Items<II, TT>>;
122
+ /**
123
+ * Subscribe to live changes for the result of a query.
124
+ *
125
+ * @param collection Collection to query.
126
+ * @param query Query to filter, sort, and limit the items.
127
+ * @returns Async sequence yielding the matching items on every change.
128
+ * @example for await (const items of provider.getQuerySequence(users, { age: 40 })) console.log(items);
129
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getQuerySequence
130
+ */
21
131
  getQuerySequence<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): ItemsSequence<II, TT>;
132
+ /**
133
+ * Set (overwrite) the data for every item matching a query.
134
+ *
135
+ * @param collection Collection to write to.
136
+ * @param query Query selecting the items to set.
137
+ * @param data Full data to store for each matching item.
138
+ * @example await provider.setQuery(users, { age: 40 }, { active: true });
139
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/setQuery
140
+ */
22
141
  setQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, data: TT): Promise<void>;
142
+ /**
143
+ * Apply partial updates to every item matching a query.
144
+ *
145
+ * @param collection Collection to write to.
146
+ * @param query Query selecting the items to update.
147
+ * @param updates Updates to apply to each matching item.
148
+ * @example await provider.updateQuery(users, { age: 40 }, { active: true });
149
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/updateQuery
150
+ */
23
151
  updateQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, updates: Updates<TT>): Promise<void>;
152
+ /**
153
+ * Delete every item matching a query.
154
+ *
155
+ * @param collection Collection to delete from.
156
+ * @param query Query selecting the items to delete.
157
+ * @example await provider.deleteQuery(users, { active: false });
158
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/deleteQuery
159
+ */
24
160
  deleteQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): Promise<void>;
161
+ /**
162
+ * Get the first item matching a query, or `undefined` if there are none.
163
+ *
164
+ * @param collection Collection to query.
165
+ * @param query Query to filter and sort the items.
166
+ * @returns The first matching item, or `undefined` if none match.
167
+ * @example await provider.getFirst(users, { $order: "name" }) // Item or undefined.
168
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getFirst
169
+ */
25
170
  getFirst<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): Promise<OptionalItem<II, TT>>;
171
+ /**
172
+ * Get the first item matching a query, or throw if there are none.
173
+ *
174
+ * @param collection Collection to query.
175
+ * @param query Query to filter and sort the items.
176
+ * @returns The first matching item.
177
+ * @throws `RequiredError` if no item matches the query.
178
+ * @example await provider.requireFirst(users, { $order: "name" }) // Item (or throws).
179
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/requireFirst
180
+ */
26
181
  requireFirst<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): Promise<Item<II, TT>>;
27
182
  [Symbol.asyncDispose](): Promise<void>;
28
183
  }
@@ -1,52 +1,207 @@
1
1
  import { awaitDispose } from "../../util/dispose.js";
2
- /** A provider that passes through to an asynchronous source. */
2
+ /**
3
+ * Database provider that passes every operation straight through to a wrapped `source` provider.
4
+ *
5
+ * - Base for the layered `Through*Provider` family (validation, caching, logging, change tracking); subclasses override individual methods to add behaviour and call `super` to delegate.
6
+ * - Exposes `source` and implements `Sourceable`, so wrapped providers can be discovered with `getSource()` / `requireSource()`.
7
+ *
8
+ * @example
9
+ * const provider = new ValidationDBProvider(new MemoryDBProvider());
10
+ *
11
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider
12
+ */
3
13
  export class ThroughDBProvider {
14
+ /**
15
+ * The wrapped source provider that every operation is delegated to.
16
+ *
17
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/source
18
+ */
4
19
  source;
20
+ /**
21
+ * Create a new `ThroughDBProvider` wrapping a source provider.
22
+ *
23
+ * @param source The provider to delegate all operations to.
24
+ */
5
25
  constructor(source) {
6
26
  this.source = source;
7
27
  }
28
+ /**
29
+ * Get an item from a collection by its id, or `undefined` if it doesn't exist.
30
+ *
31
+ * @param collection Collection the item belongs to.
32
+ * @param id Identifier of the item to get.
33
+ * @returns The item, or `undefined` if no item exists with that id.
34
+ * @example await provider.getItem(users, 123) // Item or undefined.
35
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getItem
36
+ */
8
37
  getItem(collection, id) {
9
38
  return this.source.getItem(collection, id);
10
39
  }
40
+ /**
41
+ * Get an item from a collection by its id, or throw if it doesn't exist.
42
+ *
43
+ * @param collection Collection the item belongs to.
44
+ * @param id Identifier of the item to get.
45
+ * @returns The item.
46
+ * @throws `RequiredError` if no item exists with that id.
47
+ * @example await provider.requireItem(users, 123) // Item (or throws).
48
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/requireItem
49
+ */
11
50
  requireItem(collection, id) {
12
51
  return this.source.requireItem(collection, id);
13
52
  }
53
+ /**
54
+ * Subscribe to live changes for a single item by its id.
55
+ *
56
+ * @param collection Collection the item belongs to.
57
+ * @param id Identifier of the item to subscribe to.
58
+ * @returns Async sequence yielding the item (or `undefined`) on every change.
59
+ * @example for await (const item of provider.getItemSequence(users, 123)) console.log(item);
60
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getItemSequence
61
+ */
14
62
  getItemSequence(collection, id) {
15
63
  return this.source.getItemSequence(collection, id);
16
64
  }
65
+ /**
66
+ * Add a new item to a collection and return its generated id.
67
+ *
68
+ * @param collection Collection to add the item to.
69
+ * @param data Data for the new item.
70
+ * @returns The generated identifier for the new item.
71
+ * @example await provider.addItem(users, { name: "Dave" }) // 123
72
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/addItem
73
+ */
17
74
  addItem(collection, data) {
18
75
  return this.source.addItem(collection, data);
19
76
  }
77
+ /**
78
+ * Set (insert or overwrite) the data for an item by its id.
79
+ *
80
+ * @param collection Collection the item belongs to.
81
+ * @param id Identifier of the item to set.
82
+ * @param data Full data to store for the item.
83
+ * @example await provider.setItem(users, 123, { name: "Dave" });
84
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/setItem
85
+ */
20
86
  setItem(collection, id, data) {
21
87
  return this.source.setItem(collection, id, data);
22
88
  }
89
+ /**
90
+ * Apply partial updates to an existing item by its id.
91
+ *
92
+ * @param collection Collection the item belongs to.
93
+ * @param id Identifier of the item to update.
94
+ * @param updates Updates to apply to the item.
95
+ * @example await provider.updateItem(users, 123, { name: "Dave" });
96
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/updateItem
97
+ */
23
98
  updateItem(collection, id, updates) {
24
99
  return this.source.updateItem(collection, id, updates);
25
100
  }
101
+ /**
102
+ * Delete an item from a collection by its id.
103
+ *
104
+ * @param collection Collection the item belongs to.
105
+ * @param id Identifier of the item to delete.
106
+ * @example await provider.deleteItem(users, 123);
107
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/deleteItem
108
+ */
26
109
  deleteItem(collection, id) {
27
110
  return this.source.deleteItem(collection, id);
28
111
  }
112
+ /**
113
+ * Count the items in a collection matching an optional query.
114
+ *
115
+ * @param collection Collection to count items in.
116
+ * @param query Query to filter the counted items (counts all items when omitted).
117
+ * @returns The number of matching items.
118
+ * @example await provider.countQuery(users, { age: 40 }) // 7
119
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/countQuery
120
+ */
29
121
  countQuery(collection, query) {
30
122
  return this.source.countQuery(collection, query);
31
123
  }
124
+ /**
125
+ * Get the items in a collection matching an optional query.
126
+ *
127
+ * @param collection Collection to query.
128
+ * @param query Query to filter, sort, and limit the items (returns all items when omitted).
129
+ * @returns An array of matching items.
130
+ * @example await provider.getQuery(users, { age: 40, $order: "name" }) // Items.
131
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getQuery
132
+ */
32
133
  getQuery(collection, query) {
33
134
  return this.source.getQuery(collection, query);
34
135
  }
136
+ /**
137
+ * Subscribe to live changes for the result of a query.
138
+ *
139
+ * @param collection Collection to query.
140
+ * @param query Query to filter, sort, and limit the items.
141
+ * @returns Async sequence yielding the matching items on every change.
142
+ * @example for await (const items of provider.getQuerySequence(users, { age: 40 })) console.log(items);
143
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getQuerySequence
144
+ */
35
145
  getQuerySequence(collection, query) {
36
146
  return this.source.getQuerySequence(collection, query);
37
147
  }
148
+ /**
149
+ * Set (overwrite) the data for every item matching a query.
150
+ *
151
+ * @param collection Collection to write to.
152
+ * @param query Query selecting the items to set.
153
+ * @param data Full data to store for each matching item.
154
+ * @example await provider.setQuery(users, { age: 40 }, { active: true });
155
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/setQuery
156
+ */
38
157
  setQuery(collection, query, data) {
39
158
  return this.source.setQuery(collection, query, data);
40
159
  }
160
+ /**
161
+ * Apply partial updates to every item matching a query.
162
+ *
163
+ * @param collection Collection to write to.
164
+ * @param query Query selecting the items to update.
165
+ * @param updates Updates to apply to each matching item.
166
+ * @example await provider.updateQuery(users, { age: 40 }, { active: true });
167
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/updateQuery
168
+ */
41
169
  updateQuery(collection, query, updates) {
42
170
  return this.source.updateQuery(collection, query, updates);
43
171
  }
172
+ /**
173
+ * Delete every item matching a query.
174
+ *
175
+ * @param collection Collection to delete from.
176
+ * @param query Query selecting the items to delete.
177
+ * @example await provider.deleteQuery(users, { active: false });
178
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/deleteQuery
179
+ */
44
180
  deleteQuery(collection, query) {
45
181
  return this.source.deleteQuery(collection, query);
46
182
  }
183
+ /**
184
+ * Get the first item matching a query, or `undefined` if there are none.
185
+ *
186
+ * @param collection Collection to query.
187
+ * @param query Query to filter and sort the items.
188
+ * @returns The first matching item, or `undefined` if none match.
189
+ * @example await provider.getFirst(users, { $order: "name" }) // Item or undefined.
190
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/getFirst
191
+ */
47
192
  getFirst(collection, query) {
48
193
  return this.source.getFirst(collection, query);
49
194
  }
195
+ /**
196
+ * Get the first item matching a query, or throw if there are none.
197
+ *
198
+ * @param collection Collection to query.
199
+ * @param query Query to filter and sort the items.
200
+ * @returns The first matching item.
201
+ * @throws `RequiredError` if no item matches the query.
202
+ * @example await provider.requireFirst(users, { $order: "name" }) // Item (or throws).
203
+ * @see https://dhoulb.github.io/shelving/db/provider/ThroughDBProvider/ThroughDBProvider/requireFirst
204
+ */
50
205
  requireFirst(collection, query) {
51
206
  return this.source.requireFirst(collection, query);
52
207
  }
@@ -4,17 +4,136 @@ 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
6
  import { ThroughDBProvider } from "./ThroughDBProvider.js";
7
- /** Validate an asynchronous source provider (source can have any type because validation guarantees the type). */
7
+ /**
8
+ * Database provider that validates data flowing to and from an asynchronous source provider.
9
+ *
10
+ * - Wraps a `source` provider (which may have any type, because validation guarantees the type) and runs every value through the relevant `Collection` schema before writing and after reading.
11
+ * - Written data is validated against the collection's data schema; read data is validated against the item schema, so trusted, correctly-typed values reach the rest of the app.
12
+ * - Validation failures here are program-state errors, so they throw a typed `ValueError` rather than a raw validation `string`.
13
+ *
14
+ * @example
15
+ * const provider = new ValidationDBProvider(new FirestoreProvider());
16
+ * await provider.setItem(users, 123, { name: "Dave", age: 40 }); // Validates before writing.
17
+ *
18
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider
19
+ */
8
20
  export declare class ValidationDBProvider<I extends Identifier, T extends Data> extends ThroughDBProvider<I, T> {
21
+ /**
22
+ * Get an item by its id and validate it, or `undefined` if it doesn't exist.
23
+ *
24
+ * @param collection Collection the item belongs to.
25
+ * @param id Identifier of the item to get.
26
+ * @returns The validated item, or `undefined` if no item exists with that id.
27
+ * @throws `ValueError` if the stored item does not validate against the collection schema.
28
+ * @example await provider.getItem(users, 123) // Validated item or undefined.
29
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/getItem
30
+ */
9
31
  getItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<OptionalItem<II, TT>>;
32
+ /**
33
+ * Subscribe to live changes for a single item, validating each emission.
34
+ *
35
+ * @param collection Collection the item belongs to.
36
+ * @param id Identifier of the item to subscribe to.
37
+ * @returns Async sequence yielding the validated item (or `undefined`) on every change.
38
+ * @throws `ValueError` if an emitted item does not validate against the collection schema.
39
+ * @example for await (const item of provider.getItemSequence(users, 123)) console.log(item);
40
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/getItemSequence
41
+ */
10
42
  getItemSequence<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): OptionalItemSequence<II, TT>;
43
+ /**
44
+ * Validate and add a new item, returning its validated generated id.
45
+ *
46
+ * @param collection Collection to add the item to.
47
+ * @param data Data for the new item (validated before writing).
48
+ * @returns The validated generated identifier for the new item.
49
+ * @throws `ValueError` if the data or returned id does not validate against the collection schema.
50
+ * @example await provider.addItem(users, { name: "Dave", age: 40 }) // 123
51
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/addItem
52
+ */
11
53
  addItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, data: TT): Promise<II>;
54
+ /**
55
+ * Validate and set (insert or overwrite) the data for an item by its id.
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 (validated before writing).
60
+ * @throws `ValueError` if the data does not validate against the collection schema.
61
+ * @example await provider.setItem(users, 123, { name: "Dave", age: 40 });
62
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/setItem
63
+ */
12
64
  setItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, data: TT): Promise<void>;
65
+ /**
66
+ * Validate and apply partial updates to an existing item by its id.
67
+ *
68
+ * @param collection Collection the item belongs to.
69
+ * @param id Identifier of the item to update.
70
+ * @param updates Updates to apply (validated before writing).
71
+ * @throws `ValueError` if the updates do not validate against the collection schema.
72
+ * @example await provider.updateItem(users, 123, { age: 41 });
73
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/updateItem
74
+ */
13
75
  updateItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II, updates: Updates<Item<II, TT>>): Promise<void>;
76
+ /**
77
+ * Count the items in a collection matching an optional query (passed straight through).
78
+ *
79
+ * @param collection Collection to count items in.
80
+ * @param query Query to filter the counted items (counts all items when omitted).
81
+ * @returns The number of matching items.
82
+ * @example await provider.countQuery(users, { age: 40 }) // 7
83
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/countQuery
84
+ */
14
85
  countQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): Promise<number>;
86
+ /**
87
+ * Get the items matching an optional query and validate them.
88
+ *
89
+ * @param collection Collection to query.
90
+ * @param query Query to filter, sort, and limit the items (returns all items when omitted).
91
+ * @returns An array of validated matching items.
92
+ * @throws `ValueError` if one or more stored items do not validate against the collection schema.
93
+ * @example await provider.getQuery(users, { age: 40, $order: "name" }) // Validated items.
94
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/getQuery
95
+ */
15
96
  getQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): Promise<Items<II, TT>>;
97
+ /**
98
+ * Subscribe to live changes for a query, validating each emitted result.
99
+ *
100
+ * @param collection Collection to query.
101
+ * @param query Query to filter, sort, and limit the items.
102
+ * @returns Async sequence yielding the validated matching items on every change.
103
+ * @throws `ValueError` if one or more emitted items do not validate against the collection schema.
104
+ * @example for await (const items of provider.getQuerySequence(users, { age: 40 })) console.log(items);
105
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/getQuerySequence
106
+ */
16
107
  getQuerySequence<II extends I, TT extends T>(collection: Collection<string, II, TT>, query?: Query<Item<II, TT>>): ItemsSequence<II, TT>;
108
+ /**
109
+ * Validate and set (overwrite) the data for every item matching a query.
110
+ *
111
+ * @param collection Collection to write to.
112
+ * @param query Query selecting the items to set.
113
+ * @param data Full data to store for each matching item (validated before writing).
114
+ * @throws `ValueError` if the data does not validate against the collection schema.
115
+ * @example await provider.setQuery(users, { age: 40 }, { name: "Dave", age: 41 });
116
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/setQuery
117
+ */
17
118
  setQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, data: TT): Promise<void>;
119
+ /**
120
+ * Validate and apply partial updates to every item matching a query.
121
+ *
122
+ * @param collection Collection to write to.
123
+ * @param query Query selecting the items to update.
124
+ * @param updates Updates to apply to each matching item (validated before writing).
125
+ * @throws `ValueError` if the updates do not validate against the collection schema.
126
+ * @example await provider.updateQuery(users, { age: 40 }, { active: true });
127
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/updateQuery
128
+ */
18
129
  updateQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>, updates: Updates<TT>): Promise<void>;
130
+ /**
131
+ * Delete every item matching a query (passed straight through).
132
+ *
133
+ * @param collection Collection to delete from.
134
+ * @param query Query selecting the items to delete.
135
+ * @example await provider.deleteQuery(users, { active: false });
136
+ * @see https://dhoulb.github.io/shelving/db/provider/ValidationDBProvider/ValidationDBProvider/deleteQuery
137
+ */
19
138
  deleteQuery<II extends I, TT extends T>(collection: Collection<string, II, TT>, query: Query<Item<II, TT>>): Promise<void>;
20
139
  }