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
@@ -1,22 +1,65 @@
1
1
  import { ABORT } from "./constants.js";
2
2
  import type { ErrorCallback, ValueCallback } from "./function.js";
3
+ /**
4
+ * Result of an iterator that was aborted via an external signal rather than concluding itself.
5
+ * - `done` is the `ABORT` symbol, distinguishing it from an iterator's own `done: true` result.
6
+ *
7
+ * @see https://dhoulb.github.io/shelving/util/sequence/IteratorAbortResult
8
+ */
3
9
  export interface IteratorAbortResult<R> {
10
+ /** Always the `ABORT` symbol, marking this result as an external abort rather than the iterator finishing. */
4
11
  done: typeof ABORT;
12
+ /** The value the abort signal resolved with. */
5
13
  value: R;
6
14
  }
7
- /** An extension of */
15
+ /**
16
+ * Result of stepping an iterator that may either yield, finish itself, or be aborted externally.
17
+ * - Union of a normal `IteratorResult<T, R>` and an `IteratorAbortResult<R>`.
18
+ *
19
+ * @see https://dhoulb.github.io/shelving/util/sequence/IteratorAbortableResult
20
+ */
8
21
  export type IteratorAbortableResult<T, R> = IteratorResult<T, R> | IteratorAbortResult<R>;
9
22
  /**
10
23
  * Is a value an async iterable object?
11
- * - Any object with a `Symbol.iterator` property is iterable.
12
- * - Note: Array and Map instances etc will return true because they implement `Symbol.iterator`
24
+ * - Any object with a `Symbol.asyncIterator` property is an async iterable.
25
+ *
26
+ * @param value The value to test.
27
+ * @returns `true` if `value` is an `AsyncIterable`, narrowing its type.
28
+ * @example isSequence((async function* () {})()) // true
29
+ * @see https://dhoulb.github.io/shelving/util/sequence/isSequence
13
30
  */
14
31
  export declare function isSequence(value: unknown): value is AsyncIterable<unknown>;
15
- /** Infinite sequence that yields until a `SIGNAL` is received. */
32
+ /**
33
+ * Infinite sequence that relays a source sequence until one of the abort signals resolves.
34
+ * - Races each step of `source` against the supplied signal promises; when a signal wins, tells the source iterator to clean up and returns the signal's value.
35
+ *
36
+ * @param source The source sequence to relay values from.
37
+ * @param signals One or more promises that, when resolved, abort the relay and end the sequence.
38
+ * @returns The value the winning abort signal resolved with, or the source's own return value if it finishes first.
39
+ * @throws {UnexpectedError} If the source iterator's `return()` does not return a `done` result.
40
+ * @example for await (const item of repeatUntil(source, stopSignal)) doSomething(item);
41
+ * @see https://dhoulb.github.io/shelving/util/sequence/repeatUntil
42
+ */
16
43
  export declare function repeatUntil<T = void, R = void, N = void>(source: AsyncIterable<T, R | undefined, N | undefined>, ...signals: [PromiseLike<R>, ...PromiseLike<R>[]]): AsyncGenerator<T, R | undefined, N | undefined>;
17
- /** Infinite sequence that yields every X milliseconds (yields a count of the number of iterations). */
44
+ /**
45
+ * Infinite sequence that yields every X milliseconds (yields a count of the number of iterations).
46
+ *
47
+ * @param ms The number of milliseconds to wait between each yield.
48
+ * @returns An infinite async generator yielding `1`, `2`, `3`… one per interval.
49
+ * @example for await (const count of repeatDelay(1000)) console.log(count); // 1, 2, 3… one per second
50
+ * @see https://dhoulb.github.io/shelving/util/sequence/repeatDelay
51
+ */
18
52
  export declare function repeatDelay(ms: number): AsyncGenerator<number, void, void>;
19
- /** Dispatch items in a sequence to a (possibly async) callback. */
53
+ /**
54
+ * Dispatch items in a sequence to a (possibly async) callback.
55
+ * - Calls `callback` with each item as it arrives, then re-yields the item unchanged.
56
+ *
57
+ * @param sequence The source sequence to relay.
58
+ * @param callback Callback invoked with each yielded item.
59
+ * @returns An async generator that yields the same items as `sequence`.
60
+ * @example for await (const item of callSequence(source, console.log)) use(item);
61
+ * @see https://dhoulb.github.io/shelving/util/sequence/callSequence
62
+ */
20
63
  export declare function callSequence<T>(sequence: AsyncIterable<T, void, void>, callback: ValueCallback<T>): AsyncGenerator<T, void, void>;
