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
@@ -3,8 +3,28 @@ import { UnimplementedError } from "../../error/UnimplementedError.js";
3
3
  import { getQueryFilters, getQueryLimit, getQueryOrders } from "../../util/query.js";
4
4
  import { getUpdates } from "../../util/update.js";
5
5
  import { DBProvider } from "./DBProvider.js";
6
- /** Shared SQL execution and CRUD/query behavior. */
6
+ /**
7
+ * Abstract database provider that implements CRUD and query operations by generating and executing SQL.
8
+ *
9
+ * - Subclasses implement `exec()` to run a query against a concrete database (e.g. SQLite, PostgreSQL).
10
+ * - The `sql*` helpers build composable `SQLFragment` objects so dialect differences can be overridden.
11
+ * - Realtime subscriptions are unsupported and throw `UnimplementedError`.
12
+ *
13
+ * @example
14
+ * class MyProvider extends SQLProvider { async exec(strings, ...values) { ... } }
15
+ * const item = await new MyProvider().getItem(collection, "abc");
16
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider
17
+ */
7
18
  export class SQLProvider extends DBProvider {
19
+ /**
20
+ * Get a single item by ID, or `undefined` if it doesn't exist.
21
+ *
22
+ * @param collection The collection to read from.
23
+ * @param id The ID of the item to get.
24
+ * @returns Promise resolving to the item, or `undefined` if it doesn't exist.
25
+ * @example await provider.getItem(collection, "abc")
26
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/getItem
27
+ */
8
28
  async getItem(collection, id) {
9
29
  const rows = await this.exec `
10
30
  SELECT * FROM ${this.sqlIdentifier(collection.name)}
@@ -13,9 +33,29 @@ export class SQLProvider extends DBProvider {
13
33
  `;
14
34
  return rows[0];
15
35
  }
36
+ /**
37
+ * Subscribe to realtime updates for a single item — unsupported by SQL providers.
38
+ *
39
+ * @param collection The collection to read from.
40
+ * @param id The ID of the item to subscribe to.
41
+ * @returns Never returns; always throws.
42
+ * @throws {UnimplementedError} Always, because SQL providers don't support realtime subscriptions.
43
+ * @example provider.getItemSequence(collection, "abc") // throws
44
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/getItemSequence
45
+ */
16
46
  getItemSequence(_collection, _id) {
17
47
  throw new UnimplementedError(`SQLProvider does not support realtime subscriptions`);
18
48
  }
49
+ /**
50
+ * Insert a new item and return its generated ID.
51
+ *
52
+ * @param collection The collection to insert into.
53
+ * @param data The data of the item to insert.
54
+ * @returns Promise resolving to the ID of the inserted item.
55
+ * @throws {RequiredError} If the `INSERT` didn't return an ID.
56
+ * @example await provider.addItem(collection, { name: "Dave" })
57
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/addItem
58
+ */
19
59
  async addItem(collection, data) {
20
60
  const rows = await this.exec `
21
61
  INSERT INTO ${this.sqlIdentifier(collection.name)} ${this.sqlValues(data)}
@@ -26,12 +66,32 @@ export class SQLProvider extends DBProvider {
26
66
  throw new RequiredError(`No id returned from INSERT into "${collection.name}"`, { provider: this });
27
67
  return id;
28
68
  }
69
+ /**
70
+ * Set (insert or overwrite) an item at a specific ID.
71
+ *
72
+ * @param collection The collection to write to.
73
+ * @param id The ID of the item to set.
74
+ * @param data The full data to store for the item.
75
+ * @returns Promise that resolves once the item has been set.
76
+ * @example await provider.setItem(collection, "abc", { name: "Dave" })
77
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/setItem
78
+ */
29
79
  async setItem(collection, id, data) {
30
80
  await this.exec `
31
81
  INSERT INTO ${this.sqlIdentifier(collection.name)} ${this.sqlValues({ id, ...data })}
32
82
  ON CONFLICT (${this.sqlIdentifier("id")}) DO UPDATE SET ${this.sqlSetters(data)}
33
83
  `;
34
84
  }
85
+ /**
86
+ * Apply a set of updates to a single item by ID.
87
+ *
88
+ * @param collection The collection to write to.
89
+ * @param id The ID of the item to update.
90
+ * @param updates The updates to apply.
91
+ * @returns Promise that resolves once the item has been updated.
92
+ * @example await provider.updateItem(collection, "abc", { name: "Dave" })
93
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/updateItem
94
+ */
35
95
  async updateItem(collection, id, updates) {
36
96
  await this.exec `
37
97
  UPDATE ${this.sqlIdentifier(collection.name)}
@@ -39,9 +99,27 @@ export class SQLProvider extends DBProvider {
39
99
  WHERE ${this.sqlIdentifier("id")} = ${id}
40
100
  `;
41
101
  }
102
+ /**
103
+ * Delete a single item by ID.
104
+ *
105
+ * @param collection The collection to delete from.
106
+ * @param id The ID of the item to delete.
107
+ * @returns Promise that resolves once the item has been deleted.
108
+ * @example await provider.deleteItem(collection, "abc")
109
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/deleteItem
110
+ */
42
111
  async deleteItem(collection, id) {
43
112
  await this.exec `DELETE FROM ${this.sqlIdentifier(collection.name)} WHERE ${this.sqlIdentifier("id")} = ${id}`;
44
113
  }
114
+ /**
115
+ * Count the items in a collection that match an optional query.
116
+ *
117
+ * @param collection The collection to count.
118
+ * @param query Optional query to filter the items to count.
119
+ * @returns Promise resolving to the number of matching items.
120
+ * @example await provider.countQuery(collection, query)
121
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/countQuery
122
+ */
45
123
  async countQuery(collection, query) {
46
124
  const rows = await this.exec `
47
125
  SELECT COUNT(*) AS "count" FROM ${this.sqlIdentifier(collection.name)}
@@ -49,52 +127,145 @@ export class SQLProvider extends DBProvider {
49
127
  `;
50
128
  return rows[0]?.count ?? 0;
51
129
  }
130
+ /**
131
+ * Get the items in a collection that match an optional query.
132
+ *
133
+ * @param collection The collection to read from.
134
+ * @param query Optional query to filter, sort, and limit the items.
135
+ * @returns Promise resolving to the array of matching items.
136
+ * @example await provider.getQuery(collection, query)
137
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/getQuery
138
+ */
52
139
  async getQuery(collection, query) {
53
140
  return this.exec `
54
141
  SELECT * FROM ${this.sqlIdentifier(collection.name)}
55
142
  ${query ? this.sqlClauses(query) : this.sql ``}
56
143
  `;
57
144
  }
145
+ /**
146
+ * Subscribe to realtime updates for a query — unsupported by SQL providers.
147
+ *
148
+ * @param collection The collection to read from.
149
+ * @param query Optional query to subscribe to.
150
+ * @returns Never returns; always throws.
151
+ * @throws {UnimplementedError} Always, because SQL providers don't support realtime subscriptions.
152
+ * @example provider.getQuerySequence(collection, query) // throws
153
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/getQuerySequence
154
+ */
58
155
  getQuerySequence(_collection, _query) {
59
156
  throw new UnimplementedError(`SQLProvider does not support realtime subscriptions`);
60
157
  }
158
+ /**
159
+ * Set (overwrite) the data of every item matching a query.
160
+ *
161
+ * @param collection The collection to write to.
162
+ * @param query The query selecting the items to set.
163
+ * @param data The full data to store for each matching item.
164
+ * @returns Promise that resolves once the matching items have been set.
165
+ * @example await provider.setQuery(collection, query, { active: true })
166
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/setQuery
167
+ */
61
168
  async setQuery(collection, query, data) {
62
169
  await this.exec `UPDATE ${this.sqlIdentifier(collection.name)} SET ${this.sqlSetters(data)}${this.sqlClauses(query)}`;
63
170
  }
171
+ /**
172
+ * Apply a set of updates to every item matching a query.
173
+ *
174
+ * @param collection The collection to write to.
175
+ * @param query The query selecting the items to update.
176
+ * @param updates The updates to apply to each matching item.
177
+ * @returns Promise that resolves once the matching items have been updated.
178
+ * @example await provider.updateQuery(collection, query, { active: true })
179
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/updateQuery
180
+ */
64
181
  async updateQuery(collection, query, updates) {
65
182
  await this.exec `UPDATE ${this.sqlIdentifier(collection.name)} SET ${this.sqlUpdates(updates)}${this.sqlClauses(query)}`;
66
183
  }
184
+ /**
185
+ * Delete every item matching a query.
186
+ *
187
+ * @param collection The collection to delete from.
188
+ * @param query The query selecting the items to delete.
189
+ * @returns Promise that resolves once the matching items have been deleted.
190
+ * @example await provider.deleteQuery(collection, query)
191
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/deleteQuery
192
+ */
67
193
  async deleteQuery(collection, query) {
68
194
  await this.exec `DELETE FROM ${this.sqlIdentifier(collection.name)}${this.sqlClauses(query)}`;
69
195
  }
70
196
  /**
71
197
  * Define an SQL fragment using Javascript template literal format.
198
+ *
199
+ * @param strings The template string parts of the fragment.
200
+ * @param values The interpolated values to embed into the fragment.
201
+ * @returns The composed `SQLFragment`.
72
202
  * @example this.sql`SELECT * FROM ${table}`; // SQLFragment
203
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sql
73
204
  */
74
205
  sql(strings, ...values) {
75
206
  return { strings, values };
76
207
  }
77
- /** Define an SQL fragment for an identifier, e.g. `"myTable"` */
208
+ /**
209
+ * Define an SQL fragment for an escaped identifier, e.g. `"myTable"`.
210
+ *
211
+ * @param name The identifier (table or column name) to escape.
212
+ * @returns An `SQLFragment` containing the quoted identifier.
213
+ * @example this.sqlIdentifier("myTable"); // "myTable"
214
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlIdentifier
215
+ */
78
216
  sqlIdentifier(name) {
79
217
  return { strings: [_escapeIdentifier(name)], values: [] };
80
218
  }
81
- /** Define an SQL fragment that extracts a deeply nested value for comparison, e.g. `"a" #>> {"b","c"}` in Postgres */
219
+ /**
220
+ * Define an SQL fragment that extracts a value at a key for comparison, e.g. `"a" #>> {"b","c"}` in Postgres.
221
+ * - Base implementation only supports flat (single-segment) keys; subclasses override for nested JSON paths.
222
+ *
223
+ * @param key The key segments identifying the column (and any nested path).
224
+ * @returns An `SQLFragment` extracting the value.
225
+ * @throws {UnimplementedError} If the key is nested (multi-segment).
226
+ * @example this.sqlExtract(["name"]); // "name"
227
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlExtract
228
+ */
82
229
  sqlExtract(key) {
83
230
  if (key.length > 1)
84
231
  throw new UnimplementedError("SQLProvider does not support nested filter keys");
85
232
  return this.sqlIdentifier(key[0]);
86
233
  }
87
- /** Define an SQL fragment to generate a series of values with a separator, e.g. `"a" = 1 AND "b" = 2` */
234
+ /**
235
+ * Define an SQL fragment that joins a series of fragments with a separator, e.g. `"a" = 1 AND "b" = 2`.
236
+ *
237
+ * @param values The fragments to join.
238
+ * @param separator The separator placed between fragments.
239
+ * @param before Text placed before the first fragment.
240
+ * @param after Text placed after the last fragment.
241
+ * @returns The joined `SQLFragment`.
242
+ * @example this.sqlConcat([a, b], " AND "); // a AND b
243
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlConcat
244
+ */
88
245
  sqlConcat(values, separator = ", ", before = "", after = "") {
89
246
  const strings = [before, ...new Array(Math.max(0, values.length - 1)).fill(separator), after];
90
247
  return { strings, values };
91
248
  }
92
- /** Define an SQL fragment for setting a list of values, e.g. `"a" = 1, "b" = 2` */
249
+ /**
250
+ * Define an SQL fragment for setting a list of values, e.g. `"a" = 1, "b" = 2`.
251
+ *
252
+ * @param data The data whose entries become `column = value` assignments.
253
+ * @returns The composed `SQLFragment`.
254
+ * @example this.sqlSetters({ a: 1, b: 2 }); // "a" = 1, "b" = 2
255
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlSetters
256
+ */
93
257
  sqlSetters(data) {
94
258
  const entries = Object.entries(data);
95
259
  return this.sqlConcat(entries.map(([key, value]) => this.sql `${this.sqlIdentifier(key)} = ${value}`), ", ");
96
260
  }
97
- /** Define an SQL fragment for updates, e.g. `"a" = 1, "b" = "b" + 5` */
261
+ /**
262
+ * Define an SQL fragment for a set of updates, e.g. `"a" = 1, "b" = "b" + 5`.
263
+ *
264
+ * @param updates The updates to convert into SQL assignments.
265
+ * @returns The composed `SQLFragment`.
266
+ * @example this.sqlUpdates({ a: 1 }); // "a" = 1
267
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlUpdates
268
+ */
98
269
  sqlUpdates(updates) {
99
270
  return this.sqlConcat(getUpdates(updates).map(update => this.sqlUpdate(update)), ", ");
100
271
  }
@@ -103,6 +274,12 @@ export class SQLProvider extends DBProvider {
103
274
  * - Handles flat `set` and `sum` only (single-segment key).
104
275
  * - Nested keys (multi-segment) and `with`/`omit` actions throw `UnimplementedError`.
105
276
  * - Subclasses should override to support nested keys and array mutation actions.
277
+ *
278
+ * @param update The update action (`action`, `key`, `value`) to convert.
279
+ * @returns The composed `SQLFragment`.
280
+ * @throws {UnimplementedError} If the key is nested or the action is unsupported.
281
+ * @example this.sqlUpdate({ action: "set", key: ["a"], value: 1 }); // "a" = 1
282
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlUpdate
106
283
  */
107
284
  sqlUpdate({ action, key, value }) {
108
285
  if (key.length > 1)
@@ -114,18 +291,39 @@ export class SQLProvider extends DBProvider {
114
291
  return this.sql `${column} = ${column} + ${value}`;
115
292
  throw new UnimplementedError(`SQLProvider does not support "${action}" updates`);
116
293
  }
117
- /** Define an SQL fragment for `VALUES` syntax, e.g. `("a", "b") VALUES (1, 2)` */
294
+ /**
295
+ * Define an SQL fragment for `VALUES` syntax, e.g. `("a", "b") VALUES (1, 2)`.
296
+ *
297
+ * @param data The data whose keys and values become the column list and values.
298
+ * @returns The composed `SQLFragment`.
299
+ * @example this.sqlValues({ a: 1, b: 2 }); // ("a", "b") VALUES (1, 2)
300
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlValues
301
+ */
118
302
  sqlValues(data) {
119
303
  const entries = Object.entries(data);
120
304
  const keys = this.sqlConcat(entries.map(([key]) => this.sqlIdentifier(key)), ", ");
121
305
  const values = this.sqlConcat(entries.map(([, value]) => this.sql `${value}`), ", ");
122
306
  return this.sql `(${keys}) VALUES (${values})`;
123
307
  }
124
- /** Define an SQL for the `WHERE`, `ORDER BY` and `LIMIT` clauses of an SQL query, e.g. e.g. ` WHERE x = 1 ORDER BY "name" LIMIT 0, 50` */
308
+ /**
309
+ * Define an SQL fragment for the `WHERE`, `ORDER BY` and `LIMIT` clauses of a query, e.g. ` WHERE x = 1 ORDER BY "name" LIMIT 0, 50`.
310
+ *
311
+ * @param query The query to translate into clauses.
312
+ * @returns The composed `SQLFragment`.
313
+ * @example this.sqlClauses(query); // WHERE ... ORDER BY ... LIMIT ...
314
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlClauses
315
+ */
125
316
  sqlClauses(query) {
126
317
  return this.sql `${this.sqlWhere(query)}${this.sqlOrder(query)}${this.sqlLimit(query)}`;
127
318
  }
128
- /** Define an SQL fragment for a `WHERE` clause, e.g. ` WHERE x = 1 AND y <= 100` */
319
+ /**
320
+ * Define an SQL fragment for a `WHERE` clause, e.g. ` WHERE x = 1 AND y <= 100`.
321
+ *
322
+ * @param query The query whose filters become the `WHERE` clause.
323
+ * @returns The composed `SQLFragment` (empty if there are no filters).
324
+ * @example this.sqlWhere(query); // WHERE x = 1
325
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlWhere
326
+ */
129
327
  sqlWhere(query) {
130
328
  const filters = getQueryFilters(query);
131
329
  if (filters.length)
@@ -133,7 +331,13 @@ export class SQLProvider extends DBProvider {
133
331
  return this.sql ` WHERE ${this.sqlConcat(filters.map(filter => this.sqlFilter(filter)), " AND ")}`;
134
332
  }
135
333
  /**
136
- * Define an SQL fragment for a filter clause on a column.
334
+ * Define an SQL fragment for a single filter clause on a column, e.g. `x = 1` or `x IN (1, 2)`.
335
+ *
336
+ * @param filter The filter (`key`, `operator`, `value`) to translate.
337
+ * @returns The composed `SQLFragment`.
338
+ * @throws {UnimplementedError} If the operator is unsupported.
339
+ * @example this.sqlFilter({ key: ["x"], operator: "is", value: 1 }); // "x" = 1
340
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlFilter
137
341
  */
138
342
  sqlFilter({ key, operator, value }) {
139
343
  const path = this.sqlExtract(key);
@@ -162,8 +366,14 @@ export class SQLProvider extends DBProvider {
162
366
  throw new UnimplementedError(`SQLProvider does not support "${operator}" filters`);
163
367
  }
164
368
  /**
165
- * Define an SQL fragment for an `ORDER BY` clause, e.g. ` ORDER BY "a" ASC, "b" DESC`
369
+ * Define an SQL fragment for an `ORDER BY` clause, e.g. ` ORDER BY "a" ASC, "b" DESC`.
166
370
  * - Nested keys (multi-segment) throw `UnimplementedError`.
371
+ *
372
+ * @param query The query whose orders become the `ORDER BY` clause.
373
+ * @returns The composed `SQLFragment` (empty if there are no orders).
374
+ * @throws {UnimplementedError} If an order key is nested (multi-segment).
375
+ * @example this.sqlOrder(query); // ORDER BY "a" ASC
376
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlOrder
167
377
  */
168
378
  sqlOrder(query) {
169
379
  const orders = getQueryOrders(query);
@@ -171,7 +381,14 @@ export class SQLProvider extends DBProvider {
171
381
  return this.sql ``;
172
382
  return this.sql ` ORDER BY ${this.sqlConcat(orders.map(order => this.sqlSort(order)), ", ")}`;
173
383
  }
174
- /** Define an SQL fragment for an individual column in an `ORDER BY`, e.g. `"a" ASC` */
384
+ /**
385
+ * Define an SQL fragment for an individual column in an `ORDER BY`, e.g. `"a" ASC`.
386
+ *
387
+ * @param order The order (`key`, `direction`) to translate.
388
+ * @returns The composed `SQLFragment`.
389
+ * @example this.sqlSort({ key: ["a"], direction: "asc" }); // "a" ASC
390
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlSort
391
+ */
175
392
  sqlSort({ key, direction }) {
176
393
  const path = this.sqlExtract(key);
177
394
  if (direction === "asc")
@@ -180,7 +397,14 @@ export class SQLProvider extends DBProvider {
180
397
  return this.sql `${path} DESC`;
181
398
  return direction; // Never happens.
182
399
  }
183
- /** Define an SQL fragment for an `LIMIT` clause, e.g. ` LIMIT 50, 100` */
400
+ /**
401
+ * Define an SQL fragment for a `LIMIT` clause, e.g. ` LIMIT 50`.
402
+ *
403
+ * @param query The query whose limit becomes the `LIMIT` clause.
404
+ * @returns The composed `SQLFragment` (empty if the query has no limit).
405
+ * @example this.sqlLimit(query); // LIMIT 50
406
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLProvider/SQLProvider/sqlLimit
407
+ */
184
408
  sqlLimit(query) {
185
409
  const limit = getQueryLimit(query);
186
410
  return typeof limit === "number" ? this.sql ` LIMIT ${limit}` : this.sql ``;
@@ -11,13 +11,53 @@ import { type SQLFragment, SQLProvider } from "./SQLProvider.js";
11
11
  * Note the following compatibility caveats:
12
12
  * - For `with` and `omit` updates this does not preserve ordering of the original array.
13
13
  * - For `with` and `omit` updates this does not guarantee equality for de-duplication when working with nested objects or arrays.
14
+ *
15
+ * @example
16
+ * class MyProvider extends SQLiteProvider { async exec(strings, ...values) { ... } }
17
+ * const item = await new MyProvider().getItem(collection, "abc");
18
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider
14
19
  */
15
20
  export declare abstract class SQLiteProvider<I extends Identifier = Identifier, T extends Data = Data> extends SQLProvider<I, T> {
21
+ /**
22
+ * Insert a new item and return its ID, generating a UUID client-side for string-keyed collections.
23
+ * - SQLite has no native UUID generation, so for `StringSchema` IDs the UUID is generated here and delegated to `setItem`.
24
+ *
25
+ * @param collection The collection to insert into.
26
+ * @param data The data of the item to insert.
27
+ * @returns Promise resolving to the ID of the inserted item.
28
+ * @example await provider.addItem(collection, { name: "Dave" })
29
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider/addItem
30
+ */
16
31
  addItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, data: TT): Promise<II>;
17
32
  /** Get the SQLite JSON path for the nested segments of a key (everything after the column name), e.g. `$.b.c` */
18
33
  private sqlPath;
19
- /** Get the SQLite JSON extract syntax, e.g. `json_extract("a", $.b.c)` */
34
+ /**
35
+ * Get the SQLite JSON extract syntax for a key, e.g. `json_extract("a", $.b.c)`.
36
+ *
37
+ * @param key The key segments identifying the column and any nested JSON path.
38
+ * @returns An `SQLFragment` extracting the value.
39
+ * @example this.sqlExtract(["a", "b"]); // json_extract("a", $.b)
40
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider/sqlExtract
41
+ */
20
42
  sqlExtract(key: Segments): SQLFragment;
43
+ /**
44
+ * Define an SQL fragment for a single update action, with SQLite JSON1 support for nested keys and `with`/`omit` array mutations.
45
+ *
46
+ * @param update The update action (`action`, `key`, `value`) to convert.
47
+ * @returns The composed `SQLFragment`.
48
+ * @throws {UnimplementedError} If the action is unsupported.
49
+ * @example this.sqlUpdate({ action: "set", key: ["a", "b"], value: 1 })
50
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider/sqlUpdate
51
+ */
21
52
  sqlUpdate(update: Update): SQLFragment;
53
+ /**
54
+ * Define an SQL fragment for a filter clause, with SQLite JSON1 support for `contains` and deeply-nested JSON queries.
55
+ *
56
+ * @param filter The filter (`key`, `operator`, `value`) to translate.
57
+ * @returns The composed `SQLFragment`.
58
+ * @throws {UnimplementedError} If the operator is unsupported.
59
+ * @example this.sqlFilter({ key: ["tags"], operator: "contains", value: "x" })
60
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider/sqlFilter
61
+ */
22
62
  sqlFilter(filter: QueryFilter): SQLFragment;
23
63
  }
@@ -6,9 +6,23 @@ import { SQLProvider } from "./SQLProvider.js";
6
6
  * Note the following compatibility caveats:
7
7
  * - For `with` and `omit` updates this does not preserve ordering of the original array.
8
8
  * - For `with` and `omit` updates this does not guarantee equality for de-duplication when working with nested objects or arrays.
9
+ *
10
+ * @example
11
+ * class MyProvider extends SQLiteProvider { async exec(strings, ...values) { ... } }
12
+ * const item = await new MyProvider().getItem(collection, "abc");
13
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider
9
14
  */
10
15
  export class SQLiteProvider extends SQLProvider {
11
- // Override `addItem` to support string (UUID) IDs in SQLite.
16
+ /**
17
+ * Insert a new item and return its ID, generating a UUID client-side for string-keyed collections.
18
+ * - SQLite has no native UUID generation, so for `StringSchema` IDs the UUID is generated here and delegated to `setItem`.
19
+ *
20
+ * @param collection The collection to insert into.
21
+ * @param data The data of the item to insert.
22
+ * @returns Promise resolving to the ID of the inserted item.
23
+ * @example await provider.addItem(collection, { name: "Dave" })
24
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider/addItem
25
+ */
12
26
  // SQLite has no native UUID generation, so when the collection uses a `StringSchema` ID
13
27
  // we generate the UUID client-side and delegate to `setItem`.
14
28
  // Note: `as II` is required here because TypeScript cannot narrow the generic `II` from `instanceof StringSchema`.
@@ -24,7 +38,14 @@ export class SQLiteProvider extends SQLProvider {
24
38
  sqlPath(key) {
25
39
  return this.sqlConcat(key.slice(1).map(k => this.sqlIdentifier(k)), ".", "$.");
26
40
  }
27
- /** Get the SQLite JSON extract syntax, e.g. `json_extract("a", $.b.c)` */
41
+ /**
42
+ * Get the SQLite JSON extract syntax for a key, e.g. `json_extract("a", $.b.c)`.
43
+ *
44
+ * @param key The key segments identifying the column and any nested JSON path.
45
+ * @returns An `SQLFragment` extracting the value.
46
+ * @example this.sqlExtract(["a", "b"]); // json_extract("a", $.b)
47
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider/sqlExtract
48
+ */
28
49
  sqlExtract(key) {
29
50
  const column = this.sqlIdentifier(key[0]);
30
51
  if (key.length > 1) {
@@ -33,7 +54,15 @@ export class SQLiteProvider extends SQLProvider {
33
54
  }
34
55
  return column;
35
56
  }
36
- // Override to implement `with` and `omit` updates and deeply nested JSONB values.
57
+ /**
58
+ * Define an SQL fragment for a single update action, with SQLite JSON1 support for nested keys and `with`/`omit` array mutations.
59
+ *
60
+ * @param update The update action (`action`, `key`, `value`) to convert.
61
+ * @returns The composed `SQLFragment`.
62
+ * @throws {UnimplementedError} If the action is unsupported.
63
+ * @example this.sqlUpdate({ action: "set", key: ["a", "b"], value: 1 })
64
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider/sqlUpdate
65
+ */
37
66
  sqlUpdate(update) {
38
67
  const { action, key, value } = update;
39
68
  const column = this.sqlIdentifier(key[0]);
@@ -94,7 +123,15 @@ export class SQLiteProvider extends SQLProvider {
94
123
  }
95
124
  return super.sqlUpdate(update);
96
125
  }
97
- // Override to implement `contains` queries and deeply-nested JSONB queries.
126
+ /**
127
+ * Define an SQL fragment for a filter clause, with SQLite JSON1 support for `contains` and deeply-nested JSON queries.
128
+ *
129
+ * @param filter The filter (`key`, `operator`, `value`) to translate.
130
+ * @returns The composed `SQLFragment`.
131
+ * @throws {UnimplementedError} If the operator is unsupported.
132
+ * @example this.sqlFilter({ key: ["tags"], operator: "contains", value: "x" })
133
+ * @see https://dhoulb.github.io/shelving/db/provider/SQLiteProvider/SQLiteProvider/sqlFilter
134
+ */
98
135
  sqlFilter(filter) {
99
136
  const { key, operator, value } = filter;
100
137
  // Implement `contains` filters.