ITADN

Proposal: To be able to easily run `@valibot/i18n` in Playground as well

#1487Openysknsid25 创建于 2026-05-30
enhancement
Y
ysknsid25commented
# Motivation I want to be able to easily run `@valibot/i18n` in Playground as well. Currently, attempting to run `@valibot/i18n` in the production Playground results in an error. Therefore, it's not easy to check the error message. The code I tried to run was as follows: ```ts import * as v from 'valibot'; import '@valibot/i18n/ja'; const cases = [ { label: 'minBytes(3)', schema: v.pipe(v.string(), v.minBytes(3)), input: 'a', }, { label: 'maxBytes(3)', schema: v.pipe(v.string(), v.maxBytes(3)), input: 'hello', }, { label: 'minValue(18)', schema: v.pipe(v.number(), v.minValue(18)), input: 10, }, { label: 'maxValue(100)', schema: v.pipe(v.number(), v.maxValue(100)), input: 200, }, { label: 'gtValue(0)', schema: v.pipe(v.number(), v.gtValue(0)), input: 0 }, { label: 'ltValue(100)', schema: v.pipe(v.number(), v.ltValue(100)), input: 100, }, { label: 'nonEmpty()', schema: v.pipe(v.string(), v.nonEmpty()), input: '' }, { label: 'empty()', schema: v.pipe(v.string(), v.empty()), input: 'hello' }, { label: 'notBytes(5)', schema: v.pipe(v.string(), v.notBytes(5)), input: 'hello', }, { label: 'notLength(3)', schema: v.pipe(v.string(), v.notLength(3)), input: 'abc', }, { label: 'notValue(42)', schema: v.pipe(v.number(), v.notValue(42)), input: 42, }, ]; const col1 = 16, col2 = 52, col3 = 52; const header = `${'バリデータ'.padEnd(col1)} ${'英語(デフォルト)'.padEnd( col2 )} ${'日本語(@valibot/i18n/ja)'}`; console.log(header); console.log('-'.repeat(col1 + col2 + col3)); for (const { label, schema, input } of cases) { const en = v.safeParse(schema, input); v.setGlobalConfig({ lang: 'ja' }); const ja = v.safeParse(schema, input); v.setGlobalConfig({ lang: undefined }); const enMsg = en.success ? 'OK' : en.issues[0].message; const jaMsg = ja.success ? 'OK' : ja.issues[0].message; console.log(`${label.padEnd(col1)} ${enMsg.padEnd(col2)} ${jaMsg}`); } ``` <img width="2894" height="1574" alt="Image" src="https://github.com/user-attachments/assets/6db4ecdc-4274-425e-b2f8-acf24f9858bd" /> # Proposal Basically, we should be able to do it the same way as `to-json-schema`. Maybe... 1. Build `@valibot/i18n` and prepare the generated files (e.g., `ja/index.mjs`). 2. `index.tsx`: Collect the built i18n modules using import.meta.glob, convert them to bare specifiers (e.g., `@valibot/i18n/ja`), and add them to the iframe's importmap. This resolves to the same URL as the main Valibot instance, allowing them to share the same instance. 3. `CodeEditor.tsx`: Add an ambient module declaration to Monaco to prevent type errors in imports in the editor. 4. `website/package.json`: Add `@valibot/i18n` to the workspace dependencies. ## PoC https://github.com/open-circle/valibot/pull/1488
1 条评论