@es-joy/jsoe 0.24.3 → 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 (524) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.ncurc.cjs +2 -2
  3. package/CHANGES.md +47 -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.map +1 -1
  223. package/src/formatAndTypeChoices.js +62 -58
  224. package/src/formats/indexedDBKey.js +3 -4
  225. package/src/formats/schema.js +824 -475
  226. package/src/formats/structuredCloning.js +189 -79
  227. package/src/formats.js +17 -5
  228. package/src/fundamentalTypes/BooleanObjectType.js +4 -5
  229. package/src/fundamentalTypes/NumberObjectType.js +4 -4
  230. package/src/fundamentalTypes/StringObjectType.js +3 -4
  231. package/src/fundamentalTypes/arrayReferenceType.js +0 -2
  232. package/src/fundamentalTypes/arrayType.js +624 -389
  233. package/src/fundamentalTypes/bigintObjectType.js +3 -2
  234. package/src/fundamentalTypes/bigintType.js +79 -17
  235. package/src/fundamentalTypes/blobType.js +35 -35
  236. package/src/fundamentalTypes/booleanType.js +16 -8
  237. package/src/fundamentalTypes/dateType.js +6 -8
  238. package/src/fundamentalTypes/domexceptionType.js +5 -4
  239. package/src/fundamentalTypes/errorType.js +39 -32
  240. package/src/fundamentalTypes/fileType.js +238 -52
  241. package/src/fundamentalTypes/functionType.js +61 -41
  242. package/src/fundamentalTypes/nanType.js +5 -4
  243. package/src/fundamentalTypes/noneditableType.js +4 -3
  244. package/src/fundamentalTypes/nullType.js +3 -2
  245. package/src/fundamentalTypes/numberType.js +72 -20
  246. package/src/fundamentalTypes/promiseType.js +16 -40
  247. package/src/fundamentalTypes/regexpType.js +7 -13
  248. package/src/fundamentalTypes/stringType.js +176 -110
  249. package/src/fundamentalTypes/symbolType.js +3 -2
  250. package/src/fundamentalTypes/undefinedType.js +3 -2
  251. package/src/index.js +6 -5
  252. package/src/jsoe.css +107 -8
  253. package/src/subTypes/blobHTMLType.js +23 -10
  254. package/src/superTypes/SpecialNumberType.js +6 -6
  255. package/src/superTypes/SpecialRealNumberType.js +10 -9
  256. package/src/superTypes/buffersourceType.js +86 -75
  257. package/src/superTypes/dommatrixType.js +6 -5
  258. package/src/superTypes/dompointType.js +6 -5
  259. package/src/superTypes/domrectType.js +6 -5
  260. package/src/superTypes/errorsSpecialType.js +54 -35
  261. package/src/typeChoices.js +373 -53
  262. package/src/types.js +157 -97
  263. package/src/utils/FileList.js +3 -3
  264. package/src/utils/dialogs.js +5 -7
  265. package/src/utils/jsonPointer.js +1 -1
  266. package/src/utils/media.js +1 -0
  267. package/src/utils/schemaMeta.js +257 -0
  268. package/src/utils/templateUtils.js +3 -3
  269. package/src/utils/timing.js +12 -0
  270. package/src/utils/types.js +19 -0
  271. package/src/vendor-imports.js +10 -2
  272. package/tsconfig.json +2 -0
  273. package/vendor/acorn/dist/acorn.d.mts +46 -5
  274. package/vendor/acorn/dist/acorn.d.ts +46 -5
  275. package/vendor/acorn/dist/acorn.js +394 -117
  276. package/vendor/acorn/dist/acorn.mjs +394 -117
  277. package/vendor/acorn/dist/bin.js +1 -1
  278. package/vendor/jamilih/dist/{jml-es.js → jml.mjs} +590 -312
  279. package/vendor/jamilih/package.json +1 -1
  280. package/vendor/mime/dist/types/other.js +719 -0
  281. package/vendor/mime/dist/types/standard.js +366 -0
  282. package/vendor/typeson-registry/dist/index.js +519 -99
  283. package/vendor/zod/classic/checks.d.ts +1 -0
  284. package/vendor/zod/classic/checks.js +1 -0
  285. package/vendor/zod/classic/coerce.d.ts +17 -0
  286. package/vendor/zod/classic/coerce.js +17 -0
  287. package/vendor/zod/classic/compat.d.ts +48 -0
  288. package/vendor/zod/classic/compat.js +31 -0
  289. package/vendor/zod/classic/deep-partial.d.ts +14 -0
  290. package/vendor/zod/classic/deep-partial.js +13 -0
  291. package/vendor/zod/classic/errors.d.ts +29 -0
  292. package/vendor/zod/classic/errors.js +57 -0
  293. package/vendor/zod/classic/external.d.ts +19 -0
  294. package/vendor/zod/classic/external.js +17 -0
  295. package/vendor/zod/classic/from-json-schema.d.ts +12 -0
  296. package/vendor/zod/classic/from-json-schema.js +660 -0
  297. package/vendor/zod/classic/in-out.d.ts +8 -0
  298. package/vendor/zod/classic/in-out.js +36 -0
  299. package/vendor/zod/classic/index.d.ts +3 -0
  300. package/vendor/zod/classic/index.js +4 -0
  301. package/vendor/zod/classic/iso.d.ts +7 -0
  302. package/vendor/zod/classic/iso.js +15 -0
  303. package/vendor/zod/classic/package.json +7 -0
  304. package/vendor/zod/classic/parse.d.ts +44 -0
  305. package/vendor/zod/classic/parse.js +16 -0
  306. package/vendor/zod/classic/schemas.d.ts +802 -0
  307. package/vendor/zod/classic/schemas.js +1491 -0
  308. package/vendor/zod/core/api.d.ts +329 -0
  309. package/vendor/zod/core/api.js +1104 -0
  310. package/vendor/zod/core/checks.d.ts +278 -0
  311. package/vendor/zod/core/checks.js +581 -0
  312. package/vendor/zod/core/compile.d.ts +51 -0
  313. package/vendor/zod/core/compile.js +1783 -0
  314. package/vendor/zod/core/core.d.ts +82 -0
  315. package/vendor/zod/core/core.js +141 -0
  316. package/vendor/zod/core/doc.d.ts +16 -0
  317. package/vendor/zod/core/doc.js +33 -0
  318. package/vendor/zod/core/errors.d.ts +225 -0
  319. package/vendor/zod/core/errors.js +270 -0
  320. package/vendor/zod/core/index.d.ts +19 -0
  321. package/vendor/zod/core/index.js +19 -0
  322. package/vendor/zod/core/json-schema-generator.d.ts +65 -0
  323. package/vendor/zod/core/json-schema-generator.js +99 -0
  324. package/vendor/zod/core/json-schema-processors.d.ts +49 -0
  325. package/vendor/zod/core/json-schema-processors.js +747 -0
  326. package/vendor/zod/core/json-schema.d.ts +89 -0
  327. package/vendor/zod/core/memoizer.d.ts +15 -0
  328. package/vendor/zod/core/memoizer.js +265 -0
  329. package/vendor/zod/core/package.json +7 -0
  330. package/vendor/zod/core/parse.d.ts +52 -0
  331. package/vendor/zod/core/parse.js +154 -0
  332. package/vendor/zod/core/regexes.d.ts +87 -0
  333. package/vendor/zod/core/regexes.js +150 -0
  334. package/vendor/zod/core/registries.d.ts +35 -0
  335. package/vendor/zod/core/registries.js +51 -0
  336. package/vendor/zod/core/schemas.d.ts +1253 -0
  337. package/vendor/zod/core/schemas.js +2440 -0
  338. package/vendor/zod/core/standard-schema.d.ts +126 -0
  339. package/vendor/zod/core/to-json-schema.d.ts +153 -0
  340. package/vendor/zod/core/to-json-schema.js +650 -0
  341. package/vendor/zod/core/util.d.ts +257 -0
  342. package/vendor/zod/core/util.js +846 -0
  343. package/vendor/zod/core/versions.d.ts +5 -0
  344. package/vendor/zod/core/versions.js +5 -0
  345. package/vendor/zod/core/visit.d.ts +30 -0
  346. package/vendor/zod/core/visit.js +169 -0
  347. package/vendor/zod/index.d.ts +3 -0
  348. package/vendor/zod/index.js +4 -0
  349. package/vendor/zod/locales/ar.d.ts +4 -0
  350. package/vendor/zod/locales/ar.js +109 -0
  351. package/vendor/zod/locales/az.d.ts +4 -0
  352. package/vendor/zod/locales/az.js +108 -0
  353. package/vendor/zod/locales/be.d.ts +4 -0
  354. package/vendor/zod/locales/be.js +166 -0
  355. package/vendor/zod/locales/bg.d.ts +4 -0
  356. package/vendor/zod/locales/bg.js +123 -0
  357. package/vendor/zod/locales/bn.d.ts +4 -0
  358. package/vendor/zod/locales/bn.js +111 -0
  359. package/vendor/zod/locales/ca.d.ts +4 -0
  360. package/vendor/zod/locales/ca.js +110 -0
  361. package/vendor/zod/locales/ckb.d.ts +4 -0
  362. package/vendor/zod/locales/ckb.js +131 -0
  363. package/vendor/zod/locales/cs.d.ts +4 -0
  364. package/vendor/zod/locales/cs.js +114 -0
  365. package/vendor/zod/locales/da.d.ts +4 -0
  366. package/vendor/zod/locales/da.js +118 -0
  367. package/vendor/zod/locales/de.d.ts +4 -0
  368. package/vendor/zod/locales/de.js +111 -0
  369. package/vendor/zod/locales/el.d.ts +4 -0
  370. package/vendor/zod/locales/el.js +110 -0
  371. package/vendor/zod/locales/en.d.ts +4 -0
  372. package/vendor/zod/locales/en.js +123 -0
  373. package/vendor/zod/locales/eo.d.ts +4 -0
  374. package/vendor/zod/locales/eo.js +112 -0
  375. package/vendor/zod/locales/es.d.ts +4 -0
  376. package/vendor/zod/locales/es.js +134 -0
  377. package/vendor/zod/locales/fa.d.ts +4 -0
  378. package/vendor/zod/locales/fa.js +117 -0
  379. package/vendor/zod/locales/fi.d.ts +4 -0
  380. package/vendor/zod/locales/fi.js +115 -0
  381. package/vendor/zod/locales/fr-CA.d.ts +4 -0
  382. package/vendor/zod/locales/fr-CA.js +110 -0
  383. package/vendor/zod/locales/fr.d.ts +4 -0
  384. package/vendor/zod/locales/fr.js +127 -0
  385. package/vendor/zod/locales/gu.d.ts +4 -0
  386. package/vendor/zod/locales/gu.js +111 -0
  387. package/vendor/zod/locales/he.d.ts +4 -0
  388. package/vendor/zod/locales/he.js +219 -0
  389. package/vendor/zod/locales/hi.d.ts +4 -0
  390. package/vendor/zod/locales/hi.js +109 -0
  391. package/vendor/zod/locales/hr.d.ts +4 -0
  392. package/vendor/zod/locales/hr.js +124 -0
  393. package/vendor/zod/locales/hu.d.ts +4 -0
  394. package/vendor/zod/locales/hu.js +111 -0
  395. package/vendor/zod/locales/hy.d.ts +4 -0
  396. package/vendor/zod/locales/hy.js +156 -0
  397. package/vendor/zod/locales/id.d.ts +4 -0
  398. package/vendor/zod/locales/id.js +109 -0
  399. package/vendor/zod/locales/index.d.ts +62 -0
  400. package/vendor/zod/locales/index.js +62 -0
  401. package/vendor/zod/locales/is.d.ts +4 -0
  402. package/vendor/zod/locales/is.js +112 -0
  403. package/vendor/zod/locales/it.d.ts +4 -0
  404. package/vendor/zod/locales/it.js +111 -0
  405. package/vendor/zod/locales/ja.d.ts +4 -0
  406. package/vendor/zod/locales/ja.js +110 -0
  407. package/vendor/zod/locales/ka.d.ts +4 -0
  408. package/vendor/zod/locales/ka.js +115 -0
  409. package/vendor/zod/locales/kh.d.ts +5 -0
  410. package/vendor/zod/locales/kh.js +5 -0
  411. package/vendor/zod/locales/km.d.ts +4 -0
  412. package/vendor/zod/locales/km.js +113 -0
  413. package/vendor/zod/locales/kn.d.ts +4 -0
  414. package/vendor/zod/locales/kn.js +114 -0
  415. package/vendor/zod/locales/ko.d.ts +4 -0
  416. package/vendor/zod/locales/ko.js +114 -0
  417. package/vendor/zod/locales/lt.d.ts +4 -0
  418. package/vendor/zod/locales/lt.js +205 -0
  419. package/vendor/zod/locales/mk.d.ts +4 -0
  420. package/vendor/zod/locales/mk.js +112 -0
  421. package/vendor/zod/locales/ms.d.ts +4 -0
  422. package/vendor/zod/locales/ms.js +110 -0
  423. package/vendor/zod/locales/ne.d.ts +4 -0
  424. package/vendor/zod/locales/ne.js +109 -0
  425. package/vendor/zod/locales/nl.d.ts +4 -0
  426. package/vendor/zod/locales/nl.js +113 -0
  427. package/vendor/zod/locales/nn.d.ts +4 -0
  428. package/vendor/zod/locales/nn.js +111 -0
  429. package/vendor/zod/locales/no.d.ts +4 -0
  430. package/vendor/zod/locales/no.js +111 -0
  431. package/vendor/zod/locales/ota.d.ts +4 -0
  432. package/vendor/zod/locales/ota.js +112 -0
  433. package/vendor/zod/locales/package.json +7 -0
  434. package/vendor/zod/locales/pl.d.ts +4 -0
  435. package/vendor/zod/locales/pl.js +112 -0
  436. package/vendor/zod/locales/ps.d.ts +4 -0
  437. package/vendor/zod/locales/ps.js +117 -0
  438. package/vendor/zod/locales/pt-BR.d.ts +4 -0
  439. package/vendor/zod/locales/pt-BR.js +141 -0
  440. package/vendor/zod/locales/pt.d.ts +4 -0
  441. package/vendor/zod/locales/pt.js +140 -0
  442. package/vendor/zod/locales/ro.d.ts +4 -0
  443. package/vendor/zod/locales/ro.js +120 -0
  444. package/vendor/zod/locales/ru.d.ts +4 -0
  445. package/vendor/zod/locales/ru.js +166 -0
  446. package/vendor/zod/locales/sk.d.ts +4 -0
  447. package/vendor/zod/locales/sk.js +114 -0
  448. package/vendor/zod/locales/sl.d.ts +4 -0
  449. package/vendor/zod/locales/sl.js +112 -0
  450. package/vendor/zod/locales/sv.d.ts +4 -0
  451. package/vendor/zod/locales/sv.js +113 -0
  452. package/vendor/zod/locales/ta.d.ts +4 -0
  453. package/vendor/zod/locales/ta.js +113 -0
  454. package/vendor/zod/locales/th.d.ts +4 -0
  455. package/vendor/zod/locales/th.js +113 -0
  456. package/vendor/zod/locales/tk.d.ts +4 -0
  457. package/vendor/zod/locales/tk.js +105 -0
  458. package/vendor/zod/locales/tr.d.ts +4 -0
  459. package/vendor/zod/locales/tr.js +108 -0
  460. package/vendor/zod/locales/ua.d.ts +5 -0
  461. package/vendor/zod/locales/ua.js +5 -0
  462. package/vendor/zod/locales/uk.d.ts +4 -0
  463. package/vendor/zod/locales/uk.js +111 -0
  464. package/vendor/zod/locales/ur.d.ts +4 -0
  465. package/vendor/zod/locales/ur.js +113 -0
  466. package/vendor/zod/locales/uz.d.ts +4 -0
  467. package/vendor/zod/locales/uz.js +111 -0
  468. package/vendor/zod/locales/vi.d.ts +4 -0
  469. package/vendor/zod/locales/vi.js +111 -0
  470. package/vendor/zod/locales/yo.d.ts +4 -0
  471. package/vendor/zod/locales/yo.js +110 -0
  472. package/vendor/zod/locales/zh-CN.d.ts +4 -0
  473. package/vendor/zod/locales/zh-CN.js +112 -0
  474. package/vendor/zod/locales/zh-TW.d.ts +4 -0
  475. package/vendor/zod/locales/zh-TW.js +110 -0
  476. package/vendor/zod/mini/checks.d.ts +1 -0
  477. package/vendor/zod/mini/checks.js +1 -0
  478. package/vendor/zod/mini/coerce.d.ts +7 -0
  479. package/vendor/zod/mini/coerce.js +22 -0
  480. package/vendor/zod/mini/deep-partial.d.ts +14 -0
  481. package/vendor/zod/mini/deep-partial.js +13 -0
  482. package/vendor/zod/mini/external.d.ts +16 -0
  483. package/vendor/zod/mini/external.js +16 -0
  484. package/vendor/zod/mini/in-out.d.ts +8 -0
  485. package/vendor/zod/mini/in-out.js +36 -0
  486. package/vendor/zod/mini/index.d.ts +3 -0
  487. package/vendor/zod/mini/index.js +3 -0
  488. package/vendor/zod/mini/iso.d.ts +22 -0
  489. package/vendor/zod/mini/iso.js +34 -0
  490. package/vendor/zod/mini/package.json +7 -0
  491. package/vendor/zod/mini/parse.d.ts +1 -0
  492. package/vendor/zod/mini/parse.js +1 -0
  493. package/vendor/zod/mini/schemas.d.ts +475 -0
  494. package/vendor/zod/mini/schemas.js +987 -0
  495. package/vendor/zod/package.json +7 -0
  496. package/vendor/zodexy/dist/esm/index.js +1274 -0
  497. package/vendor/zodexy/dist/index.js +1088 -0
  498. package/vendor/zodexy/dist/schema.zodexy.json +1036 -0
  499. package/dist/fundamentalTypes/nativeEnumType.d.ts +0 -6
  500. package/dist/fundamentalTypes/nativeEnumType.d.ts.map +0 -1
  501. package/src/fundamentalTypes/catchType.js +0 -140
  502. package/src/fundamentalTypes/enumType.js +0 -52
  503. package/src/fundamentalTypes/literalType.js +0 -81
  504. package/src/fundamentalTypes/nativeEnumType.js +0 -157
  505. package/src/fundamentalTypes/neverType.js +0 -49
  506. package/src/fundamentalTypes/recordType.js +0 -42
  507. package/src/fundamentalTypes/tupleType.js +0 -39
  508. package/src/fundamentalTypes/voidType.js +0 -48
  509. package/vendor/zod/lib/index.mjs +0 -4236
  510. package/vendor/zodex/dist/esm/dezerialize.d.ts +0 -26
  511. package/vendor/zodex/dist/esm/dezerialize.js +0 -393
  512. package/vendor/zodex/dist/esm/index.d.ts +0 -9
  513. package/vendor/zodex/dist/esm/index.js +0 -4
  514. package/vendor/zodex/dist/esm/infer.d.ts +0 -29
  515. package/vendor/zodex/dist/esm/package.json +0 -1
  516. package/vendor/zodex/dist/esm/types.d.ts +0 -201
  517. package/vendor/zodex/dist/esm/types.js +0 -13
  518. package/vendor/zodex/dist/esm/ui.d.ts +0 -23
  519. package/vendor/zodex/dist/esm/ui.js +0 -10
  520. package/vendor/zodex/dist/esm/zerialize.d.ts +0 -50
  521. package/vendor/zodex/dist/esm/zerialize.js +0 -417
  522. package/vendor/zodex/dist/esm/zod-types.d.ts +0 -11
  523. /package/vendor/{zodex/dist/esm/infer.js → zod/core/json-schema.js} +0 -0
  524. /package/vendor/{zodex/dist/esm/zod-types.js → zod/core/standard-schema.js} +0 -0
