skir-java-gen 0.0.2 → 0.0.4

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/index.d.ts CHANGED
@@ -2,14 +2,13 @@ import { type CodeGenerator } from "skir-internal";
2
2
  import { z } from "zod";
3
3
  declare const Config: z.ZodObject<{
4
4
  packagePrefix: z.ZodOptional<z.ZodString>;
5
- }, z.core.$strip>;
5
+ }, z.core.$strict>;
6
6
  type Config = z.infer<typeof Config>;
7
7
  declare class JavaCodeGenerator implements CodeGenerator<Config> {
8
- readonly id = "java";
8
+ readonly id = "skir-java-gen";
9
9
  readonly configType: z.ZodObject<{
10
10
  packagePrefix: z.ZodOptional<z.ZodString>;
11
- }, z.core.$strip>;
12
- readonly version = "1.0.0";
11
+ }, z.core.$strict>;
13
12
  generateCode(input: CodeGenerator.Input<Config>): CodeGenerator.Output;
14
13
  }
15
14
  export declare const GENERATOR: JavaCodeGenerator;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,aAAa,EASnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,MAAM;;iBAKV,CAAC;AAEH,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAErC,cAAM,iBAAkB,YAAW,aAAa,CAAC,MAAM,CAAC;IACtD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,UAAU;;sBAAU;IAC7B,QAAQ,CAAC,OAAO,WAAW;IAE3B,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM;CAmDvE;AA+gCD,eAAO,MAAM,SAAS,mBAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EASnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,MAAM;;kBAKV,CAAC;AAEH,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAErC,cAAM,iBAAkB,YAAW,aAAa,CAAC,MAAM,CAAC;IACtD,QAAQ,CAAC,EAAE,mBAAmB;IAC9B,QAAQ,CAAC,UAAU;;uBAAU;IAE7B,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM;CAmDvE;AAokCD,eAAO,MAAM,SAAS,mBAA0B,CAAC"}
package/dist/index.js CHANGED
@@ -1,11 +1,8 @@
1
- // TODO: add comments to generated code
2
- // TODO: add comments to records/fields/methods
3
- // TODO: s/field/variant for enums
4
1
  import { convertCase, } from "skir-internal";
5
2
  import { z } from "zod";
6
3
  import { Namer, toEnumConstantName } from "./naming.js";
7
4
  import { TypeSpeller } from "./type_speller.js";
