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
@@ -62,13 +62,26 @@ function _getFieldValue({ key, action, value }) {
62
62
  return action; // Never happens.
63
63
  }
64
64
  /**
65
- * Firestore Lite client database provider.
66
- * - Works with the Firebase JS SDK.
65
+ * Cloud Firestore database provider backed by the Firebase Lite SDK, implementing the `DBProvider` abstraction.
66
+ *
67
+ * - Works with the Firebase JS SDK via `firebase/firestore/lite`, which keeps bundle size small.
67
68
  * - Does not support offline mode.
68
- * - Does not support realtime subscriptions.
69
+ * - Does not support realtime subscriptions: `getItemSequence()` and `getQuerySequence()` throw `UnimplementedError`.
70
+ *
71
+ * @example
72
+ * import { getFirestore } from "firebase/firestore/lite";
73
+ * const provider = new FirestoreLiteProvider(getFirestore());
74
+ *
75
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider
69
76
  */
70
77
  export class FirestoreLiteProvider extends DBProvider {
71
78
  _firestore;
79
+ /**
80
+ * Create a provider wrapping a Firebase Lite `Firestore` instance.
81
+ *
82
+ * @param firestore The `Firestore` instance to read and write through.
83
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider
84
+ */
72
85
  constructor(firestore) {
73
86
  super();
74
87
  this._firestore = firestore;
@@ -85,45 +98,157 @@ export class FirestoreLiteProvider extends DBProvider {
85
98
  _query(c, q) {
86
99
  return q ? query(this._collection(c), ..._getConstraints(q)) : this._collection(c);
87
100
  }
101
+ /**
102
+ * Read a single item by ID from its Firestore document.
103
+ *
104
+ * @param c The collection the item belongs to.
105
+ * @param id The ID of the item to read.
106
+ * @returns Promise resolving to the item, or `undefined` if the document does not exist.
107
+ * @example await provider.getItem(users, "abc123")
108
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/getItem
109
+ */
88
110
  async getItem(c, id) {
89
111
  const snapshot = await getDoc(this._doc(c, id));
90
112
  return _getOptionalItem(snapshot);
91
113
  }
114
+ /**
115
+ * Not supported — the Firebase Lite SDK has no realtime listeners.
116
+ *
117
+ * @param _c The collection the item belongs to.
118
+ * @param _id The ID of the item to subscribe to.
119
+ * @returns Never returns normally.
120
+ * @throws {UnimplementedError} Always, because Firestore Lite does not support realtime subscriptions.
121
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/getItemSequence
122
+ */
92
123
  getItemSequence(_c, _id) {
93
124
  throw new UnimplementedError("FirestoreLiteProvider does not support realtime subscriptions");
94
125
  }
126
+ /**
127
+ * Add an item to a collection, letting Firestore generate its document ID.
128
+ *
129
+ * @param c The collection to add the item to.
130
+ * @param data The data for the new item.
131
+ * @returns Promise resolving to the generated ID of the new item.
132
+ * @example const id = await provider.addItem(users, { name: "Dave" })
133
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/addItem
134
+ */
95
135
  async addItem(c, data) {
96
136
  const reference = await addDoc(this._collection(c), data);
97
137
  return reference.id; // `as II` needed: Firestore returns string, not II.
98
138
  }
139
+ /**
140
+ * Write an item by ID, overwriting any existing document.
141
+ *
142
+ * @param c The collection the item belongs to.
143
+ * @param id The ID of the item to write.
144
+ * @param data The data to store for the item.
145
+ * @returns Promise resolving once the write completes.
146
+ * @example await provider.setItem(users, "abc123", { name: "Dave" })
147
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/setItem
148
+ */
99
149
  async setItem(c, id, data) {
100
150
  await setDoc(this._doc(c, id), data);
101
151
  }
152
+ /**
153
+ * Apply partial updates to a single item, translating them into Firestore `FieldValue` operations.
154
+ *
155
+ * @param c The collection the item belongs to.
156
+ * @param id The ID of the item to update.
157
+ * @param updates The updates to apply to the item.
158
+ * @returns Promise resolving once the update completes.
159
+ * @example await provider.updateItem(users, "abc123", { name: "Dave" })
160
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/updateItem
161
+ */
102
162
  async updateItem(c, id, updates) {
103
163
  await updateDoc(this._doc(c, id), _getFieldValues(updates));
104
164
  }
165
+ /**
166
+ * Delete a single item by ID from its collection.
167
+ *
168
+ * @param c The collection the item belongs to.
169
+ * @param id The ID of the item to delete.
170
+ * @returns Promise resolving once the deletion completes.
171
+ * @example await provider.deleteItem(users, "abc123")
172
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/deleteItem
173
+ */
105
174
  async deleteItem(c, id) {
106
175
  await deleteDoc(this._doc(c, id));
107
176
  }
177
+ /**
178
+ * Count the items matching a query using Firestore's server-side aggregation.
179
+ *
180
+ * @param c The collection to query.
181
+ * @param q The query selecting which items to count; counts the whole collection when omitted.
182
+ * @returns Promise resolving to the number of matching items.
183
+ * @example const total = await provider.countQuery(users)
184
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/countQuery
185
+ */
108
186
  async countQuery(c, q) {
109
187
  const snapshot = await getCount(this._query(c, q));
110
188
  return snapshot.data().count;
111
189
  }
190
+ /**
191
+ * Read all items matching a query.
192
+ *
193
+ * @param c The collection to query.
194
+ * @param q The query selecting which items to read; reads the whole collection when omitted.
195
+ * @returns Promise resolving to the array of matching items.
196
+ * @example const items = await provider.getQuery(users, { "name": "Dave" })
197
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/getQuery
198
+ */
112
199
  async getQuery(c, q) {
113
200
  return _getItems(await getDocs(this._query(c, q)));
114
201
  }
202
+ /**
203
+ * Not supported — the Firebase Lite SDK has no realtime listeners.
204
+ *
205
+ * @param _c The collection to query.
206
+ * @param _q The query to subscribe to.
207
+ * @returns Never returns normally.
208
+ * @throws {UnimplementedError} Always, because Firestore Lite does not support realtime subscriptions.
209
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/getQuerySequence
210
+ */
115
211
  getQuerySequence(_c, _q) {
116
212
  throw new UnimplementedError("FirestoreLiteProvider does not support realtime subscriptions");
117
213
  }
214
+ /**
215
+ * Write the same data to every item matching a query, one `setDoc` per matching document.
216
+ *
217
+ * @param c The collection to query.
218
+ * @param q The query selecting which items to write.
219
+ * @param data The data to write to each matching item.
220
+ * @returns Promise resolving once all writes complete.
221
+ * @example await provider.setQuery(users, { "name": "Dave" }, { active: false })
222
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/setQuery
223
+ */
118
224
  async setQuery(c, q, data) {
119
225
  const snapshot = await getDocs(this._query(c, q));
120
226
  await Promise.all(snapshot.docs.map(s => setDoc(s.ref, data)));
121
227
  }
228
+ /**
229
+ * Apply the same partial updates to every item matching a query, one `updateDoc` per matching document.
230
+ *
231
+ * @param c The collection to query.
232
+ * @param q The query selecting which items to update.
233
+ * @param updates The updates to apply to each matching item.
234
+ * @returns Promise resolving once all updates complete.
235
+ * @example await provider.updateQuery(users, { "active": true }, { name: "Dave" })
236
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/updateQuery
237
+ */
122
238
  async updateQuery(c, q, updates) {
123
239
  const snapshot = await getDocs(this._query(c, q));
124
240
  const fieldValues = _getFieldValues(updates);
125
241
  await Promise.all(snapshot.docs.map(s => updateDoc(s.ref, fieldValues)));
126
242
  }
243
+ /**
244
+ * Delete every item matching a query, one `deleteDoc` per matching document.
245
+ *
246
+ * @param c The collection to query.
247
+ * @param q The query selecting which items to delete.
248
+ * @returns Promise resolving once all deletions complete.
249
+ * @example await provider.deleteQuery(users, { "active": false })
250
+ * @see https://dhoulb.github.io/shelving/firestore/lite/FirestoreLiteProvider/FirestoreLiteProvider/deleteQuery
251
+ */
127
252
  async deleteQuery(c, q) {
128
253
  const snapshot = await getDocs(this._query(c, q));
129
254
  await Promise.all(snapshot.docs.map(s => deleteDoc(s.ref)));
@@ -6,11 +6,26 @@ import type { Item, Items, ItemsSequence, OptionalItem, OptionalItemSequence } f
6
6
  import { type Query } from "../../util/query.js";
7
7
  import type { Updates } from "../../util/update.js";
8
8
  /**
9
- * Firestore server database provider.
10
- * - Works with the Firebase Admin SDK for Node.JS
9
+ * Cloud Firestore database provider backed by the Firebase Admin SDK, implementing the `DBProvider` abstraction.
10
+ *
11
+ * - Runs server-side via `@google-cloud/firestore` (the Firebase Admin SDK for Node.JS).
12
+ * - Supports realtime subscriptions through Firestore `onSnapshot` listeners.
13
+ * - Collection writes (`setQuery`, `updateQuery`, `deleteQuery`) are batched through a Firestore `BulkWriter`.
14
+ *
15
+ * @example
16
+ * import { Firestore } from "@google-cloud/firestore";
17
+ * const provider = new FirestoreServerProvider(new Firestore());
18
+ *
19
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider
11
20
  */
12
21
  export declare class FirestoreServerProvider<I extends string = string, T extends Data = Data> extends DBProvider<I, T> {
13
22
  private readonly _firestore;
23
+ /**
24
+ * Create a provider wrapping a Firestore Admin SDK instance.
25
+ *
26
+ * @param firestore The `Firestore` instance to read and write through; defaults to a new `Firestore()`.
27
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider
28
+ */
14
29
  constructor(firestore?: Firestore);
15
30
  /** Create a corresponding `FirestoreCollection` reference from a collection. */
16
31
  private _getCollection;
@@ -18,16 +33,128 @@ export declare class FirestoreServerProvider<I extends string = string, T extend
18
33
  private _getQuery;
19
34
  /** Perform a bulk update on a set of documents using a `BulkWriter` */
20
35
  private _bulkWrite;
36
+ /**
37
+ * Read a single item by ID from its Firestore document.
38
+ *
39
+ * @param collection The collection the item belongs to.
40
+ * @param id The ID of the item to read.
41
+ * @returns Promise resolving to the item, or `undefined` if the document does not exist.
42
+ * @example await provider.getItem(users, "abc123")
43
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getItem
44
+ */
21
45
  getItem<II extends I, TT extends T>(collection: Collection<string, II, TT>, id: II): Promise<OptionalItem<II, TT>>;
46
+ /**
47
+ * Subscribe to realtime changes to a single item via a Firestore `onSnapshot` listener.
48
+ *
49
+ * @param c The collection the item belongs to.
50
+ * @param id The ID of the item to subscribe to.
51
+ * @returns An async sequence yielding the item (or `undefined` when absent) on every change.
52
+ * @example for await (const item of provider.getItemSequence(users, "abc123")) console.log(item)
53
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getItemSequence
54
+ */
22
55
  getItemSequence<II extends I, TT extends T>(c: Collection<string, II, TT>, id: II): OptionalItemSequence<II, TT>;
56
+ /**
57
+ * Add an item to a collection, letting Firestore generate its document ID.
58
+ *
59
+ * @param c The collection to add the item to.
60
+ * @param data The data for the new item.
61
+ * @returns Promise resolving to the generated ID of the new item.
62
+ * @example const id = await provider.addItem(users, { name: "Dave" })
63
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/addItem
64
+ */
23
65
  addItem<II extends I, TT extends T>(c: Collection<string, II, TT>, data: TT): Promise<II>;
66
+ /**
67
+ * Write an item by ID, overwriting any existing document.
68
+ *
69
+ * @param c The collection the item belongs to.
70
+ * @param id The ID of the item to write.
71
+ * @param data The data to store for the item.
72
+ * @returns Promise resolving once the write completes.
73
+ * @example await provider.setItem(users, "abc123", { name: "Dave" })
74
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/setItem
75
+ */
24
76
  setItem<II extends I, TT extends T>(c: Collection<string, II, TT>, id: II, data: TT): Promise<void>;
77
+ /**
78
+ * Apply partial updates to a single item, translating them into Firestore `FieldValue` operations.
79
+ *
80
+ * @param c The collection the item belongs to.
81
+ * @param id The ID of the item to update.
82
+ * @param updates The updates to apply to the item.
83
+ * @returns Promise resolving once the update completes.
84
+ * @example await provider.updateItem(users, "abc123", { name: "Dave" })
85
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/updateItem
86
+ */
25
87
  updateItem<II extends I, TT extends T>(c: Collection<string, II, TT>, id: II, updates: Updates<Item<II, TT>>): Promise<void>;
88
+ /**
89
+ * Delete a single item by ID from its collection.
90
+ *
91
+ * @param c The collection the item belongs to.
92
+ * @param id The ID of the item to delete.
93
+ * @returns Promise resolving once the deletion completes.
94
+ * @example await provider.deleteItem(users, "abc123")
95
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/deleteItem
96
+ */
26
97
  deleteItem<II extends I, TT extends T>(c: Collection<string, II, TT>, id: II): Promise<void>;
98
+ /**
99
+ * Count the items matching a query using Firestore's server-side aggregation.
100
+ *
101
+ * @param c The collection to query.
102
+ * @param q The query selecting which items to count; counts the whole collection when omitted.
103
+ * @returns Promise resolving to the number of matching items.
104
+ * @example const total = await provider.countQuery(users)
105
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/countQuery
106
+ */
27
107
  countQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q?: Query<Item<II, TT>>): Promise<number>;
108
+ /**
109
+ * Read all items matching a query.
110
+ *
111
+ * @param c The collection to query.
112
+ * @param q The query selecting which items to read; reads the whole collection when omitted.
113
+ * @returns Promise resolving to the array of matching items.
114
+ * @example const items = await provider.getQuery(users, { "name": "Dave" })
115
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getQuery
116
+ */
28
117
  getQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q?: Query<Item<II, TT>>): Promise<Items<II, TT>>;
118
+ /**
119
+ * Subscribe to realtime changes to a query via a Firestore `onSnapshot` listener.
120
+ *
121
+ * @param c The collection to query.
122
+ * @param q The query selecting which items to subscribe to; subscribes to the whole collection when omitted.
123
+ * @returns An async sequence yielding the matching items on every change.
124
+ * @example for await (const items of provider.getQuerySequence(users)) console.log(items)
125
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getQuerySequence
126
+ */
29
127
  getQuerySequence<II extends I, TT extends T>(c: Collection<string, II, TT>, q?: Query<Item<II, TT>>): ItemsSequence<II, TT>;
128
+ /**
129
+ * Write the same data to every item matching a query, batched through a Firestore `BulkWriter`.
130
+ *
131
+ * @param c The collection to query.
132
+ * @param q The query selecting which items to write.
133
+ * @param data The data to write to each matching item.
134
+ * @returns Promise resolving once all writes complete.
135
+ * @example await provider.setQuery(users, { "name": "Dave" }, { active: false })
136
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/setQuery
137
+ */
30
138
  setQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q: Query<Item<II, TT>>, data: TT): Promise<void>;
139
+ /**
140
+ * Apply the same partial updates to every item matching a query, batched through a Firestore `BulkWriter`.
141
+ *
142
+ * @param c The collection to query.
143
+ * @param q The query selecting which items to update.
144
+ * @param updates The updates to apply to each matching item.
145
+ * @returns Promise resolving once all updates complete.
146
+ * @example await provider.updateQuery(users, { "active": true }, { name: "Dave" })
147
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/updateQuery
148
+ */
31
149
  updateQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q: Query<Item<II, TT>>, updates: Updates<TT>): Promise<void>;
150
+ /**
151
+ * Delete every item matching a query, batched through a Firestore `BulkWriter`.
152
+ *
153
+ * @param c The collection to query.
154
+ * @param q The query selecting which items to delete.
155
+ * @returns Promise resolving once all deletions complete.
156
+ * @example await provider.deleteQuery(users, { "active": false })
157
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/deleteQuery
158
+ */
32
159
  deleteQuery<II extends I, TT extends T>(c: Collection<string, II, TT>, q: Query<Item<II, TT>>): Promise<void>;
33
160
  }
