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
@@ -7,93 +7,209 @@ import type { AbsolutePath } from "../../util/path.js";
7
7
  import { type TemplatePlaceholders } from "../../util/template.js";
8
8
  import type { EndpointCallback, EndpointHandler } from "./util.js";
9
9
  /**
10
- * An abstract API resource definition, used to specify types for e.g. serverless functions.
10
+ * A typed API resource definition pairing a method and path with payload and result schemas.
11
+ * - Acts as the contract both ends of an API agree on: providers render requests from it, handlers validate against it.
12
+ * - Path may contain `{placeholder}` segments that are filled from the payload at request time.
11
13
  *
12
14
  * @param method The method of the endpoint, e.g. `GET`
13
15
  * @param path Endpoint path, possibly including placeholders e.g. `/users/{id}`
14
16
  * @param payload A `Schema` for the payload of the endpoint.
15
17
  * @param result A `Schema` for the result of the endpoint.
18
+ *
19
+ * @example
20
+ * const getUser = new Endpoint("GET", "/users/{id}", USER_PAYLOAD, USER_RESULT);
21
+ *
22
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint
16
23
  */
17
24
  export declare class Endpoint<P = unknown, R = unknown> {
18
- /** Endpoint method. */
25
+ /**
26
+ * The HTTP method this endpoint responds to, e.g. `GET`
27
+ *
28
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/method
29
+ */
19
30
  readonly method: RequestMethod;
20
- /** Endpoint path, possibly including placeholders e.g. `/users/{id}` */
31
+ /**
32
+ * Endpoint path, possibly including placeholders e.g. `/users/{id}`
33
+ *
34
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/path
35
+ */
21
36
  readonly path: AbsolutePath;
22
- /** Endpoint path, possibly including placeholders e.g. `/users/{id}` */
37
+ /**
38
+ * The `{placeholder}` segments extracted from `path`, used to render and match URLs.
39
+ *
40
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/placeholders
41
+ */
23
42
  readonly placeholders: TemplatePlaceholders;
24
- /** Payload schema. */
43
+ /**
44
+ * The `Schema` that request payloads are validated against.
45
+ *
46
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/payload
47
+ */
25
48
  readonly payload: Schema<P>;
26
- /** Result schema. */
49
+ /**
50
+ * The `Schema` that response results are validated against.
51
+ *
52
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/result
53
+ */
27
54
  readonly result: Schema<R>;
28
55
  constructor(method: RequestMethod, path: AbsolutePath, payload: Schema<P>, result: Schema<R>);
29
56
  /**
30
57
  * Render the path for this endpoint with the given payload.
31
58
  * - Path might contain `{placeholder}` values that are replaced with values from `payload`.
32
59
  *
33
- * @returns URL string combining `base` with this endpoint's path, with any `{placeholders}` rendered and `?query` params added.
34
- *
60
+ * @param payload The payload supplying values for any `{placeholders}` in the path.
61
+ * @param caller The function to attribute thrown errors to (defaults to this method).
62
+ * @returns The rendered absolute path, with any `{placeholders}` filled from `payload`.
35
63
  * @throws {RequiredError} if this endpoint's path has `{placeholders}` but `payload` is not a data object.
64
+ * @example endpoint.renderPath({ id: "abc" }) // "/users/abc"
65
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/renderPath
36
66
  */
37
67
  renderPath(payload: P, caller?: AnyCaller): AbsolutePath;
38
68
  /**
39
69
  * Match a method/path pair against this endpoint and return any matched `{placeholder}` params.
70
+ *
71
+ * @param method The request method to compare against this endpoint's method.
72
+ * @param path The request path to match against this endpoint's path template.
73
+ * @param caller The function to attribute thrown errors to (defaults to this method).
74
+ * @returns A dictionary of matched `{placeholder}` params, or `undefined` if the method or path doesn't match.
75
+ * @example endpoint.match("GET", "/users/abc") // { id: "abc" }
76
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/match
40
77
  */
41
78
  match(method: RequestMethod, path: AbsolutePath, caller?: AnyCaller): RequestParams | undefined;
42
79
  /**
43
80
  * Create an endpoint handler pairing for this endpoint.
81
+ *
44
82
  * @param callback The callback function that implements the logic for this endpoint by receiving the payload and returning the response.
45
83
  * @returns An `EndpointHandler` object combining this endpoint and the callback into a single typed object.
84
+ * @example endpoint.handler((payload, request) => ({ ...payload }))
85
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/handler
46
86
  */
47
87
  handler<C>(callback: EndpointCallback<P, R, C>): EndpointHandler<P, R, C>;
48
- /** Convert to string, e.g. `GET /user/{id}` */
88
+ /**
89
+ * Convert this endpoint to a string in `METHOD /path` form, e.g. `GET /user/{id}`
90
+ *
91
+ * @returns The method and path joined with a space, e.g. `GET /user/{id}`
92
+ * @example endpoint.toString() // "GET /users/{id}"
93
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/toString
94
+ */
49
95
  toString(): string;
50
96
  }
