@@ -1977,38 +1977,31 @@ export class MapType<T extends Type> extends AbstractType<schema.MapSchema<Schem
19771977 }
19781978
19791979 public codegenJsonEncoder ( ctx : JsonEncoderCodegenContext , value : JsExpression ) : void {
1980- throw new Error ( 'TODO' ) ;
1981- // const type = this.type;
1982- // const codegen = ctx.codegen;
1983- // const expr = new JsExpression(() => `${rItem}`);
1984- // const r = codegen.var(value.use());
1985- // const rLen = codegen.var(`${r}.length`);
1986- // const rLast = codegen.var(`${rLen} - 1`);
1987- // const ri = codegen.var('0');
1988- // const rItem = codegen.var();
1989- // ctx.blob(
1990- // ctx.gen((encoder) => {
1991- // encoder.writeStartArr();
1992- // }),
1993- // );
1994- // codegen.js(`for(; ${ri} < ${rLast}; ${ri}++) {`);
1995- // codegen.js(`${rItem} = ${r}[${ri}];`);
1996- // type.codegenJsonEncoder(ctx, expr);
1997- // ctx.blob(
1998- // ctx.gen((encoder) => {
1999- // encoder.writeArrSeparator();
2000- // }),
2001- // );
2002- // ctx.js(` }`);
2003- // ctx.js(`if (${rLen}) {`);
2004- // codegen.js(`${rItem} = ${r}[${rLast}];`);
2005- // type.codegenJsonEncoder(ctx, expr);
2006- // ctx.js(` }`);
2007- // ctx.blob(
2008- // ctx.gen((encoder) => {
2009- // encoder.writeEndArr();
2010- // }),
2011- // );
1980+ const type = this . type ;
1981+ const objStartBlob = ctx . gen ( ( encoder ) => encoder . writeStartObj ( ) ) ;
1982+ const objEndBlob = ctx . gen ( ( encoder ) => encoder . writeEndObj ( ) ) ;
1983+ const separatorBlob = ctx . gen ( ( encoder ) => encoder . writeObjSeparator ( ) ) ;
1984+ const keySeparatorBlob = ctx . gen ( ( encoder ) => encoder . writeObjKeySeparator ( ) ) ;
1985+ const codegen = ctx . codegen ;
1986+ const r = codegen . var ( value . use ( ) ) ;
1987+ const rKeys = codegen . var ( `Object.keys(${ r } )` ) ;
1988+ const rKey = codegen . var ( ) ;
1989+ const rLength = codegen . var ( `${ rKeys } .length` ) ;
1990+ ctx . blob ( objStartBlob ) ;
1991+ ctx . codegen . if ( `${ rLength } ` , ( ) => {
1992+ ctx . js ( `${ rKey } = ${ rKeys } [0];` ) ;
1993+ codegen . js ( `encoder.writeStr(${ rKey } );` ) ;
1994+ ctx . blob ( keySeparatorBlob ) ;
1995+ type . codegenJsonEncoder ( ctx , new JsExpression ( ( ) => `${ r } [${ rKey } ]` ) ) ;
1996+ } ) ;
1997+ ctx . js ( `for (var i = 1; i < ${ rLength } ; i++) {` ) ;
1998+ ctx . js ( `${ rKey } = ${ rKeys } [i];` ) ;
1999+ ctx . blob ( separatorBlob ) ;
2000+ codegen . js ( `encoder.writeStr(${ rKey } );` ) ;
2001+ ctx . blob ( keySeparatorBlob ) ;
2002+ type . codegenJsonEncoder ( ctx , new JsExpression ( ( ) => `${ r } [${ rKey } ]` ) ) ;
2003+ ctx . js ( `}` ) ;
2004+ ctx . blob ( objEndBlob ) ;
20122005 }
20132006
20142007 public codegenCapacityEstimator ( ctx : CapacityEstimatorCodegenContext , value : JsExpression ) : void {
0 commit comments