@es-joy/jsoe 0.24.3 → 0.25.1

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 +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.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 +399 -54
  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,5 @@
1
1
  import {
2
- Typeson, unescapeKeyPathComponent, structuredCloningThrowing,
2
+ Typeson, unescapeKeyPathComponent, structuredCloningForStorage,
3
3
  resurrectable as noneditable, symbol, promise, toStringTag
4
4
  } from '../vendor-imports.js';
5
5
 
@@ -7,9 +7,58 @@ import {buildTypeChoices} from '../typeChoices.js';
7
7
  import {
8
8
  typesonPathToJSONPointer
9
9
  } from '../utils/jsonPointer.js';
10
+ import {tick} from '../utils/timing.js';
10
11
 
11
12
  import json from './json.js';
12
13
 
14
+ /** @type {import('typeson').TypeSpecSet} */
15
+ export const functionSpec = {
16
+ function: {
17
+ test (x) {
18
+ return typeof x === 'function';
19
+ },
20
+ replace (funcType) {
21
+ return '(' + funcType.toString() + ')';
22
+ },
23
+ revive (o) {
24
+ // eslint-disable-next-line no-eval -- User opted in
25
+ return eval(o);
26
+ }
27
+ }
28
+ };
29
+
30
+ export const structuredCloningJsoe = structuredCloningForStorage.filter(
31
+ (typeSpecSet) => {
32
+ return [
33
+ // Not yet supported within JSOE
34
+ 'imagedata',
35
+ 'imagebitmap',
36
+ 'domquad',
37
+ 'quotaexceedederror',
38
+ 'webtransporterror',
39
+ 'cryptokey',
40
+ 'audiodata',
41
+ 'encodedaudiochunk',
42
+ 'encodedvideochunk',
43
+ 'videoframe'
44
+ ].every((prop) => {
45
+ return !Object.hasOwn(typeSpecSet, prop);
46
+ });
47
+ }
48
+ );
49
+
50
+ /**
51
+ * A deferred child build registers its own element in `parents` only once its
52
+ * own build has run. A deeper node's build can wake on the same tick and find
53
+ * its parent not yet registered (async-replaced parents such as `file`,
54
+ * `promise` or `blob` also push their builds out of depth order). Rather than
55
+ * dropping such a node, its build re-checks `parents` across this many ticks
56
+ * before concluding the parent genuinely does not exist (e.g. a value that was
57
+ * promoted to the root UI).
58
+ * @type {number}
59
+ */
60
+ const MAX_PARENT_WAIT_TICKS = 50;
61
+
13
62
  // We modify resurrectable in hopes an including application doesn't need it
