aboutsummaryrefslogtreecommitdiffstats
path: root/gatsby-config.ts
blob: e0de17b6df83141c1215e155b578777dedfacb3a (plain) (blame)
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
import type { GatsbyConfig } from "gatsby";

const siteURL = "https://ops.pydis.wtf";

const config: GatsbyConfig = {
  siteMetadata: {
    title: `PyDis Ops`,
    siteUrl: siteURL,
  },
  // More easily incorporate content into your pages through automatic TypeScript type generation and better GraphQL IntelliSense.
  // If you use VSCode you can also use the GraphQL plugin
  // Learn more at: https://gatsby.dev/graphql-typegen
  graphqlTypegen: true,
  plugins: ["gatsby-plugin-styled-components", "gatsby-plugin-image", "gatsby-plugin-sitemap", {
    resolve: 'gatsby-plugin-manifest',
    options: {
      "icon": "src/images/icon.png"
    }
  }, "gatsby-plugin-mdx", "gatsby-plugin-sharp", "gatsby-transformer-sharp", {
      resolve: 'gatsby-source-filesystem',
      options: {
        "name": "images",
        "path": "./src/images/"
      },
      __key: "images"
    }, {
      resolve: 'gatsby-source-filesystem',
      options: {
        "name": "service_images",
        "path": "./service_images/"
      },
      __key: "service_images"
    },
    {
      resolve: 'gatsby-source-filesystem',
      options: {
        "name": "pages",
        "path": "./src/pages/"
      },
      __key: "pages"
    },
    `gatsby-transformer-yaml`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        path: `./data/`,
      },
    }, {
      resolve: `gatsby-plugin-json-output`,
      options: {
        siteUrl: siteURL,
        graphQLQuery: `
          {
            services: allServicesYaml {
              nodes {
                slug
                name
                description
                url
                tags
              }
        
              tags: distinct(field: {tags: SELECT})
            }
              
            images: allFile(filter: {sourceInstanceName: {eq: "service_images"}}) {
              nodes {
                name
                childImageSharp {
                  resize(height: 256, quality: 100, toFormat: PNG) {
                    src
                  }
                }
              }
            }
          }
        `,
        serializeFeed: ({ data }: { data: any }) => {
          const serviceImageMap: { [key: string]: string } = {};
          data.images.nodes.forEach((node: any) => {
            serviceImageMap[node.name] = node.childImageSharp.resize.src;
          });

          const services = data.services.nodes.map((service: any) => ({
            ...service,
            image: serviceImageMap[service.slug] ? serviceImageMap[service.slug] : serviceImageMap["unknown"],
          }));

          return services;
        },
        feedFilename: "services",
        nodesPerFeedFile: 100,
      }
    }],
  headers: [
    {
      source: "/*",
      headers: [
        {
          key: "Referrer-Policy",
          value: "strict-origin-when-cross-origin",
        }
      ]
    }
  ]
};

export default config;