@arrirpc/codegen-kotlin 0.58.0 → 0.59.0

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.cjs CHANGED
@@ -102,6 +102,29 @@ function instanceDepth(context) {
102
102
  function isNullable(schema, context) {
103
103
  return schema.nullable === true || context.isOptional === true;
104
104
  }
105
+ function getCodeComment(metadata, prefix, valueField) {
106
+ if (!metadata?.description && !metadata?.isDeprecated)
107
+ return "";
108
+ const descriptionPart = metadata.description?.split("\n").map((line) => `${prefix ?? ""}* ${line}`).join("\n");
109
+ const finalDescription = metadata.description ? `${prefix ?? ""}/**
110
+ ${descriptionPart}${prefix ?? ""}
111
+ */` : "";
112
+ const deprecationMessage = `@Deprecated(message = "This ${valueField ?? "item"} was marked as deprecated by the server")`;
113
+ if (metadata.description && metadata.isDeprecated) {
114
+ return `${finalDescription}
115
+ ${deprecationMessage}
116
+ `;
117
+ }
118
+ if (metadata.isDeprecated) {
119
+ return `${deprecationMessage}
120
+ `;
121
+ }
122
+ if (metadata.description) {
123
+ return `${finalDescription}
124
+ `;
125
+ }
126
+ return "";
127
+ }
105
128
 
106
129
  function kotlinAnyFromSchema(schema, context) {
107
130
  const nullable = isNullable(schema, context);
@@ -237,7 +260,6 @@ function kotlinObjectFromSchema(schema, context) {
237
260
  ${input}!!,
238
261
  "$instancePath/${key}",
239
262
  )
240
-
241
263
  else -> null
242
264
  }`;
243
265
  }
@@ -302,7 +324,7 @@ function kotlinObjectFromSchema(schema, context) {
302
324
  subContent.push(type.content);
303
325
  }
304
326
  fieldParts.push(
305
- ` val ${kotlinKey}: ${type.typeName}${type.isNullable ? "?" : ""},`
327
+ `${getCodeComment(prop.metadata, " ", "field")} val ${kotlinKey}: ${type.typeName}${type.isNullable ? "?" : ""},`
306
328
  );
307
329
  if (i === 0 && !context.discriminatorKey) {
308
330
  toJsonParts.push(`output += "\\"${key}\\":"`);
@@ -339,7 +361,9 @@ function kotlinObjectFromSchema(schema, context) {
339
361
  const addCommaPart = isFirst ? "" : `
340
362
  if (hasProperties) output += ","
341
363
  `;
342
- fieldParts.push(` val ${kotlinKey}: ${type.typeName}? = null,`);
364
+ fieldParts.push(
365
+ `${getCodeComment(schema.optionalProperties[key].metadata, " ", "field")} val ${kotlinKey}: ${type.typeName}? = null,`
366
+ );
343
367
  if (hasKnownKeys) {
344
368
  toJsonParts.push(`if (${kotlinKey} != null) {
345
369
  output += ",\\"${key}\\":"
@@ -367,7 +391,7 @@ ${isLast ? "" : " hasProperties = true"}
367
391
  override val ${kotlinIdentifier(context.discriminatorKey)} get() = "${context.discriminatorValue}"
368
392
  `;
369
393
  }
370
- const content = `data class ${className}(
394
+ const content = `${getCodeComment(schema.metadata, "", "class")}data class ${className}(
371
395
  ${fieldParts.join("\n")}
372
396
  ) : ${implementedClass} {${discriminatorField}
373
397
  override fun toJson(): String {
@@ -471,7 +495,8 @@ function kotlinDiscriminatorFromSchema(schema, context) {
471
495
  if (context.existingTypeIds.includes(className)) {
472
496
  return result;
473
497
  }
474
- const content = `sealed interface ${className} : ${context.clientName}Model {
498
+ const codeComment = getCodeComment(schema.metadata, "", "class");
499
+ const content = `${codeComment}sealed interface ${className} : ${context.clientName}Model {
475
500
  val ${kotlinDiscriminatorKey}: String
476
501
 
477
502
  companion object Factory : ${context.clientName}ModelFactory<${className}> {
@@ -1106,8 +1131,16 @@ function kotlinHttpRpcFromSchema(schema, context) {
1106
1131
  const name = getProcedureName(context);
1107
1132
  const params = schema.params ? kotlinClassName(`${context.modelPrefix}_${schema.params}`) : void 0;
1108
1133
  const response = schema.response ? kotlinClassName(`${context.modelPrefix}_${schema.response}`) : void 0;
1134
+ const codeComment = getCodeComment(
1135
+ {
1136
+ description: schema.description,
1137
+ isDeprecated: schema.isDeprecated
1138
+ },
1139
+ "",
1140
+ "method"
1141
+ );
1109
1142
  if (schema.isEventStream) {
1110
- return `fun ${name}(
1143
+ return `${codeComment}fun ${name}(
1111
1144
  scope: CoroutineScope,
1112
1145
  ${params ? `params: ${params},` : ""}
1113
1146
  lastEventId: String? = null,
@@ -1151,7 +1184,7 @@ function kotlinHttpRpcFromSchema(schema, context) {
1151
1184
  stack = null,
1152
1185
  )
1153
1186
  }`;
1154
- return `suspend fun ${name}(${params ? `params: ${params}` : ""}): ${response ?? "Unit"} {
1187
+ return `${codeComment}suspend fun ${name}(${params ? `params: ${params}` : ""}): ${response ?? "Unit"} {
1155
1188
  val response = __prepareRequest(
1156
1189
  client = httpClient,
1157
1190
  url = "$baseUrl${schema.path}",
package/dist/index.mjs CHANGED
@@ -96,6 +96,29 @@ function instanceDepth(context) {
96
96
  function isNullable(schema, context) {
97
97
  return schema.nullable === true || context.isOptional === true;
98
98
  }
99
+ function getCodeComment(metadata, prefix, valueField) {
100
+ if (!metadata?.description && !metadata?.isDeprecated)
101
+ return "";
102
+ const descriptionPart = metadata.description?.split("\n").map((line) => `${prefix ?? ""}* ${line}`).join("\n");
103
+ const finalDescription = metadata.description ? `${prefix ?? ""}/**
104
+ ${descriptionPart}${prefix ?? ""}
105
+ */` : "";
106
+ const deprecationMessage = `@Deprecated(message = "This ${valueField ?? "item"} was marked as deprecated by the server")`;
107
+ if (metadata.description && metadata.isDeprecated) {
108
+ return `${finalDescription}
109
+ ${deprecationMessage}
110
+ `;
111
+ }
112
+ if (metadata.isDeprecated) {
113
+ return `${deprecationMessage}
114
+ `;
115
+ }
116
+ if (metadata.description) {
117
+ return `${finalDescription}
118
+ `;
119
+ }
120
+ return "";
121
+ }
99
122
 
100
123
  function kotlinAnyFromSchema(schema, context) {
101
124
  const nullable = isNullable(schema, context);
@@ -231,7 +254,6 @@ function kotlinObjectFromSchema(schema, context) {
231
254
  ${input}!!,
232
255
  "$instancePath/${key}",
233
256
  )
234
-
235
257
  else -> null
236
258
  }`;
237
259
  }
@@ -296,7 +318,7 @@ function kotlinObjectFromSchema(schema, context) {
296
318
  subContent.push(type.content);
297
319
  }
298
320
  fieldParts.push(
299
- ` val ${kotlinKey}: ${type.typeName}${type.isNullable ? "?" : ""},`
321
+ `${getCodeComment(prop.metadata, " ", "field")} val ${kotlinKey}: ${type.typeName}${type.isNullable ? "?" : ""},`
300
322
  );
301
323
  if (i === 0 && !context.discriminatorKey) {
302
324
  toJsonParts.push(`output += "\\"${key}\\":"`);
@@ -333,7 +355,9 @@ function kotlinObjectFromSchema(schema, context) {
333
355
  const addCommaPart = isFirst ? "" : `
334
356
  if (hasProperties) output += ","
335
357
  `;
336
- fieldParts.push(` val ${kotlinKey}: ${type.typeName}? = null,`);
358
+ fieldParts.push(
359
+ `${getCodeComment(schema.optionalProperties[key].metadata, " ", "field")} val ${kotlinKey}: ${type.typeName}? = null,`
360
+ );
337
361
  if (hasKnownKeys) {
338
362
  toJsonParts.push(`if (${kotlinKey} != null) {
339
363
  output += ",\\"${key}\\":"
@@ -361,7 +385,7 @@ ${isLast ? "" : " hasProperties = true"}
361
385
  override val ${kotlinIdentifier(context.discriminatorKey)} get() = "${context.discriminatorValue}"
362
386
  `;
363
387
  }
364
- const content = `data class ${className}(
388
+ const content = `${getCodeComment(schema.metadata, "", "class")}data class ${className}(
365
389
  ${fieldParts.join("\n")}
366
390
  ) : ${implementedClass} {${discriminatorField}
367
391
  override fun toJson(): String {
@@ -465,7 +489,8 @@ function kotlinDiscriminatorFromSchema(schema, context) {
465
489
  if (context.existingTypeIds.includes(className)) {
466
490
  return result;
467
491
  }
468
- const content = `sealed interface ${className} : ${context.clientName}Model {
492
+ const codeComment = getCodeComment(schema.metadata, "", "class");
493
+ const content = `${codeComment}sealed interface ${className} : ${context.clientName}Model {
469
494
  val ${kotlinDiscriminatorKey}: String
470
495
 
471
496
  companion object Factory : ${context.clientName}ModelFactory<${className}> {
@@ -1100,8 +1125,16 @@ function kotlinHttpRpcFromSchema(schema, context) {
1100
1125
  const name = getProcedureName(context);
1101
1126
  const params = schema.params ? kotlinClassName(`${context.modelPrefix}_${schema.params}`) : void 0;
1102
1127
  const response = schema.response ? kotlinClassName(`${context.modelPrefix}_${schema.response}`) : void 0;
1128
+ const codeComment = getCodeComment(
1129
+ {
1130
+ description: schema.description,
1131
+ isDeprecated: schema.isDeprecated
1132
+ },
1133
+ "",
1134
+ "method"
1135
+ );
1103
1136
  if (schema.isEventStream) {
1104
- return `fun ${name}(
1137
+ return `${codeComment}fun ${name}(
1105
1138
  scope: CoroutineScope,
1106
1139
  ${params ? `params: ${params},` : ""}
1107
1140
  lastEventId: String? = null,
@@ -1145,7 +1178,7 @@ function kotlinHttpRpcFromSchema(schema, context) {
1145
1178
  stack = null,
1146
1179
  )
1147
1180
  }`;
1148
- return `suspend fun ${name}(${params ? `params: ${params}` : ""}): ${response ?? "Unit"} {
1181
+ return `${codeComment}suspend fun ${name}(${params ? `params: ${params}` : ""}): ${response ?? "Unit"} {
1149
1182
  val response = __prepareRequest(
1150
1183
  client = httpClient,
1151
1184
  url = "$baseUrl${schema.path}",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arrirpc/codegen-kotlin",
3
- "version": "0.58.0",
3
+ "version": "0.59.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -22,8 +22,8 @@
22
22
  "dist"
23
23
  ],
24
24
  "dependencies": {
25
- "@arrirpc/codegen-utils": "0.58.0",
26
- "@arrirpc/schema": "0.58.0",
27
- "json-schema-to-jtd": "0.58.0"
25
+ "@arrirpc/codegen-utils": "0.59.0",
26
+ "@arrirpc/schema": "0.59.0",
27
+ "json-schema-to-jtd": "0.59.0"
28
28
  }
29
29
  }