@@ -1,5 +1,8 @@
1
- import {jml, toStringTag} from '../vendor-imports.js';
1
+ import {
2
+ jml, toStringTag, mimeStandardTypes, mimeOtherTypes
3
+ } from '../vendor-imports.js';
2
4
  import {$e} from '../utils/templateUtils.js';
5
+ import {schemaLabel} from '../utils/schemaMeta.js';
3
6
  import {visualize, getUserMedia, startScreenCapture} from '../utils/media.js';
4
7
  import dialogs from '../utils/dialogs.js';
5
8
 
@@ -14,6 +17,68 @@ import dialogs from '../utils/dialogs.js';
14
17
  * @typedef {(file: FileInfo) => void} SetValue
15
18
  */
16
19
 
20
+ /**
21
+ * @typedef {HTMLButtonElement & {
22
+ * $value?: File,
23
+ * $min?: number,
24
+ * $max?: number,
25
+ * $mime?: string[]
26
+ * }} FileButton
27
+ */
28
+
29
+ const commonMimeTypes = [...new Set([
30
+ ...Object.keys(mimeStandardTypes),
31
+ ...Object.keys(mimeOtherTypes)
32
+ ])].toSorted((a, b) => {
33
+ return a.localeCompare(b);
34
+ });
35
+
36
+ let fileContentTypeListId = 0;
37
+
38
+ /**
39
+ * @param {number} size
40
+ * @param {number} [min]
41
+ * @param {number} [max]
42
+ * @returns {string|null}
43
+ */
44
+ function checkFileSize (size, min, max) {
45
+ if (min !== undefined && size < min) {
46
+ return `File size (${size} bytes) is below the minimum of ${min} bytes`;
47
+ }
48
+ if (max !== undefined && size > max) {
49
+ return `File size (${size} bytes) exceeds the maximum of ${max} bytes`;
50
+ }
51
+ return null;
52
+ }
53
+
54
+ /**
55
+ * @param {string} type
56
+ * @param {string[]} [mime]
57
+ * @returns {string|null}
58
+ */
59
+ function checkFileMimeType (type, mime) {
60
+ if (mime && mime.length > 0 && !mime.includes(type)) {
61
+ return `File type (${type || '(none)'}) is not among the allowed ` +
62
+ `MIME types: ${mime.join(', ')}`;
63
+ }
64
+ return null;
65
+ }
66
+
67
+ /**
68
+ * @param {File|undefined} file
69
+ * @param {number} [min]
70
+ * @param {number} [max]
71
+ * @param {string[]} [mime]
72
+ * @returns {string|null}
73
+ */
74
+ function checkFile (file, min, max, mime) {
75
+ if (!file) {
76
+ return 'File data is required';
77
+ }
78
+ return checkFileSize(file.size, min, max) ??
79
+ checkFileMimeType(file.type, mime);
80
+ }
81
+
17
82
  /**
18
83
  * @param {number} timestamp
19
84
  * @returns {string}
@@ -36,9 +101,9 @@ function getDateString (timestamp) {
36
101
  * type?: string,
37
102
  * lastModified?: number
38
103
  * }} value
39
- * @returns {void}
104
+ * @returns {File}
40
105
  */
