UNPKG

@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
"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, }) => { 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