@es-joy/jsoe 0.24.2 → 0.25.0

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 (525) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.ncurc.cjs +2 -2
  3. package/CHANGES.md +51 -0
  4. package/README.md +23 -13
  5. package/badges/coverage-badge.svg +1 -1
  6. package/dist/eslint.config.d.ts +3 -0
  7. package/dist/eslint.config.d.ts.map +1 -0
  8. package/dist/formatAndTypeChoices.d.ts +28 -30
  9. package/dist/formatAndTypeChoices.d.ts.map +1 -1
  10. package/dist/formats/indexedDBKey.d.ts.map +1 -1
  11. package/dist/formats/schema.d.ts +46 -3
  12. package/dist/formats/schema.d.ts.map +1 -1
  13. package/dist/formats/structuredCloning.d.ts +3 -0
  14. package/dist/formats/structuredCloning.d.ts.map +1 -1
  15. package/dist/formats.d.ts +24 -6
  16. package/dist/formats.d.ts.map +1 -1
  17. package/dist/fundamentalTypes/BooleanObjectType.d.ts.map +1 -1
  18. package/dist/fundamentalTypes/NumberObjectType.d.ts.map +1 -1
  19. package/dist/fundamentalTypes/StringObjectType.d.ts.map +1 -1
  20. package/dist/fundamentalTypes/arrayReferenceType.d.ts.map +1 -1
  21. package/dist/fundamentalTypes/arrayType.d.ts +7 -0
  22. package/dist/fundamentalTypes/arrayType.d.ts.map +1 -1
  23. package/dist/fundamentalTypes/bigintObjectType.d.ts.map +1 -1
  24. package/dist/fundamentalTypes/bigintType.d.ts +10 -0
  25. package/dist/fundamentalTypes/bigintType.d.ts.map +1 -1
  26. package/dist/fundamentalTypes/blobType.d.ts.map +1 -1
  27. package/dist/fundamentalTypes/booleanType.d.ts.map +1 -1
  28. package/dist/fundamentalTypes/catchType.d.ts +2 -2
  29. package/dist/fundamentalTypes/catchType.d.ts.map +1 -1
  30. package/dist/fundamentalTypes/dateType.d.ts.map +1 -1
  31. package/dist/fundamentalTypes/domexceptionType.d.ts.map +1 -1
  32. package/dist/fundamentalTypes/enumType.d.ts +2 -2
  33. package/dist/fundamentalTypes/enumType.d.ts.map +1 -1
  34. package/dist/fundamentalTypes/errorType.d.ts.map +1 -1
  35. package/dist/fundamentalTypes/fileType.d.ts +6 -0
  36. package/dist/fundamentalTypes/fileType.d.ts.map +1 -1
  37. package/dist/fundamentalTypes/functionType.d.ts.map +1 -1
  38. package/dist/fundamentalTypes/literalType.d.ts +3 -2
  39. package/dist/fundamentalTypes/literalType.d.ts.map +1 -1
  40. package/dist/fundamentalTypes/looseRecordType.d.ts +6 -0
  41. package/dist/fundamentalTypes/looseRecordType.d.ts.map +1 -0
  42. package/dist/fundamentalTypes/nanType.d.ts.map +1 -1
  43. package/dist/fundamentalTypes/neverType.d.ts +2 -2
  44. package/dist/fundamentalTypes/neverType.d.ts.map +1 -1
  45. package/dist/fundamentalTypes/noneditableType.d.ts.map +1 -1
  46. package/dist/fundamentalTypes/nullType.d.ts.map +1 -1
  47. package/dist/fundamentalTypes/numberType.d.ts.map +1 -1
  48. package/dist/fundamentalTypes/promiseType.d.ts.map +1 -1
  49. package/dist/fundamentalTypes/regexpType.d.ts.map +1 -1
  50. package/dist/fundamentalTypes/stringType.d.ts.map +1 -1
  51. package/dist/fundamentalTypes/symbolType.d.ts.map +1 -1
  52. package/dist/fundamentalTypes/undefinedType.d.ts.map +1 -1
  53. package/dist/fundamentalTypes/voidType.d.ts +2 -2
  54. package/dist/fundamentalTypes/voidType.d.ts.map +1 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +6 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/rollup.config.d.ts +30 -0
  59. package/dist/rollup.config.d.ts.map +1 -0
  60. package/dist/server.d.ts +2 -0
  61. package/dist/server.d.ts.map +1 -0
  62. package/dist/src/formatAndTypeChoices.d.ts +108 -0
  63. package/dist/src/formatAndTypeChoices.d.ts.map +1 -0
  64. package/dist/src/formats/arbitraryJS.d.ts +4 -0
  65. package/dist/src/formats/arbitraryJS.d.ts.map +1 -0
  66. package/dist/src/formats/indexedDBKey.d.ts +4 -0
  67. package/dist/src/formats/indexedDBKey.d.ts.map +1 -0
  68. package/dist/src/formats/json.d.ts +4 -0
  69. package/dist/src/formats/json.d.ts.map +1 -0
  70. package/dist/src/formats/schema.d.ts +17 -0
  71. package/dist/src/formats/schema.d.ts.map +1 -0
  72. package/dist/src/formats/structuredCloning.d.ts +19 -0
  73. package/dist/src/formats/structuredCloning.d.ts.map +1 -0
  74. package/dist/src/formats.d.ts +135 -0
  75. package/dist/src/formats.d.ts.map +1 -0
  76. package/dist/src/fundamentalTypes/BooleanObjectType.d.ts +8 -0
  77. package/dist/src/fundamentalTypes/BooleanObjectType.d.ts.map +1 -0
  78. package/dist/src/fundamentalTypes/NumberObjectType.d.ts +6 -0
  79. package/dist/src/fundamentalTypes/NumberObjectType.d.ts.map +1 -0
  80. package/dist/src/fundamentalTypes/StringObjectType.d.ts +6 -0
  81. package/dist/src/fundamentalTypes/StringObjectType.d.ts.map +1 -0
  82. package/dist/src/fundamentalTypes/arrayReferenceType.d.ts +8 -0
  83. package/dist/src/fundamentalTypes/arrayReferenceType.d.ts.map +1 -0
  84. package/dist/src/fundamentalTypes/arrayType.d.ts +29 -0
  85. package/dist/src/fundamentalTypes/arrayType.d.ts.map +1 -0
  86. package/dist/src/fundamentalTypes/bigintObjectType.d.ts +6 -0
  87. package/dist/src/fundamentalTypes/bigintObjectType.d.ts.map +1 -0
  88. package/dist/src/fundamentalTypes/bigintType.d.ts +6 -0
  89. package/dist/src/fundamentalTypes/bigintType.d.ts.map +1 -0
  90. package/dist/src/fundamentalTypes/blobType.d.ts +11 -0
  91. package/dist/src/fundamentalTypes/blobType.d.ts.map +1 -0
  92. package/dist/src/fundamentalTypes/booleanType.d.ts +8 -0
  93. package/dist/src/fundamentalTypes/booleanType.d.ts.map +1 -0
  94. package/dist/src/fundamentalTypes/catchType.d.ts +6 -0
  95. package/dist/src/fundamentalTypes/catchType.d.ts.map +1 -0
  96. package/dist/src/fundamentalTypes/dateType.d.ts +26 -0
  97. package/dist/src/fundamentalTypes/dateType.d.ts.map +1 -0
  98. package/dist/src/fundamentalTypes/domexceptionType.d.ts +6 -0
  99. package/dist/src/fundamentalTypes/domexceptionType.d.ts.map +1 -0
  100. package/dist/src/fundamentalTypes/enumType.d.ts +6 -0
  101. package/dist/src/fundamentalTypes/enumType.d.ts.map +1 -0
  102. package/dist/src/fundamentalTypes/errorType.d.ts +6 -0
  103. package/dist/src/fundamentalTypes/errorType.d.ts.map +1 -0
  104. package/dist/src/fundamentalTypes/fileType.d.ts +13 -0
  105. package/dist/src/fundamentalTypes/fileType.d.ts.map +1 -0
  106. package/dist/src/fundamentalTypes/filelistType.d.ts +6 -0
  107. package/dist/src/fundamentalTypes/filelistType.d.ts.map +1 -0
  108. package/dist/src/fundamentalTypes/functionType.d.ts +7 -0
  109. package/dist/src/fundamentalTypes/functionType.d.ts.map +1 -0
  110. package/dist/src/fundamentalTypes/literalType.d.ts +6 -0
  111. package/dist/src/fundamentalTypes/literalType.d.ts.map +1 -0
  112. package/dist/src/fundamentalTypes/mapType.d.ts +6 -0
  113. package/dist/src/fundamentalTypes/mapType.d.ts.map +1 -0
  114. package/dist/src/fundamentalTypes/nanType.d.ts +6 -0
  115. package/dist/src/fundamentalTypes/nanType.d.ts.map +1 -0
  116. package/dist/src/fundamentalTypes/neverType.d.ts +6 -0
  117. package/dist/src/fundamentalTypes/neverType.d.ts.map +1 -0
  118. package/dist/src/fundamentalTypes/noneditableType.d.ts +6 -0
  119. package/dist/src/fundamentalTypes/noneditableType.d.ts.map +1 -0
  120. package/dist/src/fundamentalTypes/nullType.d.ts +6 -0
  121. package/dist/src/fundamentalTypes/nullType.d.ts.map +1 -0
  122. package/dist/src/fundamentalTypes/numberType.d.ts +6 -0
  123. package/dist/src/fundamentalTypes/numberType.d.ts.map +1 -0
  124. package/dist/src/fundamentalTypes/objectReferenceType.d.ts +8 -0
  125. package/dist/src/fundamentalTypes/objectReferenceType.d.ts.map +1 -0
  126. package/dist/src/fundamentalTypes/objectType.d.ts +6 -0
  127. package/dist/src/fundamentalTypes/objectType.d.ts.map +1 -0
  128. package/dist/src/fundamentalTypes/promiseType.d.ts +6 -0
  129. package/dist/src/fundamentalTypes/promiseType.d.ts.map +1 -0
  130. package/dist/src/fundamentalTypes/recordType.d.ts +6 -0
  131. package/dist/src/fundamentalTypes/recordType.d.ts.map +1 -0
  132. package/dist/src/fundamentalTypes/regexpType.d.ts +8 -0
  133. package/dist/src/fundamentalTypes/regexpType.d.ts.map +1 -0
  134. package/dist/src/fundamentalTypes/setType.d.ts +6 -0
  135. package/dist/src/fundamentalTypes/setType.d.ts.map +1 -0
  136. package/dist/src/fundamentalTypes/sparseUndefinedType.d.ts +6 -0
  137. package/dist/src/fundamentalTypes/sparseUndefinedType.d.ts.map +1 -0
  138. package/dist/src/fundamentalTypes/stringType.d.ts +6 -0
  139. package/dist/src/fundamentalTypes/stringType.d.ts.map +1 -0
  140. package/dist/src/fundamentalTypes/symbolType.d.ts +8 -0
  141. package/dist/src/fundamentalTypes/symbolType.d.ts.map +1 -0
  142. package/dist/src/fundamentalTypes/tupleType.d.ts +6 -0
  143. package/dist/src/fundamentalTypes/tupleType.d.ts.map +1 -0
  144. package/dist/src/fundamentalTypes/undefinedType.d.ts +6 -0
  145. package/dist/src/fundamentalTypes/undefinedType.d.ts.map +1 -0
  146. package/dist/src/fundamentalTypes/voidType.d.ts +6 -0
  147. package/dist/src/fundamentalTypes/voidType.d.ts.map +1 -0
  148. package/dist/src/index.d.ts +12 -0
  149. package/dist/src/index.d.ts.map +1 -0
  150. package/dist/src/subTypes/blobHTMLType.d.ts +20 -0
  151. package/dist/src/subTypes/blobHTMLType.d.ts.map +1 -0
  152. package/dist/src/subTypes/falseType.d.ts +8 -0
  153. package/dist/src/subTypes/falseType.d.ts.map +1 -0
  154. package/dist/src/subTypes/trueType.d.ts +8 -0
  155. package/dist/src/subTypes/trueType.d.ts.map +1 -0
  156. package/dist/src/superTypes/SpecialNumberType.d.ts +6 -0
  157. package/dist/src/superTypes/SpecialNumberType.d.ts.map +1 -0
  158. package/dist/src/superTypes/SpecialRealNumberType.d.ts +6 -0
  159. package/dist/src/superTypes/SpecialRealNumberType.d.ts.map +1 -0
  160. package/dist/src/superTypes/buffersourceType.d.ts +8 -0
  161. package/dist/src/superTypes/buffersourceType.d.ts.map +1 -0
  162. package/dist/src/superTypes/dommatrixType.d.ts +6 -0
  163. package/dist/src/superTypes/dommatrixType.d.ts.map +1 -0
  164. package/dist/src/superTypes/dompointType.d.ts +6 -0
  165. package/dist/src/superTypes/dompointType.d.ts.map +1 -0
  166. package/dist/src/superTypes/domrectType.d.ts +6 -0
  167. package/dist/src/superTypes/domrectType.d.ts.map +1 -0
  168. package/dist/src/superTypes/errorsSpecialType.d.ts +8 -0
  169. package/dist/src/superTypes/errorsSpecialType.d.ts.map +1 -0
  170. package/dist/src/typeChoices.d.ts +140 -0
  171. package/dist/src/typeChoices.d.ts.map +1 -0
  172. package/dist/src/types.d.ts +758 -0
  173. package/dist/src/types.d.ts.map +1 -0
  174. package/dist/src/utils/FileList.d.ts +26 -0
  175. package/dist/src/utils/FileList.d.ts.map +1 -0
  176. package/dist/src/utils/dialogs.d.ts +111 -0
  177. package/dist/src/utils/dialogs.d.ts.map +1 -0
  178. package/dist/src/utils/jsonPointer.d.ts +46 -0
  179. package/dist/src/utils/jsonPointer.d.ts.map +1 -0
  180. package/dist/src/utils/media.d.ts +18 -0
  181. package/dist/src/utils/media.d.ts.map +1 -0
  182. package/dist/src/utils/objects.d.ts +16 -0
  183. package/dist/src/utils/objects.d.ts.map +1 -0
  184. package/dist/src/utils/templateUtils.d.ts +59 -0
  185. package/dist/src/utils/templateUtils.d.ts.map +1 -0
  186. package/dist/src/utils/types.d.ts +2 -0
  187. package/dist/src/utils/types.d.ts.map +1 -0
  188. package/dist/src/vendor-imports.d.ts +4 -0
  189. package/dist/src/vendor-imports.d.ts.map +1 -0
  190. package/dist/subTypes/blobHTMLType.d.ts.map +1 -1
  191. package/dist/superTypes/SpecialRealNumberType.d.ts.map +1 -1
  192. package/dist/superTypes/buffersourceType.d.ts.map +1 -1
  193. package/dist/superTypes/dommatrixType.d.ts.map +1 -1
  194. package/dist/superTypes/dompointType.d.ts.map +1 -1
  195. package/dist/superTypes/domrectType.d.ts.map +1 -1
  196. package/dist/superTypes/errorsSpecialType.d.ts.map +1 -1
  197. package/dist/typeChoices.d.ts +21 -87
  198. package/dist/typeChoices.d.ts.map +1 -1
  199. package/dist/types.d.ts +90 -64
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/utils/FileList.d.ts +4 -3
  202. package/dist/utils/FileList.d.ts.map +1 -1
  203. package/dist/utils/dialogs.d.ts +4 -4
  204. package/dist/utils/dialogs.d.ts.map +1 -1
  205. package/dist/utils/media.d.ts.map +1 -1
  206. package/dist/utils/schemaMeta.d.ts +92 -0
  207. package/dist/utils/schemaMeta.d.ts.map +1 -0
  208. package/dist/utils/templateUtils.d.ts +3 -3
  209. package/dist/utils/templateUtils.d.ts.map +1 -1
  210. package/dist/utils/timing.d.ts +2 -0
  211. package/dist/utils/timing.d.ts.map +1 -0
  212. package/dist/utils/types.d.ts +1 -0
  213. package/dist/utils/types.d.ts.map +1 -1
  214. package/dist/vendor-imports.d.ts +3 -1
  215. package/docs/proposals/schema-meta.md +233 -0
  216. package/eslint.config.js +51 -4
  217. package/licenseInfo.json +1 -1
  218. package/package.json +52 -42
  219. package/pnpm-workspace.yaml +57 -0
  220. package/rollup.config.js +20 -18
  221. package/server.js +3 -3
  222. package/src/deepEqual.js +77 -66
  223. package/src/deepEqual.js.map +1 -1
  224. package/src/formatAndTypeChoices.js +62 -58
  225. package/src/formats/indexedDBKey.js +3 -4
  226. package/src/formats/schema.js +824 -475
  227. package/src/formats/structuredCloning.js +189 -80
  228. package/src/formats.js +17 -5
  229. package/src/fundamentalTypes/BooleanObjectType.js +4 -5
  230. package/src/fundamentalTypes/NumberObjectType.js +4 -4
  231. package/src/fundamentalTypes/StringObjectType.js +3 -4
  232. package/src/fundamentalTypes/arrayReferenceType.js +0 -2
  233. package/src/fundamentalTypes/arrayType.js +624 -389
  234. package/src/fundamentalTypes/bigintObjectType.js +3 -2
  235. package/src/fundamentalTypes/bigintType.js +79 -17
  236. package/src/fundamentalTypes/blobType.js +35 -35
  237. package/src/fundamentalTypes/booleanType.js +16 -8
  238. package/src/fundamentalTypes/dateType.js +6 -8
  239. package/src/fundamentalTypes/domexceptionType.js +5 -4
  240. package/src/fundamentalTypes/errorType.js +39 -32
  241. package/src/fundamentalTypes/fileType.js +238 -52
  242. package/src/fundamentalTypes/functionType.js +61 -41
  243. package/src/fundamentalTypes/nanType.js +5 -4
  244. package/src/fundamentalTypes/noneditableType.js +4 -3
  245. package/src/fundamentalTypes/nullType.js +3 -2
  246. package/src/fundamentalTypes/numberType.js +72 -20
  247. package/src/fundamentalTypes/promiseType.js +16 -40
  248. package/src/fundamentalTypes/regexpType.js +7 -13
  249. package/src/fundamentalTypes/stringType.js +176 -110
  250. package/src/fundamentalTypes/symbolType.js +3 -2
  251. package/src/fundamentalTypes/undefinedType.js +3 -2
  252. package/src/index.js +6 -5
  253. package/src/jsoe.css +107 -8
  254. package/src/subTypes/blobHTMLType.js +23 -10
  255. package/src/superTypes/SpecialNumberType.js +6 -6
  256. package/src/superTypes/SpecialRealNumberType.js +10 -9
  257. package/src/superTypes/buffersourceType.js +86 -75
  258. package/src/superTypes/dommatrixType.js +6 -5
  259. package/src/superTypes/dompointType.js +6 -5
  260. package/src/superTypes/domrectType.js +6 -5
  261. package/src/superTypes/errorsSpecialType.js +54 -35
  262. package/src/typeChoices.js +373 -53
  263. package/src/types.js +157 -97
  264. package/src/utils/FileList.js +3 -3
  265. package/src/utils/dialogs.js +5 -7
  266. package/src/utils/jsonPointer.js +1 -1
  267. package/src/utils/media.js +1 -0
  268. package/src/utils/schemaMeta.js +257 -0
  269. package/src/utils/templateUtils.js +3 -3
  270. package/src/utils/timing.js +12 -0
  271. package/src/utils/types.js +19 -0
  272. package/src/vendor-imports.js +10 -2
  273. package/tsconfig.json +2 -0
  274. package/vendor/acorn/dist/acorn.d.mts +46 -5
  275. package/vendor/acorn/dist/acorn.d.ts +46 -5
  276. package/vendor/acorn/dist/acorn.js +394 -117
  277. package/vendor/acorn/dist/acorn.mjs +394 -117
  278. package/vendor/acorn/dist/bin.js +1 -1
  279. package/vendor/jamilih/dist/{jml-es.js → jml.mjs} +590 -312
  280. package/vendor/jamilih/package.json +1 -1
  281. package/vendor/mime/dist/types/other.js +719 -0
  282. package/vendor/mime/dist/types/standard.js +366 -0
  283. package/vendor/typeson-registry/dist/index.js +519 -99
  284. package/vendor/zod/classic/checks.d.ts +1 -0
  285. package/vendor/zod/classic/checks.js +1 -0
  286. package/vendor/zod/classic/coerce.d.ts +17 -0
  287. package/vendor/zod/classic/coerce.js +17 -0
  288. package/vendor/zod/classic/compat.d.ts +48 -0
  289. package/vendor/zod/classic/compat.js +31 -0
  290. package/vendor/zod/classic/deep-partial.d.ts +14 -0
  291. package/vendor/zod/classic/deep-partial.js +13 -0
  292. package/vendor/zod/classic/errors.d.ts +29 -0
  293. package/vendor/zod/classic/errors.js +57 -0
  294. package/vendor/zod/classic/external.d.ts +19 -0
  295. package/vendor/zod/classic/external.js +17 -0
  296. package/vendor/zod/classic/from-json-schema.d.ts +12 -0
  297. package/vendor/zod/classic/from-json-schema.js +660 -0
  298. package/vendor/zod/classic/in-out.d.ts +8 -0
  299. package/vendor/zod/classic/in-out.js +36 -0
  300. package/vendor/zod/classic/index.d.ts +3 -0
  301. package/vendor/zod/classic/index.js +4 -0
  302. package/vendor/zod/classic/iso.d.ts +7 -0
  303. package/vendor/zod/classic/iso.js +15 -0
  304. package/vendor/zod/classic/package.json +7 -0
  305. package/vendor/zod/classic/parse.d.ts +44 -0
  306. package/vendor/zod/classic/parse.js +16 -0
  307. package/vendor/zod/classic/schemas.d.ts +802 -0
  308. package/vendor/zod/classic/schemas.js +1491 -0
  309. package/vendor/zod/core/api.d.ts +329 -0
  310. package/vendor/zod/core/api.js +1104 -0
  311. package/vendor/zod/core/checks.d.ts +278 -0
  312. package/vendor/zod/core/checks.js +581 -0
  313. package/vendor/zod/core/compile.d.ts +51 -0
  314. package/vendor/zod/core/compile.js +1783 -0
  315. package/vendor/zod/core/core.d.ts +82 -0
  316. package/vendor/zod/core/core.js +141 -0
  317. package/vendor/zod/core/doc.d.ts +16 -0
  318. package/vendor/zod/core/doc.js +33 -0
  319. package/vendor/zod/core/errors.d.ts +225 -0
  320. package/vendor/zod/core/errors.js +270 -0
  321. package/vendor/zod/core/index.d.ts +19 -0
  322. package/vendor/zod/core/index.js +19 -0
  323. package/vendor/zod/core/json-schema-generator.d.ts +65 -0
  324. package/vendor/zod/core/json-schema-generator.js +99 -0
  325. package/vendor/zod/core/json-schema-processors.d.ts +49 -0
  326. package/vendor/zod/core/json-schema-processors.js +747 -0
  327. package/vendor/zod/core/json-schema.d.ts +89 -0
  328. package/vendor/zod/core/memoizer.d.ts +15 -0
  329. package/vendor/zod/core/memoizer.js +265 -0
  330. package/vendor/zod/core/package.json +7 -0
  331. package/vendor/zod/core/parse.d.ts +52 -0
  332. package/vendor/zod/core/parse.js +154 -0
  333. package/vendor/zod/core/regexes.d.ts +87 -0
  334. package/vendor/zod/core/regexes.js +150 -0
  335. package/vendor/zod/core/registries.d.ts +35 -0
  336. package/vendor/zod/core/registries.js +51 -0
  337. package/vendor/zod/core/schemas.d.ts +1253 -0
  338. package/vendor/zod/core/schemas.js +2440 -0
  339. package/vendor/zod/core/standard-schema.d.ts +126 -0
  340. package/vendor/zod/core/to-json-schema.d.ts +153 -0
  341. package/vendor/zod/core/to-json-schema.js +650 -0
  342. package/vendor/zod/core/util.d.ts +257 -0
  343. package/vendor/zod/core/util.js +846 -0
  344. package/vendor/zod/core/versions.d.ts +5 -0
  345. package/vendor/zod/core/versions.js +5 -0
  346. package/vendor/zod/core/visit.d.ts +30 -0
  347. package/vendor/zod/core/visit.js +169 -0
  348. package/vendor/zod/index.d.ts +3 -0
  349. package/vendor/zod/index.js +4 -0
  350. package/vendor/zod/locales/ar.d.ts +4 -0
  351. package/vendor/zod/locales/ar.js +109 -0
  352. package/vendor/zod/locales/az.d.ts +4 -0
  353. package/vendor/zod/locales/az.js +108 -0
  354. package/vendor/zod/locales/be.d.ts +4 -0
  355. package/vendor/zod/locales/be.js +166 -0
  356. package/vendor/zod/locales/bg.d.ts +4 -0
  357. package/vendor/zod/locales/bg.js +123 -0
  358. package/vendor/zod/locales/bn.d.ts +4 -0
  359. package/vendor/zod/locales/bn.js +111 -0
  360. package/vendor/zod/locales/ca.d.ts +4 -0
  361. package/vendor/zod/locales/ca.js +110 -0
  362. package/vendor/zod/locales/ckb.d.ts +4 -0
  363. package/vendor/zod/locales/ckb.js +131 -0
  364. package/vendor/zod/locales/cs.d.ts +4 -0
  365. package/vendor/zod/locales/cs.js +114 -0
  366. package/vendor/zod/locales/da.d.ts +4 -0
  367. package/vendor/zod/locales/da.js +118 -0
  368. package/vendor/zod/locales/de.d.ts +4 -0
  369. package/vendor/zod/locales/de.js +111 -0
  370. package/vendor/zod/locales/el.d.ts +4 -0
  371. package/vendor/zod/locales/el.js +110 -0
  372. package/vendor/zod/locales/en.d.ts +4 -0
  373. package/vendor/zod/locales/en.js +123 -0
  374. package/vendor/zod/locales/eo.d.ts +4 -0
  375. package/vendor/zod/locales/eo.js +112 -0
  376. package/vendor/zod/locales/es.d.ts +4 -0
  377. package/vendor/zod/locales/es.js +134 -0
  378. package/vendor/zod/locales/fa.d.ts +4 -0
  379. package/vendor/zod/locales/fa.js +117 -0
  380. package/vendor/zod/locales/fi.d.ts +4 -0
  381. package/vendor/zod/locales/fi.js +115 -0
  382. package/vendor/zod/locales/fr-CA.d.ts +4 -0
  383. package/vendor/zod/locales/fr-CA.js +110 -0
  384. package/vendor/zod/locales/fr.d.ts +4 -0
  385. package/vendor/zod/locales/fr.js +127 -0
  386. package/vendor/zod/locales/gu.d.ts +4 -0
  387. package/vendor/zod/locales/gu.js +111 -0
  388. package/vendor/zod/locales/he.d.ts +4 -0
  389. package/vendor/zod/locales/he.js +219 -0
  390. package/vendor/zod/locales/hi.d.ts +4 -0
  391. package/vendor/zod/locales/hi.js +109 -0
  392. package/vendor/zod/locales/hr.d.ts +4 -0
  393. package/vendor/zod/locales/hr.js +124 -0
  394. package/vendor/zod/locales/hu.d.ts +4 -0
  395. package/vendor/zod/locales/hu.js +111 -0
  396. package/vendor/zod/locales/hy.d.ts +4 -0
  397. package/vendor/zod/locales/hy.js +156 -0
  398. package/vendor/zod/locales/id.d.ts +4 -0
  399. package/vendor/zod/locales/id.js +109 -0
  400. package/vendor/zod/locales/index.d.ts +62 -0
  401. package/vendor/zod/locales/index.js +62 -0
  402. package/vendor/zod/locales/is.d.ts +4 -0
  403. package/vendor/zod/locales/is.js +112 -0
  404. package/vendor/zod/locales/it.d.ts +4 -0
  405. package/vendor/zod/locales/it.js +111 -0
  406. package/vendor/zod/locales/ja.d.ts +4 -0
  407. package/vendor/zod/locales/ja.js +110 -0
  408. package/vendor/zod/locales/ka.d.ts +4 -0
  409. package/vendor/zod/locales/ka.js +115 -0
  410. package/vendor/zod/locales/kh.d.ts +5 -0
  411. package/vendor/zod/locales/kh.js +5 -0
  412. package/vendor/zod/locales/km.d.ts +4 -0
  413. package/vendor/zod/locales/km.js +113 -0
  414. package/vendor/zod/locales/kn.d.ts +4 -0
  415. package/vendor/zod/locales/kn.js +114 -0
  416. package/vendor/zod/locales/ko.d.ts +4 -0
  417. package/vendor/zod/locales/ko.js +114 -0
  418. package/vendor/zod/locales/lt.d.ts +4 -0
  419. package/vendor/zod/locales/lt.js +205 -0
  420. package/vendor/zod/locales/mk.d.ts +4 -0
  421. package/vendor/zod/locales/mk.js +112 -0
  422. package/vendor/zod/locales/ms.d.ts +4 -0
  423. package/vendor/zod/locales/ms.js +110 -0
  424. package/vendor/zod/locales/ne.d.ts +4 -0
  425. package/vendor/zod/locales/ne.js +109 -0
  426. package/vendor/zod/locales/nl.d.ts +4 -0
  427. package/vendor/zod/locales/nl.js +113 -0
  428. package/vendor/zod/locales/nn.d.ts +4 -0
  429. package/vendor/zod/locales/nn.js +111 -0
  430. package/vendor/zod/locales/no.d.ts +4 -0
  431. package/vendor/zod/locales/no.js +111 -0
  432. package/vendor/zod/locales/ota.d.ts +4 -0
  433. package/vendor/zod/locales/ota.js +112 -0
  434. package/vendor/zod/locales/package.json +7 -0
  435. package/vendor/zod/locales/pl.d.ts +4 -0
  436. package/vendor/zod/locales/pl.js +112 -0
  437. package/vendor/zod/locales/ps.d.ts +4 -0
  438. package/vendor/zod/locales/ps.js +117 -0
  439. package/vendor/zod/locales/pt-BR.d.ts +4 -0
  440. package/vendor/zod/locales/pt-BR.js +141 -0
  441. package/vendor/zod/locales/pt.d.ts +4 -0
  442. package/vendor/zod/locales/pt.js +140 -0
  443. package/vendor/zod/locales/ro.d.ts +4 -0
  444. package/vendor/zod/locales/ro.js +120 -0
  445. package/vendor/zod/locales/ru.d.ts +4 -0
  446. package/vendor/zod/locales/ru.js +166 -0
  447. package/vendor/zod/locales/sk.d.ts +4 -0
  448. package/vendor/zod/locales/sk.js +114 -0
  449. package/vendor/zod/locales/sl.d.ts +4 -0
  450. package/vendor/zod/locales/sl.js +112 -0
  451. package/vendor/zod/locales/sv.d.ts +4 -0
  452. package/vendor/zod/locales/sv.js +113 -0
  453. package/vendor/zod/locales/ta.d.ts +4 -0
  454. package/vendor/zod/locales/ta.js +113 -0
  455. package/vendor/zod/locales/th.d.ts +4 -0
  456. package/vendor/zod/locales/th.js +113 -0
  457. package/vendor/zod/locales/tk.d.ts +4 -0
  458. package/vendor/zod/locales/tk.js +105 -0
  459. package/vendor/zod/locales/tr.d.ts +4 -0
  460. package/vendor/zod/locales/tr.js +108 -0
  461. package/vendor/zod/locales/ua.d.ts +5 -0
  462. package/vendor/zod/locales/ua.js +5 -0
  463. package/vendor/zod/locales/uk.d.ts +4 -0
  464. package/vendor/zod/locales/uk.js +111 -0
  465. package/vendor/zod/locales/ur.d.ts +4 -0
  466. package/vendor/zod/locales/ur.js +113 -0
  467. package/vendor/zod/locales/uz.d.ts +4 -0
  468. package/vendor/zod/locales/uz.js +111 -0
  469. package/vendor/zod/locales/vi.d.ts +4 -0
  470. package/vendor/zod/locales/vi.js +111 -0
  471. package/vendor/zod/locales/yo.d.ts +4 -0
  472. package/vendor/zod/locales/yo.js +110 -0
  473. package/vendor/zod/locales/zh-CN.d.ts +4 -0
  474. package/vendor/zod/locales/zh-CN.js +112 -0
  475. package/vendor/zod/locales/zh-TW.d.ts +4 -0
  476. package/vendor/zod/locales/zh-TW.js +110 -0
  477. package/vendor/zod/mini/checks.d.ts +1 -0
  478. package/vendor/zod/mini/checks.js +1 -0
  479. package/vendor/zod/mini/coerce.d.ts +7 -0
  480. package/vendor/zod/mini/coerce.js +22 -0
  481. package/vendor/zod/mini/deep-partial.d.ts +14 -0
  482. package/vendor/zod/mini/deep-partial.js +13 -0
  483. package/vendor/zod/mini/external.d.ts +16 -0
  484. package/vendor/zod/mini/external.js +16 -0
  485. package/vendor/zod/mini/in-out.d.ts +8 -0
  486. package/vendor/zod/mini/in-out.js +36 -0
  487. package/vendor/zod/mini/index.d.ts +3 -0
  488. package/vendor/zod/mini/index.js +3 -0
  489. package/vendor/zod/mini/iso.d.ts +22 -0
  490. package/vendor/zod/mini/iso.js +34 -0
  491. package/vendor/zod/mini/package.json +7 -0
  492. package/vendor/zod/mini/parse.d.ts +1 -0
  493. package/vendor/zod/mini/parse.js +1 -0
  494. package/vendor/zod/mini/schemas.d.ts +475 -0
  495. package/vendor/zod/mini/schemas.js +987 -0
  496. package/vendor/zod/package.json +7 -0
  497. package/vendor/zodexy/dist/esm/index.js +1274 -0
  498. package/vendor/zodexy/dist/index.js +1088 -0
  499. package/vendor/zodexy/dist/schema.zodexy.json +1036 -0
  500. package/dist/fundamentalTypes/nativeEnumType.d.ts +0 -6
  501. package/dist/fundamentalTypes/nativeEnumType.d.ts.map +0 -1
  502. package/src/fundamentalTypes/catchType.js +0 -140
  503. package/src/fundamentalTypes/enumType.js +0 -52
  504. package/src/fundamentalTypes/literalType.js +0 -81
  505. package/src/fundamentalTypes/nativeEnumType.js +0 -157
  506. package/src/fundamentalTypes/neverType.js +0 -49
  507. package/src/fundamentalTypes/recordType.js +0 -42
  508. package/src/fundamentalTypes/tupleType.js +0 -39
  509. package/src/fundamentalTypes/voidType.js +0 -48
  510. package/vendor/zod/lib/index.mjs +0 -4236
  511. package/vendor/zodex/dist/esm/dezerialize.d.ts +0 -26
  512. package/vendor/zodex/dist/esm/dezerialize.js +0 -393
  513. package/vendor/zodex/dist/esm/index.d.ts +0 -9
  514. package/vendor/zodex/dist/esm/index.js +0 -4
  515. package/vendor/zodex/dist/esm/infer.d.ts +0 -29
  516. package/vendor/zodex/dist/esm/package.json +0 -1
  517. package/vendor/zodex/dist/esm/types.d.ts +0 -201
  518. package/vendor/zodex/dist/esm/types.js +0 -13
  519. package/vendor/zodex/dist/esm/ui.d.ts +0 -23
  520. package/vendor/zodex/dist/esm/ui.js +0 -10
  521. package/vendor/zodex/dist/esm/zerialize.d.ts +0 -50
  522. package/vendor/zodex/dist/esm/zerialize.js +0 -417
  523. package/vendor/zodex/dist/esm/zod-types.d.ts +0 -11
  524. /package/vendor/{zodex/dist/esm/infer.js → zod/core/json-schema.js} +0 -0
  525. /package/vendor/{zodex/dist/esm/zod-types.js → zod/core/standard-schema.js} +0 -0
