@typespec/openapi3 0.58.0-dev.0 → 0.58.0-dev.5
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/README.md +1 -1
- package/cmd/tsp-openapi3.js +9 -0
- package/dist/src/cli/actions/convert/args.d.ts +5 -0
- package/dist/src/cli/actions/convert/args.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/args.js +2 -0
- package/dist/src/cli/actions/convert/args.js.map +1 -0
- package/dist/src/cli/actions/convert/convert-file.d.ts +4 -0
- package/dist/src/cli/actions/convert/convert-file.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/convert-file.js +26 -0
- package/dist/src/cli/actions/convert/convert-file.js.map +1 -0
- package/dist/src/cli/actions/convert/convert.d.ts +3 -0
- package/dist/src/cli/actions/convert/convert.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/convert.js +7 -0
- package/dist/src/cli/actions/convert/convert.js.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-decorators.d.ts +3 -0
- package/dist/src/cli/actions/convert/generators/generate-decorators.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-decorators.js +10 -0
- package/dist/src/cli/actions/convert/generators/generate-decorators.js.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-main.d.ts +3 -0
- package/dist/src/cli/actions/convert/generators/generate-main.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-main.js +25 -0
- package/dist/src/cli/actions/convert/generators/generate-main.js.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-model.d.ts +3 -0
- package/dist/src/cli/actions/convert/generators/generate-model.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-model.js +52 -0
- package/dist/src/cli/actions/convert/generators/generate-model.js.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-operation.d.ts +3 -0
- package/dist/src/cli/actions/convert/generators/generate-operation.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-operation.js +78 -0
- package/dist/src/cli/actions/convert/generators/generate-operation.js.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-service-info.d.ts +3 -0
- package/dist/src/cli/actions/convert/generators/generate-service-info.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-service-info.js +20 -0
- package/dist/src/cli/actions/convert/generators/generate-service-info.js.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-types.d.ts +8 -0
- package/dist/src/cli/actions/convert/generators/generate-types.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/generators/generate-types.js +168 -0
- package/dist/src/cli/actions/convert/generators/generate-types.js.map +1 -0
- package/dist/src/cli/actions/convert/interfaces.d.ts +80 -0
- package/dist/src/cli/actions/convert/interfaces.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/interfaces.js +2 -0
- package/dist/src/cli/actions/convert/interfaces.js.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-component-parameters.d.ts +12 -0
- package/dist/src/cli/actions/convert/transforms/transform-component-parameters.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-component-parameters.js +48 -0
- package/dist/src/cli/actions/convert/transforms/transform-component-parameters.js.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-component-schemas.d.ts +11 -0
- package/dist/src/cli/actions/convert/transforms/transform-component-schemas.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-component-schemas.js +76 -0
- package/dist/src/cli/actions/convert/transforms/transform-component-schemas.js.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-operation-responses.d.ts +11 -0
- package/dist/src/cli/actions/convert/transforms/transform-operation-responses.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-operation-responses.js +190 -0
- package/dist/src/cli/actions/convert/transforms/transform-operation-responses.js.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-paths.d.ts +9 -0
- package/dist/src/cli/actions/convert/transforms/transform-paths.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-paths.js +65 -0
- package/dist/src/cli/actions/convert/transforms/transform-paths.js.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-service-info.d.ts +4 -0
- package/dist/src/cli/actions/convert/transforms/transform-service-info.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transform-service-info.js +12 -0
- package/dist/src/cli/actions/convert/transforms/transform-service-info.js.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transforms.d.ts +4 -0
- package/dist/src/cli/actions/convert/transforms/transforms.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/transforms/transforms.js +26 -0
- package/dist/src/cli/actions/convert/transforms/transforms.js.map +1 -0
- package/dist/src/cli/actions/convert/utils/convert-header-name.d.ts +2 -0
- package/dist/src/cli/actions/convert/utils/convert-header-name.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/utils/convert-header-name.js +7 -0
- package/dist/src/cli/actions/convert/utils/convert-header-name.js.map +1 -0
- package/dist/src/cli/actions/convert/utils/decorators.d.ts +6 -0
- package/dist/src/cli/actions/convert/utils/decorators.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/utils/decorators.js +162 -0
- package/dist/src/cli/actions/convert/utils/decorators.js.map +1 -0
- package/dist/src/cli/actions/convert/utils/docs.d.ts +3 -0
- package/dist/src/cli/actions/convert/utils/docs.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/utils/docs.js +58 -0
- package/dist/src/cli/actions/convert/utils/docs.js.map +1 -0
- package/dist/src/cli/actions/convert/utils/supported-http-methods.d.ts +3 -0
- package/dist/src/cli/actions/convert/utils/supported-http-methods.d.ts.map +1 -0
- package/dist/src/cli/actions/convert/utils/supported-http-methods.js +9 -0
- package/dist/src/cli/actions/convert/utils/supported-http-methods.js.map +1 -0
- package/dist/src/cli/cli.d.ts +2 -0
- package/dist/src/cli/cli.d.ts.map +1 -0
- package/dist/src/cli/cli.js +66 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/cli/types.d.ts +45 -0
- package/dist/src/cli/types.d.ts.map +1 -0
- package/dist/src/cli/types.js +2 -0
- package/dist/src/cli/types.js.map +1 -0
- package/dist/src/cli/utils.d.ts +16 -0
- package/dist/src/cli/utils.d.ts.map +1 -0
- package/dist/src/cli/utils.js +43 -0
- package/dist/src/cli/utils.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib.d.ts.map +1 -1
- package/dist/src/openapi.js +9 -2
- package/dist/src/openapi.js.map +1 -1
- package/dist/src/types.d.ts +6 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/version.d.ts +2 -0
- package/dist/src/version.d.ts.map +1 -0
- package/dist/src/version.js +12 -0
- package/dist/src/version.js.map +1 -0
- package/dist/version.js +1 -0
- package/package.json +15 -7
package/README.md
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/args.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/args.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-file.d.ts","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/convert-file.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAI3C,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,iBAgBtE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import oaParser from "@readme/openapi-parser";
|
|
2
|
+
import { resolvePath } from "@typespec/compiler";
|
|
3
|
+
import { handleInternalCompilerError } from "../../utils.js";
|
|
4
|
+
import { generateMain } from "./generators/generate-main.js";
|
|
5
|
+
import { transform } from "./transforms/transforms.js";
|
|
6
|
+
export async function convertAction(host, args) {
|
|
7
|
+
// attempt to read the file
|
|
8
|
+
const fullPath = resolvePath(process.cwd(), args.path);
|
|
9
|
+
const model = await parseOpenApiFile(fullPath);
|
|
10
|
+
const program = transform(model);
|
|
11
|
+
let mainTsp;
|
|
12
|
+
try {
|
|
13
|
+
mainTsp = await generateMain(program);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
handleInternalCompilerError(err);
|
|
17
|
+
}
|
|
18
|
+
if (args["output-dir"]) {
|
|
19
|
+
await host.mkdirp(args["output-dir"]);
|
|
20
|
+
await host.writeFile(resolvePath(args["output-dir"], "main.tsp"), mainTsp);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function parseOpenApiFile(path) {
|
|
24
|
+
return oaParser.bundle(path);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=convert-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-file.js","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/convert-file.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa,EAAE,IAAoB;IACrE,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAA8B,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,mBAGvE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { generateMain } from "./generators/generate-main.js";
|
|
2
|
+
import { transform } from "./transforms/transforms.js";
|
|
3
|
+
export async function convertOpenAPI3Document(document) {
|
|
4
|
+
const program = transform(document);
|
|
5
|
+
return await generateMain(program);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/convert.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,QAA0B;IACtE,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-decorators.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASrD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAG5E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function generateDecorator({ name, args }) {
|
|
2
|
+
const hasArgs = args.length;
|
|
3
|
+
const stringifiedArguments = hasArgs ? `(${args.map((a) => JSON.stringify(a)).join(", ")})` : "";
|
|
4
|
+
return `@${name}${stringifiedArguments}`;
|
|
5
|
+
}
|
|
6
|
+
export function generateDecorators(decorators) {
|
|
7
|
+
const uniqueDecorators = new Set(decorators.map(generateDecorator));
|
|
8
|
+
return Array.from(uniqueDecorators);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=generate-decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-decorators.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-decorators.ts"],"names":[],"mappings":"AAEA,SAAS,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAqB;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,MAAM,oBAAoB,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjG,OAAO,IAAI,IAAI,GAAG,oBAAoB,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAA+B;IAChE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC5E,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-main.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKnD,wBAAsB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB5E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { formatTypeSpec } from "@typespec/compiler";
|
|
2
|
+
import { generateModel } from "./generate-model.js";
|
|
3
|
+
import { generateOperation } from "./generate-operation.js";
|
|
4
|
+
import { generateServiceInformation } from "./generate-service-info.js";
|
|
5
|
+
export async function generateMain(program) {
|
|
6
|
+
const content = `
|
|
7
|
+
import "@typespec/http";
|
|
8
|
+
import "@typespec/openapi";
|
|
9
|
+
import "@typespec/openapi3";
|
|
10
|
+
|
|
11
|
+
using Http;
|
|
12
|
+
using OpenAPI;
|
|
13
|
+
|
|
14
|
+
${generateServiceInformation(program.serviceInfo)}
|
|
15
|
+
|
|
16
|
+
${program.models.map(generateModel).join("\n\n")}
|
|
17
|
+
|
|
18
|
+
${program.operations.map(generateOperation).join("\n\n")}
|
|
19
|
+
`;
|
|
20
|
+
return formatTypeSpec(content, {
|
|
21
|
+
printWidth: 100,
|
|
22
|
+
tabWidth: 2,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=generate-main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-main.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAwB;IACzD,MAAM,OAAO,GAAG;;;;;;;;IAQd,0BAA0B,CAAC,OAAO,CAAC,WAAW,CAAC;;IAE/C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;IAE9C,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;GACvD,CAAC;IAEF,OAAO,cAAc,CAAC,OAAO,EAAE;QAC7B,UAAU,EAAE,GAAG;QACf,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-model.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAyB,MAAM,kBAAkB,CAAC;AAMxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAoB1D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { getDecoratorsForSchema } from "../utils/decorators.js";
|
|
2
|
+
import { generateDocs } from "../utils/docs.js";
|
|
3
|
+
import { generateDecorators } from "./generate-decorators.js";
|
|
4
|
+
import { generateTypeFromSchema } from "./generate-types.js";
|
|
5
|
+
export function generateModel(model) {
|
|
6
|
+
const definitions = [];
|
|
7
|
+
const modelDeclaration = generateModelDeclaration(model);
|
|
8
|
+
if (model.doc) {
|
|
9
|
+
definitions.push(generateDocs(model.doc));
|
|
10
|
+
}
|
|
11
|
+
definitions.push(...generateDecorators(model.decorators));
|
|
12
|
+
definitions.push(modelDeclaration.open);
|
|
13
|
+
definitions.push(...model.properties.map(generateModelProperty));
|
|
14
|
+
if (model.additionalProperties) {
|
|
15
|
+
definitions.push(`...${generateTypeFromSchema(model.additionalProperties)};`);
|
|
16
|
+
}
|
|
17
|
+
if (modelDeclaration.close)
|
|
18
|
+
definitions.push(modelDeclaration.close);
|
|
19
|
+
return definitions.join("\n");
|
|
20
|
+
}
|
|
21
|
+
function generateModelDeclaration(model) {
|
|
22
|
+
const modelName = model.name;
|
|
23
|
+
const modelType = model.type ?? "object";
|
|
24
|
+
if (model.is) {
|
|
25
|
+
return { open: `model ${modelName} is ${model.is};` };
|
|
26
|
+
}
|
|
27
|
+
if (!model.extends) {
|
|
28
|
+
return { open: `model ${modelName} {`, close: "}" };
|
|
29
|
+
}
|
|
30
|
+
if (modelType === "object") {
|
|
31
|
+
return { open: `model ${modelName} extends ${model.extends} {`, close: "}" };
|
|
32
|
+
}
|
|
33
|
+
switch (modelType) {
|
|
34
|
+
case "boolean":
|
|
35
|
+
case "integer":
|
|
36
|
+
case "number":
|
|
37
|
+
case "string":
|
|
38
|
+
return { open: `scalar ${modelName} extends ${model.extends};` };
|
|
39
|
+
}
|
|
40
|
+
return { open: `model ${modelName} {`, close: "}" };
|
|
41
|
+
}
|
|
42
|
+
function generateModelProperty(property) {
|
|
43
|
+
// Decorators will be a combination of top-level (parameters) and
|
|
44
|
+
// schema-level decorators.
|
|
45
|
+
const decorators = generateDecorators([
|
|
46
|
+
...property.decorators,
|
|
47
|
+
...getDecoratorsForSchema(property.schema),
|
|
48
|
+
]).join(" ");
|
|
49
|
+
const doc = property.doc ? generateDocs(property.doc) : "";
|
|
50
|
+
return `${doc}${decorators} ${property.name}${property.isOptional ? "?" : ""}: ${generateTypeFromSchema(property.schema)};`;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=generate-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-model.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-operation.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-operation.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAM1B,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,iBAAiB,GAAG,MAAM,CAsBtE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { generateResponseModelName } from "../transforms/transform-operation-responses.js";
|
|
2
|
+
import { generateDocs } from "../utils/docs.js";
|
|
3
|
+
import { generateDecorators } from "./generate-decorators.js";
|
|
4
|
+
import { generateTypeFromSchema, getRefName } from "./generate-types.js";
|
|
5
|
+
export function generateOperation(operation) {
|
|
6
|
+
const definitions = [];
|
|
7
|
+
if (operation.doc) {
|
|
8
|
+
definitions.push(generateDocs(operation.doc));
|
|
9
|
+
}
|
|
10
|
+
definitions.push(...operation.tags.map((t) => `@tag("${t}")`));
|
|
11
|
+
definitions.push(generateDecorators(operation.decorators).join(" "));
|
|
12
|
+
// generate parameters
|
|
13
|
+
const parameters = [
|
|
14
|
+
...operation.parameters.map(generateOperationParameter),
|
|
15
|
+
...generateRequestBodyParameters(operation.requestBodies),
|
|
16
|
+
];
|
|
17
|
+
const responseTypes = generateResponses(operation.operationId, operation.responses);
|
|
18
|
+
definitions.push(`op ${operation.name}(${parameters.join(", ")}): ${responseTypes.join(" | ")};`);
|
|
19
|
+
return definitions.join(" ");
|
|
20
|
+
}
|
|
21
|
+
function generateOperationParameter(parameter) {
|
|
22
|
+
if ("$ref" in parameter) {
|
|
23
|
+
// check if referencing a model or a property
|
|
24
|
+
const refName = getRefName(parameter.$ref);
|
|
25
|
+
const paramName = refName.indexOf(".") >= 0 ? refName.split(".").pop() : refName;
|
|
26
|
+
// when refName and paramName match, we're referencing a model and can spread
|
|
27
|
+
// TODO: Handle optionality
|
|
28
|
+
return refName === paramName ? `...${refName}` : `${paramName}: ${refName}`;
|
|
29
|
+
}
|
|
30
|
+
const definitions = [];
|
|
31
|
+
if (parameter.doc) {
|
|
32
|
+
definitions.push(generateDocs(parameter.doc));
|
|
33
|
+
}
|
|
34
|
+
definitions.push(...generateDecorators(parameter.decorators));
|
|
35
|
+
definitions.push(`${parameter.name}${parameter.isOptional ? "?" : ""}: ${generateTypeFromSchema(parameter.schema)}`);
|
|
36
|
+
return definitions.join(" ");
|
|
37
|
+
}
|
|
38
|
+
function generateRequestBodyParameters(requestBodies) {
|
|
39
|
+
if (!requestBodies.length) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
const definitions = [];
|
|
43
|
+
// Generate the content-type header if defined content-types is not just 'application/json'
|
|
44
|
+
const contentTypes = requestBodies.map((r) => r.contentType);
|
|
45
|
+
if (!supportsOnlyJson(contentTypes)) {
|
|
46
|
+
definitions.push(`@header contentType: ${contentTypes.map((c) => `"${c}"`).join(" | ")}`);
|
|
47
|
+
}
|
|
48
|
+
// Get the set of referenced types
|
|
49
|
+
const body = Array.from(new Set(requestBodies.filter((r) => !!r.schema).map((r) => generateTypeFromSchema(r.schema)))).join(" | ");
|
|
50
|
+
if (body) {
|
|
51
|
+
definitions.push(`@bodyRoot body: ${body}`);
|
|
52
|
+
}
|
|
53
|
+
return definitions;
|
|
54
|
+
}
|
|
55
|
+
function supportsOnlyJson(contentTypes) {
|
|
56
|
+
return contentTypes.length === 1 && contentTypes[0] === "application/json";
|
|
57
|
+
}
|
|
58
|
+
function generateResponses(operationId, responses) {
|
|
59
|
+
if (!responses) {
|
|
60
|
+
return ["void"];
|
|
61
|
+
}
|
|
62
|
+
const definitions = [];
|
|
63
|
+
for (const statusCode of Object.keys(responses)) {
|
|
64
|
+
const response = responses[statusCode];
|
|
65
|
+
definitions.push(...generateResponseForStatus(operationId, statusCode, response));
|
|
66
|
+
}
|
|
67
|
+
return definitions;
|
|
68
|
+
}
|
|
69
|
+
function generateResponseForStatus(operationId, statusCode, response) {
|
|
70
|
+
if ("$ref" in response) {
|
|
71
|
+
return [getRefName(response.$ref)];
|
|
72
|
+
}
|
|
73
|
+
if (!response.content) {
|
|
74
|
+
return [generateResponseModelName(operationId, statusCode)];
|
|
75
|
+
}
|
|
76
|
+
return Object.keys(response.content).map((contentType) => generateResponseModelName(operationId, statusCode, contentType));
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=generate-operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-operation.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-service-info.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-service-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAmBnF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { generateDocs } from "../utils/docs.js";
|
|
2
|
+
export function generateServiceInformation(serviceInfo) {
|
|
3
|
+
const definitions = [];
|
|
4
|
+
const { name, doc, ...info } = serviceInfo;
|
|
5
|
+
definitions.push(`
|
|
6
|
+
@service({
|
|
7
|
+
title: "${name}"
|
|
8
|
+
})
|
|
9
|
+
@info(${JSON.stringify(info)})
|
|
10
|
+
`);
|
|
11
|
+
if (doc) {
|
|
12
|
+
definitions.push(generateDocs(doc));
|
|
13
|
+
}
|
|
14
|
+
definitions.push(`namespace ${generateNamespaceName(name)};`);
|
|
15
|
+
return definitions.join("\n");
|
|
16
|
+
}
|
|
17
|
+
function generateNamespaceName(name) {
|
|
18
|
+
return name.replaceAll(/[^\w^\d_]+/g, "");
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=generate-service-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-service-info.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-service-info.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,UAAU,0BAA0B,CAAC,WAAgC;IACzE,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,WAAW,CAAC;IAE3C,WAAW,CAAC,IAAI,CAAC;;gBAEH,IAAI;;YAER,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEL,IAAI,GAAG,EAAE,CAAC;QACR,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,aAAa,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE9D,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { OpenAPI3Schema, Refable } from "../../../../types.js";
|
|
2
|
+
export declare function generateTypeFromSchema(schema: Refable<OpenAPI3Schema>): string;
|
|
3
|
+
export declare function getRefName(ref: string): string;
|
|
4
|
+
export declare function getArrayType(schema: OpenAPI3Schema): string;
|
|
5
|
+
export declare function getIntegerType(schema: OpenAPI3Schema): string;
|
|
6
|
+
export declare function getNumberType(schema: OpenAPI3Schema): string;
|
|
7
|
+
export declare function getStringType(schema: OpenAPI3Schema): string;
|
|
8
|
+
//# sourceMappingURL=generate-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-types.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI/D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAE9E;AAyCD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI9C;AA0DD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAY3D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAiB7D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAc5D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA2B5D"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { getDecoratorsForSchema } from "../utils/decorators.js";
|
|
2
|
+
import { generateDecorators } from "./generate-decorators.js";
|
|
3
|
+
export function generateTypeFromSchema(schema) {
|
|
4
|
+
return getTypeFromRefableSchema(schema);
|
|
5
|
+
}
|
|
6
|
+
function getTypeFromRefableSchema(schema) {
|
|
7
|
+
const hasRef = "$ref" in schema;
|
|
8
|
+
return hasRef ? getRefName(schema.$ref) : getTypeFromSchema(schema);
|
|
9
|
+
}
|
|
10
|
+
function getTypeFromSchema(schema) {
|
|
11
|
+
let type = "unknown";
|
|
12
|
+
if (schema.enum) {
|
|
13
|
+
type = getEnum(schema.enum);
|
|
14
|
+
}
|
|
15
|
+
else if (schema.anyOf) {
|
|
16
|
+
type = getAnyOfType(schema);
|
|
17
|
+
}
|
|
18
|
+
else if (schema.type === "array") {
|
|
19
|
+
type = getArrayType(schema);
|
|
20
|
+
}
|
|
21
|
+
else if (schema.type === "boolean") {
|
|
22
|
+
type = "boolean";
|
|
23
|
+
}
|
|
24
|
+
else if (schema.type === "integer") {
|
|
25
|
+
type = getIntegerType(schema);
|
|
26
|
+
}
|
|
27
|
+
else if (schema.type === "number") {
|
|
28
|
+
type = getNumberType(schema);
|
|
29
|
+
}
|
|
30
|
+
else if (schema.type === "object") {
|
|
31
|
+
type = getObjectType(schema);
|
|
32
|
+
}
|
|
33
|
+
else if (schema.oneOf) {
|
|
34
|
+
type = getOneOfType(schema);
|
|
35
|
+
}
|
|
36
|
+
else if (schema.type === "string") {
|
|
37
|
+
type = getStringType(schema);
|
|
38
|
+
}
|
|
39
|
+
if (schema.nullable) {
|
|
40
|
+
type += ` | null`;
|
|
41
|
+
}
|
|
42
|
+
if (schema.default) {
|
|
43
|
+
type += ` = ${JSON.stringify(schema.default)}`;
|
|
44
|
+
}
|
|
45
|
+
return type;
|
|
46
|
+
}
|
|
47
|
+
export function getRefName(ref) {
|
|
48
|
+
const name = ref.split("/").pop() ?? "";
|
|
49
|
+
// TODO: account for `.` in the name
|
|
50
|
+
return name;
|
|
51
|
+
}
|
|
52
|
+
function getAnyOfType(schema) {
|
|
53
|
+
const definitions = [];
|
|
54
|
+
for (const item of schema.anyOf ?? []) {
|
|
55
|
+
definitions.push(generateTypeFromSchema(item));
|
|
56
|
+
}
|
|
57
|
+
return definitions.join(" | ");
|
|
58
|
+
}
|
|
59
|
+
function getOneOfType(schema) {
|
|
60
|
+
const definitions = [];
|
|
61
|
+
for (const item of schema.oneOf ?? []) {
|
|
62
|
+
definitions.push(generateTypeFromSchema(item));
|
|
63
|
+
}
|
|
64
|
+
return definitions.join(" | ");
|
|
65
|
+
}
|
|
66
|
+
function getObjectType(schema) {
|
|
67
|
+
// If we have `additionalProperties`, treat that as an 'indexer' and convert to a record.
|
|
68
|
+
const recordType = typeof schema.additionalProperties === "object"
|
|
69
|
+
? `Record<${getTypeFromRefableSchema(schema.additionalProperties)}>`
|
|
70
|
+
: "";
|
|
71
|
+
if (!schema.properties && recordType) {
|
|
72
|
+
return recordType;
|
|
73
|
+
}
|
|
74
|
+
const requiredProps = schema.required ?? [];
|
|
75
|
+
const props = [];
|
|
76
|
+
if (schema.properties) {
|
|
77
|
+
for (const name of Object.keys(schema.properties)) {
|
|
78
|
+
const decorators = generateDecorators(getDecoratorsForSchema(schema.properties[name]))
|
|
79
|
+
.map((d) => `${d}\n`)
|
|
80
|
+
.join("");
|
|
81
|
+
const isOptional = !requiredProps.includes(name) ? "?" : "";
|
|
82
|
+
props.push(`${decorators}${name}${isOptional}: ${getTypeFromRefableSchema(schema.properties[name])}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const propertyCount = Object.keys(props).length;
|
|
86
|
+
if (recordType && !propertyCount) {
|
|
87
|
+
return recordType;
|
|
88
|
+
}
|
|
89
|
+
else if (recordType && propertyCount) {
|
|
90
|
+
props.push(`...${recordType}`);
|
|
91
|
+
}
|
|
92
|
+
return `{${props.join("; ")}}`;
|
|
93
|
+
}
|
|
94
|
+
export function getArrayType(schema) {
|
|
95
|
+
const items = schema.items;
|
|
96
|
+
if (!items) {
|
|
97
|
+
return "unknown[]";
|
|
98
|
+
}
|
|
99
|
+
if ("$ref" in items) {
|
|
100
|
+
return `${getRefName(items.$ref)}[]`;
|
|
101
|
+
}
|
|
102
|
+
// Prettier will get rid of the extra parenthesis for us
|
|
103
|
+
return `(${getTypeFromSchema(items)})[]`;
|
|
104
|
+
}
|
|
105
|
+
export function getIntegerType(schema) {
|
|
106
|
+
const format = schema.format ?? "";
|
|
107
|
+
switch (format) {
|
|
108
|
+
case "int8":
|
|
109
|
+
case "int16":
|
|
110
|
+
case "int32":
|
|
111
|
+
case "int64":
|
|
112
|
+
case "uint8":
|
|
113
|
+
case "uint16":
|
|
114
|
+
case "uint32":
|
|
115
|
+
case "uint64":
|
|
116
|
+
return format;
|
|
117
|
+
case "double-int":
|
|
118
|
+
return "safeint";
|
|
119
|
+
default:
|
|
120
|
+
return "integer";
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export function getNumberType(schema) {
|
|
124
|
+
const format = schema.format ?? "";
|
|
125
|
+
switch (format) {
|
|
126
|
+
case "decimal":
|
|
127
|
+
case "decimal128":
|
|
128
|
+
return format;
|
|
129
|
+
case "double":
|
|
130
|
+
return "float64";
|
|
131
|
+
case "float":
|
|
132
|
+
return "float32";
|
|
133
|
+
default:
|
|
134
|
+
// Could be either 'float' or 'numeric' - add FIXME?
|
|
135
|
+
return "numeric";
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export function getStringType(schema) {
|
|
139
|
+
const format = schema.format ?? "";
|
|
140
|
+
let type = "string";
|
|
141
|
+
switch (format) {
|
|
142
|
+
case "binary":
|
|
143
|
+
case "byte":
|
|
144
|
+
type = "bytes";
|
|
145
|
+
break;
|
|
146
|
+
case "date":
|
|
147
|
+
type = "plainDate";
|
|
148
|
+
break;
|
|
149
|
+
case "date-time":
|
|
150
|
+
// Can be 'offsetDateTime' or 'utcDateTime' - needs FIXME or union?
|
|
151
|
+
type = "utcDateTime";
|
|
152
|
+
break;
|
|
153
|
+
case "time":
|
|
154
|
+
type = "plainTime";
|
|
155
|
+
break;
|
|
156
|
+
case "duration":
|
|
157
|
+
type = "duration";
|
|
158
|
+
break;
|
|
159
|
+
case "uri":
|
|
160
|
+
type = "url";
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
return type;
|
|
164
|
+
}
|
|
165
|
+
function getEnum(schemaEnum) {
|
|
166
|
+
return schemaEnum.map((e) => JSON.stringify(e)).join(" | ");
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=generate-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-types.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Contact, License } from "@typespec/openapi";
|
|
2
|
+
import { OpenAPI3Encoding, OpenAPI3Responses, OpenAPI3Schema, Refable } from "../../../types.js";
|
|
3
|
+
export interface TypeSpecProgram {
|
|
4
|
+
serviceInfo: TypeSpecServiceInfo;
|
|
5
|
+
models: TypeSpecModel[];
|
|
6
|
+
augmentations: TypeSpecAugmentation[];
|
|
7
|
+
operations: TypeSpecOperation[];
|
|
8
|
+
}
|
|
9
|
+
export interface TypeSpecServiceInfo {
|
|
10
|
+
name: string;
|
|
11
|
+
doc?: string;
|
|
12
|
+
version: string;
|
|
13
|
+
termsOfService?: string;
|
|
14
|
+
contact?: Contact;
|
|
15
|
+
license?: License;
|
|
16
|
+
summary?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface TypeSpecDecorator {
|
|
19
|
+
name: string;
|
|
20
|
+
args: (object | number | string)[];
|
|
21
|
+
}
|
|
22
|
+
export interface TypeSpecAugmentation extends TypeSpecDecorator {
|
|
23
|
+
target: string;
|
|
24
|
+
}
|
|
25
|
+
export interface TypeSpecModel {
|
|
26
|
+
name: string;
|
|
27
|
+
doc?: string;
|
|
28
|
+
decorators: TypeSpecDecorator[];
|
|
29
|
+
properties: TypeSpecModelProperty[];
|
|
30
|
+
additionalProperties?: Refable<OpenAPI3Schema>;
|
|
31
|
+
/**
|
|
32
|
+
* Note: Only one of `extends` or `is` should be specified.
|
|
33
|
+
*/
|
|
34
|
+
extends?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Note: Only one of `extends` or `is` should be specified.
|
|
37
|
+
*/
|
|
38
|
+
is?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Defaults to 'object'
|
|
41
|
+
*/
|
|
42
|
+
type?: OpenAPI3Schema["type"];
|
|
43
|
+
}
|
|
44
|
+
export interface TypeSpecModelProperty {
|
|
45
|
+
name: string;
|
|
46
|
+
isOptional: boolean;
|
|
47
|
+
doc?: string;
|
|
48
|
+
/**
|
|
49
|
+
* A partial list of decorators that can't be ascertained from
|
|
50
|
+
* the schema.
|
|
51
|
+
* Example: location decorators for parameters
|
|
52
|
+
*/
|
|
53
|
+
decorators: TypeSpecDecorator[];
|
|
54
|
+
schema: Refable<OpenAPI3Schema>;
|
|
55
|
+
}
|
|
56
|
+
export interface TypeSpecOperation {
|
|
57
|
+
name: string;
|
|
58
|
+
doc?: string;
|
|
59
|
+
decorators: TypeSpecDecorator[];
|
|
60
|
+
operationId?: string;
|
|
61
|
+
parameters: Refable<TypeSpecOperationParameter>[];
|
|
62
|
+
requestBodies: TypeSpecRequestBody[];
|
|
63
|
+
responses: OpenAPI3Responses;
|
|
64
|
+
tags: string[];
|
|
65
|
+
}
|
|
66
|
+
export interface TypeSpecOperationParameter {
|
|
67
|
+
name: string;
|
|
68
|
+
doc?: string;
|
|
69
|
+
decorators: TypeSpecDecorator[];
|
|
70
|
+
isOptional: boolean;
|
|
71
|
+
schema: Refable<OpenAPI3Schema>;
|
|
72
|
+
}
|
|
73
|
+
export interface TypeSpecRequestBody {
|
|
74
|
+
contentType: string;
|
|
75
|
+
doc?: string;
|
|
76
|
+
isOptional: boolean;
|
|
77
|
+
encoding?: Record<string, OpenAPI3Encoding>;
|
|
78
|
+
schema?: Refable<OpenAPI3Schema>;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=interfaces.d.ts.map
|