51
- /** Any endpoint. */
97
+ /**
98
+ * An `Endpoint` with any payload and result type, for use where the specific types don't matter.
99
+ *
100
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/AnyEndpoint
101
+ */
52
102
  export type AnyEndpoint = Endpoint<any, any>;
53
- /** List of endpoints. */
103
+ /**
104
+ * An immutable list of endpoints.
105
+ *
106
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoints
107
+ */
54
108
  export type Endpoints = ImmutableArray<AnyEndpoint>;
55
- /** Extract the payload type from a `Endpoint`. */
109
+ /**
110
+ * Extract the payload type from an `Endpoint`.
111
+ *
112
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/PayloadType
113
+ */
56
114
  export type PayloadType<X extends Endpoint<unknown, unknown>> = X extends Endpoint<infer Y, unknown> ? Y : never;
57
- /** Extract the result type from a `Endpoint`. */
115
+ /**
116
+ * Extract the result type from an `Endpoint`.
117
+ *
118
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/EndpointType
119
+ */
58
120
  export type EndpointType<X extends Endpoint<unknown, unknown>> = X extends Endpoint<unknown, infer Y> ? Y : never;
59
121
  /**
60
- * Represent a HEAD request to a specified path, with validated payload and return types.
61
- * "The HEAD method requests a representation of the specified resource. Requests using HEAD should only retrieve data and should not contain a request content."
122
+ * Define a `HEAD` endpoint at a path, with validated payload and result types.
123
+ * - "The HEAD method requests a representation of the specified resource. Requests using HEAD should only retrieve data and should not contain a request content."
124
+ *
125
+ * *Factory for `Endpoint`.*
126
+ *
127
+ * @param path The endpoint path, possibly including `{placeholders}`
128
+ * @param payload An optional `Schema` validating the request payload.
129
+ * @param result An optional `Schema` validating the response result.
130
+ * @returns An `Endpoint` configured for the `HEAD` method.
131
+ * @example HEAD("/users/{id}")
132
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/HEAD
62
133
  */
63
134
  export declare function HEAD<P extends Data, R>(path: AbsolutePath, payload?: Schema<P>, result?: Schema<R>): Endpoint<P, R>;
64
135
  export declare function HEAD<P extends Data>(path: AbsolutePath, payload: Schema<P>): Endpoint<P, undefined>;
65
136
  export declare function HEAD<R>(path: AbsolutePath, payload: undefined, result: Schema<R>): Endpoint<undefined, R>;
66
137
  /**
67
- * Represent a GET request to a specified path, with validated payload and return types.
68
- * "The GET method requests a representation of the specified resource. Requests using GET should only retrieve data and should not contain a request content."
138
+ * Define a `GET` endpoint at a path, with validated payload and result types.
139
+ * - "The GET method requests a representation of the specified resource. Requests using GET should only retrieve data and should not contain a request content."
140
+ *
141
+ * *Factory for `Endpoint`.*
142
+ *
143
+ * @param path The endpoint path, possibly including `{placeholders}`
144
+ * @param payload An optional `Schema` validating the request payload.
145
+ * @param result An optional `Schema` validating the response result.
146
+ * @returns An `Endpoint` configured for the `GET` method.
147
+ * @example GET("/users/{id}", undefined, USER)
148
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/GET
69
149
  */
70
150
  export declare function GET<P extends Data, R>(path: AbsolutePath, payload?: Schema<P>, result?: Schema<R>): Endpoint<P, R>;
71
151
  export declare function GET<P extends Data>(path: AbsolutePath, payload: Schema<P>): Endpoint<P, undefined>;
72
152
  export declare function GET<R>(path: AbsolutePath, payload: undefined, result: Schema<R>): Endpoint<undefined, R>;