@@ -1,55 +1,8 @@
1
- import {datetimeRegex} from 'zod';
1
+ import {regexes, z} from 'zod';
2
2
  import {$e} from '../utils/templateUtils.js';
3
+ import {schemaLabel} from '../utils/schemaMeta.js';
3
4
 
4
- // Adapted from Zod: https://github.com/colinhacks/zod/blob/9257ab78eec366c04331a3c2d59deb344a02d9f6/src/types.ts
5
- const ipv4Regex =
6
- /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)$/u;
7
- const ipv6Regex =
8
- /^(([a-f\d]{1,4}:){7}|::([a-f\d]{1,4}:){0,6}|([a-f\d]{1,4}:):([a-f\d]{1,4}:){0,5}|([a-f\d]{1,4}:){2}:([a-f\d]{1,4}:){0,4}|([a-f\d]{1,4}:){3}:([a-f\d]{1,4}:){0,3}|([a-f\d]{1,4}:){4}:([a-f\d]{1,4}:){0,2}|([a-f\d]{1,4}:){5}:([a-f\d]{1,4}:)?)([a-f\d]{1,4}|(((25[0-5])|(2[0-4]\d)|(1\d{2})|(\d{1,2}))\.){3}((25[0-5])|(2[0-4]\d)|(1\d{2})|(\d{1,2})))$/u;
9
- // https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript
10
- const base64Regex =
11
- /^([\da-zA-Z+/]{4})*(([\da-zA-Z+/]{2}==)|([\da-zA-Z+/]{3}=))?$/u;
12
- // from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression
13
- const emojiRegexStr = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
14
- const emojiRegex = new RegExp(emojiRegexStr, 'u');
15
- const cuidRegex = /^c[^\s-]{8,}$/iu;
16
- const cuid2Regex = /^[\da-z]+$/u;
17
- const ulidRegex = /^[\dA-HJKMNP-TV-Z]{26}$/iu;
18
- const uuidRegex =
19
- /^[\da-f]{8}\b-[\da-f]{4}\b-[\da-f]{4}\b-[\da-f]{4}\b-[\da-f]{12}$/iu;
20
- const nanoidRegex = /^[a-z\d_-]{21}$/iu;
21
- const durationRegex =
22
- // eslint-disable-next-line sonarjs/no-empty-after-reluctant -- Ok
23
- /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/u;
24
- // End adapted from Zod
25
-
26
- /**
27
- * @param {{precision?: number|null}} args
28
- * @returns {string}
29
- */
30
- function timeRegexSource (args) {
31
- // let regex = `\\d{2}:\\d{2}:\\d{2}`;
32
- let regex = `([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d`;
33
-
34
- if (args.precision) {
35
- regex = `${regex}\\.\\d{${args.precision}}`;
36
- } else if (args.precision === null || args.precision === undefined) {
37
- regex = `${regex}(\\.\\d+)?`;
38
- }
39
- return regex;
40
- }
41
-
42
- /**
43
- * @param {{
44
- * offset?: boolean;
45
- * local?: boolean;
46
- * precision?: number|null;
47
- * }} args
48
- * @returns {RegExp}
49
- */
50
- function timeRegex (args) {
51
- return new RegExp(`^${timeRegexSource(args)}$`, 'u');
52
- }
5
+ const cidrv6Schema = z.cidrv6();
53
6
 
