@eddeee888/gcg-typescript-resolver-files
Version:
This [GraphQL Code Generator](https://www.the-guild.dev/graphql/codegen) plugin creates resolvers given GraphQL schema.
63 lines • 1.89 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, }) => {
if (!node) {
return {};
}
const properties = (() => {
if (node.isKind(ts_morph_1.SyntaxKind.ClassDeclaration)) {
const result = [];
collectClassNodeProperties(node, result);
return result;
}
return node
.getType()
.getProperties()
.map((prop) => {
return {
name: prop.getName(),
type: prop.getTypeAtLocation(node),
};
});
})();
const nodePropertyMap = properties.reduce((res, { name, type }) => {
res[name] = {
name,
type,
};
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({
name: prop.getName(),
type: prop.getType(),
});
});
};
//# sourceMappingURL=getNodePropertyMap.js.map