73
153
  /**
74
- * Represent a POST request to a specified path, with validated payload and return types.
75
- * "The POST method submits an entity to the specified resource, often causing a change in state or side effects on the server.
154
+ * Define a `POST` endpoint at a path, with validated payload and result types.
155
+ * - "The POST method submits an entity to the specified resource, often causing a change in state or side effects on the server."
156
+ *
157
+ * *Factory for `Endpoint`.*
158
+ *
159
+ * @param path The endpoint path, possibly including `{placeholders}`
160
+ * @param payload An optional `Schema` validating the request payload.
161
+ * @param result An optional `Schema` validating the response result.
162
+ * @returns An `Endpoint` configured for the `POST` method.
163
+ * @example POST("/users", USER, USER_RESULT)
164
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/POST
76
165
  */
77
166
  export declare function POST<P, R>(path: AbsolutePath, payload?: Schema<P>, result?: Schema<R>): Endpoint<P, R>;
78
167
  export declare function POST<P>(path: AbsolutePath, payload: Schema<P>): Endpoint<P, undefined>;
79
168
  export declare function POST<R>(path: AbsolutePath, payload: undefined, result: Schema<R>): Endpoint<undefined, R>;
80
169
  /**
81
- * Represent a PUT request to a specified path, with validated payload and return types.
82
- * "The PUT method replaces all current representations of the target resource with the request content."
170
+ * Define a `PUT` endpoint at a path, with validated payload and result types.
171
+ * - "The PUT method replaces all current representations of the target resource with the request content."
172
+ *
173
+ * *Factory for `Endpoint`.*
174
+ *
175
+ * @param path The endpoint path, possibly including `{placeholders}`
176
+ * @param payload An optional `Schema` validating the request payload.
177
+ * @param result An optional `Schema` validating the response result.
178
+ * @returns An `Endpoint` configured for the `PUT` method.
179
+ * @example PUT("/users/{id}", USER)
180
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/PUT
83
181
  */
84
182
  export declare function PUT<P, R>(path: AbsolutePath, payload?: Schema<P>, result?: Schema<R>): Endpoint<P, R>;
85
183
  export declare function PUT<P>(path: AbsolutePath, payload: Schema<P>): Endpoint<P, undefined>;
86
184
  export declare function PUT<R>(path: AbsolutePath, payload: undefined, result: Schema<R>): Endpoint<undefined, R>;
87
185
  /**
88
- * Represent a PATCH request to a specified path, with validated payload and return types.
89
- * "The PATCH method applies partial modifications to a resource."
186
+ * Define a `PATCH` endpoint at a path, with validated payload and result types.
187
+ * - "The PATCH method applies partial modifications to a resource."
188
+ *
189
+ * *Factory for `Endpoint`.*
190
+ *
191
+ * @param path The endpoint path, possibly including `{placeholders}`
192
+ * @param payload An optional `Schema` validating the request payload.
193
+ * @param result An optional `Schema` validating the response result.
194
+ * @returns An `Endpoint` configured for the `PATCH` method.
195
+ * @example PATCH("/users/{id}", PARTIAL_USER)
196
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/PATCH
90
197
  */
91
198
  export declare function PATCH<P, R>(path: AbsolutePath, payload?: Schema<P>, result?: Schema<R>): Endpoint<P, R>;
92
199
  export declare function PATCH<P>(path: AbsolutePath, payload: Schema<P>): Endpoint<P, undefined>;
93
200
  export declare function PATCH<R>(path: AbsolutePath, payload: undefined, result: Schema<R>): Endpoint<undefined, R>;
94
201
  /**
95
- * Represent a DELETE request to a specified path, with validated payload and return types.
96
- * "The DELETE method deletes the specified resource."
202
+ * Define a `DELETE` endpoint at a path, with validated payload and result types.
203
+ * - "The DELETE method deletes the specified resource."
204
+ *
205
+ * *Factory for `Endpoint`.*
206
+ *
207
+ * @param path The endpoint path, possibly including `{placeholders}`
208
+ * @param payload An optional `Schema` validating the request payload.
209
+ * @param result An optional `Schema` validating the response result.
210
+ * @returns An `Endpoint` configured for the `DELETE` method.
211
+ * @example DELETE("/users/{id}")
212
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/DELETE
97
213
  */
98
214
  export declare function DELETE<P, R>(path: AbsolutePath, payload?: Schema<P>, result?: Schema<R>): Endpoint<P, R>;
99
215
  export declare function DELETE<P>(path: AbsolutePath, payload: Schema<P>): Endpoint<P, undefined>;
