@typespec/openapi3 0.58.0-dev.1 → 0.58.0-dev.6

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.
Files changed (109) hide show
  1. package/README.md +1 -1
  2. package/cmd/tsp-openapi3.js +9 -0
  3. package/dist/src/cli/actions/convert/args.d.ts +5 -0
  4. package/dist/src/cli/actions/convert/args.d.ts.map +1 -0
  5. package/dist/src/cli/actions/convert/args.js +2 -0
  6. package/dist/src/cli/actions/convert/args.js.map +1 -0
  7. package/dist/src/cli/actions/convert/convert-file.d.ts +4 -0
  8. package/dist/src/cli/actions/convert/convert-file.d.ts.map +1 -0
  9. package/dist/src/cli/actions/convert/convert-file.js +40 -0
  10. package/dist/src/cli/actions/convert/convert-file.js.map +1 -0
  11. package/dist/src/cli/actions/convert/convert.d.ts +3 -0
  12. package/dist/src/cli/actions/convert/convert.d.ts.map +1 -0
  13. package/dist/src/cli/actions/convert/convert.js +17 -0
  14. package/dist/src/cli/actions/convert/convert.js.map +1 -0
  15. package/dist/src/cli/actions/convert/generators/generate-decorators.d.ts +3 -0
  16. package/dist/src/cli/actions/convert/generators/generate-decorators.d.ts.map +1 -0
  17. package/dist/src/cli/actions/convert/generators/generate-decorators.js +10 -0
  18. package/dist/src/cli/actions/convert/generators/generate-decorators.js.map +1 -0
  19. package/dist/src/cli/actions/convert/generators/generate-main.d.ts +3 -0
  20. package/dist/src/cli/actions/convert/generators/generate-main.d.ts.map +1 -0
  21. package/dist/src/cli/actions/convert/generators/generate-main.js +20 -0
  22. package/dist/src/cli/actions/convert/generators/generate-main.js.map +1 -0
  23. package/dist/src/cli/actions/convert/generators/generate-model.d.ts +3 -0
  24. package/dist/src/cli/actions/convert/generators/generate-model.d.ts.map +1 -0
  25. package/dist/src/cli/actions/convert/generators/generate-model.js +52 -0
  26. package/dist/src/cli/actions/convert/generators/generate-model.js.map +1 -0
  27. package/dist/src/cli/actions/convert/generators/generate-operation.d.ts +3 -0
  28. package/dist/src/cli/actions/convert/generators/generate-operation.d.ts.map +1 -0
  29. package/dist/src/cli/actions/convert/generators/generate-operation.js +78 -0
  30. package/dist/src/cli/actions/convert/generators/generate-operation.js.map +1 -0
  31. package/dist/src/cli/actions/convert/generators/generate-service-info.d.ts +3 -0
  32. package/dist/src/cli/actions/convert/generators/generate-service-info.d.ts.map +1 -0
  33. package/dist/src/cli/actions/convert/generators/generate-service-info.js +20 -0
  34. package/dist/src/cli/actions/convert/generators/generate-service-info.js.map +1 -0
  35. package/dist/src/cli/actions/convert/generators/generate-types.d.ts +8 -0
  36. package/dist/src/cli/actions/convert/generators/generate-types.d.ts.map +1 -0
  37. package/dist/src/cli/actions/convert/generators/generate-types.js +168 -0
  38. package/dist/src/cli/actions/convert/generators/generate-types.js.map +1 -0
  39. package/dist/src/cli/actions/convert/interfaces.d.ts +80 -0
  40. package/dist/src/cli/actions/convert/interfaces.d.ts.map +1 -0
  41. package/dist/src/cli/actions/convert/interfaces.js +2 -0
  42. package/dist/src/cli/actions/convert/interfaces.js.map +1 -0
  43. package/dist/src/cli/actions/convert/transforms/transform-component-parameters.d.ts +12 -0
  44. package/dist/src/cli/actions/convert/transforms/transform-component-parameters.d.ts.map +1 -0
  45. package/dist/src/cli/actions/convert/transforms/transform-component-parameters.js +48 -0
  46. package/dist/src/cli/actions/convert/transforms/transform-component-parameters.js.map +1 -0
  47. package/dist/src/cli/actions/convert/transforms/transform-component-schemas.d.ts +11 -0
  48. package/dist/src/cli/actions/convert/transforms/transform-component-schemas.d.ts.map +1 -0
  49. package/dist/src/cli/actions/convert/transforms/transform-component-schemas.js +76 -0
  50. package/dist/src/cli/actions/convert/transforms/transform-component-schemas.js.map +1 -0
  51. package/dist/src/cli/actions/convert/transforms/transform-operation-responses.d.ts +11 -0
  52. package/dist/src/cli/actions/convert/transforms/transform-operation-responses.d.ts.map +1 -0
  53. package/dist/src/cli/actions/convert/transforms/transform-operation-responses.js +190 -0
  54. package/dist/src/cli/actions/convert/transforms/transform-operation-responses.js.map +1 -0
  55. package/dist/src/cli/actions/convert/transforms/transform-paths.d.ts +9 -0
  56. package/dist/src/cli/actions/convert/transforms/transform-paths.d.ts.map +1 -0
  57. package/dist/src/cli/actions/convert/transforms/transform-paths.js +65 -0
  58. package/dist/src/cli/actions/convert/transforms/transform-paths.js.map +1 -0
  59. package/dist/src/cli/actions/convert/transforms/transform-service-info.d.ts +4 -0
  60. package/dist/src/cli/actions/convert/transforms/transform-service-info.d.ts.map +1 -0
  61. package/dist/src/cli/actions/convert/transforms/transform-service-info.js +12 -0
  62. package/dist/src/cli/actions/convert/transforms/transform-service-info.js.map +1 -0
  63. package/dist/src/cli/actions/convert/transforms/transforms.d.ts +4 -0
  64. package/dist/src/cli/actions/convert/transforms/transforms.d.ts.map +1 -0
  65. package/dist/src/cli/actions/convert/transforms/transforms.js +26 -0
  66. package/dist/src/cli/actions/convert/transforms/transforms.js.map +1 -0
  67. package/dist/src/cli/actions/convert/utils/convert-header-name.d.ts +2 -0
  68. package/dist/src/cli/actions/convert/utils/convert-header-name.d.ts.map +1 -0
  69. package/dist/src/cli/actions/convert/utils/convert-header-name.js +7 -0
  70. package/dist/src/cli/actions/convert/utils/convert-header-name.js.map +1 -0
  71. package/dist/src/cli/actions/convert/utils/decorators.d.ts +6 -0
  72. package/dist/src/cli/actions/convert/utils/decorators.d.ts.map +1 -0
  73. package/dist/src/cli/actions/convert/utils/decorators.js +162 -0
  74. package/dist/src/cli/actions/convert/utils/decorators.js.map +1 -0
  75. package/dist/src/cli/actions/convert/utils/docs.d.ts +3 -0
  76. package/dist/src/cli/actions/convert/utils/docs.d.ts.map +1 -0
  77. package/dist/src/cli/actions/convert/utils/docs.js +58 -0
  78. package/dist/src/cli/actions/convert/utils/docs.js.map +1 -0
  79. package/dist/src/cli/actions/convert/utils/supported-http-methods.d.ts +3 -0
  80. package/dist/src/cli/actions/convert/utils/supported-http-methods.d.ts.map +1 -0
  81. package/dist/src/cli/actions/convert/utils/supported-http-methods.js +9 -0
  82. package/dist/src/cli/actions/convert/utils/supported-http-methods.js.map +1 -0
  83. package/dist/src/cli/cli.d.ts +2 -0
  84. package/dist/src/cli/cli.d.ts.map +1 -0
  85. package/dist/src/cli/cli.js +66 -0
  86. package/dist/src/cli/cli.js.map +1 -0
  87. package/dist/src/cli/types.d.ts +45 -0
  88. package/dist/src/cli/types.d.ts.map +1 -0
  89. package/dist/src/cli/types.js +2 -0
  90. package/dist/src/cli/types.js.map +1 -0
  91. package/dist/src/cli/utils.d.ts +16 -0
  92. package/dist/src/cli/utils.d.ts.map +1 -0
  93. package/dist/src/cli/utils.js +43 -0
  94. package/dist/src/cli/utils.js.map +1 -0
  95. package/dist/src/index.d.ts +1 -0
  96. package/dist/src/index.d.ts.map +1 -1
  97. package/dist/src/index.js +1 -0
  98. package/dist/src/index.js.map +1 -1
  99. package/dist/src/lib.d.ts.map +1 -1
  100. package/dist/src/openapi.js +7 -0
  101. package/dist/src/openapi.js.map +1 -1
  102. package/dist/src/types.d.ts +6 -1
  103. package/dist/src/types.d.ts.map +1 -1
  104. package/dist/src/version.d.ts +2 -0
  105. package/dist/src/version.d.ts.map +1 -0
  106. package/dist/src/version.js +12 -0
  107. package/dist/src/version.js.map +1 -0
  108. package/dist/version.js +1 -0
  109. package/package.json +15 -7
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @typespec/openapi3
2
2
 
