-
Notifications
You must be signed in to change notification settings - Fork 16
/
gatsby-plugin-algolia-config.ts
124 lines (120 loc) · 3.05 KB
/
gatsby-plugin-algolia-config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import dotenv from 'dotenv'
dotenv.config({
path: '.env',
})
import { AIRTABLE_CONTENTS } from './src/constants/airtable'
const mdxQueries = [
{
query: `
{
allMdx {
edges {
node {
fields {
category
}
frontmatter {
title
description
}
id
slug
rawBody
internal {
contentDigest
}
}
}
}
}
`,
transformer: ({ data }: { data: { allMdx: Queries.Query['allMdx'] } }) =>
data.allMdx.edges.map(({ node: { rawBody, fields, frontmatter, id, slug, internal } }) => ({
id,
internal,
title: frontmatter?.title || '',
category: fields?.category || '',
description: frontmatter?.description || '',
body: rawBody,
path: slug,
})),
},
]
const airtableQueries = AIRTABLE_CONTENTS.map((item) => {
return {
query: `
{
allMdx(filter: { frontmatter: { title: {eq: "${item.pageTitle}" } } }) {
edges {
node {
fields {
category
}
frontmatter {
title
description
}
id
slug
rawBody
internal {
contentDigest
}
}
}
}
allSdsAirtable(filter: { table: { eq: "${item.tableName}" } }) {
edges {
node {
id
internal {
contentDigest
}
data {
name
description
discussion
source
label
ng_example
ok_example
expected
reason
record_id
order
}
}
}
}
}
`,
transformer: ({ data }: { data: { allMdx: Queries.Query['allMdx']; allSdsAirtable: Queries.Query['allSdsAirtable'] } }) =>
data.allMdx.edges.map(({ node: { rawBody, fields, frontmatter, id, slug, internal } }) => ({
id,
internal,
title: frontmatter?.title || '',
category: fields?.category || '',
description: frontmatter?.description || '',
body:
rawBody +
data.allSdsAirtable.edges
.map((edge) => {
return Object.values(edge.node?.data || {})
.filter((value) => {
return value !== null
})
.join(' ')
})
.join(' '),
path: slug,
})),
}
})
export const algoliaConfig = {
appId: process.env.GATSBY_ALGOLIA_APP_ID,
apiKey: process.env.ALGOLIA_ADMIN_API_KEY,
indexName: process.env.GATSBY_ALGOLIA_INDEX_NAME,
queries: [...mdxQueries, ...airtableQueries],
dryRun: process.env.BRANCH !== 'main',
continueOnFailure: process.env.BRANCH !== 'main',
}