@@ -3,23 +3,50 @@ import { UNDEFINED } from "../../schema/Schema.js";
3
3
  import { isData } from "../../util/data.js";
4
4
  import { getPlaceholders, matchPathTemplate, renderPathTemplate } from "../../util/template.js";
5
5
  /**
6
- * An abstract API resource definition, used to specify types for e.g. serverless functions.
6
+ * A typed API resource definition pairing a method and path with payload and result schemas.
7
+ * - Acts as the contract both ends of an API agree on: providers render requests from it, handlers validate against it.
8
+ * - Path may contain `{placeholder}` segments that are filled from the payload at request time.
7
9
  *
8
10
  * @param method The method of the endpoint, e.g. `GET`
9
11
  * @param path Endpoint path, possibly including placeholders e.g. `/users/{id}`
10
12
  * @param payload A `Schema` for the payload of the endpoint.
11
13
  * @param result A `Schema` for the result of the endpoint.
14
+ *
15
+ * @example
16
+ * const getUser = new Endpoint("GET", "/users/{id}", USER_PAYLOAD, USER_RESULT);
17
+ *
18
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint
12
19
  */
13
20
  export class Endpoint {
14
- /** Endpoint method. */
21
+ /**
22
+ * The HTTP method this endpoint responds to, e.g. `GET`
23
+ *
24
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/method
25
+ */
15
26
  method;
16
- /** Endpoint path, possibly including placeholders e.g. `/users/{id}` */
27
+ /**
28
+ * Endpoint path, possibly including placeholders e.g. `/users/{id}`
29
+ *
30
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/path
31
+ */
17
32
  path;
18
- /** Endpoint path, possibly including placeholders e.g. `/users/{id}` */
33
+ /**
34
+ * The `{placeholder}` segments extracted from `path`, used to render and match URLs.
35
+ *
36
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/placeholders
37
+ */
19
38
  placeholders;
20
- /** Payload schema. */
39
+ /**
40
+ * The `Schema` that request payloads are validated against.
41
+ *
42
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/payload
43
+ */
21
44
  payload;
22
- /** Result schema. */
45
+ /**
46
+ * The `Schema` that response results are validated against.
47
+ *
48
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/result
49
+ */
23
50
  result;
24
51
  constructor(method, path, payload, result) {
25
52
  this.method = method;
@@ -32,9 +59,12 @@ export class Endpoint {
32
59
  * Render the path for this endpoint with the given payload.
33
60
  * - Path might contain `{placeholder}` values that are replaced with values from `payload`.
34
61
  *
35
- * @returns URL string combining `base` with this endpoint's path, with any `{placeholders}` rendered and `?query` params added.
36
- *
62
+ * @param payload The payload supplying values for any `{placeholders}` in the path.
63
+ * @param caller The function to attribute thrown errors to (defaults to this method).
64
+ * @returns The rendered absolute path, with any `{placeholders}` filled from `payload`.
37
65
  * @throws {RequiredError} if this endpoint's path has `{placeholders}` but `payload` is not a data object.
66
+ * @example endpoint.renderPath({ id: "abc" }) // "/users/abc"
67
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/renderPath
38
68
  */
39
69
  renderPath(payload, caller = this.renderPath) {
40
70
  // Placeholders.
@@ -47,6 +77,13 @@ export class Endpoint {
47
77
  }
48
78
  /**
49
79
  * Match a method/path pair against this endpoint and return any matched `{placeholder}` params.
80
+ *
81
+ * @param method The request method to compare against this endpoint's method.
82
+ * @param path The request path to match against this endpoint's path template.
83
+ * @param caller The function to attribute thrown errors to (defaults to this method).
84
+ * @returns A dictionary of matched `{placeholder}` params, or `undefined` if the method or path doesn't match.
85
+ * @example endpoint.match("GET", "/users/abc") // { id: "abc" }
86
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/match
50
87
  */
51
88
  match(method, path, caller = this.match) {
52
89
  if (method !== this.method)
@@ -55,13 +92,22 @@ export class Endpoint {
55
92
  }
56
93
  /**
57
94
  * Create an endpoint handler pairing for this endpoint.
95
+ *
58
96
  * @param callback The callback function that implements the logic for this endpoint by receiving the payload and returning the response.
59
97
  * @returns An `EndpointHandler` object combining this endpoint and the callback into a single typed object.
98
+ * @example endpoint.handler((payload, request) => ({ ...payload }))
99
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/handler
60
100
  */
61
101
  handler(callback) {
62
102
  return { endpoint: this, callback };
63
103
  }
64
- /** Convert to string, e.g. `GET /user/{id}` */
104
+ /**
105
+ * Convert this endpoint to a string in `METHOD /path` form, e.g. `GET /user/{id}`
106
+ *
107
+ * @returns The method and path joined with a space, e.g. `GET /user/{id}`
108
+ * @example endpoint.toString() // "GET /users/{id}"
109
+ * @see https://dhoulb.github.io/shelving/api/endpoint/Endpoint/Endpoint/toString
110
+ */
65
111
  toString() {
66
112
  return `${this.method} ${this.path}`;
67
113
  }
@@ -2,7 +2,7 @@ import type { AnyCaller } from "../../util/function.js";
2
2
  import { type PossibleURL } from "../../util/url.js";
3
3
  import type { Endpoint } from "./Endpoint.js";
4
4
  /**
5
- * A function that handles an endpoint request, with a payload and returns a result.
5
+ * A function that handles an endpoint request, receiving a validated payload and returning a result.
6
6
  *
7
7
  * @param payload The payload for the callback combining the `{placeholders}`, `?search` params, and body content (this has been validated against the Endpoint's payload schema).
8
8
  * @param request The original incoming request object.
@@ -10,26 +10,48 @@ import type { Endpoint } from "./Endpoint.js";
10
10
  *
11
11
  * @returns {Response} Returning a `Response` object (this will pass back to the client without validation).
12
12
  * @returns {R} Returning the return type of the handler (this will be validated against the Endpoint's result schema).
13
+ *
14
+ * @see https://dhoulb.github.io/shelving/api/endpoint/util/EndpointCallback
13
15
  */
14
16
  export type EndpointCallback<P, R, C = void> = (payload: P, request: Request, context: C) => R | Response | Promise<R | Response>;
15
- /** A typed endpoint definition paired with its implementation callback. */
17
+ /**
18
+ * A typed endpoint definition paired with its implementation callback.
19
+ * - Created with `Endpoint.handler()`; matched and invoked by `handleEndpoints()`.
20
+ *
21
+ * @see https://dhoulb.github.io/shelving/api/endpoint/util/EndpointHandler
22
+ */
16
23
  export interface EndpointHandler<P, R, C = void> {
17
24
  readonly endpoint: Endpoint<P, R>;
18
25
  readonly callback: EndpointCallback<P, R, C>;
19
26
  }
20
- /** Any endpoint handler. */
27
+ /**
28
+ * An `EndpointHandler` with any payload and result type, for use where the specific types don't matter.
29
+ *
30
+ * @see https://dhoulb.github.io/shelving/api/endpoint/util/AnyEndpointHandler
31
+ */
21
32
  export type AnyEndpointHandler<C = any> = EndpointHandler<any, any, C>;
22
- /** A collection of endpoint handlers that can be matched and invoked by `handleEndpoints()`. */
33
+ /**
34
+ * A collection of endpoint handlers that can be matched and invoked by `handleEndpoints()`.
35
+ *
36
+ * @see https://dhoulb.github.io/shelving/api/endpoint/util/EndpointHandlers
37
+ */
23
38
  export type EndpointHandlers<C = void> = Iterable<AnyEndpointHandler<C>>;
24
39
  /**
25
40
  * Handle a `Request` with the first matching endpoint handler after stripping any base-path prefix from the request pathname.
26
41
  * - The original `Request` object is passed through to the callback unchanged.
27
42
  * - Path params and query params are merged before payload validation.
28
43
  *
29
- * @param request The input request to handle.
30
- *
31
44
  * @param base The base URL for the API, e.g. `https://myapi.com/a/b`
32
45
  * - `pathname` of this URL gets trimmed from `request.path` to form the target path when matching against endpoints, e.g. `/a/b/c/d` will produce `/c/d` for matching.
46
+ * @param handlers The iterable of `EndpointHandler` objects to match the request against, in order.
47
+ * @param request The input request to handle.
48
+ * @param context The additional context value passed through to the matched handler's callback.
49
+ * @param caller The function to attribute thrown errors to (defaults to this function).
50
+ * @returns A promise resolving to the `Response` produced by the matching handler.
51
+ * @throws {MethodNotAllowedError} if the request method is not a supported HTTP method.
52
+ * @throws {NotFoundError} if no base path matches, or no endpoint matches the target path.
53
+ * @example await handleEndpoints("https://myapi.com", [getUser.handler(loadUser)], request, undefined)
54
+ * @see https://dhoulb.github.io/shelving/api/endpoint/util/handleEndpoints
33
55
  */
34
56
  export declare function handleEndpoints<C>(base: PossibleURL, handlers: EndpointHandlers<C>, request: Request, context: C, caller?: AnyCaller): Promise<Response>;
35
57
  export declare function handleEndpoints(base: PossibleURL, handlers: EndpointHandlers<void>, request: Request, context?: undefined, caller?: AnyCaller): Promise<Response>;
@@ -1,47 +1,91 @@
1
1
  import type { AnyCaller } from "../../util/function.js";
2
2
  import type { RequestOptions } from "../../util/http.js";
3
3
  import type { Endpoint } from "../endpoint/Endpoint.js";
4
- /** Provider for API endpoints rooted at a common base URL. */
4
+ /**
5
+ * Abstract base for API providers that send requests to a set of `Endpoint` definitions rooted at a common base URL.
6
+ * - Concrete subclasses implement `renderURL()`, `createRequest()`, `fetch()`, and `parseResponse()`; `call()` orchestrates them.
7
+ * - Implements `AsyncDisposable` so providers can be wrapped and disposed in a chain.
8
+ *
9
+ * @example
10
+ * const provider = new ClientAPIProvider({ url: "https://api.example.com" });
11
+ * const user = await provider.call(getUser, { id: "abc" });
12
+ *
13
+ * @see https://dhoulb.github.io/shelving/api/provider/APIProvider/APIProvider
14
+ */
5
15
  export declare abstract class APIProvider<P = unknown, R = unknown> implements AsyncDisposable {
6
- /** The base URL for this API. */
16
+ /**
17
+ * The common base URL that every endpoint request is resolved against.
18
+ *
19
+ * @see https://dhoulb.github.io/shelving/api/provider/APIProvider/APIProvider/url
20
+ */
7
21
  abstract readonly url: URL;
8
22
  /**
9
23
  * Render the full final URL for an API request to a given endpoint with a given payload.
10
24
  * - Includes `?query` params if this is a `HEAD` or `GET` request.
11
25
  *
26
+ * @param endpoint The endpoint whose path is rendered into the base URL.
27
+ * @param payload The payload supplying `{placeholder}` and query-param values.
28
+ * @param caller The function to attribute thrown errors to (defaults to this method).
29
+ * @returns The fully resolved request `URL`.
12
30
  * @throws {RequiredError} if this endpoint's path has `{placeholders}` but `payload` is not a data object.
13
31
  * @throws {RequiredError} if this is a `HEAD` or `GET` request but `payload` is not a data object.
32
+ * @example provider.renderURL(getUser, { id: "abc" }) // URL("https://api.example.com/users/abc")
33
+ * @see https://dhoulb.github.io/shelving/api/provider/APIProvider/APIProvider/renderURL
14
34
  */
15
35
  abstract renderURL<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, caller?: AnyCaller): URL;
16
36
  /**
17
37
  * Create a `Request` that targets this endpoint with a given base URL.
18
38
  *
39
+ * @param endpoint The endpoint the request targets.
19
40
  * @param payload The payload to embed into the `Request` to send to the endpoint.
20
41
  * - Path `{placeholders}` are rendered from `payload`
21
42
  * - For `GET` and `HEAD`, remaining `payload` fields are appended as `?query` params.
22
43
  * - For all other requests, `payload` is sent as the body.
23
- *
24
- * @param options The `RequestOptions` to use when creating the `Request`
25
- * - Merges `options` with `this.options` to make the final request options.
26
- *
27
- * @returns The created request.
28
- * - Merges `options` with `this.options` to make the final request options.
29
- * - Includes an `AbortSignal` based on `this.timeout` if it's set to a number in milliseconds.
30
- * - The timeout `AbortSignal` is merged with any manual signal set in `
31
- *
44
+ * @param options The `RequestOptions` to use when creating the `Request`, merged over the provider's own options.
45
+ * @param caller The function to attribute thrown errors to (defaults to this method).
46
+ * @returns The created `Request`, including any timeout `AbortSignal` configured on the provider.
32
47
  * @throws {RequiredError} if this endpoint's path has `{placeholders}` but `payload` is not a data object.
33
48
  * @throws {RequiredError} if this is a `HEAD` or `GET` request but `payload` is not a data object.
49
+ * @example provider.createRequest(getUser, { id: "abc" })
50
+ * @see https://dhoulb.github.io/shelving/api/provider/APIProvider/APIProvider/createRequest
34
51
  */
35
52
  abstract createRequest<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, options?: RequestOptions, caller?: AnyCaller): Request;
36
- /** Fetch a `Resource` using this provider (defaults to Javascript `fetch()` API). */
53
+ /**
54
+ * Send a `Request` and return its `Response` (defaults to the JavaScript `fetch()` API).
55
+ *
56
+ * @param request The `Request` to send.
57
+ * @returns A promise resolving to the `Response`.
58
+ * @example const response = await provider.fetch(request);
59
+ * @see https://dhoulb.github.io/shelving/api/provider/APIProvider/APIProvider/fetch
60
+ */
37
61
  abstract fetch(request: Request): Promise<Response>;
38
62
  /**
39
- * Parse an HTTP `Response` for this endpoint.
63
+ * Parse an HTTP `Response` for this endpoint into a result value.
40
64
  * - Non-2xx responses become `ResponseError`.
41
65
  * - Does not validate the result against the endpoint schema — use `ValidationAPIProvider` for that.
66
+ *
67
+ * @param _endpoint The endpoint the response was produced for.
68
+ * @param response The `Response` to parse.
69
+ * @param caller The function to attribute thrown errors to (defaults to this method).
70
+ * @returns A promise resolving to the parsed result.
71
+ * @throws {ResponseError} if the response status is non-2xx.
72
+ * @example const result = await provider.parseResponse(getUser, response);
73
+ * @see https://dhoulb.github.io/shelving/api/provider/APIProvider/APIProvider/parseResponse
42
74
  */
43
75
  abstract parseResponse<PP extends P, RR extends R>(_endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
44
- /** Send a payload to an `Endpoint` and retrieve the result. */
76
+ /**
77
+ * Send a payload to an `Endpoint` and retrieve the parsed result.
78
+ * - Composes `createRequest()`, `fetch()`, and `parseResponse()` into a single round trip.
79
+ *
80
+ * @param endpoint The endpoint to call.
81
+ * @param payload The payload to send to the endpoint.
82
+ * @param options The `RequestOptions` to use, merged over the provider's own options.
83
+ * @param caller The function to attribute thrown errors to.
84
+ * @returns A promise resolving to the parsed result.
85
+ * @throws {ResponseError} if the response status is non-2xx.
86
+ * @example const user = await provider.call(getUser, { id: "abc" });
87
+ * @see https://dhoulb.github.io/shelving/api/provider/APIProvider/APIProvider/call
88
+ */
45
89
  call<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, options?: RequestOptions, caller?: AnyCaller): Promise<RR>;
46
90
  [Symbol.asyncDispose](): Promise<void>;
47
91
  }
@@ -1,6 +1,28 @@
1
- /** Provider for API endpoints rooted at a common base URL. */
1
+ /**
2
+ * Abstract base for API providers that send requests to a set of `Endpoint` definitions rooted at a common base URL.
3
+ * - Concrete subclasses implement `renderURL()`, `createRequest()`, `fetch()`, and `parseResponse()`; `call()` orchestrates them.
4
+ * - Implements `AsyncDisposable` so providers can be wrapped and disposed in a chain.
5
+ *
6
+ * @example
7
+ * const provider = new ClientAPIProvider({ url: "https://api.example.com" });
8
+ * const user = await provider.call(getUser, { id: "abc" });
9
+ *
10
+ * @see https://dhoulb.github.io/shelving/api/provider/APIProvider/APIProvider
11
+ */
2
12
  export class APIProvider {
3
- /** Send a payload to an `Endpoint` and retrieve the result. */
13
+ /**
14
+ * Send a payload to an `Endpoint` and retrieve the parsed result.
15
+ * - Composes `createRequest()`, `fetch()`, and `parseResponse()` into a single round trip.
16
+ *
17
+ * @param endpoint The endpoint to call.
18
+ * @param payload The payload to send to the endpoint.
19
+ * @param options The `RequestOptions` to use, merged over the provider's own options.
20
+ * @param caller The function to attribute thrown errors to.
21
+ * @returns A promise resolving to the parsed result.
22
+ * @throws {ResponseError} if the response status is non-2xx.
23
+ * @example const user = await provider.call(getUser, { id: "abc" });
24
+ * @see https://dhoulb.github.io/shelving/api/provider/APIProvider/APIProvider/call
25
+ */
4
26
  async call(endpoint, payload, options, caller) {
5
27
  const request = this.createRequest(endpoint, payload, options, caller);
6
28
  const response = await this.fetch(request);
@@ -4,23 +4,76 @@ import type { Endpoint } from "../endpoint/Endpoint.js";
4
4
  import type { APIProvider } from "./APIProvider.js";
5
5
  import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
6
6
  /**
7
- * API provider wrapper that serves requests through an `APICache`.
8
- * - Constructor accepts a `source` provider and an optional default `maxAge`.
7
+ * API provider wrapper that serves requests through an `APICache` so repeated calls reuse cached results.
9
8
  * - On `call(...)`, triggers `cache.refresh(maxAge)` for the endpoint+payload before awaiting `cache.call(...)`.
10
9
  * - `invalidate`, `invalidateAll`, `refresh`, and `refreshAll` pass through to the underlying cache and use `this.maxAge` as the default refresh timing.
11
10
  *
12
- * @param `maxAge` The maximum age used when calling `call()` (defaults to `AVOID_REFRESH`, i.e. only refresh if the value is invalidated or still loading).
13
- * - Note: This is not used for `refresh()` calls — when you call `refresh()` you likely mean "do it now".
14
- * - When we are using `call()` on a cache, the entire point of the cache is to "cache", so the default isn't `0` like it is for `refresh()`
11
+ * @example
12
+ * const api = new CachedAPIProvider(source);
13
+ * const result = await api.call(endpoint, payload);
14
+ * @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider
15
15
  */
16
16
  export declare class CachedAPIProvider<P, R> extends ThroughAPIProvider<P, R> implements AsyncDisposable {
17
+ /**
18
+ * The maximum age used when calling `call()`, defaulting to `AVOID_REFRESH` (only refresh if invalidated or still loading).
19
+ * - Not used for `refresh()` calls, which always refetch immediately.
20
+ * @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/maxAge
21
+ */
17
22
  readonly maxAge: number | undefined;
18
23
  private readonly _cache;
24
+ /**
25
+ * Create a cached provider wrapping a source provider.
26
+ *
27
+ * @param source The source provider whose results are cached.
28
+ * @param maxAge Default maximum age in milliseconds for `call()` (defaults to `AVOID_REFRESH`).
29
+ * @example new CachedAPIProvider(source)
30
+ */
19
31
  constructor(source: APIProvider<P, R>, maxAge?: number);
32
+ /**
33
+ * Call an endpoint through the cache, reusing a cached result where possible instead of fetching fresh.
34
+ *
35
+ * @param endpoint The endpoint to call.
36
+ * @param payload The payload to call the endpoint with.
37
+ * @param _options Request options (unused; the cache key is derived from endpoint and payload).
38
+ * @param caller The calling function used for error stack traces.
39
+ * @returns Promise resolving to the (possibly cached) result.
40
+ * @example await api.call(endpoint, payload)
41
+ * @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/call
42
+ */
20
43
  call<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, _options?: RequestOptions, caller?: AnyCaller): Promise<RR>;
44
+ /**
45
+ * Invalidate the cached result for a specific endpoint and payload.
46
+ *
47
+ * @param endpoint The endpoint whose cached result should be invalidated.
48
+ * @param payload The payload identifying the cached result.
49
+ * @example api.invalidate(endpoint, payload)
50
+ * @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/invalidate
51
+ */
21
52
  invalidate<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP): void;
53
+ /**
54
+ * Invalidate every cached result for an endpoint, across all payloads.
55
+ *
56
+ * @param endpoint The endpoint whose cached results should be invalidated.
57
+ * @example api.invalidateAll(endpoint)
58
+ * @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/invalidateAll
59
+ */
22
60
  invalidateAll<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>): void;
61
+ /**
62
+ * Refresh the cached result for a specific endpoint and payload.
63
+ *
64
+ * @param endpoint The endpoint whose cached result should be refreshed.
65
+ * @param payload The payload identifying the cached result.
66
+ * @example api.refresh(endpoint, payload)
67
+ * @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/refresh
68
+ */
23
69
  refresh<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP): void;
70
+ /**
71
+ * Refresh every cached result for an endpoint, across all payloads.
72
+ *
73
+ * @param endpoint The endpoint whose cached results should be refreshed.
74
+ * @example api.refreshAll(endpoint)
75
+ * @see https://dhoulb.github.io/shelving/api/provider/CachedAPIProvider/CachedAPIProvider/refreshAll
76
+ */
24
77
  refreshAll<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>): void;
25
78
  [Symbol.asyncDispose](): Promise<void>;
26
79
  }