UNPKG

@graphql-codegen/flutter-freezed

Version:

GraphQL Code Generator plugin to generate Freezed models from your GraphQL schema

94 lines (93 loc) 5.03 kB
import { indent } from '@graphql-codegen/visitor-plugin-common'; import { Config } from '../config/config-value.js'; import { TypeName } from '../config/pattern.js'; import { APPLIES_ON_DEFAULT_FACTORY, APPLIES_ON_DEFAULT_FACTORY_PARAMETERS, APPLIES_ON_MERGED_FACTORY, APPLIES_ON_MERGED_FACTORY_PARAMETERS, APPLIES_ON_UNION_FACTORY, APPLIES_ON_UNION_FACTORY_PARAMETERS, } from '../config/plugin-config.js'; import { stringIsNotEmpty } from '../utils.js'; import { Block } from './index.js'; import { ParameterBlock } from './parameter-block.js'; export class FactoryBlock { static build(config, node, blockAppliesOn, className, factoryName) { let block = ''; block += Block.buildComment(node); block += this.buildDecorators(config, blockAppliesOn, className, factoryName); block += this.buildHeader(config, blockAppliesOn, className, factoryName); block += this.buildBody(config, node, blockAppliesOn); factoryName = blockAppliesOn.includes('default_factory') ? className : factoryName; block += this.buildFooter(config, blockAppliesOn, factoryName); return block; } } FactoryBlock.buildDecorators = (config, blockAppliesOn, className, factoryName) => { // TODO: @Assert const typeName = factoryName ? TypeName.fromUnionOfTypeNames(className, factoryName) : className; const deprecatedDecorator = Config.deprecated(config, blockAppliesOn, typeName); const decorators = [deprecatedDecorator].join(''); return stringIsNotEmpty(decorators) ? indent(decorators) : decorators; }; FactoryBlock.buildHeader = (config, blockAppliesOn, className, factoryName) => { const typeName = factoryName ? TypeName.fromUnionOfTypeNames(className, factoryName) : className; const immutable = Config.immutable(config, typeName); // const mutableInputs = Config.mutableInputs(config, factoryName); // const mutable = immutable !== true || (node.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION && mutableInputs); const constFactory = immutable ? indent('const factory') : indent('factory'); const _className = Block.buildBlockName(config, blockAppliesOn, className.value, className, undefined, 'PascalCase'); if (factoryName) { const _factoryName = Block.buildBlockName(config, blockAppliesOn, factoryName.value, factoryName, undefined, 'camelCase'); return `${constFactory} ${_className}.${_factoryName}({\n`; } return `${constFactory} ${_className}({\n`; }; FactoryBlock.buildBody = (config, node, appliesOn) => { var _a, _b; let appliesOnParameters = []; if (appliesOn.includes('default_factory')) { appliesOnParameters = APPLIES_ON_DEFAULT_FACTORY_PARAMETERS; } else if (appliesOn.includes('union_factory')) { appliesOnParameters = APPLIES_ON_UNION_FACTORY_PARAMETERS; } else if (appliesOn.includes('merged_factory')) { appliesOnParameters = APPLIES_ON_MERGED_FACTORY_PARAMETERS; } return ((_b = (_a = node.fields) === null || _a === void 0 ? void 0 : _a.map((field) => { return ParameterBlock.build(config, node, field, appliesOnParameters); }).join('')) !== null && _b !== void 0 ? _b : ''); }; FactoryBlock.buildFooter = (config, blockAppliesOn, factoryName) => { const _ = blockAppliesOn.includes('default_factory') ? '_' : ''; const _factoryName = Block.buildBlockName(config, blockAppliesOn, factoryName.value, factoryName, undefined, 'PascalCase'); return indent(`}) = ${_}${_factoryName};\n\n`); }; FactoryBlock.serializeDefaultFactory = (className) => { return `${Block.tokens.defaultFactory}${className.value}==>${APPLIES_ON_DEFAULT_FACTORY.join(',')}\n`; }; FactoryBlock.serializeUnionFactory = (className, factoryName) => { return `${Block.tokens.unionFactory}${className.value}==>${factoryName.value}==>${APPLIES_ON_UNION_FACTORY.join(',')}\n`; }; FactoryBlock.serializeMergedFactory = (className, factoryName) => { return `${Block.tokens.mergedFactory}${className.value}==>${factoryName.value}==>${APPLIES_ON_MERGED_FACTORY.join(',')}\n`; }; FactoryBlock.deserializeFactory = (config, nodeRepository, blockAppliesOn, className) => { const node = nodeRepository.get(className.value); if (node) { return FactoryBlock.buildFromFactory(config, node, blockAppliesOn, className); } return ''; }; FactoryBlock.deserializeNamedFactory = (config, nodeRepository, blockAppliesOn, className, factoryName) => { const node = nodeRepository.get(factoryName.value); if (node) { return FactoryBlock.buildFromNamedFactory(config, node, blockAppliesOn, className, factoryName); } return ''; }; FactoryBlock.buildFromFactory = (config, node, blockAppliesOn, className) => { return FactoryBlock.build(config, node, blockAppliesOn, className); }; FactoryBlock.buildFromNamedFactory = (config, node, blockAppliesOn, className, factoryName) => { return FactoryBlock.build(config, node, blockAppliesOn, className, factoryName); };