UNPKG

@infinite-debugger/swagger-to-ts

Version:

swagger-to-ts is a powerful library that allows you to generate TypeScript code from Swagger documentation or OpenAPI specifications. It simplifies the process of integrating API definitions into your TypeScript projects, saving you time and effort.

111 lines 7.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPrimitiveSchemaType = exports.generateSchemaFromRequestParameters = exports.findSchemaReferencedSchemas = void 0; /** * Find all schemas referenced by a schema. * * @param options The options to find all referenced schemas for a schema. * @returns All schemas referenced by the schema. */ const findSchemaReferencedSchemas = ({ schemaName, openAPISpecification, }) => { const schemaReferencedSchemas = []; /** * Find all referenced schemas recursively. * * @param schemaName The name of the schema to find all referenced schemas for. */ const findSchemaReferencedSchemasRecursive = (schemaName) => { const schema = openAPISpecification.components.schemas[schemaName]; if (schema) { /** * Traverses a schema object looking for $ref properties. * * @param schema The schema to traverse. */ const traverseSchemaObject = (schema) => { Object.keys(schema).forEach((schemaKey) => { if ('$ref' in schema && schemaKey === '$ref') { const schemaName = schema.$ref.replace('#/components/schemas/', ''); if (!schemaReferencedSchemas.includes(schemaName)) { schemaReferencedSchemas.unshift(schemaName); findSchemaReferencedSchemasRecursive(schemaName); } } if (typeof schema[schemaKey] === 'object') { traverseSchemaObject(schema[schemaKey]); } }); }; traverseSchemaObject(schema); } }; findSchemaReferencedSchemasRecursive(schemaName); return schemaReferencedSchemas; }; exports.findSchemaReferencedSchemas = findSchemaReferencedSchemas; /** * Generate a schema from request parameters. * * @param options The options to generate a schema from request parameters. * @returns The generated schema from the request parameters. */ const generateSchemaFromRequestParameters = ({ requestParameters, }) => { return { type: 'object', properties: requestParameters .filter(({ schema }) => { if ('$ref' in schema && !schema.$ref.match(/^#\//g)) { return false; } if ('type' in schema && schema.type === 'array' && 'items' in schema && schema.items && '$ref' in schema.items && !schema.items.$ref.match(/^#\//g)) { return false; } return true; }) .reduce((accumulator, { name, schema, description }) => { accumulator[name] = { ...schema, description, }; return accumulator; }, {}), required: requestParameters .filter(({ required }) => { return required; }) .map(({ name }) => { return name; }), }; }; exports.generateSchemaFromRequestParameters = generateSchemaFromRequestParameters; //#endregion //#region Get schema primitive schema type const getPrimitiveSchemaType = (schema) => { if ('type' in schema) { switch (schema.type) { case 'boolean': return 'boolean'; case 'integer': case 'number': return 'number'; case 'string': if (schema.enum) { return schema.enum .filter((value) => value.length > 0) .map((value) => `'${value}'`) .join(' | '); } return 'string'; } } return 'any'; }; exports.getPrimitiveSchemaType = getPrimitiveSchemaType; //#endregion //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9TY2hlbWFHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUJBOzs7OztHQUtHO0FBQ0ksTUFBTSwyQkFBMkIsR0FBRyxDQUFDLEVBQzFDLFVBQVUsRUFDVixvQkFBb0IsR0FDZSxFQUFFLEVBQUU7SUFDdkMsTUFBTSx1QkFBdUIsR0FBYSxFQUFFLENBQUM7SUFFN0M7Ozs7T0FJRztJQUNILE1BQU0sb0NBQW9DLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUU7UUFDbEUsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRSxJQUFJLE1BQU0sRUFBRTtZQUNWOzs7O2VBSUc7WUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7Z0JBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQ3hDLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFO3dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDcEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTs0QkFDakQsdUJBQXVCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUM1QyxvQ0FBb0MsQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDbEQ7cUJBQ0Y7b0JBQ0QsSUFBSSxPQUFRLE1BQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxRQUFRLEVBQUU7d0JBQ2xELG9CQUFvQixDQUFFLE1BQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3FCQUNsRDtn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