@@ -34,11 +34,14 @@ export class Create implements CustomMethodGenerator {
3434 source ,
3535 descriptor ,
3636
37- // const message = { boolField: false, ... } ;
38- this . makeMessageVariable ( source , descriptor ) ,
37+ // const message = globalThis.Object.create(this.messagePrototype) ;
38+ this . makeMessageVariable ( ) ,
3939
40- // Object.defineProperty(message, MESSAGE_TYPE, {enumerable: false, value: this});
41- this . makeDefineMessageTypeSymbolProperty ( source ) ,
40+ // message.boolField = false;
41+ // message.repeatedField = [];
42+ // message.mapField = {};
43+ // ...
44+ ...this . makeMessagePropertyAssignments ( source , descriptor ) ,
4245
4346 // if (value !== undefined)
4447 // reflectionMergePartial<ScalarValuesMessage>(message, value, this);
@@ -73,52 +76,52 @@ export class Create implements CustomMethodGenerator {
7376 }
7477
7578
76- makeMessageVariable ( source : TypescriptFile , descriptor : DescriptorProto ) {
77- let messageType = this . interpreter . getMessageType ( descriptor ) ;
78- let defaultMessage = messageType . create ( ) ;
79+ makeMessageVariable ( ) {
7980 return ts . createVariableStatement (
8081 undefined ,
8182 ts . createVariableDeclarationList (
8283 [ ts . createVariableDeclaration (
8384 ts . createIdentifier ( "message" ) ,
8485 undefined ,
85- typescriptLiteralFromValue ( defaultMessage )
86+ ts . createCall (
87+ ts . createPropertyAccess (
88+ ts . createPropertyAccess (
89+ ts . createIdentifier ( "globalThis" ) ,
90+ ts . createIdentifier ( "Object" )
91+ ) ,
92+ ts . createIdentifier ( "create" )
93+ ) ,
94+ undefined ,
95+ [
96+ ts . createNonNullExpression (
97+ ts . createPropertyAccess (
98+ ts . createThis ( ) ,
99+ ts . createIdentifier ( "messagePrototype" )
100+ )
101+ )
102+ ]
103+ )
86104 ) ] ,
87105 ts . NodeFlags . Const
88106 )
89107 ) ;
90108 }
91109
92110
93- makeDefineMessageTypeSymbolProperty ( source : TypescriptFile ) {
94- const MESSAGE_TYPE = this . imports . name ( source , 'MESSAGE_TYPE' , this . options . runtimeImportPath ) ;
95-
96- return ts . createExpressionStatement ( ts . createCall (
97- ts . createPropertyAccess (
98- ts . createPropertyAccess (
99- ts . createIdentifier ( "globalThis" ) ,
100- ts . createIdentifier ( "Object" )
101- ) ,
102- ts . createIdentifier ( "defineProperty" )
103- ) ,
104- undefined ,
105- [
106- ts . createIdentifier ( "message" ) ,
107- ts . createIdentifier ( MESSAGE_TYPE ) ,
108- ts . createObjectLiteral (
109- [
110- ts . createPropertyAssignment (
111- ts . createIdentifier ( "enumerable" ) ,
112- ts . createFalse ( )
113- ) ,
114- ts . createPropertyAssignment (
115- ts . createIdentifier ( "value" ) ,
116- ts . createThis ( )
117- )
118- ] ,
119- false
111+ makeMessagePropertyAssignments ( source : TypescriptFile , descriptor : DescriptorProto ) {
112+ let messageType = this . interpreter . getMessageType ( descriptor ) ;
113+ let defaultMessage = messageType . create ( ) ;
114+ return Object . entries ( defaultMessage ) . map ( ( [ key , value ] ) : ts . ExpressionStatement => (
115+ ts . createExpressionStatement (
116+ ts . createBinary (
117+ ts . createPropertyAccess (
118+ ts . createIdentifier ( "message" ) ,
119+ ts . createIdentifier ( key )
120+ ) ,
121+ ts . createToken ( ts . SyntaxKind . EqualsToken ) ,
122+ typescriptLiteralFromValue ( value )
120123 )
121- ]
124+ )
122125 ) ) ;
123126 }
124127
0 commit comments