@ir-kit/openapi-kotlin 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +259 -0
- package/dist/generate.d.ts +41 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +64 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/constants.d.ts +6 -0
- package/dist/ir/constants.d.ts.map +1 -0
- package/dist/ir/constants.js +6 -0
- package/dist/ir/constants.js.map +1 -0
- package/dist/ir/identifiers.d.ts +23 -0
- package/dist/ir/identifiers.d.ts.map +1 -0
- package/dist/ir/identifiers.js +71 -0
- package/dist/ir/identifiers.js.map +1 -0
- package/dist/ir/impl/body.d.ts +30 -0
- package/dist/ir/impl/body.d.ts.map +1 -0
- package/dist/ir/impl/body.js +116 -0
- package/dist/ir/impl/body.js.map +1 -0
- package/dist/ir/impl/decode.d.ts +14 -0
- package/dist/ir/impl/decode.d.ts.map +1 -0
- package/dist/ir/impl/decode.js +110 -0
- package/dist/ir/impl/decode.js.map +1 -0
- package/dist/ir/impl/headers.d.ts +8 -0
- package/dist/ir/impl/headers.d.ts.map +1 -0
- package/dist/ir/impl/headers.js +22 -0
- package/dist/ir/impl/headers.js.map +1 -0
- package/dist/ir/impl/index.d.ts +23 -0
- package/dist/ir/impl/index.d.ts.map +1 -0
- package/dist/ir/impl/index.js +141 -0
- package/dist/ir/impl/index.js.map +1 -0
- package/dist/ir/impl/request.d.ts +14 -0
- package/dist/ir/impl/request.d.ts.map +1 -0
- package/dist/ir/impl/request.js +25 -0
- package/dist/ir/impl/request.js.map +1 -0
- package/dist/ir/impl/serializer.d.ts +20 -0
- package/dist/ir/impl/serializer.d.ts.map +1 -0
- package/dist/ir/impl/serializer.js +62 -0
- package/dist/ir/impl/serializer.js.map +1 -0
- package/dist/ir/impl/url.d.ts +16 -0
- package/dist/ir/impl/url.d.ts.map +1 -0
- package/dist/ir/impl/url.js +77 -0
- package/dist/ir/impl/url.js.map +1 -0
- package/dist/ir/index.d.ts +4 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +3 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/operation/body.d.ts +18 -0
- package/dist/ir/operation/body.d.ts.map +1 -0
- package/dist/ir/operation/body.js +51 -0
- package/dist/ir/operation/body.js.map +1 -0
- package/dist/ir/operation/index.d.ts +7 -0
- package/dist/ir/operation/index.d.ts.map +1 -0
- package/dist/ir/operation/index.js +5 -0
- package/dist/ir/operation/index.js.map +1 -0
- package/dist/ir/operation/params.d.ts +16 -0
- package/dist/ir/operation/params.d.ts.map +1 -0
- package/dist/ir/operation/params.js +28 -0
- package/dist/ir/operation/params.js.map +1 -0
- package/dist/ir/operation/response.d.ts +26 -0
- package/dist/ir/operation/response.d.ts.map +1 -0
- package/dist/ir/operation/response.js +58 -0
- package/dist/ir/operation/response.js.map +1 -0
- package/dist/ir/operation/signature.d.ts +32 -0
- package/dist/ir/operation/signature.d.ts.map +1 -0
- package/dist/ir/operation/signature.js +53 -0
- package/dist/ir/operation/signature.js.map +1 -0
- package/dist/ir/operations.d.ts +43 -0
- package/dist/ir/operations.d.ts.map +1 -0
- package/dist/ir/operations.js +124 -0
- package/dist/ir/operations.js.map +1 -0
- package/dist/ir/runtime/index.d.ts +3 -0
- package/dist/ir/runtime/index.d.ts.map +1 -0
- package/dist/ir/runtime/index.js +2 -0
- package/dist/ir/runtime/index.js.map +1 -0
- package/dist/ir/runtime/templates.d.ts +31 -0
- package/dist/ir/runtime/templates.d.ts.map +1 -0
- package/dist/ir/runtime/templates.js +431 -0
- package/dist/ir/runtime/templates.js.map +1 -0
- package/dist/ir/schema.d.ts +11 -0
- package/dist/ir/schema.d.ts.map +1 -0
- package/dist/ir/schema.js +51 -0
- package/dist/ir/schema.js.map +1 -0
- package/dist/ir/type/context.d.ts +4 -0
- package/dist/ir/type/context.d.ts.map +1 -0
- package/dist/ir/type/context.js +2 -0
- package/dist/ir/type/context.js.map +1 -0
- package/dist/ir/type/index.d.ts +27 -0
- package/dist/ir/type/index.d.ts.map +1 -0
- package/dist/ir/type/index.js +35 -0
- package/dist/ir/type/index.js.map +1 -0
- package/dist/ir/type/primitive.d.ts +9 -0
- package/dist/ir/type/primitive.d.ts.map +1 -0
- package/dist/ir/type/primitive.js +50 -0
- package/dist/ir/type/primitive.js.map +1 -0
- package/dist/ir/type/property-naming.d.ts +26 -0
- package/dist/ir/type/property-naming.d.ts.map +1 -0
- package/dist/ir/type/property-naming.js +27 -0
- package/dist/ir/type/property-naming.js.map +1 -0
- package/dist/ir/type-ops.d.ts +13 -0
- package/dist/ir/type-ops.d.ts.map +1 -0
- package/dist/ir/type-ops.js +80 -0
- package/dist/ir/type-ops.js.map +1 -0
- package/dist/kt-compiler/decl/class.d.ts +6 -0
- package/dist/kt-compiler/decl/class.d.ts.map +1 -0
- package/dist/kt-compiler/decl/class.js +38 -0
- package/dist/kt-compiler/decl/class.js.map +1 -0
- package/dist/kt-compiler/decl/dataClass.d.ts +3 -0
- package/dist/kt-compiler/decl/dataClass.d.ts.map +1 -0
- package/dist/kt-compiler/decl/dataClass.js +18 -0
- package/dist/kt-compiler/decl/dataClass.js.map +1 -0
- package/dist/kt-compiler/decl/enum.d.ts +3 -0
- package/dist/kt-compiler/decl/enum.d.ts.map +1 -0
- package/dist/kt-compiler/decl/enum.js +32 -0
- package/dist/kt-compiler/decl/enum.js.map +1 -0
- package/dist/kt-compiler/decl/fun.d.ts +11 -0
- package/dist/kt-compiler/decl/fun.d.ts.map +1 -0
- package/dist/kt-compiler/decl/fun.js +69 -0
- package/dist/kt-compiler/decl/fun.js.map +1 -0
- package/dist/kt-compiler/decl/index.d.ts +13 -0
- package/dist/kt-compiler/decl/index.d.ts.map +1 -0
- package/dist/kt-compiler/decl/index.js +39 -0
- package/dist/kt-compiler/decl/index.js.map +1 -0
- package/dist/kt-compiler/decl/interface.d.ts +3 -0
- package/dist/kt-compiler/decl/interface.d.ts.map +1 -0
- package/dist/kt-compiler/decl/interface.js +15 -0
- package/dist/kt-compiler/decl/interface.js.map +1 -0
- package/dist/kt-compiler/decl/object.d.ts +3 -0
- package/dist/kt-compiler/decl/object.d.ts.map +1 -0
- package/dist/kt-compiler/decl/object.js +19 -0
- package/dist/kt-compiler/decl/object.js.map +1 -0
- package/dist/kt-compiler/decl/prop.d.ts +20 -0
- package/dist/kt-compiler/decl/prop.d.ts.map +1 -0
- package/dist/kt-compiler/decl/prop.js +42 -0
- package/dist/kt-compiler/decl/prop.js.map +1 -0
- package/dist/kt-compiler/decl/sealedClass.d.ts +3 -0
- package/dist/kt-compiler/decl/sealedClass.d.ts.map +1 -0
- package/dist/kt-compiler/decl/sealedClass.js +32 -0
- package/dist/kt-compiler/decl/sealedClass.js.map +1 -0
- package/dist/kt-compiler/decl/topLevel.d.ts +3 -0
- package/dist/kt-compiler/decl/topLevel.d.ts.map +1 -0
- package/dist/kt-compiler/decl/topLevel.js +5 -0
- package/dist/kt-compiler/decl/topLevel.js.map +1 -0
- package/dist/kt-compiler/decl/typeAlias.d.ts +3 -0
- package/dist/kt-compiler/decl/typeAlias.d.ts.map +1 -0
- package/dist/kt-compiler/decl/typeAlias.js +6 -0
- package/dist/kt-compiler/decl/typeAlias.js.map +1 -0
- package/dist/kt-compiler/expr.d.ts +4 -0
- package/dist/kt-compiler/expr.d.ts.map +1 -0
- package/dist/kt-compiler/expr.js +123 -0
- package/dist/kt-compiler/expr.js.map +1 -0
- package/dist/kt-compiler/format.d.ts +20 -0
- package/dist/kt-compiler/format.d.ts.map +1 -0
- package/dist/kt-compiler/format.js +27 -0
- package/dist/kt-compiler/format.js.map +1 -0
- package/dist/kt-compiler/index.d.ts +7 -0
- package/dist/kt-compiler/index.d.ts.map +1 -0
- package/dist/kt-compiler/index.js +24 -0
- package/dist/kt-compiler/index.js.map +1 -0
- package/dist/kt-compiler/stmt.d.ts +4 -0
- package/dist/kt-compiler/stmt.d.ts.map +1 -0
- package/dist/kt-compiler/stmt.js +72 -0
- package/dist/kt-compiler/stmt.js.map +1 -0
- package/dist/kt-compiler/type.d.ts +3 -0
- package/dist/kt-compiler/type.d.ts.map +1 -0
- package/dist/kt-compiler/type.js +28 -0
- package/dist/kt-compiler/type.js.map +1 -0
- package/dist/kt-dsl/decl/class.d.ts +50 -0
- package/dist/kt-dsl/decl/class.d.ts.map +1 -0
- package/dist/kt-dsl/decl/class.js +33 -0
- package/dist/kt-dsl/decl/class.js.map +1 -0
- package/dist/kt-dsl/decl/dataClass.d.ts +36 -0
- package/dist/kt-dsl/decl/dataClass.d.ts.map +1 -0
- package/dist/kt-dsl/decl/dataClass.js +25 -0
- package/dist/kt-dsl/decl/dataClass.js.map +1 -0
- package/dist/kt-dsl/decl/enum.d.ts +60 -0
- package/dist/kt-dsl/decl/enum.d.ts.map +1 -0
- package/dist/kt-dsl/decl/enum.js +38 -0
- package/dist/kt-dsl/decl/enum.js.map +1 -0
- package/dist/kt-dsl/decl/index.d.ts +11 -0
- package/dist/kt-dsl/decl/index.d.ts.map +1 -0
- package/dist/kt-dsl/decl/index.js +11 -0
- package/dist/kt-dsl/decl/index.js.map +1 -0
- package/dist/kt-dsl/decl/interface.d.ts +33 -0
- package/dist/kt-dsl/decl/interface.d.ts.map +1 -0
- package/dist/kt-dsl/decl/interface.js +24 -0
- package/dist/kt-dsl/decl/interface.js.map +1 -0
- package/dist/kt-dsl/decl/object.d.ts +34 -0
- package/dist/kt-dsl/decl/object.d.ts.map +1 -0
- package/dist/kt-dsl/decl/object.js +24 -0
- package/dist/kt-dsl/decl/object.js.map +1 -0
- package/dist/kt-dsl/decl/prop.d.ts +47 -0
- package/dist/kt-dsl/decl/prop.d.ts.map +1 -0
- package/dist/kt-dsl/decl/prop.js +28 -0
- package/dist/kt-dsl/decl/prop.js.map +1 -0
- package/dist/kt-dsl/decl/sealedClass.d.ts +68 -0
- package/dist/kt-dsl/decl/sealedClass.d.ts.map +1 -0
- package/dist/kt-dsl/decl/sealedClass.js +52 -0
- package/dist/kt-dsl/decl/sealedClass.js.map +1 -0
- package/dist/kt-dsl/decl/topLevel.d.ts +19 -0
- package/dist/kt-dsl/decl/topLevel.d.ts.map +1 -0
- package/dist/kt-dsl/decl/topLevel.js +17 -0
- package/dist/kt-dsl/decl/topLevel.js.map +1 -0
- package/dist/kt-dsl/decl/typeAlias.d.ts +23 -0
- package/dist/kt-dsl/decl/typeAlias.d.ts.map +1 -0
- package/dist/kt-dsl/decl/typeAlias.js +18 -0
- package/dist/kt-dsl/decl/typeAlias.js.map +1 -0
- package/dist/kt-dsl/decl/types.d.ts +10 -0
- package/dist/kt-dsl/decl/types.d.ts.map +1 -0
- package/dist/kt-dsl/decl/types.js +2 -0
- package/dist/kt-dsl/decl/types.js.map +1 -0
- package/dist/kt-dsl/expr/access.d.ts +48 -0
- package/dist/kt-dsl/expr/access.d.ts.map +1 -0
- package/dist/kt-dsl/expr/access.js +59 -0
- package/dist/kt-dsl/expr/access.js.map +1 -0
- package/dist/kt-dsl/expr/call.d.ts +38 -0
- package/dist/kt-dsl/expr/call.d.ts.map +1 -0
- package/dist/kt-dsl/expr/call.js +38 -0
- package/dist/kt-dsl/expr/call.js.map +1 -0
- package/dist/kt-dsl/expr/index.d.ts +7 -0
- package/dist/kt-dsl/expr/index.d.ts.map +1 -0
- package/dist/kt-dsl/expr/index.js +7 -0
- package/dist/kt-dsl/expr/index.js.map +1 -0
- package/dist/kt-dsl/expr/literal.d.ts +100 -0
- package/dist/kt-dsl/expr/literal.d.ts.map +1 -0
- package/dist/kt-dsl/expr/literal.js +108 -0
- package/dist/kt-dsl/expr/literal.js.map +1 -0
- package/dist/kt-dsl/expr/misc.d.ts +45 -0
- package/dist/kt-dsl/expr/misc.d.ts.map +1 -0
- package/dist/kt-dsl/expr/misc.js +63 -0
- package/dist/kt-dsl/expr/misc.js.map +1 -0
- package/dist/kt-dsl/expr/op.d.ts +25 -0
- package/dist/kt-dsl/expr/op.d.ts.map +1 -0
- package/dist/kt-dsl/expr/op.js +24 -0
- package/dist/kt-dsl/expr/op.js.map +1 -0
- package/dist/kt-dsl/expr/types.d.ts +93 -0
- package/dist/kt-dsl/expr/types.d.ts.map +1 -0
- package/dist/kt-dsl/expr/types.js +2 -0
- package/dist/kt-dsl/expr/types.js.map +1 -0
- package/dist/kt-dsl/file.d.ts +14 -0
- package/dist/kt-dsl/file.d.ts.map +1 -0
- package/dist/kt-dsl/file.js +9 -0
- package/dist/kt-dsl/file.js.map +1 -0
- package/dist/kt-dsl/fun.d.ts +73 -0
- package/dist/kt-dsl/fun.d.ts.map +1 -0
- package/dist/kt-dsl/fun.js +50 -0
- package/dist/kt-dsl/fun.js.map +1 -0
- package/dist/kt-dsl/index.d.ts +8 -0
- package/dist/kt-dsl/index.d.ts.map +1 -0
- package/dist/kt-dsl/index.js +8 -0
- package/dist/kt-dsl/index.js.map +1 -0
- package/dist/kt-dsl/stmt/binding.d.ts +56 -0
- package/dist/kt-dsl/stmt/binding.d.ts.map +1 -0
- package/dist/kt-dsl/stmt/binding.js +70 -0
- package/dist/kt-dsl/stmt/binding.js.map +1 -0
- package/dist/kt-dsl/stmt/control.d.ts +80 -0
- package/dist/kt-dsl/stmt/control.d.ts.map +1 -0
- package/dist/kt-dsl/stmt/control.js +77 -0
- package/dist/kt-dsl/stmt/control.js.map +1 -0
- package/dist/kt-dsl/stmt/index.d.ts +4 -0
- package/dist/kt-dsl/stmt/index.d.ts.map +1 -0
- package/dist/kt-dsl/stmt/index.js +4 -0
- package/dist/kt-dsl/stmt/index.js.map +1 -0
- package/dist/kt-dsl/stmt/types.d.ts +62 -0
- package/dist/kt-dsl/stmt/types.d.ts.map +1 -0
- package/dist/kt-dsl/stmt/types.js +2 -0
- package/dist/kt-dsl/stmt/types.js.map +1 -0
- package/dist/kt-dsl/type/builders.d.ts +75 -0
- package/dist/kt-dsl/type/builders.d.ts.map +1 -0
- package/dist/kt-dsl/type/builders.js +83 -0
- package/dist/kt-dsl/type/builders.js.map +1 -0
- package/dist/kt-dsl/type/index.d.ts +3 -0
- package/dist/kt-dsl/type/index.d.ts.map +1 -0
- package/dist/kt-dsl/type/index.js +3 -0
- package/dist/kt-dsl/type/index.js.map +1 -0
- package/dist/kt-dsl/type/types.d.ts +25 -0
- package/dist/kt-dsl/type/types.d.ts.map +1 -0
- package/dist/kt-dsl/type/types.js +2 -0
- package/dist/kt-dsl/type/types.js.map +1 -0
- package/dist/kt-dsl/visibility.d.ts +2 -0
- package/dist/kt-dsl/visibility.d.ts.map +1 -0
- package/dist/kt-dsl/visibility.js +2 -0
- package/dist/kt-dsl/visibility.js.map +1 -0
- package/dist/project/build.d.ts +33 -0
- package/dist/project/build.d.ts.map +1 -0
- package/dist/project/build.js +73 -0
- package/dist/project/build.js.map +1 -0
- package/dist/project/gradle.d.ts +48 -0
- package/dist/project/gradle.d.ts.map +1 -0
- package/dist/project/gradle.js +46 -0
- package/dist/project/gradle.js.map +1 -0
- package/dist/project/imports.d.ts +21 -0
- package/dist/project/imports.d.ts.map +1 -0
- package/dist/project/imports.js +162 -0
- package/dist/project/imports.js.map +1 -0
- package/dist/project/index.d.ts +6 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +3 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/layout.d.ts +30 -0
- package/dist/project/layout.d.ts.map +1 -0
- package/dist/project/layout.js +57 -0
- package/dist/project/layout.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { refName } from "@ir-kit/openapi-core";
|
|
2
|
+
import { ktAny, ktMap, ktRef, ktString, ktTypeAlias, } from "../kt-dsl/index.js";
|
|
3
|
+
import { buildEnumFromIR, buildStruct, schemaToType } from "./type/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Translate `IR.Model.components.schemas` into Kotlin decls. Object schemas
|
|
6
|
+
* with properties become `@Serializable` data classes; `enum` schemas
|
|
7
|
+
* become `String`-raw `@Serializable` enums; primitives/arrays/unions
|
|
8
|
+
* become typealiases. Inline nested objects/enums are promoted to
|
|
9
|
+
* top-level synthetic decls (`Owner_PropertyName`).
|
|
10
|
+
*/
|
|
11
|
+
export function schemasToDecls(schemas) {
|
|
12
|
+
const decls = [];
|
|
13
|
+
const emit = (d) => decls.push(d);
|
|
14
|
+
for (const [name, schema] of Object.entries(schemas)) {
|
|
15
|
+
if (schema.$ref) {
|
|
16
|
+
decls.push(ktTypeAlias({ name, type: ktRef(refName(schema.$ref)) }));
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (schema.type === "enum") {
|
|
20
|
+
buildEnumFromIR(name, schema, emit);
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (schema.type === "object" && schema.properties) {
|
|
24
|
+
decls.push(buildStruct(name, schema, { emit }));
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (schema.type === "object") {
|
|
28
|
+
const ap = schema.additionalProperties;
|
|
29
|
+
const sealed = ap === false ||
|
|
30
|
+
(typeof ap === "object" &&
|
|
31
|
+
(ap.type === "void" ||
|
|
32
|
+
ap.type === "never" ||
|
|
33
|
+
ap.type === "undefined"));
|
|
34
|
+
if (sealed) {
|
|
35
|
+
decls.push(buildStruct(name, schema, { emit }));
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const valueType = ap && typeof ap === "object"
|
|
39
|
+
? schemaToType(ap, { emit, ownerName: name, propPath: [] })
|
|
40
|
+
: ktAny;
|
|
41
|
+
decls.push(ktTypeAlias({ name, type: ktMap(ktString, valueType) }));
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
decls.push(ktTypeAlias({
|
|
45
|
+
name,
|
|
46
|
+
type: schemaToType(schema, { emit, ownerName: name, propPath: [] }),
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
return decls;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/ir/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAEL,KAAK,EACL,KAAK,EACL,KAAK,EACL,QAAQ,EACR,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE7E;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAwC;IAExC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrE,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACpC,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,oBAAoB,CAAC;YACvC,MAAM,MAAM,GACV,EAAE,KAAK,KAAK;gBACZ,CAAC,OAAO,EAAE,KAAK,QAAQ;oBACrB,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM;wBACjB,EAAE,CAAC,IAAI,KAAK,OAAO;wBACnB,EAAE,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC;YAChC,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GACb,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ;gBAC1B,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;gBAC3D,CAAC,CAAC,KAAK,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YACpE,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CACR,WAAW,CAAC;YACV,IAAI;YACJ,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;SACpE,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/ir/type/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/ir/type/context.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IR } from "@hey-api/shared";
|
|
2
|
+
import type { KtDecl } from "../../kt-dsl/decl/types.js";
|
|
3
|
+
import type { KtType } from "../../kt-dsl/index.js";
|
|
4
|
+
import type { TypeCtx } from "./context.js";
|
|
5
|
+
export type { TypeCtx } from "./context.js";
|
|
6
|
+
/**
|
|
7
|
+
* Top-level dispatch from `IR.SchemaObject` to a `KtType`. Side-effects:
|
|
8
|
+
* inline objects/enums get promoted to top-level decls via `ctx.emit`.
|
|
9
|
+
* Thin wrapper over the shared `@ir-kit/openapi.schemaToType` with the
|
|
10
|
+
* Kotlin ops record bound.
|
|
11
|
+
*/
|
|
12
|
+
export declare function schemaToType(schema: IR.SchemaObject, ctx: TypeCtx): KtType;
|
|
13
|
+
/**
|
|
14
|
+
* Build a top-level Kotlin data class from an object-shaped IR schema
|
|
15
|
+
* — used by `schemasToDecls` for `components.schemas` entries where
|
|
16
|
+
* the name is given. Returns the decl; caller decides whether to emit.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildStruct(name: string, schema: IR.SchemaObject, ctx: {
|
|
19
|
+
emit: (d: KtDecl) => void;
|
|
20
|
+
}): KtDecl;
|
|
21
|
+
/**
|
|
22
|
+
* Build a top-level Kotlin enum (`enum class(val raw: String)`) or
|
|
23
|
+
* integer-degrade typealias from an enum-typed IR schema. Decls are
|
|
24
|
+
* pushed via `emit`; a ref to the named type is returned.
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildEnumFromIR(name: string, schema: IR.SchemaObject, emit: (d: KtDecl) => void): KtType;
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ir/type/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAQ1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAE1E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,EAAE,CAAC,YAAY,EACvB,GAAG,EAAE;IAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACjC,MAAM,CAUR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,EAAE,CAAC,YAAY,EACvB,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACxB,MAAM,CAMR"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { classifyEnumLiterals, iterateObjectProperties, schemaToType as sharedSchemaToType, } from "@ir-kit/openapi";
|
|
2
|
+
import { getEnumLiterals } from "@ir-kit/openapi-tools";
|
|
3
|
+
import { ktOps } from "../type-ops.js";
|
|
4
|
+
/**
|
|
5
|
+
* Top-level dispatch from `IR.SchemaObject` to a `KtType`. Side-effects:
|
|
6
|
+
* inline objects/enums get promoted to top-level decls via `ctx.emit`.
|
|
7
|
+
* Thin wrapper over the shared `@ir-kit/openapi.schemaToType` with the
|
|
8
|
+
* Kotlin ops record bound.
|
|
9
|
+
*/
|
|
10
|
+
export function schemaToType(schema, ctx) {
|
|
11
|
+
return sharedSchemaToType(schema, ctx, ktOps);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build a top-level Kotlin data class from an object-shaped IR schema
|
|
15
|
+
* — used by `schemasToDecls` for `components.schemas` entries where
|
|
16
|
+
* the name is given. Returns the decl; caller decides whether to emit.
|
|
17
|
+
*/
|
|
18
|
+
export function buildStruct(name, schema, ctx) {
|
|
19
|
+
const properties = Array.from(iterateObjectProperties(schema));
|
|
20
|
+
const dispatch = (s, c) => sharedSchemaToType(s, c, ktOps);
|
|
21
|
+
return ktOps.buildStructDecl(name, properties, { emit: ctx.emit, ownerName: name, propPath: [] }, dispatch);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build a top-level Kotlin enum (`enum class(val raw: String)`) or
|
|
25
|
+
* integer-degrade typealias from an enum-typed IR schema. Decls are
|
|
26
|
+
* pushed via `emit`; a ref to the named type is returned.
|
|
27
|
+
*/
|
|
28
|
+
export function buildEnumFromIR(name, schema, emit) {
|
|
29
|
+
const rawValues = getEnumLiterals(schema);
|
|
30
|
+
const kind = classifyEnumLiterals(rawValues, name);
|
|
31
|
+
if (kind === "integer")
|
|
32
|
+
return ktOps.emitIntegerEnum(name, rawValues, emit);
|
|
33
|
+
return ktOps.emitStringEnum(name, rawValues, emit);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ir/type/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,YAAY,IAAI,kBAAkB,GACnC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB,EAAE,GAAY;IAChE,OAAO,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,MAAuB,EACvB,GAAkC;IAElC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,CAAC,CAAkB,EAAE,CAAU,EAAU,EAAE,CAC1D,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,eAAe,CAC1B,IAAI,EACJ,UAAU,EACV,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EACjD,QAAQ,CACT,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAuB,EACvB,IAAyB;IAEzB,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,IAAI,KAAK,SAAS;QACpB,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,SAAqB,EAAE,IAAI,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,SAAqB,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IR } from "@hey-api/shared";
|
|
2
|
+
import { type KtType } from "../../kt-dsl/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Map a primitive `IR.SchemaObject.type` (with optional `format`) to the
|
|
5
|
+
* matching Kotlin type. Returns `undefined` for non-primitive types so
|
|
6
|
+
* the dispatcher can fall through.
|
|
7
|
+
*/
|
|
8
|
+
export declare function typeForPrimitive(s: IR.SchemaObject): KtType | undefined;
|
|
9
|
+
//# sourceMappingURL=primitive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitive.d.ts","sourceRoot":"","sources":["../../../src/ir/type/primitive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,KAAK,MAAM,EASZ,MAAM,uBAAuB,CAAC;AA8B/B;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,GAAG,MAAM,GAAG,SAAS,CAcvE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ktBoolean, ktByteArray, ktDouble, ktFloat, ktInt, ktLong, ktRef, ktString, } from "../../kt-dsl/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* OpenAPI string `format` → Kotlin / kotlinx-datetime / `String` type.
|
|
4
|
+
* Unknown formats fall back to `String`.
|
|
5
|
+
*
|
|
6
|
+
* - `date-time` → `Instant` (kotlinx-datetime; built-in
|
|
7
|
+
* `@Serializable` serializer).
|
|
8
|
+
* - `date` → `LocalDate` (kotlinx-datetime, same).
|
|
9
|
+
* - `uuid` / `uri` / `url` → `String`. kotlinx-serialization has no
|
|
10
|
+
* built-in `UUID` / `URL` serializers, so wire
|
|
11
|
+
* compat wins over type safety. Consumers who
|
|
12
|
+
* want `java.util.UUID` can layer a custom
|
|
13
|
+
* `@Contextual` serializer on top of the field.
|
|
14
|
+
* - `binary` / `byte` → `ByteArray` (matches multipart field handling).
|
|
15
|
+
*/
|
|
16
|
+
function typeForStringFormat(format) {
|
|
17
|
+
switch (format) {
|
|
18
|
+
case "date-time":
|
|
19
|
+
return ktRef("Instant");
|
|
20
|
+
case "date":
|
|
21
|
+
return ktRef("LocalDate");
|
|
22
|
+
case "binary":
|
|
23
|
+
case "byte":
|
|
24
|
+
return ktByteArray;
|
|
25
|
+
default:
|
|
26
|
+
return ktString;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Map a primitive `IR.SchemaObject.type` (with optional `format`) to the
|
|
31
|
+
* matching Kotlin type. Returns `undefined` for non-primitive types so
|
|
32
|
+
* the dispatcher can fall through.
|
|
33
|
+
*/
|
|
34
|
+
export function typeForPrimitive(s) {
|
|
35
|
+
switch (s.type) {
|
|
36
|
+
case "string":
|
|
37
|
+
return typeForStringFormat(s.format);
|
|
38
|
+
case "integer":
|
|
39
|
+
if (s.format === "int64")
|
|
40
|
+
return ktLong;
|
|
41
|
+
return ktInt;
|
|
42
|
+
case "number":
|
|
43
|
+
return s.format === "float" ? ktFloat : ktDouble;
|
|
44
|
+
case "boolean":
|
|
45
|
+
return ktBoolean;
|
|
46
|
+
default:
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=primitive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitive.js","sourceRoot":"","sources":["../../../src/ir/type/primitive.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,EACN,KAAK,EACL,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;;;GAaG;AACH,SAAS,mBAAmB,CAAC,MAA0B;IACrD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1B,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5B,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAkB;IACjD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,SAAS;YACZ,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;gBAAE,OAAO,MAAM,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnD,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface PropertyName {
|
|
2
|
+
/** The original key as it appears in the OpenAPI schema / JSON wire format. */
|
|
3
|
+
jsonKey: string;
|
|
4
|
+
/** The idiomatic Kotlin identifier the generated data class uses (already
|
|
5
|
+
* backtick-escaped if it would collide with a reserved keyword). */
|
|
6
|
+
kotlinName: string;
|
|
7
|
+
/** True when the kotlin name differs from the JSON key — emit
|
|
8
|
+
* `@SerialName(jsonKey)` on the property. */
|
|
9
|
+
renamed: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Translate an OpenAPI property name into a Kotlin identifier following
|
|
13
|
+
* lower-camelCase conventions. When the result differs from the JSON
|
|
14
|
+
* key the caller is responsible for emitting a `@SerialName` annotation
|
|
15
|
+
* to preserve wire compatibility.
|
|
16
|
+
*
|
|
17
|
+
* first_name → firstName (renamed)
|
|
18
|
+
* first-name → firstName (renamed)
|
|
19
|
+
* firstName → firstName (no rename)
|
|
20
|
+
* id → id (no rename)
|
|
21
|
+
* class → `class` (no rename, but escaped — caller still
|
|
22
|
+
* emits `@SerialName("class")` to avoid
|
|
23
|
+
* the backticks being part of the wire)
|
|
24
|
+
*/
|
|
25
|
+
export declare function propertyName(jsonKey: string): PropertyName;
|
|
26
|
+
//# sourceMappingURL=property-naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-naming.d.ts","sourceRoot":"","sources":["../../../src/ir/type/property-naming.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB;yEACqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB;kDAC8C;IAC9C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAS1D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { camel } from "@ir-kit/codegen-core";
|
|
2
|
+
import { paramIdent } from "../identifiers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Translate an OpenAPI property name into a Kotlin identifier following
|
|
5
|
+
* lower-camelCase conventions. When the result differs from the JSON
|
|
6
|
+
* key the caller is responsible for emitting a `@SerialName` annotation
|
|
7
|
+
* to preserve wire compatibility.
|
|
8
|
+
*
|
|
9
|
+
* first_name → firstName (renamed)
|
|
10
|
+
* first-name → firstName (renamed)
|
|
11
|
+
* firstName → firstName (no rename)
|
|
12
|
+
* id → id (no rename)
|
|
13
|
+
* class → `class` (no rename, but escaped — caller still
|
|
14
|
+
* emits `@SerialName("class")` to avoid
|
|
15
|
+
* the backticks being part of the wire)
|
|
16
|
+
*/
|
|
17
|
+
export function propertyName(jsonKey) {
|
|
18
|
+
const camelName = camel(jsonKey);
|
|
19
|
+
const kotlinName = paramIdent(jsonKey);
|
|
20
|
+
// Backtick-escaping for reserved keywords doesn't constitute a rename
|
|
21
|
+
// for serialization purposes (the wire still uses the bare name), but
|
|
22
|
+
// we still emit `@SerialName` because kotlinx-serialization sees the
|
|
23
|
+
// backticked form as a distinct identifier.
|
|
24
|
+
const renamed = camelName !== jsonKey;
|
|
25
|
+
return { jsonKey, kotlinName, renamed };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=property-naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-naming.js","sourceRoot":"","sources":["../../../src/ir/type/property-naming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAa/C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,sEAAsE;IACtE,sEAAsE;IACtE,qEAAqE;IACrE,4CAA4C;IAC5C,MAAM,OAAO,GAAG,SAAS,KAAK,OAAO,CAAC;IACtC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type SchemaToTypeOps } from "@ir-kit/openapi";
|
|
2
|
+
import type { KtDecl } from "../kt-dsl/decl/types.js";
|
|
3
|
+
import { type KtType } from "../kt-dsl/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Kotlin's plug into the shared `schemaToType` dispatcher. Per-target
|
|
6
|
+
* choices: `kotlinx-serialization` `@Serializable` annotations and
|
|
7
|
+
* `@SerialName` rewrites for renamed JSON keys; `Map<String, V>` for
|
|
8
|
+
* additionalProperties; `enum class(val raw: String)` for string
|
|
9
|
+
* enums and `typealias = Int` for integer enums (kotlinx's enum
|
|
10
|
+
* support only round-trips strings).
|
|
11
|
+
*/
|
|
12
|
+
export declare const ktOps: SchemaToTypeOps<KtType, KtDecl>;
|
|
13
|
+
//# sourceMappingURL=type-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-ops.d.ts","sourceRoot":"","sources":["../../src/ir/type-ops.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,KAAK,MAAM,EAeZ,MAAM,oBAAoB,CAAC;AAK5B;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,CAuEjD,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { synthName } from "@ir-kit/codegen-core";
|
|
2
|
+
import { assertNoEnumCollisions } from "@ir-kit/openapi";
|
|
3
|
+
import { ktAnnotation, ktAny, ktDataClass, ktEnum, ktEnumEntry, ktInt, ktList, ktMap, ktNullable, ktProp, ktRef, ktString, ktTypeAlias, ktUnit, } from "../kt-dsl/index.js";
|
|
4
|
+
import { enumEntryIdent } from "./identifiers.js";
|
|
5
|
+
import { typeForPrimitive } from "./type/primitive.js";
|
|
6
|
+
import { propertyName } from "./type/property-naming.js";
|
|
7
|
+
/**
|
|
8
|
+
* Kotlin's plug into the shared `schemaToType` dispatcher. Per-target
|
|
9
|
+
* choices: `kotlinx-serialization` `@Serializable` annotations and
|
|
10
|
+
* `@SerialName` rewrites for renamed JSON keys; `Map<String, V>` for
|
|
11
|
+
* additionalProperties; `enum class(val raw: String)` for string
|
|
12
|
+
* enums and `typealias = Int` for integer enums (kotlinx's enum
|
|
13
|
+
* support only round-trips strings).
|
|
14
|
+
*/
|
|
15
|
+
export const ktOps = {
|
|
16
|
+
refType: ktRef,
|
|
17
|
+
arrayType: ktList,
|
|
18
|
+
mapType: (value) => ktMap(ktString, value),
|
|
19
|
+
voidType: () => ktUnit,
|
|
20
|
+
anyType: () => ktAny,
|
|
21
|
+
// `null`-typed primitive → `Any?`.
|
|
22
|
+
nullableAnyType: () => ktNullable(ktAny),
|
|
23
|
+
// Single non-null + nullable → wrap in nullable iff not already.
|
|
24
|
+
wrapForUnionSingle: (inner, nullable) => nullable && inner.kind !== "nullable" ? ktNullable(inner) : inner,
|
|
25
|
+
unionFallback: (nullable) => (nullable ? ktNullable(ktAny) : ktAny),
|
|
26
|
+
primitiveType: typeForPrimitive,
|
|
27
|
+
// kotlinx convention: `Owner_Property` (underscore joiner).
|
|
28
|
+
synthName,
|
|
29
|
+
buildStructDecl: (name, properties, ctx, dispatch) => {
|
|
30
|
+
const props = properties.map(({ jsonKey, schema: propSchema, required, propPathSegment }) => {
|
|
31
|
+
const naming = propertyName(jsonKey);
|
|
32
|
+
const t = dispatch(propSchema, {
|
|
33
|
+
emit: ctx.emit,
|
|
34
|
+
ownerName: name,
|
|
35
|
+
propPath: [propPathSegment],
|
|
36
|
+
});
|
|
37
|
+
const optional = !required;
|
|
38
|
+
const finalType = optional && t.kind !== "nullable" ? ktNullable(t) : t;
|
|
39
|
+
return ktProp({
|
|
40
|
+
name: naming.kotlinName,
|
|
41
|
+
type: finalType,
|
|
42
|
+
inPrimary: true,
|
|
43
|
+
default: optional ? "null" : undefined,
|
|
44
|
+
annotations: naming.renamed
|
|
45
|
+
? [ktAnnotation("SerialName", JSON.stringify(naming.jsonKey))]
|
|
46
|
+
: [],
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
return ktDataClass({
|
|
50
|
+
name,
|
|
51
|
+
annotations: [ktAnnotation("Serializable")],
|
|
52
|
+
properties: props,
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
emitStringEnum: (name, rawValues, emit) => {
|
|
56
|
+
const idents = rawValues.map((raw) => ({
|
|
57
|
+
identifier: enumEntryIdent(raw),
|
|
58
|
+
raw,
|
|
59
|
+
}));
|
|
60
|
+
assertNoEnumCollisions(name, idents);
|
|
61
|
+
const entries = idents.map(({ identifier, raw }) => ktEnumEntry(identifier, JSON.stringify(raw), [
|
|
62
|
+
ktAnnotation("SerialName", JSON.stringify(raw)),
|
|
63
|
+
]));
|
|
64
|
+
emit(ktEnum({
|
|
65
|
+
name,
|
|
66
|
+
annotations: [ktAnnotation("Serializable")],
|
|
67
|
+
properties: [ktProp({ name: "raw", type: ktString, inPrimary: true })],
|
|
68
|
+
entries,
|
|
69
|
+
}));
|
|
70
|
+
return ktRef(name);
|
|
71
|
+
},
|
|
72
|
+
// kotlinx-serialization can't round-trip integer enums via
|
|
73
|
+
// `@SerialName`; degrade to a typealias that preserves the wire
|
|
74
|
+
// shape but loses enum-value constraint at the type level.
|
|
75
|
+
emitIntegerEnum: (name, _rawValues, emit) => {
|
|
76
|
+
emit(ktTypeAlias({ name, type: ktInt }));
|
|
77
|
+
return ktRef(name);
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=type-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-ops.js","sourceRoot":"","sources":["../../src/ir/type-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../../src/kt-compiler/decl/class.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAiC7C;AAED,wCAAwC;AACxC,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { INDENT, superTypeTail, visibilityPrefix } from "../format.js";
|
|
2
|
+
import { printStmt } from "../stmt.js";
|
|
3
|
+
import { printType } from "../type.js";
|
|
4
|
+
import { printFun, printFunParam } from "./fun.js";
|
|
5
|
+
import { printAnnotations, printPrimaryProp, printProp } from "./prop.js";
|
|
6
|
+
export function printClass(d) {
|
|
7
|
+
const annLines = printAnnotations(d.annotations, "");
|
|
8
|
+
const vis = visibilityPrefix(d.visibility);
|
|
9
|
+
const modifiers = d.modifiers.length > 0 ? `${d.modifiers.join(" ")} ` : "";
|
|
10
|
+
const primaryProps = d.properties.filter((p) => p.inPrimary);
|
|
11
|
+
const bodyProps = d.properties.filter((p) => !p.inPrimary);
|
|
12
|
+
const ctorEntries = [];
|
|
13
|
+
for (const p of primaryProps)
|
|
14
|
+
ctorEntries.push(printPrimaryProp(p, INDENT));
|
|
15
|
+
for (const p of d.ctorParams)
|
|
16
|
+
ctorEntries.push(`${INDENT}${printFunParam(p)}`);
|
|
17
|
+
const ctor = ctorEntries.length === 0 ? "" : `(\n${ctorEntries.join(",\n")},\n)`;
|
|
18
|
+
const head = `${annLines}${vis}${modifiers}class ${d.name}${ctor}${superTypeTail(d.superTypes)}`;
|
|
19
|
+
const sections = [];
|
|
20
|
+
if (bodyProps.length > 0) {
|
|
21
|
+
sections.push(bodyProps.map((p) => printProp(p, INDENT)).join("\n"));
|
|
22
|
+
}
|
|
23
|
+
if (d.initBlock && d.initBlock.length > 0) {
|
|
24
|
+
const inner = d.initBlock
|
|
25
|
+
.map((s) => printStmt(s, INDENT + INDENT))
|
|
26
|
+
.join("\n");
|
|
27
|
+
sections.push(`${INDENT}init {\n${inner}\n${INDENT}}`);
|
|
28
|
+
}
|
|
29
|
+
if (d.funs.length > 0) {
|
|
30
|
+
sections.push(d.funs.map((f) => printFun(f, INDENT)).join("\n\n"));
|
|
31
|
+
}
|
|
32
|
+
if (sections.length === 0)
|
|
33
|
+
return head;
|
|
34
|
+
return `${head} {\n${sections.join("\n\n")}\n}`;
|
|
35
|
+
}
|
|
36
|
+
/** Used by sealed-subclass lowering. */
|
|
37
|
+
export { printType };
|
|
38
|
+
//# sourceMappingURL=class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../../src/kt-compiler/decl/class.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataClass.d.ts","sourceRoot":"","sources":["../../../src/kt-compiler/decl/dataClass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAKlE,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAarD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { INDENT, superTypeTail, visibilityPrefix } from "../format.js";
|
|
2
|
+
import { printFun } from "./fun.js";
|
|
3
|
+
import { printAnnotations, printPrimaryProp } from "./prop.js";
|
|
4
|
+
export function printDataClass(d) {
|
|
5
|
+
const annLines = printAnnotations(d.annotations, "");
|
|
6
|
+
const vis = visibilityPrefix(d.visibility);
|
|
7
|
+
// Data classes carry all properties in the primary constructor.
|
|
8
|
+
const primaryProps = d.properties
|
|
9
|
+
.map((p) => printPrimaryProp({ ...p, inPrimary: true }, INDENT))
|
|
10
|
+
.join(",\n");
|
|
11
|
+
const ctor = d.properties.length === 0 ? "()" : `(\n${primaryProps},\n)`;
|
|
12
|
+
const head = `${annLines}${vis}data class ${d.name}${ctor}${superTypeTail(d.superTypes)}`;
|
|
13
|
+
if (d.funs.length === 0)
|
|
14
|
+
return head;
|
|
15
|
+
const funs = d.funs.map((f) => printFun(f, INDENT)).join("\n\n");
|
|
16
|
+
return `${head} {\n${funs}\n}`;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=dataClass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataClass.js","sourceRoot":"","sources":["../../../src/kt-compiler/decl/dataClass.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE/D,MAAM,UAAU,cAAc,CAAC,CAAc;IAC3C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3C,gEAAgE;IAChE,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;SAC/D,IAAI,CAAC,KAAK,CAAC,CAAC;IACf,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,YAAY,MAAM,CAAC;IACzE,MAAM,IAAI,GAAG,GAAG,QAAQ,GAAG,GAAG,cAAc,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;IAE1F,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,GAAG,IAAI,OAAO,IAAI,KAAK,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../../src/kt-compiler/decl/enum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAKxD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAiC3C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { INDENT, superTypeTail, visibilityPrefix } from "../format.js";
|
|
2
|
+
import { printFun } from "./fun.js";
|
|
3
|
+
import { printAnnotation, printAnnotations, printPrimaryProp } from "./prop.js";
|
|
4
|
+
export function printEnum(d) {
|
|
5
|
+
const annLines = printAnnotations(d.annotations, "");
|
|
6
|
+
const vis = visibilityPrefix(d.visibility);
|
|
7
|
+
const ctor = d.properties.length === 0
|
|
8
|
+
? ""
|
|
9
|
+
: `(\n${d.properties.map((p) => printPrimaryProp({ ...p, inPrimary: true }, INDENT)).join(",\n")},\n)`;
|
|
10
|
+
const head = `${annLines}${vis}enum class ${d.name}${ctor}${superTypeTail(d.superTypes)}`;
|
|
11
|
+
if (d.entries.length === 0 && d.funs.length === 0) {
|
|
12
|
+
return `${head} {}`;
|
|
13
|
+
}
|
|
14
|
+
const entryLines = d.entries.map((e) => {
|
|
15
|
+
const annPrefix = e.annotations && e.annotations.length > 0
|
|
16
|
+
? `${e.annotations.map(printAnnotation).join(" ")} `
|
|
17
|
+
: "";
|
|
18
|
+
const args = e.args === undefined ? "" : `(${e.args})`;
|
|
19
|
+
return `${INDENT}${annPrefix}${e.name}${args}`;
|
|
20
|
+
});
|
|
21
|
+
// Trailing semicolon is required by Kotlin when the enum class has
|
|
22
|
+
// additional members (funs/companion) below the entry list.
|
|
23
|
+
const entriesBlock = d.funs.length > 0
|
|
24
|
+
? `${entryLines.join(",\n")};`
|
|
25
|
+
: `${entryLines.join(",\n")},`;
|
|
26
|
+
const sections = [entriesBlock];
|
|
27
|
+
if (d.funs.length > 0) {
|
|
28
|
+
sections.push(d.funs.map((f) => printFun(f, INDENT)).join("\n\n"));
|
|
29
|
+
}
|
|
30
|
+
return `${head} {\n${sections.join("\n\n")}\n}`;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../src/kt-compiler/decl/enum.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEhF,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,IAAI,GACR,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3G,MAAM,IAAI,GAAG,GAAG,QAAQ,GAAG,GAAG,cAAc,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;IAE1F,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,GAAG,IAAI,KAAK,CAAC;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrC,MAAM,SAAS,GACb,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACvC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;YACpD,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;QACvD,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,mEAAmE;IACnE,4DAA4D;IAC5D,MAAM,YAAY,GAChB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACf,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;QAC9B,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAEnC,MAAM,QAAQ,GAAa,CAAC,YAAY,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,GAAG,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { KtFun, KtFunParam } from "../../kt-dsl/fun.js";
|
|
2
|
+
export declare function printFunParam(p: KtFunParam, includeDefault?: boolean): string;
|
|
3
|
+
export declare function printParamsBlock(params: ReadonlyArray<KtFunParam>, indent: string, includeDefault?: boolean): string;
|
|
4
|
+
export declare function printFun(fn: KtFun, indent?: string,
|
|
5
|
+
/**
|
|
6
|
+
* Suppress the visibility modifier — required when the function lives
|
|
7
|
+
* inside an interface (members inherit the interface's visibility),
|
|
8
|
+
* or as part of an enum entry's member list.
|
|
9
|
+
*/
|
|
10
|
+
suppressVisibility?: boolean): string;
|
|
11
|
+
//# sourceMappingURL=fun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fun.d.ts","sourceRoot":"","sources":["../../../src/kt-compiler/decl/fun.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAgB1E,wBAAgB,aAAa,CAC3B,CAAC,EAAE,UAAU,EACb,cAAc,GAAE,OAAc,GAC7B,MAAM,CAIR;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,OAAc,GAC7B,MAAM,CAKR;AAED,wBAAgB,QAAQ,CACtB,EAAE,EAAE,KAAK,EACT,MAAM,GAAE,MAAW;AACnB;;;;GAIG;AACH,kBAAkB,GAAE,OAAe,GAClC,MAAM,CAqCR"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { printExpr } from "../expr.js";
|
|
2
|
+
import { INDENT, visibilityPrefix } from "../format.js";
|
|
3
|
+
import { printStmt } from "../stmt.js";
|
|
4
|
+
import { printType } from "../type.js";
|
|
5
|
+
function printTypeParams(typeParams) {
|
|
6
|
+
if (typeParams.length === 0)
|
|
7
|
+
return "";
|
|
8
|
+
return `<${typeParams
|
|
9
|
+
.map((t) => {
|
|
10
|
+
if (!t.bounds || t.bounds.length === 0)
|
|
11
|
+
return t.name;
|
|
12
|
+
return `${t.name} : ${t.bounds.join(" & ")}`;
|
|
13
|
+
})
|
|
14
|
+
.join(", ")}>`;
|
|
15
|
+
}
|
|
16
|
+
export function printFunParam(p, includeDefault = true) {
|
|
17
|
+
const def = includeDefault && p.default !== undefined ? ` = ${p.default}` : "";
|
|
18
|
+
return `${p.name}: ${printType(p.type)}${def}`;
|
|
19
|
+
}
|
|
20
|
+
export function printParamsBlock(params, indent, includeDefault = true) {
|
|
21
|
+
if (params.length === 0)
|
|
22
|
+
return "()";
|
|
23
|
+
return `(\n${params
|
|
24
|
+
.map((p) => `${indent}${INDENT}${printFunParam(p, includeDefault)}`)
|
|
25
|
+
.join(",\n")}\n${indent})`;
|
|
26
|
+
}
|
|
27
|
+
export function printFun(fn, indent = "",
|
|
28
|
+
/**
|
|
29
|
+
* Suppress the visibility modifier — required when the function lives
|
|
30
|
+
* inside an interface (members inherit the interface's visibility),
|
|
31
|
+
* or as part of an enum entry's member list.
|
|
32
|
+
*/
|
|
33
|
+
suppressVisibility = false) {
|
|
34
|
+
const lines = [];
|
|
35
|
+
if (fn.doc) {
|
|
36
|
+
for (const line of fn.doc.split("\n"))
|
|
37
|
+
lines.push(`${indent}/** ${line} */`);
|
|
38
|
+
}
|
|
39
|
+
const vis = suppressVisibility ? "" : visibilityPrefix(fn.visibility);
|
|
40
|
+
const isAbstract = fn.body === undefined;
|
|
41
|
+
// `abstract`/`override`/`open` are mutually exclusive with `final`; the
|
|
42
|
+
// DSL doesn't model `final` since Kotlin's default is final and we
|
|
43
|
+
// don't need the keyword.
|
|
44
|
+
const modifiers = fn.modifiers.length > 0 ? `${fn.modifiers.join(" ")} ` : "";
|
|
45
|
+
const typeParams = printTypeParams(fn.typeParams);
|
|
46
|
+
const params = printParamsBlock(fn.params, indent, !isAbstract);
|
|
47
|
+
const isUnit = fn.returnType.kind === "primitive" && fn.returnType.name === "Unit";
|
|
48
|
+
const ret = isUnit ? "" : `: ${printType(fn.returnType)}`;
|
|
49
|
+
const receiver = fn.receiver ? `${printType(fn.receiver)}.` : "";
|
|
50
|
+
const tp = typeParams ? `${typeParams} ` : "";
|
|
51
|
+
const head = `${indent}${vis}${modifiers}fun ${tp}${receiver}${fn.name}${params}${ret}`;
|
|
52
|
+
if (fn.body === undefined) {
|
|
53
|
+
lines.push(head);
|
|
54
|
+
return lines.join("\n");
|
|
55
|
+
}
|
|
56
|
+
if (fn.body.length === 0) {
|
|
57
|
+
lines.push(`${head} {}`);
|
|
58
|
+
return lines.join("\n");
|
|
59
|
+
}
|
|
60
|
+
// Single-expression body shorthand: `fun foo(): T = expr`.
|
|
61
|
+
if (fn.body.length === 1 && fn.body[0].kind === "returnExpr") {
|
|
62
|
+
lines.push(`${head} = ${printExpr(fn.body[0].expr)}`);
|
|
63
|
+
return lines.join("\n");
|
|
64
|
+
}
|
|
65
|
+
const body = fn.body.map((s) => printStmt(s, indent + INDENT)).join("\n");
|
|
66
|
+
lines.push(`${head} {\n${body}\n${indent}}`);
|
|
67
|
+
return lines.join("\n");
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=fun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fun.js","sourceRoot":"","sources":["../../../src/kt-compiler/decl/fun.ts"],"names":[],"mappings":"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"}
|