1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.generateTypes = void 0;
|
4 | const utils_1 = require("./utils");
|
5 | const strings_1 = require("./strings");
|
6 | const jsdoc_1 = require("./utilities/jsdoc");
|
7 | function generateTypes(types, config) {
|
8 | let code = strings_1.AUTOGENERATED_COMMENT;
|
9 | try {
|
10 | code += types
|
11 | .sort(({ name }, { name: _name }) => utils_1.isAscending(name, _name))
|
12 | .reduce((prev, { name: _name, schema, description }) => {
|
13 | const name = utils_1.getSchemaName(_name);
|
14 | prev += `
|
15 | ${jsdoc_1.getJsdoc(Object.assign(Object.assign({}, schema), { description: description || (schema === null || schema === void 0 ? void 0 : schema.description), deprecated: (schema === null || schema === void 0 ? void 0 : schema.deprecated)
|
16 | ? (schema === null || schema === void 0 ? void 0 : schema["x-deprecatedMessage"]) || String(schema === null || schema === void 0 ? void 0 : schema.deprecated)
|
17 | : undefined }))}
|
18 | ${getTypeDefinition(name, schema, config)}
|
19 | `;
|
20 | return prev;
|
21 | }, "");
|
22 | return code;
|
23 | }
|
24 | catch (error) {
|
25 | console.error({ error });
|
26 | return "";
|
27 | }
|
28 | }
|
29 | exports.generateTypes = generateTypes;
|
30 | function getTypeDefinition(name, schema = {}, config) {
|
31 | const { type, enum: Enum, "x-enumNames": enumNames, allOf, oneOf, items, $ref, additionalProperties, properties, } = schema;
|
32 | if (Enum) {
|
33 | if (config.generateEnumAsType) {
|
34 | return `export type ${name} =${Enum.map((e) => `"${e}"`).join(" | ")};`;
|
35 | }
|
36 | return `export enum ${name} {${Enum.map((e, index) => `${enumNames ? enumNames[index] : e}=${typeof e === "string" ? `"${e}"` : `${e}`}`)}}`;
|
37 | }
|
38 | if (allOf || oneOf) {
|
39 | return `export type ${name} = ${utils_1.getTsType(schema, config)}`;
|
40 | }
|
41 | if (type === "array" && items) {
|
42 | return `export type ${name} = ${utils_1.getTsType(items, config)}[]`;
|
43 | }
|
44 | if ($ref) {
|
45 | return `export type ${name} = ${utils_1.getRefName($ref)}`;
|
46 | }
|
47 | if (type === "object") {
|
48 | const typeObject = utils_1.getTsType(schema, config);
|
49 | if ((additionalProperties || properties) && !oneOf) {
|
50 | return `export interface ${name} ${typeObject}`;
|
51 | }
|
52 | return `export type ${name} = ${typeObject}`;
|
53 | }
|
54 | if (type === "string") {
|
55 | return `export type ${name} = ${type}`;
|
56 | }
|
57 | return `export type ${name} = any`;
|
58 | }
|
59 |
|
\ | No newline at end of file |