Как фильтровать по расширению файла в запросе graphql - PullRequest
2 голосов
/ 20 апреля 2019

Я хотел бы запросить содержимое файлов разметки в папке с документами в хранилище. Я использую gatsby-source-graphql и GitHub v4 API .

Пока мне удалось получить содержимое файла с этим кодом:

{
  github {
    search(first: 1, type: REPOSITORY, query: "repo:kalessil/phpinspectionsea") {
      edges {
        node {
          ... on GitHub_Repository {
            folder: object(expression: "master:docs/") {
              ... on GitHub_Tree {
                entries {
                  oid
                  object {
                    ... on GitHub_Blob {
                      text
                    }
                  }
                  name
                }
              }
            }
          }
        }
      }
    }
  }
}

Проблема в том, что внутри каталога может оказаться файл любого типа, например txt, и потребуется дополнительная работа для его фильтрации.

Есть ли способ запрашивать файлы только с расширением md внутри каталога docs/?

EDIT:

Это можно сделать в три этапа. Сначала путем запроса всех файлов, фильтрации и затем запроса отдельных файлов:

{
  github {
    files: search(first: 1, type: REPOSITORY, query: "repo:kalessil/phpinspectionsea") {
      edges {
        node {
          ... on GitHub_Repository {
            object(expression: "master:docs/") {
              ... on GitHub_Tree {
                entries {
                  name
                }
              }
            }
          }
        }
      }
    }
    content: search(first: 1, type: REPOSITORY, query: "repo:kalessil/phpinspectionsea") {
      edges {
        node {
          ... on GitHub_Repository {
            object(expression: "master:docs/DEVELOPERS.md") {
              ... on GitHub_Blob {
                text
              }
            }
          }
        }
      }
    }
  }
}

Может быть, есть лучший способ?

EDIT2:

Я изменил код в соответствии с @ robinmentral (спасибо) :

{
  github {
    files: repository(owner: "kalessil", name: "phpinspectionsea") {
      ... on GitHub_Repository {
        object(expression: "master:docs/") {
          ... on GitHub_Tree {
            entries {
              name
            }
          }
        }
      }
    }
    content: repository(owner: "kalessil", name: "phpinspectionsea") {
      ... on GitHub_Repository {
        object(expression: "master:docs/DEVELOPERS.md") {
          ... on GitHub_Blob {
            text
          }
        }
      }
    }
  }
}

Но это все же требует фильтрации на стороне JavaScript. Поскольку мне нужно сначала получить все имена, отфильтруйте по расширению и запросите только эти файлы напрямую.

Это действительно правильный способ сделать в gatsby-source-graphql ; для тех, кто сталкивается с этим в будущем, посмотрите их пример проекта.

Теперь мне просто любопытно, можно ли объединить все эти операции в одну.

1 Ответ

0 голосов
/ 21 апреля 2019

В продолжение моего комментария : если вы хотите запросить содержимое определенного файла (как в вашем примере), вы можете использовать этот более чистый запрос:

{
  repository(owner: "kalessil", name: "phpinspectionsea") {
    ... on Github_Repository {
      object(expression: "master:docs/DEVELOPERS.md") {
        ... on Github_Blob {
          text
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...