rapini
Version:
Generate React Query hooks, SWR hooks, Axios requests and Typescript types from OpenAPI files
238 lines (237 loc) • 14.7 kB
JavaScript
;
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")),
]),
]))),
};
}