quicktype 16.0.38 → 16.0.39
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/dist/cli/index.js +1 -4
- package/dist/quicktype-core/Transformers.js +1 -3
- package/dist/quicktype-core/input/JSONSchemaInput.js +2 -8
- package/dist/quicktype-core/language/All.js +1 -1
- package/dist/quicktype-core/language/CPlusPlus.js +134 -53
- package/dist/quicktype-core/language/CSharp.js +37 -30
- package/dist/quicktype-core/language/Elm.js +4 -1
- package/dist/quicktype-core/language/Golang.js +12 -8
- package/dist/quicktype-core/language/Haskell.js +15 -15
- package/dist/quicktype-core/language/Java.js +51 -54
- package/dist/quicktype-core/language/JavaScriptPropTypes.js +11 -11
- package/dist/quicktype-core/language/JavaScriptUnicodeMaps.js +65 -1196
- package/dist/quicktype-core/language/Kotlin.js +20 -5
- package/dist/quicktype-core/language/Pike.js +9 -2
- package/dist/quicktype-core/language/Rust.js +11 -11
- package/dist/quicktype-core/language/TypeScriptFlow.js +1 -1
- package/package.json +1 -2
|
@@ -13,7 +13,10 @@ const Source_1 = require("../Source");
|
|
|
13
13
|
const Annotation_1 = require("../Annotation");
|
|
14
14
|
exports.elmOptions = {
|
|
15
15
|
justTypes: new RendererOptions_1.BooleanOption("just-types", "Plain types only", false),
|
|
16
|
-
useList: new RendererOptions_1.EnumOption("array-type", "Use Array or List", [
|
|
16
|
+
useList: new RendererOptions_1.EnumOption("array-type", "Use Array or List", [
|
|
17
|
+
["array", false],
|
|
18
|
+
["list", true]
|
|
19
|
+
]),
|
|
17
20
|
// FIXME: Do this via a configurable named eventually.
|
|
18
21
|
moduleName: new RendererOptions_1.StringOption("module", "Generated module name", "NAME", "QuickType")
|
|
19
22
|
};
|
|
@@ -14,7 +14,7 @@ exports.goOptions = {
|
|
|
14
14
|
justTypes: new RendererOptions_1.BooleanOption("just-types", "Plain types only", false),
|
|
15
15
|
justTypesAndPackage: new RendererOptions_1.BooleanOption("just-types-and-package", "Plain types with package only", false),
|
|
16
16
|
packageName: new RendererOptions_1.StringOption("package", "Generated package name", "NAME", "main"),
|
|
17
|
-
multiFileOutput: new RendererOptions_1.BooleanOption("multi-file-output", "Renders each top-level object in its own Go file", false)
|
|
17
|
+
multiFileOutput: new RendererOptions_1.BooleanOption("multi-file-output", "Renders each top-level object in its own Go file", false)
|
|
18
18
|
};
|
|
19
19
|
class GoTargetLanguage extends TargetLanguage_1.TargetLanguage {
|
|
20
20
|
constructor() {
|
|
@@ -77,7 +77,7 @@ class GoRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
77
77
|
return true;
|
|
78
78
|
}
|
|
79
79
|
makeTopLevelDependencyNames(_, topLevelName) {
|
|
80
|
-
const unmarshalName = new Naming_1.DependencyName(namingFunction, topLevelName.order,
|
|
80
|
+
const unmarshalName = new Naming_1.DependencyName(namingFunction, topLevelName.order, lookup => `unmarshal_${lookup(topLevelName)}`);
|
|
81
81
|
this._topLevelUnmarshalNames.set(topLevelName, unmarshalName);
|
|
82
82
|
return [unmarshalName];
|
|
83
83
|
}
|
|
@@ -130,7 +130,7 @@ class GoRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
130
130
|
return this.goType(t, true);
|
|
131
131
|
}
|
|
132
132
|
goType(t, withIssues = false) {
|
|
133
|
-
return TypeUtils_1.matchType(t,
|
|
133
|
+
return TypeUtils_1.matchType(t, _anyType => Source_1.maybeAnnotated(withIssues, Annotation_1.anyTypeIssueAnnotation, "interface{}"), _nullType => Source_1.maybeAnnotated(withIssues, Annotation_1.nullTypeIssueAnnotation, "interface{}"), _boolType => "bool", _integerType => "int64", _doubleType => "float64", _stringType => "string", arrayType => ["[]", this.goType(arrayType.items, withIssues)], classType => this.nameForNamedType(classType), mapType => {
|
|
134
134
|
let valueSource;
|
|
135
135
|
const v = mapType.values;
|
|
136
136
|
if (v instanceof Type_1.UnionType && TypeUtils_1.nullableFromUnion(v) === null) {
|
|
@@ -140,7 +140,7 @@ class GoRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
140
140
|
valueSource = this.goType(v, withIssues);
|
|
141
141
|
}
|
|
142
142
|
return ["map[string]", valueSource];
|
|
143
|
-
},
|
|
143
|
+
}, enumType => this.nameForNamedType(enumType), unionType => {
|
|
144
144
|
const nullable = TypeUtils_1.nullableFromUnion(unionType);
|
|
145
145
|
if (nullable !== null)
|
|
146
146
|
return this.nullableGoType(nullable, withIssues);
|
|
@@ -189,7 +189,11 @@ class GoRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
189
189
|
const goType = this.propertyGoType(p);
|
|
190
190
|
const omitEmpty = canOmitEmpty(p) ? ",omitempty" : [];
|
|
191
191
|
docStrings.forEach(doc => columns.push([doc]));
|
|
192
|
-
columns.push([
|
|
192
|
+
columns.push([
|
|
193
|
+
[name, " "],
|
|
194
|
+
[goType, " "],
|
|
195
|
+
['`json:"', Strings_1.stringEscape(jsonName), omitEmpty, '"`']
|
|
196
|
+
]);
|
|
193
197
|
});
|
|
194
198
|
this.emitDescription(this.descriptionForType(c));
|
|
195
199
|
this.emitStruct(className, columns);
|
|
@@ -251,7 +255,7 @@ class GoRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
251
255
|
ifMember("class", undefined, (_1, _2, goType) => {
|
|
252
256
|
this.emitLine("var c ", goType);
|
|
253
257
|
});
|
|
254
|
-
const args = makeArgs(
|
|
258
|
+
const args = makeArgs(fn => ["&x.", fn], (isClass, fn) => {
|
|
255
259
|
if (isClass) {
|
|
256
260
|
return "true, &c";
|
|
257
261
|
}
|
|
@@ -272,7 +276,7 @@ class GoRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
272
276
|
});
|
|
273
277
|
this.ensureBlankLine();
|
|
274
278
|
this.emitFunc(["(x *", unionName, ") MarshalJSON() ([]byte, error)"], () => {
|
|
275
|
-
const args = makeArgs(
|
|
279
|
+
const args = makeArgs(fn => ["x.", fn], (_, fn) => ["x.", fn, " != nil, x.", fn]);
|
|
276
280
|
this.emitLine("return marshalUnion(", args, ")");
|
|
277
281
|
});
|
|
278
282
|
this.endFile();
|
|
@@ -439,7 +443,7 @@ func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool,
|
|
|
439
443
|
this.leadingComments === undefined) {
|
|
440
444
|
this.emitSingleFileHeaderComments();
|
|
441
445
|
}
|
|
442
|
-
this.forEachTopLevel("leading-and-interposing", (t, name) => this.emitTopLevel(t, name),
|
|
446
|
+
this.forEachTopLevel("leading-and-interposing", (t, name) => this.emitTopLevel(t, name), t => !(this._options.justTypes || this._options.justTypesAndPackage) ||
|
|
443
447
|
this.namedTypeToNameForTopLevel(t) === undefined);
|
|
444
448
|
this.forEachObject("leading-and-interposing", (c, className) => this.emitClass(c, className));
|
|
445
449
|
this.forEachEnum("leading-and-interposing", (u, enumName) => this.emitEnum(u, enumName));
|
|
@@ -12,9 +12,9 @@ exports.haskellOptions = {
|
|
|
12
12
|
justTypes: new RendererOptions_1.BooleanOption("just-types", "Plain types only", false),
|
|
13
13
|
useList: new RendererOptions_1.EnumOption("array-type", "Use Array or List", [
|
|
14
14
|
["array", false],
|
|
15
|
-
["list", true]
|
|
15
|
+
["list", true]
|
|
16
16
|
]),
|
|
17
|
-
moduleName: new RendererOptions_1.StringOption("module", "Generated module name", "NAME", "QuickType")
|
|
17
|
+
moduleName: new RendererOptions_1.StringOption("module", "Generated module name", "NAME", "QuickType")
|
|
18
18
|
};
|
|
19
19
|
class HaskellTargetLanguage extends TargetLanguage_1.TargetLanguage {
|
|
20
20
|
constructor() {
|
|
@@ -86,15 +86,15 @@ const forbiddenNames = [
|
|
|
86
86
|
"Object",
|
|
87
87
|
"Result",
|
|
88
88
|
"Series",
|
|
89
|
-
"Error"
|
|
89
|
+
"Error"
|
|
90
90
|
];
|
|
91
|
-
const legalizeName = Strings_1.legalizeCharacters(
|
|
91
|
+
const legalizeName = Strings_1.legalizeCharacters(cp => Strings_1.isAscii(cp) && Strings_1.isLetterOrUnderscoreOrDigit(cp));
|
|
92
92
|
function haskellNameStyle(original, upper) {
|
|
93
93
|
const words = Strings_1.splitIntoWords(original);
|
|
94
94
|
return Strings_1.combineWords(words, legalizeName, upper ? Strings_1.firstUpperWordStyle : Strings_1.allLowerWordStyle, Strings_1.firstUpperWordStyle, upper ? Strings_1.allUpperWordStyle : Strings_1.allLowerWordStyle, Strings_1.allUpperWordStyle, "", Strings_1.isLetterOrUnderscore);
|
|
95
95
|
}
|
|
96
|
-
const upperNamingFunction = Naming_1.funPrefixNamer("upper",
|
|
97
|
-
const lowerNamingFunction = Naming_1.funPrefixNamer("lower",
|
|
96
|
+
const upperNamingFunction = Naming_1.funPrefixNamer("upper", n => haskellNameStyle(n, true));
|
|
97
|
+
const lowerNamingFunction = Naming_1.funPrefixNamer("lower", n => haskellNameStyle(n, false));
|
|
98
98
|
class HaskellRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
99
99
|
constructor(targetLanguage, renderContext, _options) {
|
|
100
100
|
super(targetLanguage, renderContext);
|
|
@@ -140,12 +140,12 @@ class HaskellRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
haskellType(t, noOptional = false) {
|
|
143
|
-
return TypeUtils_1.matchType(t,
|
|
143
|
+
return TypeUtils_1.matchType(t, _anyType => Source_1.multiWord(" ", "Maybe", "Text"), _nullType => Source_1.multiWord(" ", "Maybe", "Text"), _boolType => Source_1.singleWord("Bool"), _integerType => Source_1.singleWord("Int"), _doubleType => Source_1.singleWord("Float"), _stringType => Source_1.singleWord("Text"), arrayType => {
|
|
144
144
|
if (this._options.useList) {
|
|
145
145
|
return Source_1.multiWord("", "[", Source_1.parenIfNeeded(this.haskellType(arrayType.items)), "]");
|
|
146
146
|
}
|
|
147
147
|
return Source_1.multiWord(" ", "Vector", Source_1.parenIfNeeded(this.haskellType(arrayType.items)));
|
|
148
|
-
},
|
|
148
|
+
}, classType => Source_1.singleWord(this.nameForNamedType(classType)), mapType => Source_1.multiWord(" ", "HashMap Text", Source_1.parenIfNeeded(this.haskellType(mapType.values))), enumType => Source_1.singleWord(this.nameForNamedType(enumType)), unionType => {
|
|
149
149
|
const nullable = TypeUtils_1.nullableFromUnion(unionType);
|
|
150
150
|
if (nullable !== null) {
|
|
151
151
|
const nullableType = this.haskellType(nullable);
|
|
@@ -204,7 +204,7 @@ class HaskellRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
204
204
|
this.emitLine("data ", enumName);
|
|
205
205
|
this.indent(() => {
|
|
206
206
|
let onFirst = true;
|
|
207
|
-
this.forEachEnumCase(e, "none",
|
|
207
|
+
this.forEachEnumCase(e, "none", name => {
|
|
208
208
|
const equalsOrPipe = onFirst ? "=" : "|";
|
|
209
209
|
this.emitLine(equalsOrPipe, " ", name, enumName);
|
|
210
210
|
onFirst = false;
|
|
@@ -243,7 +243,7 @@ class HaskellRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
243
243
|
}
|
|
244
244
|
emitClassEncoderInstance(c, className) {
|
|
245
245
|
let classProperties = [];
|
|
246
|
-
this.forEachClassProperty(c, "none",
|
|
246
|
+
this.forEachClassProperty(c, "none", name => {
|
|
247
247
|
classProperties.push(" ");
|
|
248
248
|
classProperties.push(name);
|
|
249
249
|
classProperties.push(className);
|
|
@@ -259,7 +259,7 @@ class HaskellRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
259
259
|
this.emitLine("object");
|
|
260
260
|
let onFirst = true;
|
|
261
261
|
this.forEachClassProperty(c, "none", (name, jsonName) => {
|
|
262
|
-
this.emitLine(onFirst ? "[ " : ", ", "
|
|
262
|
+
this.emitLine(onFirst ? "[ " : ", ", '"', Strings_1.stringEscape(jsonName), '" .= ', name, className);
|
|
263
263
|
onFirst = false;
|
|
264
264
|
});
|
|
265
265
|
if (onFirst) {
|
|
@@ -282,7 +282,7 @@ class HaskellRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
282
282
|
let onFirst = true;
|
|
283
283
|
this.forEachClassProperty(c, "none", (_, jsonName, p) => {
|
|
284
284
|
const operator = p.isOptional ? ".:?" : ".:";
|
|
285
|
-
this.emitLine(onFirst ? "<$> " : "<*> ", "v ", operator,
|
|
285
|
+
this.emitLine(onFirst ? "<$> " : "<*> ", "v ", operator, ' "', Strings_1.stringEscape(jsonName), '"');
|
|
286
286
|
onFirst = false;
|
|
287
287
|
});
|
|
288
288
|
});
|
|
@@ -298,19 +298,19 @@ class HaskellRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
298
298
|
this.emitLine("instance ToJSON ", enumName, " where");
|
|
299
299
|
this.indent(() => {
|
|
300
300
|
this.forEachEnumCase(e, "none", (name, jsonName) => {
|
|
301
|
-
this.emitLine("toJSON ", name, enumName,
|
|
301
|
+
this.emitLine("toJSON ", name, enumName, ' = "', Strings_1.stringEscape(jsonName), '"');
|
|
302
302
|
});
|
|
303
303
|
});
|
|
304
304
|
}
|
|
305
305
|
emitEnumDecoderInstance(e, enumName) {
|
|
306
306
|
this.emitLine("instance FromJSON ", enumName, " where");
|
|
307
307
|
this.indent(() => {
|
|
308
|
-
this.emitLine(
|
|
308
|
+
this.emitLine('parseJSON = withText "', enumName, '" parseText');
|
|
309
309
|
this.indent(() => {
|
|
310
310
|
this.emitLine("where");
|
|
311
311
|
this.indent(() => {
|
|
312
312
|
this.forEachEnumCase(e, "none", (name, jsonName) => {
|
|
313
|
-
this.emitLine(
|
|
313
|
+
this.emitLine('parseText "', Strings_1.stringEscape(jsonName), '" = return ', name, enumName);
|
|
314
314
|
});
|
|
315
315
|
});
|
|
316
316
|
});
|
|
@@ -14,7 +14,7 @@ const TypeUtils_1 = require("../TypeUtils");
|
|
|
14
14
|
exports.javaOptions = {
|
|
15
15
|
useList: new RendererOptions_1.EnumOption("array-type", "Use T[] or List<T>", [
|
|
16
16
|
["array", false],
|
|
17
|
-
["list", true]
|
|
17
|
+
["list", true]
|
|
18
18
|
], "array"),
|
|
19
19
|
justTypes: new RendererOptions_1.BooleanOption("just-types", "Plain types only", false),
|
|
20
20
|
dateTimeProvider: new RendererOptions_1.EnumOption("datetime-provider", "Date time provider type", [
|
|
@@ -25,7 +25,7 @@ exports.javaOptions = {
|
|
|
25
25
|
// FIXME: Do this via a configurable named eventually.
|
|
26
26
|
packageName: new RendererOptions_1.StringOption("package", "Generated package name", "NAME", "io.quicktype"),
|
|
27
27
|
lombok: new RendererOptions_1.BooleanOption("lombok", "Use lombok", false, "primary"),
|
|
28
|
-
lombokCopyAnnotations: new RendererOptions_1.BooleanOption("lombok-copy-annotations", "Copy accessor annotations", true, "secondary")
|
|
28
|
+
lombokCopyAnnotations: new RendererOptions_1.BooleanOption("lombok-copy-annotations", "Copy accessor annotations", true, "secondary")
|
|
29
29
|
};
|
|
30
30
|
class JavaTargetLanguage extends TargetLanguage_1.TargetLanguage {
|
|
31
31
|
constructor() {
|
|
@@ -39,7 +39,7 @@ class JavaTargetLanguage extends TargetLanguage_1.TargetLanguage {
|
|
|
39
39
|
exports.javaOptions.acronymStyle,
|
|
40
40
|
exports.javaOptions.packageName,
|
|
41
41
|
exports.javaOptions.lombok,
|
|
42
|
-
exports.javaOptions.lombokCopyAnnotations
|
|
42
|
+
exports.javaOptions.lombokCopyAnnotations
|
|
43
43
|
];
|
|
44
44
|
}
|
|
45
45
|
get supportsUnionsWithBothNumberTypes() {
|
|
@@ -128,7 +128,7 @@ const javaKeywords = [
|
|
|
128
128
|
"while",
|
|
129
129
|
"null",
|
|
130
130
|
"false",
|
|
131
|
-
"true"
|
|
131
|
+
"true"
|
|
132
132
|
];
|
|
133
133
|
exports.stringEscape = Strings_1.utf16ConcatMap(Strings_1.escapeNonPrintableMapper(Strings_1.isAscii, Strings_1.standardUnicodeHexEscape));
|
|
134
134
|
function isStartCharacter(codePoint) {
|
|
@@ -242,17 +242,11 @@ class Java8DateTimeProvider extends JavaDateTimeProvider {
|
|
|
242
242
|
class JavaLegacyDateTimeProvider extends JavaDateTimeProvider {
|
|
243
243
|
constructor() {
|
|
244
244
|
super(...arguments);
|
|
245
|
-
this.keywords = [
|
|
246
|
-
"SimpleDateFormat",
|
|
247
|
-
"Date",
|
|
248
|
-
];
|
|
245
|
+
this.keywords = ["SimpleDateFormat", "Date"];
|
|
249
246
|
this.dateTimeImports = ["java.util.Date"];
|
|
250
247
|
this.dateImports = ["java.util.Date"];
|
|
251
248
|
this.timeImports = ["java.util.Date"];
|
|
252
|
-
this.converterImports = [
|
|
253
|
-
"java.util.Date",
|
|
254
|
-
"java.text.SimpleDateFormat",
|
|
255
|
-
];
|
|
249
|
+
this.converterImports = ["java.util.Date", "java.text.SimpleDateFormat"];
|
|
256
250
|
this.dateTimeType = "Date";
|
|
257
251
|
this.dateType = "Date";
|
|
258
252
|
this.timeType = "Date";
|
|
@@ -266,10 +260,10 @@ class JavaLegacyDateTimeProvider extends JavaDateTimeProvider {
|
|
|
266
260
|
this._renderer.ensureBlankLine();
|
|
267
261
|
this._renderer.emitLine("private static final String[] DATE_TIME_FORMATS = {");
|
|
268
262
|
this._renderer.indent(() => this._renderer.indent(() => {
|
|
269
|
-
this._renderer.emitLine(
|
|
270
|
-
this._renderer.emitLine(
|
|
271
|
-
this._renderer.emitLine(
|
|
272
|
-
this._renderer.emitLine(
|
|
263
|
+
this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss.SX\",");
|
|
264
|
+
this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss.S\",");
|
|
265
|
+
this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ssX\",");
|
|
266
|
+
this._renderer.emitLine("\"yyyy-MM-dd'T'HH:mm:ss\",");
|
|
273
267
|
this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss.SX",');
|
|
274
268
|
this._renderer.emitLine('"yyyy-MM-dd HH:mm:ss.S",');
|
|
275
269
|
this._renderer.emitLine('"yyyy-MM-dd HH:mm:ssX",');
|
|
@@ -292,7 +286,7 @@ class JavaLegacyDateTimeProvider extends JavaDateTimeProvider {
|
|
|
292
286
|
});
|
|
293
287
|
this._renderer.ensureBlankLine();
|
|
294
288
|
this._renderer.emitBlock("public static String serializeDateTime(Date datetime)", () => {
|
|
295
|
-
this._renderer.emitLine(
|
|
289
|
+
this._renderer.emitLine("return new SimpleDateFormat(\"yyyy-MM-dd'T'hh:mm:ssZ\").format(datetime);");
|
|
296
290
|
});
|
|
297
291
|
this._renderer.ensureBlankLine();
|
|
298
292
|
this._renderer.emitBlock("public static String serializeDate(Date datetime)", () => {
|
|
@@ -341,7 +335,12 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
341
335
|
}
|
|
342
336
|
}
|
|
343
337
|
forbiddenNamesForGlobalNamespace() {
|
|
344
|
-
const keywords = [
|
|
338
|
+
const keywords = [
|
|
339
|
+
...javaKeywords,
|
|
340
|
+
...this._converterKeywords,
|
|
341
|
+
this._converterClassname,
|
|
342
|
+
...this._dateTimeProvider.keywords
|
|
343
|
+
];
|
|
345
344
|
return keywords;
|
|
346
345
|
}
|
|
347
346
|
forbiddenForObjectProperties(_c, _className) {
|
|
@@ -369,8 +368,8 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
369
368
|
return TypeUtils_1.directlyReachableSingleNamedType(type);
|
|
370
369
|
}
|
|
371
370
|
makeNamesForPropertyGetterAndSetter(_c, _className, _p, _jsonName, name) {
|
|
372
|
-
const getterName = new Naming_1.DependencyName(this.getNameStyling("propertyNamingFunction"), name.order,
|
|
373
|
-
const setterName = new Naming_1.DependencyName(this.getNameStyling("propertyNamingFunction"), name.order,
|
|
371
|
+
const getterName = new Naming_1.DependencyName(this.getNameStyling("propertyNamingFunction"), name.order, lookup => `get_${lookup(name)}`);
|
|
372
|
+
const setterName = new Naming_1.DependencyName(this.getNameStyling("propertyNamingFunction"), name.order, lookup => `set_${lookup(name)}`);
|
|
374
373
|
return [getterName, setterName];
|
|
375
374
|
}
|
|
376
375
|
makePropertyDependencyNames(c, className, p, jsonName, name) {
|
|
@@ -380,9 +379,9 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
380
379
|
}
|
|
381
380
|
getNameStyling(convention) {
|
|
382
381
|
const styling = {
|
|
383
|
-
typeNamingFunction: Naming_1.funPrefixNamer("types",
|
|
384
|
-
propertyNamingFunction: Naming_1.funPrefixNamer("properties",
|
|
385
|
-
enumCaseNamingFunction: Naming_1.funPrefixNamer("enum-cases",
|
|
382
|
+
typeNamingFunction: Naming_1.funPrefixNamer("types", n => javaNameStyle(true, false, n, Acronyms_1.acronymStyle(this._options.acronymStyle))),
|
|
383
|
+
propertyNamingFunction: Naming_1.funPrefixNamer("properties", n => javaNameStyle(false, false, n, Acronyms_1.acronymStyle(this._options.acronymStyle))),
|
|
384
|
+
enumCaseNamingFunction: Naming_1.funPrefixNamer("enum-cases", n => javaNameStyle(true, true, n, Acronyms_1.acronymStyle(this._options.acronymStyle)))
|
|
386
385
|
};
|
|
387
386
|
return styling[convention];
|
|
388
387
|
}
|
|
@@ -457,19 +456,19 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
457
456
|
this.emitTryCatch(f, () => this.emitLine("// Ignored"));
|
|
458
457
|
}
|
|
459
458
|
javaType(reference, t, withIssues = false) {
|
|
460
|
-
return TypeUtils_1.matchType(t,
|
|
459
|
+
return TypeUtils_1.matchType(t, _anyType => Source_1.maybeAnnotated(withIssues, Annotation_1.anyTypeIssueAnnotation, "Object"), _nullType => Source_1.maybeAnnotated(withIssues, Annotation_1.nullTypeIssueAnnotation, "Object"), _boolType => (reference ? "Boolean" : "boolean"), _integerType => (reference ? "Long" : "long"), _doubleType => (reference ? "Double" : "double"), _stringType => "String", arrayType => {
|
|
461
460
|
if (this._options.useList) {
|
|
462
461
|
return ["List<", this.javaType(true, arrayType.items, withIssues), ">"];
|
|
463
462
|
}
|
|
464
463
|
else {
|
|
465
464
|
return [this.javaType(false, arrayType.items, withIssues), "[]"];
|
|
466
465
|
}
|
|
467
|
-
},
|
|
466
|
+
}, classType => this.nameForNamedType(classType), mapType => ["Map<String, ", this.javaType(true, mapType.values, withIssues), ">"], enumType => this.nameForNamedType(enumType), unionType => {
|
|
468
467
|
const nullable = TypeUtils_1.nullableFromUnion(unionType);
|
|
469
468
|
if (nullable !== null)
|
|
470
469
|
return this.javaType(true, nullable, withIssues);
|
|
471
470
|
return this.nameForNamedType(unionType);
|
|
472
|
-
},
|
|
471
|
+
}, transformedStringType => {
|
|
473
472
|
if (transformedStringType.kind === "time") {
|
|
474
473
|
return this._dateTimeProvider.timeType;
|
|
475
474
|
}
|
|
@@ -486,18 +485,18 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
486
485
|
});
|
|
487
486
|
}
|
|
488
487
|
javaImport(t) {
|
|
489
|
-
return TypeUtils_1.matchType(t,
|
|
488
|
+
return TypeUtils_1.matchType(t, _anyType => [], _nullType => [], _boolType => [], _integerType => [], _doubleType => [], _stringType => [], arrayType => {
|
|
490
489
|
if (this._options.useList) {
|
|
491
490
|
return [...this.javaImport(arrayType.items), "java.util.List"];
|
|
492
491
|
}
|
|
493
492
|
else {
|
|
494
493
|
return [...this.javaImport(arrayType.items)];
|
|
495
494
|
}
|
|
496
|
-
},
|
|
495
|
+
}, _classType => [], mapType => [...this.javaImport(mapType.values), "java.util.Map"], _enumType => [], unionType => {
|
|
497
496
|
const imports = [];
|
|
498
|
-
unionType.members.forEach(
|
|
497
|
+
unionType.members.forEach(type => this.javaImport(type).forEach(imp => imports.push(imp)));
|
|
499
498
|
return imports;
|
|
500
|
-
},
|
|
499
|
+
}, transformedStringType => {
|
|
501
500
|
if (transformedStringType.kind === "time") {
|
|
502
501
|
return this._dateTimeProvider.timeImports;
|
|
503
502
|
}
|
|
@@ -558,7 +557,7 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
558
557
|
importsForClass(c) {
|
|
559
558
|
const imports = [];
|
|
560
559
|
this.forEachClassProperty(c, "none", (_name, _jsonName, p) => {
|
|
561
|
-
this.javaImport(p.type).forEach(
|
|
560
|
+
this.javaImport(p.type).forEach(imp => imports.push(imp));
|
|
562
561
|
});
|
|
563
562
|
imports.sort();
|
|
564
563
|
return [...new Set(imports)];
|
|
@@ -567,7 +566,7 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
567
566
|
const imports = [];
|
|
568
567
|
const [, nonNulls] = TypeUtils_1.removeNullFromUnion(u);
|
|
569
568
|
this.forEachUnionMember(u, nonNulls, "none", null, (_fieldName, t) => {
|
|
570
|
-
this.javaImport(t).forEach(
|
|
569
|
+
this.javaImport(t).forEach(imp => imports.push(imp));
|
|
571
570
|
});
|
|
572
571
|
imports.sort();
|
|
573
572
|
return [...new Set(imports)];
|
|
@@ -596,11 +595,9 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
596
595
|
this.emitDescription(this.descriptionForClassProperty(c, jsonName));
|
|
597
596
|
const [getterName, setterName] = Support_1.defined(this._gettersAndSettersForPropertyName.get(name));
|
|
598
597
|
const rendered = this.javaType(false, p.type);
|
|
599
|
-
this.annotationsForAccessor(c, className, name, jsonName, p, false)
|
|
600
|
-
.forEach(annotation => this.emitLine(annotation));
|
|
598
|
+
this.annotationsForAccessor(c, className, name, jsonName, p, false).forEach(annotation => this.emitLine(annotation));
|
|
601
599
|
this.emitLine("public ", rendered, " ", getterName, "() { return ", name, "; }");
|
|
602
|
-
this.annotationsForAccessor(c, className, name, jsonName, p, true)
|
|
603
|
-
.forEach(annotation => this.emitLine(annotation));
|
|
600
|
+
this.annotationsForAccessor(c, className, name, jsonName, p, true).forEach(annotation => this.emitLine(annotation));
|
|
604
601
|
this.emitLine("public void ", setterName, "(", rendered, " value) { this.", name, " = value; }");
|
|
605
602
|
});
|
|
606
603
|
}
|
|
@@ -644,7 +641,7 @@ class JavaRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
|
644
641
|
this.emitFileHeader(enumName, this.importsForType(e));
|
|
645
642
|
this.emitDescription(this.descriptionForType(e));
|
|
646
643
|
const caseNames = [];
|
|
647
|
-
this.forEachEnumCase(e, "none",
|
|
644
|
+
this.forEachEnumCase(e, "none", name => {
|
|
648
645
|
if (caseNames.length > 0)
|
|
649
646
|
caseNames.push(", ");
|
|
650
647
|
caseNames.push(name);
|
|
@@ -692,7 +689,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
692
689
|
"JsonParser",
|
|
693
690
|
"JsonProcessingException",
|
|
694
691
|
"DeserializationContext",
|
|
695
|
-
"SerializerProvider"
|
|
692
|
+
"SerializerProvider"
|
|
696
693
|
];
|
|
697
694
|
}
|
|
698
695
|
emitClassAttributes(c, _className) {
|
|
@@ -702,9 +699,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
702
699
|
}
|
|
703
700
|
annotationsForAccessor(_c, _className, _propertyName, jsonName, p, _isSetter) {
|
|
704
701
|
const superAnnotations = super.annotationsForAccessor(_c, _className, _propertyName, jsonName, p, _isSetter);
|
|
705
|
-
const annotations = [
|
|
706
|
-
('@JsonProperty("' + exports.stringEscape(jsonName) + '")')
|
|
707
|
-
];
|
|
702
|
+
const annotations = ['@JsonProperty("' + exports.stringEscape(jsonName) + '")'];
|
|
708
703
|
switch (p.type.kind) {
|
|
709
704
|
case "date-time":
|
|
710
705
|
this._dateTimeProvider.dateTimeJacksonAnnotations.forEach(annotation => annotations.push(annotation));
|
|
@@ -780,7 +775,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
780
775
|
if (this._options.useList && t instanceof Type_1.ArrayType) {
|
|
781
776
|
this.emitLine("value.", fieldName, " = jsonParser.readValueAs(new TypeReference<", rendered, ">() {});");
|
|
782
777
|
}
|
|
783
|
-
else if (stringBasedObjects.some(
|
|
778
|
+
else if (stringBasedObjects.some(stringBasedTypeKind => t.kind === stringBasedTypeKind)) {
|
|
784
779
|
emitDeserializerCodeForStringObjects(fieldName, t.kind, variableFieldName);
|
|
785
780
|
}
|
|
786
781
|
else if (t.kind === "string") {
|
|
@@ -811,7 +806,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
811
806
|
const emitStringDeserializer = () => {
|
|
812
807
|
const enumType = u.findMember("enum");
|
|
813
808
|
const stringType = u.findMember("string");
|
|
814
|
-
if (stringBasedObjects.every(
|
|
809
|
+
if (stringBasedObjects.every(kind => u.findMember(kind) === undefined) &&
|
|
815
810
|
stringType === undefined &&
|
|
816
811
|
enumType === undefined)
|
|
817
812
|
return;
|
|
@@ -820,7 +815,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
820
815
|
this.indent(() => {
|
|
821
816
|
const fromVariable = "string";
|
|
822
817
|
this.emitLine("String " + fromVariable + " = jsonParser.readValueAs(String.class);");
|
|
823
|
-
stringBasedObjects.forEach(
|
|
818
|
+
stringBasedObjects.forEach(kind => {
|
|
824
819
|
const type = u.findMember(kind);
|
|
825
820
|
if (type !== undefined) {
|
|
826
821
|
this.emitIgnoredTryCatchBlock(() => {
|
|
@@ -879,7 +874,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
879
874
|
const emitSerializeType = (t) => {
|
|
880
875
|
let { fieldName } = this.unionField(u, t, true);
|
|
881
876
|
this.emitBlock(["if (obj.", fieldName, " != null)"], () => {
|
|
882
|
-
if (customObjectSerializer.some(
|
|
877
|
+
if (customObjectSerializer.some(customSerializerType => t.kind === customSerializerType)) {
|
|
883
878
|
this.emitLine("jsonGenerator.writeObject(", serializerCodeForType(t, ["obj.", fieldName]), ");");
|
|
884
879
|
}
|
|
885
880
|
else {
|
|
@@ -895,7 +890,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
895
890
|
this.emitBlock([
|
|
896
891
|
"public ",
|
|
897
892
|
unionName,
|
|
898
|
-
" deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException"
|
|
893
|
+
" deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException"
|
|
899
894
|
], () => {
|
|
900
895
|
this.emitLine(unionName, " value = new ", unionName, "();");
|
|
901
896
|
this.emitLine("switch (jsonParser.currentToken()) {");
|
|
@@ -918,7 +913,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
918
913
|
this.emitBlock([
|
|
919
914
|
"public void serialize(",
|
|
920
915
|
unionName,
|
|
921
|
-
" obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException"
|
|
916
|
+
" obj, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException"
|
|
922
917
|
], () => {
|
|
923
918
|
for (const t of nonNulls) {
|
|
924
919
|
emitSerializeType(t);
|
|
@@ -997,14 +992,16 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
997
992
|
"",
|
|
998
993
|
this._options.lombok ? " org.projectlombok : lombok : 1.18.2" : "",
|
|
999
994
|
" com.fasterxml.jackson.core : jackson-databind : 2.9.0",
|
|
1000
|
-
this._options.dateTimeProvider === "java8"
|
|
995
|
+
this._options.dateTimeProvider === "java8"
|
|
996
|
+
? " com.fasterxml.jackson.datatype : jackson-datatype-jsr310 : 2.9.0"
|
|
997
|
+
: "",
|
|
1001
998
|
"",
|
|
1002
999
|
"Import this package:",
|
|
1003
|
-
""
|
|
1000
|
+
""
|
|
1004
1001
|
]);
|
|
1005
1002
|
this.emitLine("// import ", this._options.packageName, ".Converter;");
|
|
1006
|
-
this.emitMultiline(`//
|
|
1007
|
-
// Then you can deserialize a JSON string with
|
|
1003
|
+
this.emitMultiline(`//
|
|
1004
|
+
// Then you can deserialize a JSON string with
|
|
1008
1005
|
//`);
|
|
1009
1006
|
this.forEachTopLevel("none", (t, name) => {
|
|
1010
1007
|
this.emitLine("// ", this.javaType(false, t), " data = Converter.", this.decoderName(name), "(jsonString);");
|
|
@@ -1016,7 +1013,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
1016
1013
|
"com.fasterxml.jackson.databind.module.SimpleModule",
|
|
1017
1014
|
"com.fasterxml.jackson.core.JsonParser",
|
|
1018
1015
|
"com.fasterxml.jackson.core.JsonProcessingException",
|
|
1019
|
-
"java.util.*"
|
|
1016
|
+
"java.util.*"
|
|
1020
1017
|
].concat(this._dateTimeProvider.converterImports);
|
|
1021
1018
|
this.emitPackageAndImports(imports);
|
|
1022
1019
|
this.ensureBlankLine();
|
|
@@ -1031,7 +1028,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
1031
1028
|
topLevelTypeRendered,
|
|
1032
1029
|
" ",
|
|
1033
1030
|
this.decoderName(topLevelName),
|
|
1034
|
-
"(String json) throws IOException"
|
|
1031
|
+
"(String json) throws IOException"
|
|
1035
1032
|
], () => {
|
|
1036
1033
|
this.emitLine("return ", this.readerGetterName(topLevelName), "().readValue(json);");
|
|
1037
1034
|
});
|
|
@@ -1041,7 +1038,7 @@ class JacksonRenderer extends JavaRenderer {
|
|
|
1041
1038
|
this.encoderName(topLevelName),
|
|
1042
1039
|
"(",
|
|
1043
1040
|
topLevelTypeRendered,
|
|
1044
|
-
" obj) throws JsonProcessingException"
|
|
1041
|
+
" obj) throws JsonProcessingException"
|
|
1045
1042
|
], () => {
|
|
1046
1043
|
this.emitLine("return ", this.writerGetterName(topLevelName), "().writeValueAsString(obj);");
|
|
1047
1044
|
});
|
|
@@ -18,8 +18,8 @@ exports.javaScriptPropTypesOptions = {
|
|
|
18
18
|
converters: Converters_1.convertersOption(),
|
|
19
19
|
moduleSystem: new RendererOptions_1.EnumOption("module-system", "Which module system to use", [
|
|
20
20
|
["common-js", false],
|
|
21
|
-
["es6", true]
|
|
22
|
-
], "es6")
|
|
21
|
+
["es6", true]
|
|
22
|
+
], "es6")
|
|
23
23
|
};
|
|
24
24
|
class JavaScriptPropTypesTargetLanguage extends TargetLanguage_1.TargetLanguage {
|
|
25
25
|
getOptions() {
|
|
@@ -33,7 +33,7 @@ class JavaScriptPropTypesTargetLanguage extends TargetLanguage_1.TargetLanguage
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
exports.JavaScriptPropTypesTargetLanguage = JavaScriptPropTypesTargetLanguage;
|
|
36
|
-
const identityNamingFunction = Naming_1.funPrefixNamer("properties",
|
|
36
|
+
const identityNamingFunction = Naming_1.funPrefixNamer("properties", s => s);
|
|
37
37
|
class JavaScriptPropTypesRenderer extends ConvenienceRenderer_1.ConvenienceRenderer {
|
|
38
38
|
constructor(targetLanguage, renderContext, _jsOptions) {
|
|
39
39
|
super(targetLanguage, renderContext);
|
|
@@ -42,10 +42,10 @@ class JavaScriptPropTypesRenderer extends ConvenienceRenderer_1.ConvenienceRende
|
|
|
42
42
|
nameStyle(original, upper) {
|
|
43
43
|
const acronyms = Acronyms_1.acronymStyle(this._jsOptions.acronymStyle);
|
|
44
44
|
const words = __1.splitIntoWords(original);
|
|
45
|
-
return __1.combineWords(words, JavaScript_1.legalizeName, upper ? __1.firstUpperWordStyle : Strings_1.allLowerWordStyle, __1.firstUpperWordStyle, upper ?
|
|
45
|
+
return __1.combineWords(words, JavaScript_1.legalizeName, upper ? __1.firstUpperWordStyle : Strings_1.allLowerWordStyle, __1.firstUpperWordStyle, upper ? s => __1.capitalize(acronyms(s)) : Strings_1.allLowerWordStyle, acronyms, "", JavaScriptUnicodeMaps_1.isES3IdentifierStart);
|
|
46
46
|
}
|
|
47
47
|
makeNamedTypeNamer() {
|
|
48
|
-
return Naming_1.funPrefixNamer("types",
|
|
48
|
+
return Naming_1.funPrefixNamer("types", s => this.nameStyle(s, true));
|
|
49
49
|
}
|
|
50
50
|
namerForObjectProperty() {
|
|
51
51
|
return identityNamingFunction;
|
|
@@ -54,7 +54,7 @@ class JavaScriptPropTypesRenderer extends ConvenienceRenderer_1.ConvenienceRende
|
|
|
54
54
|
return null;
|
|
55
55
|
}
|
|
56
56
|
makeEnumCaseNamer() {
|
|
57
|
-
return Naming_1.funPrefixNamer("enum-cases",
|
|
57
|
+
return Naming_1.funPrefixNamer("enum-cases", s => this.nameStyle(s, false));
|
|
58
58
|
}
|
|
59
59
|
namedTypeToNameForTopLevel(type) {
|
|
60
60
|
return TypeUtils_1.directlyReachableSingleNamedType(type);
|
|
@@ -67,10 +67,10 @@ class JavaScriptPropTypesRenderer extends ConvenienceRenderer_1.ConvenienceRende
|
|
|
67
67
|
if (["class", "object", "enum"].indexOf(t.kind) >= 0) {
|
|
68
68
|
return ["_", this.nameForNamedType(t)];
|
|
69
69
|
}
|
|
70
|
-
const match = __1.matchType(t,
|
|
70
|
+
const match = __1.matchType(t, _anyType => "PropTypes.any", _nullType => "PropTypes.any", _boolType => "PropTypes.bool", _integerType => "PropTypes.number", _doubleType => "PropTypes.number", _stringType => "PropTypes.string", arrayType => ["PropTypes.arrayOf(", this.typeMapTypeFor(arrayType.items, false), ")"], _classType => __1.panic("Should already be handled."), _mapType => "PropTypes.object", _enumType => __1.panic("Should already be handled."), unionType => {
|
|
71
71
|
const children = Array.from(unionType.getChildren()).map((type) => this.typeMapTypeFor(type, false));
|
|
72
72
|
return ["PropTypes.oneOfType([", ...collection_utils_1.arrayIntercalate(", ", children), "])"];
|
|
73
|
-
},
|
|
73
|
+
}, _transformedStringType => {
|
|
74
74
|
return "PropTypes.string";
|
|
75
75
|
});
|
|
76
76
|
if (required) {
|
|
@@ -102,7 +102,7 @@ class JavaScriptPropTypesRenderer extends ConvenienceRenderer_1.ConvenienceRende
|
|
|
102
102
|
"",
|
|
103
103
|
"MyComponent.propTypes = {",
|
|
104
104
|
" input: MyShape",
|
|
105
|
-
"};"
|
|
105
|
+
"};"
|
|
106
106
|
], "// ");
|
|
107
107
|
}
|
|
108
108
|
emitBlock(source, end, emit) {
|
|
@@ -151,7 +151,7 @@ class JavaScriptPropTypesRenderer extends ConvenienceRenderer_1.ConvenienceRende
|
|
|
151
151
|
let ordinal = 0;
|
|
152
152
|
// pull out all names
|
|
153
153
|
const source = mapValue[index];
|
|
154
|
-
const names = source.filter(
|
|
154
|
+
const names = source.filter(value => value);
|
|
155
155
|
// must be behind all these names
|
|
156
156
|
for (let i = 0; i < names.length; i++) {
|
|
157
157
|
const depName = names[i];
|
|
@@ -168,7 +168,7 @@ class JavaScriptPropTypesRenderer extends ConvenienceRenderer_1.ConvenienceRende
|
|
|
168
168
|
order.splice(ordinal, 0, index);
|
|
169
169
|
});
|
|
170
170
|
// now emit ordered source
|
|
171
|
-
order.forEach(
|
|
171
|
+
order.forEach(i => this.emitGatheredSource(mapValue[i]));
|
|
172
172
|
// now emit top levels
|
|
173
173
|
this.forEachTopLevel("none", (type, name) => {
|
|
174
174
|
if (type instanceof Type_1.PrimitiveType) {
|