@typespec/openapi3 0.58.0-dev.1 → 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.
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 +26 -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 +7 -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 +25 -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjG,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,mBAAmB,CAAC;IACjC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC,0BAA0B,CAAC,EAAE,CAAC;IAClD,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CAClC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../../src/cli/actions/convert/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { OpenAPI3Components } from "../../../../types.js";
2
+ import { TypeSpecModel } from "../interfaces.js";
3
+ /**
4
+ * Transforms #/components/parameters into TypeSpec models.
5
+ * Overwrites properties of existing models if an existing model already exists.
6
+ * Populates the provided `models` array in-place.
7
+ * @param models
8
+ * @param parameters
9
+ * @returns
10
+ */
11
+ export declare function transformComponentParameters(models: TypeSpecModel[], parameters?: OpenAPI3Components["parameters"]): void;
12
+ //# sourceMappingURL=transform-component-parameters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-component-parameters.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-component-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAqB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAyB,MAAM,kBAAkB,CAAC;AAGxE;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,aAAa,EAAE,EACvB,UAAU,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,GAC5C,IAAI,CA8BN"}
@@ -0,0 +1,48 @@
1
+ import { getParameterDecorators } from "../utils/decorators.js";
2
+ /**
3
+ * Transforms #/components/parameters into TypeSpec models.
4
+ * Overwrites properties of existing models if an existing model already exists.
5
+ * Populates the provided `models` array in-place.
6
+ * @param models
7
+ * @param parameters
8
+ * @returns
9
+ */
10
+ export function transformComponentParameters(models, parameters) {
11
+ if (!parameters)
12
+ return;
13
+ for (const name of Object.keys(parameters)) {
14
+ // Determine what the name of the parameter's model is since name may point at
15
+ // a nested property.
16
+ const modelName = name.indexOf(".") < 0 ? name : name.split(".").shift();
17
+ // Check if model already exists; if not, create it
18
+ let model = models.find((m) => m.name === modelName);
19
+ if (!model) {
20
+ model = {
21
+ name: modelName,
22
+ decorators: [],
23
+ properties: [],
24
+ };
25
+ models.push(model);
26
+ }
27
+ const parameter = parameters[name];
28
+ const modelParameter = getModelPropertyFromParameter(parameter);
29
+ // Check if the model already has a property of the matching name
30
+ const propIndex = model.properties.findIndex((p) => p.name === modelParameter.name);
31
+ if (propIndex >= 0) {
32
+ model.properties[propIndex] = modelParameter;
33
+ }
34
+ else {
35
+ model.properties.push(modelParameter);
36
+ }
37
+ }
38
+ }
39
+ function getModelPropertyFromParameter(parameter) {
40
+ return {
41
+ name: parameter.name,
42
+ isOptional: !parameter.required,
43
+ doc: parameter.description ?? parameter.schema.description,
44
+ decorators: getParameterDecorators(parameter),
45
+ schema: parameter.schema,
46
+ };
47
+ }
48
+ //# sourceMappingURL=transform-component-parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-component-parameters.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-component-parameters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAuB,EACvB,UAA6C;IAE7C,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,8EAA8E;QAC9E,qBAAqB;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAG,CAAC;QAE1E,mDAAmD;QACnD,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG;gBACN,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,EAAE;gBACd,UAAU,EAAE,EAAE;aACf,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,6BAA6B,CAAC,SAAS,CAAC,CAAC;QAEhE,iEAAiE;QACjE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC;QACpF,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CAAC,SAA4B;IACjE,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,UAAU,EAAE,CAAC,SAAS,CAAC,QAAQ;QAC/B,GAAG,EAAE,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW;QAC1D,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC;QAC7C,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { OpenAPI3Components } from "../../../../types.js";
2
+ import { TypeSpecModel } from "../interfaces.js";
3
+ /**
4
+ * Transforms #/components/schemas into TypeSpec models.
5
+ * Populates the provided `models` array in-place.
6
+ * @param models
7
+ * @param schemas
8
+ * @returns
9
+ */
10
+ export declare function transformComponentSchemas(models: TypeSpecModel[], schemas?: OpenAPI3Components["schemas"]): void;
11
+ //# sourceMappingURL=transform-component-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-component-schemas.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-component-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAkB,MAAM,sBAAsB,CAAC;AAQ1E,OAAO,EAAE,aAAa,EAAyB,MAAM,kBAAkB,CAAC;AAGxE;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,GACtC,IAAI,CAmBN"}
@@ -0,0 +1,76 @@
1
+ import { getArrayType, getIntegerType, getNumberType, getRefName, getStringType, } from "../generators/generate-types.js";
2
+ import { getDecoratorsForSchema } from "../utils/decorators.js";
3
+ /**
4
+ * Transforms #/components/schemas into TypeSpec models.
5
+ * Populates the provided `models` array in-place.
6
+ * @param models
7
+ * @param schemas
8
+ * @returns
9
+ */
10
+ export function transformComponentSchemas(models, schemas) {
11
+ if (!schemas)
12
+ return;
13
+ for (const name of Object.keys(schemas)) {
14
+ const schema = schemas[name];
15
+ const extendsParent = getModelExtends(schema);
16
+ const isParent = getModelIs(schema);
17
+ models.push({
18
+ name: name.replace(/-/g, "_"),
19
+ decorators: [...getDecoratorsForSchema(schema)],
20
+ doc: schema.description,
21
+ properties: getModelPropertiesFromObjectSchema(schema),
22
+ additionalProperties: typeof schema.additionalProperties === "object" ? schema.additionalProperties : undefined,
23
+ extends: extendsParent,
24
+ is: isParent,
25
+ type: schema.type,
26
+ });
27
+ }
28
+ }
29
+ function getModelExtends(schema) {
30
+ switch (schema.type) {
31
+ case "boolean":
32
+ return "boolean";
33
+ case "integer":
34
+ return getIntegerType(schema);
35
+ case "number":
36
+ return getNumberType(schema);
37
+ case "string":
38
+ return getStringType(schema);
39
+ }
40
+ if (schema.type !== "object" || !schema.allOf) {
41
+ return;
42
+ }
43
+ if (schema.allOf.length !== 1) {
44
+ // TODO: Emit warning - can't extend more than 1 model
45
+ return;
46
+ }
47
+ const parent = schema.allOf[0];
48
+ if (!parent || !("$ref" in parent)) {
49
+ // TODO: Error getting parent - must be a reference, not expression
50
+ return;
51
+ }
52
+ return getRefName(parent.$ref);
53
+ }
54
+ function getModelIs(schema) {
55
+ if (schema.type !== "array") {
56
+ return;
57
+ }
58
+ return getArrayType(schema);
59
+ }
60
+ function getModelPropertiesFromObjectSchema({ properties, required = [], }) {
61
+ if (!properties)
62
+ return [];
63
+ const modelProperties = [];
64
+ for (const name of Object.keys(properties)) {
65
+ const property = properties[name];
66
+ modelProperties.push({
67
+ name,
68
+ doc: property.description,
69
+ schema: property,
70
+ isOptional: !required.includes(name),
71
+ decorators: [...getDecoratorsForSchema(property)],
72
+ });
73
+ }
74
+ return modelProperties;
75
+ }
76
+ //# sourceMappingURL=transform-component-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-component-schemas.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-component-schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { OpenAPI3Document } from "../../../../types.js";
2
+ import { TypeSpecModel } from "../interfaces.js";
3
+ /**
4
+ * Transforms #/paths/{route}/{httpMethod}/responses into TypeSpec models.
5
+ * Populates the provided `models` array in-place.
6
+ * @param models
7
+ * @param document
8
+ */
9
+ export declare function transformAllOperationResponses(models: TypeSpecModel[], document: OpenAPI3Document): void;
10
+ export declare function generateResponseModelName(operationId: string, statusCode: string, contentType?: string): string;
11
+ //# sourceMappingURL=transform-operation-responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-operation-responses.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-operation-responses.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAMjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAqB,aAAa,EAAyB,MAAM,kBAAkB,CAAC;AAU3F;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,aAAa,EAAE,EACvB,QAAQ,EAAE,gBAAgB,GACzB,IAAI,CAKN;AA8KD,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CASR"}
@@ -0,0 +1,190 @@
1
+ import { convertHeaderName } from "../utils/convert-header-name.js";
2
+ import { getDecoratorsForSchema, getExtensions } from "../utils/decorators.js";
3
+ import { supportedHttpMethods } from "../utils/supported-http-methods.js";
4
+ /**
5
+ * Transforms #/paths/{route}/{httpMethod}/responses into TypeSpec models.
6
+ * Populates the provided `models` array in-place.
7
+ * @param models
8
+ * @param document
9
+ */
10
+ export function transformAllOperationResponses(models, document) {
11
+ const allOperationResponses = collectOpenAPI3OperationResponses(document);
12
+ for (const { operationId, operationResponses } of allOperationResponses) {
13
+ transformOperationResponses(models, operationId, operationResponses);
14
+ }
15
+ }
16
+ function collectOpenAPI3OperationResponses(document) {
17
+ const allOperationResponses = [];
18
+ const paths = document.paths ?? {};
19
+ for (const route of Object.keys(paths)) {
20
+ const path = paths[route];
21
+ for (const verb of supportedHttpMethods) {
22
+ const operation = path[verb];
23
+ if (!operation)
24
+ continue;
25
+ const operationResponses = operation.responses ?? {};
26
+ allOperationResponses.push({
27
+ operationId: operation.operationId,
28
+ operationResponses,
29
+ });
30
+ }
31
+ }
32
+ return allOperationResponses;
33
+ }
34
+ function transformOperationResponses(models, operationId, operationResponses) {
35
+ const rootDecorators = getExtensions(operationResponses);
36
+ for (const statusCode of Object.keys(operationResponses)) {
37
+ const response = operationResponses[statusCode];
38
+ const decorators = [...rootDecorators];
39
+ if ("$ref" in response) {
40
+ //TODO: Support for referencing #/components/responseBodies
41
+ return;
42
+ }
43
+ // These headers will be applied to all of the models for this operation/statusCode
44
+ const commonProperties = [];
45
+ for (const name of Object.keys(response.headers ?? {})) {
46
+ const property = convertHeaderToProperty(name, response.headers[name]);
47
+ if (property)
48
+ commonProperties.push(property);
49
+ }
50
+ decorators.push(...getExtensions(response));
51
+ // `default` status code is treated as the fallback for any status codes returned that aren't defined.
52
+ if (statusCode === "default") {
53
+ decorators.push({ name: "defaultResponse", args: [] });
54
+ }
55
+ else {
56
+ commonProperties.push(convertStatusCodeToProperty(statusCode));
57
+ }
58
+ if (isErrorStatusCode(statusCode)) {
59
+ decorators.push({ name: "error", args: [] });
60
+ }
61
+ if (!response.content) {
62
+ // This is common when there is no actual request body, just a statusCode, e.g. for errors
63
+ models.push({
64
+ name: generateResponseModelName(operationId, statusCode),
65
+ decorators,
66
+ properties: commonProperties,
67
+ doc: response.description,
68
+ });
69
+ }
70
+ else {
71
+ // An operation may produce multiple content types, so need a model for each one.
72
+ for (const contentType of Object.keys(response.content ?? {})) {
73
+ const properties = [...commonProperties];
74
+ const contentBody = response.content[contentType];
75
+ // Wouldn't expect schema can be undefined since that implies contentType is not needed.
76
+ if (contentBody.schema) {
77
+ properties.push({
78
+ name: "body",
79
+ isOptional: false, // TODO: use the real value
80
+ decorators: [{ name: "bodyRoot", args: [] }],
81
+ schema: contentBody.schema,
82
+ });
83
+ }
84
+ // Default is application/json, so it doesn't need to be specified
85
+ if (contentType !== "application/json") {
86
+ properties.push({
87
+ name: "contentType",
88
+ decorators: [{ name: "header", args: [] }],
89
+ isOptional: false,
90
+ schema: { type: "string", enum: [contentType] },
91
+ });
92
+ }
93
+ models.push({
94
+ name: generateResponseModelName(operationId, statusCode, contentType),
95
+ decorators,
96
+ properties,
97
+ doc: response.description,
98
+ });
99
+ }
100
+ }
101
+ }
102
+ }
103
+ function convertHeaderToProperty(name, meta) {
104
+ const normalizedName = convertHeaderName(name);
105
+ // TODO: handle style
106
+ const headerDecorator = { name: "header", args: [] };
107
+ if (normalizedName !== name) {
108
+ headerDecorator.args.push(name);
109
+ }
110
+ if ("$ref" in meta) {
111
+ // Unhandled right now
112
+ return;
113
+ }
114
+ return {
115
+ name: normalizedName,
116
+ decorators: [headerDecorator, ...getDecoratorsForSchema(meta.schema)],
117
+ doc: meta.description ?? meta.schema.description,
118
+ isOptional: !meta.required,
119
+ schema: meta.schema,
120
+ };
121
+ }
122
+ function convertStatusCodeToProperty(statusCode) {
123
+ const schema = { type: "integer", format: "int32" };
124
+ if (statusCode === "1XX") {
125
+ schema.minimum = 100;
126
+ schema.maximum = 199;
127
+ }
128
+ else if (statusCode === "2XX") {
129
+ schema.minimum = 200;
130
+ schema.maximum = 299;
131
+ }
132
+ else if (statusCode === "3XX") {
133
+ schema.minimum = 300;
134
+ schema.maximum = 399;
135
+ }
136
+ else if (statusCode === "4XX") {
137
+ schema.minimum = 400;
138
+ schema.maximum = 499;
139
+ }
140
+ else if (statusCode === "5XX") {
141
+ schema.minimum = 500;
142
+ schema.maximum = 599;
143
+ }
144
+ else {
145
+ const literalStatusCode = parseInt(statusCode, 10);
146
+ if (!isValidLiteralStatusCode(literalStatusCode)) {
147
+ // TODO: Emit warning or // FIXME
148
+ }
149
+ else {
150
+ schema.enum = [literalStatusCode];
151
+ }
152
+ }
153
+ return {
154
+ name: "statusCode",
155
+ schema,
156
+ decorators: [{ name: "statusCode", args: [] }],
157
+ isOptional: false,
158
+ };
159
+ }
160
+ function isValidLiteralStatusCode(statusCode) {
161
+ return isFinite(statusCode) && statusCode >= 100 && statusCode <= 599;
162
+ }
163
+ function isErrorStatusCode(statusCode) {
164
+ if (["1XX", "2XX", "3XX", "default"].includes(statusCode)) {
165
+ return false;
166
+ }
167
+ else if (["4XX", "5XX"].includes(statusCode)) {
168
+ return true;
169
+ }
170
+ const literalStatusCode = parseInt(statusCode, 10);
171
+ return isFinite(literalStatusCode) && literalStatusCode >= 400;
172
+ }
173
+ export function generateResponseModelName(operationId, statusCode, contentType) {
174
+ if (statusCode === "default") {
175
+ statusCode = "Default";
176
+ }
177
+ let modelName = `${operationId}${statusCode}`;
178
+ if (contentType) {
179
+ modelName += convertContentType(contentType);
180
+ }
181
+ return modelName + "Response";
182
+ }
183
+ function convertContentType(contentType) {
184
+ return contentType
185
+ .replaceAll("*", "Star")
186
+ .split("/")
187
+ .map((s) => s.substring(0, 1).toUpperCase() + s.substring(1))
188
+ .join("");
189
+ }
190
+ //# sourceMappingURL=transform-operation-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-operation-responses.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-operation-responses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { OpenAPI3PathItem } from "../../../../types.js";
2
+ import { TypeSpecOperation } from "../interfaces.js";
3
+ /**
4
+ * Transforms each operation defined under #/paths/{route}/{httpMethod} into a TypeSpec operation.
5
+ * @param paths
6
+ * @returns
7
+ */
8
+ export declare function transformPaths(paths: Record<string, OpenAPI3PathItem>): TypeSpecOperation[];
9
+ //# sourceMappingURL=transform-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-paths.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAGjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAI1B;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,iBAAiB,EAAE,CA8B3F"}
@@ -0,0 +1,65 @@
1
+ import { getExtensions, getParameterDecorators } from "../utils/decorators.js";
2
+ import { supportedHttpMethods } from "../utils/supported-http-methods.js";
3
+ /**
4
+ * Transforms each operation defined under #/paths/{route}/{httpMethod} into a TypeSpec operation.
5
+ * @param paths
6
+ * @returns
7
+ */
8
+ export function transformPaths(paths) {
9
+ const operations = [];
10
+ for (const route of Object.keys(paths)) {
11
+ const path = paths[route];
12
+ for (const verb of supportedHttpMethods) {
13
+ const operation = path[verb];
14
+ if (!operation)
15
+ continue;
16
+ const parameters = operation.parameters?.map(transformOperationParameter) ?? [];
17
+ const tags = operation.tags?.map((t) => t) ?? [];
18
+ operations.push({
19
+ name: operation.operationId,
20
+ decorators: [
21
+ ...getExtensions(operation),
22
+ { name: "route", args: [route] },
23
+ { name: verb, args: [] },
24
+ ],
25
+ parameters,
26
+ doc: operation.description,
27
+ operationId: operation.operationId,
28
+ requestBodies: transformRequestBodies(operation.requestBody),
29
+ responses: operation.responses ?? {},
30
+ tags: tags,
31
+ });
32
+ }
33
+ }
34
+ return operations;
35
+ }
36
+ function transformOperationParameter(parameter) {
37
+ if ("$ref" in parameter) {
38
+ return { $ref: parameter.$ref };
39
+ }
40
+ return {
41
+ name: parameter.name,
42
+ doc: parameter.description,
43
+ decorators: getParameterDecorators(parameter),
44
+ isOptional: !parameter.required,
45
+ schema: parameter.schema,
46
+ };
47
+ }
48
+ function transformRequestBodies(requestBodies) {
49
+ if (!requestBodies) {
50
+ return [];
51
+ }
52
+ const typespecBodies = [];
53
+ for (const contentType of Object.keys(requestBodies.content)) {
54
+ const contentBody = requestBodies.content[contentType];
55
+ typespecBodies.push({
56
+ contentType,
57
+ isOptional: !requestBodies.required,
58
+ doc: requestBodies.description,
59
+ encoding: contentBody.encoding,
60
+ schema: contentBody.schema,
61
+ });
62
+ }
63
+ return typespecBodies;
64
+ }
65
+ //# sourceMappingURL=transform-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-paths.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-paths.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAuC;IACpE,MAAM,UAAU,GAAwB,EAAE,CAAC;IAE3C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC;YAChF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEjD,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,SAAS,CAAC,WAAY;gBAC5B,UAAU,EAAE;oBACV,GAAG,aAAa,CAAC,SAAS,CAAC;oBAC3B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;oBAChC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;iBACzB;gBACD,UAAU;gBACV,GAAG,EAAE,SAAS,CAAC,WAAW;gBAC1B,WAAW,EAAE,SAAS,CAAC,WAAW;gBAClC,aAAa,EAAE,sBAAsB,CAAC,SAAS,CAAC,WAAW,CAAC;gBAC5D,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE;gBACpC,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,2BAA2B,CAClC,SAAqC;IAErC,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,GAAG,EAAE,SAAS,CAAC,WAAW;QAC1B,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC;QAC7C,UAAU,EAAE,CAAC,SAAS,CAAC,QAAQ;QAC/B,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,aAAmC;IACjE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,cAAc,GAA0B,EAAE,CAAC;IACjD,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvD,cAAc,CAAC,IAAI,CAAC;YAClB,WAAW;YACX,UAAU,EAAE,CAAC,aAAa,CAAC,QAAQ;YACnC,GAAG,EAAE,aAAa,CAAC,WAAW;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,MAAM,EAAE,WAAW,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { OpenAPI3Info } from "../../../../types.js";
2
+ import { TypeSpecServiceInfo } from "../interfaces.js";
3
+ export declare function transformServiceInfo(info: OpenAPI3Info): TypeSpecServiceInfo;
4
+ //# sourceMappingURL=transform-service-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-service-info.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-service-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,mBAAmB,CAU5E"}
@@ -0,0 +1,12 @@
1
+ export function transformServiceInfo(info) {
2
+ return {
3
+ name: info.title,
4
+ doc: info.description,
5
+ version: info.version,
6
+ contact: info.contact,
7
+ license: info.license,
8
+ termsOfService: info.termsOfService,
9
+ summary: info.summary,
10
+ };
11
+ }
12
+ //# sourceMappingURL=transform-service-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-service-info.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transform-service-info.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAAC,IAAkB;IACrD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,KAAK;QAChB,GAAG,EAAE,IAAI,CAAC,WAAW;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { OpenAPI3Document } from "../../../../types.js";
2
+ import { TypeSpecProgram } from "../interfaces.js";
3
+ export declare function transform(openapi: OpenAPI3Document): TypeSpecProgram;
4
+ //# sourceMappingURL=transforms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transforms.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transforms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAiB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOlE,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CASpE"}
@@ -0,0 +1,26 @@
1
+ import { transformComponentParameters } from "./transform-component-parameters.js";
2
+ import { transformComponentSchemas } from "./transform-component-schemas.js";
3
+ import { transformAllOperationResponses } from "./transform-operation-responses.js";
4
+ import { transformPaths } from "./transform-paths.js";
5
+ import { transformServiceInfo } from "./transform-service-info.js";
6
+ export function transform(openapi) {
7
+ const models = collectModels(openapi);
8
+ return {
9
+ serviceInfo: transformServiceInfo(openapi.info),
10
+ models,
11
+ augmentations: [],
12
+ operations: transformPaths(openapi.paths),
13
+ };
14
+ }
15
+ function collectModels(document) {
16
+ const models = [];
17
+ const components = document.components;
18
+ // get models from `#/components/schema
19
+ transformComponentSchemas(models, components?.schemas);
20
+ // get models from `#/components/parameters
21
+ transformComponentParameters(models, components?.parameters);
22
+ // get models from #/paths/{route}/{httpMethod}/responses
23
+ transformAllOperationResponses(models, document);
24
+ return models;
25
+ }
26
+ //# sourceMappingURL=transforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transforms.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/transforms/transforms.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAEtC,OAAO;QACL,WAAW,EAAE,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/C,MAAM;QACN,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAA0B;IAC/C,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACvC,uCAAuC;IACvC,yBAAyB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACvD,2CAA2C;IAC3C,4BAA4B,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC7D,yDAAyD;IACzD,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEjD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function convertHeaderName(s: string): string;
2
+ //# sourceMappingURL=convert-header-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-header-name.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/utils/convert-header-name.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKnD"}
@@ -0,0 +1,7 @@
1
+ export function convertHeaderName(s) {
2
+ return s
3
+ .split("-")
4
+ .map((s, idx) => (idx === 0 ? s : s.substring(0, 1).toUpperCase() + s.substring(1)))
5
+ .join("");
6
+ }
7
+ //# sourceMappingURL=convert-header-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-header-name.js","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/utils/convert-header-name.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,OAAO,CAAC;SACL,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACnF,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Extensions, OpenAPI3Parameter, OpenAPI3Schema, Refable } from "../../../../types.js";
2
+ import { TypeSpecDecorator } from "../interfaces.js";
3
+ export declare function getExtensions(element: Extensions): TypeSpecDecorator[];
4
+ export declare function getParameterDecorators(parameter: OpenAPI3Parameter): TypeSpecDecorator[];
5
+ export declare function getDecoratorsForSchema(schema: Refable<OpenAPI3Schema>): TypeSpecDecorator[];
6
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/actions/convert/utils/decorators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAKrD,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,iBAAiB,EAAE,CAatE;AAMD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,iBAAiB,uBAUlE;AA4CD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,iBAAiB,EAAE,CAgC3F"}