UNPKG

@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
"use strict"; 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