UNPKG

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
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'); };