@davstack/openapi-react-query-codegen
Version:
OpenAPI React Query Codegen using --useOptions (fork from @7nohe/openapi-react-query-codegen)
114 lines (113 loc) • 11.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createUseQuery = void 0;
const typescript_1 = __importDefault(require("typescript"));
const common_1 = require("./common");
const factory = typescript_1.default.factory;
const createUseQuery = (node, className, method) => {
const methodName = method.name?.getText(node);
const fullName = `${className}${(0, common_1.capitalizeFirstLetter)(methodName)}`;
const customHookName = `use${fullName}`;
const queryKeyName = `QueryKey${fullName}`;
const queryKeyValue = typescript_1.default.factory.createArrayLiteralExpression([
typescript_1.default.factory.createStringLiteral(className),
typescript_1.default.factory.createStringLiteral(methodName),
], false);
// console.log({
// className,
// methodName,
// customHookName,
// queryKey: queryKeyValue,
// });
const queryKeyGenericType = typescript_1.default.factory.createTypeReferenceNode('TQueryKey', undefined);
const queryKeyConstraint = typescript_1.default.factory.createTypeReferenceNode('Array', [
typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword),
]);
const prefetchQuery = factory.createVariableStatement([factory.createToken(typescript_1.default.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([
factory.createVariableDeclaration(factory.createIdentifier('prefetch' + fullName), undefined, undefined, factory.createArrowFunction([factory.createToken(typescript_1.default.SyntaxKind.AsyncKeyword)], undefined, [
typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier('params'), !method.parameters || !method.parameters.length
? typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken)
: undefined, !method.parameters || !method.parameters.length
? // never | null
typescript_1.default.factory.createTypeReferenceNode('null')
: // Parameters<typeof DefaultClient.findPets>[0]
typescript_1.default.factory.createIndexedAccessTypeNode(typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('Parameters'), [
typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createQualifiedName(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName))),
]), typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createNumericLiteral('0')))),
factory.createParameterDeclaration(undefined, undefined, factory.createObjectBindingPattern([
factory.createBindingElement(undefined, undefined, factory.createIdentifier('queryKey'), undefined),
]), undefined, factory.createTypeLiteralNode([
factory.createPropertySignature(undefined, factory.createIdentifier('queryKey'), factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), factory.createUnionTypeNode([
factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword),
factory.createArrayTypeNode(factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword)),
])),
]), factory.createObjectLiteralExpression([], false)),
], undefined, factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), factory.createCallExpression(factory.createIdentifier('prefetchQuery'), undefined, [
factory.createArrayLiteralExpression([
typescript_1.default.factory.createSpreadElement(typescript_1.default.factory.createIdentifier(queryKeyName)),
factory.createSpreadElement(factory.createParenthesizedExpression(factory.createBinaryExpression(factory.createIdentifier('queryKey'), factory.createToken(typescript_1.default.SyntaxKind.QuestionQuestionToken), factory.createArrayLiteralExpression([factory.createIdentifier('params')], false)))),
], false),
factory.createArrowFunction(undefined, undefined, [], undefined, factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier(className), factory.createIdentifier(methodName)), undefined, method.parameters.length > 0
? [typescript_1.default.factory.createIdentifier('params')]
: [])),
]))),
], typescript_1.default.NodeFlags.Const));
return [
typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(queryKeyName), undefined, undefined, queryKeyValue),
], typescript_1.default.NodeFlags.Const)),
typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(customHookName), undefined, undefined, typescript_1.default.factory.createArrowFunction(undefined, typescript_1.default.factory.createNodeArray([
typescript_1.default.factory.createTypeParameterDeclaration(undefined, 'TQueryKey', queryKeyConstraint, typescript_1.default.factory.createArrayTypeNode(typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword))),
]), [
typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier('params'), !method.parameters || !method.parameters.length
? typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken)
: undefined, !method.parameters || !method.parameters.length
? // never | null
typescript_1.default.factory.createTypeReferenceNode('null')
: // Parameters<typeof DefaultClient.findPets>[0]
typescript_1.default.factory.createIndexedAccessTypeNode(typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('Parameters'), [
typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createQualifiedName(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName))),
]), typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createNumericLiteral('0')))),
typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier('options'), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('Omit'), [
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('UseQueryOptions'), [
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('Awaited'), [
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('ReturnType'), [
typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createQualifiedName(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined),
]),
]),
typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword),
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('Awaited'), [
typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier('ReturnType'), [
typescript_1.default.factory.createTypeQueryNode(typescript_1.default.factory.createQualifiedName(typescript_1.default.factory.createIdentifier(className), typescript_1.default.factory.createIdentifier(methodName)), undefined),
]),
]),
typescript_1.default.factory.createArrayTypeNode(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('queryKey')),
typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral('queryFn')),
typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createStringLiteral('initialData')),
]),
])),
typescript_1.default.factory.createParameterDeclaration(undefined, undefined, typescript_1.default.factory.createIdentifier('queryKey'), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), queryKeyGenericType),
], undefined, 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.createArrayLiteralExpression([
typescript_1.default.factory.createSpreadElement(typescript_1.default.factory.createIdentifier(queryKeyName)),
typescript_1.default.factory.createSpreadElement(typescript_1.default.factory.createParenthesizedExpression(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createIdentifier('queryKey'), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionQuestionToken), typescript_1.default.factory.createArrayLiteralExpression([
typescript_1.default.factory.createIdentifier('params'),
])))),
], false),
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(className), typescript_1.default.factory.createIdentifier(methodName)), undefined, method.parameters.length > 0
? [typescript_1.default.factory.createIdentifier('params')]
: [])),
typescript_1.default.factory.createIdentifier('options'),
]))),
], typescript_1.default.NodeFlags.Const)),
prefetchQuery,
];
};
exports.createUseQuery = createUseQuery;