41
- function newFileForBinary (viewBinary, value) {
106
+ function createFileForBinary (viewBinary, value) {
42
107
  const oldFile = /** @type {File|undefined} */ (
43
108
  viewBinary.$value
44
109
  );
@@ -73,33 +138,55 @@ function newFileForBinary (viewBinary, value) {
73
138
  : value.lastModified
74
139
  }
75
140
  );
141
+ return file;
142
+ }
143
+
144
+ /**
145
+ * @param {HTMLButtonElement & {$value: File}} viewBinary
146
+ * @param {Parameters<typeof createFileForBinary>[1]} value
147
+ * @returns {File}
148
+ */
149
+ function newFileForBinary (viewBinary, value) {
150
+ const file = createFileForBinary(viewBinary, value);
76
151
  viewBinary.$value = file;
152
+ return file;
77
153
  }
78
154
 
79
155
  /**
80
156
  * @param {File} value
81
157
  * @param {boolean} [editable]
158
+ * @param {number} [min]
159
+ * @param {number} [max]
160
+ * @param {string[]} [mime]
161
+ * @param {(message: string) => string|null|undefined} [getValidationMessage]
82
162
  * @returns {import('jamilih').JamilihArray}
83
163
  */
84
- function binaryButton (value, editable) {
85
- // @ts-expect-error It's ok
86
- return ['button', /** @type {import('jamilih').JamilihAttributes} */ ({
164
+ function binaryButton (
165
+ value, editable, min, max, mime, getValidationMessage
166
+ ) {
167
+ return ['button', {
87
168
  class: 'viewBinary',
88
169
  $custom: {
89
- $value: value
170
+ $value: value,
171
+ $min: min,
172
+ $max: max,
173
+ $mime: mime
90
174
  },
91
175
  $on: {
92
176
  /**
93
- * @this {HTMLButtonElement & {$value: File}}
94
177
  * @param {Event} e
95
178
  */
96
179
  click (e) {
97
180
  // eslint-disable-next-line consistent-this -- Clarity
98
- const viewBinary = this;
181
+ const viewBinary = /** @type {HTMLButtonElement & {$value: File}} */ (
182
+ this
183
+ );
99
184
  e.preventDefault();
100
185
  if (
101
- !this.$value ||
102
- Object.prototype.toString.call(this.$value).slice(8, -1) !== 'File'
186
+ !viewBinary.$value ||
187
+ Object.prototype.toString.call(
188
+ viewBinary.$value
189
+ ).slice(8, -1) !== 'File'
103
190
  ) {
104
191
  // Non-editable shouldn't be empty
105
192
  // if (!editable) {
@@ -119,14 +206,27 @@ function binaryButton (value, editable) {
119
206
  const textarea = /** @type {HTMLTextAreaElement} */ (
120
207
  $e(dialog, '.view-binary')
121
208
  );
122
- newFileForBinary(viewBinary, {
209
+ const file = createFileForBinary(viewBinary, {
123
210
  stringContents: textarea.value
124
211
  });
212
+ const message = checkFile(file, min, max, mime);
213
+ if (message) {
214
+ dialogs.alert(getValidationMessage?.(message) ?? message);
215
+ return;
216
+ }
217
+ /** @type {HTMLFieldSetElement & {$setValue: SetValue}} */ (
218
+ $e(
219
+ /** @type {HTMLDivElement} */ (
220
+ viewBinary.closest('[data-type="file"]')
221
+ ),
222
+ 'fieldset.fileMetaData'
223
+ )
224
+ ).$setValue(file);
125
225
  dialog.close();
126
226
  },
127
227
  // @ts-expect-error TS bug
128
228
  children: [
129
- ['div', /** @type {import('jamilih').JamilihChildren} */ ([
229
+ ['div', [
130
230
  'Binary source',
131
231
  ['br'],
132
232
  ['textarea', {
@@ -135,7 +235,7 @@ function binaryButton (value, editable) {
135
235
  /* istanbul ignore next */
136
236
  /** @type {string|null} */ (reader.result) ?? ''
137
237
  ]]
138
- ])]
238
+ ]]
139
239
  ]
140
240
  });
141
241
  });
@@ -152,10 +252,10 @@ function binaryButton (value, editable) {
152
252
  ));
153
253
  }
154
254
  );
155
- reader.readAsBinaryString(this.$value);
255
+ reader.readAsBinaryString(viewBinary.$value);
156
256
  }
157
257
  }
158
- }), [
258
+ }, [
159
259
  editable
160
260
  ? 'Edit binary data'
161
261
  : 'View binary data'
@@ -171,6 +271,16 @@ const fileType = {
171
271
  valueMatch (x) {
172
272
  return toStringTag(x) === 'File';
173
273
  },
274
+ validate ({root}) {
275
+ const viewBinary = /** @type {FileButton} */ (this.getInput({root}));
276
+ const message = checkFile(
277
+ viewBinary.$value,
278
+ viewBinary.$min,
279
+ viewBinary.$max,
280
+ viewBinary.$mime
281
+ );
282
+ return {valid: !message, message: message ?? undefined};
283
+ },
174
284
  toValue (s) {
175
285
  const obj = JSON.parse(s);
176
286
  return {value: new File([obj.stringContents], obj.name, {
@@ -196,9 +306,9 @@ const fileType = {
196
306
  return ['div', {dataset: {type: 'file'}}, [
197
307
  ['b', {
198
308
  class: 'emphasis',
199
- title: specificSchemaObject?.description ? '(a File)' : undefined
309
+ title: schemaLabel(specificSchemaObject) ? '(a File)' : undefined
200
310
  }, [
201
- specificSchemaObject?.description ?? 'File'
311
+ schemaLabel(specificSchemaObject) ?? 'File'
202
312
  ]],
203
313
  ['br'],
204
314
  ['br'],
@@ -376,26 +486,49 @@ const fileType = {
376
486
  })()
377
487
  : '',
378
488
  value.type.startsWith('image/')
379
- // @ts-expect-error It's ok
380
- ? ['img', /** @type {import('jamilih').JamilihAttributes} */ ({
489
+ ? ['img', {
381
490
  class: 'imageView',
382
491
  src: URL.createObjectURL(value),
383
492
  $on: {
384
- /** @this {HTMLImageElement} */
385
493
  load () {
386
- URL.revokeObjectURL(this.src);
494
+ URL.revokeObjectURL(
495
+ /** @type {HTMLImageElement} */ (this).src
496
+ );
387
497
  }
388
498
  }
389
- })]
499
+ }]
390
500
  : ''
391
501
  ]];
392
502
  },
393
- editUI ({typeNamespace, specificSchemaObject, value = {}}) {
503
+ editUI ({typeNamespace, specificSchemaObject, types, value = {}}) {
394
504
  // Todo: Could add way to preview file in edit mode (whether
395
505
  // recorded or uploaded)
506
+ const fileSchemaObject = /** @type {import('zodexy').SzFile} */ (
507
+ specificSchemaObject
508
+ );
509
+ const {min, max, mime} = fileSchemaObject ?? {};
510
+
511
+ /**
512
+ * @param {string|null|undefined} message
513
+ * @returns {string|null|undefined}
514
+ */
515
+ const getValidationMessage = (message) => {
516
+ return types.getValidationMessage({
517
+ message,
518
+ schema: specificSchemaObject,
519
+ typeSpecific: true
520
+ });
521
+ };
522
+
523
+ fileContentTypeListId++;
524
+ const contentTypeListId = `fileContentTypes-${fileContentTypeListId}`;
525
+ const contentTypeOptions = mime && mime.length > 0
526
+ ? mime
527
+ : commonMimeTypes;
528
+
396
529
  return ['div', {
397
530
  dataset: {type: 'file'},
398
- title: specificSchemaObject?.description ?? 'File'
531
+ title: schemaLabel(specificSchemaObject) ?? 'File'
399
532
  }, [
400
533
  ['fieldset', {
401
534
  class: 'fileMetaData',
@@ -417,10 +550,14 @@ const fileType = {
417
550
  '.size'
418
551
  )).value = String(file.size);
419
552
 
420
- /** @type {HTMLInputElement} */ ($e(
553
+ const contentTypeInput = /** @type {HTMLInputElement} */ ($e(
421
554
  metadataFieldset,
422
555
  '.contentType'
423
- )).value = file.type;
556
+ ));
557
+ contentTypeInput.value = file.type;
558
+ contentTypeInput.setCustomValidity(
559
+ getValidationMessage(checkFileMimeType(file.type, mime)) ?? ''
560
+ );
424
561
 
425
562
  /** @type {HTMLInputElement} */ ($e(
426
563
  metadataFieldset,
@@ -429,12 +566,20 @@ const fileType = {
429
566
  ? getDateString(file.lastModified)
430
567
  : '';
431
568
 
432
- /** @type {HTMLButtonElement & {$value: File|undefined}} */ ($e(
569
+ const viewBinary = /** @type {FileButton} */ ($e(
433
570
  metadataFieldset,
434
571
  'button.viewBinary'
435
- )).$value = typeof file.lastModified === 'number'
572
+ ));
573
+ viewBinary.$value = typeof file.lastModified === 'number'
436
574
  ? /** @type {File} */ (file)
437
575
  : undefined;
576
+ const message = checkFile(
577
+ viewBinary.$value,
578
+ viewBinary.$min,
579
+ viewBinary.$max,
580
+ viewBinary.$mime
581
+ );
582
+ viewBinary.setCustomValidity(getValidationMessage(message) ?? '');
438
583
  }
439
584
  }
440
585
  }, [
@@ -465,7 +610,11 @@ const fileType = {
465
610
  ]],
466
611
  ['br'],
467
612
  ['label', [
468
- 'Size (in bytes) ',
613
+ `Size (in bytes)${
614
+ min !== undefined || max !== undefined
615
+ ? ` (min: ${min ?? 0}${max === undefined ? '' : `, max: ${max}`})`
616
+ : ''
617
+ } `,
469
618
  ['input', {
470
619
  type: 'number', step: '1', disabled: true, class: 'size',
471
620
  value: String(value.size)
@@ -473,11 +622,16 @@ const fileType = {
473
622
  ]],
474
623
  ['br'],
475
624
  ['label', [
476
- 'Content type ',
625
+ `Content type${
626
+ mime && mime.length > 0 ? ` (allowed: ${mime.join(', ')})` : ''
627
+ } `,
477
628
  ['input', {
478
629
  class: 'contentType', value: value.type ?? '',
630
+ list: contentTypeListId,
479
631
  $on: {
480
632
  change () {
633
+ // eslint-disable-next-line consistent-this -- Clarity
634
+ const input = /** @type {HTMLInputElement} */ (this);
481
635
  const viewBinary =
482
636
  /**
483
637
  * @type {HTMLButtonElement & {$value: File}}
@@ -489,15 +643,29 @@ const fileType = {
489
643
  )
490
644
  );
491
645
 
492
- const newContentType =
493
- /** @type {HTMLInputElement} */ (this).value;
494
- newFileForBinary(viewBinary, {
646
+ const newContentType = input.value;
647
+ const file = createFileForBinary(viewBinary, {
495
648
  type: newContentType
496
649
  });
650
+ const message = checkFile(file, min, max, mime);
651
+ const validationMessage = getValidationMessage(message);
652
+ input.setCustomValidity(validationMessage ?? '');
653
+ if (message) {
654
+ dialogs.alert(validationMessage ?? message);
655
+ input.reportValidity();
656
+ return;
657
+ }
658
+ newFileForBinary(viewBinary, {type: newContentType});
497
659
  }
498
660
  }
499
661
  }]
500
662
  ]],
663
+ ['datalist', {
664
+ id: contentTypeListId,
665
+ class: 'contentTypeOptions'
666
+ }, contentTypeOptions.map((mimeType) => {
667
+ return ['option', [mimeType]];
668
+ })],
501
669
  ['br'],
502
670
  ['label', [
503
671
  'Last modified date ',
@@ -530,7 +698,7 @@ const fileType = {
530
698
  }]
531
699
  ]],
532
700
  ['br'],
533
- binaryButton(value, true),
701
+ binaryButton(value, true, min, max, mime, getValidationMessage),
534
702
  ['button', {
535
703
  class: 'clearData',
536
704
  $on: {
@@ -554,18 +722,23 @@ const fileType = {
554
722
  ['legend', ['Supply file through upload']],
555
723
  ['label', [
556
724
  'File ',
557
- // @ts-expect-error It's ok
558
- ['input', /** @type {import('jamilih').JamilihAttributes} */ ({
725
+ ['input', {
559
726
  $on: {
560
- /**
561
- * @this {HTMLInputElement}
562
- */
563
727
  change () {
728
+ // eslint-disable-next-line consistent-this -- Clarity
729
+ const input = /** @type {HTMLInputElement} */ (this);
564
730
  /* istanbul ignore if -- TS */
565
- if (!this.files) {
731
+ if (!input.files) {
732
+ return;
733
+ }
734
+ const file = input.files[0];
735
+
736
+ const message = checkFile(file, min, max, mime);
737
+ if (message) {
738
+ dialogs.alert(getValidationMessage(message) ?? message);
739
+ input.value = '';
566
740
  return;
567
741
  }
568
- const file = this.files[0];
569
742
 
570
743
  const metadataFieldset =
571
744
  /**
@@ -578,8 +751,9 @@ const fileType = {
578
751
  metadataFieldset.$setValue(file);
579
752
  }
580
753
  },
754
+ accept: mime?.join(','),
581
755
  name: `${typeNamespace}-file`, type: 'file'
582
- })]
756
+ }]
583
757
  ]]
584
758
  ]],
585
759
  ['fieldset', [
@@ -819,15 +993,11 @@ const fileType = {
819
993
  })(),
820
994
  ' ',
821
995
  ['div', [
822
- // @ts-expect-error It's ok
823
- ['button', /** @type {import('jamilih').JamilihAttributes} */ ({
996
+ ['button', {
824
997
  class: 'recordMedia',
825
998
  $on: {
826
999
  /**
827
1000
  * @param {Event} e
828
- * @this {HTMLButtonElement & {
829
- * $mediaRecorder: MediaRecorder
830
- * }}
831
1001
  */
832
1002
  click (e) {
833
1003
  e.preventDefault();
@@ -910,6 +1080,13 @@ const fileType = {
910
1080
  );
911
1081
  console.log('file', file);
912
1082
 
1083
+ const message = checkFile(file, min, max, mime);
1084
+ if (message) {
1085
+ dialogs.alert(getValidationMessage(message) ?? message);
1086
+ chunks = [];
1087
+ return;
1088
+ }
1089
+
913
1090
  const root = /** @type {HTMLDivElement} */
914
1091
  (this.closest('[data-type="file"]'));
915
1092
  /**
@@ -923,13 +1100,16 @@ const fileType = {
923
1100
  chunks = [];
924
1101
  });
925
1102
 
926
- this.$mediaRecorder = mediaRecorder;
1103
+ (
1104
+ /** @type {HTMLButtonElement & {$mediaRecorder: MediaRecorder}} */
1105
+ (this)
1106
+ ).$mediaRecorder = mediaRecorder;
927
1107
 
928
1108
  // Todo: Could make option for front/back
929
1109
  // camera ("user"/"environment") and bringIntoFocus
930
1110
  }
931
1111
  }
932
- }), [
1112
+ }, [
933
1113
  'Record media'
934
1114
  ]],
935
1115
  ['button', {
@@ -1037,6 +1217,12 @@ const fileType = {
1037
1217
  );
1038
1218
  console.log('file', file);
1039
1219
 
1220
+ const message = checkFile(file, min, max, mime);
1221
+ if (message) {
1222
+ dialogs.alert(getValidationMessage(message) ?? message);
1223
+ return;
1224
+ }
1225
+
1040
1226
  const root = /** @type {HTMLDivElement} */
1041
1227
  (this.closest('[data-type="file"]'));
1042
1228
  /**
@@ -1067,7 +1253,7 @@ const fileType = {
1067
1253
  [
1068
1254
  'div',
1069
1255
  {class: 'recordedMedia'},
1070
- /** @type {import('jamilih').JamilihChildren} */ ([
1256
+ [
1071
1257
  ...(() => {
1072
1258
  const recordedMedia = jml(
1073
1259
  'video', {class: 'recordedMedia'}
@@ -1112,7 +1298,7 @@ const fileType = {
1112
1298
  ])
1113
1299
  ];
1114
1300
  })()
1115
- ])
1301
+ ]
1116
1302
  ]
1117
1303
  ]]
1118
1304
  ]]