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
@@ -6,28 +6,75 @@ import { validateData } from "../util/validate.js";
6
6
  import { NULLABLE } from "./NullableSchema.js";
7
7
  import { OPTIONAL } from "./OptionalSchema.js";
8
8
  import { Schema } from "./Schema.js";
9
- /** Validate a data object. */
9
+ /**
10
+ * Schema that validates a data object against a fixed set of named property schemas.
11
+ *
12
+ * - Each property is validated by its own schema in `props`.
13
+ * - Excess keys are stripped and `undefined` outputs removed (via `validateData()`).
14
+ *
15
+ * @example
16
+ * const schema = new DataSchema({ props: { name: STRING, age: NUMBER } });
17
+ * schema.validate({ name: "Dave", age: 40 }); // { name: "Dave", age: 40 }
18
+ *
19
+ * @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema
20
+ */
10
21
  export class DataSchema extends Schema {
11
22
  props;
23
+ /**
24
+ * Create a new `DataSchema`.
25
+ *
26
+ * @param options Options for the schema, including the `props` schemas and an optional partial `value`.
27
+ */
12
28
  constructor({ one = "item", title = "Item", props, value: partialValue, ...options }) {
13
29
  // Build default value from props and partial value.
14
30
  const value = { ...mapProps(props, _getSchemaValue), ...partialValue };
15
31
  super({ one, title, value, ...options });
16
32
  this.props = props;
17
33
  }
34
+ /**
35
+ * Validate an unknown value as a data object matching this schema's props.
36
+ *
37
+ * @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
38
+ * @returns The valid data object with each property validated by its schema.
39
+ * @throws `string` `"Must be object"` if the value is not a data object, or a `"key: message"` line per invalid property.
40
+ * @example schema.validate({ name: "Dave" }) // { name: "Dave" }
41
+ * @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema/validate
42
+ */
18
43
  validate(unsafeValue = this.value) {
19
44
  if (!isData(unsafeValue))
20
45
  throw "Must be object";
21
46
  return validateData(unsafeValue, this.props);
22
47
  }
23
- /** Make a new `DataSchema` that only uses a defined subset of the current props. */
48
+ /**
49
+ * Make a new `DataSchema` that only uses a defined subset of the current props.
50
+ *
51
+ * @param keys The property keys to keep.
52
+ * @returns A new `DataSchema` containing only the picked props.
53
+ * @example schema.pick("name", "age") // DataSchema<Pick<T, "name" | "age">>
54
+ * @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema/pick
55
+ */
24
56
  pick(...keys) {
25
57
  return new DataSchema({ ...this, props: pickProps(this.props, ...keys) });
26
58
  }
27
- /** Make a new `DataSchema` that omits one or more of the current props. */
59
+ /**
60
+ * Make a new `DataSchema` that omits one or more of the current props.
61
+ *
62
+ * @param keys The property keys to remove.
63
+ * @returns A new `DataSchema` without the omitted props.
64
+ * @example schema.omit("age") // DataSchema<Omit<T, "age">>
65
+ * @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema/omit
66
+ */
28
67
  omit(...keys) {
29
68
  return new DataSchema({ ...this, props: omitProps(this.props, ...keys) });
30
69
  }
70
+ /**
71
+ * Format a validated data object as a string for display.
72
+ *
73
+ * @param value The valid data object to format.
74
+ * @returns The data object formatted as a human-readable string.
75
+ * @example schema.format({ name: "Dave" }) // "name: Dave"
76
+ * @see https://dhoulb.github.io/shelving/schema/DataSchema/DataSchema/format
77
+ */
31
78
  format(value) {
32
79
  return formatObject(value);
33
80
  }
@@ -35,10 +82,32 @@ export class DataSchema extends Schema {
35
82
  function _getSchemaValue([, { value }]) {
36
83
  return value;
37
84
  }
38
- /** Create a `DataSchema` for a set of properties. */
39
- export const DATA = (props) => new DataSchema({ props });
40
- /** Valid data object with specifed properties, or `null` */
41
- export const NULLABLE_DATA = (props) => NULLABLE(new DataSchema({ props }));
85
+ /**
86
+ * Create a `DataSchema` for a set of properties.
87
+ *
88
+ * *Factory for `DataSchema`.*
89
+ *
90
+ * @param props A named schema for each property of the data object.
91
+ * @returns A `DataSchema` validating data with the given props.
92
+ * @example DATA({ name: STRING, age: NUMBER }) // DataSchema<{ name: string; age: number }>
93
+ * @see https://dhoulb.github.io/shelving/schema/DataSchema/DATA
94
+ */
95
+ export function DATA(props) {
96
+ return new DataSchema({ props });
97
+ }
98
+ /**
99
+ * Create a schema for a valid data object with specified properties, or `null`.
100
+ *
101
+ * *Factory for `NullableSchema`.*
102
+ *
103
+ * @param props A named schema for each property of the data object.
104
+ * @returns A `NullableSchema` wrapping a `DataSchema` with the given props.
105
+ * @example NULLABLE_DATA({ name: STRING }) // NullableSchema<{ name: string }>
106
+ * @see https://dhoulb.github.io/shelving/schema/DataSchema/NULLABLE_DATA
107
+ */
108
+ export function NULLABLE_DATA(props) {
109
+ return NULLABLE(new DataSchema({ props }));
110
+ }
42
111
  export function PARTIAL(source) {
43
112
  const props = source instanceof DataSchema ? source.props : source;
44
113
  return new DataSchema({
@@ -48,7 +117,17 @@ export function PARTIAL(source) {
48
117
  function _optionalProp([, v]) {
49
118
  return OPTIONAL(v);
50
119
  }
51
- /** Create a `DataSchema` that validates a data item, i.e. it has a string or number `.id` identifier property. */
120
+ /**
121
+ * Create a `DataSchema` that validates a data item, i.e. it has a string or number `.id` identifier property.
122
+ *
123
+ * *Factory for `DataSchema`.*
124
+ *
125
+ * @param id Schema for the item's `id` identifier property.
126
+ * @param schemas The props schemas or an existing `DataSchema` for the rest of the item.
127
+ * @returns A `DataSchema` validating an item with an `id` property plus the given props.
128
+ * @example ITEM(NUMBER, { name: STRING }) // DataSchema<{ id: number; name: string }>
129
+ * @see https://dhoulb.github.io/shelving/schema/DataSchema/ITEM
130
+ */
52
131
  export function ITEM(id, schemas) {
53
132
  const props = schemas instanceof DataSchema ? schemas.props : schemas;
54
133
  return new DataSchema({
@@ -2,9 +2,22 @@ import type { PossibleDate } from "../util/date.js";
2
2
  import type { Nullish } from "../util/null.js";
3
3
  import type { SchemaOptions } from "./Schema.js";
4
4
  import { Schema } from "./Schema.js";
5
- /** `type=""` prop for HTML `<input />` tags that are relevant for dates. */
5
+ /**
6
+ * `type=""` prop for HTML `<input />` tags that are relevant for dates.
7
+ *
8
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateInputType
9
+ */
6
10
  export type DateInputType = "time" | "date" | "datetime-local";
7
- /** Allowed options for `DateSchema` */
11
+ /**
12
+ * Options for `DateSchema`.
13
+ *
14
+ * - `value` — default date used when the input is `undefined`.
15
+ * - `min`/`max` — earliest and latest allowed dates (`null` for no bound).
16
+ * - `input` — HTML `<input />` `type=""` hint for downstream UIs.
17
+ * - `step` — rounding step in milliseconds.
18
+ *
19
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchemaOptions
20
+ */
8
21
  export interface DateSchemaOptions extends SchemaOptions {
9
22
  readonly value?: PossibleDate | undefined;
10
23
  readonly min?: Nullish<PossibleDate>;
@@ -17,18 +30,74 @@ export interface DateSchemaOptions extends SchemaOptions {
17
30
  */
18
31
  readonly step?: number | undefined;
19
32
  }
33
+ /**
34
+ * Schema that defines a valid date stored as a `YYYY-MM-DD` string, e.g. `2005-09-12`.
35
+ *
36
+ * - Validates an abstract date without a timezone; use `DateTimeSchema` for UTC datetimes and `TimeSchema` for times.
37
+ * - The input is coerced to a `Date`, optionally rounded to `step`, range-checked against `min`/`max`, then stringified.
38
+ *
39
+ * @example
40
+ * const schema = new DateSchema({ min: "2000-01-01" });
41
+ * schema.validate("2005-09-12"); // "2005-09-12"
42
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema
43
+ */
20
44
  export declare class DateSchema extends Schema<string> {
45
+ /** Default date used when `validate()` is called with an `undefined` value. */
21
46
  readonly value: PossibleDate | undefined;
47
+ /** Earliest allowed date, or `undefined` for no minimum. */
22
48
  readonly min: Date | undefined;
49
+ /** Latest allowed date, or `undefined` for no maximum. */
23
50
  readonly max: Date | undefined;
51
+ /** HTML `<input />` `type=""` hint for downstream UIs. */
24
52
  readonly input: DateInputType;
53
+ /** Rounding step in milliseconds, or `undefined` for no rounding. */
25
54
  readonly step: number | undefined;
55
+ /**
56
+ * Create a new `DateSchema`.
57
+ *
58
+ * @param options Options for the schema (`min`, `max`, `value`, `input`, `step`, plus base `SchemaOptions`).
59
+ */
26
60
  constructor({ one, min, max, value, input, step, ...options }: DateSchemaOptions);
61
+ /**
62
+ * Validate an unknown input value and return a valid date string.
63
+ *
64
+ * @param value The value to validate (defaults to this schema's `value`).
65
+ * @returns The validated date as a `YYYY-MM-DD` string.
66
+ * @throws `string` `"Required"` if the value is empty, `` `Invalid ${one} format` `` if it is not a date, or `` `Minimum…` `` / `` `Maximum…` `` if outside the allowed range.
67
+ * @example schema.validate("2005-09-12") // "2005-09-12"
68
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/validate
69
+ */
27
70
  validate(value?: unknown): string;
71
+ /**
72
+ * Convert a `Date` object to the string representation used by this schema.
73
+ *
74
+ * @param value The `Date` to convert.
75
+ * @returns The date as a `YYYY-MM-DD` string.
76
+ * @example schema.stringify(new Date("2005-09-12")) // "2005-09-12"
77
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/stringify
78
+ */
28
79
  stringify(value: Date): string;
80
+ /**
81
+ * Format a validated date string as a human-readable string for display.
82
+ *
83
+ * @param value The validated date string to format.
84
+ * @returns The date formatted for display.
85
+ * @example schema.format("2005-09-12") // "12 Sep 2005"
86
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/format
87
+ */
29
88
  format(value: string): string;
30
89
  }
31
- /** Valid date, e.g. `2005-09-12` (required because falsy values are invalid). */
90
+ /**
91
+ * Valid date, e.g. `2005-09-12` (required because falsy values are invalid).
92
+ *
93
+ * @example DATE.validate("2005-09-12") // "2005-09-12"
94
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DATE
95
+ */
32
96
  export declare const DATE: DateSchema;
33
- /** Valid date, e.g. `2005-09-12`, or `null` */
97
+ /**
98
+ * Valid date, e.g. `2005-09-12`, or `null`.
99
+ *
100
+ * @example NULLABLE_DATE.validate(null) // null
101
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/NULLABLE_DATE
102
+ */
34
103
  export declare const NULLABLE_DATE: import("./NullableSchema.js").NullableSchema<string>;
@@ -3,11 +3,31 @@ import { formatDate } from "../util/format.js";
3
3
  import { roundStep } from "../util/number.js";
4
4
  import { NULLABLE } from "./NullableSchema.js";
5
5
  import { Schema } from "./Schema.js";
6
+ /**
7
+ * Schema that defines a valid date stored as a `YYYY-MM-DD` string, e.g. `2005-09-12`.
8
+ *
9
+ * - Validates an abstract date without a timezone; use `DateTimeSchema` for UTC datetimes and `TimeSchema` for times.
10
+ * - The input is coerced to a `Date`, optionally rounded to `step`, range-checked against `min`/`max`, then stringified.
11
+ *
12
+ * @example
13
+ * const schema = new DateSchema({ min: "2000-01-01" });
14
+ * schema.validate("2005-09-12"); // "2005-09-12"
15
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema
16
+ */
6
17
  export class DateSchema extends Schema {
18
+ /** Earliest allowed date, or `undefined` for no minimum. */
7
19
  min;
20
+ /** Latest allowed date, or `undefined` for no maximum. */
8
21
  max;
22
+ /** HTML `<input />` `type=""` hint for downstream UIs. */
9
23
  input;
24
+ /** Rounding step in milliseconds, or `undefined` for no rounding. */
10
25
  step;
26
+ /**
27
+ * Create a new `DateSchema`.
28
+ *
29
+ * @param options Options for the schema (`min`, `max`, `value`, `input`, `step`, plus base `SchemaOptions`).
30
+ */
11
31
  constructor({ one = "date", min, max, value, input = "date", step, ...options }) {
12
32
  super({ one, title: "Date", value, ...options });
13
33
  this.min = getDate(min);
@@ -15,6 +35,15 @@ export class DateSchema extends Schema {
15
35
  this.input = input;
16
36
  this.step = step;
17
37
  }
38
+ /**
39
+ * Validate an unknown input value and return a valid date string.
40
+ *
41
+ * @param value The value to validate (defaults to this schema's `value`).
42
+ * @returns The validated date as a `YYYY-MM-DD` string.
43
+ * @throws `string` `"Required"` if the value is empty, `` `Invalid ${one} format` `` if it is not a date, or `` `Minimum…` `` / `` `Maximum…` `` if outside the allowed range.
44
+ * @example schema.validate("2005-09-12") // "2005-09-12"
45
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/validate
46
+ */
18
47
  validate(value = this.value) {
19
48
  const date = getDate(value);
20
49
  if (!date)
@@ -26,14 +55,40 @@ export class DateSchema extends Schema {
26
55
  throw `Maximum ${this.format(this.stringify(this.max))}`;
27
56
  return this.stringify(stepped);
28
57
  }
58
+ /**
59
+ * Convert a `Date` object to the string representation used by this schema.
60
+ *
61
+ * @param value The `Date` to convert.
62
+ * @returns The date as a `YYYY-MM-DD` string.
63
+ * @example schema.stringify(new Date("2005-09-12")) // "2005-09-12"
64
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/stringify
65
+ */
29
66
  stringify(value) {
30
67
  return requireDateString(value);
31
68
  }
69
+ /**
70
+ * Format a validated date string as a human-readable string for display.
71
+ *
72
+ * @param value The validated date string to format.
73
+ * @returns The date formatted for display.
74
+ * @example schema.format("2005-09-12") // "12 Sep 2005"
75
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DateSchema/format
76
+ */
32
77
  format(value) {
33
78
  return formatDate(value, undefined, this.format);
34
79
  }
35
80
  }
36
- /** Valid date, e.g. `2005-09-12` (required because falsy values are invalid). */
81
+ /**
82
+ * Valid date, e.g. `2005-09-12` (required because falsy values are invalid).
83
+ *
84
+ * @example DATE.validate("2005-09-12") // "2005-09-12"
85
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/DATE
86
+ */
37
87
  export const DATE = new DateSchema({});
38
- /** Valid date, e.g. `2005-09-12`, or `null` */
88
+ /**
89
+ * Valid date, e.g. `2005-09-12`, or `null`.
90
+ *
91
+ * @example NULLABLE_DATE.validate(null) // null
92
+ * @see https://dhoulb.github.io/shelving/schema/DateSchema/NULLABLE_DATE
93
+ */
39
94
  export const NULLABLE_DATE = NULLABLE(DATE);
@@ -1,16 +1,53 @@
1
1
  import { DateSchema, type DateSchemaOptions } from "./DateSchema.js";
2
2
  /**
3
- * Define a valid UTC date in ISO 8601 format, e.g. `2005-09-12T18:15:00.000Z`
3
+ * Schema that defines a valid UTC datetime in ISO 8601 format, e.g. `2005-09-12T18:15:00.000Z`.
4
+ *
4
5
  * - The date includes the `Z` suffix to indicate UTC time, this ensures consistent transfer of the date between client and server.
5
6
  * - If you wish to define an _abstract_ date without a timezone, e.g. a birthday or anniversary, use `DateSchema` instead.
6
7
  * - If you wish to define an _abstract_ time without a timezone, e.g. a daily alarm, use `TimeSchema` instead.
8
+ *
9
+ * @example
10
+ * const schema = new DateTimeSchema({});
11
+ * schema.validate("2005-09-12T18:15:00Z"); // "2005-09-12T18:15:00.000Z"
12
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema
7
13
  */
8
14
  export declare class DateTimeSchema extends DateSchema {
15
+ /**
16
+ * Create a new `DateTimeSchema`.
17
+ *
18
+ * @param options Options for the schema (same as `DateSchemaOptions`).
19
+ */
9
20
  constructor({ one, title, input, ...options }: DateSchemaOptions);
21
+ /**
22
+ * Convert a `Date` object to an ISO 8601 UTC string.
23
+ *
24
+ * @param value The `Date` to convert.
25
+ * @returns The datetime as an ISO 8601 string with `Z` suffix.
26
+ * @example schema.stringify(new Date("2005-09-12T18:15:00Z")) // "2005-09-12T18:15:00.000Z"
27
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema/stringify
28
+ */
10
29
  stringify(value: Date): string;
30
+ /**
31
+ * Format a validated datetime string as a human-readable string for display.
32
+ *
33
+ * @param value The validated datetime string to format.
34
+ * @returns The datetime formatted for display.
35
+ * @example schema.format("2005-09-12T18:15:00Z") // "12 Sep 2005, 18:15"
36
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema/format
37
+ */
11
38
  format(value: string): string;
12
39
  }
13
- /** Valid datetime, e.g. `2005-09-12T08:00:00Z` (required because falsy values are invalid). */
40
+ /**
41
+ * Valid datetime, e.g. `2005-09-12T08:00:00Z` (required because falsy values are invalid).
42
+ *
43
+ * @example DATETIME.validate("2005-09-12T08:00:00Z") // "2005-09-12T08:00:00.000Z"
44
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DATETIME
45
+ */
14
46
  export declare const DATETIME: DateTimeSchema;
15
- /** Valid datetime, e.g. `2005-09-12T21:30:00Z`, or `null` */
47
+ /**
48
+ * Valid datetime, e.g. `2005-09-12T21:30:00Z`, or `null`.
49
+ *
50
+ * @example NULLABLE_DATETIME.validate(null) // null
51
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/NULLABLE_DATETIME
52
+ */
16
53
  export declare const NULLABLE_DATETIME: import("./NullableSchema.js").NullableSchema<string>;
@@ -2,23 +2,60 @@ import { formatDateTime } from "../util/format.js";
2
2
  import { DateSchema } from "./DateSchema.js";
3
3
  import { NULLABLE } from "./NullableSchema.js";
4
4
  /**
5
- * Define a valid UTC date in ISO 8601 format, e.g. `2005-09-12T18:15:00.000Z`
5
+ * Schema that defines a valid UTC datetime in ISO 8601 format, e.g. `2005-09-12T18:15:00.000Z`.
6
+ *
6
7
  * - The date includes the `Z` suffix to indicate UTC time, this ensures consistent transfer of the date between client and server.
7
8
  * - If you wish to define an _abstract_ date without a timezone, e.g. a birthday or anniversary, use `DateSchema` instead.
8
9
  * - If you wish to define an _abstract_ time without a timezone, e.g. a daily alarm, use `TimeSchema` instead.
10
+ *
11
+ * @example
12
+ * const schema = new DateTimeSchema({});
13
+ * schema.validate("2005-09-12T18:15:00Z"); // "2005-09-12T18:15:00.000Z"
14
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema
9
15
  */
10
16
  export class DateTimeSchema extends DateSchema {
17
+ /**
18
+ * Create a new `DateTimeSchema`.
19
+ *
20
+ * @param options Options for the schema (same as `DateSchemaOptions`).
21
+ */
11
22
  constructor({ one = "time", title = "Time", input = "datetime-local", ...options }) {
12
23
  super({ one, title, input, ...options });
13
24
  }
25
+ /**
26
+ * Convert a `Date` object to an ISO 8601 UTC string.
27
+ *
28
+ * @param value The `Date` to convert.
29
+ * @returns The datetime as an ISO 8601 string with `Z` suffix.
30
+ * @example schema.stringify(new Date("2005-09-12T18:15:00Z")) // "2005-09-12T18:15:00.000Z"
31
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema/stringify
32
+ */
14
33
  stringify(value) {
15
34
  return value.toISOString();
16
35
  }
36
+ /**
37
+ * Format a validated datetime string as a human-readable string for display.
38
+ *
39
+ * @param value The validated datetime string to format.
40
+ * @returns The datetime formatted for display.
41
+ * @example schema.format("2005-09-12T18:15:00Z") // "12 Sep 2005, 18:15"
42
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DateTimeSchema/format
43
+ */
17
44
  format(value) {
18
45
  return formatDateTime(value, undefined, this.format);
19
46
  }
20
47
  }
21
- /** Valid datetime, e.g. `2005-09-12T08:00:00Z` (required because falsy values are invalid). */
48
+ /**
49
+ * Valid datetime, e.g. `2005-09-12T08:00:00Z` (required because falsy values are invalid).
50
+ *
51
+ * @example DATETIME.validate("2005-09-12T08:00:00Z") // "2005-09-12T08:00:00.000Z"
52
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/DATETIME
53
+ */
22
54
  export const DATETIME = new DateTimeSchema({});
23
- /** Valid datetime, e.g. `2005-09-12T21:30:00Z`, or `null` */
55
+ /**
56
+ * Valid datetime, e.g. `2005-09-12T21:30:00Z`, or `null`.
57
+ *
58
+ * @example NULLABLE_DATETIME.validate(null) // null
59
+ * @see https://dhoulb.github.io/shelving/schema/DateTimeSchema/NULLABLE_DATETIME
60
+ */
24
61
  export const NULLABLE_DATETIME = NULLABLE(DATETIME);
@@ -1,22 +1,72 @@
1
1
  import type { ImmutableDictionary } from "../util/dictionary.js";
2
2
  import type { SchemaOptions } from "./Schema.js";
3
3
  import { Schema } from "./Schema.js";
4
- /** Allowed options for `DictionarySchema` */
4
+ /**
5
+ * Options for `DictionarySchema`.
6
+ *
7
+ * - `items` — schema every entry value in the dictionary must conform to.
8
+ * - `value` — default dictionary used when the input is `undefined`.
9
+ * - `min`/`max` — minimum and maximum number of entries.
10
+ *
11
+ * @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchemaOptions
12
+ */
5
13
  export interface DictionarySchemaOptions<T> extends SchemaOptions {
6
14
  readonly items: Schema<T>;
7
15
  readonly value?: ImmutableDictionary | undefined;
8
16
  readonly min?: number | undefined;
9
17
  readonly max?: number | undefined;
10
18
  }
11
- /** Validate a dictionary object (whose props are all the same with string keys). */
19
+ /**
20
+ * Schema that validates a dictionary object whose entries all share the same value schema and have string keys.
21
+ *
22
+ * - Every entry value is validated by the `items` schema.
23
+ * - Entry count is checked against `min` and `max`.
24
+ *
25
+ * @example
26
+ * const schema = new DictionarySchema({ items: NUMBER });
27
+ * schema.validate({ a: 1, b: 2 }); // { a: 1, b: 2 }
28
+ *
29
+ * @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema
30
+ */
12
31
  export declare class DictionarySchema<T> extends Schema<ImmutableDictionary<T>> {
13
32
  readonly value: ImmutableDictionary<T>;
14
33
  readonly items: Schema<T>;
15
34
  readonly min: number;
16
35
  readonly max: number;
36
+ /**
37
+ * Create a new `DictionarySchema`.
38
+ *
39
+ * @param options Options for the schema, including the `items` schema and `min`/`max` entry counts.
40
+ */
17
41
  constructor({ items, one, many, placeholder, min, max, title, value, ...options }: DictionarySchemaOptions<T>);
42
+ /**
43
+ * Validate an unknown value as a dictionary whose entries all match the `items` schema.
44
+ *
45
+ * @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
46
+ * @returns The valid dictionary with each entry value validated by the `items` schema.
47
+ * @throws `string` `"Must be object"` if not a dictionary, `"Required"` or `` `Minimum ${min} ${many}` `` if too few entries, or `` `Maximum ${max} ${many}` `` if too many.
48
+ * @example schema.validate({ a: 1, b: 2 }) // { a: 1, b: 2 }
49
+ * @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema/validate
50
+ */
18
51
  validate(unsafeValue?: unknown): ImmutableDictionary<T>;
52
+ /**
53
+ * Format a validated dictionary as a string for display.
54
+ *
55
+ * @param dict The valid dictionary to format.
56
+ * @returns The dictionary's values formatted as a human-readable string.
57
+ * @example schema.format({ a: 1, b: 2 }) // "1, 2"
58
+ * @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema/format
59
+ */
19
60
  format(dict: ImmutableDictionary<T>): string;
20
61
  }
21
- /** Valid dictionary object with specifed items. */
22
- export declare const DICTIONARY: <T>(items: Schema<T>) => DictionarySchema<T>;
62
+ /**
63
+ * Create a schema for a valid dictionary object with specified entry values.
64
+ *
65
+ * *Factory for `DictionarySchema`.*
66
+ *
67
+ * @param items Schema every entry value in the dictionary must conform to.
68
+ * @returns A `DictionarySchema` validating dictionaries of the given item type.
69
+ * @example DICTIONARY(NUMBER) // DictionarySchema<number>
70
+ * @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DICTIONARY
71
+ */
72
+ export declare function DICTIONARY<T>(items: Schema<T>): DictionarySchema<T>;
@@ -2,17 +2,42 @@ import { isDictionary } from "../util/dictionary.js";
2
2
  import { formatArray } from "../util/format.js";
3
3
  import { validateDictionary } from "../util/validate.js";
4
4
  import { Schema } from "./Schema.js";
5
- /** Validate a dictionary object (whose props are all the same with string keys). */
5
+ /**
6
+ * Schema that validates a dictionary object whose entries all share the same value schema and have string keys.
7
+ *
8
+ * - Every entry value is validated by the `items` schema.
9
+ * - Entry count is checked against `min` and `max`.
10
+ *
11
+ * @example
12
+ * const schema = new DictionarySchema({ items: NUMBER });
13
+ * schema.validate({ a: 1, b: 2 }); // { a: 1, b: 2 }
14
+ *
15
+ * @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema
16
+ */
6
17
  export class DictionarySchema extends Schema {
7
18
  items;
8
19
  min;
9
20
  max;
21
+ /**
22
+ * Create a new `DictionarySchema`.
23
+ *
24
+ * @param options Options for the schema, including the `items` schema and `min`/`max` entry counts.
25
+ */
10
26
  constructor({ items, one = items.one, many = items.many, placeholder = `No ${many}`, min = 0, max = Number.POSITIVE_INFINITY, title = "Items", value = {}, ...options }) {
11
27
  super({ one, many, title, placeholder, value, ...options });
12
28
  this.items = items;
13
29
  this.min = min;
14
30
  this.max = max;
15
31
  }
32
+ /**
33
+ * Validate an unknown value as a dictionary whose entries all match the `items` schema.
34
+ *
35
+ * @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
36
+ * @returns The valid dictionary with each entry value validated by the `items` schema.
37
+ * @throws `string` `"Must be object"` if not a dictionary, `"Required"` or `` `Minimum ${min} ${many}` `` if too few entries, or `` `Maximum ${max} ${many}` `` if too many.
38
+ * @example schema.validate({ a: 1, b: 2 }) // { a: 1, b: 2 }
39
+ * @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema/validate
40
+ */
16
41
  validate(unsafeValue = this.value) {
17
42
  if (!isDictionary(unsafeValue))
18
43
  throw "Must be object";
@@ -24,9 +49,28 @@ export class DictionarySchema extends Schema {
24
49
  throw `Maximum ${this.max} ${this.many}`;
25
50
  return validDictionary;
26
51
  }
52
+ /**
53
+ * Format a validated dictionary as a string for display.
54
+ *
55
+ * @param dict The valid dictionary to format.
56
+ * @returns The dictionary's values formatted as a human-readable string.
57
+ * @example schema.format({ a: 1, b: 2 }) // "1, 2"
58
+ * @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DictionarySchema/format
59
+ */
27
60
  format(dict) {
28
61
  return formatArray(Object.values(dict).map(v => this.items.format(v)), undefined, this.format);
29
62
  }
30
63
  }
31
- /** Valid dictionary object with specifed items. */
32
- export const DICTIONARY = (items) => new DictionarySchema({ items });
64
+ /**
65
+ * Create a schema for a valid dictionary object with specified entry values.
66
+ *
67
+ * *Factory for `DictionarySchema`.*
68
+ *
69
+ * @param items Schema every entry value in the dictionary must conform to.
70
+ * @returns A `DictionarySchema` validating dictionaries of the given item type.
71
+ * @example DICTIONARY(NUMBER) // DictionarySchema<number>
72
+ * @see https://dhoulb.github.io/shelving/schema/DictionarySchema/DICTIONARY
73
+ */
74
+ export function DICTIONARY(items) {
75
+ return new DictionarySchema({ items });
76
+ }
@@ -1,7 +1,7 @@
1
1
  import type { StringSchemaOptions } from "./StringSchema.js";
2
2
  import { StringSchema } from "./StringSchema.js";
3
3
  /**
4
- * Define a valid email address.
4
+ * Schema that defines a valid email address.
5
5
  *
6
6
  * - Falsy values are converted to `""` empty string.
7
7
  * - Total length must be 254 characters or fewer (in SMTP email is encoded with `<` and `>` to make 256 characters).
@@ -16,12 +16,43 @@ import { StringSchema } from "./StringSchema.js";
16
16
  * - Limited to `[a-z0-9]` with mid-word hyphens only.
17
17
  * - Up to 10 segments of up to 63 characters each, separated by `.`
18
18
  * - TLD is a segment of 2-63 characters, possibly in `xn--` international format.
19
+ *
20
+ * @example EMAIL.validate("Test@Test.com"); // Returns "test@test.com"
21
+ * @see https://dhoulb.github.io/shelving/schema/EmailSchema/EmailSchema
19
22
  */
20
23
  export declare class EmailSchema extends StringSchema {
24
+ /**
25
+ * Create a new `EmailSchema`.
26
+ *
27
+ * @param options Options for the schema (inherits `StringSchema` options except `type`, `min`, `max`, `match`, and `rows`, which are fixed for emails).
28
+ * @param options.one Singular noun describing one value, used in error messages (defaults to `"email address"`).
29
+ * @param options.title Title of the schema, e.g. for a corresponding field (defaults to `"Email"`).
30
+ */
21
31
  constructor({ one, title, ...options }: Omit<StringSchemaOptions, "type" | "min" | "max" | "match" | "rows">);
32
+ /**
33
+ * Sanitize the string into a valid email address.
34
+ *
35
+ * - Strips all whitespace (email addresses never contain whitespace).
36
+ * - Lowercases the result (RFC says addresses should be case-insensitive).
37
+ *
38
+ * @param str String to sanitize.
39
+ * @returns The sanitized, lowercased email address.
40
+ * @example EMAIL.sanitize(" Test@Test.com "); // Returns "test@test.com"
41
+ * @see https://dhoulb.github.io/shelving/schema/EmailSchema/EmailSchema/sanitize
42
+ */
22
43
  sanitize(str: string): string;
23
44
  }
24
- /** Valid email, e.g. `test@test.com` */
45
+ /**
46
+ * Valid email, e.g. `test@test.com`
47
+ *
48
+ * @example EMAIL.validate("test@test.com"); // Returns "test@test.com"
49
+ * @see https://dhoulb.github.io/shelving/schema/EmailSchema/EMAIL
50
+ */
25
51
  export declare const EMAIL: EmailSchema;
26
- /** Valid optional email, e.g. `test@test.com`, or `null` */
52
+ /**
53
+ * Valid optional email, e.g. `test@test.com`, or `null`
54
+ *
55
+ * @example NULLABLE_EMAIL.validate(null); // Returns null
56
+ * @see https://dhoulb.github.io/shelving/schema/EmailSchema/NULLABLE_EMAIL
57
+ */
27
58
  export declare const NULLABLE_EMAIL: import("./NullableSchema.js").NullableSchema<string>;