UNPKG

@eddeee888/gcg-typescript-resolver-files

Version:

This [GraphQL Code Generator](https://www.the-guild.dev/graphql/codegen) plugin creates resolvers given GraphQL schema.

129 lines 5.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addExternalResolverImport = void 0; const utils_1 = require("../utils"); /** * addExternalResolverImport * * External resolvers are resolvers that are not managed by server preset: * - unmanaged resolvers e.g. using config.externalResolvers or config.scalarsOverrides * - resolvers that come from an external module e.g. `graphql-scalars` * * 1. parse external resolvers (originally from ) import syntax * 2. dedupes any duplicated imports * 3. declares the which identifier name to use for GraphQL object or resolver in identifierUsages */ const addExternalResolverImport = (params, { result, config: { emitLegacyCommonJSImports }, }) => { const { importIdentifier, identifierUsage, moduleImport } = parseImportSyntax(params); let shouldPushIndentifierUsages = false; result.externalImports[moduleImport] = result.externalImports[moduleImport] || { moduleName: params.moduleName, relativePathFromBaseToModule: params.relativePathFromBaseToModule, importLineMeta: { isTypeImport: false, module: moduleImport, moduleType: 'preserve', namedImports: [], defaultImport: undefined, emitLegacyCommonJSImports, }, identifierUsages: [], }; const { importLineMeta, identifierUsages } = result.externalImports[moduleImport]; switch (importIdentifier.__type) { case 'default': if (importLineMeta.defaultImport && importLineMeta.defaultImport !== importIdentifier.defaultImport) { throw new Error(`There can be only one default import from '${moduleImport}'. Current: ${importLineMeta.defaultImport}. New: ${importIdentifier.defaultImport}`); } importLineMeta.defaultImport = importIdentifier.defaultImport; shouldPushIndentifierUsages = true; break; case 'named': { const foundSameImport = importLineMeta.namedImports.find((existingImport) => typeof existingImport === 'string' && existingImport === importIdentifier.namedImport); if (!foundSameImport) { importLineMeta.namedImports.push(importIdentifier.namedImport); shouldPushIndentifierUsages = true; } break; } case 'namedWithAlias': { const foundSameImport = importLineMeta.namedImports.find((existingImport) => typeof existingImport === 'object' && existingImport.identifierName === importIdentifier.identifierName && existingImport.propertyName === importIdentifier.propertyName); if (!foundSameImport) { importLineMeta.namedImports.push({ propertyName: importIdentifier.propertyName, identifierName: importIdentifier.identifierName, }); shouldPushIndentifierUsages = true; } break; } default: // importIdentifier is `never` unless new __type is added // i.e. this is here for typesafety return importIdentifier; } if (shouldPushIndentifierUsages) { identifierUsages.push(identifierUsage); } }; exports.addExternalResolverImport = addExternalResolverImport; const parseImportSyntax = ({ configImportSyntax, normalizedResolverName, }) => { const isAbsoluteImport = configImportSyntax[0] === '~'; const importStringWithoutRelativity = isAbsoluteImport ? configImportSyntax.slice(1) : configImportSyntax; const [rawModuleName, importIdentifier] = importStringWithoutRelativity.split('#'); const moduleImport = isAbsoluteImport ? rawModuleName : (0, utils_1.normalizeRelativePath)(rawModuleName); if (importIdentifier.startsWith('default')) { if (!importIdentifier.startsWith('default as ')) { throw new Error(`Invalid import syntax. "${configImportSyntax}": Default import must include identifier name e.g. moduleName#default as Identifier`); } const [_, defaultImportIdentifier] = importIdentifier.split('default as '); return { importIdentifier: { __type: 'default', defaultImport: defaultImportIdentifier, }, identifierUsage: { identifierName: defaultImportIdentifier, normalizedResolverName, }, moduleImport, }; } const namedImportParts = importIdentifier.split(' as '); if (namedImportParts.length === 1) { return { importIdentifier: { __type: 'named', namedImport: namedImportParts[0], }, identifierUsage: { identifierName: namedImportParts[0], normalizedResolverName, }, moduleImport, }; } return { importIdentifier: { __type: 'namedWithAlias', propertyName: namedImportParts[0], identifierName: namedImportParts[1], }, identifierUsage: { identifierName: namedImportParts[1], normalizedResolverName, }, moduleImport, }; }; //# sourceMappingURL=addExternalResolverImport.js.map