UNPKG

rapini

Version:

Generate React Query hooks, SWR hooks, Axios requests and Typescript types from OpenAPI files

238 lines (237 loc) 14.7 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeMutations = void 0; var typescript_1 = __importDefault(require("typescript")); var util_1 = require("../common/util"); var rapini_mutation_1 = require("./rapini-mutation"); function makeMutations($refs, paths) { var properties = Object.entries(paths).flatMap(function (_a) { var _b = __read(_a, 2), pattern = _b[0], path = _b[1]; return makeProperties($refs, pattern, path); }); var requestsParam = typescript_1.default.factory.createParameterDeclaration( /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, /*name*/ typescript_1.default.factory.createIdentifier("requests"), /*questionToken*/ undefined, /*type*/ typescript_1.default.factory.createTypeReferenceNode( /*typeName*/ typescript_1.default.factory.createIdentifier("Requests"), /*typeArgs*/ undefined), /*initializer*/ undefined); var configParam = typescript_1.default.factory.createParameterDeclaration( /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, /*name*/ typescript_1.default.factory.createIdentifier("config"), /*questionToken*/ typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), /*type*/ typescript_1.default.factory.createIndexedAccessTypeNode( /*objectType*/ typescript_1.default.factory.createTypeReferenceNode( /*typeName*/ typescript_1.default.factory.createIdentifier("Config"), /*typeArgs*/ undefined), /*indexType*/ typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("mutations"))), /*initializer*/ undefined); return [ typescript_1.default.factory.createTypeAliasDeclaration( /*modifiers*/ undefined, /*name*/ typescript_1.default.factory.createIdentifier("MutationConfigs"), /*typeParameters*/ undefined, /*type*/ typescript_1.default.factory.createTypeLiteralNode(properties.map(function (p) { return p.config; }))), typescript_1.default.factory.createFunctionDeclaration( /*modifiers*/ undefined, /*asteriskToken*/ undefined, /*name*/ typescript_1.default.factory.createIdentifier("makeMutations"), /*typeParameters*/ undefined, /*parameters*/ [requestsParam, configParam], /*type*/ undefined, /*body*/ typescript_1.default.factory.createBlock([ typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createAsExpression( /*expression*/ typescript_1.default.factory.createObjectLiteralExpression(properties.map(function (p) { return p.property; }), /*multiline*/ true), /*type*/ typescript_1.default.factory.createTypeReferenceNode( /*typeName*/ typescript_1.default.factory.createIdentifier("const"), /*typeArgs*/ undefined))), ], /*multiline*/ true)), ]; } exports.makeMutations = makeMutations; // Every path can have multiple mutations, like POST/PUT/PATCH/DELETE etc // And if there's a GET too then we should invalidate that cache function makeProperties($refs, pattern, path) { var properties = []; var pathParams = path.parameters; if (path.post) { properties.push(makeProperty($refs, pattern, path.post, "post", pathParams)); } if (path.put) { properties.push(makeProperty($refs, pattern, path.put, "put", pathParams)); } if (path.patch) { properties.push(makeProperty($refs, pattern, path.patch, "patch", pathParams)); } if (path.delete) { properties.push(makeProperty($refs, pattern, path.delete, "delete", pathParams)); } return properties; } function optionsParameterDeclaration(requestIdentifier, hasRequestBody) { return typescript_1.default.factory.createParameterDeclaration( /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, /*name*/ typescript_1.default.factory.createIdentifier("options"), /*questionToken*/ typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), /*type*/ typescript_1.default.factory.createTypeReferenceNode( /*typeName*/ typescript_1.default.factory.createIdentifier("Omit"), /*typeArguments*/ [ typescript_1.default.factory.createTypeReferenceNode( /*typeName*/ typescript_1.default.factory.createIdentifier("UseMutationOptions"), /*typeArguments*/ [ typescript_1.default.factory.createTypeReferenceNode( /*typeName*/ typescript_1.default.factory.createIdentifier("Response"), /*typeArguments*/ [ typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral(requestIdentifier)), ]), typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), hasRequestBody ? typescript_1.default.factory.createIndexedAccessTypeNode( /*objectType*/ typescript_1.default.factory.createTypeReferenceNode( /*typeName*/ typescript_1.default.factory.createIdentifier("Parameters"), /*typeArguments*/ [ typescript_1.default.factory.createIndexedAccessTypeNode(typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Requests"), undefined), typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral(requestIdentifier))), ]), /*indexType*/ typescript_1.default.factory.createLiteralTypeNode( /*literal*/ typescript_1.default.factory.createNumericLiteral( /*value*/ "0", /*numericLiteralFlags*/ undefined))) : typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), ]), typescript_1.default.factory.createLiteralTypeNode( /*literal*/ typescript_1.default.factory.createStringLiteral("mutationFn")), ]), /*initializer*/ undefined); } function makeProperty($refs, pattern, operation, method, pathParams) { var operationId = operation.operationId; if (!operationId) { throw "Missing \"operationId\" from \"".concat(method, "\" request with pattern ").concat(pattern); } var normalizedOperationId = (0, util_1.normalizeOperationId)(operationId); var identifier = "use".concat((0, util_1.capitalizeFirstLetter)(normalizedOperationId)); var params = (0, util_1.createParams)($refs, operation, pathParams); var hasRequestBody = !!operation.requestBody; var body = /*expression*/ typescript_1.default.factory.createCallExpression( /*expression*/ typescript_1.default.factory.createIdentifier(rapini_mutation_1.RAPINI_MUTATION_ID), /*typeArguments*/ [ typescript_1.default.factory.createTypeReferenceNode( /*typeName*/ typescript_1.default.factory.createIdentifier("Response"), /*typeArgs*/ [ typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral(normalizedOperationId)), ]), typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), hasRequestBody ? typescript_1.default.factory.createIndexedAccessTypeNode( /*objectType*/ typescript_1.default.factory.createTypeReferenceNode( /*typeName*/ typescript_1.default.factory.createIdentifier("Parameters"), /*typeArguments*/ [ typescript_1.default.factory.createIndexedAccessTypeNode(typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Requests"), undefined), typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral(normalizedOperationId))), ]), /*indexType*/ typescript_1.default.factory.createLiteralTypeNode( /*literal*/ typescript_1.default.factory.createNumericLiteral( /*value*/ "0", /*numericLiteralFlags*/ undefined))) : typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), ], /*args*/ [ typescript_1.default.factory.createArrowFunction( /*modifiers*/ undefined, /*typeParameters*/ undefined, /*parameters*/ hasRequestBody ? [ typescript_1.default.factory.createParameterDeclaration( /*modifiers*/ undefined, /*dotDotDotToken*/ undefined, /*name*/ typescript_1.default.factory.createIdentifier("payload"), /*questionToken*/ undefined, /*type*/ undefined, /*initializer*/ undefined), ] : [], /*type*/ undefined, /*equalsGreaterThanToken*/ typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), /*body*/ typescript_1.default.factory.createCallExpression( /*expression*/ typescript_1.default.factory.createPropertyAccessExpression( /*expression*/ typescript_1.default.factory.createIdentifier("requests"), /*name*/ typescript_1.default.factory.createIdentifier(normalizedOperationId)), /*typeArguments*/ undefined, /*args*/ hasRequestBody ? __spreadArray([ typescript_1.default.factory.createIdentifier("payload") ], __read(params.map(function (p) { return p.name; })), false) : params.map(function (p) { return p.name; }))), typescript_1.default.factory.createPropertyAccessChain( /*expression*/ typescript_1.default.factory.createIdentifier("config"), /*questionDotToken*/ typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionDotToken), /*name*/ typescript_1.default.factory.createIdentifier(identifier)), typescript_1.default.factory.createIdentifier("options"), ]); return { property: typescript_1.default.factory.createPropertyAssignment( /*name*/ typescript_1.default.factory.createIdentifier(identifier), /*initializer*/ typescript_1.default.factory.createArrowFunction( /*modifiers*/ undefined, /*typeParameters*/ undefined, __spreadArray(__spreadArray([], __read(params.map(function (p) { return p.arrowFuncParam; })), false), [ optionsParameterDeclaration(normalizedOperationId, hasRequestBody), ], false), /*type*/ undefined, /*equalsGreaterThanToken*/ typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), /*body*/ body)), config: typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createIdentifier(identifier), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), typescript_1.default.factory.createFunctionTypeNode(undefined, [ typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier("queryClient"), undefined, typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("QueryClient"), undefined), undefined), ], typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Pick"), [ typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("UseMutationOptions"), [ typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Response"), [ typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral(normalizedOperationId)), ]), typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), hasRequestBody ? typescript_1.default.factory.createIndexedAccessTypeNode(typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Parameters"), [ typescript_1.default.factory.createIndexedAccessTypeNode(typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Requests"), undefined), typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral(normalizedOperationId))), ]), typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createNumericLiteral("0"))) : typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword), ]), typescript_1.default.factory.createUnionTypeNode([ typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("onSuccess")), typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("onSettled")), typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral("onError")), ]), ]))), }; }