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
package/util/filter.js CHANGED
@@ -1,17 +1,45 @@
1
- /** Filter an iterable set of items using a matcher. */
1
+ /**
2
+ * Filter an iterable set of items using a matcher.
3
+ *
4
+ * @param items Iterable of items to filter.
5
+ * @param match Matcher called with each item (plus any extra `args`); items it returns `true` for are kept.
6
+ * @param args Extra arguments passed to `match` after each item.
7
+ * @returns Iterable yielding only the items the matcher returned `true` for.
8
+ * @example Array.from(filterItems([1, 2, 3], n => n > 1)) // [2, 3]
9
+ * @see https://dhoulb.github.io/shelving/util/filter/filterItems
10
+ */
2
11
  export function* filterItems(items, match, ...args) {
3
12
  for (const item of items)
4
13
  if (match(item, ...args))
5
14
  yield item;
6
15
  }
7
- /** Filter an array (immutably) using a matcher. */
16
+ /**
17
+ * Filter an array (immutably) using a matcher.
18
+ * - Returns the exact same array instance if no items were removed (for referential stability).
19
+ *
20
+ * @param input Array of items to filter.
21
+ * @param match Matcher called with each item (plus any extra `args`); items it returns `true` for are kept.
22
+ * @param args Extra arguments passed to `match` after each item.
23
+ * @returns A filtered array, or the same `input` instance if nothing was removed.
24
+ * @example filterArray([1, 2, 3], n => n > 1) // [2, 3]
25
+ * @see https://dhoulb.github.io/shelving/util/filter/filterArray
26
+ */
8
27
  export function filterArray(input, match, ...args) {
9
28
  if (!input.length)
10
29
  return input;
11
30
  const output = Array.from(filterItems(input, match, ...args));
12
31
  return output.length === input.length ? input : output;
13
32
  }