3
- TypeSpec library for emitting OpenAPI 3.0 from the TypeSpec REST protocol binding
3
+ TypeSpec library for emitting OpenAPI 3.0 from the TypeSpec REST protocol binding and converting OpenAPI3 to TypeSpec
4
4
 
5
5
  ## Install
6
6
 
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { main } from "../dist/src/cli/cli.js";
3
+
4
+ main().catch((error) => {
5
+ // eslint-disable-next-line no-console
6
+ console.error(error);
7
+
8
+ process.exit(1);
9
+ });
@@ -0,0 +1,5 @@
1
+ export interface ConvertCliArgs {
2
+ "output-dir": string;
3
+ path: string;
4
+ }
5
+ //# sourceMappingURL=args.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/args.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { CliHost } from "../../types.js";
2
+ import { ConvertCliArgs } from "./args.js";
3
+ export declare function convertAction(host: CliHost, args: ConvertCliArgs): Promise<void>;
4
+ //# sourceMappingURL=convert-file.d.ts.map
@@ -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,iBA+BtE"}
@@ -0,0 +1,40 @@
1
+ import oaParser from "@readme/openapi-parser";
2
+ import { formatTypeSpec, 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 = generateMain(program);
14
+ }
15
+ catch (err) {
16
+ handleInternalCompilerError(err);
17
+ }
18
+ let formatError;
19
+ // attempt to format the TSP and track if it threw an error
20
+ try {
21
+ mainTsp = await formatTypeSpec(mainTsp, {
22
+ printWidth: 100,
23
+ tabWidth: 2,
24
+ });
25
+ }
26
+ catch (err) {
27
+ formatError = err;
28
+ }
29
+ if (args["output-dir"]) {
30
+ await host.mkdirp(args["output-dir"]);
31
+ await host.writeFile(resolvePath(args["output-dir"], "main.tsp"), mainTsp);
32
+ }
33
+ if (formatError) {
34
+ handleInternalCompilerError(formatError);
35
+ }
36
+ }
37
+ function parseOpenApiFile(path) {
38
+ return oaParser.bundle(path);
39
+ }
40
+ //# 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,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjE,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,YAAY,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,WAAW,CAAC;IAChB,2DAA2D;IAC3D,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE;YACtC,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,GAAG,GAAG,CAAC;IACpB,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;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,2BAA2B,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAA8B,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { OpenAPI3Document } from "../../../types.js";
2
+ export declare function convertOpenAPI3Document(document: OpenAPI3Document): Promise<string>;
3
+ //# sourceMappingURL=convert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/convert.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIrD,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,mBAWvE"}
@@ -0,0 +1,17 @@
1
+ import { formatTypeSpec } from "@typespec/compiler";
2
+ import { generateMain } from "./generators/generate-main.js";
3
+ import { transform } from "./transforms/transforms.js";
4
+ export async function convertOpenAPI3Document(document) {
5
+ const program = transform(document);
6
+ const content = generateMain(program);
7
+ try {
8
+ return await formatTypeSpec(content, {
9
+ printWidth: 100,
10
+ tabWidth: 2,
11
+ });
12
+ }
13
+ catch {
14
+ return content;
15
+ }
16
+ }
17
+ //# sourceMappingURL=convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,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,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,CAAC,OAAO,EAAE;YACnC,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TypeSpecDecorator } from "../interfaces.js";
2
+ export declare function generateDecorators(decorators: TypeSpecDecorator[]): string[];
3
+ //# sourceMappingURL=generate-decorators.d.ts.map
@@ -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,3 @@
1
+ import { TypeSpecProgram } from "../interfaces.js";
2
+ export declare function generateMain(program: TypeSpecProgram): string;
3
+ //# sourceMappingURL=generate-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-main.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/generators/generate-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAKnD,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAe7D"}
@@ -0,0 +1,20 @@
1
+ import { generateModel } from "./generate-model.js";
2
+ import { generateOperation } from "./generate-operation.js";
3
+ import { generateServiceInformation } from "./generate-service-info.js";
4
+ export function generateMain(program) {
5
+ return `
6
+ import "@typespec/http";
7
+ import "@typespec/openapi";
8
+ import "@typespec/openapi3";
9
+
10
+ using Http;
11
+ using OpenAPI;
12
+
13
+ ${generateServiceInformation(program.serviceInfo)}
14
+
15
+ ${program.models.map(generateModel).join("\n\n")}
16
+
17
+ ${program.operations.map(generateOperation).join("\n\n")}
18
+ `;
19
+ }
20
+ //# 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":"AACA,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,UAAU,YAAY,CAAC,OAAwB;IACnD,OAAO;;;;;;;;IAQL,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;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TypeSpecModel } from "../interfaces.js";
2
+ export declare function generateModel(model: TypeSpecModel): string;
3
+ //# sourceMappingURL=generate-model.d.ts.map
@@ -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,3 @@
1
+ import { TypeSpecOperation } from "../interfaces.js";
2
+ export declare function generateOperation(operation: TypeSpecOperation): string;
3
+ //# sourceMappingURL=generate-operation.d.ts.map
@@ -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,3 @@
1
+ import { TypeSpecServiceInfo } from "../interfaces.js";
2
+ export declare function generateServiceInformation(serviceInfo: TypeSpecServiceInfo): string;
3
+ //# sourceMappingURL=generate-service-info.d.ts.map
@@ -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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"}