quicktype-core 23.3.8 → 23.3.9

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.
@@ -323,14 +323,14 @@ class SystemTextJsonCSharpRenderer extends CSharpRenderer_1.CSharpRenderer {
323
323
  }, true);
324
324
  });
325
325
  }
326
- emitDecoderTransformerCase(tokenCases, variableName, xfer, targetType, emitFinish) {
326
+ emitDecoderTransformerCase(tokenCases, variableName, xfer, targetType, emitFinish, varGen) {
327
327
  if (xfer === undefined)
328
328
  return;
329
329
  for (const tokenCase of tokenCases) {
330
330
  this.emitTokenCase(tokenCase);
331
331
  }
332
332
  this.indent(() => {
333
- const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName);
333
+ const allHandled = this.emitDecodeTransformer(xfer, targetType, emitFinish, variableName, varGen);
334
334
  if (!allHandled) {
335
335
  this.emitLine("break;");
336
336
  }
@@ -343,7 +343,7 @@ class SystemTextJsonCSharpRenderer extends CSharpRenderer_1.CSharpRenderer {
343
343
  }
344
344
  return this.emitTransformer(value, consumer, targetType, emitFinish);
345
345
  }
346
- emitDecodeTransformer(xfer, targetType, emitFinish, variableName = "value") {
346
+ emitDecodeTransformer(xfer, targetType, emitFinish, variableName = "value", varGen = { counter: 0 }) {
347
347
  if (xfer instanceof Transformers_1.DecodingTransformer) {
348
348
  const source = xfer.sourceType;
349
349
  const converter = this.converterForType(targetType);
@@ -368,7 +368,7 @@ class SystemTextJsonCSharpRenderer extends CSharpRenderer_1.CSharpRenderer {
368
368
  this.emitLine("var ", variableName, " = new List<", this.csType(targetType.items), ">();");
369
369
  this.emitLine("while (reader.TokenType != JsonToken.EndArray)");
370
370
  this.emitBlock(() => {
371
- this.emitDecodeTransformer(xfer.itemTransformer, xfer.itemTargetType, (v) => this.emitLine(variableName, ".Add(", v, ");"), "arrayItem");
371
+ this.emitDecodeTransformer(xfer.itemTransformer, xfer.itemTargetType, (v) => this.emitLine(variableName, ".Add(", v, ");"), "arrayItem", varGen);
372
372
  // FIXME: handle EOF
373
373
  this.emitLine("reader.Read();");
374
374
  });
@@ -385,22 +385,57 @@ class SystemTextJsonCSharpRenderer extends CSharpRenderer_1.CSharpRenderer {
385
385
  if (nullTransformer !== undefined) {
386
386
  this.emitTokenCase("Null");
387
387
  this.indent(() => {
388
- const allHandled = this.emitDecodeTransformer(nullTransformer, targetType, emitFinish, "null");
388
+ const allHandled = this.emitDecodeTransformer(nullTransformer, targetType, emitFinish, "null", varGen);
389
389
  if (!allHandled) {
390
390
  this.emitLine("break");
391
391
  }
392
392
  });
393
393
  }
394
- this.emitDecoderTransformerCase(["Number"], "integerValue", xfer.integerTransformer, targetType, emitFinish);
395
- this.emitDecoderTransformerCase(["Number"],
396
- // xfer.integerTransformer === undefined ? ["Integer", "Float"] : ["Float"],
397
- "doubleValue", xfer.doubleTransformer, targetType, emitFinish);
398
- this.emitDecoderTransformerCase(["True", "False"], "boolValue", xfer.boolTransformer, targetType, emitFinish);
394
+ // Handle number (integer/double) union properly
395
+ if (xfer.integerTransformer !== undefined && xfer.doubleTransformer !== undefined) {
396
+ varGen.counter++;
397
+ const intTryVar = `intTryValue${varGen.counter}`;
398
+ varGen.counter++;
399
+ const intVar = `intValue${varGen.counter}`;
400
+ varGen.counter++;
401
+ const doubleVar = `doubleValue${varGen.counter}`;
402
+ this.emitTokenCase("Number");
403
+ this.indent(() => {
404
+ this.emitLine(`if (reader.TryGetInt64(out long ${intTryVar}))`);
405
+ this.emitBlock(() => {
406
+ const allHandled = this.emitDecodeTransformer(xfer.integerTransformer, targetType, emitFinish, intVar, varGen);
407
+ if (!allHandled) {
408
+ this.emitLine("break;");
409
+ }
410
+ });
411
+ this.emitLine("else");
412
+ this.emitBlock(() => {
413
+ const allHandled = this.emitDecodeTransformer(xfer.doubleTransformer, targetType, emitFinish, doubleVar, varGen);
414
+ if (!allHandled) {
415
+ this.emitLine("break;");
416
+ }
417
+ });
418
+ });
419
+ }
420
+ else {
421
+ // Only one present, emit as before
422
+ if (xfer.integerTransformer !== undefined) {
423
+ varGen.counter++;
424
+ const intVar = `intValue${varGen.counter}`;
425
+ this.emitDecoderTransformerCase(["Number"], intVar, xfer.integerTransformer, targetType, emitFinish, varGen);
426
+ }
427
+ else if (xfer.doubleTransformer !== undefined) {
428
+ varGen.counter++;
429
+ const doubleVar = `doubleValue${varGen.counter}`;
430
+ this.emitDecoderTransformerCase(["Number"], doubleVar, xfer.doubleTransformer, targetType, emitFinish, varGen);
431
+ }
432
+ }
433
+ this.emitDecoderTransformerCase(["True", "False"], "boolValue", xfer.boolTransformer, targetType, emitFinish, varGen);
399
434
  this.emitDecoderTransformerCase(
400
435
  // ["String", "Date"],
401
- ["String"], "stringValue", xfer.stringTransformer, targetType, emitFinish);
402
- this.emitDecoderTransformerCase(["StartObject"], "objectValue", xfer.objectTransformer, targetType, emitFinish);
403
- this.emitDecoderTransformerCase(["StartArray"], "arrayValue", xfer.arrayTransformer, targetType, emitFinish);
436
+ ["String"], "stringValue", xfer.stringTransformer, targetType, emitFinish, varGen);
437
+ this.emitDecoderTransformerCase(["StartObject"], "objectValue", xfer.objectTransformer, targetType, emitFinish, varGen);
438
+ this.emitDecoderTransformerCase(["StartArray"], "arrayValue", xfer.arrayTransformer, targetType, emitFinish, varGen);
404
439
  });
405
440
  return false;
406
441
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quicktype-core",
3
- "version": "23.3.8",
3
+ "version": "23.3.9",
4
4
  "description": "The quicktype engine as a library",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/index.js",