rapini
Version:
Generate React Query hooks, SWR hooks, Axios requests and Typescript types from OpenAPI files
108 lines (107 loc) • 7.02 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.makeQueryKeys = void 0;
var typescript_1 = __importDefault(require("typescript"));
var util_1 = require("./util");
var NULL_IF_UNDEFINED_FN_NAME = "nullIfUndefined";
function makeQueryKeys($refs, paths) {
var queryKeys = 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 makeQueryKey($refs, pattern, item.get, item.parameters);
});
return [
makeNullIfUndefinedFunctionDeclaration(),
makeQueryKeysObject(queryKeys),
makeExportQueryKeyType(),
];
}
exports.makeQueryKeys = makeQueryKeys;
function makeNullIfUndefinedFunctionDeclaration() {
return typescript_1.default.factory.createFunctionDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier(NULL_IF_UNDEFINED_FN_NAME), [
typescript_1.default.factory.createTypeParameterDeclaration(undefined, typescript_1.default.factory.createIdentifier("T"), undefined, undefined),
], [
typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier("value"), undefined, typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("T"), undefined), undefined),
], typescript_1.default.factory.createUnionTypeNode([
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("NonNullable"), [
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("T"), undefined),
]),
typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createNull()),
]), typescript_1.default.factory.createBlock([
typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createConditionalExpression(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createTypeOfExpression(typescript_1.default.factory.createIdentifier("value")), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsEqualsEqualsToken), typescript_1.default.factory.createStringLiteral("undefined")), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), typescript_1.default.factory.createNull(), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.ColonToken), typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createIdentifier("value"), typescript_1.default.factory.createUnionTypeNode([
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("NonNullable"), [
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("T"), undefined),
]),
typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createNull()),
])))),
], true));
}
function makeQueryKeysObject(queryKeys) {
return typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier("queryKeys"), undefined, undefined, typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createObjectLiteralExpression(queryKeys, true), typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("const"), undefined))),
], typescript_1.default.NodeFlags.Const));
}
// queryKey's are only made for GET's
function makeQueryKey($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 params = (0, util_1.createParams)($refs, get, pathParams);
return typescript_1.default.factory.createPropertyAssignment(
/*name*/ typescript_1.default.factory.createIdentifier(normalizedOperationId),
/*initializer*/ typescript_1.default.factory.createArrowFunction(
/*modifiers*/ undefined,
/*typeParams*/ undefined,
/*parameters*/ params.map(function (arg) { return arg.arrowFuncParam; }),
/*type*/ undefined,
/*equalsGreaterThanToken*/ typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken),
/*body*/ typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createArrayLiteralExpression(__spreadArray([
typescript_1.default.factory.createStringLiteral(normalizedOperationId)
], __read(params.map(function (p) {
return p.required
? p.name
: typescript_1.default.factory.createCallExpression(
/*expression*/ typescript_1.default.factory.createIdentifier(NULL_IF_UNDEFINED_FN_NAME),
/*typeArguments*/ undefined,
/*argumentsArray*/ [p.name]);
})), false),
/*multiline*/ false), typescript_1.default.factory.createTypeReferenceNode(
/*typeName*/ typescript_1.default.factory.createIdentifier("const"),
/*typeArgs*/ undefined))));
}
function makeExportQueryKeyType() {
return typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier("QueryKeys"), undefined, typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createIdentifier("queryKeys"), undefined));
}