graphql-to-dart
TypeScript icon, indicating that this package has built-in type declarations

2.0.0-beta14 • Public • Published

graphql-to-dart

Custom templates for graphql-code-generator for generating dart PODOs and json_serializable classes

2.0.0 Beta

This beta makes the api entirely immutable

npm install graphql-to-dart@2.0.0-beta5 includes a number of updates, such as:

  • per-operation file generation (probably non-optional)
  • gql_code_gen support via integrateGqlCodeGenAst
  • transformCharacters support for handling _underscore_prefixed fields defaults to { "^_+": "" }, resulting in "__typename" -> "typename"
  • Models graphql-style "inheritance" by defining a protected _$[Type}Fields type along with every object type, which is then exposed by fragment mixins and selection sets.
  • Fragments are modeled generated as mixins, as well as standalone FragmentNameSelectionSet classes
  • all classes are immutable and use the equatable package

usage

yarn add -D graphql-code-generator graphql graphql-to-dart@1.1.2-beta

write codegen.yaml to customize your build as needed. This is the full working config I'm using in the wild:

schema: schema/__generated__/schema.json
documents:
  # fragments are _private and collected first 
  # so we can hack their fields 
  - '../app/lib/**/_*.graphql'
  - '../app/lib/**/!(_)*.graphql'
overwrite: true
generates:
  ../app/lib/graphql/schema.dart:
    - graphql-to-dart/schema-types
  ../app/lib/:
    # generate operation types next to their source files 
    # NOTE there's actually a coupling between the preset and plugin 
    # with respect to `integrateGqlCodeGenAst` atm 
    preset: graphql-to-dart
    presetConfig:
      # all required 
      extension: .graphql.dart
      packageName: savvy_app
      schemaTypesPath: ../app/lib/graphql/schema.dart
    plugins:
      - graphql-to-dart/documents
config:
  # re-export built gql_code_gen ast files 
  integrateGqlCodeGenAst: true
  schema:
    imports:
      # import 'package:foo/bar.dart' show biz; works as well here 
      - package:savvy_app/graphql/scalars/scalars.dart
      - package:savvy_app/graphql/base.dart
    exports:
      - package:savvy_app/graphql/scalars/scalars.dart
      - package:savvy_app/graphql/base.dart
  mixins:
    # add `with Entity` when a generated class has these fields 
    when:
        fields:
        - entityId
        - validFrom
        - validUntil
      name: Entity
  scalars:
    Date: DateTime
    # requires a PGDateTimeProvider in the schema lib 
    Datetime: PGDateTime
    FiniteDatetime: DateTime
    UUID: String
    Rrule: RecurrenceRule
    Cursor: String
    JSON: Object
  replaceTypes:
    TemporalIdInput: TemporalId
    # Replace with a reference, if I remember correctly 
    TemporalId: TemporalId
    GoogleSignInInput: GoogleSignIn
  irreducibleTypes:
   # I have a common in-fragment type 
   # that is always inherited the same way, 
   # so I just repace it's inputs and make my own irreducible. 
   - TemporalId
 

Then generate with yarn gql-gen (or gql-gen if you have it globally installed), And theeeen generate the actual json serializers (equatable and json_serializable are peer dependencies, but on the flutter side, also gql_code_gen if you're using the ast integration). So:

yarn gql-gen
flutter packages pub run build_runner build
flutter format lib/**/*graphql.dart # you're gunna want this 
# or npm install globstar && globstar -- flutter format "lib/**/*.graphql.dart" 

Make sure you have a build.yaml like in the example, and the deps in the pubspec.yaml:

# ... 
dev_dependencies:
  build_runner: ^0.9.0
  json_serializable: ^0.5.4
  # ... 
 
dependencies:
  json_annotation: ^0.2.3
  equatable: 1.0.2
  # ... 
# ... 

...Obviously this is not the most user friendly process yet.

Take a look at the example output to see how it generates code, as well as src/build-plugin.ts for the configuration object, which has some docs just aching to be properly generated.

NOTES

  • Base types do not currently have json helpers, but it should probably be configurable in case of the configuration replaceTypes: { "BaseTypeInput": "BaseType" }
  • I probably won't touch this for a while once again.
  • Really what we want is for @klavs's gql_code_gen to become more mature, but I keep sinking energy into this because I can go fast here
  • #import "./fragment.graphql bolton support has been merged into gql_code_gen
  • (possibly outdated): You can have multiple inline fragments on the same document, but they will be named with leading underscores, like Query_TypeInlineFragment, which is ugly

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
2.0.0-beta141latest

Version History

VersionDownloads (Last 7 Days)Published
2.0.0-beta141
2.0.0-beta130
2.0.0-beta120
2.0.0-beta110
2.0.0-beta90
2.0.0-beta82
2.0.0-beta70
2.0.0-beta60
2.0.0-beta50
2.0.0-beta40
2.0.0-beta30
2.0.0-beta21
2.0.0-beta10
2.0.0-alpha90
2.0.0-alpha80
2.0.0-alpha70
2.0.0-alpha60
2.0.0-alpha50
2.0.0-alpha40
2.0.0-alpha30
2.0.0-alpha20
2.0.0-alpha10
2.0.0-prealpha10
1.2.1-beta0
1.2.0-beta0
1.1.5-beta4
1.1.4-beta0
1.1.2-beta1
1.1.1-beta0
1.1.0-beta0
1.0.1-alpha170
1.0.1-alpha160
1.0.1-alpha150
1.0.1-alpha140
1.0.1-alpha130
1.0.1-alpha120
1.0.1-alpha110
1.0.1-alpha100
1.0.1-alpha90
1.0.1-alpha80
1.0.1-alpha70
1.0.1-alpha60
1.0.1-alpha50
1.0.1-alpha40
1.0.1-alpha30
1.0.1-alpha20
1.0.1-alpha10
1.0.1-alpha0
1.0.0-beta-stable40
1.0.0-beta-stable30
1.0.0-beta-stable20
1.0.0-beta-stable10
1.0.0-beta-stable0
1.0.0-beta20
1.0.0-beta10
1.0.0-beta0
1.0.0-alpha.10
1.0.0-alpha.00
0.3.60
0.3.50
0.3.40
0.3.30
0.3.20
0.3.10
0.3.00
0.3.0-alpha80
0.3.0-alpha70
0.3.0-alpha60
0.3.0-alpha50
0.3.0-alpha40
0.3.0-alpha30
0.3.0-alpha20
0.3.0-alpha10
0.2.00
0.1.2-alpha0
0.1.1-alpha0
0.1.0-aplha41
0.1.0-alpha30
0.0.4-alpha41
0.0.4-alpha30
0.0.4-alpha20
0.0.4-alpha10
0.0.3-alpha20
0.0.3-alpha10
0.0.2-alpha40
0.0.2-alpha30
0.0.2-alpha20
0.0.2-alpha10
0.0.1-alpha80
0.0.1-alpha70
0.0.1-alpha60
0.0.1-alpha50
0.0.1-alpha40
0.0.1-alpha30
0.0.1-alpha20
0.0.1-alpha10
0.0.1-alpha0

Package Sidebar

Install

npm i graphql-to-dart

Weekly Downloads

11

Version

2.0.0-beta14

License

MIT

Unpacked Size

420 kB

Total Files

26

Last publish

Collaborators

  • micimize