rapini
Version:
Generate React Query hooks, SWR hooks, Axios requests and Typescript types from OpenAPI files
142 lines (141 loc) • 8.46 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.makeQueries = void 0;
var typescript_1 = __importDefault(require("typescript"));
var util_1 = require("../common/util");
function makeQueries($refs, paths) {
var properties = Object.entries(paths)
.filter(function (_a) {
var _b = __read(_a, 2), _ = _b[0], item = _b[1];
return !!(item === null || item === void 0 ? void 0 : item.get);
})
.map(function (_a) {
var _b = __read(_a, 2), pattern = _b[0], item = _b[1];
return makeProperty($refs, pattern, item.get, item.parameters);
});
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);
return typescript_1.default.factory.createFunctionDeclaration(
/*modifiers*/ undefined,
/*asteriskToken*/ undefined,
/*name*/ typescript_1.default.factory.createIdentifier("makeQueries"),
/*typeParameters*/ undefined,
/*parameters*/ [requestsParam],
/*type*/ undefined,
/*body*/ typescript_1.default.factory.createBlock([
typescript_1.default.factory.createReturnStatement(
/*expression*/ typescript_1.default.factory.createAsExpression(
/*expression*/ typescript_1.default.factory.createObjectLiteralExpression(properties,
/*multiline*/ true),
/*type*/ typescript_1.default.factory.createTypeReferenceNode(
/*typeName*/ typescript_1.default.factory.createIdentifier("const"),
/*typeArgs*/ undefined))),
],
/*multiline*/ true));
}
exports.makeQueries = makeQueries;
function makeProperty($refs, pattern, get, pathParams) {
if (!(get === null || get === void 0 ? void 0 : get.operationId)) {
throw "Missing \"operationId\" from \"get\" request with pattern ".concat(pattern);
}
var normalizedOperationId = (0, util_1.normalizeOperationId)(get.operationId);
var identifierName = "use".concat((0, util_1.capitalizeFirstLetter)(normalizedOperationId));
var params = (0, util_1.createParams)($refs, get, pathParams);
return typescript_1.default.factory.createPropertyAssignment(
/*name*/ typescript_1.default.factory.createIdentifier(identifierName),
/*initializer*/ typescript_1.default.factory.createArrowFunction(
/*modifiers*/ undefined,
/*typeParams*/ undefined, __spreadArray(__spreadArray([], __read(params.map(function (p) { return p.arrowFuncParam; })), false), [
optionsParameterDeclaration(normalizedOperationId),
], false),
/*type*/ typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("UseQueryResult"), [
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),
]),
/*equalsGreaterThanToken*/ typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("useQuery"), undefined, [
typescript_1.default.factory.createObjectLiteralExpression([
typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("queryKey"), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("queryKeys"), typescript_1.default.factory.createIdentifier(normalizedOperationId)), undefined, params.map(function (p) { return p.name; }))),
typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("queryFn"), typescript_1.default.factory.createArrowFunction(undefined, undefined, [], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("requests"), typescript_1.default.factory.createIdentifier(normalizedOperationId)), undefined, params.map(function (p) { return p.name; })))),
typescript_1.default.factory.createSpreadAssignment(typescript_1.default.factory.createIdentifier("options")),
], false),
])));
}
function optionsParameterDeclaration(requestIdentifier) {
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("UseQueryOptions"),
/*typeArgs*/ [
typescript_1.default.factory.createTypeReferenceNode(
/*typeName*/ typescript_1.default.factory.createIdentifier("Response"),
/*typeArgs*/ [
typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral(requestIdentifier)),
]),
typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword),
typescript_1.default.factory.createTypeReferenceNode(
/*typeName*/ typescript_1.default.factory.createIdentifier("Response"),
/*typeArgs*/ [
typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral(requestIdentifier)),
]),
typescript_1.default.factory.createTypeReferenceNode(
/*typeName*/ typescript_1.default.factory.createIdentifier("ReturnType"),
/*typeArgs*/ [
typescript_1.default.factory.createIndexedAccessTypeNode(
/*objectType*/ typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("QueryKeys"), undefined),
/*indexType*/ typescript_1.default.factory.createLiteralTypeNode(
/*literal*/ typescript_1.default.factory.createStringLiteral(requestIdentifier))),
]),
]),
typescript_1.default.factory.createUnionTypeNode(
/*types*/ [
typescript_1.default.factory.createLiteralTypeNode(
/*literal*/ typescript_1.default.factory.createStringLiteral("queryKey")),
typescript_1.default.factory.createLiteralTypeNode(
/*literal*/ typescript_1.default.factory.createStringLiteral("queryFn")),
]),
]),
/*initializer*/ undefined);
}