quicktype-core 21.0.15 → 22.0.0

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.
@@ -8,12 +8,12 @@ import { TargetLanguage } from "../TargetLanguage";
8
8
  import { ClassProperty, ClassType, EnumType, Type, UnionType } from "../Type";
9
9
  import { StringTypeMapping } from "..";
10
10
  export declare const javaOptions: {
11
+ classStyle: EnumOption<"java" | "java-record" | "lombok">;
11
12
  useList: EnumOption<boolean>;
12
13
  justTypes: BooleanOption;
13
- dateTimeProvider: EnumOption<string>;
14
+ dateTimeProvider: EnumOption<"java8" | "legacy">;
14
15
  acronymStyle: EnumOption<AcronymStyleOptions>;
15
16
  packageName: StringOption;
16
- lombok: BooleanOption;
17
17
  lombokCopyAnnotations: BooleanOption;
18
18
  };
19
19
  export declare class JavaTargetLanguage extends TargetLanguage {
@@ -96,6 +96,7 @@ export declare class JavaRenderer extends ConvenienceRenderer {
96
96
  protected importsForClass(c: ClassType): string[];
97
97
  protected importsForUnionMembers(u: UnionType): string[];
98
98
  protected emitClassDefinition(c: ClassType, className: Name): void;
99
+ private emitClassRecordDefinition;
99
100
  protected unionField(u: UnionType, t: Type, withIssues?: boolean): {
100
101
  fieldType: Sourcelike;
101
102
  fieldName: Sourcelike;
@@ -13,6 +13,11 @@ const TargetLanguage_1 = require("../TargetLanguage");
13
13
  const Type_1 = require("../Type");
14
14
  const TypeUtils_1 = require("../TypeUtils");
15
15
  exports.javaOptions = {
16
+ classStyle: new RendererOptions_1.EnumOption("class-style", "Style of generated Java classes", [
17
+ ["java", "java"],
18
+ ["java-record", "java-record"],
19
+ ["lombok", "lombok"]
20
+ ], "java"),
16
21
  useList: new RendererOptions_1.EnumOption("array-type", "Use T[] or List<T>", [
17
22
  ["array", false],
18
23
  ["list", true]
@@ -25,7 +30,6 @@ exports.javaOptions = {
25
30
  acronymStyle: (0, Acronyms_1.acronymOption)(Acronyms_1.AcronymStyleOptions.Pascal),
26
31
  // FIXME: Do this via a configurable named eventually.
27
32
  packageName: new RendererOptions_1.StringOption("package", "Generated package name", "NAME", "io.quicktype"),
28
- lombok: new RendererOptions_1.BooleanOption("lombok", "Use lombok", false, "primary"),
29
33
  lombokCopyAnnotations: new RendererOptions_1.BooleanOption("lombok-copy-annotations", "Copy accessor annotations", true, "secondary")
30
34
  };
31
35
  class JavaTargetLanguage extends TargetLanguage_1.TargetLanguage {
@@ -34,12 +38,12 @@ class JavaTargetLanguage extends TargetLanguage_1.TargetLanguage {
34
38
  }
35
39
  getOptions() {
36
40
  return [
41
+ exports.javaOptions.classStyle,
37
42
  exports.javaOptions.useList,
38
43
  exports.javaOptions.justTypes,
39
44
  exports.javaOptions.dateTimeProvider,
40
45
  exports.javaOptions.acronymStyle,
41
46
  exports.javaOptions.packageName,
42
- exports.javaOptions.lombok,
43
47
  exports.javaOptions.lombokCopyAnnotations
44
48
  ];
45
49
  }
@@ -536,7 +540,7 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
536
540
  }
537
541
  }
538
542
  emitClassAttributes(_c, _className) {
539
- if (this._options.lombok) {
543
+ if (this._options.classStyle === "lombok") {
540
544
  this.emitLine("@lombok.Data");
541
545
  }
542
546
  }
@@ -577,9 +581,12 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
577
581
  this.emitFileHeader(className, imports);
578
582
  this.emitDescription(this.descriptionForType(c));
579
583
  this.emitClassAttributes(c, className);
584
+ if (this._options.classStyle === "java-record") {
585
+ return this.emitClassRecordDefinition(c, className);
586
+ }
580
587
  this.emitBlock(["public class ", className], () => {
581
588
  this.forEachClassProperty(c, "none", (name, jsonName, p) => {
582
- if (this._options.lombok && this._options.lombokCopyAnnotations) {
589
+ if (this._options.classStyle === "lombok" && this._options.lombokCopyAnnotations) {
583
590
  const getter = this.annotationsForAccessor(c, className, name, jsonName, p, false);
584
591
  const setter = this.annotationsForAccessor(c, className, name, jsonName, p, true);
585
592
  if (getter.length !== 0) {
@@ -591,7 +598,7 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
591
598
  }
592
599
  this.emitLine("private ", this.javaType(false, p.type, true), " ", name, ";");
593
600
  });
594
- if (!this._options.lombok) {
601
+ if (this._options.classStyle !== "lombok") {
595
602
  this.forEachClassProperty(c, "leading-and-interposing", (name, jsonName, p) => {
596
603
  this.emitDescription(this.descriptionForClassProperty(c, jsonName));
597
604
  const [getterName, setterName] = (0, Support_1.defined)(this._gettersAndSettersForPropertyName.get(name));
@@ -605,6 +612,19 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
605
612
  });
606
613
  this.finishFile();
607
614
  }
615
+ emitClassRecordDefinition(c, className) {
616
+ this.emitLine("public record ", className, " (");
617
+ this.indent(() => {
618
+ this.forEachClassProperty(c, "leading-and-interposing", (name, jsonName, p, position) => {
619
+ this.annotationsForAccessor(c, className, name, jsonName, p, false).forEach(annotation => this.emitLine(annotation));
620
+ const rendered = this.javaType(false, p.type);
621
+ const comma = position === "first" || position === "middle" ? "," : [];
622
+ this.emitLine(rendered, " ", name, comma);
623
+ });
624
+ });
625
+ this.emitLine(") {}");
626
+ this.finishFile();
627
+ }
608
628
  unionField(u, t, withIssues = false) {
609
629
  const fieldType = this.javaType(true, t, withIssues);
610
630
  // FIXME: "Value" should be part of the name.
@@ -991,7 +1011,7 @@ class JacksonRenderer extends JavaRenderer {
991
1011
  this.emitCommentLines([
992
1012
  "To use this code, add the following Maven dependency to your project:",
993
1013
  "",
994
- this._options.lombok ? " org.projectlombok : lombok : 1.18.2" : "",
1014
+ this._options.classStyle === "lombok" ? " org.projectlombok : lombok : 1.18.2" : "",
995
1015
  " com.fasterxml.jackson.core : jackson-databind : 2.9.0",
996
1016
  this._options.dateTimeProvider === "java8"
997
1017
  ? " com.fasterxml.jackson.datatype : jackson-datatype-jsr310 : 2.9.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quicktype-core",
3
- "version": "21.0.15",
3
+ "version": "22.0.0",
4
4
  "description": "The quicktype engine as a library",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/index.js",
@@ -31,7 +31,7 @@
31
31
  "devDependencies": {
32
32
  "@types/browser-or-node": "^1.3.0",
33
33
  "@types/js-base64": "^3.3.1",
34
- "@types/node": "18.11.19",
34
+ "@types/node": "18.13.0",
35
35
  "@types/pako": "^1.0.0",
36
36
  "@types/pluralize": "0.0.29",
37
37
  "@types/readable-stream": "2.3.15",