14
- /** Filter a sequence of values using a matcher. */
33
+ /**
34
+ * Filter a sequence of values using a matcher.
35
+ *
36
+ * @param sequence Async iterable of items to filter.
37
+ * @param match Matcher called with each item (plus any extra `args`); items it returns `true` for are kept.
38
+ * @param args Extra arguments passed to `match` after each item.
39
+ * @returns Async iterable yielding only the items the matcher returned `true` for.
40
+ * @example for await (const n of filterSequence(stream, n => n > 1)) { ... }
41
+ * @see https://dhoulb.github.io/shelving/util/filter/filterSequence
42
+ */
15
43
  export async function* filterSequence(sequence, match, ...args) {
16
44
  for await (const item of sequence)
17
45
  if (match(item, ...args))
package/util/focus.d.ts CHANGED
@@ -1,2 +1,10 @@
1
- /** Find the first focusable element inside HTML element (including the element itself). */
1
+ /**
2
+ * Find the first focusable element inside an HTML element (including the element itself).
3
+ * - An element is focusable if it's an enabled link, button, input, select, or textarea, or has a non-negative `tabindex`.
4
+ *
5
+ * @param el The HTML element to search (it is tested first, then its descendants).
6
+ * @returns The first focusable `HTMLElement`, or `null` if none is found.
7
+ * @example getFirstFocusable(form) // the first enabled input inside the form
8
+ * @see https://dhoulb.github.io/shelving/util/focus/getFirstFocusable
9
+ */
2
10
  export declare function getFirstFocusable(el: HTMLElement): HTMLElement | null;
package/util/focus.js CHANGED
@@ -1,6 +1,14 @@
1
1
  /** Selector for elements that can take focus */
2
2
  const FOCUSABLE = `a:link, button:enabled, input:enabled, select:enabled, textarea:enabled, [tabindex]:not([tabindex="-1"]):not(:disabled)`;
3
- /** Find the first focusable element inside HTML element (including the element itself). */
3
+ /**
4
+ * Find the first focusable element inside an HTML element (including the element itself).
5
+ * - An element is focusable if it's an enabled link, button, input, select, or textarea, or has a non-negative `tabindex`.
6
+ *
7
+ * @param el The HTML element to search (it is tested first, then its descendants).
8
+ * @returns The first focusable `HTMLElement`, or `null` if none is found.
9
+ * @example getFirstFocusable(form) // the first enabled input inside the form
10
+ * @see https://dhoulb.github.io/shelving/util/focus/getFirstFocusable
11
+ */
4
12
  export function getFirstFocusable(el) {
5
13
  return el.matches(FOCUSABLE) ? el : el.querySelector(FOCUSABLE);
6
14
  }
package/util/format.d.ts CHANGED
@@ -4,38 +4,84 @@ import type { AnyCaller } from "./function.js";
4
4
  import { type ImmutableObject } from "./object.js";
5
5
  import { type PossibleURI } from "./uri.js";
6
6
  import { type PossibleURL } from "./url.js";
7
- /** Options that are shared across all formatters. */
7
+ /**
8
+ * Options that are shared across all formatters.
9
+ *
10
+ * @see https://dhoulb.github.io/shelving/util/format/FormatOptions
11
+ */
8
12
  export interface FormatOptions {
9
- /** Override the locale for formatting (defaults to detected locale). */
13
+ /**
14
+ * Override the locale for formatting (defaults to detected locale).
15
+ *
16
+ * @see https://dhoulb.github.io/shelving/util/format/FormatOptions/locale
17
+ */
10
18
  readonly locale?: Intl.Locale | undefined;
11
19
  }
12
- /** Format a boolean as "Yes" or "No". */
20
+ /**
21
+ * Format a boolean as `"Yes"` or `"No"`.
22
+ *
23
+ * @param value Boolean value to format.
24
+ * @returns `"Yes"` if `value` is `true`, otherwise `"No"`.
25
+ * @example formatBoolean(true) // "Yes"
26
+ * @see https://dhoulb.github.io/shelving/util/format/formatBoolean
27
+ */
13
28
  export declare function formatBoolean(value: boolean): string;
14
- /** Options we use for number formatting. */
29
+ /**
30
+ * Options we use for number formatting.
31
+ *
32
+ * @see https://dhoulb.github.io/shelving/util/format/NumberFormatOptions
33
+ */
15
34
  export interface NumberFormatOptions extends FormatOptions, Omit<Intl.NumberFormatOptions, "style" | "unit" | "unitDisplay" | "currency" | "currencyDisplay" | "currencySign"> {
16
35
  }
17
- /** Format a number (based on the user's browser language settings). */
36
+ /**
37
+ * Format a number (based on the user's browser language settings).
38
+ *
39
+ * @param num Number to format.
40
+ * @param options Formatting options passed through to `Intl.NumberFormat`.
41
+ * @returns Locale-formatted number string.
42
+ * @example formatNumber(1234.5) // "1,234.5"
43
+ * @see https://dhoulb.github.io/shelving/util/format/formatNumber
44
+ */
18
45
  export declare function formatNumber(num: number, options?: NumberFormatOptions): string;
19
- /** Format a number range (based on the user's browser language settings). */
46
+ /**
47
+ * Format a number range (based on the user's browser language settings).
48
+ *
49
+ * @param from Number at the start of the range.
50
+ * @param to Number at the end of the range.
51
+ * @param options Formatting options passed through to `Intl.NumberFormat`.
52
+ * @returns Locale-formatted number range string.
53
+ * @example formatRange(1, 10) // "1–10"
54
+ * @see https://dhoulb.github.io/shelving/util/format/formatRange
55
+ */
20
56
  export declare function formatRange(from: number, to: number, options?: NumberFormatOptions): string;
21
- /** Options for quantity formatting. */
57
+ /**
58
+ * Options for quantity formatting.
59
+ *
60
+ * @see https://dhoulb.github.io/shelving/util/format/UnitFormatOptions
61
+ */
22
62
  export interface UnitFormatOptions extends FormatOptions, Omit<Intl.NumberFormatOptions, "style" | "unit" | "currency" | "currencyDisplay" | "currencySign"> {
23
63
  /**
24
64
  * String for one of this thing, e.g. `product` or `item` or `sheep`
25
65
  * - Used for `unitDisplay: "long"` formatting.
26
66
  * - Defaults to unit reference, e.g. "minute"
67
+ *
68
+ * @see https://dhoulb.github.io/shelving/util/format/UnitFormatOptions/one
27
69
  */
28
70
  readonly one?: string | undefined;
29
71
  /**
30
72
  * String for several of this thing, e.g. `products` or `items` or `sheep`
31
73
  * - Used for `unitDisplay: "long"` formatting.
32
74
  * - Defaults to `one + "s"`
75
+ *
76
+ * @see https://dhoulb.github.io/shelving/util/format/UnitFormatOptions/many
33
77
  */
34
78
  readonly many?: string | undefined;
35
79
  /**
36
80
  * Abbreviation for this thing, e.g. `products` or `items` or `sheep` (defaults to `one` + "s").
37
81
  * - Used for `unitDisplay: "narrow"` formatting.
38
82
  * - Defaults to unit reference, e.g. "minute"
83
+ *
84
+ * @see https://dhoulb.github.io/shelving/util/format/UnitFormatOptions/abbr
39
85
  */
40
86
  readonly abbr?: string | undefined;
41
87
  }
@@ -46,14 +92,40 @@ export interface UnitFormatOptions extends FormatOptions, Omit<Intl.NumberFormat
46
92
  * - Unfortunately the list of supported units changes in different browsers.
47
93
  * - Ideally we want to format units using the built-in formatting so things like translation and internationalisation are covered.
48
94
  * - But we want provide fallback formatting for unsupported units, and do something _good enough_ job in most cases.
95
+ *
96
+ * @param num Quantity to format.
97
+ * @param unit Unit reference to format the quantity as, e.g. `"minute"` or `"product"`.
98
+ * @param options Formatting options including custom `one`/`many`/`abbr` strings for unsupported units.
99
+ * @returns Formatted quantity string, e.g. `"5 minutes"` or `"5 products"`.
100
+ * @example formatUnit(5, "minute", { unitDisplay: "long" }) // "5 minutes"
101
+ * @see https://dhoulb.github.io/shelving/util/format/formatUnit
49
102
  */
50
103
  export declare function formatUnit(num: number, unit: string, options?: UnitFormatOptions): string;
51
- /** Options we use for currency formatting. */
104
+ /**
105
+ * Options we use for currency formatting.
106
+ *
107
+ * @see https://dhoulb.github.io/shelving/util/format/CurrencyFormatOptions
108
+ */
52
109
  export interface CurrencyFormatOptions extends FormatOptions, Omit<Intl.NumberFormatOptions, "style" | "unit" | "unitDisplay" | "currency"> {
53
110
  }
54
- /** Format a currency amount (based on the user's browser language settings). */
111
+ /**
112
+ * Format a currency amount (based on the user's browser language settings).
113
+ *
114
+ * @param amount Amount of money to format.
115
+ * @param currency ISO 4217 currency code, e.g. `"USD"` or `"GBP"`.
116
+ * @param options Formatting options passed through to `Intl.NumberFormat`.
117
+ * @param caller Function to attribute a thrown error to (defaults to `formatCurrency` itself).
118
+ * @returns Locale-formatted currency string.
119
+ * @throws {RequiredError} If `currency` is not a valid currency code.
120
+ * @example formatCurrency(1234.5, "USD") // "$1,234.50"
121
+ * @see https://dhoulb.github.io/shelving/util/format/formatCurrency
122
+ */
55
123
  export declare function formatCurrency(amount: number, currency: string, options?: CurrencyFormatOptions, caller?: AnyCaller): string;
56
- /** Options we use for percent formatting. */
124
+ /**
125
+ * Options we use for percent formatting.
126
+ *
127
+ * @see https://dhoulb.github.io/shelving/util/format/PercentFormatOptions
128
+ */
57
129
  export interface PercentFormatOptions extends FormatOptions, Omit<Intl.NumberFormatOptions, "style" | "unit" | "unitDisplay" | "currency" | "currencyDisplay" | "currencySign"> {
58
130
  }
59
131
  /**
@@ -64,6 +136,10 @@ export interface PercentFormatOptions extends FormatOptions, Omit<Intl.NumberFor
64
136
  *
65
137
  * @param numerator Number representing the amount of progress (e.g. `50`).
66
138
  * @param denumerator The number representing the whole amount (defaults to 100).
139
+ * @param options Formatting options passed through to `Intl.NumberFormat`.
140
+ * @returns Locale-formatted percentage string.
141
+ * @example formatPercent(50) // "50%"
142
+ * @see https://dhoulb.github.io/shelving/util/format/formatPercent
67
143
  */
68
144
  export declare function formatPercent(numerator: number, denumerator?: number, options?: PercentFormatOptions): string;
69
145
  /**
@@ -71,32 +147,104 @@ export declare function formatPercent(numerator: number, denumerator?: number, o
71
147
  * - Use the custom `.toString()` function if it exists (don't use built in `Object.prototype.toString` because it's useless.
72
148
  * - Use `.title` or `.name` or `.id` if they exist and are strings.
73
149
  * - Use `Object` otherwise.
150
+ *
151
+ * @param obj Object to format.
152
+ * @returns Best-available string representation of `obj`, or `"Object"` as a fallback.
153
+ * @example formatObject({ name: "Dave" }) // "Dave"
154
+ * @see https://dhoulb.github.io/shelving/util/format/formatObject
74
155
  */
75
156
  export declare function formatObject(obj: ImmutableObject): string;
157
+ /**
158
+ * Options for formatting an array as a string with `formatArray()`.
159
+ *
160
+ * @see https://dhoulb.github.io/shelving/util/format/ArrayFormatOptions
161
+ */
76
162
  export interface ArrayFormatOptions extends FormatOptions, Intl.ListFormatOptions {
77
163
  }
78
- /** Format an unknown array as a string. */
164
+ /**
165
+ * Format an unknown array as a string.
166
+ *
167
+ * @param arr Array of values to format.
168
+ * @param options Formatting options passed through to `Intl.ListFormat`.
169
+ * @param caller Function to attribute a thrown error to (defaults to `formatArray` itself).
170
+ * @returns Locale-formatted list string with each item converted via `formatValue()`.
171
+ * @example formatArray(["a", "b", "c"]) // "a, b, and c"
172
+ * @see https://dhoulb.github.io/shelving/util/format/formatArray
173
+ */
79
174
  export declare function formatArray(arr: ImmutableArray<unknown>, options?: ArrayFormatOptions, caller?: AnyCaller): string;
80
- /** Options we use for currency formatting. */
175
+ /**
176
+ * Options we use for date, time, and datetime formatting.
177
+ *
178
+ * @see https://dhoulb.github.io/shelving/util/format/DateFormatOptions
179
+ */
81
180
  export interface DateFormatOptions extends Intl.DateTimeFormatOptions {
82
- /** Override the locale for formatting (defaults to detected locale). */
181
+ /**
182
+ * Override the locale for formatting (defaults to detected locale).
183
+ *
184
+ * @see https://dhoulb.github.io/shelving/util/format/DateFormatOptions/locale
185
+ */
83
186
  readonly locale?: Intl.Locale | undefined;
84
187
  }
85
- /** Format a date in the browser locale. */
188
+ /**
189
+ * Format a date in the browser locale.
190
+ *
191
+ * @param date Date to format.
192
+ * @param options Formatting options passed through to `Date.toLocaleDateString`.
193
+ * @param caller Function to attribute a thrown error to (defaults to `formatDate` itself).
194
+ * @returns Locale-formatted date string.
195
+ * @throws {RequiredError} If `date` cannot be converted to a valid date.
196
+ * @example formatDate("2025-01-01") // "1/1/2025"
197
+ * @see https://dhoulb.github.io/shelving/util/format/formatDate
198
+ */
86
199
  export declare function formatDate(date: PossibleDate, options?: DateFormatOptions, caller?: AnyCaller): string;
87
- /** Format a time in the browser locale (no seconds by default). */
200
+ /**
201
+ * Format a time in the browser locale (no seconds by default).
202
+ *
203
+ * @param time Time to format (defaults to now).
204
+ * @param options Formatting options passed through to `Date.toLocaleTimeString`.
205
+ * @param caller Function to attribute a thrown error to (defaults to `formatTime` itself).
206
+ * @returns Locale-formatted time string.
207
+ * @throws {RequiredError} If `time` cannot be converted to a valid date.
208
+ * @example formatTime("2025-01-01T13:30") // "01:30 PM"
209
+ * @see https://dhoulb.github.io/shelving/util/format/formatTime
210
+ */
88
211
  export declare function formatTime(time?: PossibleDate, options?: DateFormatOptions, caller?: AnyCaller): string;
89
- /** Format a datetime in the browser locale (no seconds by default). */
212
+ /**
213
+ * Format a datetime in the browser locale (no seconds by default).
214
+ *
215
+ * @param date Date to format.
216
+ * @param options Formatting options passed through to `Date.toLocaleString`.
217
+ * @param caller Function to attribute a thrown error to (defaults to `formatDateTime` itself).
218
+ * @returns Locale-formatted datetime string.
219
+ * @throws {RequiredError} If `date` cannot be converted to a valid date.
220
+ * @example formatDateTime("2025-01-01T13:30") // "1/1/2025, 01:30 PM"
221
+ * @see https://dhoulb.github.io/shelving/util/format/formatDateTime
222
+ */
90
223
  export declare function formatDateTime(date: PossibleDate, options?: DateFormatOptions, caller?: AnyCaller): string;
91
224
  /**
92
- * Format a URI as a user-friendly string
93
- * e.g. `mailto:dave@shax.com` → `dave@shax.com`
94
- * e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
225
+ * Format a URI as a user-friendly string.
226
+ * - e.g. `mailto:dave@shax.com` → `dave@shax.com`
227
+ * - e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
228
+ *
229
+ * @param url URI to format.
230
+ * @param caller Function to attribute a thrown error to (defaults to `formatURI` itself).
231
+ * @returns Friendly string showing the host and path with any trailing slash removed.
232
+ * @throws {RequiredError} If `url` cannot be converted to a valid URI.
233
+ * @example formatURI("http://shax.com/test?uid=129483") // "shax.com/test"
234
+ * @see https://dhoulb.github.io/shelving/util/format/formatURI
95
235
  */
96
236
  export declare function formatURI(url: PossibleURI, caller?: AnyCaller): string;
97
237
  /**
98
- * Format a URI as a string.
99
- * e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
238
+ * Format a URL as a user-friendly string.
239
+ * - e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
240
+ *
241
+ * @param url URL to format.
242
+ * @param base Base URL to resolve `url` against if it is relative.
243
+ * @param caller Function to attribute a thrown error to (defaults to `formatURL` itself).
244
+ * @returns Friendly string showing the host and path with any trailing slash removed.
245
+ * @throws {RequiredError} If `url` cannot be converted to a valid URL.
246
+ * @example formatURL("http://shax.com/test?uid=129483") // "shax.com/test"
247
+ * @see https://dhoulb.github.io/shelving/util/format/formatURL
100
248
  */
101
249
  export declare function formatURL(url: PossibleURL, base?: PossibleURL, caller?: AnyCaller): string;
102
250
  /**
@@ -111,7 +259,23 @@ export declare function formatURL(url: PossibleURL, base?: PossibleURL, caller?:
111
259
  * 2. `object.title` if it exists.
112
260
  * - Falsy values like `null` and `undefined` return `"None"`
113
261
  * - Everything else returns `"Unknown"`
262
+ *
263
+ * @param value Unknown value to format.
264
+ * @param options Formatting options passed through to the underlying formatter.
265
+ * @param caller Function to attribute a thrown error to (defaults to `formatValue` itself).
266
+ * @returns User-facing string representation of `value`.
267
+ * @example formatValue(1234) // "1,234"
268
+ * @see https://dhoulb.github.io/shelving/util/format/formatValue
114
269
  */
115
270
  export declare function formatValue(value: unknown, options?: FormatOptions, caller?: AnyCaller): string;
116
- /** Format a sequence of values. */
271
+ /**
272
+ * Format a sequence of values.
273
+ *
274
+ * @param values Iterable of unknown values to format.
275
+ * @param options Formatting options passed through to `formatValue()` for each item.
276
+ * @param caller Function to attribute a thrown error to (defaults to `formatValues` itself).
277
+ * @returns Iterable yielding the user-facing string for each value.
278
+ * @example [...formatValues([1234, true])] // ["1,234", "Yes"]
279
+ * @see https://dhoulb.github.io/shelving/util/format/formatValues
280
+ */
117
281
  export declare function formatValues(values: Iterable<unknown>, options?: FormatOptions, caller?: AnyCaller): Iterable<string>;
package/util/format.js CHANGED
@@ -5,15 +5,39 @@ import { getPercent } from "./number.js";
5
5
  import { isObject } from "./object.js";
6
6
  import { isURI, requireURI } from "./uri.js";
7
7
  import { requireURL } from "./url.js";
8
- /** Format a boolean as "Yes" or "No". */
8
+ /**
9
+ * Format a boolean as `"Yes"` or `"No"`.
10
+ *
11
+ * @param value Boolean value to format.
12
+ * @returns `"Yes"` if `value` is `true`, otherwise `"No"`.
13
+ * @example formatBoolean(true) // "Yes"
14
+ * @see https://dhoulb.github.io/shelving/util/format/formatBoolean
15
+ */
9
16
  export function formatBoolean(value) {
10
17
  return value ? "Yes" : "No";
11
18
  }
12
- /** Format a number (based on the user's browser language settings). */
19
+ /**
20
+ * Format a number (based on the user's browser language settings).
21
+ *
22
+ * @param num Number to format.
23
+ * @param options Formatting options passed through to `Intl.NumberFormat`.
24
+ * @returns Locale-formatted number string.
25
+ * @example formatNumber(1234.5) // "1,234.5"
26
+ * @see https://dhoulb.github.io/shelving/util/format/formatNumber
27
+ */
13
28
  export function formatNumber(num, options) {
14
29
  return Intl.NumberFormat(options?.locale, options).format(num);
15
30
  }
16
- /** Format a number range (based on the user's browser language settings). */
31
+ /**
32
+ * Format a number range (based on the user's browser language settings).
33
+ *
34
+ * @param from Number at the start of the range.
35
+ * @param to Number at the end of the range.
36
+ * @param options Formatting options passed through to `Intl.NumberFormat`.
37
+ * @returns Locale-formatted number range string.
38
+ * @example formatRange(1, 10) // "1–10"
39
+ * @see https://dhoulb.github.io/shelving/util/format/formatRange
40
+ */
17
41
  export function formatRange(from, to, options) {
18
42
  return Intl.NumberFormat(options?.locale, options).formatRange(from, to);
19
43
  }
@@ -24,6 +48,13 @@ export function formatRange(from, to, options) {
24
48
  * - Unfortunately the list of supported units changes in different browsers.
25
49
  * - Ideally we want to format units using the built-in formatting so things like translation and internationalisation are covered.
26
50
  * - But we want provide fallback formatting for unsupported units, and do something _good enough_ job in most cases.
51
+ *
52
+ * @param num Quantity to format.
53
+ * @param unit Unit reference to format the quantity as, e.g. `"minute"` or `"product"`.
54
+ * @param options Formatting options including custom `one`/`many`/`abbr` strings for unsupported units.
55
+ * @returns Formatted quantity string, e.g. `"5 minutes"` or `"5 products"`.
56
+ * @example formatUnit(5, "minute", { unitDisplay: "long" }) // "5 minutes"
57
+ * @see https://dhoulb.github.io/shelving/util/format/formatUnit
27
58
  */
28
59
  export function formatUnit(num, unit, options) {
29
60
  // Check if the unit is supported by the browser.
@@ -36,7 +67,18 @@ export function formatUnit(num, unit, options) {
36
67
  return `${str} ${str === "1" ? one : many}`;
37
68
  return `${str}${unitDisplay === "narrow" ? "" : " "}${abbr}`; // "short" is the default.
38
69
  }
39
- /** Format a currency amount (based on the user's browser language settings). */
70
+ /**
71
+ * Format a currency amount (based on the user's browser language settings).
72
+ *
73
+ * @param amount Amount of money to format.
74
+ * @param currency ISO 4217 currency code, e.g. `"USD"` or `"GBP"`.
75
+ * @param options Formatting options passed through to `Intl.NumberFormat`.
76
+ * @param caller Function to attribute a thrown error to (defaults to `formatCurrency` itself).
77
+ * @returns Locale-formatted currency string.
78
+ * @throws {RequiredError} If `currency` is not a valid currency code.
79
+ * @example formatCurrency(1234.5, "USD") // "$1,234.50"
80
+ * @see https://dhoulb.github.io/shelving/util/format/formatCurrency
81
+ */
40
82
  export function formatCurrency(amount, currency, options, caller = formatCurrency) {
41
83
  return Intl.NumberFormat(options?.locale, {
42
84
  style: "currency",
@@ -52,6 +94,10 @@ export function formatCurrency(amount, currency, options, caller = formatCurrenc
52
94
  *
53
95
  * @param numerator Number representing the amount of progress (e.g. `50`).
54
96
  * @param denumerator The number representing the whole amount (defaults to 100).
97
+ * @param options Formatting options passed through to `Intl.NumberFormat`.
98
+ * @returns Locale-formatted percentage string.
99
+ * @example formatPercent(50) // "50%"
100
+ * @see https://dhoulb.github.io/shelving/util/format/formatPercent
55
101
  */
56
102
  export function formatPercent(numerator, denumerator, options) {
57
103
  return Intl.NumberFormat(options?.locale, {
@@ -66,6 +112,11 @@ export function formatPercent(numerator, denumerator, options) {
66
112
  * - Use the custom `.toString()` function if it exists (don't use built in `Object.prototype.toString` because it's useless.
67
113
  * - Use `.title` or `.name` or `.id` if they exist and are strings.
68
114
  * - Use `Object` otherwise.
115
+ *
116
+ * @param obj Object to format.
117
+ * @returns Best-available string representation of `obj`, or `"Object"` as a fallback.
118
+ * @example formatObject({ name: "Dave" }) // "Dave"
119
+ * @see https://dhoulb.github.io/shelving/util/format/formatObject
69
120
  */
70
121
  export function formatObject(obj) {
71
122
  if (typeof obj.toString === "function" && obj.toString !== Object.prototype.toString)
@@ -81,15 +132,44 @@ export function formatObject(obj) {
81
132
  return id;
82
133
  return "Object";
83
134
  }
84
- /** Format an unknown array as a string. */
135
+ /**
136
+ * Format an unknown array as a string.
137
+ *
138
+ * @param arr Array of values to format.
139
+ * @param options Formatting options passed through to `Intl.ListFormat`.
140
+ * @param caller Function to attribute a thrown error to (defaults to `formatArray` itself).
141
+ * @returns Locale-formatted list string with each item converted via `formatValue()`.
142
+ * @example formatArray(["a", "b", "c"]) // "a, b, and c"
143
+ * @see https://dhoulb.github.io/shelving/util/format/formatArray
144
+ */
85
145
  export function formatArray(arr, options, caller = formatArray) {
86
146
  return new Intl.ListFormat(undefined, { style: "long", type: "unit", ...options }).format(formatValues(arr, options, caller));
87
147
  }
88
- /** Format a date in the browser locale. */
148
+ /**
149
+ * Format a date in the browser locale.
150
+ *
151
+ * @param date Date to format.
152
+ * @param options Formatting options passed through to `Date.toLocaleDateString`.
153
+ * @param caller Function to attribute a thrown error to (defaults to `formatDate` itself).
154
+ * @returns Locale-formatted date string.
155
+ * @throws {RequiredError} If `date` cannot be converted to a valid date.
156
+ * @example formatDate("2025-01-01") // "1/1/2025"
157
+ * @see https://dhoulb.github.io/shelving/util/format/formatDate
158
+ */
89
159
  export function formatDate(date, options, caller = formatDate) {
90
160
  return requireDate(date, caller).toLocaleDateString(options?.locale, options);
91
161
  }
92
- /** Format a time in the browser locale (no seconds by default). */
162
+ /**
163
+ * Format a time in the browser locale (no seconds by default).
164
+ *
165
+ * @param time Time to format (defaults to now).
166
+ * @param options Formatting options passed through to `Date.toLocaleTimeString`.
167
+ * @param caller Function to attribute a thrown error to (defaults to `formatTime` itself).
168
+ * @returns Locale-formatted time string.
169
+ * @throws {RequiredError} If `time` cannot be converted to a valid date.
170
+ * @example formatTime("2025-01-01T13:30") // "01:30 PM"
171
+ * @see https://dhoulb.github.io/shelving/util/format/formatTime
172
+ */
93
173
  export function formatTime(time, options, caller = formatTime) {
94
174
  return requireDate(time, caller).toLocaleTimeString(options?.locale, {
95
175
  hour: "2-digit",
@@ -98,7 +178,17 @@ export function formatTime(time, options, caller = formatTime) {
98
178
  ...options,
99
179
  });
100
180
  }
101
- /** Format a datetime in the browser locale (no seconds by default). */
181
+ /**
182
+ * Format a datetime in the browser locale (no seconds by default).
183
+ *
184
+ * @param date Date to format.
185
+ * @param options Formatting options passed through to `Date.toLocaleString`.
186
+ * @param caller Function to attribute a thrown error to (defaults to `formatDateTime` itself).
187
+ * @returns Locale-formatted datetime string.
188
+ * @throws {RequiredError} If `date` cannot be converted to a valid date.
189
+ * @example formatDateTime("2025-01-01T13:30") // "1/1/2025, 01:30 PM"
190
+ * @see https://dhoulb.github.io/shelving/util/format/formatDateTime
191
+ */
102
192
  export function formatDateTime(date, options, caller = formatDateTime) {
103
193
  return requireDate(date, caller).toLocaleString(options?.locale, {
104
194
  year: "numeric",
@@ -111,9 +201,16 @@ export function formatDateTime(date, options, caller = formatDateTime) {
111
201
  });
112
202
  }
113
203
  /**
114
- * Format a URI as a user-friendly string
115
- * e.g. `mailto:dave@shax.com` → `dave@shax.com`
116
- * e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
204
+ * Format a URI as a user-friendly string.
205
+ * - e.g. `mailto:dave@shax.com` → `dave@shax.com`
206
+ * - e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
207
+ *
208
+ * @param url URI to format.
209
+ * @param caller Function to attribute a thrown error to (defaults to `formatURI` itself).
210
+ * @returns Friendly string showing the host and path with any trailing slash removed.
211
+ * @throws {RequiredError} If `url` cannot be converted to a valid URI.
212
+ * @example formatURI("http://shax.com/test?uid=129483") // "shax.com/test"
213
+ * @see https://dhoulb.github.io/shelving/util/format/formatURI
117
214
  */
118
215
  export function formatURI(url, caller = formatURI) {
119
216
  return _formatURI(requireURI(url, caller));
@@ -122,8 +219,16 @@ function _formatURI({ host, pathname }) {
122
219
  return `${host}${pathname.endsWith("/") ? pathname.slice(0, -1) : pathname}`;
123
220
  }
124
221
  /**
125
- * Format a URI as a string.
126
- * e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
222
+ * Format a URL as a user-friendly string.
223
+ * - e.g. `http://shax.com/test?uid=129483` → `shax.com/test`
224
+ *
225
+ * @param url URL to format.
226
+ * @param base Base URL to resolve `url` against if it is relative.
227
+ * @param caller Function to attribute a thrown error to (defaults to `formatURL` itself).
228
+ * @returns Friendly string showing the host and path with any trailing slash removed.
229
+ * @throws {RequiredError} If `url` cannot be converted to a valid URL.
230
+ * @example formatURL("http://shax.com/test?uid=129483") // "shax.com/test"
231
+ * @see https://dhoulb.github.io/shelving/util/format/formatURL
127
232
  */
128
233
  export function formatURL(url, base, caller = formatURL) {
129
234
  return _formatURI(requireURL(url, base, caller));
@@ -140,6 +245,13 @@ export function formatURL(url, base, caller = formatURL) {
140
245
  * 2. `object.title` if it exists.
141
246
  * - Falsy values like `null` and `undefined` return `"None"`
142
247
  * - Everything else returns `"Unknown"`
248
+ *
249
+ * @param value Unknown value to format.
250
+ * @param options Formatting options passed through to the underlying formatter.
251
+ * @param caller Function to attribute a thrown error to (defaults to `formatValue` itself).
252
+ * @returns User-facing string representation of `value`.
253
+ * @example formatValue(1234) // "1,234"
254
+ * @see https://dhoulb.github.io/shelving/util/format/formatValue
143
255
  */
144
256
  export function formatValue(value, options, caller = formatValue) {
145
257
  if (value === null || value === undefined)
@@ -164,7 +276,16 @@ export function formatValue(value, options, caller = formatValue) {
164
276
  return formatURI(value, caller);
165
277
  return "Unknown";
166
278
  }
167
- /** Format a sequence of values. */
279
+ /**
280
+ * Format a sequence of values.
281
+ *
282
+ * @param values Iterable of unknown values to format.
283
+ * @param options Formatting options passed through to `formatValue()` for each item.
284
+ * @param caller Function to attribute a thrown error to (defaults to `formatValues` itself).
285
+ * @returns Iterable yielding the user-facing string for each value.
286
+ * @example [...formatValues([1234, true])] // ["1,234", "Yes"]
287
+ * @see https://dhoulb.github.io/shelving/util/format/formatValues
288
+ */
168
289
  export function* formatValues(values, options, caller = formatValues) {
169
290
  for (const v of values)
170
291
  yield formatValue(v, options, caller);