diff --git a/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts index 2726f2f81b..f6b0cc2d92 100644 --- a/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts +++ b/packages/quicktype-core/src/language/TypeScriptEffectSchema/TypeScriptEffectSchemaRenderer.ts @@ -210,9 +210,13 @@ export class TypeScriptEffectSchemaRenderer extends ConvenienceRenderer { const pattern = patternForType(t); const schema: Sourcelike[] = ["S.String"]; if (min !== undefined) - schema.push(".pipe(S.minLength(", min.toString(), "))"); + schema.push( + `.pipe(S.filter(value => Array.from(value).length >= ${min}))`, + ); if (max !== undefined) - schema.push(".pipe(S.maxLength(", max.toString(), "))"); + schema.push( + `.pipe(S.filter(value => Array.from(value).length <= ${max}))`, + ); if (pattern !== undefined) schema.push( `.pipe(S.pattern(new RegExp(${JSON.stringify(pattern)})))`, diff --git a/test/languages.ts b/test/languages.ts index ea410d32e1..0c8ad13f3a 100644 --- a/test/languages.ts +++ b/test/languages.ts @@ -1745,6 +1745,9 @@ export const TypeScriptEffectSchemaLanguage: Language = { topLevel: "TopLevel", skipJSON: [], skipMiscJSON: false, + additionalSchemaFiles: [ + "test/inputs/regressions/unicode-codepoint-length.schema", + ], skipSchema: [], rendererOptions: {}, quickTestRendererOptions: [],