plugin-build-visualization-block 0.1.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.
- package/client-v2.d.ts +2 -0
- package/client-v2.js +1 -0
- package/client.d.ts +2 -0
- package/client.js +1 -0
- package/dist/client/index.js +10 -0
- package/dist/client-v2/812.25692e474e296143.js +10 -0
- package/dist/client-v2/index.js +10 -0
- package/dist/externalVersion.js +24 -0
- package/dist/index.js +48 -0
- package/dist/locale/en-US.json +45 -0
- package/dist/locale/namespace.js +36 -0
- package/dist/locale/vi-VN.json +46 -0
- package/dist/locale/zh-CN.json +46 -0
- package/dist/node_modules/zod/LICENSE +21 -0
- package/dist/node_modules/zod/index.cjs +1 -0
- package/dist/node_modules/zod/index.d.cts +4 -0
- package/dist/node_modules/zod/index.d.ts +4 -0
- package/dist/node_modules/zod/index.js +4 -0
- package/dist/node_modules/zod/locales/index.cjs +17 -0
- package/dist/node_modules/zod/locales/index.d.cts +1 -0
- package/dist/node_modules/zod/locales/index.d.ts +1 -0
- package/dist/node_modules/zod/locales/index.js +1 -0
- package/dist/node_modules/zod/locales/package.json +6 -0
- package/dist/node_modules/zod/mini/index.cjs +17 -0
- package/dist/node_modules/zod/mini/index.d.cts +1 -0
- package/dist/node_modules/zod/mini/index.d.ts +1 -0
- package/dist/node_modules/zod/mini/index.js +1 -0
- package/dist/node_modules/zod/mini/package.json +6 -0
- package/dist/node_modules/zod/package.json +1 -0
- package/dist/node_modules/zod/src/index.ts +4 -0
- package/dist/node_modules/zod/src/locales/index.ts +1 -0
- package/dist/node_modules/zod/src/mini/index.ts +1 -0
- package/dist/node_modules/zod/src/v3/ZodError.ts +330 -0
- package/dist/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
- package/dist/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
- package/dist/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
- package/dist/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
- package/dist/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
- package/dist/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
- package/dist/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
- package/dist/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
- package/dist/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
- package/dist/node_modules/zod/src/v3/errors.ts +13 -0
- package/dist/node_modules/zod/src/v3/external.ts +6 -0
- package/dist/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
- package/dist/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
- package/dist/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
- package/dist/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
- package/dist/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
- package/dist/node_modules/zod/src/v3/helpers/util.ts +224 -0
- package/dist/node_modules/zod/src/v3/index.ts +4 -0
- package/dist/node_modules/zod/src/v3/locales/en.ts +124 -0
- package/dist/node_modules/zod/src/v3/standard-schema.ts +113 -0
- package/dist/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
- package/dist/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
- package/dist/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
- package/dist/node_modules/zod/src/v3/tests/array.test.ts +71 -0
- package/dist/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
- package/dist/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
- package/dist/node_modules/zod/src/v3/tests/base.test.ts +29 -0
- package/dist/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
- package/dist/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
- package/dist/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
- package/dist/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
- package/dist/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
- package/dist/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
- package/dist/node_modules/zod/src/v3/tests/date.test.ts +32 -0
- package/dist/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
- package/dist/node_modules/zod/src/v3/tests/default.test.ts +112 -0
- package/dist/node_modules/zod/src/v3/tests/description.test.ts +33 -0
- package/dist/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
- package/dist/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
- package/dist/node_modules/zod/src/v3/tests/error.test.ts +551 -0
- package/dist/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
- package/dist/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
- package/dist/node_modules/zod/src/v3/tests/function.test.ts +261 -0
- package/dist/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
- package/dist/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
- package/dist/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
- package/dist/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
- package/dist/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
- package/dist/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
- package/dist/node_modules/zod/src/v3/tests/map.test.ts +110 -0
- package/dist/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
- package/dist/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
- package/dist/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
- package/dist/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
- package/dist/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
- package/dist/node_modules/zod/src/v3/tests/number.test.ts +176 -0
- package/dist/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
- package/dist/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
- package/dist/node_modules/zod/src/v3/tests/object.test.ts +434 -0
- package/dist/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
- package/dist/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
- package/dist/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
- package/dist/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
- package/dist/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
- package/dist/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
- package/dist/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
- package/dist/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
- package/dist/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
- package/dist/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
- package/dist/node_modules/zod/src/v3/tests/record.test.ts +171 -0
- package/dist/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
- package/dist/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
- package/dist/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
- package/dist/node_modules/zod/src/v3/tests/set.test.ts +142 -0
- package/dist/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
- package/dist/node_modules/zod/src/v3/tests/string.test.ts +916 -0
- package/dist/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
- package/dist/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
- package/dist/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
- package/dist/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
- package/dist/node_modules/zod/src/v3/tests/void.test.ts +15 -0
- package/dist/node_modules/zod/src/v3/types.ts +5138 -0
- package/dist/node_modules/zod/src/v4/classic/checks.ts +32 -0
- package/dist/node_modules/zod/src/v4/classic/coerce.ts +27 -0
- package/dist/node_modules/zod/src/v4/classic/compat.ts +70 -0
- package/dist/node_modules/zod/src/v4/classic/errors.ts +82 -0
- package/dist/node_modules/zod/src/v4/classic/external.ts +51 -0
- package/dist/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
- package/dist/node_modules/zod/src/v4/classic/index.ts +5 -0
- package/dist/node_modules/zod/src/v4/classic/iso.ts +90 -0
- package/dist/node_modules/zod/src/v4/classic/parse.ts +82 -0
- package/dist/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
- package/dist/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
- package/dist/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
- package/dist/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
- package/dist/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
- package/dist/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
- package/dist/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
- package/dist/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
- package/dist/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
- package/dist/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
- package/dist/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
- package/dist/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
- package/dist/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
- package/dist/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
- package/dist/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
- package/dist/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
- package/dist/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
- package/dist/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
- package/dist/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
- package/dist/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
- package/dist/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
- package/dist/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
- package/dist/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
- package/dist/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
- package/dist/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
- package/dist/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
- package/dist/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
- package/dist/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
- package/dist/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
- package/dist/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
- package/dist/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
- package/dist/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
- package/dist/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
- package/dist/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
- package/dist/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
- package/dist/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
- package/dist/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
- package/dist/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
- package/dist/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
- package/dist/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
- package/dist/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
- package/dist/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
- package/dist/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
- package/dist/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
- package/dist/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
- package/dist/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
- package/dist/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
- package/dist/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
- package/dist/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
- package/dist/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
- package/dist/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
- package/dist/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
- package/dist/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
- package/dist/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
- package/dist/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
- package/dist/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
- package/dist/node_modules/zod/src/v4/classic/tests/record.test.ts +600 -0
- package/dist/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
- package/dist/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
- package/dist/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
- package/dist/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
- package/dist/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
- package/dist/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
- package/dist/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
- package/dist/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
- package/dist/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
- package/dist/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
- package/dist/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2975 -0
- package/dist/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
- package/dist/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
- package/dist/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
- package/dist/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
- package/dist/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
- package/dist/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
- package/dist/node_modules/zod/src/v4/core/api.ts +1798 -0
- package/dist/node_modules/zod/src/v4/core/checks.ts +1293 -0
- package/dist/node_modules/zod/src/v4/core/config.ts +15 -0
- package/dist/node_modules/zod/src/v4/core/core.ts +138 -0
- package/dist/node_modules/zod/src/v4/core/doc.ts +44 -0
- package/dist/node_modules/zod/src/v4/core/errors.ts +448 -0
- package/dist/node_modules/zod/src/v4/core/index.ts +16 -0
- package/dist/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
- package/dist/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
- package/dist/node_modules/zod/src/v4/core/json-schema.ts +147 -0
- package/dist/node_modules/zod/src/v4/core/parse.ts +195 -0
- package/dist/node_modules/zod/src/v4/core/regexes.ts +183 -0
- package/dist/node_modules/zod/src/v4/core/registries.ts +105 -0
- package/dist/node_modules/zod/src/v4/core/schemas.ts +4543 -0
- package/dist/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
- package/dist/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
- package/dist/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
- package/dist/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
- package/dist/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
- package/dist/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
- package/dist/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
- package/dist/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
- package/dist/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
- package/dist/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
- package/dist/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
- package/dist/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
- package/dist/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
- package/dist/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
- package/dist/node_modules/zod/src/v4/core/util.ts +966 -0
- package/dist/node_modules/zod/src/v4/core/versions.ts +5 -0
- package/dist/node_modules/zod/src/v4/core/zsf.ts +323 -0
- package/dist/node_modules/zod/src/v4/index.ts +4 -0
- package/dist/node_modules/zod/src/v4/locales/ar.ts +115 -0
- package/dist/node_modules/zod/src/v4/locales/az.ts +111 -0
- package/dist/node_modules/zod/src/v4/locales/be.ts +176 -0
- package/dist/node_modules/zod/src/v4/locales/bg.ts +128 -0
- package/dist/node_modules/zod/src/v4/locales/ca.ts +116 -0
- package/dist/node_modules/zod/src/v4/locales/cs.ts +118 -0
- package/dist/node_modules/zod/src/v4/locales/da.ts +123 -0
- package/dist/node_modules/zod/src/v4/locales/de.ts +116 -0
- package/dist/node_modules/zod/src/v4/locales/en.ts +119 -0
- package/dist/node_modules/zod/src/v4/locales/eo.ts +118 -0
- package/dist/node_modules/zod/src/v4/locales/es.ts +141 -0
- package/dist/node_modules/zod/src/v4/locales/fa.ts +126 -0
- package/dist/node_modules/zod/src/v4/locales/fi.ts +121 -0
- package/dist/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
- package/dist/node_modules/zod/src/v4/locales/fr.ts +116 -0
- package/dist/node_modules/zod/src/v4/locales/he.ts +246 -0
- package/dist/node_modules/zod/src/v4/locales/hu.ts +117 -0
- package/dist/node_modules/zod/src/v4/locales/hy.ts +164 -0
- package/dist/node_modules/zod/src/v4/locales/id.ts +115 -0
- package/dist/node_modules/zod/src/v4/locales/index.ts +49 -0
- package/dist/node_modules/zod/src/v4/locales/is.ts +119 -0
- package/dist/node_modules/zod/src/v4/locales/it.ts +116 -0
- package/dist/node_modules/zod/src/v4/locales/ja.ts +114 -0
- package/dist/node_modules/zod/src/v4/locales/ka.ts +123 -0
- package/dist/node_modules/zod/src/v4/locales/kh.ts +7 -0
- package/dist/node_modules/zod/src/v4/locales/km.ts +119 -0
- package/dist/node_modules/zod/src/v4/locales/ko.ts +121 -0
- package/dist/node_modules/zod/src/v4/locales/lt.ts +239 -0
- package/dist/node_modules/zod/src/v4/locales/mk.ts +118 -0
- package/dist/node_modules/zod/src/v4/locales/ms.ts +115 -0
- package/dist/node_modules/zod/src/v4/locales/nl.ts +121 -0
- package/dist/node_modules/zod/src/v4/locales/no.ts +116 -0
- package/dist/node_modules/zod/src/v4/locales/ota.ts +117 -0
- package/dist/node_modules/zod/src/v4/locales/pl.ts +118 -0
- package/dist/node_modules/zod/src/v4/locales/ps.ts +126 -0
- package/dist/node_modules/zod/src/v4/locales/pt.ts +116 -0
- package/dist/node_modules/zod/src/v4/locales/ru.ts +176 -0
- package/dist/node_modules/zod/src/v4/locales/sl.ts +118 -0
- package/dist/node_modules/zod/src/v4/locales/sv.ts +119 -0
- package/dist/node_modules/zod/src/v4/locales/ta.ts +118 -0
- package/dist/node_modules/zod/src/v4/locales/th.ts +119 -0
- package/dist/node_modules/zod/src/v4/locales/tr.ts +111 -0
- package/dist/node_modules/zod/src/v4/locales/ua.ts +7 -0
- package/dist/node_modules/zod/src/v4/locales/uk.ts +117 -0
- package/dist/node_modules/zod/src/v4/locales/ur.ts +119 -0
- package/dist/node_modules/zod/src/v4/locales/uz.ts +116 -0
- package/dist/node_modules/zod/src/v4/locales/vi.ts +117 -0
- package/dist/node_modules/zod/src/v4/locales/yo.ts +124 -0
- package/dist/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
- package/dist/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
- package/dist/node_modules/zod/src/v4/mini/checks.ts +32 -0
- package/dist/node_modules/zod/src/v4/mini/coerce.ts +27 -0
- package/dist/node_modules/zod/src/v4/mini/external.ts +40 -0
- package/dist/node_modules/zod/src/v4/mini/index.ts +3 -0
- package/dist/node_modules/zod/src/v4/mini/iso.ts +66 -0
- package/dist/node_modules/zod/src/v4/mini/parse.ts +14 -0
- package/dist/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
- package/dist/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
- package/dist/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
- package/dist/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
- package/dist/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
- package/dist/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
- package/dist/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
- package/dist/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
- package/dist/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
- package/dist/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
- package/dist/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
- package/dist/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
- package/dist/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
- package/dist/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
- package/dist/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
- package/dist/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
- package/dist/node_modules/zod/src/v4-mini/index.ts +1 -0
- package/dist/node_modules/zod/v3/ZodError.cjs +138 -0
- package/dist/node_modules/zod/v3/ZodError.d.cts +164 -0
- package/dist/node_modules/zod/v3/ZodError.d.ts +164 -0
- package/dist/node_modules/zod/v3/ZodError.js +133 -0
- package/dist/node_modules/zod/v3/errors.cjs +17 -0
- package/dist/node_modules/zod/v3/errors.d.cts +5 -0
- package/dist/node_modules/zod/v3/errors.d.ts +5 -0
- package/dist/node_modules/zod/v3/errors.js +9 -0
- package/dist/node_modules/zod/v3/external.cjs +22 -0
- package/dist/node_modules/zod/v3/external.d.cts +6 -0
- package/dist/node_modules/zod/v3/external.d.ts +6 -0
- package/dist/node_modules/zod/v3/external.js +6 -0
- package/dist/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
- package/dist/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
- package/dist/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
- package/dist/node_modules/zod/v3/helpers/enumUtil.js +1 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.js +6 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.js +109 -0
- package/dist/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
- package/dist/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
- package/dist/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
- package/dist/node_modules/zod/v3/helpers/partialUtil.js +1 -0
- package/dist/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
- package/dist/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
- package/dist/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
- package/dist/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/dist/node_modules/zod/v3/helpers/util.cjs +137 -0
- package/dist/node_modules/zod/v3/helpers/util.d.cts +85 -0
- package/dist/node_modules/zod/v3/helpers/util.d.ts +85 -0
- package/dist/node_modules/zod/v3/helpers/util.js +133 -0
- package/dist/node_modules/zod/v3/index.cjs +33 -0
- package/dist/node_modules/zod/v3/index.d.cts +4 -0
- package/dist/node_modules/zod/v3/index.d.ts +4 -0
- package/dist/node_modules/zod/v3/index.js +4 -0
- package/dist/node_modules/zod/v3/locales/en.cjs +112 -0
- package/dist/node_modules/zod/v3/locales/en.d.cts +3 -0
- package/dist/node_modules/zod/v3/locales/en.d.ts +3 -0
- package/dist/node_modules/zod/v3/locales/en.js +109 -0
- package/dist/node_modules/zod/v3/package.json +6 -0
- package/dist/node_modules/zod/v3/standard-schema.cjs +2 -0
- package/dist/node_modules/zod/v3/standard-schema.d.cts +102 -0
- package/dist/node_modules/zod/v3/standard-schema.d.ts +102 -0
- package/dist/node_modules/zod/v3/standard-schema.js +1 -0
- package/dist/node_modules/zod/v3/types.cjs +3777 -0
- package/dist/node_modules/zod/v3/types.d.cts +1034 -0
- package/dist/node_modules/zod/v3/types.d.ts +1034 -0
- package/dist/node_modules/zod/v3/types.js +3695 -0
- package/dist/node_modules/zod/v4/classic/checks.cjs +33 -0
- package/dist/node_modules/zod/v4/classic/checks.d.cts +1 -0
- package/dist/node_modules/zod/v4/classic/checks.d.ts +1 -0
- package/dist/node_modules/zod/v4/classic/checks.js +1 -0
- package/dist/node_modules/zod/v4/classic/coerce.cjs +47 -0
- package/dist/node_modules/zod/v4/classic/coerce.d.cts +17 -0
- package/dist/node_modules/zod/v4/classic/coerce.d.ts +17 -0
- package/dist/node_modules/zod/v4/classic/coerce.js +17 -0
- package/dist/node_modules/zod/v4/classic/compat.cjs +61 -0
- package/dist/node_modules/zod/v4/classic/compat.d.cts +50 -0
- package/dist/node_modules/zod/v4/classic/compat.d.ts +50 -0
- package/dist/node_modules/zod/v4/classic/compat.js +31 -0
- package/dist/node_modules/zod/v4/classic/errors.cjs +74 -0
- package/dist/node_modules/zod/v4/classic/errors.d.cts +30 -0
- package/dist/node_modules/zod/v4/classic/errors.d.ts +30 -0
- package/dist/node_modules/zod/v4/classic/errors.js +48 -0
- package/dist/node_modules/zod/v4/classic/external.cjs +73 -0
- package/dist/node_modules/zod/v4/classic/external.d.cts +15 -0
- package/dist/node_modules/zod/v4/classic/external.d.ts +15 -0
- package/dist/node_modules/zod/v4/classic/external.js +20 -0
- package/dist/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
- package/dist/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
- package/dist/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
- package/dist/node_modules/zod/v4/classic/from-json-schema.js +584 -0
- package/dist/node_modules/zod/v4/classic/index.cjs +33 -0
- package/dist/node_modules/zod/v4/classic/index.d.cts +4 -0
- package/dist/node_modules/zod/v4/classic/index.d.ts +4 -0
- package/dist/node_modules/zod/v4/classic/index.js +4 -0
- package/dist/node_modules/zod/v4/classic/iso.cjs +60 -0
- package/dist/node_modules/zod/v4/classic/iso.d.cts +22 -0
- package/dist/node_modules/zod/v4/classic/iso.d.ts +22 -0
- package/dist/node_modules/zod/v4/classic/iso.js +30 -0
- package/dist/node_modules/zod/v4/classic/package.json +6 -0
- package/dist/node_modules/zod/v4/classic/parse.cjs +41 -0
- package/dist/node_modules/zod/v4/classic/parse.d.cts +31 -0
- package/dist/node_modules/zod/v4/classic/parse.d.ts +31 -0
- package/dist/node_modules/zod/v4/classic/parse.js +15 -0
- package/dist/node_modules/zod/v4/classic/schemas.cjs +1272 -0
- package/dist/node_modules/zod/v4/classic/schemas.d.cts +739 -0
- package/dist/node_modules/zod/v4/classic/schemas.d.ts +739 -0
- package/dist/node_modules/zod/v4/classic/schemas.js +1157 -0
- package/dist/node_modules/zod/v4/core/api.cjs +1222 -0
- package/dist/node_modules/zod/v4/core/api.d.cts +304 -0
- package/dist/node_modules/zod/v4/core/api.d.ts +304 -0
- package/dist/node_modules/zod/v4/core/api.js +1082 -0
- package/dist/node_modules/zod/v4/core/checks.cjs +601 -0
- package/dist/node_modules/zod/v4/core/checks.d.cts +278 -0
- package/dist/node_modules/zod/v4/core/checks.d.ts +278 -0
- package/dist/node_modules/zod/v4/core/checks.js +575 -0
- package/dist/node_modules/zod/v4/core/core.cjs +83 -0
- package/dist/node_modules/zod/v4/core/core.d.cts +70 -0
- package/dist/node_modules/zod/v4/core/core.d.ts +70 -0
- package/dist/node_modules/zod/v4/core/core.js +76 -0
- package/dist/node_modules/zod/v4/core/doc.cjs +39 -0
- package/dist/node_modules/zod/v4/core/doc.d.cts +14 -0
- package/dist/node_modules/zod/v4/core/doc.d.ts +14 -0
- package/dist/node_modules/zod/v4/core/doc.js +35 -0
- package/dist/node_modules/zod/v4/core/errors.cjs +213 -0
- package/dist/node_modules/zod/v4/core/errors.d.cts +220 -0
- package/dist/node_modules/zod/v4/core/errors.d.ts +220 -0
- package/dist/node_modules/zod/v4/core/errors.js +182 -0
- package/dist/node_modules/zod/v4/core/index.cjs +47 -0
- package/dist/node_modules/zod/v4/core/index.d.cts +16 -0
- package/dist/node_modules/zod/v4/core/index.d.ts +16 -0
- package/dist/node_modules/zod/v4/core/index.js +16 -0
- package/dist/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
- package/dist/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
- package/dist/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
- package/dist/node_modules/zod/v4/core/json-schema-generator.js +95 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
- package/dist/node_modules/zod/v4/core/json-schema-processors.js +605 -0
- package/dist/node_modules/zod/v4/core/json-schema.cjs +2 -0
- package/dist/node_modules/zod/v4/core/json-schema.d.cts +88 -0
- package/dist/node_modules/zod/v4/core/json-schema.d.ts +88 -0
- package/dist/node_modules/zod/v4/core/json-schema.js +1 -0
- package/dist/node_modules/zod/v4/core/package.json +6 -0
- package/dist/node_modules/zod/v4/core/parse.cjs +131 -0
- package/dist/node_modules/zod/v4/core/parse.d.cts +49 -0
- package/dist/node_modules/zod/v4/core/parse.d.ts +49 -0
- package/dist/node_modules/zod/v4/core/parse.js +93 -0
- package/dist/node_modules/zod/v4/core/regexes.cjs +166 -0
- package/dist/node_modules/zod/v4/core/regexes.d.cts +79 -0
- package/dist/node_modules/zod/v4/core/regexes.d.ts +79 -0
- package/dist/node_modules/zod/v4/core/regexes.js +133 -0
- package/dist/node_modules/zod/v4/core/registries.cjs +56 -0
- package/dist/node_modules/zod/v4/core/registries.d.cts +35 -0
- package/dist/node_modules/zod/v4/core/registries.d.ts +35 -0
- package/dist/node_modules/zod/v4/core/registries.js +51 -0
- package/dist/node_modules/zod/v4/core/schemas.cjs +2126 -0
- package/dist/node_modules/zod/v4/core/schemas.d.cts +1146 -0
- package/dist/node_modules/zod/v4/core/schemas.d.ts +1146 -0
- package/dist/node_modules/zod/v4/core/schemas.js +2095 -0
- package/dist/node_modules/zod/v4/core/standard-schema.cjs +2 -0
- package/dist/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
- package/dist/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
- package/dist/node_modules/zod/v4/core/standard-schema.js +1 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
- package/dist/node_modules/zod/v4/core/to-json-schema.js +437 -0
- package/dist/node_modules/zod/v4/core/util.cjs +710 -0
- package/dist/node_modules/zod/v4/core/util.d.cts +199 -0
- package/dist/node_modules/zod/v4/core/util.d.ts +199 -0
- package/dist/node_modules/zod/v4/core/util.js +651 -0
- package/dist/node_modules/zod/v4/core/versions.cjs +8 -0
- package/dist/node_modules/zod/v4/core/versions.d.cts +5 -0
- package/dist/node_modules/zod/v4/core/versions.d.ts +5 -0
- package/dist/node_modules/zod/v4/core/versions.js +5 -0
- package/dist/node_modules/zod/v4/index.cjs +22 -0
- package/dist/node_modules/zod/v4/index.d.cts +3 -0
- package/dist/node_modules/zod/v4/index.d.ts +3 -0
- package/dist/node_modules/zod/v4/index.js +3 -0
- package/dist/node_modules/zod/v4/locales/ar.cjs +133 -0
- package/dist/node_modules/zod/v4/locales/ar.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ar.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ar.js +106 -0
- package/dist/node_modules/zod/v4/locales/az.cjs +132 -0
- package/dist/node_modules/zod/v4/locales/az.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/az.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/az.js +105 -0
- package/dist/node_modules/zod/v4/locales/be.cjs +183 -0
- package/dist/node_modules/zod/v4/locales/be.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/be.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/be.js +156 -0
- package/dist/node_modules/zod/v4/locales/bg.cjs +147 -0
- package/dist/node_modules/zod/v4/locales/bg.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/bg.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/bg.js +120 -0
- package/dist/node_modules/zod/v4/locales/ca.cjs +134 -0
- package/dist/node_modules/zod/v4/locales/ca.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ca.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ca.js +107 -0
- package/dist/node_modules/zod/v4/locales/cs.cjs +138 -0
- package/dist/node_modules/zod/v4/locales/cs.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/cs.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/cs.js +111 -0
- package/dist/node_modules/zod/v4/locales/da.cjs +142 -0
- package/dist/node_modules/zod/v4/locales/da.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/da.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/da.js +115 -0
- package/dist/node_modules/zod/v4/locales/de.cjs +135 -0
- package/dist/node_modules/zod/v4/locales/de.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/de.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/de.js +108 -0
- package/dist/node_modules/zod/v4/locales/en.cjs +136 -0
- package/dist/node_modules/zod/v4/locales/en.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/en.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/en.js +109 -0
- package/dist/node_modules/zod/v4/locales/eo.cjs +136 -0
- package/dist/node_modules/zod/v4/locales/eo.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/eo.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/eo.js +109 -0
- package/dist/node_modules/zod/v4/locales/es.cjs +159 -0
- package/dist/node_modules/zod/v4/locales/es.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/es.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/es.js +132 -0
- package/dist/node_modules/zod/v4/locales/fa.cjs +141 -0
- package/dist/node_modules/zod/v4/locales/fa.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/fa.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/fa.js +114 -0
- package/dist/node_modules/zod/v4/locales/fi.cjs +139 -0
- package/dist/node_modules/zod/v4/locales/fi.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/fi.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/fi.js +112 -0
- package/dist/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
- package/dist/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/fr-CA.js +107 -0
- package/dist/node_modules/zod/v4/locales/fr.cjs +135 -0
- package/dist/node_modules/zod/v4/locales/fr.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/fr.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/fr.js +108 -0
- package/dist/node_modules/zod/v4/locales/he.cjs +241 -0
- package/dist/node_modules/zod/v4/locales/he.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/he.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/he.js +214 -0
- package/dist/node_modules/zod/v4/locales/hu.cjs +135 -0
- package/dist/node_modules/zod/v4/locales/hu.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/hu.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/hu.js +108 -0
- package/dist/node_modules/zod/v4/locales/hy.cjs +174 -0
- package/dist/node_modules/zod/v4/locales/hy.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/hy.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/hy.js +147 -0
- package/dist/node_modules/zod/v4/locales/id.cjs +133 -0
- package/dist/node_modules/zod/v4/locales/id.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/id.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/id.js +106 -0
- package/dist/node_modules/zod/v4/locales/index.cjs +104 -0
- package/dist/node_modules/zod/v4/locales/index.d.cts +49 -0
- package/dist/node_modules/zod/v4/locales/index.d.ts +49 -0
- package/dist/node_modules/zod/v4/locales/index.js +49 -0
- package/dist/node_modules/zod/v4/locales/is.cjs +136 -0
- package/dist/node_modules/zod/v4/locales/is.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/is.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/is.js +109 -0
- package/dist/node_modules/zod/v4/locales/it.cjs +135 -0
- package/dist/node_modules/zod/v4/locales/it.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/it.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/it.js +108 -0
- package/dist/node_modules/zod/v4/locales/ja.cjs +134 -0
- package/dist/node_modules/zod/v4/locales/ja.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ja.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ja.js +107 -0
- package/dist/node_modules/zod/v4/locales/ka.cjs +139 -0
- package/dist/node_modules/zod/v4/locales/ka.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ka.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ka.js +112 -0
- package/dist/node_modules/zod/v4/locales/kh.cjs +12 -0
- package/dist/node_modules/zod/v4/locales/kh.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/kh.d.ts +5 -0
- package/dist/node_modules/zod/v4/locales/kh.js +5 -0
- package/dist/node_modules/zod/v4/locales/km.cjs +137 -0
- package/dist/node_modules/zod/v4/locales/km.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/km.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/km.js +110 -0
- package/dist/node_modules/zod/v4/locales/ko.cjs +138 -0
- package/dist/node_modules/zod/v4/locales/ko.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ko.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ko.js +111 -0
- package/dist/node_modules/zod/v4/locales/lt.cjs +230 -0
- package/dist/node_modules/zod/v4/locales/lt.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/lt.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/lt.js +203 -0
- package/dist/node_modules/zod/v4/locales/mk.cjs +136 -0
- package/dist/node_modules/zod/v4/locales/mk.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/mk.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/mk.js +109 -0
- package/dist/node_modules/zod/v4/locales/ms.cjs +134 -0
- package/dist/node_modules/zod/v4/locales/ms.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ms.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ms.js +107 -0
- package/dist/node_modules/zod/v4/locales/nl.cjs +137 -0
- package/dist/node_modules/zod/v4/locales/nl.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/nl.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/nl.js +110 -0
- package/dist/node_modules/zod/v4/locales/no.cjs +135 -0
- package/dist/node_modules/zod/v4/locales/no.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/no.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/no.js +108 -0
- package/dist/node_modules/zod/v4/locales/ota.cjs +136 -0
- package/dist/node_modules/zod/v4/locales/ota.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ota.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ota.js +109 -0
- package/dist/node_modules/zod/v4/locales/package.json +6 -0
- package/dist/node_modules/zod/v4/locales/pl.cjs +136 -0
- package/dist/node_modules/zod/v4/locales/pl.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/pl.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/pl.js +109 -0
- package/dist/node_modules/zod/v4/locales/ps.cjs +141 -0
- package/dist/node_modules/zod/v4/locales/ps.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ps.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ps.js +114 -0
- package/dist/node_modules/zod/v4/locales/pt.cjs +135 -0
- package/dist/node_modules/zod/v4/locales/pt.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/pt.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/pt.js +108 -0
- package/dist/node_modules/zod/v4/locales/ru.cjs +183 -0
- package/dist/node_modules/zod/v4/locales/ru.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ru.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ru.js +156 -0
- package/dist/node_modules/zod/v4/locales/sl.cjs +136 -0
- package/dist/node_modules/zod/v4/locales/sl.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/sl.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/sl.js +109 -0
- package/dist/node_modules/zod/v4/locales/sv.cjs +137 -0
- package/dist/node_modules/zod/v4/locales/sv.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/sv.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/sv.js +110 -0
- package/dist/node_modules/zod/v4/locales/ta.cjs +137 -0
- package/dist/node_modules/zod/v4/locales/ta.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ta.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ta.js +110 -0
- package/dist/node_modules/zod/v4/locales/th.cjs +137 -0
- package/dist/node_modules/zod/v4/locales/th.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/th.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/th.js +110 -0
- package/dist/node_modules/zod/v4/locales/tr.cjs +132 -0
- package/dist/node_modules/zod/v4/locales/tr.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/tr.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/tr.js +105 -0
- package/dist/node_modules/zod/v4/locales/ua.cjs +12 -0
- package/dist/node_modules/zod/v4/locales/ua.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ua.d.ts +5 -0
- package/dist/node_modules/zod/v4/locales/ua.js +5 -0
- package/dist/node_modules/zod/v4/locales/uk.cjs +135 -0
- package/dist/node_modules/zod/v4/locales/uk.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/uk.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/uk.js +108 -0
- package/dist/node_modules/zod/v4/locales/ur.cjs +137 -0
- package/dist/node_modules/zod/v4/locales/ur.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/ur.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/ur.js +110 -0
- package/dist/node_modules/zod/v4/locales/uz.cjs +136 -0
- package/dist/node_modules/zod/v4/locales/uz.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/uz.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/uz.js +109 -0
- package/dist/node_modules/zod/v4/locales/vi.cjs +135 -0
- package/dist/node_modules/zod/v4/locales/vi.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/vi.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/vi.js +108 -0
- package/dist/node_modules/zod/v4/locales/yo.cjs +134 -0
- package/dist/node_modules/zod/v4/locales/yo.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/yo.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/yo.js +107 -0
- package/dist/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
- package/dist/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/zh-CN.js +109 -0
- package/dist/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
- package/dist/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
- package/dist/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
- package/dist/node_modules/zod/v4/locales/zh-TW.js +107 -0
- package/dist/node_modules/zod/v4/mini/checks.cjs +34 -0
- package/dist/node_modules/zod/v4/mini/checks.d.cts +1 -0
- package/dist/node_modules/zod/v4/mini/checks.d.ts +1 -0
- package/dist/node_modules/zod/v4/mini/checks.js +1 -0
- package/dist/node_modules/zod/v4/mini/coerce.cjs +52 -0
- package/dist/node_modules/zod/v4/mini/coerce.d.cts +7 -0
- package/dist/node_modules/zod/v4/mini/coerce.d.ts +7 -0
- package/dist/node_modules/zod/v4/mini/coerce.js +22 -0
- package/dist/node_modules/zod/v4/mini/external.cjs +63 -0
- package/dist/node_modules/zod/v4/mini/external.d.cts +12 -0
- package/dist/node_modules/zod/v4/mini/external.d.ts +12 -0
- package/dist/node_modules/zod/v4/mini/external.js +14 -0
- package/dist/node_modules/zod/v4/mini/index.cjs +32 -0
- package/dist/node_modules/zod/v4/mini/index.d.cts +3 -0
- package/dist/node_modules/zod/v4/mini/index.d.ts +3 -0
- package/dist/node_modules/zod/v4/mini/index.js +3 -0
- package/dist/node_modules/zod/v4/mini/iso.cjs +64 -0
- package/dist/node_modules/zod/v4/mini/iso.d.cts +22 -0
- package/dist/node_modules/zod/v4/mini/iso.d.ts +22 -0
- package/dist/node_modules/zod/v4/mini/iso.js +34 -0
- package/dist/node_modules/zod/v4/mini/package.json +6 -0
- package/dist/node_modules/zod/v4/mini/parse.cjs +16 -0
- package/dist/node_modules/zod/v4/mini/parse.d.cts +1 -0
- package/dist/node_modules/zod/v4/mini/parse.d.ts +1 -0
- package/dist/node_modules/zod/v4/mini/parse.js +1 -0
- package/dist/node_modules/zod/v4/mini/schemas.cjs +1046 -0
- package/dist/node_modules/zod/v4/mini/schemas.d.cts +427 -0
- package/dist/node_modules/zod/v4/mini/schemas.d.ts +427 -0
- package/dist/node_modules/zod/v4/mini/schemas.js +925 -0
- package/dist/node_modules/zod/v4/package.json +6 -0
- package/dist/node_modules/zod/v4-mini/index.cjs +17 -0
- package/dist/node_modules/zod/v4-mini/index.d.cts +1 -0
- package/dist/node_modules/zod/v4-mini/index.d.ts +1 -0
- package/dist/node_modules/zod/v4-mini/index.js +1 -0
- package/dist/node_modules/zod/v4-mini/package.json +6 -0
- package/dist/server/actions/build.js +915 -0
- package/dist/server/collections/ai-visualization-build-settings.js +68 -0
- package/dist/server/collections/ai-visualization-builds.js +143 -0
- package/dist/server/index.js +48 -0
- package/dist/server/pipeline/analyzer.js +220 -0
- package/dist/server/pipeline/fallback.js +113 -0
- package/dist/server/pipeline/generator.js +386 -0
- package/dist/server/pipeline/introspector.js +118 -0
- package/dist/server/pipeline/validator.js +323 -0
- package/dist/server/plugin.js +210 -0
- package/dist/server/resource/settings.js +106 -0
- package/dist/server/tools/build-visualization-block.js +130 -0
- package/dist/server/tools/index.js +46 -0
- package/dist/shared/blockSpec.js +76 -0
- package/dist/shared/constants.js +67 -0
- package/package.json +44 -0
- package/server.d.ts +2 -0
- package/server.js +1 -0
- package/src/client/BuildForm.tsx +376 -0
- package/src/client/BuildVisualizationBlockInitializer.tsx +81 -0
- package/src/client/PreviewPanel.tsx +136 -0
- package/src/client/SettingsPage.tsx +138 -0
- package/src/client/components/BuildPhaseTag.tsx +62 -0
- package/src/client/components/CollectionMultiSelect.tsx +124 -0
- package/src/client/components/LLMServiceSelect.tsx +108 -0
- package/src/client/components/ModelSelect.tsx +105 -0
- package/src/client/components/index.ts +8 -0
- package/src/client/hooks/useBuildPolling.ts +215 -0
- package/src/client/index.tsx +2 -0
- package/src/client/locale.ts +18 -0
- package/src/client/plugin.tsx +90 -0
- package/src/client-v2/index.tsx +1 -0
- package/src/client-v2/plugin.tsx +24 -0
- package/src/index.ts +2 -0
- package/src/locale/en-US.json +45 -0
- package/src/locale/namespace.ts +6 -0
- package/src/locale/vi-VN.json +46 -0
- package/src/locale/zh-CN.json +46 -0
- package/src/server/__tests__/build-action.test.ts +440 -0
- package/src/server/__tests__/plugin.test.ts +187 -0
- package/src/server/actions/build.ts +1318 -0
- package/src/server/collections/ai-visualization-build-settings.ts +43 -0
- package/src/server/collections/ai-visualization-builds.ts +122 -0
- package/src/server/index.ts +2 -0
- package/src/server/pipeline/__tests__/analyzer.test.ts +226 -0
- package/src/server/pipeline/__tests__/generator.test.ts +576 -0
- package/src/server/pipeline/__tests__/introspector.test.ts +268 -0
- package/src/server/pipeline/__tests__/validator.test.ts +517 -0
- package/src/server/pipeline/analyzer.ts +368 -0
- package/src/server/pipeline/fallback.ts +157 -0
- package/src/server/pipeline/generator.ts +651 -0
- package/src/server/pipeline/introspector.ts +206 -0
- package/src/server/pipeline/validator.ts +609 -0
- package/src/server/plugin.ts +255 -0
- package/src/server/resource/settings.ts +97 -0
- package/src/server/tools/build-visualization-block.ts +173 -0
- package/src/server/tools/index.ts +1 -0
- package/src/shared/blockSpec.ts +214 -0
- package/src/shared/constants.ts +46 -0
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec Validator pipeline stage for `plugin-build-visualization-block`.
|
|
3
|
+
*
|
|
4
|
+
* This module is built incrementally:
|
|
5
|
+
* - Task 5.1 implements the core field-existence check plus the remove/remap of
|
|
6
|
+
* invalid references. Every field reference in the spec is resolved against
|
|
7
|
+
* the introspected {@link SchemaSummary}; references that do not exist are
|
|
8
|
+
* remapped to a same-named field (case-insensitive) when one is available, or
|
|
9
|
+
* removed for list-type references (`table.fields`, `table.sortable`,
|
|
10
|
+
* `form.fields`, chart `dimensions`). Each remove/remap is recorded as a
|
|
11
|
+
* {@link ValidationAdjustment}.
|
|
12
|
+
* - Task 5.2 (this revision) extends the remap step with a role→type
|
|
13
|
+
* compatibility table (see {@link tryTypeCompatibleRemap}) so a missing field
|
|
14
|
+
* can fall back to an existing field of a compatible data type, and adds
|
|
15
|
+
* required-role enforcement: a chart left with no usable measure, or a
|
|
16
|
+
* chart/table/form left with no usable fields, means a required role cannot be
|
|
17
|
+
* satisfied, so the spec is marked invalid and
|
|
18
|
+
* {@link ValidationResult.usedFallback} is set to `true` (the actual fallback
|
|
19
|
+
* spec is produced by the caller). Each unmet requirement is recorded as a
|
|
20
|
+
* `unmet-role` {@link ValidationAdjustment}.
|
|
21
|
+
* - Task 5.3 (this revision) adds the schema-unavailable abort and the
|
|
22
|
+
* aggregate adjustments summary. Before any reconciliation runs, the
|
|
23
|
+
* validator checks whether the spec's `primaryCollection` is unavailable in
|
|
24
|
+
* the {@link SchemaSummary} — meaning it is absent from the summary entirely,
|
|
25
|
+
* or present but flagged `introspectionFailed`. If so it short-circuits: it
|
|
26
|
+
* records a single `schema unavailable` adjustment, sets
|
|
27
|
+
* {@link ValidationResult.usedFallback} to `true`, and returns the original
|
|
28
|
+
* spec untouched (it never tries to produce a cleaned spec from a schema it
|
|
29
|
+
* cannot trust). It also surfaces a {@link ValidationSummary} aggregating the
|
|
30
|
+
* adjustments (outcome + removed/remapped counts + unmet-role list).
|
|
31
|
+
*
|
|
32
|
+
* The validator is a pure function over structured input: it never mutates the
|
|
33
|
+
* spec it is given and returns a fresh {@link BlockSpec}.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import type {
|
|
37
|
+
Aggregation,
|
|
38
|
+
BlockSpec,
|
|
39
|
+
ChartDimension,
|
|
40
|
+
ChartMeasure,
|
|
41
|
+
ChartSpecItem,
|
|
42
|
+
FieldMeta,
|
|
43
|
+
SchemaSummary,
|
|
44
|
+
} from '../../shared/blockSpec';
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A single change the validator made to the spec while reconciling it against
|
|
48
|
+
* the real collection schema.
|
|
49
|
+
*/
|
|
50
|
+
export interface ValidationAdjustment {
|
|
51
|
+
/** The original field reference (as written in the spec), or for an
|
|
52
|
+
* `unmet-role` adjustment a short descriptor of the unsatisfied role. */
|
|
53
|
+
reference: string;
|
|
54
|
+
/**
|
|
55
|
+
* Whether the reference was dropped, pointed at a different field, or whether
|
|
56
|
+
* a required role could not be satisfied at all.
|
|
57
|
+
*/
|
|
58
|
+
action: 'removed' | 'remapped' | 'unmet-role';
|
|
59
|
+
/** The field the reference was remapped to (only set for `remapped`). */
|
|
60
|
+
replacement?: string;
|
|
61
|
+
/** A short, non-localized diagnostic describing why the change was made. */
|
|
62
|
+
reason?: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* An aggregate, user-facing summary of everything the validator did, derived
|
|
67
|
+
* from the detailed {@link ValidationAdjustment} list (Requirement 6.7).
|
|
68
|
+
*/
|
|
69
|
+
export interface ValidationSummary {
|
|
70
|
+
/**
|
|
71
|
+
* `validated` when the spec passed validation and every field reference
|
|
72
|
+
* resolves to an existing field (Requirement 6.4); `fallback` when the
|
|
73
|
+
* validator gave up (unmet required role or unavailable schema) and the
|
|
74
|
+
* caller must substitute the fallback spec.
|
|
75
|
+
*/
|
|
76
|
+
outcome: 'validated' | 'fallback';
|
|
77
|
+
/** How many field references were dropped. */
|
|
78
|
+
removedCount: number;
|
|
79
|
+
/** How many field references were pointed at a different field. */
|
|
80
|
+
remappedCount: number;
|
|
81
|
+
/** The `reference` of every `unmet-role` adjustment (required roles that
|
|
82
|
+
* could not be satisfied, including schema-unavailable collections). */
|
|
83
|
+
unmetRoles: string[];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* The result of validating a {@link BlockSpec} against a {@link SchemaSummary}.
|
|
88
|
+
*/
|
|
89
|
+
export interface ValidationResult {
|
|
90
|
+
/** The cleaned spec; never references a field absent from the schema. */
|
|
91
|
+
spec: BlockSpec;
|
|
92
|
+
/** Every remove/remap/unmet-role the validator performed. */
|
|
93
|
+
adjustments: ValidationAdjustment[];
|
|
94
|
+
/**
|
|
95
|
+
* Whether the validator gave up on the supplied spec and a fallback should be
|
|
96
|
+
* used instead. Set to `true` when a required role cannot be satisfied (task
|
|
97
|
+
* 5.2) or when the primary collection's schema is unavailable (task 5.3).
|
|
98
|
+
*/
|
|
99
|
+
usedFallback: boolean;
|
|
100
|
+
/** Aggregate summary of the adjustments, surfaced to the user (task 5.3). */
|
|
101
|
+
summary: ValidationSummary;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Normalize a field name for loose matching: drop every non-alphanumeric
|
|
106
|
+
* character and lower-case the rest. Ported from
|
|
107
|
+
* `plugin-visualization-templates`'s `normalizeFieldName` so the validator does
|
|
108
|
+
* not depend on that plugin's client module.
|
|
109
|
+
*/
|
|
110
|
+
export const normalizeFieldName = (name = ''): string => name.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Baseline role→type compatibility, derived from the `defaultVisualizationRoles`
|
|
114
|
+
* declarations in `plugin-visualization-templates`. The sets are inlined (not
|
|
115
|
+
* imported) so the server validator does not depend on that plugin's client
|
|
116
|
+
* module — the same approach taken for {@link normalizeFieldName} above.
|
|
117
|
+
*
|
|
118
|
+
* This plugin references fields directly rather than via abstract roles, so the
|
|
119
|
+
* table maps the two concrete *usages* a field can have in a spec:
|
|
120
|
+
* - a chart **measure** with a `sum`/`avg`/`max`/`min` aggregation must point at
|
|
121
|
+
* a numeric field (a `count` measure, like the `record` role, accepts any
|
|
122
|
+
* field);
|
|
123
|
+
* - a chart **dimension** groups records and therefore prefers categorical
|
|
124
|
+
* (string-like) or temporal (date) fields, mirroring the `status`/`priority`
|
|
125
|
+
* (string + select/radioGroup/input) and `createdAt`/`updatedAt`/`dueDate`
|
|
126
|
+
* (date + datetime/date) roles.
|
|
127
|
+
*/
|
|
128
|
+
const NUMERIC_FIELD_TYPES = new Set<string>(['integer', 'bigInt', 'float', 'double', 'decimal', 'real', 'number']);
|
|
129
|
+
const NUMERIC_INTERFACES = new Set<string>(['integer', 'number', 'percent', 'currency', 'formula']);
|
|
130
|
+
|
|
131
|
+
const DIMENSION_FIELD_TYPES = new Set<string>(['string', 'text', 'date', 'dateOnly', 'datetime', 'boolean']);
|
|
132
|
+
const DIMENSION_INTERFACES = new Set<string>([
|
|
133
|
+
'select',
|
|
134
|
+
'radioGroup',
|
|
135
|
+
'input',
|
|
136
|
+
'checkbox',
|
|
137
|
+
'multipleSelect',
|
|
138
|
+
'createdAt',
|
|
139
|
+
'updatedAt',
|
|
140
|
+
'datetime',
|
|
141
|
+
'date',
|
|
142
|
+
]);
|
|
143
|
+
|
|
144
|
+
const DATE_FIELD_TYPES = new Set<string>(['date', 'dateOnly', 'datetime']);
|
|
145
|
+
const DATE_INTERFACES = new Set<string>(['createdAt', 'updatedAt', 'datetime', 'date']);
|
|
146
|
+
|
|
147
|
+
/** Record-identifying names (from the `record` role's `matchNames`), preferred
|
|
148
|
+
* as the target when remapping a `count` measure. */
|
|
149
|
+
const RECORD_MATCH_NAMES = new Set<string>(['id', 'uid', 'uuid', 'key']);
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* How a single field reference is used in the spec. The usage determines which
|
|
153
|
+
* field types are permitted when remapping (Requirement 6.5) and which roles
|
|
154
|
+
* are required (Requirement 6.3).
|
|
155
|
+
*/
|
|
156
|
+
type FieldUsage = { kind: 'measure'; aggregation?: Aggregation } | { kind: 'dimension' } | { kind: 'list' };
|
|
157
|
+
|
|
158
|
+
const isNumericField = (meta: FieldMeta): boolean =>
|
|
159
|
+
NUMERIC_FIELD_TYPES.has(meta.type) || NUMERIC_INTERFACES.has(meta.interface);
|
|
160
|
+
|
|
161
|
+
const isDimensionField = (meta: FieldMeta): boolean =>
|
|
162
|
+
DIMENSION_FIELD_TYPES.has(meta.type) || DIMENSION_INTERFACES.has(meta.interface);
|
|
163
|
+
|
|
164
|
+
const isDateField = (meta: FieldMeta): boolean =>
|
|
165
|
+
DATE_FIELD_TYPES.has(meta.type) || DATE_INTERFACES.has(meta.interface);
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Per-collection lookup structures used while resolving references:
|
|
169
|
+
* - `exact` — the set of real field names, for exact-match existence checks
|
|
170
|
+
* (Requirement 6.1).
|
|
171
|
+
* - `normalized` — normalized name → first real field name with that
|
|
172
|
+
* normalization, for the case-insensitive remap baseline.
|
|
173
|
+
* - `byName` — real field name → its {@link FieldMeta}, so the type-compatible
|
|
174
|
+
* remap (task 5.2) can inspect each candidate's data type/interface. Map
|
|
175
|
+
* iteration order follows insertion order, giving deterministic remaps.
|
|
176
|
+
*/
|
|
177
|
+
interface FieldIndex {
|
|
178
|
+
exact: Set<string>;
|
|
179
|
+
normalized: Map<string, string>;
|
|
180
|
+
byName: Map<string, FieldMeta>;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** Build a {@link FieldIndex} per collection from the introspected summary. */
|
|
184
|
+
function buildIndexes(summary: SchemaSummary): Map<string, FieldIndex> {
|
|
185
|
+
const indexes = new Map<string, FieldIndex>();
|
|
186
|
+
for (const collection of summary.collections) {
|
|
187
|
+
const exact = new Set<string>();
|
|
188
|
+
const normalized = new Map<string, string>();
|
|
189
|
+
const byName = new Map<string, FieldMeta>();
|
|
190
|
+
for (const field of collection.fields) {
|
|
191
|
+
if (!field.name) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
exact.add(field.name);
|
|
195
|
+
byName.set(field.name, field);
|
|
196
|
+
const key = normalizeFieldName(field.name);
|
|
197
|
+
if (key && !normalized.has(key)) {
|
|
198
|
+
normalized.set(key, field.name);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
indexes.set(collection.name, { exact, normalized, byName });
|
|
202
|
+
}
|
|
203
|
+
return indexes;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Split a raw field reference into the collection it targets and the field
|
|
208
|
+
* name. A reference is treated as collection-qualified (`collection.field`)
|
|
209
|
+
* only when the segment before the first dot names a collection present in the
|
|
210
|
+
* schema; otherwise the whole reference is a field on `primaryCollection`
|
|
211
|
+
* (so relation paths like `user.name` are not mistaken for a qualifier).
|
|
212
|
+
*/
|
|
213
|
+
function splitRef(
|
|
214
|
+
rawRef: string,
|
|
215
|
+
primaryCollection: string,
|
|
216
|
+
indexes: Map<string, FieldIndex>,
|
|
217
|
+
): { collection: string; field: string; qualified: boolean } {
|
|
218
|
+
const dot = rawRef.indexOf('.');
|
|
219
|
+
if (dot > 0) {
|
|
220
|
+
const head = rawRef.slice(0, dot);
|
|
221
|
+
if (indexes.has(head)) {
|
|
222
|
+
return { collection: head, field: rawRef.slice(dot + 1), qualified: true };
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return { collection: primaryCollection, field: rawRef, qualified: false };
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Whether a candidate field's data type is permitted for the given usage
|
|
230
|
+
* (Requirement 6.5). A `list` reference has no role-specific type constraint, a
|
|
231
|
+
* `count` measure accepts any field (like the `record` role), a numeric measure
|
|
232
|
+
* requires a numeric field, and a dimension requires a categorical/temporal
|
|
233
|
+
* field.
|
|
234
|
+
*/
|
|
235
|
+
function isCompatible(meta: FieldMeta, usage: FieldUsage): boolean {
|
|
236
|
+
if (usage.kind === 'list') {
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
if (usage.kind === 'dimension') {
|
|
240
|
+
return isDimensionField(meta);
|
|
241
|
+
}
|
|
242
|
+
if (usage.aggregation && usage.aggregation !== 'count') {
|
|
243
|
+
return isNumericField(meta);
|
|
244
|
+
}
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Task 5.2: remap a missing field to an existing field of compatible data type
|
|
250
|
+
* using the role/type compatibility table. Only candidates whose type is
|
|
251
|
+
* permitted for the usage are accepted (Requirement 6.5):
|
|
252
|
+
* - numeric measures map to the first numeric field;
|
|
253
|
+
* - `count` measures map to a record-identifying field when present, otherwise
|
|
254
|
+
* the first available field (a count works against any column);
|
|
255
|
+
* - dimensions prefer a date field, then any categorical/temporal field;
|
|
256
|
+
* - generic list references are never type-guessed (returning `undefined` lets
|
|
257
|
+
* the caller remove them, preserving the task 5.1 behavior).
|
|
258
|
+
*/
|
|
259
|
+
function tryTypeCompatibleRemap(index: FieldIndex, _field: string, usage: FieldUsage): string | undefined {
|
|
260
|
+
if (usage.kind === 'list') {
|
|
261
|
+
return undefined;
|
|
262
|
+
}
|
|
263
|
+
const candidates = Array.from(index.byName.values());
|
|
264
|
+
if (usage.kind === 'measure') {
|
|
265
|
+
if (usage.aggregation && usage.aggregation !== 'count') {
|
|
266
|
+
return candidates.find(isNumericField)?.name;
|
|
267
|
+
}
|
|
268
|
+
const record = candidates.find((meta) => RECORD_MATCH_NAMES.has(normalizeFieldName(meta.name)));
|
|
269
|
+
return (record ?? candidates[0])?.name;
|
|
270
|
+
}
|
|
271
|
+
// dimension
|
|
272
|
+
const dated = candidates.find(isDateField);
|
|
273
|
+
if (dated) {
|
|
274
|
+
return dated.name;
|
|
275
|
+
}
|
|
276
|
+
return candidates.find(isDimensionField)?.name;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/** A successful remap target plus the diagnostic describing how it was found. */
|
|
280
|
+
interface RemapHit {
|
|
281
|
+
name: string;
|
|
282
|
+
reason: string;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Attempt to remap a missing field to an existing field on the same collection.
|
|
287
|
+
* A same-named, case-insensitive match is tried first (task 5.1); when no name
|
|
288
|
+
* match is found the type-compatible remap (task 5.2) is consulted. The
|
|
289
|
+
* name-based match is treated as the same semantic field and is therefore not
|
|
290
|
+
* re-gated on type, whereas the type-compatible remap only ever returns a
|
|
291
|
+
* candidate whose type is permitted for the usage (Requirement 6.5).
|
|
292
|
+
*/
|
|
293
|
+
function tryRemap(index: FieldIndex, field: string, usage: FieldUsage): RemapHit | undefined {
|
|
294
|
+
if (!field) {
|
|
295
|
+
return undefined;
|
|
296
|
+
}
|
|
297
|
+
const byName = index.normalized.get(normalizeFieldName(field));
|
|
298
|
+
if (byName) {
|
|
299
|
+
return { name: byName, reason: 'case-insensitive name match' };
|
|
300
|
+
}
|
|
301
|
+
const typed = tryTypeCompatibleRemap(index, field, usage);
|
|
302
|
+
if (typed) {
|
|
303
|
+
return { name: typed, reason: 'type-compatible remap' };
|
|
304
|
+
}
|
|
305
|
+
return undefined;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/** The outcome of classifying a single field reference against the schema. */
|
|
309
|
+
type RefResolution =
|
|
310
|
+
| { kind: 'kept' }
|
|
311
|
+
| { kind: 'remapped'; replacement: string; reason: string }
|
|
312
|
+
| { kind: 'unresolved' };
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Classify a single field reference: kept as-is, remappable to another field,
|
|
316
|
+
* or unresolved (the field is missing and no remap is available — including the
|
|
317
|
+
* case where the target collection is absent from the summary, which task 5.3
|
|
318
|
+
* turns into a schema-unavailable fallback).
|
|
319
|
+
*/
|
|
320
|
+
function classifyRef(
|
|
321
|
+
rawRef: string,
|
|
322
|
+
primaryCollection: string,
|
|
323
|
+
indexes: Map<string, FieldIndex>,
|
|
324
|
+
usage: FieldUsage,
|
|
325
|
+
): RefResolution {
|
|
326
|
+
const { collection, field, qualified } = splitRef(rawRef, primaryCollection, indexes);
|
|
327
|
+
const index = indexes.get(collection);
|
|
328
|
+
if (!index) {
|
|
329
|
+
// Seam for task 5.3: an unknown collection means the schema is unavailable.
|
|
330
|
+
return { kind: 'unresolved' };
|
|
331
|
+
}
|
|
332
|
+
if (field && index.exact.has(field)) {
|
|
333
|
+
return { kind: 'kept' };
|
|
334
|
+
}
|
|
335
|
+
const remap = tryRemap(index, field, usage);
|
|
336
|
+
if (remap) {
|
|
337
|
+
const replacement = qualified ? `${collection}.${remap.name}` : remap.name;
|
|
338
|
+
return { kind: 'remapped', replacement, reason: remap.reason };
|
|
339
|
+
}
|
|
340
|
+
return { kind: 'unresolved' };
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Reconcile a list of string field references (e.g. `table.fields`,
|
|
345
|
+
* `table.sortable`, `form.fields`). Kept and remapped references are retained
|
|
346
|
+
* (remapped ones rewritten to the replacement); unresolved references are
|
|
347
|
+
* dropped. Every remove/remap is appended to `adjustments`.
|
|
348
|
+
*/
|
|
349
|
+
function reconcileStringList(
|
|
350
|
+
list: string[],
|
|
351
|
+
primaryCollection: string,
|
|
352
|
+
indexes: Map<string, FieldIndex>,
|
|
353
|
+
adjustments: ValidationAdjustment[],
|
|
354
|
+
): string[] {
|
|
355
|
+
const result: string[] = [];
|
|
356
|
+
for (const ref of list) {
|
|
357
|
+
const resolution = classifyRef(ref, primaryCollection, indexes, { kind: 'list' });
|
|
358
|
+
if (resolution.kind === 'kept') {
|
|
359
|
+
result.push(ref);
|
|
360
|
+
} else if (resolution.kind === 'remapped') {
|
|
361
|
+
result.push(resolution.replacement);
|
|
362
|
+
adjustments.push({
|
|
363
|
+
reference: ref,
|
|
364
|
+
action: 'remapped',
|
|
365
|
+
replacement: resolution.replacement,
|
|
366
|
+
reason: resolution.reason,
|
|
367
|
+
});
|
|
368
|
+
} else {
|
|
369
|
+
adjustments.push({ reference: ref, action: 'removed', reason: 'field does not exist' });
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return result;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Reconcile a chart's dimensions (a list of objects keyed by `field`). Like
|
|
377
|
+
* {@link reconcileStringList}, unresolved dimensions are dropped and remapped
|
|
378
|
+
* ones rewritten. Dimensions are optional, so dropping one never triggers the
|
|
379
|
+
* fallback by itself.
|
|
380
|
+
*/
|
|
381
|
+
function reconcileDimensions(
|
|
382
|
+
dimensions: ChartDimension[],
|
|
383
|
+
primaryCollection: string,
|
|
384
|
+
indexes: Map<string, FieldIndex>,
|
|
385
|
+
adjustments: ValidationAdjustment[],
|
|
386
|
+
): ChartDimension[] {
|
|
387
|
+
const result: ChartDimension[] = [];
|
|
388
|
+
for (const dimension of dimensions) {
|
|
389
|
+
const resolution = classifyRef(dimension.field, primaryCollection, indexes, { kind: 'dimension' });
|
|
390
|
+
if (resolution.kind === 'kept') {
|
|
391
|
+
result.push(dimension);
|
|
392
|
+
} else if (resolution.kind === 'remapped') {
|
|
393
|
+
result.push({ ...dimension, field: resolution.replacement });
|
|
394
|
+
adjustments.push({
|
|
395
|
+
reference: dimension.field,
|
|
396
|
+
action: 'remapped',
|
|
397
|
+
replacement: resolution.replacement,
|
|
398
|
+
reason: resolution.reason,
|
|
399
|
+
});
|
|
400
|
+
} else {
|
|
401
|
+
adjustments.push({ reference: dimension.field, action: 'removed', reason: 'field does not exist' });
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return result;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Reconcile a chart's measures (a list of objects keyed by `field`). Measures
|
|
409
|
+
* are kept when they resolve, remapped to a type-compatible field when one is
|
|
410
|
+
* available, and dropped otherwise. A measure with a numeric aggregation only
|
|
411
|
+
* remaps to a numeric field (Requirement 6.5); whether the resulting chart
|
|
412
|
+
* still has at least one usable measure is checked by the caller for the
|
|
413
|
+
* required-role enforcement (Requirement 6.3).
|
|
414
|
+
*/
|
|
415
|
+
function reconcileMeasures(
|
|
416
|
+
measures: ChartMeasure[],
|
|
417
|
+
primaryCollection: string,
|
|
418
|
+
indexes: Map<string, FieldIndex>,
|
|
419
|
+
adjustments: ValidationAdjustment[],
|
|
420
|
+
): ChartMeasure[] {
|
|
421
|
+
const result: ChartMeasure[] = [];
|
|
422
|
+
for (const measure of measures) {
|
|
423
|
+
const usage: FieldUsage = { kind: 'measure', aggregation: measure.aggregation };
|
|
424
|
+
const resolution = classifyRef(measure.field, primaryCollection, indexes, usage);
|
|
425
|
+
if (resolution.kind === 'kept') {
|
|
426
|
+
result.push(measure);
|
|
427
|
+
} else if (resolution.kind === 'remapped') {
|
|
428
|
+
result.push({ ...measure, field: resolution.replacement });
|
|
429
|
+
adjustments.push({
|
|
430
|
+
reference: measure.field,
|
|
431
|
+
action: 'remapped',
|
|
432
|
+
replacement: resolution.replacement,
|
|
433
|
+
reason: resolution.reason,
|
|
434
|
+
});
|
|
435
|
+
} else {
|
|
436
|
+
adjustments.push({
|
|
437
|
+
reference: measure.field,
|
|
438
|
+
action: 'removed',
|
|
439
|
+
reason: 'no compatible field for measure',
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return result;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/** Reconcile every field reference inside a single chart item. */
|
|
447
|
+
function reconcileChart(
|
|
448
|
+
chart: ChartSpecItem,
|
|
449
|
+
primaryCollection: string,
|
|
450
|
+
indexes: Map<string, FieldIndex>,
|
|
451
|
+
adjustments: ValidationAdjustment[],
|
|
452
|
+
): ChartSpecItem {
|
|
453
|
+
const next: ChartSpecItem = {
|
|
454
|
+
...chart,
|
|
455
|
+
measures: reconcileMeasures(chart.measures, primaryCollection, indexes, adjustments),
|
|
456
|
+
};
|
|
457
|
+
if (chart.dimensions) {
|
|
458
|
+
next.dimensions = reconcileDimensions(chart.dimensions, primaryCollection, indexes, adjustments);
|
|
459
|
+
}
|
|
460
|
+
return next;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Enforce required roles after reconciliation (Requirement 6.3). A chart needs
|
|
465
|
+
* at least one usable measure, and a chart/table/form block needs at least one
|
|
466
|
+
* usable field; any block left short cannot satisfy a required role, so an
|
|
467
|
+
* `unmet-role` adjustment is recorded and the fallback is signalled. Returns
|
|
468
|
+
* `true` when at least one required role is unmet.
|
|
469
|
+
*/
|
|
470
|
+
function enforceRequiredRoles(spec: BlockSpec, next: BlockSpec, adjustments: ValidationAdjustment[]): boolean {
|
|
471
|
+
let unmet = false;
|
|
472
|
+
const flag = (reference: string, reason: string) => {
|
|
473
|
+
adjustments.push({ reference, action: 'unmet-role', reason });
|
|
474
|
+
unmet = true;
|
|
475
|
+
};
|
|
476
|
+
|
|
477
|
+
if (spec.blockType === 'chart') {
|
|
478
|
+
const charts = next.charts ?? [];
|
|
479
|
+
if (charts.length === 0) {
|
|
480
|
+
flag('chart', 'no chart could be produced');
|
|
481
|
+
}
|
|
482
|
+
for (const chart of charts) {
|
|
483
|
+
if (chart.measures.length === 0) {
|
|
484
|
+
flag(`chart:${chart.key}`, 'required measure has no compatible field');
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
} else if (next.charts) {
|
|
488
|
+
// Non-chart block that still carries chart items: a chart with no usable
|
|
489
|
+
// measure is still an unmet required role.
|
|
490
|
+
for (const chart of next.charts) {
|
|
491
|
+
if (chart.measures.length === 0) {
|
|
492
|
+
flag(`chart:${chart.key}`, 'required measure has no compatible field');
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
if (spec.blockType === 'table') {
|
|
498
|
+
if (!next.table || next.table.fields.length === 0) {
|
|
499
|
+
flag('table.fields', 'no usable fields remain for the table');
|
|
500
|
+
}
|
|
501
|
+
} else if (next.table && next.table.fields.length === 0) {
|
|
502
|
+
flag('table.fields', 'no usable fields remain for the table');
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
if (spec.blockType === 'form') {
|
|
506
|
+
if (!next.form || next.form.fields.length === 0) {
|
|
507
|
+
flag('form.fields', 'no usable fields remain for the form');
|
|
508
|
+
}
|
|
509
|
+
} else if (next.form && next.form.fields.length === 0) {
|
|
510
|
+
flag('form.fields', 'no usable fields remain for the form');
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
return unmet;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Build the aggregate {@link ValidationSummary} from the detailed adjustments
|
|
518
|
+
* list (Requirement 6.7). `outcome` is `fallback` whenever the validator gave
|
|
519
|
+
* up (`usedFallback`) and `validated` otherwise (Requirement 6.4).
|
|
520
|
+
*/
|
|
521
|
+
function summarize(adjustments: ValidationAdjustment[], usedFallback: boolean): ValidationSummary {
|
|
522
|
+
let removedCount = 0;
|
|
523
|
+
let remappedCount = 0;
|
|
524
|
+
const unmetRoles: string[] = [];
|
|
525
|
+
for (const adjustment of adjustments) {
|
|
526
|
+
if (adjustment.action === 'removed') {
|
|
527
|
+
removedCount += 1;
|
|
528
|
+
} else if (adjustment.action === 'remapped') {
|
|
529
|
+
remappedCount += 1;
|
|
530
|
+
} else {
|
|
531
|
+
unmetRoles.push(adjustment.reference);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
return {
|
|
535
|
+
outcome: usedFallback ? 'fallback' : 'validated',
|
|
536
|
+
removedCount,
|
|
537
|
+
remappedCount,
|
|
538
|
+
unmetRoles,
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* Validate a {@link BlockSpec} against the introspected {@link SchemaSummary}.
|
|
544
|
+
*
|
|
545
|
+
* Walks every field reference (`charts[].measures[].field`,
|
|
546
|
+
* `charts[].dimensions[].field`, `table.fields[]`, `table.sortable[]`,
|
|
547
|
+
* `form.fields[]`), keeping references that exist, remapping references to a
|
|
548
|
+
* same-named field or a type-compatible field when possible, and removing
|
|
549
|
+
* unresolved references. After reconciliation, required-role enforcement
|
|
550
|
+
* (task 5.2) flips `usedFallback` to `true` when a chart has no usable measure
|
|
551
|
+
* or a block has no usable fields. Before any of that, task 5.3 aborts with a
|
|
552
|
+
* fallback when the spec's `primaryCollection` schema is unavailable, and the
|
|
553
|
+
* result always carries an aggregate {@link ValidationSummary}. The input spec
|
|
554
|
+
* is never mutated; a fresh spec is returned alongside the list of adjustments.
|
|
555
|
+
*/
|
|
556
|
+
export function validate(spec: BlockSpec, summary: SchemaSummary): ValidationResult {
|
|
557
|
+
const indexes = buildIndexes(summary);
|
|
558
|
+
const adjustments: ValidationAdjustment[] = [];
|
|
559
|
+
const primaryCollection = spec.primaryCollection;
|
|
560
|
+
|
|
561
|
+
// Task 5.3 (Requirement 6.6): if the schema for the primary collection is
|
|
562
|
+
// unavailable, do not attempt to clean a spec we cannot trust — record the
|
|
563
|
+
// unavailability and signal the fallback. "Unavailable" here means the
|
|
564
|
+
// primary collection is missing from the summary entirely, or present but
|
|
565
|
+
// flagged `introspectionFailed`. Introspection (including the design's 5s
|
|
566
|
+
// metadata-retrieval window) already happened upstream in the
|
|
567
|
+
// CollectionIntrospector, so this layer needs no timer of its own; it only
|
|
568
|
+
// inspects the summary it was handed.
|
|
569
|
+
const primaryIndex = indexes.get(primaryCollection);
|
|
570
|
+
const primarySummary = summary.collections.find((collection) => collection.name === primaryCollection);
|
|
571
|
+
const primaryUnavailable = !primaryIndex || primarySummary?.introspectionFailed === true;
|
|
572
|
+
if (primaryUnavailable) {
|
|
573
|
+
adjustments.push({
|
|
574
|
+
reference: primaryCollection,
|
|
575
|
+
action: 'unmet-role',
|
|
576
|
+
reason: 'schema unavailable',
|
|
577
|
+
});
|
|
578
|
+
return { spec, adjustments, usedFallback: true, summary: summarize(adjustments, true) };
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
const next: BlockSpec = { ...spec };
|
|
582
|
+
|
|
583
|
+
if (spec.charts) {
|
|
584
|
+
next.charts = spec.charts.map((chart) => reconcileChart(chart, primaryCollection, indexes, adjustments));
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
if (spec.table) {
|
|
588
|
+
next.table = {
|
|
589
|
+
...spec.table,
|
|
590
|
+
fields: reconcileStringList(spec.table.fields, primaryCollection, indexes, adjustments),
|
|
591
|
+
};
|
|
592
|
+
if (spec.table.sortable) {
|
|
593
|
+
next.table.sortable = reconcileStringList(spec.table.sortable, primaryCollection, indexes, adjustments);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
if (spec.form) {
|
|
598
|
+
next.form = {
|
|
599
|
+
...spec.form,
|
|
600
|
+
fields: reconcileStringList(spec.form.fields, primaryCollection, indexes, adjustments),
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
const usedFallback = enforceRequiredRoles(spec, next, adjustments);
|
|
605
|
+
|
|
606
|
+
return { spec: next, adjustments, usedFallback, summary: summarize(adjustments, usedFallback) };
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
export default validate;
|