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/uri.js CHANGED
@@ -2,12 +2,31 @@ import { RequiredError } from "../error/RequiredError.js";
2
2
  import { ValueError } from "../error/ValueError.js";
3
3
  import { getDictionaryItems, isDictionary } from "./dictionary.js";
4
4
  import { getString, isString } from "./string.js";
5
+ /**
6
+ * Correctly-typed `URI` constructor (the builtin `URL` class typed as `ImmutableURIConstructor`).
7
+ *
8
+ * @see https://dhoulb.github.io/shelving/util/uri/ImmutableURI
9
+ */
5
10
  export const ImmutableURI = URL;
6
- /** Is an unknown value a URI object? */
11
+ /**
12
+ * Is an unknown value a URI object?
13
+ *
14
+ * @param value The value to test.
15
+ * @returns `true` if `value` is an `ImmutableURI`, narrowing its type.
16
+ * @example isURI(new URL("http://x.com")) // true
17
+ * @see https://dhoulb.github.io/shelving/util/uri/isURI
18
+ */
7
19
  export function isURI(value) {
8
20
  return value instanceof ImmutableURI;
9
21
  }
10
- /** Assert that an unknown value is a URI object. */
22
+ /**
23
+ * Assert that an unknown value is a URI object.
24
+ *
25
+ * @param value The value to assert.
26
+ * @param caller Function to attribute a thrown error to (defaults to `assertURI` itself).
27
+ * @throws {RequiredError} If `value` is not a URI object.
28
+ * @see https://dhoulb.github.io/shelving/util/uri/assertURI
29
+ */
11
30
  export function assertURI(value, caller = assertURI) {
12
31
  if (!isURI(value))
13
32
  throw new RequiredError("Invalid URI", { received: value, caller });
@@ -16,6 +35,11 @@ export function assertURI(value, caller = assertURI) {
16
35
  * Convert a possible URI to a URI, or return `undefined` if conversion fails.
17
36
  * - Only inputs that already encode a complete URI succeed — relative inputs return `undefined`. No implicit fallback to the document or window URL.
18
37
  * - To resolve a relative ref against a base, use `getBasedURI()` from `url.ts`.
38
+ *
39
+ * @param possible Possible URI value to convert (a nullish value returns `undefined`).
40
+ * @returns Converted `ImmutableURI`, or `undefined` if conversion fails.
41
+ * @example getURI("http://shax.com") // URL { … }
42
+ * @see https://dhoulb.github.io/shelving/util/uri/getURI
19
43
  */
20
44
  export function getURI(possible) {
21
45
  if (!possible)
@@ -29,7 +53,16 @@ export function getURI(possible) {
29
53
  //
30
54
  }
31
55
  }
32
- /** Convert a possible URI to a URI, or throw `RequiredError` if conversion fails. */
56
+ /**
57
+ * Convert a possible URI to a URI, or throw `RequiredError` if conversion fails.
58
+ *
59
+ * @param possible Possible URI value to convert.
60
+ * @param caller Function to attribute a thrown error to (defaults to `requireURI` itself).
61
+ * @returns Converted `ImmutableURI`.
62
+ * @throws {RequiredError} If `possible` cannot be converted to a valid URI.
63
+ * @example requireURI("http://shax.com") // URL { … }
64
+ * @see https://dhoulb.github.io/shelving/util/uri/requireURI
65
+ */
33
66
  export function requireURI(possible, caller = requireURI) {
34
67
  const url = getURI(possible);
35
68
  assertURI(url, caller);
@@ -69,6 +102,14 @@ function* getURIEntries(params, caller = getURIParams) {
69
102
  /**
70
103
  * Get a set of params for a URI as a dictionary.
71
104
  * - Any params with `undefined` value will be ignored.
105
+ *
106
+ * @param params Possible URI params to convert.
107
+ * @param caller Function to attribute a thrown error to (defaults to `getURIParams` itself).
108
+ * @returns Dictionary of string params keyed by name.
109
+ * @throws {RequiredError} If `params` is a string or URL that cannot be converted to a valid URI.
110
+ * @throws {ValueError} If any param value cannot be converted to a string.
111
+ * @example getURIParams("http://x.com?a=1&b=2") // { a: "1", b: "2" }
112
+ * @see https://dhoulb.github.io/shelving/util/uri/getURIParams
72
113
  */
73
114
  export function getURIParams(params, caller = getURIParams) {
74
115
  const output = {};
package/util/url.d.ts CHANGED
@@ -6,6 +6,8 @@ import type { ImmutableURI } from "./uri.js";
6
6
  * A URL string has a protocol and a `//`.
7
7
  * - The `//` at the start of a URL indicates that it has a hierarchical path component, so this makes it a URL.
8
8
  * - URLs have a concept of "absolute" or "relative" URLs, since they have a path.
9
+ *
10
+ * @see https://dhoulb.github.io/shelving/util/url/URLString
9
11
  */
10
12
  export type URLString = `${string}://${string}`;
11
13
  /**
@@ -14,6 +16,8 @@ export type URLString = `${string}://${string}`;
14
16
  * - Requires a URL string, URL object, or path as input, and optionally a base URL.
15
17
  * - If a path is provided as input, a base URL _must_ also be provided.
16
18
  * - The returned type is
19
+ *
20
+ * @see https://dhoulb.github.io/shelving/util/url/ImmutableURLConstructor
17
21
  */
18
22
  export interface ImmutableURLConstructor {
19
23
  new (input: URLString | ImmutableURL, base?: URLString | ImmutableURL): ImmutableURL;
@@ -35,6 +39,8 @@ export interface ImmutableURLConstructor {
35
39
  * - It's more "correct" terminology to use `URI` to refer to what the Javascript `URL` class represents.
36
40
  * - You can tell the difference because a URL will have a non-empty `host` property, whereas URIs will never have a `host` (it will be `""` empty string).
37
41
  * - Javascript URLs are mutable which can lead to subtle bugs.
42
+ *
43
+ * @see https://dhoulb.github.io/shelving/util/url/ImmutableURL
38
44
  */
39
45
  export interface ImmutableURL extends ImmutableURI {
40
46
  readonly href: URLString;
@@ -42,14 +48,42 @@ export interface ImmutableURL extends ImmutableURI {
42
48
  readonly pathname: AbsolutePath;
43
49
  }
44
50
  export declare const ImmutableURL: ImmutableURLConstructor;
45
- /** Values that can be converted to a URL instance. */
51
+ /**
52
+ * Values that can be converted to a URL instance.
53
+ *
54
+ * @see https://dhoulb.github.io/shelving/util/url/PossibleURL
55
+ */
46
56
  export type PossibleURL = string | URL;
47
57
  /**
48
58
  * Is an unknown value a URL object?
49
59
  * - Must be a `URL` instance and its origin must start with `scheme://`
60
+ *
61
+ * @param value Unknown value to test.
62
+ * @returns `true` if `value` is a true `scheme://host` URL object, otherwise `false`.
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * if (isURL(value)) value.pathname; // `value` is narrowed to `ImmutableURL`
67
+ * ```
68
+ *
69
+ * @see https://dhoulb.github.io/shelving/util/url/isURL
50
70
  */
51
71
  export declare function isURL(value: unknown): value is ImmutableURL;
52
- /** Assert that an unknown value is a URL object. */
72
+ /**
73
+ * Assert that an unknown value is a URL object.
74
+ *
75
+ * @param value Unknown value to test.
76
+ * @param caller Function to attribute a thrown error to — defaults to `assertURL`.
77
+ * @throws RequiredError If `value` is not a true `scheme://host` URL object.
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * assertURL(value);
82
+ * value.pathname; // `value` is narrowed to `ImmutableURL`
83
+ * ```
84
+ *
85
+ * @see https://dhoulb.github.io/shelving/util/url/assertURL
86
+ */
53
87
  export declare function assertURL(value: unknown, caller?: AnyCaller): asserts value is ImmutableURL;
54
88
  /**
55
89
  * Resolve a possible URI relative to a base, or return `undefined` if conversion fails.
@@ -59,14 +93,52 @@ export declare function assertURL(value: unknown, caller?: AnyCaller): asserts v
59
93
  * Note: the base is normalised with `getBaseURL()`, so it is always treated as if it ends in a slash.
60
94
  * - e.g. if `base` is `http://p.com/a/b/c` the path resolves relative to `c/` as if a trailing slash was present.
61
95
  * - This differs from the default behaviour of `new URL()`, but is the more natural expected result.
96
+ *
97
+ * @param input URI string, URL object, or path to resolve — falsy values return `undefined`.
98
+ * @param base Base URL to resolve a relative `input` against.
99
+ * @returns Resolved `ImmutableURI`, or `undefined` if conversion fails.
100
+ *
101
+ * @example
102
+ * ```ts
103
+ * getBasedURI("path/to/page", "http://example.com/base/"); // `http://example.com/base/path/to/page`
104
+ * ```
105
+ *
106
+ * @see https://dhoulb.github.io/shelving/util/url/getBasedURI
62
107
  */
63
108
  export declare function getBasedURI(input: Nullish<PossibleURL>, base?: PossibleURL): ImmutableURI | undefined;
64
109
  /**
65
110
  * Resolve a possible URL relative to a base URL, or return `undefined` if conversion fails.
66
111
  * - Like `getBasedURI()` but only succeeds for true `scheme://host` URLs — other URIs (e.g. `mailto:`) return `undefined`.
112
+ *
113
+ * @param target URL string, URL object, or path to resolve — falsy values return `undefined`.
114
+ * @param base Base URL to resolve a relative `target` against.
115
+ * @returns Resolved `ImmutableURL`, or `undefined` if conversion fails or the result is not a true URL.
116
+ *
117
+ * @example
118
+ * ```ts
119
+ * getURL("/page", "http://example.com/"); // `http://example.com/page`
120
+ * getURL("mailto:a@b.com"); // `undefined` — not a hierarchical URL
121
+ * ```
122
+ *
123
+ * @see https://dhoulb.github.io/shelving/util/url/getURL
67
124
  */
68
125
  export declare function getURL(target: Nullish<PossibleURL>, base?: PossibleURL): ImmutableURL | undefined;
69
- /** Convert a possible URL to a URL, or throw `RequiredError` if conversion fails. */
126
+ /**
127
+ * Convert a possible URL to a URL, or throw `RequiredError` if conversion fails.
128
+ *
129
+ * @param target URL string, URL object, or path to resolve.
130
+ * @param base Base URL to resolve a relative `target` against.
131
+ * @param caller Function to attribute a thrown error to — defaults to `requireURL`.
132
+ * @returns Resolved `ImmutableURL`.
133
+ * @throws RequiredError If `target` cannot be resolved to a true `scheme://host` URL.
134
+ *
135
+ * @example
136
+ * ```ts
137
+ * requireURL("/page", "http://example.com/"); // `http://example.com/page`
138
+ * ```
139
+ *
140
+ * @see https://dhoulb.github.io/shelving/util/url/requireURL
141
+ */
70
142
  export declare function requireURL(target: PossibleURL, base?: PossibleURL, caller?: AnyCaller): ImmutableURL;
71
143
  /**
72
144
  * Resolve and match a target URL/path against a base URL and return the remaining path.
@@ -76,8 +148,18 @@ export declare function requireURL(target: PossibleURL, base?: PossibleURL, call
76
148
  * - Relative targets are resolved against the normalized base URL.
77
149
  *
78
150
  * @param target URL to match against `base` — if this is a relative path it will be resolved against `base`
151
+ * @param base Base URL the `target` is matched against.
152
+ * @param caller Function to attribute a thrown error to — defaults to `matchURLPrefix`.
79
153
  *
80
154
  * @returns Absolute path starting with `/`, or `undefined` for origin mismatches or non-matching paths.
155
+ * @throws RequiredError If `target` or `base` cannot be resolved to a true URL.
156
+ *
157
+ * @example
158
+ * ```ts
159
+ * matchURLPrefix("http://x.com/a/b", "http://x.com/a/"); // `/b`
160
+ * ```
161
+ *
162
+ * @see https://dhoulb.github.io/shelving/util/url/matchURLPrefix
81
163
  */
82
164
  export declare function matchURLPrefix(target: PossibleURL | undefined, base: PossibleURL | undefined, caller?: AnyCaller): AbsolutePath | undefined;
83
165
  /**
@@ -87,6 +169,15 @@ export declare function matchURLPrefix(target: PossibleURL | undefined, base: Po
87
169
  *
88
170
  * @param target URL whose status to test — relative paths resolve against `base`.
89
171
  * @param base Base URL to test against.
172
+ * @param caller Function to attribute a thrown error to — defaults to `isURLActive`.
173
+ * @returns `true` if `target` resolves to exactly the same URL as `base`, otherwise `false`.
174
+ *
175
+ * @example
176
+ * ```ts
177
+ * isURLActive("http://x.com/a", "http://x.com/a"); // `true`
178
+ * ```
179
+ *
180
+ * @see https://dhoulb.github.io/shelving/util/url/isURLActive
90
181
  */
91
182
  export declare function isURLActive(target: PossibleURL | undefined, base: PossibleURL | undefined, caller?: AnyCaller): boolean;
92
183
  /**
@@ -97,15 +188,69 @@ export declare function isURLActive(target: PossibleURL | undefined, base: Possi
97
188
  *
98
189
  * @param target URL whose status to test — relative paths resolve against `base`.
99
190
  * @param base Base URL to test against.
191
+ * @param caller Function to attribute a thrown error to — defaults to `isURLProud`.
192
+ * @returns `true` if `target` is `base` or a descendant of `base`, otherwise `false`.
193
+ *
194
+ * @example
195
+ * ```ts
196
+ * isURLProud("http://x.com/a/b", "http://x.com/a"); // `true`
197
+ * ```
198
+ *
199
+ * @see https://dhoulb.github.io/shelving/util/url/isURLProud
100
200
  */
101
201
  export declare function isURLProud(target: PossibleURL | undefined, base: PossibleURL | undefined, caller?: AnyCaller): boolean;
102
- /** BaseURL is a URL with a guaranteed trailing slash on pathname. */
202
+ /**
203
+ * BaseURL is a URL with a guaranteed trailing slash on pathname.
204
+ *
205
+ * @see https://dhoulb.github.io/shelving/util/url/BaseURL
206
+ */
103
207
  export interface BaseURL extends ImmutableURL {
104
208
  readonly pathname: `/` | `/${string}/`;
105
209
  }
106
- /** Is an unknown value a valid Base URL. */
210
+ /**
211
+ * Is an unknown value a valid Base URL?
212
+ * - Must be a true URL whose `pathname` ends in a trailing slash.
213
+ *
214
+ * @param value Value to test.
215
+ * @returns `true` if `value` is a `BaseURL` (a URL with a trailing-slash pathname), otherwise `false`.
216
+ *
217
+ * @example
218
+ * ```ts
219
+ * isBaseURL(new URL("http://x.com/a/")); // `true`
220
+ * ```
221
+ *
222
+ * @see https://dhoulb.github.io/shelving/util/url/isBaseURL
223
+ */
107
224
  export declare function isBaseURL(value: PossibleURL): value is BaseURL;
108
- /** Get a Base URL. */
225
+ /**
226
+ * Get a Base URL — a true URL whose `pathname` is normalised to end in a trailing slash.
227
+ * - Falsy or non-URL input returns `undefined`.
228
+ * - A URL without a trailing slash is cloned and given one (the input is never mutated).
229
+ *
230
+ * @param input URL string, URL object, or path to normalise.
231
+ * @returns `BaseURL` with a trailing-slash pathname, or `undefined` if `input` is not a true URL.
232
+ *
233
+ * @example
234
+ * ```ts
235
+ * getBaseURL("http://x.com/a"); // `http://x.com/a/`
236
+ * ```
237
+ *
238
+ * @see https://dhoulb.github.io/shelving/util/url/getBaseURL
239
+ */
109
240
  export declare function getBaseURL(input: Nullish<PossibleURL>): BaseURL | undefined;
110
- /** Require a Base URL. */
241
+ /**
242
+ * Require a Base URL — a true URL whose `pathname` is normalised to end in a trailing slash.
243
+ *
244
+ * @param value URL string, URL object, or path to normalise.
245
+ * @param caller Function to attribute a thrown error to.
246
+ * @returns `BaseURL` with a trailing-slash pathname.
247
+ * @throws RequiredError If `value` cannot be resolved to a true URL.
248
+ *
249
+ * @example
250
+ * ```ts
251
+ * requireBaseURL("http://x.com/a", requireBaseURL); // `http://x.com/a/`
252
+ * ```
253
+ *
254
+ * @see https://dhoulb.github.io/shelving/util/url/requireBaseURL
255
+ */
111
256
  export declare function requireBaseURL(value: PossibleURL, caller: AnyCaller): BaseURL;
package/util/url.js CHANGED
@@ -3,6 +3,16 @@ export const ImmutableURL = URL;
3
3
  /**
4
4
  * Is an unknown value a URL object?
5
5
  * - Must be a `URL` instance and its origin must start with `scheme://`
6
+ *
7
+ * @param value Unknown value to test.
8
+ * @returns `true` if `value` is a true `scheme://host` URL object, otherwise `false`.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * if (isURL(value)) value.pathname; // `value` is narrowed to `ImmutableURL`
13
+ * ```
14
+ *
15
+ * @see https://dhoulb.github.io/shelving/util/url/isURL
6
16
  */
7
17
  export function isURL(value) {
8
18
  return value instanceof URL && _isURL(value);
@@ -10,7 +20,21 @@ export function isURL(value) {
10
20
  function _isURL(uri) {
11
21
  return uri.href.startsWith(`${uri.protocol}//`);
12
22
  }
13
- /** Assert that an unknown value is a URL object. */
23
+ /**
24
+ * Assert that an unknown value is a URL object.
25
+ *
26
+ * @param value Unknown value to test.
27
+ * @param caller Function to attribute a thrown error to — defaults to `assertURL`.
28
+ * @throws RequiredError If `value` is not a true `scheme://host` URL object.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * assertURL(value);
33
+ * value.pathname; // `value` is narrowed to `ImmutableURL`
34
+ * ```
35
+ *
36
+ * @see https://dhoulb.github.io/shelving/util/url/assertURL
37
+ */
14
38
  export function assertURL(value, caller = assertURL) {
15
39
  if (!isURL(value))
16
40
  throw new RequiredError("Invalid URL", { received: value, caller });
@@ -23,6 +47,17 @@ export function assertURL(value, caller = assertURL) {
23
47
  * Note: the base is normalised with `getBaseURL()`, so it is always treated as if it ends in a slash.
24
48
  * - e.g. if `base` is `http://p.com/a/b/c` the path resolves relative to `c/` as if a trailing slash was present.
25
49
  * - This differs from the default behaviour of `new URL()`, but is the more natural expected result.
50
+ *
51
+ * @param input URI string, URL object, or path to resolve — falsy values return `undefined`.
52
+ * @param base Base URL to resolve a relative `input` against.
53
+ * @returns Resolved `ImmutableURI`, or `undefined` if conversion fails.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * getBasedURI("path/to/page", "http://example.com/base/"); // `http://example.com/base/path/to/page`
58
+ * ```
59
+ *
60
+ * @see https://dhoulb.github.io/shelving/util/url/getBasedURI
26
61
  */
27
62
  export function getBasedURI(input, base) {
28
63
  if (!input)
@@ -39,13 +74,40 @@ export function getBasedURI(input, base) {
39
74
  /**
40
75
  * Resolve a possible URL relative to a base URL, or return `undefined` if conversion fails.
41
76
  * - Like `getBasedURI()` but only succeeds for true `scheme://host` URLs — other URIs (e.g. `mailto:`) return `undefined`.
77
+ *
78
+ * @param target URL string, URL object, or path to resolve — falsy values return `undefined`.
79
+ * @param base Base URL to resolve a relative `target` against.
80
+ * @returns Resolved `ImmutableURL`, or `undefined` if conversion fails or the result is not a true URL.
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * getURL("/page", "http://example.com/"); // `http://example.com/page`
85
+ * getURL("mailto:a@b.com"); // `undefined` — not a hierarchical URL
86
+ * ```
87
+ *
88
+ * @see https://dhoulb.github.io/shelving/util/url/getURL
42
89
  */
43
90
  export function getURL(target, base) {
44
91
  const uri = getBasedURI(target, base);
45
92
  if (uri && _isURL(uri))
46
93
  return uri;
47
94
  }
48
- /** Convert a possible URL to a URL, or throw `RequiredError` if conversion fails. */
95
+ /**
96
+ * Convert a possible URL to a URL, or throw `RequiredError` if conversion fails.
97
+ *
98
+ * @param target URL string, URL object, or path to resolve.
99
+ * @param base Base URL to resolve a relative `target` against.
100
+ * @param caller Function to attribute a thrown error to — defaults to `requireURL`.
101
+ * @returns Resolved `ImmutableURL`.
102
+ * @throws RequiredError If `target` cannot be resolved to a true `scheme://host` URL.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * requireURL("/page", "http://example.com/"); // `http://example.com/page`
107
+ * ```
108
+ *
109
+ * @see https://dhoulb.github.io/shelving/util/url/requireURL
110
+ */
49
111
  export function requireURL(target, base, caller = requireURL) {
50
112
  const url = getURL(target, base);
51
113
  assertURL(url, caller);
@@ -59,8 +121,18 @@ export function requireURL(target, base, caller = requireURL) {
59
121
  * - Relative targets are resolved against the normalized base URL.
60
122
  *
61
123
  * @param target URL to match against `base` — if this is a relative path it will be resolved against `base`
124
+ * @param base Base URL the `target` is matched against.
125
+ * @param caller Function to attribute a thrown error to — defaults to `matchURLPrefix`.
62
126
  *
63
127
  * @returns Absolute path starting with `/`, or `undefined` for origin mismatches or non-matching paths.
128
+ * @throws RequiredError If `target` or `base` cannot be resolved to a true URL.
129
+ *
130
+ * @example
131
+ * ```ts
132
+ * matchURLPrefix("http://x.com/a/b", "http://x.com/a/"); // `/b`
133
+ * ```
134
+ *
135
+ * @see https://dhoulb.github.io/shelving/util/url/matchURLPrefix
64
136
  */
65
137
  export function matchURLPrefix(target, base, caller = matchURLPrefix) {
66
138
  if (!target || !base)
@@ -87,6 +159,15 @@ export function matchURLPrefix(target, base, caller = matchURLPrefix) {
87
159
  *
88
160
  * @param target URL whose status to test — relative paths resolve against `base`.
89
161
  * @param base Base URL to test against.
162
+ * @param caller Function to attribute a thrown error to — defaults to `isURLActive`.
163
+ * @returns `true` if `target` resolves to exactly the same URL as `base`, otherwise `false`.
164
+ *
165
+ * @example
166
+ * ```ts
167
+ * isURLActive("http://x.com/a", "http://x.com/a"); // `true`
168
+ * ```
169
+ *
170
+ * @see https://dhoulb.github.io/shelving/util/url/isURLActive
90
171
  */
91
172
  export function isURLActive(target, base, caller = isURLActive) {
92
173
  return !!target && !!base && matchURLPrefix(target, base, caller) === "/";
@@ -99,18 +180,54 @@ export function isURLActive(target, base, caller = isURLActive) {
99
180
  *
100
181
  * @param target URL whose status to test — relative paths resolve against `base`.
101
182
  * @param base Base URL to test against.
183
+ * @param caller Function to attribute a thrown error to — defaults to `isURLProud`.
184
+ * @returns `true` if `target` is `base` or a descendant of `base`, otherwise `false`.
185
+ *
186
+ * @example
187
+ * ```ts
188
+ * isURLProud("http://x.com/a/b", "http://x.com/a"); // `true`
189
+ * ```
190
+ *
191
+ * @see https://dhoulb.github.io/shelving/util/url/isURLProud
102
192
  */
103
193
  export function isURLProud(target, base, caller = isURLProud) {
104
194
  return !!target && !!base && matchURLPrefix(target, base, caller) !== undefined;
105
195
  }
106
- /** Is an unknown value a valid Base URL. */
196
+ /**
197
+ * Is an unknown value a valid Base URL?
198
+ * - Must be a true URL whose `pathname` ends in a trailing slash.
199
+ *
200
+ * @param value Value to test.
201
+ * @returns `true` if `value` is a `BaseURL` (a URL with a trailing-slash pathname), otherwise `false`.
202
+ *
203
+ * @example
204
+ * ```ts
205
+ * isBaseURL(new URL("http://x.com/a/")); // `true`
206
+ * ```
207
+ *
208
+ * @see https://dhoulb.github.io/shelving/util/url/isBaseURL
209
+ */
107
210
  export function isBaseURL(value) {
108
211
  return isURL(value) && _isBaseURL(value);
109
212
  }
110
213
  function _isBaseURL(uri) {
111
214
  return uri.pathname.endsWith("/");
112
215
  }
113
- /** Get a Base URL. */
216
+ /**
217
+ * Get a Base URL — a true URL whose `pathname` is normalised to end in a trailing slash.
218
+ * - Falsy or non-URL input returns `undefined`.
219
+ * - A URL without a trailing slash is cloned and given one (the input is never mutated).
220
+ *
221
+ * @param input URL string, URL object, or path to normalise.
222
+ * @returns `BaseURL` with a trailing-slash pathname, or `undefined` if `input` is not a true URL.
223
+ *
224
+ * @example
225
+ * ```ts
226
+ * getBaseURL("http://x.com/a"); // `http://x.com/a/`
227
+ * ```
228
+ *
229
+ * @see https://dhoulb.github.io/shelving/util/url/getBaseURL
230
+ */
114
231
  export function getBaseURL(input) {
115
232
  if (!input)
116
233
  return;
@@ -124,7 +241,21 @@ export function getBaseURL(input) {
124
241
  base.pathname = `${uri.pathname}/`; // Add a trailing slash.
125
242
  return base;
126
243
  }
127
- /** Require a Base URL. */
244
+ /**
245
+ * Require a Base URL — a true URL whose `pathname` is normalised to end in a trailing slash.
246
+ *
247
+ * @param value URL string, URL object, or path to normalise.
248
+ * @param caller Function to attribute a thrown error to.
249
+ * @returns `BaseURL` with a trailing-slash pathname.
250
+ * @throws RequiredError If `value` cannot be resolved to a true URL.
251
+ *
252
+ * @example
253
+ * ```ts
254
+ * requireBaseURL("http://x.com/a", requireBaseURL); // `http://x.com/a/`
255
+ * ```
256
+ *
257
+ * @see https://dhoulb.github.io/shelving/util/url/requireBaseURL
258
+ */
128
259
  export function requireBaseURL(value, caller) {
129
260
  const url = getBaseURL(value);
130
261
  if (!url)
package/util/uuid.d.ts CHANGED
@@ -1,6 +1,31 @@
1
- /** Return a random UUID (v4) */
1
+ /**
2
+ * Return a random UUID (v4) as a 32-character lowercase hex string with dashes stripped.
3
+ *
4
+ * @returns A random 32-character lowercase hex UUID string.
5
+ * @example randomUUID() // "1b4e28ba2fa14931918f4c9bf9f12b3a"
6
+ * @see https://dhoulb.github.io/shelving/util/uuid/randomUUID
7
+ */
2
8
  export declare function randomUUID(): string;
3
- /** Convert/validate a unknown value as as UUID. */
9
+ /**
10
+ * Convert/validate a string value as a UUID, or return `undefined` if it isn't valid.
11
+ *
12
+ * - Strips any non-hex characters (including existing dashes) and normalises to lowercase.
13
+ * - Requires exactly 32 hex characters after cleaning, otherwise returns `undefined`.
14
+ * - The returned string is re-grouped into the canonical `8-4-4-4-12` segment layout.
15
+ *
16
+ * @param value The value to convert/validate as a UUID.
17
+ * @returns The normalised UUID string, or `undefined` if the value is not a valid UUID.
18
+ * @example getUUID("1b4e28ba-2fa1-4931-918f-4c9bf9f12b3a") // "1b4e28ba2fa14931918f4c9bf9f12b3a"
19
+ * @see https://dhoulb.github.io/shelving/util/uuid/getUUID
20
+ */
4
21
  export declare function getUUID(value: string): string | undefined;
5
- /** Require a valid UUID. */
22
+ /**
23
+ * Convert/validate a string value as a UUID, or throw `RequiredError` if it isn't valid.
24
+ *
25
+ * @param value The value to convert/validate as a UUID.
26
+ * @returns The normalised UUID string.
27
+ * @throws `RequiredError` if the value is not a valid UUID.
28
+ * @example requireUUID("1b4e28ba-2fa1-4931-918f-4c9bf9f12b3a") // "1b4e28ba2fa14931918f4c9bf9f12b3a"
29
+ * @see https://dhoulb.github.io/shelving/util/uuid/requireUUID
30
+ */
6
31
  export declare function requireUUID(value: string): string;
package/util/uuid.js CHANGED
@@ -1,10 +1,27 @@
1
1
  import { RequiredError } from "../error/RequiredError.js";
2
2
  const R_NOT_LOWERCHAR = /[^0-9a-f]/g;
3
- /** Return a random UUID (v4) */
3
+ /**
4
+ * Return a random UUID (v4) as a 32-character lowercase hex string with dashes stripped.
5
+ *
6
+ * @returns A random 32-character lowercase hex UUID string.
7
+ * @example randomUUID() // "1b4e28ba2fa14931918f4c9bf9f12b3a"
8
+ * @see https://dhoulb.github.io/shelving/util/uuid/randomUUID
9
+ */
4
10
  export function randomUUID() {
5
11
  return crypto.randomUUID().replace(R_NOT_LOWERCHAR, "");
6
12
  }
7
- /** Convert/validate a unknown value as as UUID. */
13
+ /**
14
+ * Convert/validate a string value as a UUID, or return `undefined` if it isn't valid.
15
+ *
16
+ * - Strips any non-hex characters (including existing dashes) and normalises to lowercase.
17
+ * - Requires exactly 32 hex characters after cleaning, otherwise returns `undefined`.
18
+ * - The returned string is re-grouped into the canonical `8-4-4-4-12` segment layout.
19
+ *
20
+ * @param value The value to convert/validate as a UUID.
21
+ * @returns The normalised UUID string, or `undefined` if the value is not a valid UUID.
22
+ * @example getUUID("1b4e28ba-2fa1-4931-918f-4c9bf9f12b3a") // "1b4e28ba2fa14931918f4c9bf9f12b3a"
23
+ * @see https://dhoulb.github.io/shelving/util/uuid/getUUID
24
+ */
8
25
  export function getUUID(value) {
9
26
  if (typeof value !== "string" || !value)
10
27
  return;
@@ -14,7 +31,15 @@ export function getUUID(value) {
14
31
  return;
15
32
  return `${cleaned.slice(0, 8)}${cleaned.slice(8, 12)}${cleaned.slice(12, 16)}${cleaned.slice(16, 20)}${cleaned.slice(20)}`;
16
33
  }
17
- /** Require a valid UUID. */
34
+ /**
35
+ * Convert/validate a string value as a UUID, or throw `RequiredError` if it isn't valid.
36
+ *
37
+ * @param value The value to convert/validate as a UUID.
38
+ * @returns The normalised UUID string.
39
+ * @throws `RequiredError` if the value is not a valid UUID.
40
+ * @example requireUUID("1b4e28ba-2fa1-4931-918f-4c9bf9f12b3a") // "1b4e28ba2fa14931918f4c9bf9f12b3a"
41
+ * @see https://dhoulb.github.io/shelving/util/uuid/requireUUID
42
+ */
18
43
  export function requireUUID(value) {
19
44
  const uuid = getUUID(value);
20
45
  if (!uuid)