graphql-code-generator: [TypeScript Compatibility] Fragments don't get a namespace generated

Using latest 1.0.8-alpha-57e0304d.7 I’m seeing differences with the way code for fragments is being generated:

Previously:

export namespace PushFields {
  export type Fragment = {
    __typename?: "Push";

    id?: Maybe<string>;

    timestamp?: Maybe<string>;

    branch?: Maybe<string>;

    before?: Maybe<Before>;

    after?: Maybe<After>;

    repo?: Maybe<Repo>;

    commits?: Maybe<(Maybe<Commits>)[]>;
  };

  export type Before = {
    __typename?: "Commit";

    sha?: Maybe<string>;

    message?: Maybe<string>;

    committer?: Maybe<Committer>;
  };

  export type Committer = {
    __typename?: "SCMId";

    login?: Maybe<string>;

    person?: Maybe<Person>;
  };

  export type Person = PersonFields.Fragment;

  export type After = {
    __typename?: "Commit";

    sha?: Maybe<string>;

    message?: Maybe<string>;

    committer?: Maybe<_Committer>;

    image?: Maybe<Image>;

    images?: Maybe<(Maybe<Images>)[]>;

    tags?: Maybe<(Maybe<Tags>)[]>;
  };

  export type _Committer = {
    __typename?: "SCMId";

    login?: Maybe<string>;

    person?: Maybe<_Person>;
  };

  export type _Person = PersonFields.Fragment;

  export type Image = {
    __typename?: "DockerImage";

    image?: Maybe<string>;

    imageName?: Maybe<string>;
  };

  export type Images = {
    __typename?: "DockerImage";

    image?: Maybe<string>;

    imageName?: Maybe<string>;
  };

  export type Tags = {
    __typename?: "Tag";

    name?: Maybe<string>;

    description?: Maybe<string>;

    timestamp?: Maybe<string>;

    release?: Maybe<Release>;
  };

  export type Release = {
    __typename?: "Release";

    name?: Maybe<string>;

    timestamp?: Maybe<string>;
  };

  export type Repo = CoreRepoFieldsAndChannels.Fragment;

  export type Commits = {
    __typename?: "Commit";

    sha?: Maybe<string>;

    timestamp?: Maybe<string>;

    message?: Maybe<string>;

    author?: Maybe<Author>;
  };

  export type Author = {
    __typename?: "SCMId";

    _id?: Maybe<number>;

    login?: Maybe<string>;

    name?: Maybe<string>;
  };
}

With latest compatibility plugin we get:

export type PushFieldsFragment = { __typename?: "Push" } & Pick<
  Push,
  "id" | "timestamp" | "branch"
> & {
    before: Maybe<
      { __typename?: "Commit" } & Pick<Commit, "sha" | "message"> & {
          committer: Maybe<
            { __typename?: "SCMId" } & Pick<ScmId, "login"> & {
                person: Maybe<{ __typename?: "Person" } & PersonFieldsFragment>;
              }
          >;
        }
    >;
    after: Maybe<
      { __typename?: "Commit" } & Pick<Commit, "sha" | "message"> & {
          committer: Maybe<
            { __typename?: "SCMId" } & Pick<ScmId, "login"> & {
                person: Maybe<{ __typename?: "Person" } & PersonFieldsFragment>;
              }
          >;
          image: Maybe<
            { __typename?: "DockerImage" } & Pick<
              DockerImage,
              "image" | "imageName"
            >
          >;
          images: Maybe<
            Array<
              Maybe<
                { __typename?: "DockerImage" } & Pick<
                  DockerImage,
                  "image" | "imageName"
                >
              >
            >
          >;
          tags: Maybe<
            Array<
              Maybe<
                { __typename?: "Tag" } & Pick<
                  Tag,
                  "name" | "description" | "timestamp"
                > & {
                    release: Maybe<
                      { __typename?: "Release" } & Pick<
                        Release,
                        "name" | "timestamp"
                      >
                    >;
                  }
              >
            >
          >;
        }
    >;
    repo: Maybe<{ __typename?: "Repo" } & CoreRepoFieldsAndChannelsFragment>;
    commits: Maybe<
      Array<
        Maybe<
          { __typename?: "Commit" } & Pick<
            Commit,
            "sha" | "timestamp" | "message"
          > & {
              author: Maybe<
                { __typename?: "SCMId" } & Pick<ScmId, "_id" | "login" | "name">
              >;
            }
        >
      >
    >;
  };

and no further namespace. So this currently breaking backwards compatibility.

We have customer code that references PushFields with:

import {
    PushFields,
} from "../../typings/types";

export async function some(push: PushFields.Fragment): Promise<void> {}

Do you think there’s something that can be done to solve this?

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Comments: 18 (9 by maintainers)

Most upvoted comments

That worked!

Awesome, yes - hold on, I am sitting on the code now, so let me try 😃

Yes, latest and greatest