@graphql-codegen/flutter-freezed
Version:
GraphQL Code Generator plugin to generate Freezed models from your GraphQL schema
55 lines (54 loc) • 2.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EnumBlock = void 0;
const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common");
const config_value_js_1 = require("../config/config-value.js");
const pattern_js_1 = require("../config/pattern.js");
const plugin_config_js_1 = require("../config/plugin-config.js");
const utils_js_1 = require("../utils.js");
const index_js_1 = require("./index.js");
class EnumBlock {
// TODO: @next-version: Implement enhanced enums
static build(config, node) {
const typeName = pattern_js_1.TypeName.fromString(node.name.value);
let block = '';
block += index_js_1.Block.buildComment(node);
block += this.buildDecorators();
block += this.buildHeader(config, typeName);
block += this.buildBody(config, node);
block += this.buildFooter();
return block;
}
}
exports.EnumBlock = EnumBlock;
EnumBlock.buildDecorators = () => {
// TODO: @next-version: @JsonEnum(valueField: 'code', fieldRename: 'new-name')
return '';
};
EnumBlock.buildHeader = (config, typeName) => {
const enumTypeName = index_js_1.Block.buildBlockName(config, plugin_config_js_1.APPLIES_ON_ENUM, typeName.value, typeName, undefined, 'PascalCase');
return `enum ${enumTypeName} {\n`;
};
EnumBlock.buildBody = (config, node) => {
var _a, _b;
const typeName = pattern_js_1.TypeName.fromString(node.name.value);
return (_b = ((_a = node.values) !== null && _a !== void 0 ? _a : [])) === null || _b === void 0 ? void 0 : _b.map((enumValue) => {
const fieldName = pattern_js_1.FieldName.fromString(enumValue.name.value);
const enumValueName = index_js_1.Block.buildBlockName(config, plugin_config_js_1.APPLIES_ON_ENUM_VALUE, fieldName.value, typeName, fieldName, config_value_js_1.Config.camelCasedEnums(config));
const comment = index_js_1.Block.buildComment(enumValue);
const jsonKey = (0, utils_js_1.atJsonKeyDecorator)({
name: fieldName.value !== enumValueName ? fieldName.value : undefined,
});
//TODO: @next-version: const jsonValue = @JsonValue(String|int)
const decorators = [
jsonKey,
// jsonValue
].join('');
return [comment, decorators, `${enumValueName},\n`]
.map(block => ((0, utils_js_1.stringIsNotEmpty)(block) ? (0, visitor_plugin_common_1.indent)(block) : block))
.join('');
}).join('');
};
EnumBlock.buildFooter = () => {
return '}\n\n';
};