@query-key-gen/generator
Version:
Generated for [Vite](https://vitejs.dev)
1,273 lines (1,257 loc) • 64.8 kB
JavaScript
"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
// src/index.ts
var index_exports = {};
__export(index_exports, {
default: () => QueryKeyPlugin
});
module.exports = __toCommonJS(index_exports);
var import_path3 = __toESM(require("path"), 1);
// ../common/src/core/Programmer.ts
var import_fast_glob = __toESM(require("fast-glob"), 1);
var import_path = __toESM(require("path"), 1);
var import_typescript = __toESM(require("typescript"), 1);
var Programmer = class {
constructor(config) {
// getCompilerOptions = () => {
// const { options: compilerOptions } = ts.parseJsonConfigFileContent(
// ts.readConfigFile('tsconfig.node.json', ts.sys.readFile).config,
// {
// fileExists: ts.sys.fileExists,
// readFile: ts.sys.readFile,
// readDirectory: ts.sys.readDirectory,
// useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames
// },
// path.dirname('.')
// );
// return compilerOptions;
// };
this.findFiles = (program) => __async(this, null, function* () {
const config = this.config;
const sourceFiles = program.getSourceFiles().filter((item) => {
return !item.isDeclarationFile;
});
const outputFile = import_typescript.default.createSourceFile(config.output, "", this.compilerOptions.target);
const projectFiles = sourceFiles.filter((item) => {
const relativePath = import_path.default.relative(process.cwd(), item.fileName);
const outputPath = import_path.default.relative(process.cwd(), config.output);
return !relativePath.includes(outputPath);
});
return {
outputFile,
projectFiles
};
});
this.config = config;
this.compilerOptions = {
module: import_typescript.default.ModuleKind.ESNext,
target: import_typescript.default.ScriptTarget.ESNext
};
}
// Getter로 createProgram 정의
get create() {
return () => __async(this, null, function* () {
const files = yield (0, import_fast_glob.default)(this.config.path, {
onlyFiles: true
});
const builder = import_typescript.default.createIncrementalProgram({
rootNames: files,
options: this.compilerOptions
});
const program = builder.getProgram();
return {
program,
checker: program.getTypeChecker()
};
});
}
};
// ../common/src/core/GenericRunner.ts
var GenericRunner = class {
constructor(programmer, config) {
this.programmer = programmer;
this.config = config;
}
process() {
return __async(this, null, function* () {
console.log("\u{1F527} Base process logic");
});
}
execute() {
return this.process();
}
};
// src/core/QueryKeyGenerator.ts
var import_typescript13 = __toESM(require("typescript"), 1);
// src/factories/ExportSpecifierFactory.ts
var import_typescript2 = __toESM(require("typescript"), 1);
var ExportSpecifierFactory;
((ExportSpecifierFactory2) => {
const factory2 = import_typescript2.default.factory;
const exportDeclaration = (exportSpecifier) => {
return factory2.createExportDeclaration(
void 0,
false,
exportSpecifier,
void 0,
void 0
);
};
ExportSpecifierFactory2.named = (name) => {
return exportDeclaration(
factory2.createNamedExports([
factory2.createExportSpecifier(false, void 0, factory2.createIdentifier(name))
])
);
};
})(ExportSpecifierFactory || (ExportSpecifierFactory = {}));
// src/factories/ObjectLiteralExpressionFactory.ts
var import_typescript3 = __toESM(require("typescript"), 1);
var ObjectLiteralExpressionFactory;
((ObjectLiteralExpressionFactory2) => {
const factory2 = import_typescript3.default.factory;
const objectLiteralExpression = (properties) => {
return factory2.createObjectLiteralExpression(properties, true);
};
ObjectLiteralExpressionFactory2.write = (properties) => {
return objectLiteralExpression(properties);
};
})(ObjectLiteralExpressionFactory || (ObjectLiteralExpressionFactory = {}));
// src/factories/QueryKeyStructureFactory.ts
var import_typescript6 = __toESM(require("typescript"), 1);
// src/types/QueryNodeType.ts
var QueryNodeKind = {
StringLiteral: "StringLiteral",
Symbol: "Symbol",
EnumMember: "EnumMember",
TypeOfKeyword: "TypeOfKeyword",
Tuple: "Tuple"
};
// src/utils/index.ts
var import_child_process = require("child_process");
var import_fs = __toESM(require("fs"), 1);
var import_path2 = __toESM(require("path"), 1);
var import_typescript4 = __toESM(require("typescript"), 1);
var TypeGuard = {
symbol: (node) => {
return typeof node === "object" && "escapedName" in node;
},
stringLiteral: (node) => {
return import_typescript4.default.isStringLiteral(node);
},
tsType: (node) => {
return typeof node === "object" && "symbol" in node;
},
tuple: (node) => {
return import_typescript4.default.isTupleTypeNode(node);
}
};
var nodeByName = {
identifier: (name) => {
return import_typescript4.factory.createIdentifier(name);
},
stringLiteral: (name) => {
return import_typescript4.factory.createStringLiteral(name.replace(/'/g, ""));
}
};
var toCamelCase = (str) => {
return str.replace(/[^a-zA-Z0-9]+(.)/g, (_, letter) => letter.toUpperCase());
};
var makeQueryKeyName = (literal, separator) => {
return literal.map((node) => {
const name = node.name;
if (node.kind !== QueryNodeKind.StringLiteral) {
return `{${name}}`;
}
return name;
}).join(separator);
};
var groupByFirstName = (data) => {
return data.reduce(
(acc, group) => {
if (group.length > 0) {
const firstItem = group[0];
const firstItemName = firstItem == null ? void 0 : firstItem.name;
if (!firstItemName) {
return acc;
}
const camelCaseName = toCamelCase(firstItemName);
if (!acc[camelCaseName]) {
acc[camelCaseName] = [];
}
acc[camelCaseName].push(group);
}
return acc;
},
{}
);
};
var prettify = (output) => {
const prettier = import_path2.default.resolve("./node_modules/.bin/prettier");
if (import_fs.default.existsSync(prettier)) (0, import_child_process.execSync)(`${prettier} --write --cache ${output}`);
};
var logger = (() => {
const prefix = "[QUERY-KEY-GENERATOR]: ";
const log = () => {
return {
warn: (msg) => {
console.warn(`[WARN]${prefix}${msg}`);
},
error: (msg) => {
console.error(`[ERROR]${prefix}${msg}`);
},
info: (msg) => {
console.log(`[INFO]${prefix}${msg}`);
}
};
};
return log();
})();
// src/factories/TypeConverterFactory.ts
var import_typescript5 = __toESM(require("typescript"), 1);
var TypeConverterFactory;
((TypeConverterFactory2) => {
const factory2 = import_typescript5.default.factory;
const typeCache = /* @__PURE__ */ new WeakMap();
TypeConverterFactory2.transform = (symbol, checker, isTypeReference) => {
const type = checker.getTypeOfSymbol(symbol);
const declaration = symbol.declarations;
const valueDeclaration = symbol.valueDeclaration;
if (valueDeclaration && import_typescript5.default.isParameter(valueDeclaration)) {
const type2 = valueDeclaration.type;
if (type2) {
if (import_typescript5.default.isTupleTypeNode(type2)) {
return (0, TypeConverterFactory2.tuple)(type2, checker);
}
if (import_typescript5.default.isArrayTypeNode(type2)) {
return array(type2, checker);
}
if (import_typescript5.default.isUnionTypeNode(type2)) {
return unionOrIntersection(type2, checker, true);
}
if (import_typescript5.default.isTypeLiteralNode(type2)) {
return typeLiteral(type2, checker);
}
if (import_typescript5.default.isIntersectionTypeNode(type2)) {
return unionOrIntersection(type2, checker, false);
}
if (import_typescript5.default.isTypeReferenceNode(type2)) {
const symbol2 = checker.getSymbolAtLocation(type2.typeName);
if (symbol2) {
return (0, TypeConverterFactory2.transform)(symbol2, checker, true);
}
}
}
}
if (valueDeclaration && import_typescript5.default.isEnumDeclaration(valueDeclaration)) {
return (0, TypeConverterFactory2.enumToUnionFromEnumDeclaration)(valueDeclaration, checker);
}
if (declaration && isTypeReference) {
const typeNode2 = typeDeclaration(declaration, checker);
if (typeNode2) {
return typeNode2;
}
}
const typeName = checker.typeToString(type);
const isKeywordTypeNode = keywordTypeNode(typeName);
if (isKeywordTypeNode) {
return isKeywordTypeNode;
}
if (type.isIntersection()) {
return intersection(type, checker);
}
if (type.isNumberLiteral()) {
return factory2.createLiteralTypeNode(factory2.createNumericLiteral(typeName));
}
if (type.isStringLiteral()) {
const name = typeName.replace(/"/g, "");
return factory2.createLiteralTypeNode(factory2.createStringLiteral(name));
}
if (typeCache.has(type)) {
return typeCache.get(type);
}
const typeNode = literal(type, checker);
typeCache.set(type, typeNode);
return typeNode;
};
const keywordTypeNode = (name) => {
switch (name) {
case "string":
return factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.StringKeyword);
case "number":
return factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.NumberKeyword);
case "boolean":
return factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.BooleanKeyword);
case "any":
return factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.AnyKeyword);
case "undefined":
return factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.UndefinedKeyword);
case "null":
return factory2.createLiteralTypeNode(factory2.createNull());
case "unknown":
return factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.UnknownKeyword);
case "never":
return factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.NeverKeyword);
case "object":
return factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.ObjectKeyword);
case "void":
return factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.VoidKeyword);
}
return void 0;
};
const literalKindToKeyword = (element) => {
const literal2 = element.literal;
switch (literal2.kind) {
case import_typescript5.default.SyntaxKind.NullKeyword:
return keywordTypeNode("null");
case import_typescript5.default.SyntaxKind.TrueKeyword:
return factory2.createLiteralTypeNode(factory2.createTrue());
case import_typescript5.default.SyntaxKind.FalseKeyword:
return factory2.createLiteralTypeNode(factory2.createFalse());
case import_typescript5.default.SyntaxKind.NumericLiteral:
return factory2.createLiteralTypeNode(
factory2.createNumericLiteral(literal2.text)
);
case import_typescript5.default.SyntaxKind.StringLiteral:
return factory2.createLiteralTypeNode(
factory2.createStringLiteral(literal2.text)
);
case import_typescript5.default.SyntaxKind.BigIntLiteral:
return factory2.createLiteralTypeNode(
factory2.createBigIntLiteral(literal2.text)
);
}
return void 0;
};
const literal = (type, checker) => {
const properties = type.getProperties().map((prop) => {
const isOptional = TypeConverterFactoryGuard.isOptional(prop);
return factory2.createPropertySignature(
void 0,
prop.getName(),
isOptional ? factory2.createToken(import_typescript5.default.SyntaxKind.QuestionToken) : void 0,
(0, TypeConverterFactory2.transform)(prop, checker)
);
});
return factory2.createTypeLiteralNode(properties);
};
const generateProperties = (type, checker, isReadonly) => {
const properties = type.getProperties();
const propertyNames = /* @__PURE__ */ new Set();
properties.forEach((prop) => {
propertyNames.add(prop.getName());
});
return properties.map((prop) => {
return factory2.createPropertySignature(
isReadonly ? [factory2.createToken(import_typescript5.default.SyntaxKind.ReadonlyKeyword)] : void 0,
prop.getName(),
void 0,
(0, TypeConverterFactory2.transform)(prop, checker)
);
});
};
const unionOrIntersection = (typeNode, checker, isUnion) => {
const types = typeNode.types;
const node = types.map((element) => {
const kind = element.kind;
if (kind === import_typescript5.default.SyntaxKind.StringKeyword) {
return keywordTypeNode("string");
}
if (kind === import_typescript5.default.SyntaxKind.NumberKeyword) {
return keywordTypeNode("number");
}
if (kind === import_typescript5.default.SyntaxKind.BooleanKeyword) {
return keywordTypeNode("boolean");
}
if (kind === import_typescript5.default.SyntaxKind.UndefinedKeyword) {
return keywordTypeNode("undefined");
}
if (kind === import_typescript5.default.SyntaxKind.ObjectKeyword) {
return keywordTypeNode("object");
}
if (kind === import_typescript5.default.SyntaxKind.AnyKeyword) {
return keywordTypeNode("any");
}
if (import_typescript5.default.isLiteralTypeNode(element)) {
const keyword = literalKindToKeyword(element);
if (keyword) {
return keyword;
}
}
if (import_typescript5.default.isTypeLiteralNode(element)) {
return typeLiteral(element, checker);
}
if (import_typescript5.default.isTypeReferenceNode(element)) {
const symbol = checker.getSymbolAtLocation(element.typeName);
if (symbol) {
return (0, TypeConverterFactory2.transform)(symbol, checker, true);
}
}
return void 0;
}).filter(Boolean);
return isUnion ? factory2.createUnionTypeNode(node) : factory2.createIntersectionTypeNode(node);
};
const intersection = (intersection2, checker) => {
const types = intersection2.types;
const intersectionNode = types.map((t) => {
const typeName = checker.typeToString(t);
if (TypeConverterFactoryGuard.isObjectType(t)) {
const properties = generateProperties(t, checker);
return factory2.createTypeLiteralNode(properties);
}
if (TypeConverterFactoryGuard.isLiteralType(t)) {
return factory2.createLiteralTypeNode(
factory2.createStringLiteral(typeName.replace(/"/g, ""))
);
}
return keywordTypeNode(typeName);
}).filter(Boolean);
return factory2.createIntersectionTypeNode(intersectionNode);
};
TypeConverterFactory2.enumToUnion = (type, checker) => {
var _a, _b, _c;
const enumValues = Array.from((_c = (_b = (_a = type.symbol) == null ? void 0 : _a.exports) == null ? void 0 : _b.values()) != null ? _c : []);
const unionType = enumValues.map((value) => {
const declaration = value.valueDeclaration;
if (declaration && import_typescript5.default.isEnumMember(declaration)) {
const name = value.getName();
const enumValue = checker.getConstantValue(declaration);
if (typeof enumValue === "string") {
return import_typescript5.default.factory.createLiteralTypeNode(
import_typescript5.default.factory.createStringLiteral(enumValue)
);
} else if (typeof enumValue === "number") {
return import_typescript5.default.factory.createLiteralTypeNode(
import_typescript5.default.factory.createNumericLiteral(enumValue.toString())
);
} else {
return import_typescript5.default.factory.createTypeReferenceNode(name, void 0);
}
}
return void 0;
}).filter(Boolean);
return factory2.createUnionTypeNode(unionType);
};
TypeConverterFactory2.enumToUnionFromEnumDeclaration = (type, checker) => {
const members = type.members;
const unionType = members.map((member) => {
const initial = member.initializer;
if (!initial) return void 0;
if (import_typescript5.default.isStringLiteral(initial)) {
return factory2.createLiteralTypeNode(factory2.createStringLiteral(initial.text));
}
if (import_typescript5.default.isNumericLiteral(initial)) {
return factory2.createLiteralTypeNode(
factory2.createNumericLiteral(initial.text)
);
}
if (import_typescript5.default.isPropertyAccessExpression(initial)) {
const symbol = checker.getSymbolAtLocation(initial.name);
if (symbol) {
return (0, TypeConverterFactory2.transform)(symbol, checker);
}
}
return void 0;
}).filter(Boolean);
return factory2.createUnionTypeNode(unionType);
};
TypeConverterFactory2.typeofKeyword = (type, checker) => {
const properties = generateProperties(type, checker, true);
return factory2.createTypeLiteralNode(properties);
};
TypeConverterFactory2.tuple = (type, checker) => {
const elements = type.elements;
const node = elements.map((element) => {
const kind = element.kind;
if (kind === import_typescript5.default.SyntaxKind.StringKeyword) {
return keywordTypeNode("string");
}
if (kind === import_typescript5.default.SyntaxKind.NumberKeyword) {
return keywordTypeNode("number");
}
if (kind === import_typescript5.default.SyntaxKind.BooleanKeyword) {
return keywordTypeNode("boolean");
}
if (kind === import_typescript5.default.SyntaxKind.UndefinedKeyword) {
return keywordTypeNode("undefined");
}
if (kind === import_typescript5.default.SyntaxKind.ObjectKeyword) {
return keywordTypeNode("object");
}
if (kind === import_typescript5.default.SyntaxKind.AnyKeyword) {
return keywordTypeNode("any");
}
if (kind === import_typescript5.default.SyntaxKind.UnknownKeyword) {
return keywordTypeNode("unknown");
}
if (kind === import_typescript5.default.SyntaxKind.NeverKeyword) {
return keywordTypeNode("never");
}
if (kind === import_typescript5.default.SyntaxKind.VoidKeyword) {
return keywordTypeNode("void");
}
if (import_typescript5.default.isLiteralTypeNode(element)) {
const keyword = literalKindToKeyword(element);
if (keyword) {
return keyword;
}
}
if (import_typescript5.default.isTypeLiteralNode(element)) {
return typeLiteral(element, checker);
}
if (import_typescript5.default.isTypeReferenceNode(element)) {
const symbol = checker.getSymbolAtLocation(element.typeName);
if (symbol) {
return (0, TypeConverterFactory2.transform)(symbol, checker);
}
}
return void 0;
}).filter(Boolean);
return factory2.createTupleTypeNode(node);
};
const array = (type, checker) => {
const element = type.elementType;
if (element.kind === import_typescript5.default.SyntaxKind.StringKeyword) {
return factory2.createArrayTypeNode(
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.StringKeyword)
);
}
if (element.kind === import_typescript5.default.SyntaxKind.NumberKeyword) {
return factory2.createArrayTypeNode(
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.NumberKeyword)
);
}
if (element.kind === import_typescript5.default.SyntaxKind.BooleanKeyword) {
return factory2.createArrayTypeNode(
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.BooleanKeyword)
);
}
if (element.kind === import_typescript5.default.SyntaxKind.UndefinedKeyword) {
return factory2.createArrayTypeNode(
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.UndefinedKeyword)
);
}
if (element.kind === import_typescript5.default.SyntaxKind.NullKeyword) {
return factory2.createArrayTypeNode(factory2.createLiteralTypeNode(factory2.createNull()));
}
if (element.kind === import_typescript5.default.SyntaxKind.AnyKeyword) {
return factory2.createArrayTypeNode(
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.AnyKeyword)
);
}
if (element.kind === import_typescript5.default.SyntaxKind.ObjectKeyword) {
return factory2.createArrayTypeNode(
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.ObjectKeyword)
);
}
if (element.kind === import_typescript5.default.SyntaxKind.UnknownKeyword) {
return factory2.createArrayTypeNode(
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.UnknownKeyword)
);
}
if (element.kind === import_typescript5.default.SyntaxKind.NeverKeyword) {
return factory2.createArrayTypeNode(
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.NeverKeyword)
);
}
if (import_typescript5.default.isTypeLiteralNode(element)) {
return factory2.createArrayTypeNode(typeLiteral(element, checker));
}
if (import_typescript5.default.isParenthesizedTypeNode(element)) {
const type2 = element.type;
if (import_typescript5.default.isUnionTypeNode(type2)) {
return factory2.createArrayTypeNode(unionOrIntersection(type2, checker, true));
}
if (import_typescript5.default.isIntersectionTypeNode(type2)) {
return factory2.createArrayTypeNode(unionOrIntersection(type2, checker, false));
}
}
return void 0;
};
const typeLiteral = (type, checker) => {
const properties = type.members.map((member) => {
const name = member.name;
if (import_typescript5.default.isPropertySignature(member) && member.type && name) {
const type2 = member.type;
if (type2.kind === import_typescript5.default.SyntaxKind.StringKeyword) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.StringKeyword)
);
}
if (type2.kind === import_typescript5.default.SyntaxKind.NumberKeyword) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.NumberKeyword)
);
}
if (type2.kind === import_typescript5.default.SyntaxKind.BooleanKeyword) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.BooleanKeyword)
);
}
if (type2.kind === import_typescript5.default.SyntaxKind.NullKeyword) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
factory2.createLiteralTypeNode(factory2.createNull())
);
}
if (type2.kind === import_typescript5.default.SyntaxKind.AnyKeyword) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.AnyKeyword)
);
}
if (type2.kind === import_typescript5.default.SyntaxKind.UndefinedKeyword) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
factory2.createKeywordTypeNode(import_typescript5.default.SyntaxKind.UndefinedKeyword)
);
}
if (type2.kind === import_typescript5.default.SyntaxKind.LiteralType && import_typescript5.default.isLiteralTypeNode(type2)) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
literalKindToKeyword(type2)
);
}
if (type2.kind === import_typescript5.default.SyntaxKind.UnknownKeyword) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
keywordTypeNode("unknown")
);
}
if (type2.kind === import_typescript5.default.SyntaxKind.NeverKeyword) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
keywordTypeNode("never")
);
}
if (type2.kind === import_typescript5.default.SyntaxKind.VoidKeyword) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
keywordTypeNode("void")
);
}
if (import_typescript5.default.isUnionTypeNode(type2)) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
unionOrIntersection(type2, checker, true)
);
}
if (import_typescript5.default.isIntersectionTypeNode(type2)) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
unionOrIntersection(type2, checker, false)
);
}
if (import_typescript5.default.isStringLiteral(type2)) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
factory2.createLiteralTypeNode(factory2.createStringLiteral(type2.text))
);
}
if (import_typescript5.default.isNumericLiteral(type2)) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
factory2.createLiteralTypeNode(factory2.createNumericLiteral(type2.text))
);
}
if (import_typescript5.default.isTypeLiteralNode(type2)) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
typeLiteral(type2, checker)
);
}
if (import_typescript5.default.isTypeReferenceNode(type2)) {
const symbol = checker.getSymbolAtLocation(type2.typeName);
const typeArgument = type2.typeArguments;
if (symbol && !typeArgument) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
(0, TypeConverterFactory2.transform)(symbol, checker, true)
);
}
if (symbol && typeArgument) {
const node = typeArgument.map((t) => {
if (import_typescript5.default.isTypeReferenceNode(t)) {
const symbol2 = checker.getSymbolAtLocation(t.typeName);
if (symbol2) {
return (0, TypeConverterFactory2.transform)(symbol2, checker, true);
}
}
if (import_typescript5.default.isLiteralTypeNode(t)) {
return literalKindToKeyword(t);
}
if (import_typescript5.default.isTypeLiteralNode(t)) {
return typeLiteral(t, checker);
}
if (import_typescript5.default.isUnionTypeNode(t)) {
return unionOrIntersection(t, checker, true);
}
if (import_typescript5.default.isIntersectionTypeNode(t)) {
return unionOrIntersection(t, checker, false);
}
return t;
}).filter(Boolean);
return factory2.createPropertySignature(
void 0,
name,
void 0,
factory2.createTypeReferenceNode(
factory2.createIdentifier("Record"),
node
)
);
}
}
if (import_typescript5.default.isTupleTypeNode(type2)) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
(0, TypeConverterFactory2.tuple)(type2, checker)
);
}
if (import_typescript5.default.isArrayTypeNode(type2)) {
return factory2.createPropertySignature(
void 0,
name,
void 0,
array(type2, checker)
);
}
}
return void 0;
}).filter(Boolean);
return factory2.createTypeLiteralNode(properties);
};
const typeDeclaration = (type, checker) => {
return type.map((declaration) => {
if (import_typescript5.default.isTypeAliasDeclaration(declaration)) {
const type2 = declaration.type;
if (import_typescript5.default.isTypeLiteralNode(type2)) {
return typeLiteral(type2, checker);
}
}
if (import_typescript5.default.isInterfaceDeclaration(declaration)) {
return void 0;
}
return void 0;
}).filter(Boolean)[0];
};
})(TypeConverterFactory || (TypeConverterFactory = {}));
var TypeConverterFactoryGuard = {
isObjectType: (type) => {
return !!(type.flags & import_typescript5.default.TypeFlags.Object);
},
isLiteralType: (type) => {
return !!(type.flags & import_typescript5.default.TypeFlags.StringLiteral) || !!(type.flags & import_typescript5.default.TypeFlags.NumberLiteral) || !!(type.flags & import_typescript5.default.TypeFlags.BooleanLiteral);
},
isOptional: (symbol) => {
return symbol.valueDeclaration && (import_typescript5.default.isParameter(symbol.valueDeclaration) || import_typescript5.default.isPropertySignature(symbol.valueDeclaration)) ? !!symbol.valueDeclaration.questionToken : !!(symbol.getFlags() & import_typescript5.default.SymbolFlags.Optional);
}
};
// src/factories/QueryKeyStructureFactory.ts
var QueryKeyStructureFactory;
((QueryKeyStructureFactory2) => {
const factory2 = import_typescript6.default.factory;
QueryKeyStructureFactory2.write = ({
identifierName,
node,
checker
}) => {
const isStringLiteral = node.every((item) => TypeGuard.stringLiteral(item.type));
const arrayLiteralExpression = arrayLiteral(node);
if (isStringLiteral) {
return factory2.createPropertyAssignment(
factory2.createIdentifier(identifierName),
arrayLiteralExpression
);
}
const parameterDeclarations = parameter(
node.filter((item) => !TypeGuard.stringLiteral(item.type)),
checker
);
return factory2.createPropertyAssignment(
factory2.createIdentifier(identifierName),
factory2.createArrowFunction(
void 0,
void 0,
[...parameterDeclarations],
void 0,
factory2.createToken(import_typescript6.default.SyntaxKind.EqualsGreaterThanToken),
arrayLiteralExpression
)
);
};
const arrayLiteral = (node) => {
const literal = node.map((item) => {
if (TypeGuard.stringLiteral(item.type)) {
return nodeByName.stringLiteral(item.name);
}
if (TypeGuard.symbol(item.type)) {
return nodeByName.identifier(item.name);
}
if (TypeGuard.tsType(item.type)) {
return nodeByName.identifier(item.name);
}
return nodeByName.identifier(item.name);
}).filter(Boolean);
const arrayLiteralExpression = factory2.createArrayLiteralExpression(literal, false);
return arrayLiteralExpression;
};
const parameter = (node, checker) => {
return node.map((item) => {
if (TypeGuard.symbol(item.type)) {
const isOptional = TypeConverterFactoryGuard.isOptional(item.type);
return factory2.createParameterDeclaration(
void 0,
void 0,
nodeByName.identifier(item.name),
isOptional ? factory2.createToken(import_typescript6.default.SyntaxKind.QuestionToken) : void 0,
TypeConverterFactory.transform(item.type, checker),
void 0
);
}
if (TypeGuard.tsType(item.type) && item.kind === QueryNodeKind.EnumMember) {
const isOptional = TypeConverterFactoryGuard.isOptional(item.symbol);
return factory2.createParameterDeclaration(
void 0,
void 0,
nodeByName.identifier(item.name),
isOptional ? factory2.createToken(import_typescript6.default.SyntaxKind.QuestionToken) : void 0,
TypeConverterFactory.enumToUnion(item.type, checker),
void 0
);
}
if (TypeGuard.tsType(item.type) && item.kind === QueryNodeKind.TypeOfKeyword) {
const isOptional = TypeConverterFactoryGuard.isOptional(item.symbol);
const typeOfNode = TypeConverterFactory.typeofKeyword(item.type, checker);
return factory2.createParameterDeclaration(
void 0,
void 0,
nodeByName.identifier(item.name),
isOptional ? factory2.createToken(import_typescript6.default.SyntaxKind.QuestionToken) : void 0,
typeOfNode,
void 0
);
}
if (TypeGuard.tuple(item.type) && item.kind === QueryNodeKind.Tuple) {
const isOptional = TypeConverterFactoryGuard.isOptional(item.symbol);
const tupleNode = TypeConverterFactory.tuple(item.type, checker);
return factory2.createParameterDeclaration(
void 0,
void 0,
nodeByName.identifier(item.name),
isOptional ? factory2.createToken(import_typescript6.default.SyntaxKind.QuestionToken) : void 0,
tupleNode,
void 0
);
}
return void 0;
}).filter(Boolean);
};
})(QueryKeyStructureFactory || (QueryKeyStructureFactory = {}));
// src/factories/QueryKeyStatementFactory.ts
var import_typescript8 = __toESM(require("typescript"), 1);
// src/factories/VariableDeclarationFactory.ts
var import_typescript7 = __toESM(require("typescript"), 1);
var VariableDeclarationFactory;
((VariableDeclarationFactory2) => {
const factory2 = import_typescript7.default.factory;
VariableDeclarationFactory2.write = (name, node, isConst = false) => {
const typeNode = () => {
if (isConst) {
return factory2.createAsExpression(
node,
factory2.createTypeReferenceNode(factory2.createIdentifier("const"), void 0)
);
}
return node;
};
return factory2.createVariableDeclaration(
factory2.createIdentifier(name),
void 0,
void 0,
typeNode()
);
};
})(VariableDeclarationFactory || (VariableDeclarationFactory = {}));
var VariableDeclarationListFactory;
((VariableDeclarationListFactory2) => {
const factory2 = import_typescript7.default.factory;
VariableDeclarationListFactory2.write = (variables, flag = import_typescript7.default.NodeFlags.Const) => {
return factory2.createVariableDeclarationList(variables, flag);
};
})(VariableDeclarationListFactory || (VariableDeclarationListFactory = {}));
// src/factories/QueryKeyStatementFactory.ts
var QueryKeyStatementFactory;
((QueryKeyStatementFactory2) => {
const factory2 = import_typescript8.default.factory;
QueryKeyStatementFactory2.write = (propertyAssignments, keyName, factoryPrefix) => {
return factory2.createVariableStatement(
void 0,
VariableDeclarationListFactory.write(
[
VariableDeclarationFactory.write(
keyName + factoryPrefix,
ObjectLiteralExpressionFactory.write([...propertyAssignments]),
true
)
],
import_typescript8.default.NodeFlags.Const
)
);
};
})(QueryKeyStatementFactory || (QueryKeyStatementFactory = {}));
// src/factories/GlobalQueryKeyStatement.ts
var import_typescript9 = __toESM(require("typescript"), 1);
var GlobalQueryKeyStatement;
((GlobalQueryKeyStatement2) => {
const factory2 = import_typescript9.default.factory;
GlobalQueryKeyStatement2.write = (keyStatement, keyName, factoryPrefix) => {
return factory2.createVariableStatement(
[factory2.createToken(import_typescript9.default.SyntaxKind.ExportKeyword)],
factory2.createVariableDeclarationList(
[
factory2.createVariableDeclaration(
factory2.createIdentifier(keyName),
void 0,
void 0,
factory2.createAsExpression(
factory2.createObjectLiteralExpression(
[
...keyStatement.map((item) => {
return factory2.createShorthandPropertyAssignment(
factory2.createIdentifier(item.key + factoryPrefix)
);
})
],
true
),
factory2.createTypeReferenceNode(
factory2.createIdentifier("const"),
void 0
)
)
)
],
import_typescript9.default.NodeFlags.Const
)
);
};
})(GlobalQueryKeyStatement || (GlobalQueryKeyStatement = {}));
// src/queryFinder/QueryKeyFinder.ts
var import_typescript10 = __toESM(require("typescript"), 1);
var QueryKeyFinder;
((QueryKeyFinder2) => {
const PROPERTY_NAME = "queryKey";
QueryKeyFinder2.findQueryKey = ({
useQueries,
checker
}) => {
const result = useQueries.map((value) => {
const arrayLiteral = visitor(value, checker);
return arrayLiteral;
}).flat();
return result;
};
const visitor = (value, checker) => {
const arrayLiteral = [];
const visit = (node) => {
if (import_typescript10.default.isCallExpression(node)) {
const expression = node.expression;
const args = node.arguments;
args.forEach((arg) => {
if (import_typescript10.default.isPropertyAccessExpression(arg)) {
const symbol = checker.getSymbolAtLocation(arg);
if (symbol && symbol.valueDeclaration) {
const valueDeclaration = symbol.valueDeclaration;
if (import_typescript10.default.isPropertyAssignment(valueDeclaration)) {
const initializer = valueDeclaration.initializer;
if (initializer && import_typescript10.default.isCallExpression(initializer)) {
visit(initializer);
}
}
}
}
if (import_typescript10.default.isCallExpression(arg)) {
const expression2 = arg.expression;
visit(expression2);
}
if (import_typescript10.default.isIdentifier(arg)) {
const symbol = checker.getSymbolAtLocation(arg);
if (symbol && symbol.valueDeclaration) {
const valueDeclaration = symbol.valueDeclaration;
if (import_typescript10.default.isVariableDeclaration(valueDeclaration)) {
const initializer = valueDeclaration.initializer;
if (initializer) {
visit(initializer);
}
}
}
}
if (import_typescript10.default.isObjectLiteralExpression(arg)) {
visit(arg);
}
});
if (import_typescript10.default.isIdentifier(expression)) {
const symbol = checker.getSymbolAtLocation(expression);
if (symbol && symbol.valueDeclaration) {
const valueDeclaration = symbol.valueDeclaration;
if (import_typescript10.default.isVariableDeclaration(valueDeclaration)) {
const initializer = valueDeclaration.initializer;
if (initializer && import_typescript10.default.isCallExpression(initializer)) {
visit(initializer);
}
}
}
}
if (import_typescript10.default.isPropertyAccessExpression(expression)) {
const symbol = checker.getSymbolAtLocation(expression);
if (symbol && symbol.valueDeclaration) {
const valueDeclaration = symbol.valueDeclaration;
if (import_typescript10.default.isPropertyAssignment(valueDeclaration)) {
const initializer = valueDeclaration.initializer;
if (initializer && import_typescript10.default.isArrowFunction(initializer)) {
const body = initializer.body;
if (import_typescript10.default.isArrayLiteralExpression(body)) {
arrayLiteral.push(makeArrayLiteral(body.elements, checker));
}
if (import_typescript10.default.isBlock(body)) {
const statements = body.statements;
statements.forEach((statement) => {
if (import_typescript10.default.isReturnStatement(statement)) {
const expression2 = statement.expression;
if (expression2 && import_typescript10.default.isCallExpression(expression2)) {
const argument = expression2.arguments;
const callExpression = expression2.expression;
argument.forEach((arg) => {
if (import_typescript10.default.isObjectLiteralExpression(arg)) {
arrayLiteral.push(
objectExpression(arg, checker)
);
}
});
visit(callExpression);
}
}
});
}
if (import_typescript10.default.isArrowFunction(body)) {
visit(body);
}
if (import_typescript10.default.isCallExpression(body)) {
visit(body);
}
}
}
}
}
}
if (import_typescript10.default.isIdentifier(node)) {
const identifierSymbol = checker.getSymbolAtLocation(node);
if (identifierSymbol) {
const valueDeclaration = identifierSymbol.valueDeclaration;
if (valueDeclaration && import_typescript10.default.isVariableDeclaration(valueDeclaration)) {
const objectInitializer = valueDeclaration.initializer;
if (objectInitializer && import_typescript10.default.isObjectLiteralExpression(objectInitializer)) {
const targetProperty = findPropertyByQueryKey(
objectInitializer.properties
);
if (targetProperty && import_typescript10.default.isPropertyAssignment(targetProperty)) {
const targetInitializer = targetProperty.initializer;
if (import_typescript10.default.isArrayLiteralExpression(targetInitializer)) {
arrayLiteral.push(
makeArrayLiteral(targetInitializer.elements, checker)
);
}
if (import_typescript10.default.isArrowFunction(targetInitializer)) {
const body = targetInitializer.body;
if (import_typescript10.default.isArrayLiteralExpression(body)) {
arrayLiteral.push(makeArrayLiteral(body.elements, checker));
}
if (import_typescript10.default.isBlock(body)) {
const statements = body.statements;
statements.forEach((statement) => {
visit(statement);
});
}
if (import_typescript10.default.isParenthesizedExpression(body)) {
visit(body.expression);
}
}
}
}
if (objectInitializer && import_typescript10.default.isArrowFunction(objectInitializer)) {
const body = objectInitializer.body;
if (import_typescript10.default.isCallExpression(body)) {
visit(body);
}
if (import_typescript10.default.isBlock(body)) {
const statements = body.statements;
statements.forEach((statement) => {
visit(statement);
});
}
if (import_typescript10.default.isParenthesizedExpression(body)) {
visit(body.expression);
}
}
if (objectInitializer && import_typescript10.default.isCallExpression(objectInitializer)) {
visit(objectInitializer);
}
}
if (valueDeclaration && import_typescript10.default.isFunctionDeclaration(valueDeclaration)) {
const body = valueDeclaration.body;
if (body && import_typescript10.default.isBlock(body)) {
visit(body);
}
}
}
}
if (import_typescript10.default.isObjectLiteralExpression(node)) {
const properties = node.properties;
const isQueries = properties.some(
(property) => import_typescript10.default.isPropertyAssignment(property) && property.name.getText() === "queries"
);
if (isQueries) {
properties.forEach((property) => {
if (import_typescript10.default.isPropertyAssignment(property) && property.name.getText() === "queries") {
const initializer = property.initializer;
visit(initializer);
}
});
return;
}
arrayLiteral.push(objectExpression(node, checker));
}
import_typescript10.default.forEachChild(node, visit);
};
visit(value);
if (arrayLiteral.flat().length === 0) {
logger.warn("This function is not provided. : \n" + value.getText());
}
return arrayLiteral;
};
const objectExpression = (node, checker) => {
let arrayLiteral = [];
const properties = node.properties;
properties.forEach((property) => {
var _a;
if (import_typescript10.default.isPropertyAssignment(property) && property.name.getText() === "queryKey") {
const initializer = property.initializer;
if (import_typescript10.default.isArrayLiteralExpression(initializer)) {
arrayLiteral = makeArrayLiteral(initializer.elements, checker);
}
if (import_typescript10.default.isCallExpression(initializer)) {
const expression = initializer.expression;
if (import_typescript10.default.isIdentifier(expression)) {
const valueDeclaration = (_a = checker.getSymbolAtLocation(expression)) == null ? void 0 : _a.valueDeclaration;
if (valueDeclaration && import_typescript10.default.isVariableDeclaration(valueDeclaration)) {
const initializer2 = valueDeclaration.initializer;
if (initializer2 && import_typescript10.default.isArrowFunction(initializer2)) {
const body = initializer2.body;
if (import_typescript10.default.isArrayLiteralExpression(body)) {
const elements = body.elements;
arrayLiteral = makeArrayLiteral(elements, checker);
}
}
}
if (valueDeclaration && impor