21
64
  /**
22
65
  * Iterate over a sequence until the returned `stop()` callback is called.
@@ -26,8 +69,23 @@ export declare function callSequence<T>(sequence: AsyncIterable<T, void, void>,
26
69
  * - On the following iterator after throwing an error, a "generator" will return `done: true` (because they regard errors as concluding the iteration).
27
70
  * - But the iterator protocol does not require this, so this continues to iterate until it's explicitly ended via the returned `stop()` callback.
28
71
  *
29
- * @return Callback function that can end the sequence run.
72
+ * @param sequence The source sequence to iterate over.
73
+ * @param onNext Called with each yielded value; its return value is fed back into the iterator as the next `next()` argument.
74
+ * @param onError Called with any error thrown during iteration (iteration continues regardless).
75
+ * @param onReturn Called with the final return value when the sequence ends or is stopped.
76
+ * @returns Callback function that can end the sequence run, optionally with a return value.
77
+ * @throws {UnexpectedError} If the source iterator's `return()` does not return a `done` result.
78
+ * @example const stop = runSequence(source, onNext, onError, onReturn); stop(); // ends the run
79
+ * @see https://dhoulb.github.io/shelving/util/sequence/runSequence
30
80
  */
31
81
  export declare function runSequence<T, R, N>(sequence: AsyncIterable<T, R | undefined, N | undefined>, onNext?: (value: T) => N | undefined, onError?: ErrorCallback, onReturn?: (value: R | undefined) => void): (value?: R | undefined) => void;
32
- /** Merge several sequences (calls the sequences in series). */
82
+ /**
83
+ * Merge several sequences (calls the sequences in series).
84
+ * - Yields all items from the first sequence, then all items from the second, and so on.
85
+ *
86
+ * @param sequences The sequences to merge, drained one after another in order.
87
+ * @returns An async iterable that yields every item from each sequence in turn.
88
+ * @example for await (const item of mergeSequences(a, b)) use(item); // all of `a`, then all of `b`
89
+ * @see https://dhoulb.github.io/shelving/util/sequence/mergeSequences
90
+ */
33
91
  export declare function mergeSequences<T>(...sequences: AsyncIterable<T>[]): AsyncIterable<T>;
package/util/sequence.js CHANGED
@@ -21,13 +21,27 @@ async function _iteratorReturn(iterator, initial, caller) {
21
21
  }
22
22
  /**
23
23
  * Is a value an async iterable object?
24
- * - Any object with a `Symbol.iterator` property is iterable.
25
- * - Note: Array and Map instances etc will return true because they implement `Symbol.iterator`
24
+ * - Any object with a `Symbol.asyncIterator` property is an async iterable.
25
+ *
26
+ * @param value The value to test.
27
+ * @returns `true` if `value` is an `AsyncIterable`, narrowing its type.
28
+ * @example isSequence((async function* () {})()) // true
29
+ * @see https://dhoulb.github.io/shelving/util/sequence/isSequence
26
30
  */
27
31
  export function isSequence(value) {
28
32
  return typeof value === "object" && !!value && Symbol.asyncIterator in value;
29
33
  }
30
- /** Infinite sequence that yields until a `SIGNAL` is received. */
34
+ /**
35
+ * Infinite sequence that relays a source sequence until one of the abort signals resolves.
36
+ * - Races each step of `source` against the supplied signal promises; when a signal wins, tells the source iterator to clean up and returns the signal's value.
37
+ *
38
+ * @param source The source sequence to relay values from.
39
+ * @param signals One or more promises that, when resolved, abort the relay and end the sequence.
40
+ * @returns The value the winning abort signal resolved with, or the source's own return value if it finishes first.
41
+ * @throws {UnexpectedError} If the source iterator's `return()` does not return a `done` result.
42
+ * @example for await (const item of repeatUntil(source, stopSignal)) doSomething(item);
43
+ * @see https://dhoulb.github.io/shelving/util/sequence/repeatUntil
44
+ */
31
45
  export async function* repeatUntil(source, ...signals) {
32
46
  const iterator = source[Symbol.asyncIterator]();
33
47
  const aborts = signals.map(_awaitAbortResult);
@@ -56,7 +70,14 @@ export async function* repeatUntil(source, ...signals) {
56
70
  }
57
71
  }
58
72
  }
