@darabonba/python-generator 1.2.18 → 1.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ChangeLog.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # ChangeLog
2
2
 
3
+ ## 1.2.19 - 2025-01-13
4
+ * Adjust field name for object.
5
+
3
6
  ## 1.2.18 - 2024-02-29
4
7
  * Fix: avoid keywords in variables.
5
8
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@darabonba/python-generator",
3
- "version": "1.2.18",
3
+ "version": "1.2.19",
4
4
  "description": "The darabonba generator for Python",
5
5
  "main": "src/generator.js",
6
6
  "directories": {
@@ -30,7 +30,7 @@
30
30
  "author": "Alibaba Cloud OpenAPI Team",
31
31
  "license": "Apache-2.0",
32
32
  "dependencies": {
33
- "@darabonba/parser": "^1.2.10",
33
+ "@darabonba/parser": "^1.4.7",
34
34
  "enum": "^3.0.4"
35
35
  }
36
36
  }
package/src/lib/helper.js CHANGED
@@ -41,7 +41,12 @@ function _subModelName(name) {
41
41
  }
42
42
 
43
43
  function _string(str) {
44
- return str.string;
44
+ if (str.string === '""') {
45
+ return '\\"\\"';
46
+ }
47
+ return str.string.replace(/([^\\])"+|^"/g, function (str) {
48
+ return str.replace(/"/g, '\\"');
49
+ });
45
50
  }
46
51
 
47
52
  function _isBasicType(type) {
@@ -172,9 +177,14 @@ function _toSnakeCase(str) {
172
177
  return res;
173
178
  }
174
179
 
180
+ function _escape(str) {
181
+ return str.includes('-') ? `${str}` : str;
182
+ }
183
+
175
184
 
176
185
  module.exports = {
177
186
  _config,
187
+ _escape,
178
188
  _upperFirst,
179
189
  _camelCase,
180
190
  _string,
@@ -3,6 +3,8 @@
3
3
  const debug = require('../lib/debug');
4
4
 
5
5
  const {
6
+ _string,
7
+ _escape,
6
8
  _isBasicType
7
9
  } = require('../lib/helper');
8
10
 
@@ -176,7 +178,7 @@ class BaseResolver {
176
178
  } else if (typeNode.type === 'modelBody') {
177
179
  // is sub model
178
180
  typeInfo['objectType'] = 'model';
179
- typeInfo['lexeme'] = this.combinator.addModelInclude([this.object.name, sourceNode.fieldName.lexeme].join('.'));
181
+ typeInfo['lexeme'] = this.combinator.addModelInclude([this.object.name, _escape(sourceNode.fieldName.lexeme) || _string(sourceNode.fieldName)].join('.'));
180
182
  return typeInfo;
181
183
  } else if (_isBasicType(typeNode.type)) {
182
184
  return this.resolveType(typeNode.type, typeNode);
@@ -43,7 +43,10 @@ const {
43
43
  } = require('../langs/common/enum');
44
44
 
45
45
  const {
46
- _isBasicType
46
+ _isBasicType,
47
+ _string,
48
+ _escape
49
+
47
50
  } = require('../lib/helper');
48
51
 
49
52
  const systemPackage = ['Util'];
@@ -158,7 +161,7 @@ class ClientResolver extends BaseResolver {
158
161
  ast.params.params.forEach(p => {
159
162
  var param = new GrammerValue();
160
163
  param.type = this.resolveType(p.paramType, p);
161
- param.key = p.paramName.lexeme;
164
+ param.key = _escape(p.paramName.lexeme || _string(p.paramName));
162
165
  if (p.needValidate) {
163
166
  func.addBodyNode(new GrammerCall('method', [
164
167
  { type: 'object', name: param.key },
@@ -450,8 +453,8 @@ class ClientResolver extends BaseResolver {
450
453
  valGrammer.needCast = true;
451
454
  exprChild.isExpand = true;
452
455
  }
453
- if (field.fieldName && field.fieldName.lexeme) {
454
- exprChild.key = field.fieldName.lexeme;
456
+ if (field.fieldName && (field.fieldName.lexeme || field.fieldName.string)) {
457
+ exprChild.key = (field.fieldName.lexeme) || _string(field.fieldName);
455
458
  }
456
459
  this.renderGrammerValue(exprChild, field.expr, expectedType);
457
460
  this.findComments(valGrammer, field);
@@ -6,7 +6,9 @@ const assert = require('assert');
6
6
  const BaseResolver = require('./base');
7
7
 
8
8
  const {
9
- _isBasicType
9
+ _string,
10
+ _escape,
11
+ _isBasicType,
10
12
  } = require('../lib/helper');
11
13
 
12
14
  const {
@@ -95,7 +97,7 @@ class ModelResolver extends BaseResolver {
95
97
 
96
98
  const prop = new PropItem();
97
99
  prop.belong = object.index;
98
- prop.name = node.fieldName.lexeme;
100
+ prop.name = _escape(node.fieldName.lexeme) || _string(node.fieldName);
99
101
  prop.type = this.resolveType(node.fieldValue, node);
100
102
 
101
103
  prop.modify.push(Modify.public());
@@ -141,7 +143,7 @@ class ModelResolver extends BaseResolver {
141
143
  }
142
144
 
143
145
  findSubModelsUsed(node, subModelUsed = [], pre = '') {
144
- let name = node.fieldName.lexeme;
146
+ let name = _escape(node.fieldName.lexeme) || _string(node.fieldName);
145
147
  if (pre !== '') {
146
148
  name = pre + '.' + name;
147
149
  }
@@ -18,7 +18,9 @@ class Client(object):
18
18
  m = {}
19
19
  return TeaCore.merge({
20
20
  'key': 'value',
21
- 'key-1': 'value-1'
21
+ 'key-1': 'value-1',
22
+ 'key-2': 'value-2',
23
+ '\"\"': 'value-3'
22
24
  }, m)
23
25
 
24
26
  @staticmethod
@@ -145,7 +145,8 @@ class MyModel(TeaModel):
145
145
  def __init__(self, stringfield=None, bytesfield=None, stringarrayfield=None, mapfield=None, name=None,
146
146
  submodel=None, subarray=None, maparray=None, object=None, numberfield=None, readable=None, exist_model=None,
147
147
  class_end_time=None, max_length=None, min_length=None, maximum=None, minimum=None, test_3=None,
148
- array_array_model=None, array_map_model=None, map_model=None, submodel_map=None, sub_model_model=None):
148
+ array_array_model=None, array_map_model=None, map_model=None, submodel_map=None, sub_model_model=None,
149
+ map_array_map=None, map_array_model=None):
149
150
  self.stringfield = stringfield # type: str
150
151
  self.bytesfield = bytesfield # type: bytes
151
152
  self.stringarrayfield = stringarrayfield # type: list[str]
@@ -175,6 +176,8 @@ class MyModel(TeaModel):
175
176
  self.map_model = map_model # type: dict[str, M]
176
177
  self.submodel_map = submodel_map # type: dict[str, MyModelSubmodel]
177
178
  self.sub_model_model = sub_model_model # type: MyModelSubModelModel
179
+ self.map_array_map = map_array_map # type: dict[str, list[dict[str, str]]]
180
+ self.map_array_model = map_array_model # type: dict[str, list[M]]
178
181
 
179
182
  def validate(self):
180
183
  self.validate_required(self.stringfield, 'stringfield')
@@ -226,6 +229,11 @@ class MyModel(TeaModel):
226
229
  self.validate_required(self.sub_model_model, 'sub_model_model')
227
230
  if self.sub_model_model:
228
231
  self.sub_model_model.validate()
232
+ if self.map_array_model:
233
+ for v in self.map_array_model.values():
234
+ for k1 in v:
235
+ if k1:
236
+ k1.validate()
229
237
 
230
238
  def to_map(self):
231
239
  _map = super(MyModel, self).to_map()
@@ -244,13 +252,13 @@ class MyModel(TeaModel):
244
252
  if self.name is not None:
245
253
  result['realName'] = self.name
246
254
  if self.submodel is not None:
247
- result['submodel'] = self.submodel.to_map()
248
- result['subarray'] = []
255
+ result['SubModel'] = self.submodel.to_map()
256
+ result['SubArray'] = []
249
257
  if self.subarray is not None:
250
258
  for k in self.subarray:
251
- result['subarray'].append(k.to_map() if k else None)
259
+ result['SubArray'].append(k.to_map() if k else None)
252
260
  if self.maparray is not None:
253
- result['maparray'] = self.maparray
261
+ result['MapArray'] = self.maparray
254
262
  if self.object is not None:
255
263
  result['object'] = self.object
256
264
  if self.numberfield is not None:
@@ -271,30 +279,39 @@ class MyModel(TeaModel):
271
279
  result['minimum'] = self.minimum
272
280
  if self.test_3 is not None:
273
281
  result['test3'] = self.test_3
274
- result['arrayArrayModel'] = []
282
+ result['ArrayArrayModel'] = []
275
283
  if self.array_array_model is not None:
276
284
  for k in self.array_array_model:
277
285
  l1 = []
278
286
  for k1 in k:
279
287
  l1.append(k1.to_map() if k1 else None)
280
- result['arrayArrayModel'].append(l1)
281
- result['arrayMapModel'] = []
288
+ result['ArrayArrayModel'].append(l1)
289
+ result['ArrayMapModel'] = []
282
290
  if self.array_map_model is not None:
283
291
  for k in self.array_map_model:
284
292
  d1 = {}
285
293
  for k1 ,v1 in k.items():
286
294
  d1[k1] = v1.to_map()
287
- result['arrayMapModel'].append(d1)
288
- result['mapModel'] = {}
295
+ result['ArrayMapModel'].append(d1)
296
+ result['MapModel'] = {}
289
297
  if self.map_model is not None:
290
298
  for k, v in self.map_model.items():
291
- result['mapModel'][k] = v.to_map()
292
- result['submodelMap'] = {}
299
+ result['MapModel'][k] = v.to_map()
300
+ result['SubmodelMap'] = {}
293
301
  if self.submodel_map is not None:
294
302
  for k, v in self.submodel_map.items():
295
- result['submodelMap'][k] = v.to_map()
303
+ result['SubmodelMap'][k] = v.to_map()
296
304
  if self.sub_model_model is not None:
297
- result['subModelModel'] = self.sub_model_model.to_map()
305
+ result['SubModelModel'] = self.sub_model_model.to_map()
306
+ if self.map_array_map is not None:
307
+ result['MapArrayMap'] = self.map_array_map
308
+ result['MapArrayModel'] = {}
309
+ if self.map_array_model is not None:
310
+ for k, v in self.map_array_model.items():
311
+ l1 = []
312
+ for k1 in v:
313
+ l1.append(k1.to_map() if k1 else None)
314
+ result['MapArrayModel'][k] = l1
298
315
  return result
299
316
 
300
317
  def from_map(self, m=None):
@@ -309,16 +326,16 @@ class MyModel(TeaModel):
309
326
  self.mapfield = m.get('mapfield')
310
327
  if m.get('realName') is not None:
311
328
  self.name = m.get('realName')
312
- if m.get('submodel') is not None:
329
+ if m.get('SubModel') is not None:
313
330
  temp_model = MyModelSubmodel()
314
- self.submodel = temp_model.from_map(m['submodel'])
331
+ self.submodel = temp_model.from_map(m['SubModel'])
315
332
  self.subarray = []
316
- if m.get('subarray') is not None:
317
- for k in m.get('subarray'):
333
+ if m.get('SubArray') is not None:
334
+ for k in m.get('SubArray'):
318
335
  temp_model = M()
319
336
  self.subarray.append(temp_model.from_map(k))
320
- if m.get('maparray') is not None:
321
- self.maparray = m.get('maparray')
337
+ if m.get('MapArray') is not None:
338
+ self.maparray = m.get('MapArray')
322
339
  if m.get('object') is not None:
323
340
  self.object = m.get('object')
324
341
  if m.get('numberfield') is not None:
@@ -341,34 +358,44 @@ class MyModel(TeaModel):
341
358
  if m.get('test3') is not None:
342
359
  self.test_3 = m.get('test3')
343
360
  self.array_array_model = []
344
- if m.get('arrayArrayModel') is not None:
345
- for k in m.get('arrayArrayModel'):
361
+ if m.get('ArrayArrayModel') is not None:
362
+ for k in m.get('ArrayArrayModel'):
346
363
  l1 = []
347
364
  for k1 in k:
348
365
  temp_model = M()
349
366
  l1.append(temp_model.from_map(k1))
350
367
  self.array_array_model.append(l1)
351
368
  self.array_map_model = []
352
- if m.get('arrayMapModel') is not None:
353
- for k in m.get('arrayMapModel'):
369
+ if m.get('ArrayMapModel') is not None:
370
+ for k in m.get('ArrayMapModel'):
354
371
  d1 = {}
355
372
  for k1 ,v1 in k.items():
356
373
  temp_model = M()
357
374
  d1[k1] = temp_model.from_map(v1)
358
375
  self.array_map_model.append(d1)
359
376
  self.map_model = {}
360
- if m.get('mapModel') is not None:
361
- for k, v in m.get('mapModel').items():
377
+ if m.get('MapModel') is not None:
378
+ for k, v in m.get('MapModel').items():
362
379
  temp_model = M()
363
380
  self.map_model[k] = temp_model.from_map(v)
364
381
  self.submodel_map = {}
365
- if m.get('submodelMap') is not None:
366
- for k, v in m.get('submodelMap').items():
382
+ if m.get('SubmodelMap') is not None:
383
+ for k, v in m.get('SubmodelMap').items():
367
384
  temp_model = MyModelSubmodel()
368
385
  self.submodel_map[k] = temp_model.from_map(v)
369
- if m.get('subModelModel') is not None:
386
+ if m.get('SubModelModel') is not None:
370
387
  temp_model = MyModelSubModelModel()
371
- self.sub_model_model = temp_model.from_map(m['subModelModel'])
388
+ self.sub_model_model = temp_model.from_map(m['SubModelModel'])
389
+ if m.get('MapArrayMap') is not None:
390
+ self.map_array_map = m.get('MapArrayMap')
391
+ self.map_array_model = {}
392
+ if m.get('MapArrayModel') is not None:
393
+ for k, v in m.get('MapArrayModel').items():
394
+ l1 = []
395
+ for k1 in v:
396
+ temp_model = M()
397
+ l1.append(temp_model.from_map(k1))
398
+ self.map_array_model['k'] = l1
372
399
  return self
373
400
 
374
401
 
@@ -17,7 +17,9 @@ class Client:
17
17
  m = {}
18
18
  return TeaCore.merge({
19
19
  'key': 'value',
20
- 'key-1': 'value-1'
20
+ 'key-1': 'value-1',
21
+ 'key-2': 'value-2',
22
+ '\"\"': 'value-3'
21
23
  }, m)
22
24
 
23
25
  @staticmethod
@@ -197,6 +197,8 @@ class MyModel(TeaModel):
197
197
  map_model: Dict[str, M] = None,
198
198
  submodel_map: Dict[str, MyModelSubmodel] = None,
199
199
  sub_model_model: MyModelSubModelModel = None,
200
+ map_array_map: Dict[str, List[Dict[str, str]]] = None,
201
+ map_array_model: Dict[str, List[M]] = None,
200
202
  ):
201
203
  self.stringfield = stringfield
202
204
  self.bytesfield = bytesfield
@@ -227,6 +229,8 @@ class MyModel(TeaModel):
227
229
  self.map_model = map_model
228
230
  self.submodel_map = submodel_map
229
231
  self.sub_model_model = sub_model_model
232
+ self.map_array_map = map_array_map
233
+ self.map_array_model = map_array_model
230
234
 
231
235
  def validate(self):
232
236
  self.validate_required(self.stringfield, 'stringfield')
@@ -278,6 +282,11 @@ class MyModel(TeaModel):
278
282
  self.validate_required(self.sub_model_model, 'sub_model_model')
279
283
  if self.sub_model_model:
280
284
  self.sub_model_model.validate()
285
+ if self.map_array_model:
286
+ for v in self.map_array_model.values():
287
+ for k1 in v:
288
+ if k1:
289
+ k1.validate()
281
290
 
282
291
  def to_map(self):
283
292
  _map = super().to_map()
@@ -296,13 +305,13 @@ class MyModel(TeaModel):
296
305
  if self.name is not None:
297
306
  result['realName'] = self.name
298
307
  if self.submodel is not None:
299
- result['submodel'] = self.submodel.to_map()
300
- result['subarray'] = []
308
+ result['SubModel'] = self.submodel.to_map()
309
+ result['SubArray'] = []
301
310
  if self.subarray is not None:
302
311
  for k in self.subarray:
303
- result['subarray'].append(k.to_map() if k else None)
312
+ result['SubArray'].append(k.to_map() if k else None)
304
313
  if self.maparray is not None:
305
- result['maparray'] = self.maparray
314
+ result['MapArray'] = self.maparray
306
315
  if self.object is not None:
307
316
  result['object'] = self.object
308
317
  if self.numberfield is not None:
@@ -323,30 +332,39 @@ class MyModel(TeaModel):
323
332
  result['minimum'] = self.minimum
324
333
  if self.test_3 is not None:
325
334
  result['test3'] = self.test_3
326
- result['arrayArrayModel'] = []
335
+ result['ArrayArrayModel'] = []
327
336
  if self.array_array_model is not None:
328
337
  for k in self.array_array_model:
329
338
  l1 = []
330
339
  for k1 in k:
331
340
  l1.append(k1.to_map() if k1 else None)
332
- result['arrayArrayModel'].append(l1)
333
- result['arrayMapModel'] = []
341
+ result['ArrayArrayModel'].append(l1)
342
+ result['ArrayMapModel'] = []
334
343
  if self.array_map_model is not None:
335
344
  for k in self.array_map_model:
336
345
  d1 = {}
337
346
  for k1 ,v1 in k.items():
338
347
  d1[k1] = v1.to_map()
339
- result['arrayMapModel'].append(d1)
340
- result['mapModel'] = {}
348
+ result['ArrayMapModel'].append(d1)
349
+ result['MapModel'] = {}
341
350
  if self.map_model is not None:
342
351
  for k, v in self.map_model.items():
343
- result['mapModel'][k] = v.to_map()
344
- result['submodelMap'] = {}
352
+ result['MapModel'][k] = v.to_map()
353
+ result['SubmodelMap'] = {}
345
354
  if self.submodel_map is not None:
346
355
  for k, v in self.submodel_map.items():
347
- result['submodelMap'][k] = v.to_map()
356
+ result['SubmodelMap'][k] = v.to_map()
348
357
  if self.sub_model_model is not None:
349
- result['subModelModel'] = self.sub_model_model.to_map()
358
+ result['SubModelModel'] = self.sub_model_model.to_map()
359
+ if self.map_array_map is not None:
360
+ result['MapArrayMap'] = self.map_array_map
361
+ result['MapArrayModel'] = {}
362
+ if self.map_array_model is not None:
363
+ for k, v in self.map_array_model.items():
364
+ l1 = []
365
+ for k1 in v:
366
+ l1.append(k1.to_map() if k1 else None)
367
+ result['MapArrayModel'][k] = l1
350
368
  return result
351
369
 
352
370
  def from_map(self, m: dict = None):
@@ -361,16 +379,16 @@ class MyModel(TeaModel):
361
379
  self.mapfield = m.get('mapfield')
362
380
  if m.get('realName') is not None:
363
381
  self.name = m.get('realName')
364
- if m.get('submodel') is not None:
382
+ if m.get('SubModel') is not None:
365
383
  temp_model = MyModelSubmodel()
366
- self.submodel = temp_model.from_map(m['submodel'])
384
+ self.submodel = temp_model.from_map(m['SubModel'])
367
385
  self.subarray = []
368
- if m.get('subarray') is not None:
369
- for k in m.get('subarray'):
386
+ if m.get('SubArray') is not None:
387
+ for k in m.get('SubArray'):
370
388
  temp_model = M()
371
389
  self.subarray.append(temp_model.from_map(k))
372
- if m.get('maparray') is not None:
373
- self.maparray = m.get('maparray')
390
+ if m.get('MapArray') is not None:
391
+ self.maparray = m.get('MapArray')
374
392
  if m.get('object') is not None:
375
393
  self.object = m.get('object')
376
394
  if m.get('numberfield') is not None:
@@ -393,34 +411,44 @@ class MyModel(TeaModel):
393
411
  if m.get('test3') is not None:
394
412
  self.test_3 = m.get('test3')
395
413
  self.array_array_model = []
396
- if m.get('arrayArrayModel') is not None:
397
- for k in m.get('arrayArrayModel'):
414
+ if m.get('ArrayArrayModel') is not None:
415
+ for k in m.get('ArrayArrayModel'):
398
416
  l1 = []
399
417
  for k1 in k:
400
418
  temp_model = M()
401
419
  l1.append(temp_model.from_map(k1))
402
420
  self.array_array_model.append(l1)
403
421
  self.array_map_model = []
404
- if m.get('arrayMapModel') is not None:
405
- for k in m.get('arrayMapModel'):
422
+ if m.get('ArrayMapModel') is not None:
423
+ for k in m.get('ArrayMapModel'):
406
424
  d1 = {}
407
425
  for k1, v1 in k.items():
408
426
  temp_model = M()
409
427
  d1[k1] = temp_model.from_map(v1)
410
428
  self.array_map_model.append(d1)
411
429
  self.map_model = {}
412
- if m.get('mapModel') is not None:
413
- for k, v in m.get('mapModel').items():
430
+ if m.get('MapModel') is not None:
431
+ for k, v in m.get('MapModel').items():
414
432
  temp_model = M()
415
433
  self.map_model[k] = temp_model.from_map(v)
416
434
  self.submodel_map = {}
417
- if m.get('submodelMap') is not None:
418
- for k, v in m.get('submodelMap').items():
435
+ if m.get('SubmodelMap') is not None:
436
+ for k, v in m.get('SubmodelMap').items():
419
437
  temp_model = MyModelSubmodel()
420
438
  self.submodel_map[k] = temp_model.from_map(v)
421
- if m.get('subModelModel') is not None:
439
+ if m.get('SubModelModel') is not None:
422
440
  temp_model = MyModelSubModelModel()
423
- self.sub_model_model = temp_model.from_map(m['subModelModel'])
441
+ self.sub_model_model = temp_model.from_map(m['SubModelModel'])
442
+ if m.get('MapArrayMap') is not None:
443
+ self.map_array_map = m.get('MapArrayMap')
444
+ self.map_array_model = {}
445
+ if m.get('MapArrayModel') is not None:
446
+ for k, v in m.get('MapArrayModel').items():
447
+ l1 = []
448
+ for k1 in v:
449
+ temp_model = M()
450
+ l1.append(temp_model.from_map(k1))
451
+ self.map_array_model['k'] = l1
424
452
  return self
425
453
 
426
454
 
@@ -10,6 +10,8 @@ static function helloMap(): map[string]string {
10
10
  return {
11
11
  key = 'value',
12
12
  key-1 = 'value-1',
13
+ 'key-2' = 'value-2',
14
+ '""' = 'value-3',
13
15
  ...m,
14
16
  };
15
17
  }
@@ -16,9 +16,9 @@ model MyModel = {
16
16
  name: string(name='realName'),
17
17
  submodel: {
18
18
  stringfield: string,
19
- },
20
- subarray: [ M ],
21
- maparray: [ map[string]any ],
19
+ } (name='SubModel'),
20
+ subarray: [ M ] (name='SubArray'),
21
+ maparray: [ map[string]any ] (name='MapArray'),
22
22
  object: object,
23
23
  numberfield: integer,
24
24
  readable: readable,
@@ -29,15 +29,17 @@ model MyModel = {
29
29
  maximum?: long(description='校验最大值', example='10000', maximum='99000000'),
30
30
  minimum?: long(description='校验最小值', example='10000', minimum='0'),
31
31
  test3: [[string]](description='test3 desc', name='test3'),
32
- arrayArrayModel: [[M]],
33
- arrayMapModel: [ map[string]M ],
32
+ arrayArrayModel: [[M]] (name='ArrayArrayModel'),
33
+ arrayMapModel: [ map[string]M ] (name='ArrayMapModel'),
34
34
 
35
- mapModel: map[string]M,
36
- submodelMap: map[string]MyModel.submodel,
35
+ mapModel: map[string]M (name='MapModel'),
36
+ submodelMap: map[string]MyModel.submodel (name='SubmodelMap'),
37
37
 
38
38
  subModelModel: {
39
39
  subModel: [ M ]
40
- }
40
+ } (name='SubModelModel'),
41
+ mapArrayMap?: map[string][ map[string]string ] (name='MapArrayMap'),
42
+ mapArrayModel?: map[string][ M ] (name='MapArrayModel'),
41
43
  };
42
44
 
43
45
  model M = {