@@ -51,11 +51,26 @@ function _getFieldValue({ key, action, value }) {
51
51
  return action; // Never happens.
52
52
  }
53
53
  /**
54
- * Firestore server database provider.
55
- * - Works with the Firebase Admin SDK for Node.JS
54
+ * Cloud Firestore database provider backed by the Firebase Admin SDK, implementing the `DBProvider` abstraction.
55
+ *
56
+ * - Runs server-side via `@google-cloud/firestore` (the Firebase Admin SDK for Node.JS).
57
+ * - Supports realtime subscriptions through Firestore `onSnapshot` listeners.
58
+ * - Collection writes (`setQuery`, `updateQuery`, `deleteQuery`) are batched through a Firestore `BulkWriter`.
59
+ *
60
+ * @example
61
+ * import { Firestore } from "@google-cloud/firestore";
62
+ * const provider = new FirestoreServerProvider(new Firestore());
63
+ *
64
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider
56
65
  */
57
66
  export class FirestoreServerProvider extends DBProvider {
58
67
  _firestore;
68
+ /**
69
+ * Create a provider wrapping a Firestore Admin SDK instance.
70
+ *
71
+ * @param firestore The `Firestore` instance to read and write through; defaults to a new `Firestore()`.
72
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider
73
+ */
59
74
  constructor(firestore = new Firestore()) {
60
75
  super();
61
76
  this._firestore = firestore;
@@ -96,45 +111,157 @@ export class FirestoreServerProvider extends DBProvider {
96
111
  }
97
112
  await writer.close();
98
113
  }
114
+ /**
115
+ * Read a single item by ID from its Firestore document.
116
+ *
117
+ * @param collection The collection the item belongs to.
118
+ * @param id The ID of the item to read.
119
+ * @returns Promise resolving to the item, or `undefined` if the document does not exist.
120
+ * @example await provider.getItem(users, "abc123")
121
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getItem
122
+ */
99
123
  async getItem(collection, id) {
100
124
  return _getOptionalItem(await this._getCollection(collection).doc(id).get());
101
125
  }
126
+ /**
127
+ * Subscribe to realtime changes to a single item via a Firestore `onSnapshot` listener.
128
+ *
129
+ * @param c The collection the item belongs to.
130
+ * @param id The ID of the item to subscribe to.
131
+ * @returns An async sequence yielding the item (or `undefined` when absent) on every change.
132
+ * @example for await (const item of provider.getItemSequence(users, "abc123")) console.log(item)
133
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getItemSequence
134
+ */
102
135
  getItemSequence(c, id) {
103
136
  const ref = this._getCollection(c).doc(id);
104
137
  const sequence = new DeferredSequence();
105
138
  return new LazySequence(sequence, () => ref.onSnapshot(snapshot => sequence.resolve(_getOptionalItem(snapshot)), reason => sequence.reject(reason)));
106
139
  }
140
+ /**
141
+ * Add an item to a collection, letting Firestore generate its document ID.
142
+ *
143
+ * @param c The collection to add the item to.
144
+ * @param data The data for the new item.
145
+ * @returns Promise resolving to the generated ID of the new item.
146
+ * @example const id = await provider.addItem(users, { name: "Dave" })
147
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/addItem
148
+ */
107
149
  async addItem(c, data) {
108
150
  return (await this._getCollection(c).add(data)).id; // `as II` needed: Firestore returns string, not II.
109
151
  }
152
+ /**
153
+ * Write an item by ID, overwriting any existing document.
154
+ *
155
+ * @param c The collection the item belongs to.
156
+ * @param id The ID of the item to write.
157
+ * @param data The data to store for the item.
158
+ * @returns Promise resolving once the write completes.
159
+ * @example await provider.setItem(users, "abc123", { name: "Dave" })
160
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/setItem
161
+ */
110
162
  async setItem(c, id, data) {
111
163
  await this._getCollection(c).doc(id).set(data);
112
164
  }
165
+ /**
166
+ * Apply partial updates to a single item, translating them into Firestore `FieldValue` operations.
167
+ *
168
+ * @param c The collection the item belongs to.
169
+ * @param id The ID of the item to update.
170
+ * @param updates The updates to apply to the item.
171
+ * @returns Promise resolving once the update completes.
172
+ * @example await provider.updateItem(users, "abc123", { name: "Dave" })
173
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/updateItem
174
+ */
113
175
  async updateItem(c, id, updates) {
114
176
  await this._getCollection(c).doc(id).update(_getFieldValues(updates));
115
177
  }
178
+ /**
179
+ * Delete a single item by ID from its collection.
180
+ *
181
+ * @param c The collection the item belongs to.
182
+ * @param id The ID of the item to delete.
183
+ * @returns Promise resolving once the deletion completes.
184
+ * @example await provider.deleteItem(users, "abc123")
185
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/deleteItem
186
+ */
116
187
  async deleteItem(c, id) {
117
188
  await this._getCollection(c).doc(id).delete();
118
189
  }
190
+ /**
191
+ * Count the items matching a query using Firestore's server-side aggregation.
192
+ *
193
+ * @param c The collection to query.
194
+ * @param q The query selecting which items to count; counts the whole collection when omitted.
195
+ * @returns Promise resolving to the number of matching items.
196
+ * @example const total = await provider.countQuery(users)
197
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/countQuery
198
+ */
119
199
  async countQuery(c, q) {
120
200
  const snapshot = await this._getQuery(c, q).count().get();
121
201
  return snapshot.data().count;
122
202
  }
203
+ /**
204
+ * Read all items matching a query.
205
+ *
206
+ * @param c The collection to query.
207
+ * @param q The query selecting which items to read; reads the whole collection when omitted.
208
+ * @returns Promise resolving to the array of matching items.
209
+ * @example const items = await provider.getQuery(users, { "name": "Dave" })
210
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getQuery
211
+ */
123
212
  async getQuery(c, q) {
124
213
  return _getItems(await this._getQuery(c, q).get());
125
214
  }
215
+ /**
216
+ * Subscribe to realtime changes to a query via a Firestore `onSnapshot` listener.
217
+ *
218
+ * @param c The collection to query.
219
+ * @param q The query selecting which items to subscribe to; subscribes to the whole collection when omitted.
220
+ * @returns An async sequence yielding the matching items on every change.
221
+ * @example for await (const items of provider.getQuerySequence(users)) console.log(items)
222
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/getQuerySequence
223
+ */
126
224
  getQuerySequence(c, q) {
127
225
  const ref = this._getQuery(c, q);
128
226
  const sequence = new DeferredSequence();
129
227
  return new LazySequence(sequence, () => ref.onSnapshot(snapshot => sequence.resolve(_getItems(snapshot)), reason => sequence.reject(reason)));
130
228
  }
229
+ /**
230
+ * Write the same data to every item matching a query, batched through a Firestore `BulkWriter`.
231
+ *
232
+ * @param c The collection to query.
233
+ * @param q The query selecting which items to write.
234
+ * @param data The data to write to each matching item.
235
+ * @returns Promise resolving once all writes complete.
236
+ * @example await provider.setQuery(users, { "name": "Dave" }, { active: false })
237
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/setQuery
238
+ */
131
239
  async setQuery(c, q, data) {
132
240
  return await this._bulkWrite(c, q, (w, s) => void w.set(s.ref, data));
133
241
  }
242
+ /**
243
+ * Apply the same partial updates to every item matching a query, batched through a Firestore `BulkWriter`.
244
+ *
245
+ * @param c The collection to query.
246
+ * @param q The query selecting which items to update.
247
+ * @param updates The updates to apply to each matching item.
248
+ * @returns Promise resolving once all updates complete.
249
+ * @example await provider.updateQuery(users, { "active": true }, { name: "Dave" })
250
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/updateQuery
251
+ */
134
252
  async updateQuery(c, q, updates) {
135
253
  const fieldValues = _getFieldValues(updates);
136
254
  return await this._bulkWrite(c, q, (w, s) => void w.update(s.ref, fieldValues));
137
255
  }
256
+ /**
257
+ * Delete every item matching a query, batched through a Firestore `BulkWriter`.
258
+ *
259
+ * @param c The collection to query.
260
+ * @param q The query selecting which items to delete.
261
+ * @returns Promise resolving once all deletions complete.
262
+ * @example await provider.deleteQuery(users, { "active": false })
263
+ * @see https://dhoulb.github.io/shelving/firestore/server/FirestoreServerProvider/FirestoreServerProvider/deleteQuery
264
+ */
138
265
  async deleteQuery(c, q) {
139
266
  return await this._bulkWrite(c, q, (w, s) => void w.delete(s.ref));
140
267
  }
@@ -6,7 +6,13 @@ import { type ImmutableURI, type URISchemes } from "../util/uri.js";
6
6
  import type { ImmutableURL } from "../util/url.js";
7
7
  import type { MarkupRule, MarkupRules } from "./MarkupRule.js";
8
8
  import type { Parser } from "./Parser.js";
9
- /** The current parsing options (represents the current state of the parsing). */
9
+ /**
10
+ * Options configuring a `MarkupParser` (represents the current state of the parsing).
11
+ * - Every field is optional — an empty object yields a parser with the default rules and behaviour.
12
+ * - Link resolution honours `url`, `root`, and `schemes`; link safety hinges on `schemes`.
13
+ *
14
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupOptions
15
+ */
10
16
  export type MarkupOptions = {
11
17
  /**
12
18
  * The active list of parsing rules.
@@ -37,61 +43,102 @@ export type MarkupOptions = {
37
43
  */
38
44
  readonly context?: string;
39
45
  };
46
+ /**
47
+ * Parses a Markdownish markup string and renders it as a React node using a tiered, masking rule engine.
48
+ * - The syntax isn't hardcoded — it's defined entirely by the `rules` supplied (defaults to `MARKUP_RULES`).
49
+ * - Rules are grouped into priority tiers and resolved highest tier first; a claimed region is masked so lower-priority rules can't match into or across it.
50
+ * - Rules own the recursion into their own children by calling `parse()` again, optionally with a different context.
51
+ *
52
+ * @example
53
+ * const node = new MarkupParser().parse("This is a *bold* string.");
54
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser
55
+ */
40
56
  export declare class MarkupParser implements Parser<string, ReactNode> {
41
57
  /**
42
58
  * The list of parsing rules this parser applies.
59
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/rules
43
60
  */
44
61
  readonly rules: MarkupRules;
45
62
  /**
46
63
  * Calculated list of priorities to iterate over (extracted from the rules), e.g. [10, 0, -10]
64
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/priorities
47
65
  */
48
66
  readonly priorities: ImmutableArray<number>;
49
67
  /**
50
68
  * Set the `rel=""` property used for any links (e.g. `rel="nofollow ugc"`).
51
69
  * @example "nofollow ugc"
70
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/rel
52
71
  */
53
72
  readonly rel: string | undefined;
54
73
  /**
55
74
  * Current page URL — used as the base for resolving relative refs (`./foo`, `#x`, bare segments) in link hrefs.
56
75
  * @default Falls back to `root` if not set.
76
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/url
57
77
  */
58
78
  readonly url: ImmutableURL | undefined;
59
79
  /**
60
80
  * Site root URL — used as the base for resolving site-absolute path hrefs (`/foo`), honoring its subfolder.
61
81
  * @default Falls back to `url` if not set.
82
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/root
62
83
  */
63
84
  readonly root: ImmutableURL | undefined;
64
85
  /**
65
86
  * Valid URI schemes/protocols for URLs and URIs.
66
87
  * @example ["http:", "https:"]
67
88
  * @default ["http:", "https:"]
89
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/schemes
68
90
  */
69
91
  readonly schemes: URISchemes;
70
92
  /**
71
93
  * Default context to use if one isn't set. Defaults to `"block"`
94
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/context
72
95
  */
73
96
  readonly context: string;
97
+ /**
98
+ * Create a new `MarkupParser` from a set of options.
99
+ *
100
+ * @param options Options configuring the rules, link resolution, and default context (all optional).
101
+ * @returns A `MarkupParser` instance.
102
+ * @example new MarkupParser({ rel: "nofollow ugc" })
103
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser
104
+ */
74
105
  constructor({ rules, rel, url, root, schemes, context }?: MarkupOptions);
75
106
  /**
76
- * Parse a text string as Markdownish markup syntax and render it as elements.
107
+ * Parse a text string as Markdownish markup syntax and render it as a React node.
77
108
  * - Syntax is not defined by this code, but by the rules supplied to it.
78
109
  *
79
- * @param input The string content possibly containing markup syntax, e.g. "This is a *bold* string.
80
- * @param parser A markup parser instance.
110
+ * @param input The string content possibly containing markup syntax, e.g. `"This is a *bold* string."`.
81
111
  * @param context The context to render in (defaults to `"block"`).
82
- *
83
112
  * @returns A React node — an element, a string, `null`, or an array of zero or more of those.
113
+ * @example new MarkupParser().parse("This is a *bold* string.")
114
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/parse
84
115
  */
85
116
  parse(input: string, context?: string): ReactNode;
86
- /** Yield the rules active in `context` that sit in the given priority tier. */
117
+ /**
118
+ * Yield the rules active in `context` that sit in the given priority tier.
119
+ *
120
+ * @param context The render context to filter rules by (e.g. `"block"`, `"inline"`).
121
+ * @param priority The priority tier to filter rules by.
122
+ * @returns An iterable of the matching `MarkupRule` instances.
123
+ * @example for (const rule of parser.getRules("block", 0)) { ... }
124
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/getRules
125
+ */
87
126
  getRules(context: string, priority: number): Iterable<MarkupRule>;
88
127
  /**
89
- * Get a HREF link with the correct context of our `options.url` and `options.root`
128
+ * Resolve a link href against this parser's `url` and `root`, returning it only if its scheme is allowed.
90
129
  *
91
- * @returns `ImmutableURI` a (URL) object if the link matches and is parseable and has an allowed scheme.
92
- * @returns `undefined` if the link does not amtch the allowed `options.schemes`
130
+ * @param href The raw link reference to resolve (relative or absolute), or a nullish value.
131
+ * @returns An `ImmutableURI` if the link parses and its scheme is in `schemes`, otherwise `undefined`.
132
+ * @example parser.getLink("/about") // ImmutableURI | undefined
133
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MarkupParser/getLink
93
134
  */
94
135
  getLink(href: Nullish<PossibleLink>): ImmutableURI | undefined;
95
136
  }
96
- /** MarkupParser sentinel with the default markup rules */
137
+ /**
138
+ * Shared `MarkupParser` instance configured with the default markup rules and behaviour.
139
+ * - Use this singleton when no custom rules, link resolution, or default context are needed.
140
+ *
141
+ * @example MARKUP_PARSER.parse("This is a *bold* string.")
142
+ * @see https://dhoulb.github.io/shelving/markup/MarkupParser/MARKUP_PARSER
143
+ */
97
144
  export declare const MARKUP_PARSER: MarkupParser;