59
- /** Infinite sequence that yields every X milliseconds (yields a count of the number of iterations). */
73
+ /**
74
+ * Infinite sequence that yields every X milliseconds (yields a count of the number of iterations).
75
+ *
76
+ * @param ms The number of milliseconds to wait between each yield.
77
+ * @returns An infinite async generator yielding `1`, `2`, `3`… one per interval.
78
+ * @example for await (const count of repeatDelay(1000)) console.log(count); // 1, 2, 3… one per second
79
+ * @see https://dhoulb.github.io/shelving/util/sequence/repeatDelay
80
+ */
60
81
  export async function* repeatDelay(ms) {
61
82
  let count = 1;
62
83
  while (true) {
@@ -64,7 +85,16 @@ export async function* repeatDelay(ms) {
64
85
  yield count++;
65
86
  }
66
87
  }
67
- /** Dispatch items in a sequence to a (possibly async) callback. */
88
+ /**
89
+ * Dispatch items in a sequence to a (possibly async) callback.
90
+ * - Calls `callback` with each item as it arrives, then re-yields the item unchanged.
91
+ *
92
+ * @param sequence The source sequence to relay.
93
+ * @param callback Callback invoked with each yielded item.
94
+ * @returns An async generator that yields the same items as `sequence`.
95
+ * @example for await (const item of callSequence(source, console.log)) use(item);
96
+ * @see https://dhoulb.github.io/shelving/util/sequence/callSequence
97
+ */
68
98
  export async function* callSequence(sequence, callback) {
69
99
  for await (const item of sequence) {
70
100
  callback(item);
@@ -79,7 +109,14 @@ export async function* callSequence(sequence, callback) {
79
109
  * - On the following iterator after throwing an error, a "generator" will return `done: true` (because they regard errors as concluding the iteration).
80
110
  * - But the iterator protocol does not require this, so this continues to iterate until it's explicitly ended via the returned `stop()` callback.
81
111
  *
82
- * @return Callback function that can end the sequence run.
112
+ * @param sequence The source sequence to iterate over.
113
+ * @param onNext Called with each yielded value; its return value is fed back into the iterator as the next `next()` argument.
114
+ * @param onError Called with any error thrown during iteration (iteration continues regardless).
115
+ * @param onReturn Called with the final return value when the sequence ends or is stopped.
116
+ * @returns Callback function that can end the sequence run, optionally with a return value.
117
+ * @throws {UnexpectedError} If the source iterator's `return()` does not return a `done` result.
118
+ * @example const stop = runSequence(source, onNext, onError, onReturn); stop(); // ends the run
119
+ * @see https://dhoulb.github.io/shelving/util/sequence/runSequence
83
120
  */
84
121
  export function runSequence(sequence, onNext, onError, onReturn) {
85
122
  const { promise, resolve } = createDeferred();
@@ -109,7 +146,15 @@ async function _runSequenceIterator(iterator, stopped, onNext, onError, onReturn
109
146
  }
110
147
  }
111
148
  }
112
- /** Merge several sequences (calls the sequences in series). */
149
+ /**
150
+ * Merge several sequences (calls the sequences in series).
151
+ * - Yields all items from the first sequence, then all items from the second, and so on.
152
+ *
153
+ * @param sequences The sequences to merge, drained one after another in order.
154
+ * @returns An async iterable that yields every item from each sequence in turn.
155
+ * @example for await (const item of mergeSequences(a, b)) use(item); // all of `a`, then all of `b`
156
+ * @see https://dhoulb.github.io/shelving/util/sequence/mergeSequences
157
+ */
113
158
  export async function* mergeSequences(...sequences) {
114
159
  for await (const sequence of sequences)
115
160
  yield* sequence;
@@ -1,9 +1,15 @@
1
1
  /**
2
- * Custom JSON.stringify()
2
+ * Serialise any value to a stable, consistent string (a `JSON.stringify()` that never loses information).
3
3
  * - Not optimised for performance. Optimised for consistency!
4
4
  * - Allows returned values to be used for fingerprinting values of any type.
5
5
  * - Non-JSON-friendly values (like `null`, explicit `undefined`, symbols, functions) are converted to `{ $type: "symbol" }` style constructions.
6
6
  * - Objects with custom `toString()` properties assume that string is useful and return a value like `{ $type: "Date", value: "Wed Feb 24 2021 20:59:57 GMT+0000 (Greenwich Mean Time)" }`
7
7
  * - Object properties are sorted (by key) before output so they're always consistent.
8
+ *
9
+ * @param value The value to serialise (any type is accepted).
10
+ * @returns A consistent string representation of `value`, suitable for fingerprinting or equality comparison.
11
+ * @throws {ValueError} If `value` cannot be serialised.
12
+ * @example serialise({ b: 2, a: 1 }) // `{"a":1,"b":2}`
13
+ * @see https://dhoulb.github.io/shelving/util/serialise/serialise
8
14
  */
9
15
  export declare function serialise(value: unknown): string;
package/util/serialise.js CHANGED
@@ -3,12 +3,18 @@ import { isArray } from "./array.js";
3
3
  import { getPrototype, isObject } from "./object.js";
4
4
  const R_QUOTE = /"/g;
5
5
  /**
6
- * Custom JSON.stringify()
6
+ * Serialise any value to a stable, consistent string (a `JSON.stringify()` that never loses information).
7
7
  * - Not optimised for performance. Optimised for consistency!
8
8
  * - Allows returned values to be used for fingerprinting values of any type.
9
9
  * - Non-JSON-friendly values (like `null`, explicit `undefined`, symbols, functions) are converted to `{ $type: "symbol" }` style constructions.
10
10
  * - Objects with custom `toString()` properties assume that string is useful and return a value like `{ $type: "Date", value: "Wed Feb 24 2021 20:59:57 GMT+0000 (Greenwich Mean Time)" }`
11
11
  * - Object properties are sorted (by key) before output so they're always consistent.
12
+ *
13
+ * @param value The value to serialise (any type is accepted).
14
+ * @returns A consistent string representation of `value`, suitable for fingerprinting or equality comparison.
15
+ * @throws {ValueError} If `value` cannot be serialised.
16
+ * @example serialise({ b: 2, a: 1 }) // `{"a":1,"b":2}`
17
+ * @see https://dhoulb.github.io/shelving/util/serialise/serialise
12
18
  */
13
19
  export function serialise(value) {
14
20
  if (value === true)
package/util/set.d.ts CHANGED
@@ -1,27 +1,117 @@
1
1
  import type { AnyCaller } from "./function.js";
2
- /** `Set` that cannot be changed. */
2
+ /**
3
+ * `Set` that cannot be changed.
4
+ *
5
+ * @see https://dhoulb.github.io/shelving/util/set/ImmutableSet
6
+ */
3
7
  export type ImmutableSet<T = unknown> = ReadonlySet<T>;
4
- /** `Set` that can be changed. */
8
+ /**
9
+ * `Set` that can be changed.
10
+ *
11
+ * @see https://dhoulb.github.io/shelving/util/set/MutableSet
12
+ */
5
13
  export type MutableSet<T = unknown> = Set<T>;
6
- /** Things that can be converted to sets. */
14
+ /**
15
+ * Things that can be converted to sets.
16
+ *
17
+ * @see https://dhoulb.github.io/shelving/util/set/PossibleSet
18
+ */
7
19
  export type PossibleSet<T> = ImmutableSet<T> | Iterable<T>;
8
- /** Get the type of the _items_ in a set. */
20
+ /**
21
+ * Get the type of the _items_ in a set.
22
+ *
23
+ * @see https://dhoulb.github.io/shelving/util/set/SetItem
24
+ */
9
25
  export type SetItem<X> = X extends ReadonlySet<infer Y> ? Y : never;
10
- /** Is an unknown value a set? */
26
+ /**
27
+ * Is an unknown value a set?
28
+ *
29
+ * @param value The value to check.
30
+ * @returns `true` if `value` is a `Set` instance, otherwise `false`.
31
+ * @see https://dhoulb.github.io/shelving/util/set/isSet
32
+ */
11
33
  export declare function isSet(value: unknown): value is ImmutableSet;
12
- /** Assert that a value is a `Set` instance. */
34
+ /**
35
+ * Assert that a value is a `Set` instance.
36
+ *
37
+ * @param value The value to assert on.
38
+ * @param caller Function to attribute a thrown error to (defaults to `assertSet`).
39
+ * @throws {RequiredError} If `value` is not a `Set` instance.
40
+ * @example assertSet(new Set()); // Passes.
41
+ * @see https://dhoulb.github.io/shelving/util/set/assertSet
42
+ */
13
43
  export declare function assertSet(value: unknown, caller?: AnyCaller): asserts value is ImmutableSet;
14
- /** Convert a possible set to a `Set`. */
44
+ /**
45
+ * Convert a possible set to a `Set`.
46
+ * - Returns the input unchanged when it is already a `Set`; otherwise constructs a new `Set` from the iterable.
47
+ *
48
+ * @param value A `Set` or any iterable of items.
49
+ * @returns A `Set` containing the items of `value`.
50
+ * @example getSet(["a", "b"]) // Set { "a", "b" }
51
+ * @see https://dhoulb.github.io/shelving/util/set/getSet
52
+ */
15
53
  export declare function getSet<T>(value: PossibleSet<T>): ImmutableSet;
16
- /** Apply a limit to a set. */
54
+ /**
55
+ * Apply a limit to a set.
56
+ * - Returns the input unchanged when it already fits within `limit`.
57
+ *
58
+ * @param set The set to limit.
59
+ * @param limit The maximum number of items to keep.
60
+ * @returns A set containing at most `limit` items.
61
+ * @example limitSet(new Set([1, 2, 3]), 2) // Set { 1, 2 }
62
+ * @see https://dhoulb.github.io/shelving/util/set/limitSet
63
+ */
17
64
  export declare function limitSet<T>(set: ImmutableSet<T>, limit: number): ImmutableSet<T>;
18
- /** Is an unknown value an item in a set? */
65
+ /**
66
+ * Is an unknown value an item in a set?
67
+ *
68
+ * @param set The set to look in.
69
+ * @param item The value to check for membership.
70
+ * @returns `true` if `item` exists in `set`, otherwise `false`.
71
+ * @see https://dhoulb.github.io/shelving/util/set/isSetItem
72
+ */
19
73
  export declare function isSetItem<T>(set: ImmutableSet<T>, item: unknown): item is T;
20
- /** Assert that an unknown value is an item in a set. */
74
+ /**
75
+ * Assert that an unknown value is an item in a set.
76
+ *
77
+ * @param set The set to look in.
78
+ * @param item The value to assert membership of.
79
+ * @param caller Function to attribute a thrown error to (defaults to `assertSetItem`).
80
+ * @throws {RequiredError} If `item` does not exist in `set`.
81
+ * @example assertSetItem(new Set(["a"]), "a"); // Passes.
82
+ * @see https://dhoulb.github.io/shelving/util/set/assertSetItem
83
+ */
21
84
  export declare function assertSetItem<T>(set: ImmutableSet<T>, item: unknown, caller?: AnyCaller): asserts item is T;
22
- /** Add an item to a set (by reference) and return the set item. */
85
+ /**
86
+ * Add an item to a set (by reference) and return the set item.
87
+ * - Mutates `set` in place.
88
+ *
89
+ * @param set The mutable set to add to.
90
+ * @param item The item to add.
91
+ * @returns The added `item`.
92
+ * @example addSetItem(set, "a") // "a"
93
+ * @see https://dhoulb.github.io/shelving/util/set/addSetItem
94
+ */
23
95
  export declare function addSetItem<T>(set: MutableSet<T>, item: T): T;
24
- /** Add multiple items to a set (by reference). */
96
+ /**
97
+ * Add multiple items to a set (by reference).
98
+ * - Mutates `set` in place.
99
+ *
100
+ * @param set The mutable set to add to.
101
+ * @param items The items to add.
102
+ * @returns Nothing.
103
+ * @example addSetItems(set, "a", "b");
104
+ * @see https://dhoulb.github.io/shelving/util/set/addSetItems
105
+ */
25
106
  export declare function addSetItems<T>(set: MutableSet<T>, ...items: T[]): void;
26
- /** Remove multiple items from a set (by reference). */
107
+ /**
108
+ * Remove multiple items from a set (by reference).
109
+ * - Mutates `set` in place.
110
+ *
111
+ * @param set The mutable set to remove from.
112
+ * @param items The items to remove.
113
+ * @returns Nothing.
114
+ * @example deleteSetItems(set, "a", "b");
115
+ * @see https://dhoulb.github.io/shelving/util/set/deleteSetItems
116
+ */
27
117
  export declare function deleteSetItems<T>(set: MutableSet<T>, ...items: T[]): void;
package/util/set.js CHANGED
@@ -1,42 +1,116 @@
1
1
  import { RequiredError } from "../error/RequiredError.js";
2
2
  import { limitItems } from "./iterate.js";
3
- /** Is an unknown value a set? */
3
+ /**
4
+ * Is an unknown value a set?
5
+ *
6
+ * @param value The value to check.
7
+ * @returns `true` if `value` is a `Set` instance, otherwise `false`.
8
+ * @see https://dhoulb.github.io/shelving/util/set/isSet
9
+ */
4
10
  export function isSet(value) {
5
11
  return value instanceof Set;
6
12
  }
7
- /** Assert that a value is a `Set` instance. */
13
+ /**
14
+ * Assert that a value is a `Set` instance.
15
+ *
16
+ * @param value The value to assert on.
17
+ * @param caller Function to attribute a thrown error to (defaults to `assertSet`).
18
+ * @throws {RequiredError} If `value` is not a `Set` instance.
19
+ * @example assertSet(new Set()); // Passes.
20
+ * @see https://dhoulb.github.io/shelving/util/set/assertSet
21
+ */
8
22
  export function assertSet(value, caller = assertSet) {
9
23
  if (!isSet(value))
10
24
  throw new RequiredError("Must be set", { received: value, caller });
11
25
  }
12
- /** Convert a possible set to a `Set`. */
26
+ /**
27
+ * Convert a possible set to a `Set`.
28
+ * - Returns the input unchanged when it is already a `Set`; otherwise constructs a new `Set` from the iterable.
29
+ *
30
+ * @param value A `Set` or any iterable of items.
31
+ * @returns A `Set` containing the items of `value`.
32
+ * @example getSet(["a", "b"]) // Set { "a", "b" }
33
+ * @see https://dhoulb.github.io/shelving/util/set/getSet
34
+ */
13
35
  export function getSet(value) {
14
36
  return isSet(value) ? value : new Set(value);
15
37
  }
16
- /** Apply a limit to a set. */
38
+ /**
39
+ * Apply a limit to a set.
40
+ * - Returns the input unchanged when it already fits within `limit`.
41
+ *
42
+ * @param set The set to limit.
43
+ * @param limit The maximum number of items to keep.
44
+ * @returns A set containing at most `limit` items.
45
+ * @example limitSet(new Set([1, 2, 3]), 2) // Set { 1, 2 }
46
+ * @see https://dhoulb.github.io/shelving/util/set/limitSet
47
+ */
17
48
  export function limitSet(set, limit) {
18
49
  return limit > set.size ? set : new Set(limitItems(set, limit));
19
50
  }
20
- /** Is an unknown value an item in a set? */
51
+ /**
52
+ * Is an unknown value an item in a set?
53
+ *
54
+ * @param set The set to look in.
55
+ * @param item The value to check for membership.
56
+ * @returns `true` if `item` exists in `set`, otherwise `false`.
57
+ * @see https://dhoulb.github.io/shelving/util/set/isSetItem
58
+ */
21
59
  export function isSetItem(set, item) {
22
60
  return set.has(item);
23
61
  }
24
- /** Assert that an unknown value is an item in a set. */
62
+ /**
63
+ * Assert that an unknown value is an item in a set.
64
+ *
65
+ * @param set The set to look in.
66
+ * @param item The value to assert membership of.
67
+ * @param caller Function to attribute a thrown error to (defaults to `assertSetItem`).
68
+ * @throws {RequiredError} If `item` does not exist in `set`.
69
+ * @example assertSetItem(new Set(["a"]), "a"); // Passes.
70
+ * @see https://dhoulb.github.io/shelving/util/set/assertSetItem
71
+ */
25
72
  export function assertSetItem(set, item, caller = assertSetItem) {
26
73
  if (!isSetItem(set, item))
27
74
  throw new RequiredError("Item must exist in set", { item, set, caller });
28
75
  }
29
- /** Add an item to a set (by reference) and return the set item. */
76
+ /**
77
+ * Add an item to a set (by reference) and return the set item.
78
+ * - Mutates `set` in place.
79
+ *
80
+ * @param set The mutable set to add to.
81
+ * @param item The item to add.
82
+ * @returns The added `item`.
83
+ * @example addSetItem(set, "a") // "a"
84
+ * @see https://dhoulb.github.io/shelving/util/set/addSetItem
85
+ */
30
86
  export function addSetItem(set, item) {
31
87
  set.add(item);
32
88
  return item;
33
89
  }
34
- /** Add multiple items to a set (by reference). */
90
+ /**
91
+ * Add multiple items to a set (by reference).
92
+ * - Mutates `set` in place.
93
+ *
94
+ * @param set The mutable set to add to.
95
+ * @param items The items to add.
96
+ * @returns Nothing.
97
+ * @example addSetItems(set, "a", "b");
98
+ * @see https://dhoulb.github.io/shelving/util/set/addSetItems
99
+ */
35
100
  export function addSetItems(set, ...items) {
36
101
  for (const item of items)
37
102
  set.add(item);
38
103
  }
39
- /** Remove multiple items from a set (by reference). */
104
+ /**
105
+ * Remove multiple items from a set (by reference).
106
+ * - Mutates `set` in place.
107
+ *
108
+ * @param set The mutable set to remove from.
109
+ * @param items The items to remove.
110
+ * @returns Nothing.
111
+ * @example deleteSetItems(set, "a", "b");
112
+ * @see https://dhoulb.github.io/shelving/util/set/deleteSetItems
113
+ */
40
114
  export function deleteSetItems(set, ...items) {
41
115
  for (const item of items)
42
116
  set.delete(item);
package/util/sort.d.ts CHANGED
@@ -1,6 +1,11 @@
1
1
  import type { ImmutableArray } from "./array.js";
2
2
  import type { Arguments } from "./function.js";
3
- /** Function that can compare two values for sorting. */
3
+ /**
4
+ * Function that can compare two values for sorting.
5
+ * - Returns a negative number if `left` sorts before `right`, positive if after, or `0` if equally ranked (like `Array.prototype.sort()`).
6
+ *
7
+ * @see https://dhoulb.github.io/shelving/util/sort/Compare
8
+ */
4
9
  export type Compare<T, A extends Arguments = []> = (left: T, right: T, ...args: A) => number;
5
10
  /**
6
11
  * Compare two unknown values in ascending order.
@@ -14,13 +19,33 @@ export type Compare<T, A extends Arguments = []> = (left: T, right: T, ...args:
14
19
  * 6. Unsorted values (objects that can't be converted to number or string, symbols, NaN, etc)
15
20
  * 7. `undefined`
16
21
  *
17
- * @param x The first value to rank.
18
- * @param y The second value to rank.
19
- *
20
- * @returns Number below zero if `a` is higher, number above zero if `b` is higher, or `0` if they're equally sorted.
22
+ * @param left The first value to rank.
23
+ * @param right The second value to rank.
24
+ * @returns Number below zero if `left` is higher, number above zero if `right` is higher, or `0` if they're equally sorted.
25
+ * @example compareAscending(1, 2) // -1
26
+ * @see https://dhoulb.github.io/shelving/util/sort/compareAscending
21
27
  */
22
28
  export declare function compareAscending(left: unknown, right: unknown): number;
23
- /** Compare two unknown values in descending order. */
29
+ /**
30
+ * Compare two unknown values in descending order.
31
+ * - The exact inverse of `compareAscending`.
32
+ *
33
+ * @param left The first value to rank.
34
+ * @param right The second value to rank.
35
+ * @returns Number below zero if `right` is higher, number above zero if `left` is higher, or `0` if they're equally sorted.
36
+ * @example compareDescending(1, 2) // 1
37
+ * @see https://dhoulb.github.io/shelving/util/sort/compareDescending
38
+ */
24
39
  export declare function compareDescending(left: unknown, right: unknown): number;
25
- /** Sort an iterable set of items using a ranker (defaults to sorting in ascending order). */
40
+ /**
41
+ * Sort an iterable set of items using a ranker (defaults to sorting in ascending order).
42
+ * - When the input is already an array and the sort makes no change, the original array reference is returned unchanged.
43
+ *
44
+ * @param input The array or iterable of items to sort.
45
+ * @param compare A `Compare` function ranking two items (defaults to `compareAscending`).
46
+ * @param args Extra arguments forwarded to `compare` on each call.
47
+ * @returns A sorted array (the original reference if it was an already-sorted array).
48
+ * @example sortArray([3, 1, 2]) // [1, 2, 3]
49
+ * @see https://dhoulb.github.io/shelving/util/sort/sortArray
50
+ */
26
51
  export declare function sortArray<T, A extends Arguments = []>(input: ImmutableArray<T> | Iterable<T>, compare?: Compare<T, A>, ...args: A): ImmutableArray<T>;
package/util/sort.js CHANGED
@@ -11,10 +11,11 @@ import { isArray } from "./array.js";
11
11
  * 6. Unsorted values (objects that can't be converted to number or string, symbols, NaN, etc)
12
12
  * 7. `undefined`
13
13
  *
14
- * @param x The first value to rank.
15
- * @param y The second value to rank.
16
- *
17
- * @returns Number below zero if `a` is higher, number above zero if `b` is higher, or `0` if they're equally sorted.
14
+ * @param left The first value to rank.
15
+ * @param right The second value to rank.
16
+ * @returns Number below zero if `left` is higher, number above zero if `right` is higher, or `0` if they're equally sorted.
17
+ * @example compareAscending(1, 2) // -1
18
+ * @see https://dhoulb.github.io/shelving/util/sort/compareAscending
18
19
  */
19
20
  export function compareAscending(left, right) {
20
21
  // Exactly equal is easy.
@@ -68,7 +69,16 @@ export function compareAscending(left, right) {
68
69
  // Otherwise a is higher.
69
70
  return -1;
70
71
  }
71
- /** Compare two unknown values in descending order. */
72
+ /**
73
+ * Compare two unknown values in descending order.
74
+ * - The exact inverse of `compareAscending`.
75
+ *
76
+ * @param left The first value to rank.
77
+ * @param right The second value to rank.
78
+ * @returns Number below zero if `right` is higher, number above zero if `left` is higher, or `0` if they're equally sorted.
79
+ * @example compareDescending(1, 2) // 1
80
+ * @see https://dhoulb.github.io/shelving/util/sort/compareDescending
81
+ */
72
82
  export function compareDescending(left, right) {
73
83
  return 0 - compareAscending(left, right);
74
84
  }
@@ -120,7 +130,17 @@ function _quicksort(items, compare, args, leftPointer = 0, rightPointer = items.
120
130
  // Changes were made.
121
131
  return changed;
122
132
  }
123
- /** Sort an iterable set of items using a ranker (defaults to sorting in ascending order). */
133
+ /**
134
+ * Sort an iterable set of items using a ranker (defaults to sorting in ascending order).
135
+ * - When the input is already an array and the sort makes no change, the original array reference is returned unchanged.
136
+ *
137
+ * @param input The array or iterable of items to sort.
138
+ * @param compare A `Compare` function ranking two items (defaults to `compareAscending`).
139
+ * @param args Extra arguments forwarded to `compare` on each call.
140
+ * @returns A sorted array (the original reference if it was an already-sorted array).
141
+ * @example sortArray([3, 1, 2]) // [1, 2, 3]
142
+ * @see https://dhoulb.github.io/shelving/util/sort/sortArray
143
+ */
124
144
  export function sortArray(input, compare = compareAscending, ...args) {
125
145
  if (isArray(input)) {
126
146
  if (input.length < 2)
package/util/source.d.ts CHANGED
@@ -1,10 +1,35 @@
1
1
  import type { Class } from "./class.js";
2
2
  import type { AnyCaller } from "./function.js";
3
- /** Something that has a source of a specified type. */
3
+ /**
4
+ * Something that has a source of a specified type.
5
+ *
6
+ * @see https://dhoulb.github.io/shelving/util/source/Sourceable
7
+ */
4
8
  export interface Sourceable<T> {
9
+ /** The wrapped source object this object delegates to. */
5
10
  readonly source: T;
6
11
  }
7
- /** Recurse through `Sourceable` objects and return the first one that is an instance of `type`, or `undefined` if no source object matches. */
12
+ /**
13
+ * Recurse through `Sourceable` objects and return the first one that is an instance of `type`, or `undefined` if no source object matches.
14
+ * - Follows the `source` property chain (e.g. layered providers) until a matching instance is found.
15
+ *
16
+ * @param type The class to search for an instance of.
17
+ * @param value The object to start searching from.
18
+ * @returns The first matching source instance, or `undefined` if none matches.
19
+ * @example getSource(CacheProvider, provider) // CacheProvider instance or undefined
20
+ * @see https://dhoulb.github.io/shelving/util/source/getSource
21
+ */
8
22
  export declare function getSource<T>(type: Class<T>, value: unknown): T | undefined;
9
- /** Recurse through `Sourceable` objects and return the first one that is an instance of `type`, or throw `RequiredError` if no source object matches. */
23
+ /**
24
+ * Recurse through `Sourceable` objects and return the first one that is an instance of `type`, or throw `RequiredError` if no source object matches.
25
+ * - Like `getSource`, but throws instead of returning `undefined` when no match is found.
26
+ *
27
+ * @param type The class to search for an instance of.
28
+ * @param data The object to start searching from.
29
+ * @param caller Function to attribute a thrown error to (defaults to `requireSource`).
30
+ * @returns The first matching source instance.
31
+ * @throws {RequiredError} If no source object is an instance of `type`.
32
+ * @example requireSource(CacheProvider, provider) // CacheProvider instance
33
+ * @see https://dhoulb.github.io/shelving/util/source/requireSource
34
+ */
10
35
  export declare function requireSource<T>(type: Class<T>, data: unknown, caller?: AnyCaller): T;