8
- const Config = z.object({
5
+ const Config = z.strictObject({
9
6
  packagePrefix: z
10
7
  .string()
11
8
  .regex(/^([a-z_$][a-z0-9_$]*\.)*$/)
@@ -13,9 +10,8 @@ const Config = z.object({
13
10
  });
14
11
  class JavaCodeGenerator {
15
12
  constructor() {
16
- this.id = "java";
13
+ this.id = "skir-java-gen";
17
14
  this.configType = Config;
18
- this.version = "1.0.0";
19
15
  }
20
16
  generateCode(input) {
21
17
  const { recordMap, config } = input;
@@ -68,9 +64,11 @@ class JavaSourceFileGenerator {
68
64
  // | |/ / | (_) | | | | || (_) || |_ | __/| (_| || || |_
69
65
  // |___/ \\___/ |_| |_| \\___/ \\__| \\___| \\__,_||_| \\__|
70
66
  //
71
-
67
+ // Generated by skir-java-gen
68
+ // Home: https://github.com/gepheum/skir-java-gen
69
+ //
72
70
  // To install the skir client library, add:
73
- // implementation("build.skir:skir-kotlin-client:latest.release")
71
+ // implementation("build.skir:skir-client:latest.release")
74
72
  // to your build.gradle file
75
73
 
76
74
  `, `package ${this.packagePrefix}skirout.`, this.modulePath.replace(/\.skir$/, "").replace("/", "."), ";\n\n");
@@ -108,7 +106,7 @@ class JavaSourceFileGenerator {
108
106
  const className = this.namer.getClassName(recordLocation).name;
109
107
  const fields = [...record.fields];
110
108
  fields.sort((a, b) => a.name.text.localeCompare(b.name.text));
111
- this.push("public ", nested === "nested" ? "static " : "", `final class ${className} {\n`);
109
+ this.push(commentify([docToCommentText(record.doc), "\nDeeply immutable."]), "public ", nested === "nested" ? "static " : "", `final class ${className} {\n`);
112
110
  // Declare fields
113
111
  for (const field of fields) {
114
112
  const fieldName = namer.structFieldToJavaName(field);
@@ -142,12 +140,12 @@ class JavaSourceFileGenerator {
142
140
  this.push(`this.${fieldName} = ${defaultExpr};\n`);
143
141
  }
144
142
  }
145
- this.push("this._u = null;\n", "}\n\n", `public static final ${className} DEFAULT = new ${className}();\n\n`);
143
+ this.push("this._u = null;\n", "}\n\n", `/** Instance with all fields set to their default values. */\n`, `public static final ${className} DEFAULT = new ${className}();\n\n`);
146
144
  // Getters
147
145
  for (const field of fields) {
148
146
  const fieldName = namer.structFieldToJavaName(field);
149
147
  const type = typeSpeller.getJavaType(field.type, "frozen");
150
- this.push(`public ${type} ${fieldName}() {\n`);
148
+ this.push(commentify([docToCommentText(field.doc)]), `public ${type} ${fieldName}() {\n`);
151
149
  if (field.isRecursive === "hard") {
152
150
  const defaultExpr = this.getDefaultExpression(field.type);
153
151
  this.push(`if (this.${fieldName} != null) {\n`, `return this.${fieldName};\n`, `} else {\n`, `return ${defaultExpr};\n`, "}\n");
@@ -158,7 +156,13 @@ class JavaSourceFileGenerator {
158
156
  this.push("}\n\n");
159
157
  }
160
158
  // toBuilder()
161
- this.push(`public Builder toBuilder() {\n`);
159
+ this.push(`
160
+ /**
161
+ * Returns a new builder with all fields copied from this instance.
162
+ * Usage: set the fields you want to modify and call \`build()\` to obtain a
163
+ * modified copy.
164
+ */
165
+ public Builder toBuilder() {\n`);
162
166
  this.push(`return new Builder(\n`);
163
167
  for (const field of fields) {
164
168
  const fieldName = namer.structFieldToJavaName(field);
@@ -181,10 +185,21 @@ class JavaSourceFileGenerator {
181
185
  const retType = firstField
182
186
  ? "Builder_At" + convertCase(firstField.name.text, "UpperCamel")
183
187
  : "Builder_Done";
184
- this.push(`public static ${retType} builder() {\n`, "return new Builder();\n", "}\n\n");
188
+ this.push(`/**
189
+ * Returns a new builder for constructing {@code ${className}} instances.
190
+ * All fields must be specified in alphabetical order before you can call \`build()\`.
191
+ */
192
+ public static ${retType} builder() {
193
+ return new Builder();
194
+ }
195
+
196
+ /**
197
+ * Returns a new builder with all fields initialized to their default values.
198
+ */
199
+ public static Builder partialBuilder() {
200
+ return new Builder();
201
+ }\n\n`);
185
202
  }
186
- // partialBuilder()
187
- this.push("public static Builder partialBuilder() {\n", "return new Builder();\n", "}\n\n");
188
203
  // Builder_At? interfaces
189
204
  for (const [index, field] of fields.entries()) {
190
205
  const fieldName = namer.structFieldToJavaName(field);
@@ -194,7 +209,7 @@ class JavaSourceFileGenerator {
194
209
  ? "Builder_At" + convertCase(nextField.name.text, "UpperCamel")
195
210
  : "Builder_Done";
196
211
  const paramType = typeSpeller.getJavaType(field.type, "initializer");
197
- this.push(`public interface Builder_At${upperCamelName} {\n`, `${retType} set${upperCamelName}(${paramType} ${fieldName});\n`, "}\n\n");
212
+ this.push(`public interface Builder_At${upperCamelName} {\n`, commentify([docToCommentText(field.doc)]), `${retType} set${upperCamelName}(${paramType} ${fieldName});\n`, "}\n\n");
198
213
  }
199
214
  this.push(`public interface Builder_Done {\n`, `${className} build();\n`, "}\n\n");
200
215
  // Builder class
@@ -260,11 +275,20 @@ class JavaSourceFileGenerator {
260
275
  this.push(`private static final ${serializerType} _serializerImpl = (\n`, "new build.skir.internal.StructSerializer<>(\n", `"${getRecordId(recordLocation)}",\n`, `${toJavaStringLiteral(docToCommentText(record.doc))},\n`, "DEFAULT,\n", `(${className} it) -> it != null ? it.toBuilder() : partialBuilder(),\n`, `(${className}.Builder it) -> it.build(),\n`, `(${className} it) -> it._u,\n`, `(${className}.Builder builder, ${unrecognizedFieldsType} u) -> {\n`, `builder._u = u;\n`, "return null;\n", "}\n", ")\n", ");\n\n");
261
276
  }
262
277
  // SERIALIZER
263
- this.push(`public static final build.skir.Serializer<${className}> SERIALIZER = (\n`, "build.skir.internal.SerializersKt.makeSerializer(_serializerImpl)\n", ");\n\n");
278
+ this.push(`/** Serializer for {@code ${className}} instances. */
279
+ public static final build.skir.Serializer<${className}> SERIALIZER = (
280
+ build.skir.internal.SerializersKt.makeSerializer(_serializerImpl)
281
+ );\n\n`);
264
282
  // TYPE_DESCRIPTOR
265
283
  {
266
284
  const typeDescriptorType = `build.skir.reflection.StructDescriptor.Reflective<${className}, ${className}.Builder>`;
267
- this.push(`public static final ${typeDescriptorType} TYPE_DESCRIPTOR = (\n`, "_serializerImpl\n", ");\n\n");
285
+ this.push(`/**
286
+ * Describes the {@code ${className}} type.
287
+ * Provides runtime introspection capabilities.
288
+ */
289
+ public static final ${typeDescriptorType} TYPE_DESCRIPTOR = (
290
+ _serializerImpl
291
+ );\n\n`);
268
292
  }
269
293
  // Finalize serializer
270
294
  this.push("static {\n");
@@ -285,82 +309,126 @@ class JavaSourceFileGenerator {
285
309
  const { recordMap, typeSpeller } = this;
286
310
  const recordLocation = recordMap.get(record.key);
287
311
  const className = this.namer.getClassName(recordLocation).name;
288
- const { fields } = record;
289
- const constantFields = fields.filter((f) => !f.type);
290
- const wrapperFields = fields.filter((f) => f.type);
291
- this.push("public ", nested === "nested" ? "static " : "", `final class ${className} {\n`);
312
+ const { fields: variants } = record;
313
+ const constantVariants = variants.filter((v) => !v.type);
314
+ const wrapperVariants = variants.filter((v) => v.type);
315
+ this.push(commentify([docToCommentText(record.doc), "\nDeeply immutable."]), "public ", nested === "nested" ? "static " : "", `final class ${className} {\n`);
292
316
  // Kind enum
293
- this.push("public enum Kind {\n", "UNKNOWN,\n");
294
- for (const field of constantFields) {
295
- this.push(field.name.text, "_CONST,\n");
317
+ this.push(`/** The kind of variant held by a {@code ${className}}. */
318
+ public enum Kind {
319
+ UNKNOWN,\n`);
320
+ for (const variant of constantVariants) {
321
+ this.push(variant.name.text, "_CONST,\n");
296
322
  }
297
- for (const field of wrapperFields) {
298
- this.push(convertCase(field.name.text, "UPPER_UNDERSCORE"), "_WRAPPER,\n");
323
+ for (const variant of wrapperVariants) {
324
+ this.push(convertCase(variant.name.text, "UPPER_UNDERSCORE"), "_WRAPPER,\n");
299
325
  }
300
326
  this.push("}\n\n");
301
327
  // Constants
302
- this.push(`public static final ${className} UNKNOWN = new ${className}(Kind.UNKNOWN, null);\n`);
303
- for (const field of constantFields) {
304
- const skirName = field.name.text;
305
- const name = toEnumConstantName(field);
306
- this.push(`public static final ${className} ${name} = new ${className}(Kind.${skirName}_CONST, null);\n`);
328
+ this.push(`/**
329
+ * Constant indicating an unknown {@code ${className}}.
330
+ * Default value for fields of type {@code ${className}}.
331
+ */
332
+ public static final ${className} UNKNOWN = new ${className}(Kind.UNKNOWN, null);\n`);
333
+ for (const variant of constantVariants) {
334
+ const skirName = variant.name.text;
335
+ const name = toEnumConstantName(variant);
336
+ this.push(commentify(docToCommentText(variant.doc)), `public static final ${className} ${name} = new ${className}(Kind.${skirName}_CONST, null);\n`);
307
337
  }
308
338
  this.pushEol();
309
339
  // WrapX methods
310
- for (const field of wrapperFields) {
311
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
312
- const upperUnderscoreName = convertCase(field.name.text, "UPPER_UNDERSCORE");
313
- const type = field.type;
340
+ for (const variant of wrapperVariants) {
341
+ const variantName = variant.name.text;
342
+ const upperCamelName = convertCase(variantName, "UpperCamel");
343
+ const upperUnderscoreName = convertCase(variantName, "UPPER_UNDERSCORE");
344
+ const type = variant.type;
314
345
  const initializerType = typeSpeller.getJavaType(type, "initializer");
315
346
  const frozenType = typeSpeller.getJavaType(type, "frozen");
316
347
  const toFrozenExpr = this.toFrozenExpression("value", type, "can-be-null", "_e");
317
- this.push(`public static ${className} wrap${upperCamelName}(${initializerType} value) {\n`, `final ${frozenType} v = ${toFrozenExpr};\n`, `return new ${className}(Kind.${upperUnderscoreName}_WRAPPER, v);\n`, "}\n\n");
348
+ this.push(`/** Create a '${variantName}' variant wrapping around the given value. */
349
+ public static ${className} wrap${upperCamelName}(${initializerType} value) {
350
+ final ${frozenType} v = ${toFrozenExpr};
351
+ return new ${className}(Kind.${upperUnderscoreName}_WRAPPER, v);
352
+ }\n\n`);
318
353
  }
319
- // Declare fields
320
354
  this.push("private final Kind kind;\n", "private final java.lang.Object value;\n\n");
321
355
  // Constructor
322
- this.push(`private ${className}(Kind kind, java.lang.Object value) {\n`, "this.kind = kind;\n", "this.value = value;\n", "}\n\n");
356
+ this.push(`private ${className}(Kind kind, java.lang.Object value) {
357
+ this.kind = kind;
358
+ this.value = value;
359
+ }\n\n`);
323
360
  // kind()
324
- this.push("public Kind kind() {\n", "return kind;\n", "}\n\n");
325
- // asX() methods
326
- for (const field of wrapperFields) {
327
- const type = typeSpeller.getJavaType(field.type, "frozen");
328
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
329
- const upperUnderscoreName = convertCase(field.name.text, "UPPER_UNDERSCORE");
330
- this.push(`public ${type} as${upperCamelName}() {\n`, `if (kind != Kind.${upperUnderscoreName}_WRAPPER) {\n`, `throw new java.lang.IllegalStateException("kind=" + kind.name());\n`, "}\n", `return (${type}) value;\n`, "}\n\n");
361
+ this.push(`/** Returns the kind of variant held by this instance. */
362
+ public Kind kind() {
363
+ return kind;
364
+ }\n\n`);
365
+ // isX() and asX() methods
366
+ for (const variant of wrapperVariants) {
367
+ const type = typeSpeller.getJavaType(variant.type, "frozen");
368
+ const variantName = variant.name.text;
369
+ const upperCamelName = convertCase(variantName, "UpperCamel");
370
+ const upperUnderscoreName = convertCase(variantName, "UPPER_UNDERSCORE");
371
+ this.push(`/** Returns true if this instance holds a '${variantName}' variant. */
372
+ public boolean is${upperCamelName}() {
373
+ return kind == Kind.${upperUnderscoreName}_WRAPPER;
374
+ }
375
+
376
+ /**
377
+ * Assuming this instance holds a '${variantName}' variant, returns its value.
378
+ * @throws IllegalStateException if this instance does not hold a '${variantName}' variant.
379
+ */
380
+ public ${type} as${upperCamelName}() {
381
+ if (kind != Kind.${upperUnderscoreName}_WRAPPER) {
382
+ throw new java.lang.IllegalStateException("kind=" + kind.name());
383
+ }
384
+ return (${type}) value;
385
+ }\n\n`);
331
386
  }
332
387
  // Visitor
333
388
  this.push("public interface Visitor<R> {\n", "R onUnknown();\n");
334
- for (const field of constantFields) {
335
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
389
+ for (const variant of constantVariants) {
390
+ const upperCamelName = convertCase(variant.name.text, "UpperCamel");
336
391
  this.push(`R on${upperCamelName}();\n`);
337
392
  }
338
- for (const field of wrapperFields) {
339
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
340
- const type = typeSpeller.getJavaType(field.type, "frozen");
393
+ for (const variant of wrapperVariants) {
394
+ const upperCamelName = convertCase(variant.name.text, "UpperCamel");
395
+ const type = typeSpeller.getJavaType(variant.type, "frozen");
341
396
  this.push(`R on${upperCamelName}(${type} value);\n`);
342
397
  }
343
398
  this.push("}\n\n");
344
399
  // accept()
345
400
  this.push("public <R> R accept(Visitor<R> visitor) {\n", "return switch (kind) {\n");
346
- for (const field of constantFields) {
347
- const upperUnderscoreName = field.name.text;
348
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
401
+ for (const variant of constantVariants) {
402
+ const upperUnderscoreName = variant.name.text;
403
+ const upperCamelName = convertCase(variant.name.text, "UpperCamel");
349
404
  this.push(`case ${upperUnderscoreName}_CONST -> visitor.on${upperCamelName}();\n`);
350
405
  }
351
- for (const field of wrapperFields) {
352
- const upperUnderscoreName = convertCase(field.name.text, "UPPER_UNDERSCORE");
353
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
354
- const type = typeSpeller.getJavaType(field.type, "frozen");
406
+ for (const variant of wrapperVariants) {
407
+ const upperUnderscoreName = convertCase(variant.name.text, "UPPER_UNDERSCORE");
408
+ const upperCamelName = convertCase(variant.name.text, "UpperCamel");
409
+ const type = typeSpeller.getJavaType(variant.type, "frozen");
355
410
  this.push(`case ${upperUnderscoreName}_WRAPPER -> visitor.on${upperCamelName}((${type}) value);\n`);
356
411
  }
357
412
  this.push("default -> visitor.onUnknown();\n", "};\n", "}\n\n");
358
413
  // equals()
359
- this.push("@java.lang.Override\n", "public boolean equals(Object other) {\n", `if (!(other instanceof ${className})) return false;\n`, `final ${className} otherEnum = (${className}) other;\n`, "if (kind == Kind.UNKNOWN) return otherEnum.kind == Kind.UNKNOWN;\n", "return kind == otherEnum.kind && java.util.Objects.equals(value, otherEnum.value);\n", "}\n\n");
414
+ this.push(`@java.lang.Override
415
+ public boolean equals(Object other) {
416
+ if (!(other instanceof ${className})) return false;
417
+ final ${className} otherEnum = (${className}) other;
418
+ if (kind == Kind.UNKNOWN) return otherEnum.kind == Kind.UNKNOWN;
419
+ return kind == otherEnum.kind && java.util.Objects.equals(value, otherEnum.value);
420
+ }\n\n`);
360
421
  // hashCode()
361
- this.push("@java.lang.Override\n", "public int hashCode() {\n", "final Object v = kind == Kind.UNKNOWN ? null : value;\n", "return 31 * java.util.Objects.hashCode(v) + kind.ordinal();\n", "}\n\n");
422
+ this.push(`@java.lang.Override
423
+ public int hashCode() {
424
+ final Object v = kind == Kind.UNKNOWN ? null : value;
425
+ return 31 * java.util.Objects.hashCode(v) + kind.ordinal();
426
+ }\n\n`);
362
427
  // toString()
363
- this.push("@java.lang.Override\n", "public java.lang.String toString() {\n", `return SERIALIZER.toJsonCode(this, build.skir.JsonFlavor.READABLE);\n`, "}\n\n");
428
+ this.push(`@java.lang.Override
429
+ public java.lang.String toString() {
430
+ return SERIALIZER.toJsonCode(this, build.skir.JsonFlavor.READABLE);
431
+ }\n\n`);
364
432
  // _serializerImpl
365
433
  {
366
434
  const serializerType = `build.skir.internal.EnumSerializer<${className}>`;
@@ -368,26 +436,35 @@ class JavaSourceFileGenerator {
368
436
  this.push(`private static final ${serializerType} _serializerImpl = (\n`, "build.skir.internal.EnumSerializer.Companion.create(\n", `"${getRecordId(recordLocation)}",\n`, `${toJavaStringLiteral(docToCommentText(record.doc))},\n`, `(${className} it) -> it.kind().ordinal(),\n`, "Kind.values().length,\n", "UNKNOWN,\n", `(${unrecognizedVariantType} it) -> new ${className}(Kind.UNKNOWN, it),\n`, `(${className} it) -> (${unrecognizedVariantType}) it.value\n`, ")\n", ");\n\n");
369
437
  }
370
438
  // SERIALIZER
371
- this.push(`public static final build.skir.Serializer<${className}> SERIALIZER = (\n`, "build.skir.internal.SerializersKt.makeSerializer(_serializerImpl)\n", ");\n\n");
439
+ this.push(`/** Serializer for {@code ${className}} instances. */
440
+ public static final build.skir.Serializer<${className}> SERIALIZER = (
441
+ build.skir.internal.SerializersKt.makeSerializer(_serializerImpl)
442
+ );\n\n`);
372
443
  // TYPE_DESCRIPTOR
373
444
  {
374
445
  const typeDescriptorType = `build.skir.reflection.EnumDescriptor.Reflective<${className}>`;
375
- this.push(`public static final ${typeDescriptorType} TYPE_DESCRIPTOR = (\n`, "_serializerImpl\n", ");\n\n");
446
+ this.push(`/**
447
+ * Describes the {@code ${className}} type.
448
+ * Provides runtime introspection capabilities.
449
+ */
450
+ public static final ${typeDescriptorType} TYPE_DESCRIPTOR = (
451
+ _serializerImpl
452
+ );\n\n`);
376
453
  }
377
454
  // Finalize serializer
378
455
  this.push("static {\n");
379
- for (const field of constantFields) {
380
- const name = field.name.text;
381
- this.push("_serializerImpl.addConstantVariant(\n", `${field.number},\n`, `"${name}",\n`, `Kind.${name}_CONST.ordinal(),\n`, `${toJavaStringLiteral(docToCommentText(field.doc))},\n`, `${toEnumConstantName(field)}\n`, ");\n");
456
+ for (const variant of constantVariants) {
457
+ const name = variant.name.text;
458
+ this.push("_serializerImpl.addConstantVariant(\n", `${variant.number},\n`, `"${name}",\n`, `Kind.${name}_CONST.ordinal(),\n`, `${toJavaStringLiteral(docToCommentText(variant.doc))},\n`, `${toEnumConstantName(variant)}\n`, ");\n");
382
459
  }
383
- for (const field of wrapperFields) {
384
- const type = field.type;
460
+ for (const variant of wrapperVariants) {
461
+ const type = variant.type;
385
462
  const javaType = typeSpeller.getJavaType(type, "frozen", "must-be-object");
386
463
  const serializerExpression = typeSpeller.getSerializerExpression(type);
387
- const skirName = field.name.text;
464
+ const skirName = variant.name.text;
388
465
  const upperCamelName = convertCase(skirName, "UpperCamel");
389
466
  const kindConstName = convertCase(skirName, "UPPER_UNDERSCORE") + "_WRAPPER";
390
- this.push("_serializerImpl.addWrapperVariant(\n", `${field.number},\n`, `"${field.name.text}",\n`, `Kind.${kindConstName}.ordinal(),\n`, `${serializerExpression},\n`, `${toJavaStringLiteral(docToCommentText(field.doc))},\n`, `(${javaType} it) -> wrap${upperCamelName}(it),\n`, `(${className} it) -> it.as${upperCamelName}()\n`, ");\n");
467
+ this.push("_serializerImpl.addWrapperVariant(\n", `${variant.number},\n`, `"${variant.name.text}",\n`, `Kind.${kindConstName}.ordinal(),\n`, `${serializerExpression},\n`, `${toJavaStringLiteral(docToCommentText(variant.doc))},\n`, `(${javaType} it) -> wrap${upperCamelName}(it),\n`, `(${className} it) -> it.as${upperCamelName}()\n`, ");\n");
391
468
  }
392
469
  for (const removedNumber of record.removedNumbers) {
393
470
  this.push(`_serializerImpl.addRemovedNumber(${removedNumber});\n`);
@@ -438,7 +515,15 @@ class JavaSourceFileGenerator {
438
515
  const skirName = method.name.text;
439
516
  const javaName = convertCase(skirName, "UPPER_UNDERSCORE");
440
517
  const methodType = `build.skir.service.Method<${requestType}, ${responseType}>`;
441
- this.push(`public static final ${methodType} ${javaName} = (\n`, "new build.skir.service.Method<>(\n", `"${skirName}",\n`, `${method.number}L,\n`, `${requestSerializer},\n`, `${responseSerializer},\n`, `${toJavaStringLiteral(docToCommentText(method.doc))}\n`, ")\n", ");\n\n");
518
+ this.push(commentify(docToCommentText(method.doc)), `public static final ${methodType} ${javaName} = (
519
+ new build.skir.service.Method<>(
520
+ "${skirName}",
521
+ ${method.number}L,
522
+ ${requestSerializer},
523
+ ${responseSerializer},
524
+ ${toJavaStringLiteral(docToCommentText(method.doc))}
525
+ )
526
+ );\n\n`);
442
527
  }
443
528
  writeClassForConstants(constants) {
444
529
  this.push("public final class Constants {\n\n", "private Constants() {}\n\n");
@@ -453,7 +538,9 @@ class JavaSourceFileGenerator {
453
538
  const name = constant.name.text;
454
539
  const serializerExpression = typeSpeller.getSerializerExpression(constant.type);
455
540
  const jsonStringLiteral = JSON.stringify(JSON.stringify(constant.valueAsDenseJson));
456
- this.push(`public static final ${javaType} ${name} = (\n`, `${serializerExpression}.fromJsonCode(${jsonStringLiteral})\n`, ");\n\n");
541
+ this.push(commentify(docToCommentText(constant.doc)), `public static final ${javaType} ${name} = (
542
+ ${serializerExpression}.fromJsonCode(${jsonStringLiteral})
543
+ );\n\n`);
457
544
  }
458
545
  getDefaultExpression(type) {
459
546
  switch (type.kind) {
@@ -619,9 +706,10 @@ class JavaSourceFileGenerator {
619
706
  break;
620
707
  }
621
708
  }
622
- const indent = indentUnit.repeat(contextStack.length);
709
+ const indent = indentUnit.repeat(contextStack.length) +
710
+ (line.startsWith("*") ? " " : "");
623
711
  result += `${indent}${line.trimEnd()}\n`;
624
- if (line.startsWith("//")) {
712
+ if (line.startsWith("/") || line.startsWith("*")) {
625
713
  continue;
626
714
  }
627
715
  const lastChar = line.slice(-1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,GAOZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC;IAC5B,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,KAAK,CAAC,2BAA2B,CAAC;SAClC,QAAQ,EAAE;CACd,CAAC,CAAC;AAIH,MAAM,iBAAiB;IAAvB;QACW,OAAE,GAAG,eAAe,CAAC;QACrB,eAAU,GAAG,MAAM,CAAC;IAqD/B,CAAC;IAnDC,YAAY,CAAC,KAAkC;QAC7C,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACpC,MAAM,eAAe,GAA8B,EAAE,CAAC;QACtD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxC,kCAAkC;oBAClC,SAAS;gBACX,CAAC;gBACD,eAAe,CAAC,IAAI,CAClB,IAAI,uBAAuB,CACzB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,IAAI,EACX,SAAS,EACT,MAAM,CACP,CACF,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,eAAe,CAAC,IAAI,CAClB,IAAI,uBAAuB,CACzB;oBACE,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,EACD,MAAM,CAAC,IAAI,EACX,SAAS,EACT,MAAM,CACP,CACF,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,eAAe,CAAC,IAAI,CAClB,IAAI,uBAAuB,CACzB;oBACE,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,EACD,MAAM,CAAC,IAAI,EACX,SAAS,EACT,MAAM,CACP,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACvD,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;SAC5B,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAChC,CAAC;CACF;AAaD,wCAAwC;AACxC,MAAM,uBAAuB;IAC3B,YACmB,MAA4B,EAC5B,UAAkB,EAClB,SAAiD,EAClE,MAAc;QAHG,WAAM,GAAN,MAAM,CAAsB;QAC5B,eAAU,GAAV,UAAU,CAAQ;QAClB,cAAS,GAAT,SAAS,CAAwC;QA6+B5D,SAAI,GAAG,EAAE,CAAC;QA1+BhB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ;QACN,6DAA6D;QAC7D,IAAI,CAAC,IAAI,CACP;;;;;;;;;;;;;;OAcC,EACD,WAAW,IAAI,CAAC,aAAa,UAAU,EACvC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EACxD,OAAO,CACR,CAAC;QAEF,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC9C,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1C,MAAM;YACR,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC9C,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,CAAC,GAAU,MAAM,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,yBAAyB,EAAE,CAAC;IAC1C,CAAC;IAEO,mBAAmB,CACzB,MAAc,EACd,MAA8B;QAE9B,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,mBAAmB,CACzB,MAAc,EACd,MAA8B;QAE9B,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC/C,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAE,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9D,IAAI,CAAC,IAAI,CACP,UAAU,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,qBAAqB,CAAC,CAAC,EACjE,SAAS,EACT,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EACpC,eAAe,SAAS,MAAM,CAC/B,CAAC;QAEF,iBAAiB;QACjB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,sBAAsB,GAAG,0CAA0C,SAAS,GAAG,CAAC;QACtF,IAAI,CAAC,IAAI,CAAC,iBAAiB,sBAAsB,UAAU,CAAC,CAAC;QAE7D,cAAc;QACd,IAAI,CAAC,IAAI,CAAC,WAAW,SAAS,KAAK,CAAC,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,sBAAsB,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,SAAS,MAAM,SAAS,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAEtC,mBAAmB;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,SAAS,QAAQ,CAAC,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,SAAS,YAAY,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC;gBAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,SAAS,MAAM,WAAW,KAAK,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CACP,mBAAmB,EACnB,OAAO,EACP,gEAAgE,EAChE,uBAAuB,SAAS,kBAAkB,SAAS,SAAS,CACrE,CAAC;QAEF,UAAU;QACV,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CACP,UAAU,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EACzC,UAAU,IAAI,IAAI,SAAS,QAAQ,CACpC,CAAC;YACF,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBACjC,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC;gBAC3D,IAAI,CAAC,IAAI,CACP,YAAY,SAAS,eAAe,EACpC,eAAe,SAAS,KAAK,EAC7B,YAAY,EACZ,UAAU,WAAW,KAAK,EAC1B,KAAK,CACN,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,eAAe,SAAS,KAAK,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAED,cAAc;QACd,IAAI,CAAC,IAAI,CAAC;;;;;;qCAMuB,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,SAAS,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAElC,WAAW;QACX,IAAI,CAAC,IAAI,CACP,uBAAuB,EACvB,yCAAyC,EACzC,mCAAmC,EACnC,0BAA0B,SAAS,oBAAoB,EACvD,oDAAoD,SAAS,6BAA6B,EAC1F,OAAO,CACR,CAAC;QAEF,aAAa;QACb,IAAI,CAAC,IAAI,CACP,uBAAuB,EACvB,2BAA2B,EAC3B,qDAAqD,EACrD,OAAO,CACR,CAAC;QAEF,aAAa;QACb,IAAI,CAAC,IAAI,CACP,uBAAuB,EACvB,wCAAwC,EACxC,uEAAuE,EACvE,OAAO,CACR,CAAC;QAEF,iBAAiB;QACjB,IAAI,CAAC,IAAI,CACP,qCAAqC,EACrC,yBAAyB,EACzB,MAAM;aACH,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;aAC5D,IAAI,CAAC,KAAK,CAAC,EACd,QAAQ,EACR,OAAO,CACR,CAAC;QAEF,YAAY;QACZ,CAAC;YACC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,UAAU;gBACxB,CAAC,CAAC,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;gBAChE,CAAC,CAAC,cAAc,CAAC;YACnB,IAAI,CAAC,IAAI,CACP;4DACoD,SAAS;;;wBAG7C,OAAO;;;;;;;;;cASjB,CACP,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvE,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,SAAS;gBACvB,CAAC,CAAC,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC/D,CAAC,CAAC,cAAc,CAAC;YACnB,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,EAAE,aAAa,CAAC,CAAC;YACtE,IAAI,CAAC,IAAI,CACP,8BAA8B,cAAc,MAAM,EAClD,UAAU,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EACzC,GAAG,OAAO,OAAO,cAAc,IAAI,SAAS,IAAI,SAAS,MAAM,EAC/D,OAAO,CACR,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CACP,mCAAmC,EACnC,GAAG,SAAS,aAAa,EACzB,OAAO,CACR,CAAC;QAEF,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,aAAa,cAAc,IAAI,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE9B,iBAAiB;QACjB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,sBAAsB,UAAU,CAAC,CAAC;QAEvD,uBAAuB;QACvB,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,sBAAsB,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,SAAS,MAAM,SAAS,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,SAAS,MAAM,WAAW,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAExC,UAAU;QACV,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAK,CAAC;YACzB,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAI,CACP,uBAAuB,EACvB,qBAAqB,cAAc,IAAI,QAAQ,IAAI,SAAS,OAAO,CACpE,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAC1C,SAAS,EACT,IAAI,EACJ,aAAa,EACb,IAAI,CACL,CAAC;YACF,IAAI,CAAC,IAAI,CACP,QAAQ,SAAS,MAAM,YAAY,KAAK,EACxC,gBAAgB,EAChB,OAAO,CACR,CAAC;YACF,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,KAAK,QAAQ;gBACtB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC;YAC1D,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,WAAW,GAAG,uCAAuC,QAAQ,eAAe,QAAQ,GAAG,CAAC;gBAC9F,IAAI,CAAC,IAAI,CACP,wBAAwB,cAAc,IAAI,WAAW,eAAe,EACpE,aAAa,cAAc,uBAAuB,SAAS,OAAO,EAClE,OAAO,CACR,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CACP,uBAAuB,EACvB,UAAU,SAAS,cAAc,EACjC,cAAc,SAAS,KAAK,CAC7B,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,SAAS,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnB,kBAAkB;QAClB,CAAC;YACC,MAAM,cAAc,GAAG,wCAAwC,SAAS,KAAK,SAAS,WAAW,CAAC;YAClG,IAAI,CAAC,IAAI,CACP,wBAAwB,cAAc,wBAAwB,EAC9D,+CAA+C,EAC/C,IAAI,WAAW,CAAC,cAAc,CAAC,MAAM,EACrC,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EACzD,YAAY,EACZ,IAAI,SAAS,2DAA2D,EACxE,IAAI,SAAS,+BAA+B,EAC5C,IAAI,SAAS,kBAAkB,EAC/B,IAAI,SAAS,qBAAqB,sBAAsB,YAAY,EACpE,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,EACL,KAAK,EACL,QAAQ,CACT,CAAC;QACJ,CAAC;QAED,aAAa;QACb,IAAI,CAAC,IAAI,CACP,6BAA6B,SAAS;kDACM,SAAS;;aAE9C,CACR,CAAC;QAEF,kBAAkB;QAClB,CAAC;YACC,MAAM,kBAAkB,GAAG,qDAAqD,SAAS,KAAK,SAAS,WAAW,CAAC;YACnH,IAAI,CAAC,IAAI,CACP;kCAC0B,SAAS;;;8BAGb,kBAAkB;;eAEjC,CACR,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CACP,6BAA6B,EAC7B,IAAI,QAAQ,MAAM,EAClB,OAAO,EACP,GAAG,KAAK,CAAC,MAAM,KAAK,EACpB,GAAG,WAAW,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAK,CAAC,KAAK,EACxD,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EACxD,cAAc,SAAS,OAAO,EAC9B,qBAAqB,EACrB,WAAW,SAAS,SAAS,EAC7B,gBAAgB,EAChB,KAAK,EACL,MAAM,CACP,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,oCAAoC,aAAa,MAAM,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC;QAE1D,iBAAiB;QACjB,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAEO,iBAAiB,CACvB,MAAc,EACd,MAA8B;QAE9B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QACxC,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAE,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QACpC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CACP,UAAU,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,qBAAqB,CAAC,CAAC,EACjE,SAAS,EACT,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EACpC,eAAe,SAAS,MAAM,CAC/B,CAAC;QACF,YAAY;QACZ,IAAI,CAAC,IAAI,CACP,4CAA4C,SAAS;;mBAExC,CACd,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CACP,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAClD,aAAa,CACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnB,YAAY;QACZ,IAAI,CAAC,IAAI,CACP;iDAC2C,SAAS;mDACP,SAAS;;4BAEhC,SAAS,kBAAkB,SAAS,yBAAyB,CACpF,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACnC,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CACP,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EACzC,uBAAuB,SAAS,IAAI,IAAI,UAAU,SAAS,SAAS,QAAQ,kBAAkB,CAC/F,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,gBAAgB;QAChB,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,MAAM,cAAc,GAAG,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC9D,MAAM,mBAAmB,GAAG,WAAW,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YACzE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAK,CAAC;YAC3B,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAC1C,OAAO,EACP,IAAI,EACJ,aAAa,EACb,IAAI,CACL,CAAC;YACF,IAAI,CAAC,IAAI,CACP,iBAAiB,WAAW;wBACZ,SAAS,QAAQ,cAAc,IAAI,eAAe;gBAC1D,UAAU,QAAQ,YAAY;uBACvB,SAAS,SAAS,mBAAmB;cAC9C,CACP,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CACP,4BAA4B,EAC5B,2CAA2C,CAC5C,CAAC;QAEF,cAAc;QACd,IAAI,CAAC,IAAI,CACP,WAAW,SAAS;;;YAGd,CACP,CAAC;QAEF,SAAS;QACT,IAAI,CAAC,IAAI,CACP;;;YAGM,CACP,CAAC;QAEF,0BAA0B;QAC1B,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAC;YAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC,MAAM,cAAc,GAAG,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC9D,MAAM,mBAAmB,GAAG,WAAW,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YACzE,IAAI,CAAC,IAAI,CACP,8CAA8C,WAAW;2BACtC,cAAc;gCACT,mBAAmB;;;;6CAIN,WAAW;6EACqB,WAAW;;iBAEvE,IAAI,MAAM,cAAc;6BACZ,mBAAmB;;;oBAG5B,IAAI;cACV,CACP,CAAC;QACJ,CAAC;QAED,UAAU;QACV,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE,kBAAkB,CAAC,CAAC;QACjE,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,OAAO,cAAc,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAI,CAAC,OAAO,cAAc,IAAI,IAAI,YAAY,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnB,WAAW;QACX,IAAI,CAAC,IAAI,CACP,6CAA6C,EAC7C,0BAA0B,CAC3B,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACpE,IAAI,CAAC,IAAI,CACP,QAAQ,mBAAmB,uBAAuB,cAAc,OAAO,CACxE,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,mBAAmB,GAAG,WAAW,CACrC,OAAO,CAAC,IAAI,CAAC,IAAI,EACjB,kBAAkB,CACnB,CAAC;YACF,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAI,CACP,QAAQ,mBAAmB,yBAAyB,cAAc,KAAK,IAAI,aAAa,CACzF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEhE,WAAW;QACX,IAAI,CAAC,IAAI,CACP;;iCAE2B,SAAS;gBAC1B,SAAS,iBAAiB,SAAS;;;YAGvC,CACP,CAAC;QAEF,aAAa;QACb,IAAI,CAAC,IAAI,CACP;;;;YAIM,CACP,CAAC;QAEF,aAAa;QACb,IAAI,CAAC,IAAI,CACP;;;YAGM,CACP,CAAC;QAEF,kBAAkB;QAClB,CAAC;YACC,MAAM,cAAc,GAAG,sCAAsC,SAAS,GAAG,CAAC;YAC1E,MAAM,uBAAuB,GAAG,2CAA2C,SAAS,GAAG,CAAC;YACxF,IAAI,CAAC,IAAI,CACP,wBAAwB,cAAc,wBAAwB,EAC9D,wDAAwD,EACxD,IAAI,WAAW,CAAC,cAAc,CAAC,MAAM,EACrC,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EACzD,IAAI,SAAS,gCAAgC,EAC7C,yBAAyB,EACzB,YAAY,EACZ,IAAI,uBAAuB,eAAe,SAAS,uBAAuB,EAC1E,IAAI,SAAS,YAAY,uBAAuB,cAAc,EAC9D,KAAK,EACL,QAAQ,CACT,CAAC;QACJ,CAAC;QAED,aAAa;QACb,IAAI,CAAC,IAAI,CACP,6BAA6B,SAAS;kDACM,SAAS;;aAE9C,CACR,CAAC;QAEF,kBAAkB;QAClB,CAAC;YACC,MAAM,kBAAkB,GAAG,mDAAmD,SAAS,GAAG,CAAC;YAC3F,IAAI,CAAC,IAAI,CACP;kCAC0B,SAAS;;;8BAGb,kBAAkB;;eAEjC,CACR,CAAC;QACJ,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,IAAI,CACP,uCAAuC,EACvC,GAAG,OAAO,CAAC,MAAM,KAAK,EACtB,IAAI,IAAI,MAAM,EACd,QAAQ,IAAI,qBAAqB,EACjC,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAC1D,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAClC,MAAM,CACP,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAK,CAAC;YAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CACtC,IAAI,EACJ,QAAQ,EACR,gBAAgB,CACjB,CAAC;YACF,MAAM,oBAAoB,GAAG,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACnC,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAC3D,MAAM,aAAa,GACjB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAAG,UAAU,CAAC;YACzD,IAAI,CAAC,IAAI,CACP,sCAAsC,EACtC,GAAG,OAAO,CAAC,MAAM,KAAK,EACtB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,EAC3B,QAAQ,aAAa,eAAe,EACpC,GAAG,oBAAoB,KAAK,EAC5B,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAC1D,IAAI,QAAQ,eAAe,cAAc,SAAS,EAClD,IAAI,SAAS,gBAAgB,cAAc,MAAM,EACjD,MAAM,CACP,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,oCAAoC,aAAa,MAAM,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;QAExD,iBAAiB;QACjB,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAEO,4BAA4B,CAAC,MAAc;QACjD,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,IAAI,IAAI;QACN,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QACpC,IAAI,SAAiB,CAAC;QACtB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAE,CAAC;gBAC/C,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;gBACjD,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,SAAS,GAAG,SAAS,CAAC;gBACtB,MAAM;YACR,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,SAAS,GAAG,WAAW,CAAC;gBACxB,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,SAAS,OAAO,CAAC;IAClE,CAAC;IAEO,oBAAoB,CAAC,OAA0B;QACrD,IAAI,CAAC,IAAI,CAAC,kCAAkC,EAAE,0BAA0B,CAAC,CAAC;QAC1E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAEO,WAAW,CAAC,MAAc;QAChC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,WAAY,EAAE,QAAQ,CAAC,CAAC;QAC3E,MAAM,iBAAiB,GAAG,WAAW,CAAC,uBAAuB,CAC3D,MAAM,CAAC,WAAY,CACpB,CAAC;QACF,MAAM,YAAY,GAAG,WAAW,CAAC,WAAW,CAC1C,MAAM,CAAC,YAAa,EACpB,QAAQ,CACT,CAAC;QACF,MAAM,kBAAkB,GAAG,WAAW,CAAC,uBAAuB,CAC5D,MAAM,CAAC,YAAa,CACrB,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAE3D,MAAM,UAAU,GAAG,6BAA6B,WAAW,KAAK,YAAY,GAAG,CAAC;QAChF,IAAI,CAAC,IAAI,CACP,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EACxC,uBAAuB,UAAU,IAAI,QAAQ;;aAEtC,QAAQ;YACT,MAAM,CAAC,MAAM;YACb,iBAAiB;YACjB,kBAAkB;YAClB,mBAAmB,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;aAEhD,CACR,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAAC,SAA8B;QAC3D,IAAI,CAAC,IAAI,CACP,oCAAoC,EACpC,4BAA4B,CAC7B,CAAC;QACF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAEO,aAAa,CAAC,QAAkB;QACtC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAEhC,MAAM,oBAAoB,GAAG,WAAW,CAAC,uBAAuB,CAC9D,QAAQ,CAAC,IAAK,CACf,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CACtC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAC1C,CAAC;QACF,IAAI,CAAC,IAAI,CACP,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC1C,uBAAuB,QAAQ,IAAI,IAAI;UACnC,oBAAoB,iBAAiB,iBAAiB;aACnD,CACR,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,IAAkB;QAC7C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;oBACvB,KAAK,MAAM;wBACT,OAAO,OAAO,CAAC;oBACjB,KAAK,OAAO,CAAC;oBACb,KAAK,OAAO,CAAC;oBACb,KAAK,QAAQ;wBACX,OAAO,GAAG,CAAC;oBACb,KAAK,SAAS;wBACZ,OAAO,MAAM,CAAC;oBAChB,KAAK,SAAS;wBACZ,OAAO,KAAK,CAAC;oBACf,KAAK,WAAW;wBACd,OAAO,yBAAyB,CAAC;oBACnC,KAAK,QAAQ;wBACX,OAAO,IAAI,CAAC;oBACd,KAAK,OAAO;wBACV,OAAO,uBAAuB,CAAC;oBACjC,OAAO,CAAC,CAAC,CAAC;wBACR,MAAM,CAAC,GAAU,IAAI,CAAC,SAAS,CAAC;wBAChC,MAAM,KAAK,EAAE,CAAC;oBAChB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;oBACb,OAAO,mDAAmD,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,OAAO,oDAAoD,CAAC;gBAC9D,CAAC;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,OAAO,4BAA4B,CAAC;YACtC,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC;gBACzD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAChE,QAAQ,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBACjC,KAAK,QAAQ,CAAC,CAAC,CAAC;wBACd,OAAO,GAAG,UAAU,UAAU,CAAC;oBACjC,CAAC;oBACD,KAAK,MAAM,CAAC,CAAC,CAAC;wBACZ,OAAO,GAAG,UAAU,UAAU,CAAC;oBACjC,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAEO,kBAAkB,CACxB,SAAiB,EACjB,IAAkB,EAClB,WAAyC,EACzC,EAAU;QAEV,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;oBACvB,KAAK,MAAM,CAAC;oBACZ,KAAK,OAAO,CAAC;oBACb,KAAK,OAAO,CAAC;oBACb,KAAK,QAAQ,CAAC;oBACd,KAAK,SAAS,CAAC;oBACf,KAAK,SAAS;wBACZ,OAAO,SAAS,CAAC;oBACnB,KAAK,WAAW,CAAC;oBACjB,KAAK,QAAQ,CAAC;oBACd,KAAK,OAAO;wBACV,OAAO,WAAW,KAAK,aAAa;4BAClC,CAAC,CAAC,oCAAoC,SAAS,GAAG;4BAClD,CAAC,CAAC,SAAS,CAAC;oBAChB,OAAO,CAAC,CAAC,CAAC;wBACR,MAAM,CAAC,GAAU,IAAI,CAAC,SAAS,CAAC;wBAChC,MAAM,KAAK,EAAE,CAAC;oBAChB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAC9C,EAAE,EACF,IAAI,CAAC,IAAI,EACT,aAAa,EACb,EAAE,GAAG,GAAG,CACT,CAAC;gBACF,MAAM,YAAY,GAAG,kCAAkC,CAAC;gBACxD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;oBACb,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;yBACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;yBAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;oBACb,IAAI,gBAAgB,KAAK,EAAE,EAAE,CAAC;wBAC5B,OAAO,GAAG,YAAY,kBAAkB,SAAS,OAAO,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC;oBAChG,CAAC;yBAAM,CAAC;wBACN,OAAO,GAAG,YAAY,kBAAkB,SAAS,OAAO,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,OAAO,EAAE,QAAQ,gBAAgB,KAAK,CAAC;oBACjI,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,gBAAgB,KAAK,EAAE,EAAE,CAAC;wBAC5B,OAAO,GAAG,YAAY,iBAAiB,SAAS,GAAG,CAAC;oBACtD,CAAC;yBAAM,CAAC;wBACN,OAAO,GAAG,YAAY,mBAAmB,SAAS,OAAO,EAAE,QAAQ,gBAAgB,KAAK,CAAC;oBAC3F,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CACvC,EAAE,EACF,IAAI,CAAC,KAAK,EACV,YAAY,EACZ,EAAE,GAAG,GAAG,CACT,CAAC;gBACF,OAAO,GAAG,SAAS,WAAW,EAAE,QAAQ,SAAS,KAAK,CAAC;YACzD,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,OAAO,WAAW,KAAK,aAAa;oBAClC,CAAC,CAAC,oCAAoC,SAAS,GAAG;oBAClD,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,GAAG,IAAc;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IACpB,CAAC;IAEO,yBAAyB;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC;QACxB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,wEAAwE;QACxE,uCAAuC;QACvC,MAAM,YAAY,GAA6C,EAAE,CAAC;QAClE,8CAA8C;QAC9C,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;QACnD,MAAM,sBAAsB,GAAG,CAAC,CAAwB,EAAU,EAAE;YAClE,QAAQ,CAAC,EAAE,CAAC;gBACV,KAAK,GAAG;oBACN,OAAO,GAAG,CAAC;gBACb,KAAK,GAAG;oBACN,OAAO,GAAG,CAAC;gBACb,KAAK,GAAG;oBACN,OAAO,GAAG,CAAC;gBACb,KAAK,GAAG;oBACN,OAAO,GAAG,CAAC;YACf,CAAC;QACH,CAAC,CAAC;QACF,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACrB,4BAA4B;gBAC5B,MAAM,IAAI,IAAI,CAAC;gBACf,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,MAAM,IAAI,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;oBAC/C,OAAO,YAAY,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;wBACnC,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;4BAC7B,MAAM,KAAK,EAAE,CAAC;wBAChB,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,IAAI,OAAO,EAAE,KAAK,GAAG,EAAE,CAAC;wBACtB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GACV,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;gBACtC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YACzC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,iCAAiC;oBACjC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC5B,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,IAAI,OAAO,EAAE,KAAK,GAAG,EAAE,CAAC;wBACtB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,IAAI,OAAO,EAAE,KAAK,GAAG,IAAI,OAAO,EAAE,KAAK,GAAG,EAAE,CAAC;wBAC3C,YAAY,CAAC,GAAG,EAAE,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CACL,MAAM;YACJ,uEAAuE;aACtE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;YAC1B,uEAAuE;aACtE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;YAC1B,wEAAwE;aACvE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;YAC1B,qDAAqD;aACpD,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YAC7B,sDAAsD;aACrD,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YAC7B,oCAAoC;aACnC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;aAC3B,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAC3B,CAAC;IACJ,CAAC;CAMF;AAED,SAAS,WAAW,CAAC,MAAsB;IACzC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACrC,MAAM,mBAAmB,GAAG,MAAM,CAAC,eAAe;SAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,GAAG,UAAU,IAAI,mBAAmB,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;QACjE,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,GAAG;gBACN,OAAO,KAAK,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,MAAM,CAAC;YAChB,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf,KAAK,IAAI;gBACP,OAAO,KAAK,CAAC;YACf,OAAO,CAAC,CAAC,CAAC;gBACR,kEAAkE;gBAClE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC9D,OAAO,MAAM,IAAI,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,GAAG,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,WAAuC;IACzD,MAAM,IAAI,GAAG,CACX,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CACvE;SACE,IAAI,EAAE;SACN,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,IAAI,OAAO,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAQ;IAChC,OAAO,GAAG,CAAC,MAAM;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,CAAC,CAAC,IAAI,CAAC;YAChB,KAAK,WAAW;gBACd,OAAO,GAAG,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,iBAAiB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skir-java-gen",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -23,7 +23,7 @@
23
23
  "scripts": {
24
24
  "build": "tsc",
25
25
  "format-skir": "cd e2e-test && skir format && cd ..",
26
- "format-skir:check": "cd e2e-test && skir format check && cd ..",
26
+ "format-skir:check": "cd e2e-test && skir format --ci && cd ..",
27
27
  "format-java": "cd e2e-test && ./gradlew spotlessApply && cd ..",
28
28
  "format-java:check": "cd e2e-test && ./gradlew spotlessCheck && cd ..",
29
29
  "format": "prettier --write \"**/*.ts\" && npm run format-skir && npm run format-java",
@@ -33,18 +33,24 @@
33
33
  "lint:fix": "eslint src/**/*.ts --fix"
34
34
  },
35
35
  "dependencies": {
36
- "skir-internal": "^0.0.6",
37
- "zod": "^4.0.2"
36
+ "skir-internal": "^0.0.8",
37
+ "zod": "^4.2.1"
38
38
  },
39
39
  "devDependencies": {
40
- "@types/node": "^20.11.5",
41
- "@typescript-eslint/eslint-plugin": "^6.13.0",
42
- "@typescript-eslint/parser": "^6.13.0",
43
- "eslint": "^8.54.0",
40
+ "@eslint/js": "^9.39.2",
41
+ "@types/mocha": "^10.0.1",
42
+ "@types/node": "^20.6.0",
43
+ "@typescript-eslint/eslint-plugin": "^8.50.1",
44
+ "@typescript-eslint/parser": "^8.50.1",
45
+ "buckwheat": "^1.1.2",
46
+ "eslint": "^9.39.2",
47
+ "mocha": "^11.7.5",
44
48
  "prettier": "^3.2.4",
45
49
  "prettier-plugin-organize-imports": "^4.2.0",
46
- "skir": "^0.0.5",
50
+ "skir": "^0.0.7",
47
51
  "ts-node": "^10.9.2",
48
- "typescript": "^5.3.3"
52
+ "tsx": "^4.21.0",
53
+ "typescript": "^5.2.2",
54
+ "typescript-eslint": "^8.50.1"
49
55
  }
50
56
  }
package/src/index.ts CHANGED
@@ -1,7 +1,3 @@
1
- // TODO: add comments to generated code
2
- // TODO: add comments to records/fields/methods
3
- // TODO: s/field/variant for enums
4
-
5
1
  import {
6
2
  type CodeGenerator,
7
3
  type Constant,
@@ -17,7 +13,7 @@ import { z } from "zod";
17
13
  import { Namer, toEnumConstantName } from "./naming.js";
18
14
  import { TypeSpeller } from "./type_speller.js";
19
15
 
20
- const Config = z.object({
16
+ const Config = z.strictObject({
21
17
  packagePrefix: z
22
18
  .string()
23
19
  .regex(/^([a-z_$][a-z0-9_$]*\.)*$/)
@@ -27,9 +23,8 @@ const Config = z.object({
27
23
  type Config = z.infer<typeof Config>;
28
24
 
29
25
  class JavaCodeGenerator implements CodeGenerator<Config> {
30
- readonly id = "java";
26
+ readonly id = "skir-java-gen";
31
27
  readonly configType = Config;
32
- readonly version = "1.0.0";
33
28
 
34
29
  generateCode(input: CodeGenerator.Input<Config>): CodeGenerator.Output {
35
30
  const { recordMap, config } = input;
@@ -118,9 +113,11 @@ class JavaSourceFileGenerator {
118
113
  // | |/ / | (_) | | | | || (_) || |_ | __/| (_| || || |_
119
114
  // |___/ \\___/ |_| |_| \\___/ \\__| \\___| \\__,_||_| \\__|
120
115
  //
121
-
116
+ // Generated by skir-java-gen
117
+ // Home: https://github.com/gepheum/skir-java-gen
118
+ //
122
119
  // To install the skir client library, add:
123
- // implementation("build.skir:skir-kotlin-client:latest.release")
120
+ // implementation("build.skir:skir-client:latest.release")
124
121
  // to your build.gradle file
125
122
 
126
123
  `,
@@ -171,7 +168,9 @@ class JavaSourceFileGenerator {
171
168
  const className = this.namer.getClassName(recordLocation).name;
172
169
  const fields = [...record.fields];
173
170
  fields.sort((a, b) => a.name.text.localeCompare(b.name.text));
171
+
174
172
  this.push(
173
+ commentify([docToCommentText(record.doc), "\nDeeply immutable."]),
175
174
  "public ",
176
175
  nested === "nested" ? "static " : "",
177
176
  `final class ${className} {\n`,
@@ -214,6 +213,7 @@ class JavaSourceFileGenerator {
214
213
  this.push(
215
214
  "this._u = null;\n",
216
215
  "}\n\n",
216
+ `/** Instance with all fields set to their default values. */\n`,
217
217
  `public static final ${className} DEFAULT = new ${className}();\n\n`,
218
218
  );
219
219
 
@@ -221,7 +221,10 @@ class JavaSourceFileGenerator {
221
221
  for (const field of fields) {
222
222
  const fieldName = namer.structFieldToJavaName(field);
223
223
  const type = typeSpeller.getJavaType(field.type!, "frozen");
224
- this.push(`public ${type} ${fieldName}() {\n`);
224
+ this.push(
225
+ commentify([docToCommentText(field.doc)]),
226
+ `public ${type} ${fieldName}() {\n`,
227
+ );
225
228
  if (field.isRecursive === "hard") {
226
229
  const defaultExpr = this.getDefaultExpression(field.type!);
227
230
  this.push(
@@ -238,7 +241,13 @@ class JavaSourceFileGenerator {
238
241
  }
239
242
 
240
243
  // toBuilder()
241
- this.push(`public Builder toBuilder() {\n`);
244
+ this.push(`
245
+ /**
246
+ * Returns a new builder with all fields copied from this instance.
247
+ * Usage: set the fields you want to modify and call \`build()\` to obtain a
248
+ * modified copy.
249
+ */
250
+ public Builder toBuilder() {\n`);
242
251
  this.push(`return new Builder(\n`);
243
252
  for (const field of fields) {
244
253
  const fieldName = namer.structFieldToJavaName(field);
@@ -290,19 +299,23 @@ class JavaSourceFileGenerator {
290
299
  ? "Builder_At" + convertCase(firstField.name.text, "UpperCamel")
291
300
  : "Builder_Done";
292
301
  this.push(
293
- `public static ${retType} builder() {\n`,
294
- "return new Builder();\n",
295
- "}\n\n",
302
+ `/**
303
+ * Returns a new builder for constructing {@code ${className}} instances.
304
+ * All fields must be specified in alphabetical order before you can call \`build()\`.
305
+ */
306
+ public static ${retType} builder() {
307
+ return new Builder();
308
+ }
309
+
310
+ /**
311
+ * Returns a new builder with all fields initialized to their default values.
312
+ */
313
+ public static Builder partialBuilder() {
314
+ return new Builder();
315
+ }\n\n`,
296
316
  );
297
317
  }
298
318
 
299
- // partialBuilder()
300
- this.push(
301
- "public static Builder partialBuilder() {\n",
302
- "return new Builder();\n",
303
- "}\n\n",
304
- );
305
-
306
319
  // Builder_At? interfaces
307
320
  for (const [index, field] of fields.entries()) {
308
321
  const fieldName = namer.structFieldToJavaName(field);
@@ -314,6 +327,7 @@ class JavaSourceFileGenerator {
314
327
  const paramType = typeSpeller.getJavaType(field.type!, "initializer");
315
328
  this.push(
316
329
  `public interface Builder_At${upperCamelName} {\n`,
330
+ commentify([docToCommentText(field.doc)]),
317
331
  `${retType} set${upperCamelName}(${paramType} ${fieldName});\n`,
318
332
  "}\n\n",
319
333
  );
@@ -430,18 +444,23 @@ class JavaSourceFileGenerator {
430
444
 
431
445
  // SERIALIZER
432
446
  this.push(
433
- `public static final build.skir.Serializer<${className}> SERIALIZER = (\n`,
434
- "build.skir.internal.SerializersKt.makeSerializer(_serializerImpl)\n",
435
- ");\n\n",
447
+ `/** Serializer for {@code ${className}} instances. */
448
+ public static final build.skir.Serializer<${className}> SERIALIZER = (
449
+ build.skir.internal.SerializersKt.makeSerializer(_serializerImpl)
450
+ );\n\n`,
436
451
  );
437
452
 
438
453
  // TYPE_DESCRIPTOR
439
454
  {
440
455
  const typeDescriptorType = `build.skir.reflection.StructDescriptor.Reflective<${className}, ${className}.Builder>`;
441
456
  this.push(
442
- `public static final ${typeDescriptorType} TYPE_DESCRIPTOR = (\n`,
443
- "_serializerImpl\n",
444
- ");\n\n",
457
+ `/**
458
+ * Describes the {@code ${className}} type.
459
+ * Provides runtime introspection capabilities.
460
+ */
461
+ public static final ${typeDescriptorType} TYPE_DESCRIPTOR = (
462
+ _serializerImpl
463
+ );\n\n`,
445
464
  );
446
465
  }
447
466
 
@@ -482,22 +501,27 @@ class JavaSourceFileGenerator {
482
501
  const { recordMap, typeSpeller } = this;
483
502
  const recordLocation = recordMap.get(record.key)!;
484
503
  const className = this.namer.getClassName(recordLocation).name;
485
- const { fields } = record;
486
- const constantFields = fields.filter((f) => !f.type);
487
- const wrapperFields = fields.filter((f) => f.type);
504
+ const { fields: variants } = record;
505
+ const constantVariants = variants.filter((v) => !v.type);
506
+ const wrapperVariants = variants.filter((v) => v.type);
488
507
  this.push(
508
+ commentify([docToCommentText(record.doc), "\nDeeply immutable."]),
489
509
  "public ",
490
510
  nested === "nested" ? "static " : "",
491
511
  `final class ${className} {\n`,
492
512
  );
493
513
  // Kind enum
494
- this.push("public enum Kind {\n", "UNKNOWN,\n");
495
- for (const field of constantFields) {
496
- this.push(field.name.text, "_CONST,\n");
514
+ this.push(
515
+ `/** The kind of variant held by a {@code ${className}}. */
516
+ public enum Kind {
517
+ UNKNOWN,\n`,
518
+ );
519
+ for (const variant of constantVariants) {
520
+ this.push(variant.name.text, "_CONST,\n");
497
521
  }
498
- for (const field of wrapperFields) {
522
+ for (const variant of wrapperVariants) {
499
523
  this.push(
500
- convertCase(field.name.text, "UPPER_UNDERSCORE"),
524
+ convertCase(variant.name.text, "UPPER_UNDERSCORE"),
501
525
  "_WRAPPER,\n",
502
526
  );
503
527
  }
@@ -505,25 +529,28 @@ class JavaSourceFileGenerator {
505
529
 
506
530
  // Constants
507
531
  this.push(
508
- `public static final ${className} UNKNOWN = new ${className}(Kind.UNKNOWN, null);\n`,
532
+ `/**
533
+ * Constant indicating an unknown {@code ${className}}.
534
+ * Default value for fields of type {@code ${className}}.
535
+ */
536
+ public static final ${className} UNKNOWN = new ${className}(Kind.UNKNOWN, null);\n`,
509
537
  );
510
- for (const field of constantFields) {
511
- const skirName = field.name.text;
512
- const name = toEnumConstantName(field);
538
+ for (const variant of constantVariants) {
539
+ const skirName = variant.name.text;
540
+ const name = toEnumConstantName(variant);
513
541
  this.push(
542
+ commentify(docToCommentText(variant.doc)),
514
543
  `public static final ${className} ${name} = new ${className}(Kind.${skirName}_CONST, null);\n`,
515
544
  );
516
545
  }
517
546
  this.pushEol();
518
547
 
519
548
  // WrapX methods
520
- for (const field of wrapperFields) {
521
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
522
- const upperUnderscoreName = convertCase(
523
- field.name.text,
524
- "UPPER_UNDERSCORE",
525
- );
526
- const type = field.type!;
549
+ for (const variant of wrapperVariants) {
550
+ const variantName = variant.name.text;
551
+ const upperCamelName = convertCase(variantName, "UpperCamel");
552
+ const upperUnderscoreName = convertCase(variantName, "UPPER_UNDERSCORE");
553
+ const type = variant.type!;
527
554
  const initializerType = typeSpeller.getJavaType(type, "initializer");
528
555
  const frozenType = typeSpeller.getJavaType(type, "frozen");
529
556
  const toFrozenExpr = this.toFrozenExpression(
@@ -533,14 +560,14 @@ class JavaSourceFileGenerator {
533
560
  "_e",
534
561
  );
535
562
  this.push(
536
- `public static ${className} wrap${upperCamelName}(${initializerType} value) {\n`,
537
- `final ${frozenType} v = ${toFrozenExpr};\n`,
538
- `return new ${className}(Kind.${upperUnderscoreName}_WRAPPER, v);\n`,
539
- "}\n\n",
563
+ `/** Create a '${variantName}' variant wrapping around the given value. */
564
+ public static ${className} wrap${upperCamelName}(${initializerType} value) {
565
+ final ${frozenType} v = ${toFrozenExpr};
566
+ return new ${className}(Kind.${upperUnderscoreName}_WRAPPER, v);
567
+ }\n\n`,
540
568
  );
541
569
  }
542
570
 
543
- // Declare fields
544
571
  this.push(
545
572
  "private final Kind kind;\n",
546
573
  "private final java.lang.Object value;\n\n",
@@ -548,42 +575,54 @@ class JavaSourceFileGenerator {
548
575
 
549
576
  // Constructor
550
577
  this.push(
551
- `private ${className}(Kind kind, java.lang.Object value) {\n`,
552
- "this.kind = kind;\n",
553
- "this.value = value;\n",
554
- "}\n\n",
578
+ `private ${className}(Kind kind, java.lang.Object value) {
579
+ this.kind = kind;
580
+ this.value = value;
581
+ }\n\n`,
555
582
  );
556
583
 
557
584
  // kind()
558
- this.push("public Kind kind() {\n", "return kind;\n", "}\n\n");
585
+ this.push(
586
+ `/** Returns the kind of variant held by this instance. */
587
+ public Kind kind() {
588
+ return kind;
589
+ }\n\n`,
590
+ );
559
591
 
560
- // asX() methods
561
- for (const field of wrapperFields) {
562
- const type = typeSpeller.getJavaType(field.type!, "frozen");
563
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
564
- const upperUnderscoreName = convertCase(
565
- field.name.text,
566
- "UPPER_UNDERSCORE",
567
- );
592
+ // isX() and asX() methods
593
+ for (const variant of wrapperVariants) {
594
+ const type = typeSpeller.getJavaType(variant.type!, "frozen");
595
+ const variantName = variant.name.text;
596
+ const upperCamelName = convertCase(variantName, "UpperCamel");
597
+ const upperUnderscoreName = convertCase(variantName, "UPPER_UNDERSCORE");
568
598
  this.push(
569
- `public ${type} as${upperCamelName}() {\n`,
570
- `if (kind != Kind.${upperUnderscoreName}_WRAPPER) {\n`,
571
- `throw new java.lang.IllegalStateException("kind=" + kind.name());\n`,
572
- "}\n",
573
- `return (${type}) value;\n`,
574
- "}\n\n",
599
+ `/** Returns true if this instance holds a '${variantName}' variant. */
600
+ public boolean is${upperCamelName}() {
601
+ return kind == Kind.${upperUnderscoreName}_WRAPPER;
602
+ }
603
+
604
+ /**
605
+ * Assuming this instance holds a '${variantName}' variant, returns its value.
606
+ * @throws IllegalStateException if this instance does not hold a '${variantName}' variant.
607
+ */
608
+ public ${type} as${upperCamelName}() {
609
+ if (kind != Kind.${upperUnderscoreName}_WRAPPER) {
610
+ throw new java.lang.IllegalStateException("kind=" + kind.name());
611
+ }
612
+ return (${type}) value;
613
+ }\n\n`,
575
614
  );
576
615
  }
577
616
 
578
617
  // Visitor
579
618
  this.push("public interface Visitor<R> {\n", "R onUnknown();\n");
580
- for (const field of constantFields) {
581
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
619
+ for (const variant of constantVariants) {
620
+ const upperCamelName = convertCase(variant.name.text, "UpperCamel");
582
621
  this.push(`R on${upperCamelName}();\n`);
583
622
  }
584
- for (const field of wrapperFields) {
585
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
586
- const type = typeSpeller.getJavaType(field.type!, "frozen");
623
+ for (const variant of wrapperVariants) {
624
+ const upperCamelName = convertCase(variant.name.text, "UpperCamel");
625
+ const type = typeSpeller.getJavaType(variant.type!, "frozen");
587
626
  this.push(`R on${upperCamelName}(${type} value);\n`);
588
627
  }
589
628
  this.push("}\n\n");
@@ -593,20 +632,20 @@ class JavaSourceFileGenerator {
593
632
  "public <R> R accept(Visitor<R> visitor) {\n",
594
633
  "return switch (kind) {\n",
595
634
  );
596
- for (const field of constantFields) {
597
- const upperUnderscoreName = field.name.text;
598
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
635
+ for (const variant of constantVariants) {
636
+ const upperUnderscoreName = variant.name.text;
637
+ const upperCamelName = convertCase(variant.name.text, "UpperCamel");
599
638
  this.push(
600
639
  `case ${upperUnderscoreName}_CONST -> visitor.on${upperCamelName}();\n`,
601
640
  );
602
641
  }
603
- for (const field of wrapperFields) {
642
+ for (const variant of wrapperVariants) {
604
643
  const upperUnderscoreName = convertCase(
605
- field.name.text,
644
+ variant.name.text,
606
645
  "UPPER_UNDERSCORE",
607
646
  );
608
- const upperCamelName = convertCase(field.name.text, "UpperCamel");
609
- const type = typeSpeller.getJavaType(field.type!, "frozen");
647
+ const upperCamelName = convertCase(variant.name.text, "UpperCamel");
648
+ const type = typeSpeller.getJavaType(variant.type!, "frozen");
610
649
  this.push(
611
650
  `case ${upperUnderscoreName}_WRAPPER -> visitor.on${upperCamelName}((${type}) value);\n`,
612
651
  );
@@ -615,30 +654,30 @@ class JavaSourceFileGenerator {
615
654
 
616
655
  // equals()
617
656
  this.push(
618
- "@java.lang.Override\n",
619
- "public boolean equals(Object other) {\n",
620
- `if (!(other instanceof ${className})) return false;\n`,
621
- `final ${className} otherEnum = (${className}) other;\n`,
622
- "if (kind == Kind.UNKNOWN) return otherEnum.kind == Kind.UNKNOWN;\n",
623
- "return kind == otherEnum.kind && java.util.Objects.equals(value, otherEnum.value);\n",
624
- "}\n\n",
657
+ `@java.lang.Override
658
+ public boolean equals(Object other) {
659
+ if (!(other instanceof ${className})) return false;
660
+ final ${className} otherEnum = (${className}) other;
661
+ if (kind == Kind.UNKNOWN) return otherEnum.kind == Kind.UNKNOWN;
662
+ return kind == otherEnum.kind && java.util.Objects.equals(value, otherEnum.value);
663
+ }\n\n`,
625
664
  );
626
665
 
627
666
  // hashCode()
628
667
  this.push(
629
- "@java.lang.Override\n",
630
- "public int hashCode() {\n",
631
- "final Object v = kind == Kind.UNKNOWN ? null : value;\n",
632
- "return 31 * java.util.Objects.hashCode(v) + kind.ordinal();\n",
633
- "}\n\n",
668
+ `@java.lang.Override
669
+ public int hashCode() {
670
+ final Object v = kind == Kind.UNKNOWN ? null : value;
671
+ return 31 * java.util.Objects.hashCode(v) + kind.ordinal();
672
+ }\n\n`,
634
673
  );
635
674
 
636
675
  // toString()
637
676
  this.push(
638
- "@java.lang.Override\n",
639
- "public java.lang.String toString() {\n",
640
- `return SERIALIZER.toJsonCode(this, build.skir.JsonFlavor.READABLE);\n`,
641
- "}\n\n",
677
+ `@java.lang.Override
678
+ public java.lang.String toString() {
679
+ return SERIALIZER.toJsonCode(this, build.skir.JsonFlavor.READABLE);
680
+ }\n\n`,
642
681
  );
643
682
 
644
683
  // _serializerImpl
@@ -662,54 +701,59 @@ class JavaSourceFileGenerator {
662
701
 
663
702
  // SERIALIZER
664
703
  this.push(
665
- `public static final build.skir.Serializer<${className}> SERIALIZER = (\n`,
666
- "build.skir.internal.SerializersKt.makeSerializer(_serializerImpl)\n",
667
- ");\n\n",
704
+ `/** Serializer for {@code ${className}} instances. */
705
+ public static final build.skir.Serializer<${className}> SERIALIZER = (
706
+ build.skir.internal.SerializersKt.makeSerializer(_serializerImpl)
707
+ );\n\n`,
668
708
  );
669
709
 
670
710
  // TYPE_DESCRIPTOR
671
711
  {
672
712
  const typeDescriptorType = `build.skir.reflection.EnumDescriptor.Reflective<${className}>`;
673
713
  this.push(
674
- `public static final ${typeDescriptorType} TYPE_DESCRIPTOR = (\n`,
675
- "_serializerImpl\n",
676
- ");\n\n",
714
+ `/**
715
+ * Describes the {@code ${className}} type.
716
+ * Provides runtime introspection capabilities.
717
+ */
718
+ public static final ${typeDescriptorType} TYPE_DESCRIPTOR = (
719
+ _serializerImpl
720
+ );\n\n`,
677
721
  );
678
722
  }
679
723
 
680
724
  // Finalize serializer
681
725
  this.push("static {\n");
682
- for (const field of constantFields) {
683
- const name = field.name.text;
726
+ for (const variant of constantVariants) {
727
+ const name = variant.name.text;
684
728
  this.push(
685
729
  "_serializerImpl.addConstantVariant(\n",
686
- `${field.number},\n`,
730
+ `${variant.number},\n`,
687
731
  `"${name}",\n`,
688
732
  `Kind.${name}_CONST.ordinal(),\n`,
689
- `${toJavaStringLiteral(docToCommentText(field.doc))},\n`,
690
- `${toEnumConstantName(field)}\n`,
733
+ `${toJavaStringLiteral(docToCommentText(variant.doc))},\n`,
734
+ `${toEnumConstantName(variant)}\n`,
691
735
  ");\n",
692
736
  );
693
737
  }
694
- for (const field of wrapperFields) {
695
- const type = field.type!;
738
+ for (const variant of wrapperVariants) {
739
+ const type = variant.type!;
696
740
  const javaType = typeSpeller.getJavaType(
697
741
  type,
698
742
  "frozen",
699
743
  "must-be-object",
700
744
  );
701
745
  const serializerExpression = typeSpeller.getSerializerExpression(type);
702
- const skirName = field.name.text;
746
+ const skirName = variant.name.text;
703
747
  const upperCamelName = convertCase(skirName, "UpperCamel");
704
748
  const kindConstName =
705
749
  convertCase(skirName, "UPPER_UNDERSCORE") + "_WRAPPER";
706
750
  this.push(
707
751
  "_serializerImpl.addWrapperVariant(\n",
708
- `${field.number},\n`,
709
- `"${field.name.text}",\n`,
752
+ `${variant.number},\n`,
753
+ `"${variant.name.text}",\n`,
710
754
  `Kind.${kindConstName}.ordinal(),\n`,
711
755
  `${serializerExpression},\n`,
712
- `${toJavaStringLiteral(docToCommentText(field.doc))},\n`,
756
+ `${toJavaStringLiteral(docToCommentText(variant.doc))},\n`,
713
757
  `(${javaType} it) -> wrap${upperCamelName}(it),\n`,
714
758
  `(${className} it) -> it.as${upperCamelName}()\n`,
715
759
  ");\n",
@@ -779,15 +823,16 @@ class JavaSourceFileGenerator {
779
823
 
780
824
  const methodType = `build.skir.service.Method<${requestType}, ${responseType}>`;
781
825
  this.push(
782
- `public static final ${methodType} ${javaName} = (\n`,
783
- "new build.skir.service.Method<>(\n",
784
- `"${skirName}",\n`,
785
- `${method.number}L,\n`,
786
- `${requestSerializer},\n`,
787
- `${responseSerializer},\n`,
788
- `${toJavaStringLiteral(docToCommentText(method.doc))}\n`,
789
- ")\n",
790
- ");\n\n",
826
+ commentify(docToCommentText(method.doc)),
827
+ `public static final ${methodType} ${javaName} = (
828
+ new build.skir.service.Method<>(
829
+ "${skirName}",
830
+ ${method.number}L,
831
+ ${requestSerializer},
832
+ ${responseSerializer},
833
+ ${toJavaStringLiteral(docToCommentText(method.doc))}
834
+ )
835
+ );\n\n`,
791
836
  );
792
837
  }
793
838
 
@@ -814,9 +859,10 @@ class JavaSourceFileGenerator {
814
859
  JSON.stringify(constant.valueAsDenseJson),
815
860
  );
816
861
  this.push(
817
- `public static final ${javaType} ${name} = (\n`,
818
- `${serializerExpression}.fromJsonCode(${jsonStringLiteral})\n`,
819
- ");\n\n",
862
+ commentify(docToCommentText(constant.doc)),
863
+ `public static final ${javaType} ${name} = (
864
+ ${serializerExpression}.fromJsonCode(${jsonStringLiteral})
865
+ );\n\n`,
820
866
  );
821
867
  }
822
868
 
@@ -1000,9 +1046,11 @@ class JavaSourceFileGenerator {
1000
1046
  break;
1001
1047
  }
1002
1048
  }
1003
- const indent = indentUnit.repeat(contextStack.length);
1049
+ const indent =
1050
+ indentUnit.repeat(contextStack.length) +
1051
+ (line.startsWith("*") ? " " : "");
1004
1052
  result += `${indent}${line.trimEnd()}\n`;
1005
- if (line.startsWith("//")) {
1053
+ if (line.startsWith("/") || line.startsWith("*")) {
1006
1054
  continue;
1007
1055
  }
1008
1056
  const lastChar = line.slice(-1);