@eddeee888/gcg-typescript-resolver-files
Version:
This [GraphQL Code Generator](https://www.the-guild.dev/graphql/codegen) plugin creates resolvers given GraphQL schema.
64 lines • 1.99 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getNodePropertyMap = void 0;
const ts_morph_1 = require("ts-morph");
/**
* Function to get properties of a Node in a map
* If unable to find, returns empty object
*/
const getNodePropertyMap = ({ node, tsMorphProject, }) => {
if (!node) {
return {};
}
const typeChecker = tsMorphProject.getTypeChecker();
const properties = (() => {
if (node.isKind(ts_morph_1.SyntaxKind.ClassDeclaration)) {
const result = [];
collectClassNodeProperties(node, result);
return result;
}
return typeChecker
.getTypeAtLocation(node)
.getProperties()
.map((prop) => {
return {
type: prop.getDeclarations()[0].getType(),
name: prop.getName(),
};
});
})();
const nodePropertyMap = properties.reduce((res, { type, name }) => {
res[name] = {
type,
name,
};
return res;
}, {});
return nodePropertyMap;
};
exports.getNodePropertyMap = getNodePropertyMap;
const collectClassNodeProperties = (classNode, result) => {
const baseClass = classNode.getBaseClass();
if (baseClass) {
collectClassNodeProperties(baseClass, result);
}
classNode.getInstanceProperties().forEach((prop) => {
if (prop.hasModifier(ts_morph_1.SyntaxKind.PrivateKeyword) ||
prop.hasModifier(ts_morph_1.SyntaxKind.ProtectedKeyword)) {
return;
}
if (prop.getName().startsWith('#')) {
// ecma script private field is skipped
return;
}
if (classNode.getGetAccessor(prop.getName())) {
// getter is skipped
return;
}
result.push({
type: prop.getType(),
name: prop.getName(),
});
});
};
//# sourceMappingURL=getNodePropertyMap.js.map
;