graphql-codegen-flutter-freezed
Version:
A stand-alone package to generate Freezed models from GraphQL schema based on the flutter-freezed plugin for GraphQL Code Generator
22 lines (21 loc) • 1.22 kB
JavaScript
import { oldVisit } from '@graphql-codegen/plugin-helpers';
import { transformSchemaAST } from '@graphql-codegen/schema-ast';
import { FreezedDeclarationBlock } from './freezed-declaration-blocks';
import { schemaVisitor } from './schema-visitor';
import { DefaultFreezedPluginConfig } from './utils';
export const plugin = (schema, _documents, config) => {
// sets the defaults for the config
config = { ...new DefaultFreezedPluginConfig(config) };
const { schema: _schema, ast } = transformSchemaAST(schema, config);
const { freezedFactoryBlockRepository, ...visitor } = schemaVisitor(_schema, config);
const visitorResult = oldVisit(ast, { leave: visitor });
const generated = visitorResult.definitions.filter((def) => def instanceof FreezedDeclarationBlock);
return (generated
.map(freezedDeclarationBlock => freezedDeclarationBlock.toString().replaceAll(/==>factory==>.+/gm, s => {
const pattern = s.replace('==>factory==>', '').trim();
const [key, appliesOn, name, typeName] = pattern.split('==>');
return freezedFactoryBlockRepository.retrieve(key, appliesOn, name, typeName ?? null).toString();
}))
.join('')
.trim() + '\n');
};