54
7
  /**
55
8
  * @type {import('../types.js').TypeObject}
@@ -65,7 +18,7 @@ const stringType = {
65
18
  },
66
19
  getInput ({root}) {
67
20
  return /** @type {HTMLTextAreaElement} */ (
68
- $e(root, '[data-type="string"] > textarea,input')
21
+ $e(root, '[data-type="string"] > textarea,input,select')
69
22
  );
70
23
  },
71
24
  setValue ({root, value}) {
@@ -75,27 +28,31 @@ const stringType = {
75
28
  return this.getInput({root}).value;
76
29
  },
77
30
  viewUI ({value, specificSchemaObject}) {
78
- const kind = /** @type {import('zodex').SzString} */ (
79
- specificSchemaObject
80
- // @ts-expect-error Does exist
81
- )?.kind;
31
+ const kind = specificSchemaObject && 'kind' in specificSchemaObject &&
32
+ specificSchemaObject.kind;
33
+ // `z.stringbool()` serializes as a string -> boolean `pipe` carrying
34
+ // `truthy`/`falsy` token arrays; jsoe edits its encoded (string) side.
35
+ const isStringbool = specificSchemaObject &&
36
+ 'truthy' in specificSchemaObject && 'falsy' in specificSchemaObject;
82
37
  return ['span', {
83
38
  dataset: {type: 'string'},
84
- title: specificSchemaObject?.description ??
85
- (kind === 'email'
86
- ? `(an ${kind} string)`
87
- : kind
88
- ? `(a ${kind} string)` // url, date
89
- : '(a string)')
39
+ title: schemaLabel(specificSchemaObject) ??
40
+ (isStringbool
41
+ ? '(a string boolean)'
42
+ : kind === 'email'
43
+ ? `(an ${kind} string)`
44
+ : kind
45
+ ? `(a ${kind} string)` // url, date
46
+ : '(a string)')
90
47
  }, [value]];
91
48
  },
92
- editUI ({typeNamespace, specificSchemaObject, value}) {
93
- const stringSchemaObject = /** @type {import('zodex').SzString} */ (
94
- specificSchemaObject
49
+ editUI ({typeNamespace, specificSchemaObject, types, value}) {
50
+ const stringSchemaObject = /** @type {import('zodexy').SzString} */ (
51
+ specificSchemaObject ?? {type: 'string'}
95
52
  );
96
- // @ts-expect-error Does exist
97
- const kind = stringSchemaObject?.kind;
98
- const isLiteral = specificSchemaObject?.type === 'literal';
53
+ const kind = 'kind' in stringSchemaObject ? stringSchemaObject.kind : null;
54
+ const isConstrained = specificSchemaObject?.type === 'literal' ||
55
+ specificSchemaObject?.type === 'enum';
99
56
  const minlength = stringSchemaObject?.min ?? stringSchemaObject?.length;
100
57
  const maxlength = stringSchemaObject?.max ?? stringSchemaObject?.length;
101
58
 
@@ -106,20 +63,48 @@ const stringType = {
106
63
  const toUpperCase = stringSchemaObject?.toUpperCase;
107
64
  const trim = stringSchemaObject?.trim;
108
65
 
109
- // @ts-expect-error It is indeed potentially present
110
- const includes = stringSchemaObject?.includes;
111
- // @ts-expect-error It is indeed potentially present
112
- const position = stringSchemaObject?.position;
66
+ const includes = 'includes' in stringSchemaObject &&
67
+ stringSchemaObject.includes;
68
+ const position = 'position' in stringSchemaObject
69
+ ? stringSchemaObject.position
70
+ : undefined;
113
71
 
114
- // @ts-expect-error It is indeed potentially present
115
- const regex = stringSchemaObject?.regex;
116
- // @ts-expect-error It is indeed potentially present
117
- const flags = stringSchemaObject?.flags;
72
+ const regex = 'regex' in stringSchemaObject &&
73
+ stringSchemaObject.regex;
74
+ const pattern = kind === 'email' && 'pattern' in stringSchemaObject
75
+ ? stringSchemaObject.pattern
76
+ : undefined;
77
+ const flags = 'flags' in stringSchemaObject
78
+ ? stringSchemaObject.flags
79
+ : undefined;
80
+
81
+ // A `z.stringbool()` codec serializes as a string -> boolean `pipe` that
82
+ // carries `truthy`/`falsy` token arrays (and an optional `case`). jsoe
83
+ // edits the encoded (string) side, so it is handled here as a String
84
+ // whose value must be one of those recognized tokens.
85
+ const stringbool = /** @type {{truthy?: string[], falsy?: string[], case?: string}} */ (
86
+ stringSchemaObject
87
+ );
88
+ const stringboolTokens = Array.isArray(stringbool.truthy) &&
89
+ Array.isArray(stringbool.falsy)
90
+ ? [...stringbool.truthy, ...stringbool.falsy]
91
+ : null;
118
92
 
119
93
  /**
120
94
  * @param {string} value
121
95
  */
122
96
  const checkValue = (value) => {
97
+ if (stringboolTokens) {
98
+ const sensitive = stringbool.case === 'sensitive';
99
+ const compare = sensitive ? value : value.toLowerCase();
100
+ const matched = stringboolTokens.some((token) => {
101
+ return (sensitive ? token : token.toLowerCase()) === compare;
102
+ });
103
+ if (!matched) {
104
+ return `Value is not a recognized string boolean; expected one ` +
105
+ `of: ${stringboolTokens.join(', ')}`;
106
+ }
107
+ }
123
108
  if (startsWith && !value.startsWith(startsWith)) {
124
109
  return `Value doesn't start with expected: ${startsWith}`;
125
110
  }
@@ -136,74 +121,136 @@ const stringType = {
136
121
  flags ? ` with flags: ${flags}` : ''
137
122
  }`;
138
123
  }
124
+ if (pattern && !(new RegExp(pattern, flags ?? '')).test(value)) {
125
+ return `Value doesn't match email pattern: ${pattern}${
126
+ flags ? ` with flags: ${flags}` : ''
127
+ }`;
128
+ }
139
129
  if (kind) {
140
130
  switch (kind) {
131
+ case 'credit_card':
132
+ if (!regexes.creditCard.test(value)) {
133
+ return `Value doesn't match credit card pattern.`;
134
+ }
135
+ break;
141
136
  case 'ip':
142
- // @ts-expect-error Is present
143
- switch (stringSchemaObject?.version) {
137
+ switch ('version' in stringSchemaObject &&
138
+ stringSchemaObject.version) {
144
139
  case 'v4':
145
- if (!ipv4Regex.test(value)) {
140
+ if (!regexes.ipv4.test(value)) {
146
141
  return `Value doesn't match IP v4 pattern.`;
147
142
  }
148
143
  break;
149
144
  default:
150
- if (!ipv6Regex.test(value)) {
145
+ if (!regexes.ipv6.test(value)) {
151
146
  return `Value doesn't match IP v6 pattern.`;
152
147
  }
153
148
  }
154
149
  break;
155
150
  case 'time':
156
151
  // @ts-expect-error It is present
157
- if (!timeRegex(stringSchemaObject).test(value)) {
152
+ if (!regexes.time(stringSchemaObject).test(value)) {
158
153
  return `Value does not match time/precision.`;
159
154
  }
160
155
  break;
161
156
  case 'datetime':
162
157
  // @ts-expect-error It is present
163
- if (!datetimeRegex(stringSchemaObject).test(value)) {
158
+ if (!regexes.datetime(stringSchemaObject).test(value)) {
164
159
  return `Value does not match datetime/precision/offset/local`;
165
160
  }
166
161
  break;
167
162
  case 'emoji':
168
- if (!emojiRegex.test(value)) {
163
+ if (!regexes.emoji().test(value)) {
169
164
  return `Value does not match emoji pattern`;
170
165
  }
171
166
  break;
172
167
  case 'uuid':
173
- if (!uuidRegex.test(value)) {
168
+ if (!regexes.uuid(
169
+ 'version' in stringSchemaObject && stringSchemaObject.version
170
+ ? Number(stringSchemaObject.version.slice(1))
171
+ : undefined
172
+ ).test(value)) {
174
173
  return `Value does not match uuid pattern`;
175
174
  }
176
175
  break;
176
+ case 'jwt':
177
+ if (!z.jwt(
178
+ 'algorithm' in stringSchemaObject
179
+ ? {alg: stringSchemaObject.algorithm}
180
+ : undefined
181
+ ).safeParse(value).success) {
182
+ return `Value does not match jwt pattern`;
183
+ }
184
+ break;
185
+ case 'e164':
186
+ case 'xid':
187
+ case 'guid':
188
+ case 'ksuid':
189
+ if (!regexes[kind].test(value)) {
190
+ return `Value does not match ${kind} pattern`;
191
+ }
192
+ break;
177
193
  case 'nanoid':
178
- if (!nanoidRegex.test(value)) {
194
+ if ('length' in stringSchemaObject && stringSchemaObject.length) {
195
+ if (value.length !== stringSchemaObject.length) {
196
+ return `Nanoid value is not of the expected length: ${
197
+ stringSchemaObject.length
198
+ }`;
199
+ }
200
+
201
+ if (!regexes.nanoidOfLength(15).test(value)) {
202
+ return `Value does not match nanoid pattern`;
203
+ }
204
+ break;
205
+ }
206
+ if (!regexes.nanoid.test(value)) {
179
207
  return `Value does not match nanoid pattern`;
180
208
  }
181
209
  break;
182
210
  case 'cuid':
183
- if (!cuidRegex.test(value)) {
211
+ if (!regexes.cuid.test(value)) {
184
212
  return `Value does not match cuid pattern`;
185
213
  }
186
214
  break;
187
215
  case 'cuid2':
188
- if (!cuid2Regex.test(value)) {
216
+ if (!regexes.cuid2.test(value)) {
189
217
  return `Value does not match cuid2 pattern`;
190
218
  }
191
219
  break;
192
220
  case 'ulid':
193
- if (!ulidRegex.test(value)) {
221
+ if (!regexes.ulid.test(value)) {
194
222
  return `Value does not match ulid pattern`;
195
223
  }
196
224
  break;
197
225
  case 'duration':
198
- if (!durationRegex.test(value)) {
226
+ if (!regexes.duration.test(value)) {
199
227
  return `Value does not match duration pattern`;
200
228
  }
201
229
  break;
202
230
  case 'base64':
203
- if (!base64Regex.test(value)) {
231
+ if (!regexes.base64.test(value)) {
204
232
  return `Value does not match base64 pattern`;
205
233
  }
206
234
  break;
235
+ case 'base64url':
236
+ if (!regexes.base64url.test(value)) {
237
+ return `Value does not match base64url pattern`;
238
+ }
239
+ break;
240
+ case 'cidr':
241
+ switch ('version' in stringSchemaObject &&
242
+ stringSchemaObject.version) {
243
+ case 'v4':
244
+ if (!regexes.cidrv4.test(value)) {
245
+ return `Value doesn't match IP v4 cidr pattern.`;
246
+ }
247
+ break;
248
+ default:
249
+ if (!cidrv6Schema.safeParse(value).success) {
250
+ return `Value doesn't match IP v6 cidr pattern.`;
251
+ }
252
+ }
253
+ break;
207
254
  default:
208
255
  // 'email'|'url'|'date' should already be handled by the input element
209
256
  break;
@@ -230,9 +277,9 @@ const stringType = {
230
277
 
231
278
  return ['div', {
232
279
  dataset: {type: 'string'},
233
- title: specificSchemaObject?.description ?? 'String'
280
+ title: schemaLabel(specificSchemaObject) ?? 'String'
234
281
  }, [
235
- [
282
+ kind && [
236
283
  // There is a `time` and `datetime-local` but they don't
237
284
  // support milliseconds
238
285
  'email', 'url', 'date'
@@ -243,7 +290,11 @@ const stringType = {
243
290
  const that = /** @type {HTMLInputElement} */ (this);
244
291
  that.value = transform(that.value);
245
292
  const message = checkValue(that.value);
246
- that.setCustomValidity(message ?? '');
293
+ that.setCustomValidity(types.getValidationMessage({
294
+ message,
295
+ schema: specificSchemaObject,
296
+ typeSpecific: true
297
+ }) ?? '');
247
298
  that.reportValidity();
248
299
  }
249
300
  },
@@ -255,24 +306,39 @@ const stringType = {
255
306
  minlength: kind === 'date' ? undefined : minlength,
256
307
  maxlength: kind === 'date' ? undefined : maxlength
257
308
  }]
258
- : ['textarea', {
259
- $on: {
260
- change () {
261
- const that = /** @type {HTMLTextAreaElement} */ (this);
262
- that.value = transform(that.value);
263
- const message = checkValue(that.value);
264
- that.setCustomValidity(message ?? '');
265
- that.reportValidity();
266
- }
267
- },
268
- name: `${typeNamespace}-string`,
269
- disabled: isLiteral,
270
- minlength, maxlength
271
- }, [
272
- isLiteral
273
- ? specificSchemaObject?.value
274
- : (value ?? specificSchemaObject?.defaultValue ?? '')
275
- ]]
309
+ : isConstrained
310
+ ? ['select', {
311
+ name: `${typeNamespace}-string`
312
+ }, Object.values(specificSchemaObject.values).filter((
313
+ /** @type {string} */ val
314
+ ) => {
315
+ return typeof val === 'string';
316
+ }).map((
317
+ /** @type {string} */ val
318
+ ) => {
319
+ return ['option', {
320
+ selected: val === (value ?? specificSchemaObject.defaultValue)
321
+ }, [val]];
322
+ })]
323
+ : ['textarea', {
324
+ $on: {
325
+ change () {
326
+ const that = /** @type {HTMLTextAreaElement} */ (this);
327
+ that.value = transform(that.value);
328
+ const message = checkValue(that.value);
329
+ that.setCustomValidity(types.getValidationMessage({
330
+ message,
331
+ schema: specificSchemaObject,
332
+ typeSpecific: true
333
+ }) ?? '');
334
+ that.reportValidity();
335
+ }
336
+ },
337
+ name: `${typeNamespace}-string`,
338
+ minlength, maxlength
339
+ }, [
340
+ (value ?? specificSchemaObject?.defaultValue ?? '')
341
+ ]]
276
342
  ]];
277
343
  }
278
344
  };
@@ -1,4 +1,5 @@
1
1
  import {$e} from '../utils/templateUtils.js';
2
+ import {schemaLabel} from '../utils/schemaMeta.js';
2
3
 
3
4
  /**
4
5
  * @type {import('../types.js').TypeObject & {ct: number}}
@@ -49,7 +50,7 @@ const symbolType = {
49
50
  viewUI ({value, specificSchemaObject}) {
50
51
  return ['span', {
51
52
  dataset: {type: 'symbol'},
52
- title: specificSchemaObject?.description ?? '(a Symbol)'
53
+ title: schemaLabel(specificSchemaObject) ?? '(a Symbol)'
53
54
  }, [
54
55
  Symbol.keyFor(value) === undefined ? '' : ['b', ['Global: ']],
55
56
  String(value).slice(7, -1)
@@ -59,7 +60,7 @@ const symbolType = {
59
60
  this.ct++;
60
61
  return ['div', {
61
62
  dataset: {type: 'symbol'},
62
- title: specificSchemaObject?.description ?? '(a Symbol)'
63
+ title: schemaLabel(specificSchemaObject) ?? '(a Symbol)'
63
64
  }, [
64
65
  ['label', [
65
66
  'Symbol()',
@@ -1,4 +1,5 @@
1
1
  import {$e} from '../utils/templateUtils.js';
2
+ import {schemaLabel} from '../utils/schemaMeta.js';
2
3
 
3
4
  /**
4
5
  * @type {import('../types.js').TypeObject}
@@ -20,7 +21,7 @@ const undefinedType = {
20
21
  viewUI ({specificSchemaObject}) {
21
22
  return ['i', {
22
23
  dataset: {type: 'undef'},
23
- title: specificSchemaObject?.description ?? '(an `undefined`)'
24
+ title: schemaLabel(specificSchemaObject) ?? '(an `undefined`)'
24
25
  }, ['undefined']];
25
26
  },
26
27
  /* istanbul ignore next -- No dupe keys, array refs, or validation */
@@ -30,7 +31,7 @@ const undefinedType = {
30
31
  editUI ({typeNamespace, specificSchemaObject}) {
31
32
  return ['div', {
32
33
  dataset: {type: 'undef'},
33
- title: specificSchemaObject?.description ?? 'Undefined'
34
+ title: schemaLabel(specificSchemaObject) ?? 'Undefined'
34
35
  }, [
35
36
  ['label', [
36
37
  'Undefined',
package/src/index.js CHANGED
@@ -1,13 +1,14 @@
1
+ /* eslint-disable unicorn/no-barrel-files -- Has own typedefs */
1
2
  /**
2
3
  * @typedef {import('./formatAndTypeChoices.js').TypeRootGetter} TypeRootGetter
3
4
  */
4
5
  /**
5
6
  * @typedef {(cfg: {
6
- * type: string,
7
- * baseValue?: import('./formats.js').StructuredCloneValue,
8
- * bringIntoFocus?: boolean
9
- * }) => void} SetType
10
- */
7
+ * type: string,
8
+ * baseValue?: import('./formats.js').StructuredCloneValue,
9
+ * bringIntoFocus?: boolean
10
+ * }) => void} SetType
11
+ */
11
12
 
12
13
  export {default as Types} from './types.js';
13
14
 
package/src/jsoe.css CHANGED
@@ -2,6 +2,110 @@ input:invalid {
2
2
  background-color: pink;
3
3
  }
4
4
 
5
+ .schema-meta {
6
+ display: inline-block;
7
+ margin-inline-start: 0.25em;
8
+ }
9
+ .schema-meta-toggle {
10
+ border: 0;
11
+ padding: 0;
12
+ background: none;
13
+ cursor: help;
14
+ font-size: 0.85em;
15
+ line-height: 1;
16
+ color: #555;
17
+ }
18
+ .schema-meta-toggle::before {
19
+ content: "\24D8"; /* ⓘ */
20
+ }
21
+ .schema-meta-table {
22
+ border-collapse: collapse;
23
+ margin-block-start: 0.25em;
24
+ font-size: 0.85em;
25
+ }
26
+ .schema-meta-table th,
27
+ .schema-meta-table td {
28
+ border: 1px solid #ccc;
29
+ padding: 1px 4px;
30
+ text-align: start;
31
+ vertical-align: top;
32
+ }
33
+ .schema-meta-table th {
34
+ font-weight: bold;
35
+ white-space: nowrap;
36
+ }
37
+ /* Deprecation. `.schema-deprecated` lands on the type root, whose element and
38
+ internal label placement vary too much for a reliable CSS strike-through, so
39
+ the consistent signal is on the always-present metadata toggle: a muted-red
40
+ glyph with a "deprecated" tag. Where the root itself is an inline label
41
+ element, also strike it. */
42
+ .schema-deprecated > .schema-meta .schema-meta-toggle {
43
+ color: #b00020;
44
+ }
45
+ .schema-deprecated > .schema-meta .schema-meta-toggle::after {
46
+ content: " deprecated";
47
+ font-size: 0.85em;
48
+ font-style: italic;
49
+ }
50
+ /* Struck through where the class lands on an element that is itself a label:
51
+ an inline type root (viewUI leaf) or a property/item `<legend>` (editUI). */
52
+ span.schema-deprecated,
53
+ b.schema-deprecated,
54
+ i.schema-deprecated,
55
+ legend.schema-deprecated {
56
+ text-decoration: line-through;
57
+ }
58
+ .schema-deprecated > .schema-meta {
59
+ text-decoration: none;
60
+ }
61
+
62
+ /* `xor` (exclusive union) type choices: a "choose exactly one" radio list */
63
+ fieldset.xorTypeChoices {
64
+ display: inline-block;
65
+ margin: 0;
66
+ margin-top: .5em;
67
+ margin-bottom: .5em;
68
+ padding: 0.3em 0.6em 0.4em;
69
+ border: 1px solid #ccc;
70
+ border-radius: 4px;
71
+ vertical-align: top;
72
+ }
73
+
74
+ fieldset.xorTypeChoices > legend.xorTypeChoicesLegend {
75
+ padding: 0 0.3em;
76
+ font-size: 0.8em;
77
+ text-transform: uppercase;
78
+ letter-spacing: 0.05em;
79
+ color: white;
80
+ background-color: gray;
81
+ }
82
+
83
+ fieldset.xorTypeChoices label.xorTypeChoice {
84
+ display: flex;
85
+ align-items: baseline;
86
+ gap: 0.4em;
87
+ padding: 0.15em 0;
88
+ cursor: pointer;
89
+ }
90
+
91
+ fieldset.xorTypeChoices label.xorTypeChoice > input {
92
+ flex: none;
93
+ }
94
+
95
+ /* Live "N of M branches match" indicator; `xor` needs exactly one */
96
+ fieldset.xorTypeChoices .xorMatchStatus {
97
+ margin-top: 0.3em;
98
+ font-size: 0.85em;
99
+ }
100
+
101
+ fieldset.xorTypeChoices .xorMatchStatus.xorMatchOk {
102
+ color: #2e7d32;
103
+ }
104
+
105
+ fieldset.xorTypeChoices .xorMatchStatus.xorMatchErr {
106
+ color: #c62828;
107
+ }
108
+
5
109
  b.emphasis {
6
110
  text-decoration: underline;
7
111
  }
@@ -43,7 +147,7 @@ video.recordedMedia {
43
147
  background-color: 1px solid pink !important;
44
148
  }
45
149
 
46
- [data-type="undef"], [data-type="void"] {
150
+ [data-type="undef"] {
47
151
  background-color: green;
48
152
  }
49
153
  [data-type="null"] {
@@ -76,10 +180,6 @@ video.recordedMedia {
76
180
  background-color: orange;
77
181
  }
78
182
 
79
- [data-type="literal"] {
80
- background-color: lightblue;
81
- }
82
-
83
183
  [data-type="symbol"] {
84
184
  background-color: lightgreen;
85
185
  }
@@ -139,11 +239,10 @@ video.recordedMedia {
139
239
 
140
240
  [data-type="map"], [data-type="set"],
141
241
  [data-type="bigint"], [data-type="bigintObject"],
142
- [data-type="never"], [data-type="domexception"],
242
+ [data-type="domexception"],
143
243
  [data-type="resurrectable"], /* i.e., `noneditable` */
144
244
  [data-type="domrect"], [data-type="dompoint"],
145
- [data-type="dommatrix"],
146
- [data-type="catch"], [data-type="enum"], [data-type="nativeEnum"] {
245
+ [data-type="dommatrix"] {
147
246
  background-color: lightgray;
148
247
  }
149
248