@graphql-codegen/typescript-enum-array
Version:
GraphQL Code Generator plugin for adding const array
60 lines (59 loc) • 2.03 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.plugin = void 0;
const visitor_plugin_common_1 = require("@graphql-codegen/visitor-plugin-common");
function getEnumTypeMap(schema) {
var _a;
const typeMap = schema.getTypeMap();
const result = [];
for (const key in typeMap) {
if (((_a = typeMap[key].astNode) === null || _a === void 0 ? void 0 : _a.kind) === 'EnumTypeDefinition') {
result.push(typeMap[key]);
}
}
return result;
}
function buildArrayDefinition(e, config) {
var _a;
const convert = (0, visitor_plugin_common_1.convertFactory)(config);
const enumName = convert(e.astNode, {
prefix: ((_a = config.enumPrefix) !== null && _a !== void 0 ? _a : true) ? config.typesPrefix : undefined,
suffix: config.typesSuffix,
});
const upperName = e.name
.replace(/[A-Z]/g, letter => `_${letter}`)
.slice(1)
.toUpperCase();
const values = e
.getValues()
.map(v => {
if (config.useMembers) {
return `${enumName}.${convert(v.astNode, { transformUnderscore: true })}`;
}
else {
return `'${v.value}'`;
}
})
.join(', ');
if (config.constArrays) {
return `export const ${upperName} = [${values}] as const;`;
}
else {
return `export const ${upperName}: ${enumName}[] = [${values}];`;
}
}
function buildImportStatement(enums, importFrom) {
const names = Object.values(enums).map(e => e.name);
return [`import { ${names.join(', ')} } from "${importFrom}";`];
}
const plugin = (schema, _documents, config) => {
const enums = getEnumTypeMap(schema);
const content = enums.map(e => buildArrayDefinition(e, config)).join('\n');
const result = { content };
if (config.importFrom) {
result['prepend'] = buildImportStatement(enums, config.importFrom);
}
return result;
};
exports.plugin = plugin;
exports.default = { plugin: exports.plugin };
;