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
@@ -3,10 +3,10 @@ import { formatArray } from "../util/format.js";
3
3
  import { validateArray } from "../util/validate.js";
4
4
  import { Schema } from "./Schema.js";
5
5
  /**
6
- * Define a valid array.
6
+ * Schema that validates an array and ensures every item matches a specified item schema.
7
7
  *
8
- * Validates arrays and ensures the array's items match a specified format.
9
- * Only returns a new instance of the object if it changes (for immutability).
8
+ * - A string input is split into items using `separator`.
9
+ * - Items are optionally deduplicated (`unique`), then the count is checked against `min` and `max`.
10
10
  *
11
11
  * @example
12
12
  * const schema = new ArraySchema({ min: 1, max: 2, default: [10,11,12], required: true });
@@ -21,6 +21,8 @@ import { Schema } from "./Schema.js";
21
21
  * const schema = new ArraySchema({ schema: Array });
22
22
  * schema.validate(["a", "a"], schema); // Returns ["a", "a"]
23
23
  * schema.validate(["a", null], schema); // Throws Invalids({ "1": Invalid('Must be a string') });
24
+ *
25
+ * @see https://dhoulb.github.io/shelving/schema/ArraySchema/ArraySchema
24
26
  */
25
27
  export class ArraySchema extends Schema {
26
28
  items;
@@ -28,6 +30,11 @@ export class ArraySchema extends Schema {
28
30
  min;
29
31
  max;
30
32
  separator;
33
+ /**
34
+ * Create a new `ArraySchema`.
35
+ *
36
+ * @param options Options for the schema, including the `items` schema, `min`/`max` counts, `unique`, and `separator`.
37
+ */
31
38
  constructor({ items, one = items.one, many = items.many, title = "Items", placeholder = `No ${many}`, unique = false, min = 0, max = Number.POSITIVE_INFINITY, separator = ",", value = [], ...options }) {
32
39
  super({ one, many, title, placeholder, value, ...options });
33
40
  this.items = items;
@@ -36,6 +43,15 @@ export class ArraySchema extends Schema {
36
43
  this.max = max;
37
44
  this.separator = separator;
38
45
  }
46
+ /**
47
+ * Validate an unknown value as an array whose items all match the `items` schema.
48
+ *
49
+ * @param unsafeValue The unknown input value to validate; a string is split using `separator` (defaults to this schema's `value`).
50
+ * @returns The valid array with each item validated by the `items` schema.
51
+ * @throws `string` `"Must be array"` if not an array, `"Required"` or `` `Minimum ${min} ${many}` `` if too few items, or `` `Maximum ${max} ${many}` `` if too many.
52
+ * @example schema.validate([1, 2, 3]) // [1, 2, 3]
53
+ * @see https://dhoulb.github.io/shelving/schema/ArraySchema/ArraySchema/validate
54
+ */
39
55
  validate(unsafeValue = this.value) {
40
56
  const unsafeArray = typeof unsafeValue === "string" ? unsafeValue.split(this.separator).filter(Boolean) : unsafeValue;
41
57
  if (!isArray(unsafeArray))
@@ -48,9 +64,28 @@ export class ArraySchema extends Schema {
48
64
  throw `Maximum ${this.max} ${this.many}`;
49
65
  return uniqueArray;
50
66
  }
67
+ /**
68
+ * Format a validated array as a string for display.
69
+ *
70
+ * @param arr The valid array to format.
71
+ * @returns The array's items formatted as a human-readable string.
72
+ * @example schema.format([1, 2, 3]) // "1, 2, 3"
73
+ * @see https://dhoulb.github.io/shelving/schema/ArraySchema/ArraySchema/format
74
+ */
51
75
  format(arr) {
52
76
  return formatArray(arr.map(v => this.items.format(v)), undefined, this.format);
53
77
  }
54
78
  }
55
- /** Valid array with specifed items. */
56
- export const ARRAY = (items) => new ArraySchema({ items });
79
+ /**
80
+ * Create a schema for a valid array with specified items.
81
+ *
82
+ * *Factory for `ArraySchema`.*
83
+ *
84
+ * @param items Schema every item in the array must conform to.
85
+ * @returns An `ArraySchema` validating arrays of the given item type.
86
+ * @example ARRAY(NUMBER) // ArraySchema<number>
87
+ * @see https://dhoulb.github.io/shelving/schema/ArraySchema/ARRAY
88
+ */
89
+ export function ARRAY(items) {
90
+ return new ArraySchema({ items });
91
+ }
@@ -1,17 +1,73 @@
1
1
  import type { SchemaOptions } from "./Schema.js";
2
2
  import { Schema } from "./Schema.js";
3
- /** Allowed options for `BooleanSchema` */
3
+ /**
4
+ * Allowed options for `BooleanSchema`.
5
+ *
6
+ * - `value` — default boolean value used when the input is `undefined`.
7
+ * - `required` — when `true`, a falsy result is rejected as invalid.
8
+ *
9
+ * @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchemaOptions
10
+ */
4
11
  export interface BooleanSchemaOptions extends SchemaOptions {
5
12
  readonly value?: boolean | undefined;
6
13
  readonly required?: boolean | undefined;
7
14
  }
8
- /** Define a valid boolean. */
15
+ /**
16
+ * Schema that defines a valid boolean.
17
+ *
18
+ * - Strings are coerced: known negative strings (`""`, `"false"`, `"0"`, `"no"`, `"n"`, `"off"`) become `false`, everything else becomes `true`.
19
+ * - All other values are coerced with standard truthiness.
20
+ *
21
+ * @example
22
+ * const schema = new BooleanSchema({ required: true });
23
+ * schema.validate("yes"); // Returns true
24
+ * schema.validate(""); // Throws "Required"
25
+ *
26
+ * @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema
27
+ */
9
28
  export declare class BooleanSchema extends Schema<boolean> {
10
29
  readonly value: boolean;
11
30
  readonly required: boolean;
31
+ /**
32
+ * Create a new `BooleanSchema`.
33
+ *
34
+ * @param options Options for the schema.
35
+ * @param options.value Default boolean value used when the input is `undefined` (defaults to `false`).
36
+ * @param options.required When `true`, a falsy result is rejected as invalid (defaults to `false`).
37
+ */
12
38
  constructor({ value, required, ...options }: BooleanSchemaOptions);
39
+ /**
40
+ * Validate an unknown value and coerce it to a boolean.
41
+ *
42
+ * @param unsafeValue Value to validate (defaults to this schema's `value`).
43
+ * @returns The coerced boolean value.
44
+ * @throws `string` `"Required"` if `required` is `true` and the coerced value is `false`.
45
+ *
46
+ * @example
47
+ * BOOLEAN.validate("yes"); // Returns true
48
+ *
49
+ * @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema/validate
50
+ */
13
51
  validate(unsafeValue?: unknown): boolean;
52
+ /**
53
+ * Format a boolean value as a human-readable string for display.
54
+ *
55
+ * @param value Boolean value to format.
56
+ * @returns The formatted string, e.g. `"Yes"` or `"No"`.
57
+ *
58
+ * @example
59
+ * BOOLEAN.format(true); // Returns "Yes"
60
+ *
61
+ * @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema/format
62
+ */
14
63
  format(value: boolean): string;
15
64
  }
16
- /** Valid boolean. */
65
+ /**
66
+ * Valid boolean.
67
+ *
68
+ * @example
69
+ * BOOLEAN.validate("yes"); // Returns true
70
+ *
71
+ * @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BOOLEAN
72
+ */
17
73
  export declare const BOOLEAN: BooleanSchema;
@@ -1,21 +1,70 @@
1
1
  import { formatBoolean } from "../util/format.js";
2
2
  import { Schema } from "./Schema.js";
3
3
  const NEGATIVE = ["", "false", "0", "no", "n", "off"];
4
- /** Define a valid boolean. */
4
+ /**
5
+ * Schema that defines a valid boolean.
6
+ *
7
+ * - Strings are coerced: known negative strings (`""`, `"false"`, `"0"`, `"no"`, `"n"`, `"off"`) become `false`, everything else becomes `true`.
8
+ * - All other values are coerced with standard truthiness.
9
+ *
10
+ * @example
11
+ * const schema = new BooleanSchema({ required: true });
12
+ * schema.validate("yes"); // Returns true
13
+ * schema.validate(""); // Throws "Required"
14
+ *
15
+ * @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema
16
+ */
5
17
  export class BooleanSchema extends Schema {
18
+ /**
19
+ * Create a new `BooleanSchema`.
20
+ *
21
+ * @param options Options for the schema.
22
+ * @param options.value Default boolean value used when the input is `undefined` (defaults to `false`).
23
+ * @param options.required When `true`, a falsy result is rejected as invalid (defaults to `false`).
24
+ */
6
25
  constructor({ value = false, required = false, ...options }) {
7
26
  super({ value, ...options });
8
27
  this.required = required;
9
28
  }
29
+ /**
30
+ * Validate an unknown value and coerce it to a boolean.
31
+ *
32
+ * @param unsafeValue Value to validate (defaults to this schema's `value`).
33
+ * @returns The coerced boolean value.
34
+ * @throws `string` `"Required"` if `required` is `true` and the coerced value is `false`.
35
+ *
36
+ * @example
37
+ * BOOLEAN.validate("yes"); // Returns true
38
+ *
39
+ * @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema/validate
40
+ */
10
41
  validate(unsafeValue = this.value) {
11
42
  const value = typeof unsafeValue === "string" ? !NEGATIVE.includes(unsafeValue.toLowerCase().trim()) : !!unsafeValue;
12
43
  if (this.required && !value)
13
44
  throw "Required";
14
45
  return value;
15
46
  }
47
+ /**
48
+ * Format a boolean value as a human-readable string for display.
49
+ *
50
+ * @param value Boolean value to format.
51
+ * @returns The formatted string, e.g. `"Yes"` or `"No"`.
52
+ *
53
+ * @example
54
+ * BOOLEAN.format(true); // Returns "Yes"
55
+ *
56
+ * @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BooleanSchema/format
57
+ */
16
58
  format(value) {
17
59
  return formatBoolean(value);
18
60
  }
19
61
  }
20
- /** Valid boolean. */
62
+ /**
63
+ * Valid boolean.
64
+ *
65
+ * @example
66
+ * BOOLEAN.validate("yes"); // Returns true
67
+ *
68
+ * @see https://dhoulb.github.io/shelving/schema/BooleanSchema/BOOLEAN
69
+ */
21
70
  export const BOOLEAN = new BooleanSchema({});
@@ -2,31 +2,85 @@ import { type ImmutableArray } from "../util/array.js";
2
2
  import type { SchemaOptions } from "./Schema.js";
3
3
  import { Schema } from "./Schema.js";
4
4
  /**
5
- * Set of options for a `ChoiceSchema` can be either:
6
- * - Dictionary of string options in `{ key: title }` format.
5
+ * Dictionary of allowed options for a `ChoiceSchema` in `{ key: title }` format.
6
+ *
7
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceOptions
7
8
  */
8
9
  export type ChoiceOptions<K extends string> = {
9
10
  readonly [KK in K]: string;
10
11
  };
11
12
  /**
12
- * Things that can be converted to a choice options dictionary.
13
- * - Array of string options in `[key]` format (`key` will be used as the `title` too).
13
+ * Things that can be converted to a `ChoiceOptions` dictionary.
14
+ *
15
+ * - Dictionary of string options in `{ key: title }` format.
16
+ * - Array of string options in `[key]` format (`key` is used as the `title` too).
17
+ *
18
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/PossibleChoiceOptions
14
19
  */
15
20
  export type PossibleChoiceOptions<K extends string> = ImmutableArray<K> | ChoiceOptions<K>;
16
- /** Allowed options for `ChoiceSchema` */
21
+ /**
22
+ * Options for `ChoiceSchema`.
23
+ *
24
+ * - `options` — the allowed choices, as a `{ key: title }` dictionary or an array of keys.
25
+ * - `value` — default option used when the input is `undefined`.
26
+ *
27
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchemaOptions
28
+ */
17
29
  export interface ChoiceSchemaOptions<O extends string, I = never> extends Omit<SchemaOptions, "value"> {
18
30
  /** Specify correct options using a dictionary of entries. */
19
31
  readonly options: PossibleChoiceOptions<O>;
20
32
  /** Default option for the value. */
21
33
  readonly value?: O | I;
22
34
  }
23
- /** Choose from an allowed set of values. */
35
+ /**
36
+ * Schema that validates a value against a fixed set of allowed string choices.
37
+ *
38
+ * - The input must be one of the keys in `options`, otherwise it is rejected.
39
+ * - Each choice has a human-readable title used by `format()`.
40
+ *
41
+ * @example
42
+ * const schema = new ChoiceSchema({ options: { yes: "Yes", no: "No" } });
43
+ * schema.validate("yes"); // "yes"
44
+ *
45
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema
46
+ */
24
47
  export declare class ChoiceSchema<O extends string, I = never> extends Schema<O> {
25
48
  readonly value: O | I | undefined;
26
49
  readonly options: ChoiceOptions<O>;
50
+ /**
51
+ * Create a new `ChoiceSchema`.
52
+ *
53
+ * @param options Options for the schema, including the allowed `options` and an optional default `value`.
54
+ */
27
55
  constructor({ one, title, placeholder, options, value, ...rest }: ChoiceSchemaOptions<O, I>);
56
+ /**
57
+ * Validate an unknown value as one of the allowed choices.
58
+ *
59
+ * @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
60
+ * @returns The valid choice key.
61
+ * @throws `string` `"Required"` if the value is empty or missing, or `` `Unknown ${one}` `` if it is not one of the allowed choices.
62
+ * @example schema.validate("yes") // "yes"
63
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema/validate
64
+ */
28
65
  validate(unsafeValue?: unknown): O;
66
+ /**
67
+ * Format a validated choice as its human-readable title.
68
+ *
69
+ * @param value The valid choice key to format.
70
+ * @returns The choice's title from `options`.
71
+ * @example schema.format("yes") // "Yes"
72
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema/format
73
+ */
29
74
  format(value: O): string;
30
75
  }
31
- /** Choose from an allowed set of values. */
76
+ /**
77
+ * Create a schema for a valid choice from an allowed set of values.
78
+ *
79
+ * *Factory for `ChoiceSchema`.*
80
+ *
81
+ * @param options The allowed choices, as a `{ key: title }` dictionary or an array of keys.
82
+ * @returns A `ChoiceSchema` validating the given choices.
83
+ * @example CHOICE({ yes: "Yes", no: "No" }) // ChoiceSchema<"yes" | "no">
84
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/CHOICE
85
+ */
32
86
  export declare function CHOICE<K extends string>(options: PossibleChoiceOptions<K>): ChoiceSchema<K>;
@@ -8,23 +8,65 @@ function _getChoiceOptions(options) {
8
8
  function _getChoiceOption(k) {
9
9
  return [k, k];
10
10
  }
11
- /** Choose from an allowed set of values. */
11
+ /**
12
+ * Schema that validates a value against a fixed set of allowed string choices.
13
+ *
14
+ * - The input must be one of the keys in `options`, otherwise it is rejected.
15
+ * - Each choice has a human-readable title used by `format()`.
16
+ *
17
+ * @example
18
+ * const schema = new ChoiceSchema({ options: { yes: "Yes", no: "No" } });
19
+ * schema.validate("yes"); // "yes"
20
+ *
21
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema
22
+ */
12
23
  export class ChoiceSchema extends Schema {
13
24
  options;
25
+ /**
26
+ * Create a new `ChoiceSchema`.
27
+ *
28
+ * @param options Options for the schema, including the allowed `options` and an optional default `value`.
29
+ */
14
30
  constructor({ one = "choice", title = "Choice", placeholder = `No ${one}`, options, value, ...rest }) {
15
31
  super({ one, title, value, placeholder, ...rest });
16
32
  this.options = _getChoiceOptions(options);
17
33
  }
34
+ /**
35
+ * Validate an unknown value as one of the allowed choices.
36
+ *
37
+ * @param unsafeValue The unknown input value to validate (defaults to this schema's `value`).
38
+ * @returns The valid choice key.
39
+ * @throws `string` `"Required"` if the value is empty or missing, or `` `Unknown ${one}` `` if it is not one of the allowed choices.
40
+ * @example schema.validate("yes") // "yes"
41
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema/validate
42
+ */
18
43
  validate(unsafeValue = this.value) {
19
44
  if (typeof unsafeValue === "string" && isProp(this.options, unsafeValue))
20
45
  return unsafeValue;
21
46
  throw unsafeValue ? `Unknown ${this.one}` : "Required";
22
47
  }
48
+ /**
49
+ * Format a validated choice as its human-readable title.
50
+ *
51
+ * @param value The valid choice key to format.
52
+ * @returns The choice's title from `options`.
53
+ * @example schema.format("yes") // "Yes"
54
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/ChoiceSchema/format
55
+ */
23
56
  format(value) {
24
57
  return this.options[value];
25
58
  }
26
59
  }
27
- /** Choose from an allowed set of values. */
60
+ /**
61
+ * Create a schema for a valid choice from an allowed set of values.
62
+ *
63
+ * *Factory for `ChoiceSchema`.*
64
+ *
65
+ * @param options The allowed choices, as a `{ key: title }` dictionary or an array of keys.
66
+ * @returns A `ChoiceSchema` validating the given choices.
67
+ * @example CHOICE({ yes: "Yes", no: "No" }) // ChoiceSchema<"yes" | "no">
68
+ * @see https://dhoulb.github.io/shelving/schema/ChoiceSchema/CHOICE
69
+ */
28
70
  export function CHOICE(options) {
29
71
  return new ChoiceSchema({ options });
30
72
  }
@@ -1,21 +1,54 @@
1
1
  import { StringSchema, type StringSchemaOptions } from "./StringSchema.js";
2
- /** Options for a `ColorSchema` */
2
+ /**
3
+ * Options for a `ColorSchema`.
4
+ *
5
+ * @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchemaOptions
6
+ */
3
7
  export interface ColorSchemaOptions extends Omit<StringSchemaOptions, "type" | "min" | "max" | "match" | "rows"> {
4
8
  }
5
9
  /**
6
- * Define a valid color hex string, e.g `#00CCFF`
10
+ * Schema that defines a valid color hex string, e.g. `#00CCFF`
7
11
  *
8
- * Ensures value is a string, enforces that the string is a valid Color.
9
- * Checks Color scheme against a whitelist (always), and checks Color domain against a whitelist (optional).
10
- * `null` is also a valid value if this field is not required.
12
+ * - Coerces the value to a six-digit uppercase `#RRGGBB` hex string.
13
+ * - Rejects anything that isn't a valid hex color (use `NULLABLE_COLOR` to also allow `null`).
11
14
  *
12
- * Colors are limited to 512 characters (this can be changed with `max`), but generally these won't be data: URIs so this is a reasonable limit.
15
+ * @example COLOR.validate("00ccff"); // Returns "#00CCFF"
16
+ * @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchema
13
17
  */
14
18
  export declare class ColorSchema extends StringSchema {
19
+ /**
20
+ * Create a new `ColorSchema`.
21
+ *
22
+ * @param options Options for the schema (inherits `StringSchema` options except `type`, `min`, `max`, `match`, and `rows`, which are fixed for hex colors).
23
+ * @param options.one Singular noun describing one value, used in error messages (defaults to `"color"`).
24
+ * @param options.title Title of the schema, e.g. for a corresponding field (defaults to `"Color"`).
25
+ * @param options.value Default hex value used when the input is `undefined` (defaults to `"#000000"`).
26
+ */
15
27
  constructor({ one, title, value, ...options }: ColorSchemaOptions);
28
+ /**
29
+ * Sanitize the string into a `#RRGGBB` hex color.
30
+ *
31
+ * - Uppercases the input and strips every non-hex character.
32
+ * - Prefixes the first six hex digits with `#`, or returns `""` when there are none.
33
+ *
34
+ * @param insaneString String to sanitize.
35
+ * @returns The sanitized hex color, or `""` if no hex digits are present.
36
+ * @example COLOR.sanitize("00ccff"); // Returns "#00CCFF"
37
+ * @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchema/sanitize
38
+ */
16
39
  sanitize(insaneString: string): string;
17
40
  }
18
- /** Valid color hex string, e.g. `#00CCFF` (required because empty string is invalid). */
41
+ /**
42
+ * Valid color hex string, e.g. `#00CCFF` (required because empty string is invalid).
43
+ *
44
+ * @example COLOR.validate("#00CCFF"); // Returns "#00CCFF"
45
+ * @see https://dhoulb.github.io/shelving/schema/ColorSchema/COLOR
46
+ */
19
47
  export declare const COLOR: ColorSchema;
20
- /** Valid color hex string, e.g. `#00CCFF`, or `null` */
48
+ /**
49
+ * Valid color hex string, e.g. `#00CCFF`, or `null`
50
+ *
51
+ * @example NULLABLE_COLOR.validate(null); // Returns null
52
+ * @see https://dhoulb.github.io/shelving/schema/ColorSchema/NULLABLE_COLOR
53
+ */
21
54
  export declare const NULLABLE_COLOR: import("./NullableSchema.js").NullableSchema<string>;
@@ -3,15 +3,23 @@ import { StringSchema } from "./StringSchema.js";
3
3
  const COLOR_REGEXP = /^#[0-9A-F]{6}$/;
4
4
  const NOT_HEX_REGEXP = /[^0-9A-F]/g;
5
5
  /**
6
- * Define a valid color hex string, e.g `#00CCFF`
6
+ * Schema that defines a valid color hex string, e.g. `#00CCFF`
7
7
  *
8
- * Ensures value is a string, enforces that the string is a valid Color.
9
- * Checks Color scheme against a whitelist (always), and checks Color domain against a whitelist (optional).
10
- * `null` is also a valid value if this field is not required.
8
+ * - Coerces the value to a six-digit uppercase `#RRGGBB` hex string.
9
+ * - Rejects anything that isn't a valid hex color (use `NULLABLE_COLOR` to also allow `null`).
11
10
  *
12
- * Colors are limited to 512 characters (this can be changed with `max`), but generally these won't be data: URIs so this is a reasonable limit.
11
+ * @example COLOR.validate("00ccff"); // Returns "#00CCFF"
12
+ * @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchema
13
13
  */
14
14
  export class ColorSchema extends StringSchema {
15
+ /**
16
+ * Create a new `ColorSchema`.
17
+ *
18
+ * @param options Options for the schema (inherits `StringSchema` options except `type`, `min`, `max`, `match`, and `rows`, which are fixed for hex colors).
19
+ * @param options.one Singular noun describing one value, used in error messages (defaults to `"color"`).
20
+ * @param options.title Title of the schema, e.g. for a corresponding field (defaults to `"Color"`).
21
+ * @param options.value Default hex value used when the input is `undefined` (defaults to `"#000000"`).
22
+ */
15
23
  constructor({ one = "color", title = "Color", value = "#000000", ...options }) {
16
24
  super({
17
25
  one,
@@ -25,12 +33,33 @@ export class ColorSchema extends StringSchema {
25
33
  match: COLOR_REGEXP,
26
34
  });
27
35
  }
36
+ /**
37
+ * Sanitize the string into a `#RRGGBB` hex color.
38
+ *
39
+ * - Uppercases the input and strips every non-hex character.
40
+ * - Prefixes the first six hex digits with `#`, or returns `""` when there are none.
41
+ *
42
+ * @param insaneString String to sanitize.
43
+ * @returns The sanitized hex color, or `""` if no hex digits are present.
44
+ * @example COLOR.sanitize("00ccff"); // Returns "#00CCFF"
45
+ * @see https://dhoulb.github.io/shelving/schema/ColorSchema/ColorSchema/sanitize
46
+ */
28
47
  sanitize(insaneString) {
29
48
  const saneString = insaneString.toUpperCase().replace(NOT_HEX_REGEXP, "");
30
49
  return saneString ? `#${saneString.slice(0, 6)}` : "";
31
50
  }
32
51
  }
33
- /** Valid color hex string, e.g. `#00CCFF` (required because empty string is invalid). */
52
+ /**
53
+ * Valid color hex string, e.g. `#00CCFF` (required because empty string is invalid).
54
+ *
55
+ * @example COLOR.validate("#00CCFF"); // Returns "#00CCFF"
56
+ * @see https://dhoulb.github.io/shelving/schema/ColorSchema/COLOR
57
+ */
34
58
  export const COLOR = new ColorSchema({});
35
- /** Valid color hex string, e.g. `#00CCFF`, or `null` */
59
+ /**
60
+ * Valid color hex string, e.g. `#00CCFF`, or `null`
61
+ *
62
+ * @example NULLABLE_COLOR.validate(null); // Returns null
63
+ * @see https://dhoulb.github.io/shelving/schema/ColorSchema/NULLABLE_COLOR
64
+ */
36
65
  export const NULLABLE_COLOR = NULLABLE(COLOR);
@@ -1,17 +1,57 @@
1
1
  import { type Country, type PossibleCountry } from "../util/geo.js";
2
2
  import { ChoiceSchema } from "./ChoiceSchema.js";
3
3
  import type { SchemaOptions } from "./Schema.js";
4
- /** Allowed options for `CountrySchema` */
4
+ /**
5
+ * Options for `CountrySchema`.
6
+ *
7
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchemaOptions
8
+ */
5
9
  export interface CountrySchemaOptions extends SchemaOptions {
6
10
  /** Country value, or `"detect"` to resolve from browser language. */
7
11
  readonly value?: PossibleCountry;
8
12
  }
9
- /** Schema that validates an ISO country code. */
13
+ /**
14
+ * Schema that defines a valid ISO 3166 country code, e.g. `GB`.
15
+ *
16
+ * - The input is coerced with `getCountry`, then checked against the known set of `COUNTRIES`.
17
+ * - A `value` of `"detect"` resolves the default country from the browser language.
18
+ *
19
+ * @example
20
+ * const schema = new CountrySchema({});
21
+ * schema.validate("GB"); // "GB"
22
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema
23
+ */
10
24
  export declare class CountrySchema extends ChoiceSchema<Country, PossibleCountry> {
25
+ /**
26
+ * Create a new `CountrySchema`.
27
+ *
28
+ * @param options Options for the schema (`value`, plus base `SchemaOptions`).
29
+ * @example new CountrySchema({ value: "GB" })
30
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema
31
+ */
11
32
  constructor({ one, title, value, ...options }?: CountrySchemaOptions);
33
+ /**
34
+ * Validate an unknown input value and return a valid country code.
35
+ *
36
+ * @param unsafeValue The value to validate (defaults to this schema's `value`).
37
+ * @returns The validated ISO 3166 country code.
38
+ * @throws `string` `"Required"` if the value is empty, or `` `Unknown ${one}` `` if it is not a known country.
39
+ * @example schema.validate("GB") // "GB"
40
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema/validate
41
+ */
12
42
  validate(unsafeValue?: unknown): Country;
13
43
  }
14
- /** Valid country code, e.g. `GB` (required because falsy values are invalid). */
44
+ /**
45
+ * Valid country code, e.g. `GB` (required because falsy values are invalid).
46
+ *
47
+ * @example COUNTRY.validate("GB") // "GB"
48
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/COUNTRY
49
+ */
15
50
  export declare const COUNTRY: CountrySchema;
16
- /** Valid country code, e.g. `GB`, or `null` */
51
+ /**
52
+ * Valid country code, e.g. `GB`, or `null`.
53
+ *
54
+ * @example NULLABLE_COUNTRY.validate(null) // null
55
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/NULLABLE_COUNTRY
56
+ */
17
57
  export declare const NULLABLE_COUNTRY: import("./NullableSchema.js").NullableSchema<"AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AN" | "AO" | "AQ" | "AR" | "AS" | "AT" | "AU" | "AW" | "AX" | "AZ" | "BA" | "BB" | "BD" | "BE" | "BF" | "BG" | "BH" | "BI" | "BJ" | "BL" | "BM" | "BN" | "BO" | "BR" | "BS" | "BT" | "BV" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" | "CF" | "CG" | "CH" | "CI" | "CK" | "CL" | "CM" | "CN" | "CO" | "CR" | "CU" | "CV" | "CX" | "CY" | "CZ" | "DE" | "DJ" | "DK" | "DM" | "DO" | "DZ" | "EC" | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "FI" | "FJ" | "FK" | "FM" | "FO" | "FR" | "GA" | "GB" | "GD" | "GE" | "GF" | "GG" | "GH" | "GI" | "GL" | "GM" | "GN" | "GP" | "GQ" | "GR" | "GS" | "GT" | "GU" | "GW" | "GY" | "HK" | "HM" | "HN" | "HR" | "HT" | "HU" | "ID" | "IE" | "IL" | "IM" | "IN" | "IO" | "IQ" | "IR" | "IS" | "IT" | "JE" | "JM" | "JO" | "JP" | "KE" | "KG" | "KH" | "KI" | "KM" | "KN" | "KP" | "KR" | "KW" | "KY" | "KZ" | "LA" | "LB" | "LC" | "LI" | "LK" | "LR" | "LS" | "LT" | "LU" | "LV" | "LY" | "MA" | "MC" | "MD" | "ME" | "MF" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO" | "MP" | "MQ" | "MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY" | "MZ" | "NA" | "NC" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP" | "NR" | "NU" | "NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK" | "PL" | "PM" | "PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "RE" | "RO" | "RS" | "RU" | "RW" | "SA" | "SB" | "SC" | "SD" | "SE" | "SG" | "SH" | "SI" | "SJ" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "ST" | "SV" | "SY" | "SZ" | "TC" | "TD" | "TF" | "TG" | "TH" | "TJ" | "TK" | "TL" | "TM" | "TN" | "TO" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" | "UG" | "UM" | "US" | "UY" | "UZ" | "VA" | "VC" | "VE" | "VG" | "VI" | "VN" | "VU" | "WF" | "WS" | "YE" | "YT" | "ZA" | "ZM" | "ZW">;
@@ -1,11 +1,37 @@
1
1
  import { COUNTRIES, getCountry } from "../util/geo.js";
2
2
  import { ChoiceSchema } from "./ChoiceSchema.js";
3
3
  import { NULLABLE } from "./NullableSchema.js";
4
- /** Schema that validates an ISO country code. */
4
+ /**
5
+ * Schema that defines a valid ISO 3166 country code, e.g. `GB`.
6
+ *
7
+ * - The input is coerced with `getCountry`, then checked against the known set of `COUNTRIES`.
8
+ * - A `value` of `"detect"` resolves the default country from the browser language.
9
+ *
10
+ * @example
11
+ * const schema = new CountrySchema({});
12
+ * schema.validate("GB"); // "GB"
13
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema
14
+ */
5
15
  export class CountrySchema extends ChoiceSchema {
16
+ /**
17
+ * Create a new `CountrySchema`.
18
+ *
19
+ * @param options Options for the schema (`value`, plus base `SchemaOptions`).
20
+ * @example new CountrySchema({ value: "GB" })
21
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema
22
+ */
6
23
  constructor({ one = "country", title = "Country", value = "detect", ...options } = {}) {
7
24
  super({ one, title, options: COUNTRIES, value, ...options });
8
25
  }
26
+ /**
27
+ * Validate an unknown input value and return a valid country code.
28
+ *
29
+ * @param unsafeValue The value to validate (defaults to this schema's `value`).
30
+ * @returns The validated ISO 3166 country code.
31
+ * @throws `string` `"Required"` if the value is empty, or `` `Unknown ${one}` `` if it is not a known country.
32
+ * @example schema.validate("GB") // "GB"
33
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/CountrySchema/validate
34
+ */
9
35
  validate(unsafeValue = this.value) {
10
36
  const country = getCountry(unsafeValue);
11
37
  if (country)
@@ -13,7 +39,17 @@ export class CountrySchema extends ChoiceSchema {
13
39
  throw unsafeValue === "detect" ? "Required" : `Unknown ${this.one}`;
14
40
  }
15
41
  }
16
- /** Valid country code, e.g. `GB` (required because falsy values are invalid). */
42
+ /**
43
+ * Valid country code, e.g. `GB` (required because falsy values are invalid).
44
+ *
45
+ * @example COUNTRY.validate("GB") // "GB"
46
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/COUNTRY
47
+ */
17
48
  export const COUNTRY = new CountrySchema({});
18
- /** Valid country code, e.g. `GB`, or `null` */
49
+ /**
50
+ * Valid country code, e.g. `GB`, or `null`.
51
+ *
52
+ * @example NULLABLE_COUNTRY.validate(null) // null
53
+ * @see https://dhoulb.github.io/shelving/schema/CountrySchema/NULLABLE_COUNTRY
54
+ */
19
55
  export const NULLABLE_COUNTRY = NULLABLE(COUNTRY);