@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,116 @@
|
|
|
1
|
+
import { classifyBody } from "@ir-kit/openapi";
|
|
2
|
+
import { ktArg, ktCall, ktExprStmt, ktIdent, ktIf, ktInterp, ktMember, ktNe, ktNull, ktStr, ktVal, } from "../../kt-dsl/index.js";
|
|
3
|
+
import { paramIdent } from "../identifiers.js";
|
|
4
|
+
import { setMethodWithBody } from "./request.js";
|
|
5
|
+
import { serializerFor } from "./serializer.js";
|
|
6
|
+
/**
|
|
7
|
+
* Build the request body and re-set the HTTP method on `builder` to
|
|
8
|
+
* carry it. Dispatches on media type:
|
|
9
|
+
*
|
|
10
|
+
* - `application/json` (and `+json`) → `client.json.encodeToString(<ser>, body)`
|
|
11
|
+
* becomes a `RequestBody` via `.toRequestBody("application/json".toMediaType())`.
|
|
12
|
+
* For opaque bodies (oneOf/anyOf), the impl receives `body: ByteArray`
|
|
13
|
+
* and ships it raw.
|
|
14
|
+
* - `multipart/form-data` (object schema) → assemble a
|
|
15
|
+
* `MultipartFormBody`, append text/file fields per property, take
|
|
16
|
+
* `multipart.build()` as the RequestBody.
|
|
17
|
+
* - `application/x-www-form-urlencoded` (object schema) → build a
|
|
18
|
+
* `FormBody.Builder()`, `add(name, value)` per property, take
|
|
19
|
+
* `formBody.build()` as the RequestBody.
|
|
20
|
+
* - octet-stream / image / etc. → `body.toRequestBody("<mt>".toMediaType())`.
|
|
21
|
+
*
|
|
22
|
+
* Optional fields are wrapped in `if (<id> != null)`.
|
|
23
|
+
*/
|
|
24
|
+
export function buildBodyStmts(body, method, bodyType) {
|
|
25
|
+
const shape = classifyBody(body);
|
|
26
|
+
const schema = body.schema;
|
|
27
|
+
switch (shape.kind) {
|
|
28
|
+
case "json-opaque":
|
|
29
|
+
return {
|
|
30
|
+
stmts: [emitMethodWithRawBody(method, "application/json")],
|
|
31
|
+
needsMultipart: false,
|
|
32
|
+
};
|
|
33
|
+
case "json-typed":
|
|
34
|
+
return { stmts: emitJsonBody(method, bodyType), needsMultipart: false };
|
|
35
|
+
case "multipart-object":
|
|
36
|
+
return { stmts: emitMultipartBody(schema, method), needsMultipart: true };
|
|
37
|
+
case "form-urlencoded-object":
|
|
38
|
+
return {
|
|
39
|
+
stmts: emitFormUrlEncodedBody(schema, method),
|
|
40
|
+
needsMultipart: false,
|
|
41
|
+
};
|
|
42
|
+
case "opaque":
|
|
43
|
+
return {
|
|
44
|
+
stmts: [
|
|
45
|
+
emitMethodWithRawBody(method, (body.mediaType ?? "").toLowerCase() || "application/octet-stream"),
|
|
46
|
+
],
|
|
47
|
+
needsMultipart: false,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const TO_REQUEST_BODY = "toRequestBody";
|
|
52
|
+
function toMediaTypeCall(mt) {
|
|
53
|
+
return ktCall(ktMember(ktStr(mt), "toMediaType"), []);
|
|
54
|
+
}
|
|
55
|
+
function emitJsonBody(method, bodyType) {
|
|
56
|
+
// val payload = client.json.encodeToString(<serializer>, body)
|
|
57
|
+
// builder.method("POST", payload.toRequestBody("application/json".toMediaType()))
|
|
58
|
+
return [
|
|
59
|
+
ktVal("payload", ktCall(ktMember(ktMember(ktIdent("client"), "json"), "encodeToString"), [
|
|
60
|
+
ktArg(serializerFor(bodyType)),
|
|
61
|
+
ktArg(ktIdent("body")),
|
|
62
|
+
])),
|
|
63
|
+
setMethodWithBody(method, ktCall(ktMember(ktIdent("payload"), TO_REQUEST_BODY), [
|
|
64
|
+
ktArg(toMediaTypeCall("application/json")),
|
|
65
|
+
])),
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
function emitMethodWithRawBody(method, mt) {
|
|
69
|
+
return setMethodWithBody(method, ktCall(ktMember(ktIdent("body"), TO_REQUEST_BODY), [
|
|
70
|
+
ktArg(toMediaTypeCall(mt)),
|
|
71
|
+
]));
|
|
72
|
+
}
|
|
73
|
+
function emitMultipartBody(schema, method) {
|
|
74
|
+
const required = new Set(schema.required ?? []);
|
|
75
|
+
const stmts = [
|
|
76
|
+
ktVal("multipart", ktCall(ktIdent("MultipartFormBody"), [])),
|
|
77
|
+
];
|
|
78
|
+
for (const [propName, propSchema] of Object.entries(schema.properties ?? {})) {
|
|
79
|
+
const id = paramIdent(propName);
|
|
80
|
+
const isBinary = propSchema.type === "string" && propSchema.format === "binary";
|
|
81
|
+
const append = isBinary
|
|
82
|
+
? ktExprStmt(ktCall(ktMember(ktIdent("multipart"), "appendFile"), [
|
|
83
|
+
ktArg(ktStr(propName)),
|
|
84
|
+
ktArg(ktStr(propName)),
|
|
85
|
+
ktArg(ktIdent(id)),
|
|
86
|
+
]))
|
|
87
|
+
: ktExprStmt(ktCall(ktMember(ktIdent("multipart"), "appendText"), [
|
|
88
|
+
ktArg(ktStr(propName)),
|
|
89
|
+
ktArg(ktInterp([ktIdent(id)])),
|
|
90
|
+
]));
|
|
91
|
+
stmts.push(required.has(propName)
|
|
92
|
+
? append
|
|
93
|
+
: ktIf(ktNe(ktIdent(id), ktNull), [append]));
|
|
94
|
+
}
|
|
95
|
+
stmts.push(setMethodWithBody(method, ktCall(ktMember(ktIdent("multipart"), "build"), [])));
|
|
96
|
+
return stmts;
|
|
97
|
+
}
|
|
98
|
+
function emitFormUrlEncodedBody(schema, method) {
|
|
99
|
+
const required = new Set(schema.required ?? []);
|
|
100
|
+
const stmts = [
|
|
101
|
+
ktVal("formBuilder", ktCall(ktIdent("FormBody.Builder"), [])),
|
|
102
|
+
];
|
|
103
|
+
for (const propName of Object.keys(schema.properties ?? {})) {
|
|
104
|
+
const id = paramIdent(propName);
|
|
105
|
+
const append = ktExprStmt(ktCall(ktMember(ktIdent("formBuilder"), "add"), [
|
|
106
|
+
ktArg(ktStr(propName)),
|
|
107
|
+
ktArg(ktInterp([ktIdent(id)])),
|
|
108
|
+
]));
|
|
109
|
+
stmts.push(required.has(propName)
|
|
110
|
+
? append
|
|
111
|
+
: ktIf(ktNe(ktIdent(id), ktNull), [append]));
|
|
112
|
+
}
|
|
113
|
+
stmts.push(setMethodWithBody(method, ktCall(ktMember(ktIdent("formBuilder"), "build"), [])));
|
|
114
|
+
return stmts;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"body.js","sourceRoot":"","sources":["../../../src/ir/impl/body.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type KtStmt } from "../../kt-dsl/index.js";
|
|
2
|
+
import type { OperationSignature } from "../operation/signature.js";
|
|
3
|
+
/**
|
|
4
|
+
* Tail of an impl method body — delegate to the runtime client. Five
|
|
5
|
+
* shapes, picked from the sig:
|
|
6
|
+
*
|
|
7
|
+
* - Single 2xx, `Unit` → `client.executeUnit(builder.build(), …)`
|
|
8
|
+
* - Single 2xx, `T` → `return client.execute(builder.build(), <ser>, …)`
|
|
9
|
+
* - Single 2xx, `Response` → `return client.executeUnitWithResponse(builder.build(), …)`
|
|
10
|
+
* - Single 2xx, `Pair<T, Response>` → `return client.executeWithResponse(builder.build(), <ser>, …)`
|
|
11
|
+
* - Multi 2xx (sealed-class) → `client.executeRaw(...)` + `when (response.code)` switch, decode each case
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildSendAndDecodeStmts(sig: OperationSignature): ReadonlyArray<KtStmt>;
|
|
14
|
+
//# sourceMappingURL=decode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../src/ir/impl/decode.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,EAaZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAGnC;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,kBAAkB,GACtB,aAAa,CAAC,MAAM,CAAC,CAGvB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { ktArg, ktCall, ktExprStmt, ktIdent, ktIntLit, ktMember, ktReturn, ktThrow, ktVal, ktWhen, ktWhenCase, } from "../../kt-dsl/index.js";
|
|
2
|
+
import { serializerFor } from "./serializer.js";
|
|
3
|
+
/**
|
|
4
|
+
* Tail of an impl method body — delegate to the runtime client. Five
|
|
5
|
+
* shapes, picked from the sig:
|
|
6
|
+
*
|
|
7
|
+
* - Single 2xx, `Unit` → `client.executeUnit(builder.build(), …)`
|
|
8
|
+
* - Single 2xx, `T` → `return client.execute(builder.build(), <ser>, …)`
|
|
9
|
+
* - Single 2xx, `Response` → `return client.executeUnitWithResponse(builder.build(), …)`
|
|
10
|
+
* - Single 2xx, `Pair<T, Response>` → `return client.executeWithResponse(builder.build(), <ser>, …)`
|
|
11
|
+
* - Multi 2xx (sealed-class) → `client.executeRaw(...)` + `when (response.code)` switch, decode each case
|
|
12
|
+
*/
|
|
13
|
+
export function buildSendAndDecodeStmts(sig) {
|
|
14
|
+
if (sig.responseCases.length > 0)
|
|
15
|
+
return buildMultiResponseStmts(sig);
|
|
16
|
+
return buildSingleResponseStmts(sig.returnType);
|
|
17
|
+
}
|
|
18
|
+
// MARK: single-2xx
|
|
19
|
+
function buildSingleResponseStmts(returnType) {
|
|
20
|
+
const dispatch = classifyReturn(returnType);
|
|
21
|
+
const callee = ktMember(ktIdent("client"), dispatch.method);
|
|
22
|
+
const args = [
|
|
23
|
+
ktArg(ktCall(ktMember(ktIdent("builder"), "build"), [])),
|
|
24
|
+
];
|
|
25
|
+
if (dispatch.deserializerType) {
|
|
26
|
+
args.push(ktArg(serializerFor(dispatch.deserializerType)));
|
|
27
|
+
}
|
|
28
|
+
args.push(ktArg(ktMember(ktIdent("options"), "timeout"), "timeout"), ktArg(ktMember(ktIdent("options"), "requestInterceptors"), "extraInterceptors"), ktArg(ktMember(ktIdent("options"), "responseValidator"), "responseValidator"));
|
|
29
|
+
if (dispatch.includeTransformer) {
|
|
30
|
+
args.push(ktArg(ktMember(ktIdent("options"), "responseTransformer"), "responseTransformer"));
|
|
31
|
+
}
|
|
32
|
+
const call = ktCall(callee, args);
|
|
33
|
+
return dispatch.discardResult ? [ktExprStmt(call)] : [ktReturn(call)];
|
|
34
|
+
}
|
|
35
|
+
function classifyReturn(t) {
|
|
36
|
+
if (t.kind === "primitive" && t.name === "Unit") {
|
|
37
|
+
return {
|
|
38
|
+
method: "executeUnit",
|
|
39
|
+
includeTransformer: false,
|
|
40
|
+
discardResult: true,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (t.kind === "ref" && t.name === "Response") {
|
|
44
|
+
return {
|
|
45
|
+
method: "executeUnitWithResponse",
|
|
46
|
+
includeTransformer: false,
|
|
47
|
+
discardResult: false,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (t.kind === "ref" && t.name === "Pair" && t.args && t.args.length > 0) {
|
|
51
|
+
return {
|
|
52
|
+
method: "executeWithResponse",
|
|
53
|
+
deserializerType: t.args[0],
|
|
54
|
+
includeTransformer: true,
|
|
55
|
+
discardResult: false,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
method: "execute",
|
|
60
|
+
deserializerType: t,
|
|
61
|
+
includeTransformer: true,
|
|
62
|
+
discardResult: false,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// MARK: multi-2xx
|
|
66
|
+
function buildMultiResponseStmts(sig) {
|
|
67
|
+
const wrapWithResponse = sig.returnType.kind === "ref" && sig.returnType.name === "Pair";
|
|
68
|
+
const sealedName = `${sig.ownerName}_Response`;
|
|
69
|
+
const args = [
|
|
70
|
+
ktArg(ktCall(ktMember(ktIdent("builder"), "build"), [])),
|
|
71
|
+
ktArg(ktMember(ktIdent("options"), "timeout"), "timeout"),
|
|
72
|
+
ktArg(ktMember(ktIdent("options"), "requestInterceptors"), "extraInterceptors"),
|
|
73
|
+
ktArg(ktMember(ktIdent("options"), "responseValidator"), "responseValidator"),
|
|
74
|
+
ktArg(ktMember(ktIdent("options"), "responseTransformer"), "responseTransformer"),
|
|
75
|
+
];
|
|
76
|
+
return [
|
|
77
|
+
ktVal("raw", ktCall(ktMember(ktIdent("client"), "executeRaw"), args)),
|
|
78
|
+
ktVal("data", ktMember(ktIdent("raw"), "first")),
|
|
79
|
+
ktVal("response", ktMember(ktIdent("raw"), "second")),
|
|
80
|
+
ktWhen(ktMember(ktIdent("response"), "code"), sig.responseCases.map((c) => ktWhenCase([ktIntLit(Number(c.statusCode))], caseBody(c, sealedName, wrapWithResponse))), [
|
|
81
|
+
ktThrow(ktCall(ktIdent("APIError.UnexpectedStatus"), [
|
|
82
|
+
ktArg(ktMember(ktIdent("response"), "code")),
|
|
83
|
+
ktArg(ktIdent("data")),
|
|
84
|
+
])),
|
|
85
|
+
]),
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
function caseBody(c, sealedName, wrapWithResponse) {
|
|
89
|
+
if (!c.payloadType) {
|
|
90
|
+
return [
|
|
91
|
+
ktReturn(wrapResult(ktIdent(`${sealedName}.${c.caseName}`), wrapWithResponse)),
|
|
92
|
+
];
|
|
93
|
+
}
|
|
94
|
+
const decoded = ktCall(ktMember(ktMember(ktIdent("client"), "json"), "decodeFromString"), [
|
|
95
|
+
ktArg(serializerFor(c.payloadType)),
|
|
96
|
+
ktArg(ktCall(ktMember(ktIdent("data"), "decodeToString"), [])),
|
|
97
|
+
]);
|
|
98
|
+
return [
|
|
99
|
+
ktVal("value", decoded),
|
|
100
|
+
ktReturn(wrapResult(ktCall(ktIdent(`${sealedName}.${c.caseName}`), [
|
|
101
|
+
ktArg(ktIdent("value")),
|
|
102
|
+
]), wrapWithResponse)),
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
function wrapResult(value, withResponse) {
|
|
106
|
+
if (!withResponse)
|
|
107
|
+
return value;
|
|
108
|
+
return ktCall(ktIdent("Pair"), [ktArg(value), ktArg(ktIdent("response"))]);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=decode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/ir/impl/decode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type LocatedParam } from "@ir-kit/openapi";
|
|
2
|
+
import { type KtStmt } from "../../kt-dsl/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* `builder.header("<name>", "$<value>")` for each header param. Optional
|
|
5
|
+
* headers are wrapped in `if (<name> != null)`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildHeaderStmts(located: ReadonlyArray<LocatedParam>): ReadonlyArray<KtStmt>;
|
|
8
|
+
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/ir/impl/headers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAY,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EACL,KAAK,MAAM,EAWZ,MAAM,uBAAuB,CAAC;AAG/B;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,GACnC,aAAa,CAAC,MAAM,CAAC,CAGvB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { paramsAt } from "@ir-kit/openapi";
|
|
2
|
+
import { ktArg, ktCall, ktExprStmt, ktIdent, ktIf, ktInterp, ktMember, ktNe, ktNull, ktStr, } from "../../kt-dsl/index.js";
|
|
3
|
+
import { paramIdent } from "../identifiers.js";
|
|
4
|
+
/**
|
|
5
|
+
* `builder.header("<name>", "$<value>")` for each header param. Optional
|
|
6
|
+
* headers are wrapped in `if (<name> != null)`.
|
|
7
|
+
*/
|
|
8
|
+
export function buildHeaderStmts(located) {
|
|
9
|
+
const headers = paramsAt(located, "header");
|
|
10
|
+
return headers.flatMap(buildHeaderStmt);
|
|
11
|
+
}
|
|
12
|
+
function buildHeaderStmt(p) {
|
|
13
|
+
const id = paramIdent(p.name);
|
|
14
|
+
const setStmt = ktExprStmt(ktCall(ktMember(ktIdent("builder"), "header"), [
|
|
15
|
+
ktArg(ktStr(p.name)),
|
|
16
|
+
ktArg(ktInterp([ktIdent(id)])),
|
|
17
|
+
]));
|
|
18
|
+
if (p.required)
|
|
19
|
+
return [setStmt];
|
|
20
|
+
return [ktIf(ktNe(ktIdent(id), ktNull), [setStmt])];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../src/ir/impl/headers.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAEL,KAAK,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,KAAK,GACN,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAoC;IAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,CAAqB;IAC5C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,UAAU,CACxB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,EAAE;QAC7C,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpB,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC/B,CAAC,CACH,CAAC;IACF,IAAI,CAAC,CAAC,QAAQ;QAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type KtClass } from "../../kt-dsl/index.js";
|
|
2
|
+
import type { OperationSignature } from "../operation/signature.js";
|
|
3
|
+
export interface ClientClassResult {
|
|
4
|
+
/** The impl class itself. */
|
|
5
|
+
class: KtClass;
|
|
6
|
+
/** True when at least one method uses the `MultipartFormBody` helper,
|
|
7
|
+
* so the orchestrator should ship it. */
|
|
8
|
+
needsMultipart: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface ClientClassOptions {
|
|
11
|
+
/** When true, the class is `open` (subclassable) instead of final.
|
|
12
|
+
* Default: `false`. */
|
|
13
|
+
open?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Convert a list of `OperationSignature`s for a tag into a class that
|
|
17
|
+
* implements the matching interface and contains a working OkHttp +
|
|
18
|
+
* kotlinx-serialization impl for each operation. The class holds a
|
|
19
|
+
* single `client: APIClient` primary-ctor prop and delegates
|
|
20
|
+
* send/dispatch/decode to it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildClientClass(className: string, interfaceName: string, signatures: ReadonlyArray<OperationSignature>, opts?: ClientClassOptions): ClientClassResult;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ir/impl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAuBb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAiKpE,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf;8CAC0C;IAC1C,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC;4BACwB;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAC7C,IAAI,GAAE,kBAAuB,GAC5B,iBAAiB,CAmBnB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { ktArg, ktAssign, ktCall, ktClass, ktElvis, ktExprStmt, ktForIn, ktFun, ktIdent, ktIndex, ktLambda, ktListLit, ktMember, ktProp, ktRef, ktSafeMember, ktStr, ktVal, ktVar, } from "../../kt-dsl/index.js";
|
|
2
|
+
import { buildBodyStmts } from "./body.js";
|
|
3
|
+
import { buildSendAndDecodeStmts } from "./decode.js";
|
|
4
|
+
import { buildHeaderStmts } from "./headers.js";
|
|
5
|
+
import { buildRequestStmts } from "./request.js";
|
|
6
|
+
import { buildUrlStmts } from "./url.js";
|
|
7
|
+
/**
|
|
8
|
+
* Compose statement-level builders into the full body of a single impl
|
|
9
|
+
* method. Order:
|
|
10
|
+
* 1. Resolve per-call overrides — `client = options.client ?: this.client`
|
|
11
|
+
* and `baseUrl = options.baseUrl ?: client.baseUrl`. Subsequent
|
|
12
|
+
* statements reference the locals.
|
|
13
|
+
* 2. URL via `HttpUrl.Builder` (path segments + query items).
|
|
14
|
+
* 3. Initial request: `Request.Builder().url(url).method(verb, null)`.
|
|
15
|
+
* 4. Header param `builder.header(...)` calls.
|
|
16
|
+
* 5. Body wire encoding (JSON / multipart / form / binary) — also
|
|
17
|
+
* re-sets the method with the body.
|
|
18
|
+
* 6. Apply security: walk scheme names, run `Auth.apply(builder,
|
|
19
|
+
* currentUrl)`, re-attach the rewritten URL onto the builder.
|
|
20
|
+
* 7. Apply `options.headers` (last-write-wins so callers can override).
|
|
21
|
+
* 8. Delegate to `client.execute(...)` with timeout + interceptors +
|
|
22
|
+
* validator + transformer.
|
|
23
|
+
*/
|
|
24
|
+
function buildImplFun(sig) {
|
|
25
|
+
const stmts = [];
|
|
26
|
+
stmts.push(...resolveOverrideStmts());
|
|
27
|
+
stmts.push(...buildUrlStmts(sig.pathStr, sig.locatedParams));
|
|
28
|
+
stmts.push(...buildRequestStmts(sig.method));
|
|
29
|
+
stmts.push(...buildHeaderStmts(sig.locatedParams));
|
|
30
|
+
let needsMultipart = false;
|
|
31
|
+
if (sig.op.body) {
|
|
32
|
+
const bodyParam = sig.params.find((p) => p.name === "body");
|
|
33
|
+
const bodyType = bodyParam?.type ?? ktRef("ByteArray");
|
|
34
|
+
const result = buildBodyStmts(sig.op.body, sig.method, bodyType);
|
|
35
|
+
stmts.push(...result.stmts);
|
|
36
|
+
needsMultipart = result.needsMultipart;
|
|
37
|
+
}
|
|
38
|
+
if (sig.securitySchemeNames.length > 0) {
|
|
39
|
+
stmts.push(...applyAuthStmts(sig.securitySchemeNames));
|
|
40
|
+
}
|
|
41
|
+
stmts.push(applyOptionsHeadersStmt());
|
|
42
|
+
stmts.push(...buildSendAndDecodeStmts(sig));
|
|
43
|
+
// Kotlin forbids defaults on `override` methods (the interface
|
|
44
|
+
// signature carries them via the convenience extension fun).
|
|
45
|
+
const overrideParams = sig.params.map((p) => p.default === undefined ? p : { ...p, default: undefined });
|
|
46
|
+
return {
|
|
47
|
+
fun: ktFun({
|
|
48
|
+
name: sig.name,
|
|
49
|
+
params: overrideParams,
|
|
50
|
+
returnType: sig.returnType,
|
|
51
|
+
modifiers: ["override", "suspend"],
|
|
52
|
+
doc: sig.doc,
|
|
53
|
+
body: stmts,
|
|
54
|
+
}),
|
|
55
|
+
needsMultipart,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** `val client = options.client ?: this.client`; same shape for `baseUrl`. */
|
|
59
|
+
function resolveOverrideStmts() {
|
|
60
|
+
return [
|
|
61
|
+
ktVal("client", ktElvis(ktMember(ktIdent("options"), "client"), ktMember(ktIdent("this"), "client"))),
|
|
62
|
+
ktVal("baseUrl", ktElvis(ktMember(ktIdent("options"), "baseUrl"), ktMember(ktIdent("client"), "baseUrl"))),
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* `for (header in options.headers) builder.header(header.key, header.value)`
|
|
67
|
+
* — per-call header overrides, applied last so they can replace any
|
|
68
|
+
* Content-Type / auth header the impl already set.
|
|
69
|
+
*/
|
|
70
|
+
function applyOptionsHeadersStmt() {
|
|
71
|
+
return ktForIn("header", ktMember(ktIdent("options"), "headers"), [
|
|
72
|
+
ktExprStmt(ktCall(ktMember(ktIdent("builder"), "header"), [
|
|
73
|
+
ktArg(ktMember(ktIdent("header"), "key")),
|
|
74
|
+
ktArg(ktMember(ktIdent("header"), "value")),
|
|
75
|
+
])),
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Walk the spec-defined security-scheme names for this op; if the
|
|
80
|
+
* consumer has any of them configured on `client.auth`, apply it to
|
|
81
|
+
* the in-flight request. `Auth.apply(builder, url)` mutates the
|
|
82
|
+
* builder for header / cookie auth and returns the rewritten URL for
|
|
83
|
+
* query auth — we re-attach it via `builder.url(currentUrl)` after
|
|
84
|
+
* the loop.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```kotlin
|
|
88
|
+
* var currentUrl = url
|
|
89
|
+
* for (schemeName in listOf("petstore_auth", "api_key")) {
|
|
90
|
+
* client.auth[schemeName]?.let { auth ->
|
|
91
|
+
* currentUrl = auth.apply(builder, currentUrl)
|
|
92
|
+
* }
|
|
93
|
+
* }
|
|
94
|
+
* builder.url(currentUrl)
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
function applyAuthStmts(schemeNames) {
|
|
98
|
+
const lookupSubscript = ktIndex(ktMember(ktIdent("client"), "auth"), ktIdent("schemeName"));
|
|
99
|
+
return [
|
|
100
|
+
ktVar("currentUrl", ktIdent("url")),
|
|
101
|
+
ktForIn("schemeName", ktListLit(schemeNames.map((n) => ktStr(n))), [
|
|
102
|
+
ktExprStmt(ktCall(ktSafeMember(lookupSubscript, "let"), [], ktLambda(["auth"], [
|
|
103
|
+
ktAssign(ktIdent("currentUrl"), ktCall(ktMember(ktIdent("auth"), "apply"), [
|
|
104
|
+
ktArg(ktIdent("builder")),
|
|
105
|
+
ktArg(ktIdent("currentUrl")),
|
|
106
|
+
])),
|
|
107
|
+
]))),
|
|
108
|
+
]),
|
|
109
|
+
ktExprStmt(ktCall(ktMember(ktIdent("builder"), "url"), [
|
|
110
|
+
ktArg(ktIdent("currentUrl")),
|
|
111
|
+
])),
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Convert a list of `OperationSignature`s for a tag into a class that
|
|
116
|
+
* implements the matching interface and contains a working OkHttp +
|
|
117
|
+
* kotlinx-serialization impl for each operation. The class holds a
|
|
118
|
+
* single `client: APIClient` primary-ctor prop and delegates
|
|
119
|
+
* send/dispatch/decode to it.
|
|
120
|
+
*/
|
|
121
|
+
export function buildClientClass(className, interfaceName, signatures, opts = {}) {
|
|
122
|
+
const built = signatures.map(buildImplFun);
|
|
123
|
+
const modifiers = opts.open ? ["open"] : [];
|
|
124
|
+
return {
|
|
125
|
+
class: ktClass({
|
|
126
|
+
name: className,
|
|
127
|
+
superTypes: [interfaceName],
|
|
128
|
+
modifiers,
|
|
129
|
+
properties: [
|
|
130
|
+
ktProp({
|
|
131
|
+
name: "client",
|
|
132
|
+
type: ktRef("APIClient"),
|
|
133
|
+
inPrimary: true,
|
|
134
|
+
}),
|
|
135
|
+
],
|
|
136
|
+
funs: built.map((b) => b.fun),
|
|
137
|
+
}),
|
|
138
|
+
needsMultipart: built.some((b) => b.needsMultipart),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ir/impl/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type HttpMethod } from "@ir-kit/openapi-core";
|
|
2
|
+
import { type KtStmt } from "../../kt-dsl/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Initial request builder + HTTP method. Body-bearing methods can re-call
|
|
5
|
+
* `.method(verb, body)` later from the body builder; bodyless methods
|
|
6
|
+
* (`GET` / `HEAD` / `DELETE` without body) keep the `null` body set here.
|
|
7
|
+
*
|
|
8
|
+
* val builder = Request.Builder().url(url).method("GET", null)
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildRequestStmts(method: HttpMethod): ReadonlyArray<KtStmt>;
|
|
11
|
+
/** Convenience for the body builder to re-set the method when a
|
|
12
|
+
* RequestBody is produced. */
|
|
13
|
+
export declare function setMethodWithBody(method: HttpMethod, bodyExpr: import("../../kt-dsl/index.js").KtExpr): KtStmt;
|
|
14
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/ir/impl/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EACL,KAAK,MAAM,EASZ,MAAM,uBAAuB,CAAC;AAE/B;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAe3E;AAED;+BAC+B;AAC/B,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,OAAO,uBAAuB,EAAE,MAAM,GAC/C,MAAM,CAOR"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { HTTP_METHOD_LITERAL } from "@ir-kit/openapi-core";
|
|
2
|
+
import { ktArg, ktCall, ktExprStmt, ktIdent, ktMember, ktNull, ktStr, ktVal, } from "../../kt-dsl/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Initial request builder + HTTP method. Body-bearing methods can re-call
|
|
5
|
+
* `.method(verb, body)` later from the body builder; bodyless methods
|
|
6
|
+
* (`GET` / `HEAD` / `DELETE` without body) keep the `null` body set here.
|
|
7
|
+
*
|
|
8
|
+
* val builder = Request.Builder().url(url).method("GET", null)
|
|
9
|
+
*/
|
|
10
|
+
export function buildRequestStmts(method) {
|
|
11
|
+
return [
|
|
12
|
+
ktVal("builder", ktCall(ktMember(ktCall(ktMember(ktCall(ktIdent("Request.Builder"), []), "url"), [
|
|
13
|
+
ktArg(ktIdent("url")),
|
|
14
|
+
]), "method"), [ktArg(ktStr(HTTP_METHOD_LITERAL[method])), ktArg(ktNull)])),
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
/** Convenience for the body builder to re-set the method when a
|
|
18
|
+
* RequestBody is produced. */
|
|
19
|
+
export function setMethodWithBody(method, bodyExpr) {
|
|
20
|
+
return ktExprStmt(ktCall(ktMember(ktIdent("builder"), "method"), [
|
|
21
|
+
ktArg(ktStr(HTTP_METHOD_LITERAL[method])),
|
|
22
|
+
ktArg(bodyExpr),
|
|
23
|
+
]));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/ir/impl/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAmB,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAEL,KAAK,EACL,MAAM,EACN,UAAU,EACV,OAAO,EACP,QAAQ,EACR,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,uBAAuB,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,OAAO;QACL,KAAK,CACH,SAAS,EACT,MAAM,CACJ,QAAQ,CACN,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;YAC9D,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACtB,CAAC,EACF,QAAQ,CACT,EACD,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAC3D,CACF;KACF,CAAC;AACJ,CAAC;AAED;+BAC+B;AAC/B,MAAM,UAAU,iBAAiB,CAC/B,MAAkB,EAClB,QAAgD;IAEhD,OAAO,UAAU,CACf,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,EAAE;QAC7C,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,QAAQ,CAAC;KAChB,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type KtExpr, type KtType } from "../../kt-dsl/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build the kotlinx-serialization `KSerializer<T>` expression for a
|
|
4
|
+
* `KtType`. Used wherever the impl needs to feed a serializer to
|
|
5
|
+
* `Json.encodeToString(...)` / `client.execute(..., deserializer)` /
|
|
6
|
+
* `Json.decodeFromString(...)`.
|
|
7
|
+
*
|
|
8
|
+
* - `String`/`Int`/`Long`/… → `String.serializer()` etc. (built-in shortcuts)
|
|
9
|
+
* - `List<T>` → `ListSerializer(<inner>)`
|
|
10
|
+
* - `Map<K, V>` → `MapSerializer(<keySer>, <valSer>)`
|
|
11
|
+
* - nullable `T?` → `<inner>.nullable`
|
|
12
|
+
* - user type `T` → `T.serializer()` (always present on
|
|
13
|
+
* `@Serializable` data classes / enums)
|
|
14
|
+
* - `Any` → `JsonElement.serializer()` (best-effort)
|
|
15
|
+
*
|
|
16
|
+
* The orchestrator tracks which builtin imports are needed and emits
|
|
17
|
+
* the right `import kotlinx.serialization.builtins.*` line.
|
|
18
|
+
*/
|
|
19
|
+
export declare function serializerFor(t: KtType): KtExpr;
|
|
20
|
+
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../src/ir/impl/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,MAAM,EAKZ,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAqB/C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ktArg, ktCall, ktIdent, ktMember, } from "../../kt-dsl/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build the kotlinx-serialization `KSerializer<T>` expression for a
|
|
4
|
+
* `KtType`. Used wherever the impl needs to feed a serializer to
|
|
5
|
+
* `Json.encodeToString(...)` / `client.execute(..., deserializer)` /
|
|
6
|
+
* `Json.decodeFromString(...)`.
|
|
7
|
+
*
|
|
8
|
+
* - `String`/`Int`/`Long`/… → `String.serializer()` etc. (built-in shortcuts)
|
|
9
|
+
* - `List<T>` → `ListSerializer(<inner>)`
|
|
10
|
+
* - `Map<K, V>` → `MapSerializer(<keySer>, <valSer>)`
|
|
11
|
+
* - nullable `T?` → `<inner>.nullable`
|
|
12
|
+
* - user type `T` → `T.serializer()` (always present on
|
|
13
|
+
* `@Serializable` data classes / enums)
|
|
14
|
+
* - `Any` → `JsonElement.serializer()` (best-effort)
|
|
15
|
+
*
|
|
16
|
+
* The orchestrator tracks which builtin imports are needed and emits
|
|
17
|
+
* the right `import kotlinx.serialization.builtins.*` line.
|
|
18
|
+
*/
|
|
19
|
+
export function serializerFor(t) {
|
|
20
|
+
switch (t.kind) {
|
|
21
|
+
case "primitive":
|
|
22
|
+
return primitiveSerializer(t.name);
|
|
23
|
+
case "nullable":
|
|
24
|
+
return ktMember(serializerFor(t.inner), "nullable");
|
|
25
|
+
case "list":
|
|
26
|
+
return ktCall(ktIdent("ListSerializer"), [
|
|
27
|
+
ktArg(serializerFor(t.element)),
|
|
28
|
+
]);
|
|
29
|
+
case "map":
|
|
30
|
+
return ktCall(ktIdent("MapSerializer"), [
|
|
31
|
+
ktArg(serializerFor(t.key)),
|
|
32
|
+
ktArg(serializerFor(t.value)),
|
|
33
|
+
]);
|
|
34
|
+
case "ref":
|
|
35
|
+
return ktCall(ktMember(ktIdent(t.name), "serializer"), []);
|
|
36
|
+
case "func":
|
|
37
|
+
// No good serializer for closure types; falls back to JsonElement.
|
|
38
|
+
return ktCall(ktMember(ktIdent("JsonElement"), "serializer"), []);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function primitiveSerializer(name) {
|
|
42
|
+
switch (name) {
|
|
43
|
+
case "String":
|
|
44
|
+
case "Int":
|
|
45
|
+
case "Long":
|
|
46
|
+
case "Short":
|
|
47
|
+
case "Byte":
|
|
48
|
+
case "Double":
|
|
49
|
+
case "Float":
|
|
50
|
+
case "Boolean":
|
|
51
|
+
return ktCall(ktMember(ktIdent(name), "serializer"), []);
|
|
52
|
+
case "ByteArray":
|
|
53
|
+
// ByteArraySerializer is a top-level value, not a fun.
|
|
54
|
+
return ktIdent("ByteArraySerializer()");
|
|
55
|
+
case "Unit":
|
|
56
|
+
case "Any":
|
|
57
|
+
case "Nothing":
|
|
58
|
+
default:
|
|
59
|
+
return ktCall(ktMember(ktIdent("JsonElement"), "serializer"), []);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/ir/impl/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,EACL,MAAM,EACN,OAAO,EACP,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;QACtD,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;gBACvC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aAChC,CAAC,CAAC;QACL,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBACtC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3B,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC9B,CAAC,CAAC;QACL,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,KAAK,MAAM;YACT,mEAAmE;YACnE,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,KAAK,WAAW;YACd,uDAAuD;YACvD,OAAO,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,SAAS,CAAC;QACf;YACE,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|