@graphql-codegen/flutter-freezed
Version:
GraphQL Code Generator plugin to generate Freezed models from your GraphQL schema
59 lines (58 loc) • 2.94 kB
JavaScript
var _a;
import { indent } from '@graphql-codegen/visitor-plugin-common';
import { Config } from '../config/config-value.js';
import { FieldName, TypeName } from '../config/pattern.js';
import { atJsonKeyDecorator, stringIsNotEmpty } from '../utils.js';
import { Block } from './index.js';
export class ParameterBlock {
static build(config, node, field, blockAppliesOn) {
const typeName = TypeName.fromString(node.name.value);
const fieldName = FieldName.fromString(field.name.value);
const parameterName = Block.buildBlockName(config, blockAppliesOn, fieldName.value, typeName, fieldName, 'camelCase');
let block = '';
block += Block.buildComment(field);
block += this.buildDecorators(config, typeName, fieldName, parameterName, blockAppliesOn);
block += this.buildBody(config, field, typeName, fieldName, parameterName, blockAppliesOn);
// return indentMultiline(block, 2);
return block;
}
}
_a = ParameterBlock;
ParameterBlock.buildDecorators = (config, typeName, fieldName, parameterName, blockAppliesOn) => {
const deprecatedDecorator = Config.deprecated(config, blockAppliesOn, typeName, fieldName);
const defaultValueDecorator = Config.defaultValues(config, blockAppliesOn, typeName, fieldName);
const jsonKeyDecorator = atJsonKeyDecorator({
name: fieldName.value !== parameterName ? fieldName.value : undefined,
});
return [
deprecatedDecorator,
defaultValueDecorator,
jsonKeyDecorator,
// TODO: add decorator for unionValueName
]
.filter(decorator => stringIsNotEmpty(decorator))
.map(decorator => indent(decorator, 2))
.join('');
};
ParameterBlock.buildBody = (config, field, typeName, fieldName, parameterName, blockAppliesOn) => {
const required = _a.isNonNullType(field.type) ? 'required ' : '';
const final = Config.final(config, blockAppliesOn, typeName, fieldName) ? 'final ' : '';
const dartType = _a.parameterType(config, field.type);
return indent(`${required}${final}${dartType} ${parameterName},\n`, 2);
};
ParameterBlock.parameterType = (config, type, parentType) => {
if (_a.isNonNullType(type)) {
return _a.parameterType(config, type.type, type);
}
if (_a.isListType(type)) {
const T = _a.parameterType(config, type.type, type);
return `List<${T}>${_a.isNonNullType(parentType) ? '' : '?'}`;
}
if (_a.isNamedType(type)) {
return `${Config.customScalars(config, type.name.value)}${_a.isNonNullType(parentType) ? '' : '?'}`;
}
return '';
};
ParameterBlock.isListType = (type) => (type === null || type === void 0 ? void 0 : type.kind) === 'ListType';
ParameterBlock.isNonNullType = (type) => (type === null || type === void 0 ? void 0 : type.kind) === 'NonNullType';
ParameterBlock.isNamedType = (type) => (type === null || type === void 0 ? void 0 : type.kind) === 'NamedType';