@@ -1916,22 +1916,18 @@ export class MapType<T extends Type> extends AbstractType<schema.MapSchema<Schem
19161916 }
19171917
19181918 public codegenValidator ( ctx : ValidatorCodegenContext , path : ValidationPath , r : string ) : void {
1919- throw new Error ( 'TODO' ) ;
1920- // const rl = ctx.codegen.getRegister();
1921- // const ri = ctx.codegen.getRegister();
1922- // const rv = ctx.codegen.getRegister();
1923- // const err = ctx.err(ValidationError.ARR, path);
1924- // const errLen = ctx.err(ValidationError.ARR_LEN, path);
1925- // const {min, max} = this.schema;
1926- // ctx.js(/* js */ `if (!Array.isArray(${r})) return ${err};`);
1927- // ctx.js(`var ${rl} = ${r}.length;`);
1928- // if (min !== undefined) ctx.js(`if (${rl} < ${min}) return ${errLen};`);
1929- // if (max !== undefined) ctx.js(`if (${rl} > ${max}) return ${errLen};`);
1930- // ctx.js(`for (var ${rv}, ${ri} = ${r}.length; ${ri}-- !== 0;) {`);
1931- // ctx.js(`${rv} = ${r}[${ri}];`);
1932- // this.type.codegenValidator(ctx, [...path, {r: ri}], rv);
1933- // ctx.js(` }`);
1934- // ctx.emitCustomValidators(this, path, r);
1919+ const err = ctx . err ( ValidationError . MAP , path ) ;
1920+ ctx . js ( `if (!${ r } || (typeof ${ r } !== 'object') || (${ r } .constructor !== Object)) return ${ err } ;` ) ;
1921+ const rKeys = ctx . codegen . var ( `Object.keys(${ r } );` ) ;
1922+ const rLength = ctx . codegen . var ( `${ rKeys } .length` ) ;
1923+ const rKey = ctx . codegen . r ( ) ;
1924+ const rValue = ctx . codegen . r ( ) ;
1925+ ctx . js ( `for (var ${ rKey } , ${ rValue } , i = 0; i < ${ rLength } ; i++) {` ) ;
1926+ ctx . js ( `${ rKey } = ${ rKeys } [i];` ) ;
1927+ ctx . js ( `${ rValue } = ${ r } [${ rKey } ];` ) ;
1928+ this . type . codegenValidator ( ctx , [ ...path , { r : rKey } ] , rValue ) ;
1929+ ctx . js ( `}` ) ;
1930+ ctx . emitCustomValidators ( this , path , r ) ;
19351931 }
19361932
19371933 public codegenJsonTextEncoder ( ctx : JsonTextEncoderCodegenContext , value : JsExpression ) : void {
@@ -2018,7 +2014,7 @@ export class MapType<T extends Type> extends AbstractType<schema.MapSchema<Schem
20182014 }
20192015
20202016 public codegenCapacityEstimator ( ctx : CapacityEstimatorCodegenContext , value : JsExpression ) : void {
2021- throw new Error ( 'TODO' ) ;
2017+ throw new Error ( 'TODO CAP ' ) ;
20222018 // const codegen = ctx.codegen;
20232019 // ctx.inc(MaxEncodingOverhead.Array);
20242020 // const rLen = codegen.var(`${value.use()}.length`);
0 commit comments