14
63
  /** @type {import('typeson').TypeSpecSet} */ (
15
64
  noneditable.resurrectable
@@ -53,6 +102,11 @@ const encapsulateObserver = (stateObj) => {
53
102
 
54
103
  const format = /** @type {import('../formats.js').AvailableFormat} */ (frmt);
55
104
 
105
+ // Collects each deferred per-node UI build. `iterate` does not await these
106
+ // (see the comment there); a caller that needs the fully-populated tree
107
+ // awaits `stateObj.whenBuilt` after it has attached `rootUI`.
108
+ const pendingBuilds = (stateObj.pendingBuilds ||= []);
109
+
56
110
  /**
57
111
  * Matches keypaths to the HTML UI Element.
58
112
  * @type {{[key: string]: HTMLElement & {
@@ -63,7 +117,10 @@ const encapsulateObserver = (stateObj) => {
63
117
 
64
118
  /**
65
119
  * @type {{
66
- * [key: string]: [import('zodex').SzType, number|undefined]|undefined
120
+ * [key: string]: [
121
+ * import('zodexy').SzType,
122
+ * number|undefined
123
+ * ]|undefined
67
124
  * }}
68
125
  */
69
126
  const schemaParents = {};
@@ -71,6 +128,9 @@ const encapsulateObserver = (stateObj) => {
71
128
  /** @type {string[]} */
72
129
  const mapPaths = [];
73
130
 
131
+ /** @type {string[]} */
132
+ const atomicPaths = [];
133
+
74
134
  return (observerObj) => {
75
135
  const {
76
136
  type,
@@ -84,6 +144,13 @@ const encapsulateObserver = (stateObj) => {
84
144
  endIterateUnsetNumeric,
85
145
  clone
86
146
  } = observerObj;
147
+ if (atomicPaths.some((atomicPath) => {
148
+ return atomicPath === ''
149
+ ? keypath !== ''
150
+ : keypath.startsWith(`${atomicPath}.`);
151
+ })) {
152
+ return;
153
+ }
87
154
  if ('replaced' in observerObj) {
88
155
  return;
89
156
  }
@@ -104,7 +171,7 @@ const encapsulateObserver = (stateObj) => {
104
171
 
105
172
  // What other situations is this firing twice, and it
106
173
  // shouldn't reach here?
107
- if (observerObj.replacing && type === 'negativeZero') {
174
+ if (type === 'negativeZero' && observerObj.replacing) {
108
175
  return;
109
176
  }
110
177
 
@@ -172,17 +239,20 @@ const encapsulateObserver = (stateObj) => {
172
239
  // console.log('VVVV2',
173
240
  // JSON.stringify(stateObj.schemaContent, null, 2));
174
241
  } catch (err) {
175
- console.log('err', type, err);
242
+ console.log('err', type, err, value);
176
243
  stateObj.error = /** @type {Error} */ (err);
177
244
  return;
178
245
  }
179
246
  }
180
247
 
181
248
  const hasChildren = [
182
- 'array', 'object', 'set', 'map', 'tuple', 'record', 'filelist',
249
+ 'array', 'object', 'set', 'map', 'filelist',
183
250
  // 'sparseArrays',
184
251
  'arrayNonindexKeys'
185
252
  ].includes(newType);
253
+ if (type === 'symbol' || type === 'file') {
254
+ atomicPaths.push(keypath);
255
+ }
186
256
 
187
257
  // Maps are followed up by arrays which we don't want as such;
188
258
  // we track the paths to avoid reporting these child arrays
@@ -222,9 +292,9 @@ const encapsulateObserver = (stateObj) => {
222
292
  replaced
223
293
  });
224
294
  parents[''] = /**
225
- * @type {HTMLElement &
226
- * {$addAndSetArrayElement: AddAndSetArrayElement}}
227
- */ (stateObj.rootUI);
295
+ * @type {HTMLElement &
296
+ * {$addAndSetArrayElement: AddAndSetArrayElement}}
297
+ */ (stateObj.rootUI);
228
298
 
229
299
  if (schema) {
230
300
  schemaParents[''] = [schema, schemaIdx];
@@ -236,9 +306,9 @@ const encapsulateObserver = (stateObj) => {
236
306
  if (mapType) {
237
307
  /** @type {Map<any, any>} */ [...value].forEach((_, i) => {
238
308
  parents[i] = /**
239
- * @type {HTMLElement &
240
- * {$addAndSetArrayElement: AddAndSetArrayElement}}
241
- */ (stateObj.rootUI);
309
+ * @type {HTMLElement &
310
+ * {$addAndSetArrayElement: AddAndSetArrayElement}}
311
+ */ (stateObj.rootUI);
242
312
  });
243
313
  }
244
314
  return;
@@ -252,20 +322,47 @@ const encapsulateObserver = (stateObj) => {
252
322
  // schema, schemaParents
253
323
  // );
254
324
 
255
- // Todo (low): If could be async, use async encapsulate method
256
325
  // Todo (low): Handle `awaitingTypesonPromise` with place-holder
257
326
  // Todo (low): Handle `resolvingTypesonPromise` to replace place-holder
258
- setTimeout(() => {
259
- const ui = parents[parentPath];
260
- // These errors occur, e.g., if `replacing` not first added and then
261
- // a converted object gets treated as the root UI (e.g., for `regexp`
262
- // or `blobHTML` at root)
263
- // If there isn't a problem in Typeson with transmitting the `readonly`
264
- // status recursively down the object (should be no need to check
265
- // for circulars there?), could change Typeson to report `readonly`
266
- // for the nested items, in which case, we could block out `readonly`
267
- // instead of doing this here
327
+ //
328
+ // Each node's UI build is deferred a tick (the parent element is not yet in
329
+ // the document when the observer fires). The build now awaits its own
330
+ // `setValue` before `validate` (previously `validate` ran synchronously
331
+ // against a half-built DOM and threw). Each build promise is collected on
332
+ // `stateObj.pendingBuilds` for a caller that wants to await the fully
333
+ // populated tree; `iterate` itself does not await them (see below).
334
+ pendingBuilds.push((async () => {
335
+ // Defer one tick so the caller has attached `rootUI` (connection-dependent
336
+ // init such as `blobHTML`/SCEditor relies on being in the document).
337
+ await tick();
338
+ // Then wait for this node's parent UI to be registered in `parents`. A
339
+ // parent registers itself only after its own build runs, and
340
+ // async-replaced parents (`file`/`promise`/`blob`) push their builds out
341
+ // of depth order, so a child can still arrive first; re-check across
342
+ // ticks instead of dropping the node on the first miss.
343
+ // A parent that is genuinely absent (e.g. a converted value promoted to
344
+ // the root UI, as for `regexp`/`blobHTML` at root) never appears; after
345
+ // the bound we give up and record it below rather than hang.
346
+ let ui = parents[parentPath];
347
+ for (
348
+ let waited = 0;
349
+ (!ui || !('$addAndSetArrayElement' in ui)) &&
350
+ waited < MAX_PARENT_WAIT_TICKS;
351
+ waited++
352
+ ) {
353
+ // eslint-disable-next-line no-await-in-loop -- Sequential by design
354
+ await tick();
355
+ ui = parents[parentPath];
356
+ }
268
357
  if (!ui || !('$addAndSetArrayElement' in ui)) {
358
+ if (!stateObj.buildWarnings) {
359
+ stateObj.buildWarnings = [];
360
+ }
361
+ stateObj.buildWarnings.push({
362
+ keypath,
363
+ type: newType,
364
+ reason: 'no parent UI registered'
365
+ });
269
366
  return;
270
367
  }
271
368
 
@@ -300,28 +397,14 @@ const encapsulateObserver = (stateObj) => {
300
397
  return;
301
398
  }
302
399
 
303
- if (!readonly) {
304
- types?.setValue({
305
- type: newType,
306
- // eslint-disable-next-line object-shorthand -- TS
307
- root: /** @type {HTMLDivElement} */ (root),
308
- value: newValue
309
- });
310
- types?.validate({
311
- type: newType,
312
- // eslint-disable-next-line object-shorthand -- TS
313
- root: /** @type {HTMLDivElement} */ (root),
314
- topRoot: /** @type {HTMLDivElement} */ (stateObj.rootUI),
315
- // We don't want focus when values auto-added
316
- avoidReport: true
317
- });
318
- }
319
-
400
+ // Register this node as a parent for its descendants *before* awaiting
401
+ // `setValue`, so child builds (already past their own `tick`) can find
402
+ // it in `parents`.
320
403
  if (hasChildren) {
321
404
  parents[keypath] = /**
322
- * @type {HTMLElement &
323
- * {$addAndSetArrayElement: AddAndSetArrayElement}}
324
- */ (
405
+ * @type {HTMLElement &
406
+ * {$addAndSetArrayElement: AddAndSetArrayElement}}
407
+ */ (
325
408
  root
326
409
  );
327
410
 
@@ -331,13 +414,44 @@ const encapsulateObserver = (stateObj) => {
331
414
  if (mapType) {
332
415
  /** @type {Map<any, any>} */ [...value].forEach((_, i) => {
333
416
  parents[`${keypath}.${i}`] = /**
334
- * @type {HTMLElement &
335
- * {$addAndSetArrayElement: AddAndSetArrayElement}}
336
- */ (root);
417
+ * @type {HTMLElement &
418
+ * {$addAndSetArrayElement: AddAndSetArrayElement}}
419
+ */ (root);
337
420
  });
338
421
  }
339
422
  }
340
- });
423
+
424
+ if (!readonly) {
425
+ await types?.setValue({
426
+ type: newType,
427
+ root: /** @type {HTMLDivElement} */ (root),
428
+ value: newValue
429
+ });
430
+ types?.validate({
431
+ type: newType,
432
+ root: /** @type {HTMLDivElement} */ (root),
433
+ topRoot: /** @type {HTMLDivElement} */ (stateObj.rootUI),
434
+ // We don't want focus when values auto-added
435
+ avoidReport: true
436
+ });
437
+ }
438
+ // eslint-disable-next-line promise/prefer-await-to-then, promise/prefer-await-to-callbacks -- Convenient
439
+ })().catch((err) => {
440
+ // Auto-population is best-effort: a node whose deferred UI is still
441
+ // settling (its guard throws `'Not yet instantiated'`) or a transient
442
+ // build hiccup must not surface as an unhandled rejection. Genuine
443
+ // schema/type errors are still reported via `stateObj.error`. Record
444
+ // what was dropped so a caller (or test) can assert the tree built
445
+ // fully instead of the failure being wholly invisible.
446
+ if (!stateObj.buildWarnings) {
447
+ stateObj.buildWarnings = [];
448
+ }
449
+ stateObj.buildWarnings.push({
450
+ keypath,
451
+ type: newType,
452
+ reason: /** @type {Error} */ (err)?.message ?? String(err)
453
+ });
454
+ }));
341
455
  };
342
456
  };
343
457
 
@@ -368,13 +482,16 @@ const replaceTypes = (originTypes, replacements) => {
368
482
  * @param {import('../formats.js').StructuredCloneValue} v The value being
369
483
  * checked.
370
484
  * @param {string} arrayOrObjectPropertyName
371
- * @param {[import('zodex').SzType, number|undefined]|undefined} parentSchema
485
+ * @param {[
486
+ * import('zodexy').SzType,
487
+ * number|undefined
488
+ * ]|undefined} parentSchema
372
489
  * @param {import('../types.js').StateObject} stateObj The schema content
373
490
  * being checked.
374
491
  * @throws {Error} May throw if data found to be invalid.
375
492
  * @returns {{
376
493
  * newType: import('../types.js').AvailableArbitraryType,
377
- * schema?: import('zodex').SzType|undefined,
494
+ * schema?: import('zodexy').SzType|undefined,
378
495
  * mustBeOptional?: boolean,
379
496
  * schemaIdx?: number
380
497
  * }} Schema and type info.
@@ -392,6 +509,9 @@ const canonicalTypeToAvailableTypeAndSchema = (
392
509
  if (!allowableTypes) {
393
510
  throw new Error('Unexpected undefined type for state');
394
511
  }
512
+ if (valType === 'array' && allowableTypes.includes('arrayNonindexKeys')) {
513
+ valType = 'arrayNonindexKeys';
514
+ }
395
515
 
396
516
  /**
397
517
  * @type {import('../types.js').AvailableArbitraryType|undefined}
@@ -472,7 +592,7 @@ const canonicalTypeToAvailableTypeAndSchema = (
472
592
  return false;
473
593
  });
474
594
  if (ret === undefined) {
475
- console.log('AALLLowableTypes', state, allowableTypes, '::', valType);
595
+ console.log('AALLLowableTypes', state, allowableTypes, '::', valType, v);
476
596
  return isInvalid(valType);
477
597
  }
478
598
  }
@@ -490,20 +610,7 @@ const structuredCloning = {
490
610
  stateObj.format = 'structuredCloning';
491
611
  }
492
612
 
493
- const structuredCloningFixed = structuredCloningThrowing.filter(
494
- (typeSpecSet) => {
495
- return ![
496
- // Not yet supported within JSOE
497
- 'imagedata',
498
- 'imagebitmap',
499
- 'cryptokey',
500
- 'domquad'
501
- ].some((prop) => {
502
- return Object.hasOwn(typeSpecSet, prop);
503
- });
504
- }
505
- );
506
- structuredCloningFixed.splice(
613
+ structuredCloningJsoe.splice(
507
614
  // Add after userObjects
508
615
  1,
509
616
  0,
@@ -520,31 +627,34 @@ const structuredCloning = {
520
627
  // to regular demo and test; add tests
521
628
  stateObj.format === 'schema'
522
629
  ? [
523
- ...structuredCloningFixed,
630
+ ...structuredCloningJsoe,
524
631
  symbol,
525
632
  promise,
526
- {
527
- function: {
528
- test (x) {
529
- return typeof x === 'function';
530
- },
531
- replace (funcType) {
532
- return '(' + funcType.toString() + ')';
533
- },
534
- revive (o) {
535
- // eslint-disable-next-line no-eval -- User opted in
536
- return eval(o);
537
- }
538
- }
539
- }
633
+ functionSpec
540
634
  ]
541
- : structuredCloningFixed
635
+ : structuredCloningJsoe
542
636
  );
543
637
 
544
638
  await typeson.encapsulateAsync(records, null, {
545
639
  throwOnBadSyncType: false
546
640
  });
547
641
 
642
+ // The per-node builds run themselves (each is a self-executing async IIFE)
643
+ // a tick later, once the caller has connected `rootUI`; the race that
644
+ // used to crash — a node's synchronous `validate` running before its
645
+ // asynchronous `setValue` had built the DOM — is fixed inside each build,
646
+ // which now awaits `setValue` before `validate`, and a build no longer
647
+ // drops itself when its parent is a tick behind (it re-checks `parents`
648
+ // up to `MAX_PARENT_WAIT_TICKS`). We deliberately do not await the builds
649
+ // here: blocking the return re-orders deferred, connection-dependent init
650
+ // (e.g. `blobHTML`/SCEditor) ahead of the caller attaching `rootUI`.
651
+ // Instead `stateObj.whenBuilt` resolves once every build has settled, for
652
+ // a caller (or test) that needs the fully-populated tree; anything a
653
+ // build could not attach is listed on `stateObj.buildWarnings`.
654
+ stateObj.whenBuilt = (async () => {
655
+ await Promise.allSettled(stateObj.pendingBuilds ?? []);
656
+ })();
657
+
548
658
  if (stateObj.error) {
549
659
  throw stateObj.error;
550
660
  }
package/src/formats.js CHANGED
@@ -24,15 +24,15 @@ import schema from './formats/schema.js';
24
24
  /* schema:
25
25
  export const getTypeForFormatStateAndValue = ({format, state, value}) => {
26
26
  const valType = new Typeson().register(
27
- structuredCloningThrowing
27
+ structuredCloningForStorage
28
28
  ).rootTypeName(value);
29
29
  return canonicalToAvailableType(format, state, valType, value);
30
30
  };
31
31
  */
32
32
 
33
33
  /**
34
- * @typedef {"indexedDBKey"|"json"|"structuredCloning"|
35
- * "arbitraryJS"|"schema"} AvailableFormat
34
+ * @typedef {"indexedDBKey"|"json"|"structuredCloning"
35
+ * |"arbitraryJS"|"schema"} AvailableFormat
36
36
  */
37
37
 
38
38
  /**
@@ -77,14 +77,26 @@ export const getTypeForFormatStateAndValue = ({format, state, value}) => {
77
77
  * types: import('./types.js').default,
78
78
  * v?: import('./formats.js').StructuredCloneValue,
79
79
  * arrayOrObjectPropertyName?: string,
80
- * parentSchema?: [import('zodex').SzType, number|undefined]|undefined,
80
+ * parentSchema?: [
81
+ * import('zodexy').SzType,
82
+ * number|undefined
83
+ * ]|undefined,
81
84
  * stateObj?: import('./types.js').StateObject,
82
85
  * ) => {
83
86
  * type: import('./types.js').AvailableArbitraryType|undefined
84
- * schema?: import('zodex').SzType|undefined,
87
+ * schema?: import('zodexy').SzType|undefined,
85
88
  * mustBeOptional?: boolean,
86
89
  * schemaIdx?: number
87
90
  * }} [convertFromTypeson]
91
+ * @property {(
92
+ * types: import('./types.js').default,
93
+ * schemaObject: import('./formatAndTypeChoices.js').ZodexSchema,
94
+ * value: StructuredCloneValue
95
+ * ) => {valid: boolean, message?: string,
96
+ * schema?: import('./formats/schema.js').ZodexSchema}} [validateValue]
97
+ * @property {(
98
+ * schemaObject: import('./formats/schema.js').ZodexSchema
99
+ * ) => boolean} [isValueValidationRequired]
88
100
  */
89
101
 
90
102
  /**
@@ -1,5 +1,6 @@
1
1
  import {toStringTag} from '../vendor-imports.js';
2
2
  import {$e, $$e} from '../utils/templateUtils.js';
3
+ import {schemaLabel} from '../utils/schemaMeta.js';
3
4
 
4
5
  /**
5
6
  * @type {import('../types.js').TypeObject & {ct: number}}
@@ -12,7 +13,6 @@ const BooleanObjectType = {
12
13
  },
13
14
  toValue (s) {
14
15
  return {
15
- // eslint-disable-next-line @stylistic/max-len -- Long
16
16
  // eslint-disable-next-line no-new-wrappers, unicorn/new-for-builtins -- Deliberate creation here
17
17
  value: new Boolean(s === 'true')
18
18
  };
@@ -35,19 +35,18 @@ const BooleanObjectType = {
35
35
  viewUI ({value, specificSchemaObject}) {
36
36
  return ['i', {
37
37
  dataset: {type: 'BooleanObject'},
38
- title: specificSchemaObject?.description ?? '(a Boolean Object)'
39
- }, [specificSchemaObject ? `${value}` : `Boolean(${value})`]];
38
+ title: schemaLabel(specificSchemaObject) ?? '(a Boolean Object)'
39
+ }, [specificSchemaObject ? String(value) : `Boolean(${value})`]];
40
40
  },
41
41
  ct: 0,
42
42
  editUI ({
43
- // eslint-disable-next-line @stylistic/max-len -- Long
44
43
  // eslint-disable-next-line no-new-wrappers, unicorn/new-for-builtins -- Deliberate creation here
45
44
  typeNamespace, specificSchemaObject, value = new Boolean(true)
46
45
  }) {
47
46
  this.ct++;
48
47
  return ['div', {
49
48
  dataset: {type: 'BooleanObject'},
50
- title: specificSchemaObject?.description ?? 'Boolean object'
49
+ title: schemaLabel(specificSchemaObject) ?? 'Boolean object'
51
50
  }, [
52
51
  ['label', [
53
52
  'True',
@@ -1,5 +1,6 @@
1
1
  import {toStringTag} from '../vendor-imports.js';
2
2
  import {$e} from '../utils/templateUtils.js';
3
+ import {schemaLabel} from '../utils/schemaMeta.js';
3
4
  import numberType from './numberType.js';
4
5
 
5
6
  /**
@@ -12,7 +13,6 @@ const NumberObjectType = {
12
13
  return toStringTag(x) === 'Number' && typeof x === 'object';
13
14
  },
14
15
  toValue (s) {
15
- // eslint-disable-next-line @stylistic/max-len -- Long
16
16
  // eslint-disable-next-line no-new-wrappers, unicorn/new-for-builtins -- Deliberate creation here
17
17
  return {value: new Number(s)};
18
18
  },
@@ -35,15 +35,15 @@ const NumberObjectType = {
35
35
  viewUI ({value, specificSchemaObject}) {
36
36
  return ['i', {
37
37
  dataset: {type: 'NumberObject'},
38
- title: specificSchemaObject?.description ?? '(a Number Object)'
38
+ title: schemaLabel(specificSchemaObject) ?? '(a Number Object)'
39
39
  }, [
40
- specificSchemaObject ? `${value}` : `Number(${value})`
40
+ specificSchemaObject ? String(value) : `Number(${value})`
41
41
  ]];
42
42
  },
43
43
  editUI ({typeNamespace, specificSchemaObject, value}) {
44
44
  return ['div', {
45
45
  dataset: {type: 'NumberObject'},
46
- title: specificSchemaObject?.description ?? 'Number object'
46
+ title: schemaLabel(specificSchemaObject) ?? 'Number object'
47
47
  }, [
48
48
  ['input', {
49
49
  name: `${typeNamespace}-NumberObject`,
@@ -1,5 +1,6 @@
1
1
  import {toStringTag} from '../vendor-imports.js';
2
2
  import {$e} from '../utils/templateUtils.js';
3
+ import {schemaLabel} from '../utils/schemaMeta.js';
3
4
 
4
5
  /**
5
6
  * @type {import('../types.js').TypeObject}
@@ -10,10 +11,8 @@ const StringObjectType = {
10
11
  return toStringTag(x) === 'String' && typeof x === 'object';
11
12
  },
12
13
  toValue (s) {
13
- // eslint-disable-next-line @stylistic/max-len -- Long
14
14
  /* eslint-disable no-new-wrappers, unicorn/new-for-builtins -- Deliberate creation here */
15
15
  return {value: new String(s)};
16
- // eslint-disable-next-line @stylistic/max-len -- Long
17
16
  /* eslint-enable no-new-wrappers, unicorn/new-for-builtins -- Deliberate creation here */
18
17
  },
19
18
  option: ['StringObject'],
@@ -31,7 +30,7 @@ const StringObjectType = {
31
30
  viewUI ({value, specificSchemaObject}) {
32
31
  return ['span', {
33
32
  dataset: {type: 'StringObject'},
34
- title: specificSchemaObject?.description ?? '(a String Object)'
33
+ title: schemaLabel(specificSchemaObject) ?? '(a String Object)'
35
34
  }, [
36
35
  specificSchemaObject ? '' : ['i', ['String(']],
37
36
  ['span', [value.valueOf()]],
@@ -41,7 +40,7 @@ const StringObjectType = {
41
40
  editUI ({typeNamespace, specificSchemaObject, value = ''}) {
42
41
  return ['div', {
43
42
  dataset: {type: 'StringObject'},
44
- title: specificSchemaObject?.description ?? 'String object'
43
+ title: schemaLabel(specificSchemaObject) ?? 'String object'
45
44
  }, [
46
45
  ['textarea', {name: `${typeNamespace}-StringObject`}, [value]]
47
46
  ]];
@@ -47,7 +47,6 @@ const arrayReferenceType = {
47
47
  },
48
48
  getValue ({root, stateObj, currentPath}) {
49
49
  const referentPath = this.getInput({root}).value;
50
- // eslint-disable-next-line @stylistic/max-len -- Long
51
50
  /* istanbul ignore else -- ArrayRef will not be a root, so should have stateObj */
52
51
  if (stateObj) {
53
52
  if (!stateObj.paths) {
@@ -186,7 +185,6 @@ const arrayReferenceType = {
186
185
  $$e(topRoot, `div[data-type="${type}"]`).forEach((root) => {
187
186
  types.validate({
188
187
  type,
189
- // eslint-disable-next-line object-shorthand -- TS
190
188
  root: /** @type {HTMLDivElement} */ (root),
191
189
  topRoot
192
190
  });