Я хотел бы запросить содержимое файлов разметки в папке с документами в хранилище. Я использую 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 ; для тех, кто сталкивается с этим в будущем, посмотрите их пример проекта.
Теперь мне просто любопытно, можно ли объединить все эти операции в одну.