@@ -8,11 +8,13 @@ const createSlug = require('./util-node/createSlug');
88const getNodeReleasesData = require ( './util-node/getNodeReleasesData' ) ;
99const getBannersData = require ( './util-node/getBannersData' ) ;
1010const getNvmData = require ( './util-node/getNvmData' ) ;
11- const createPagesQuery = require ( './util-node/createPagesQuery ' ) ;
11+ const createBlogQuery = require ( './util-node/createBlogQuery ' ) ;
1212const createLearnQuery = require ( './util-node/createLearnQuery' ) ;
1313const createApiQuery = require ( './util-node/createApiQuery' ) ;
14- const createMarkdownPages = require ( './util-node/createMarkdownPages' ) ;
14+ const createBlogPages = require ( './util-node/createBlogPages' ) ;
15+ const createLearnPages = require ( './util-node/createLearnPages' ) ;
1516const createApiPages = require ( './util-node/createApiPages' ) ;
17+ const generateRedirects = require ( './util-node/generateRedirects' ) ;
1618const redirects = require ( './redirects' ) ;
1719const nodeLocales = require ( './locales' ) ;
1820const { learnPath, apiPath, blogPath } = require ( './pathPrefixes' ) ;
@@ -69,79 +71,101 @@ exports.createSchemaCustomization = ({ actions }) => {
6971 createTypes ( typeDefs ) ;
7072} ;
7173
72- exports . createPages = async ( { graphql, actions, reporter } ) => {
74+ exports . createPages = async ( { graphql, actions } ) => {
7375 const { createPage, createRedirect } = actions ;
7476
7577 const pageRedirects = { ...redirects } ;
7678
77- const apiTemplate = path . resolve ( __dirname , './src/templates/api.tsx' ) ;
78- const learnTemplate = path . resolve ( __dirname , './src/templates/learn.tsx' ) ;
79- const blogTemplate = path . resolve ( __dirname , './src/templates/blog.tsx' ) ;
80- const blogCategoryTemplate = path . resolve (
81- __dirname ,
82- './src/templates/blog-category.tsx'
83- ) ;
79+ const templates = path . resolve ( __dirname , './src/templates/' ) ;
80+
81+ const apiTemplate = `${ templates } /api.tsx` ;
82+ const learnTemplate = `${ templates } /learn.tsx` ;
83+ const postTemplate = `${ templates } /post.tsx` ;
84+ const blogTemplate = `${ templates } /blog.tsx` ;
8485
85- const [ learnResult , pagesResult , apiResult ] = await Promise . all ( [
86+ const [ learnResult , blogResult , apiResult ] = await Promise . all ( [
8687 graphql ( createLearnQuery ) ,
87- graphql ( createPagesQuery ) ,
88+ graphql ( createBlogQuery ) ,
8889 graphql ( createApiQuery ) ,
8990 ] ) ;
9091
91- if ( pagesResult . errors || learnResult . errors || apiResult . errors ) {
92- reporter . panicOnBuild ( 'Error while running GraphQL queries.' ) ;
93- return ;
94- }
95-
9692 const {
97- pages : { edges : pageEdges } ,
93+ pages : { edges : blogEdges } ,
9894 categories : { edges : categoryEdges } ,
99- } = pagesResult . data ;
95+ } = blogResult . data ;
10096
10197 const {
10298 allMdx : { edges : learnEdges } ,
10399 } = learnResult . data ;
104100
105101 const {
106102 pages : { edges : apiEdges } ,
107- nodeReleases : { nodeReleasesVersion } ,
103+ nodeReleases : { nodeReleasesData , apiAvailableVersions } ,
108104 } = apiResult . data ;
109105
110- const {
111- markdownPages ,
112- learnPages,
113- firstLearnPage ,
114- navigationData : learNavigationData ,
115- } = createMarkdownPages ( pageEdges , learnEdges , learnYamlNavigationData ) ;
106+ const { blogPages } = createBlogPages ( blogEdges ) ;
107+
108+ const { learnPages, navigationData : learnNavigationData } = createLearnPages (
109+ learnEdges ,
110+ learnYamlNavigationData
111+ ) ;
116112
117113 const {
118114 apiPages,
119115 latestVersion,
120116 navigationData : apiNavigationData ,
121117 defaultNavigationRedirects : apiRedirects ,
122- } = createApiPages ( apiEdges , apiTypesNavigationData , nodeReleasesVersion ) ;
118+ } = createApiPages ( apiEdges , apiTypesNavigationData , nodeReleasesData ) ;
119+
120+ createPage ( {
121+ path : learnPath ,
122+ component : learnTemplate ,
123+ context : { ...learnPages [ 0 ] , navigationData : learnNavigationData } ,
124+ } ) ;
123125
124- if ( firstLearnPage ) {
126+ createPage ( {
127+ path : blogPath ,
128+ component : blogTemplate ,
129+ context : { categories : categoryEdges , posts : blogEdges } ,
130+ } ) ;
131+
132+ learnPages . forEach ( page => {
125133 createPage ( {
126- path : learnPath ,
134+ path : page . slug ,
127135 component : learnTemplate ,
128- context : { ...firstLearnPage , navigationData : learNavigationData } ,
136+ context : { ...page , navigationData : learnNavigationData } ,
129137 } ) ;
130- }
138+ } ) ;
131139
132- learnPages . forEach ( page => {
140+ blogPages . forEach ( page => {
133141 createPage ( {
134142 path : page . slug ,
135- component : learnTemplate ,
136- context : { ...page , navigationData : learNavigationData } ,
143+ component : postTemplate ,
144+ context : { ...page , recent : blogEdges . slice ( 0 , 9 ) } ,
137145 } ) ;
138146 } ) ;
139147
140148 categoryEdges . forEach ( ( { node } ) => {
149+ const posts = blogEdges . filter (
150+ ( { node : item } ) => item . fields . categoryName === node . name
151+ ) ;
152+
141153 createPage ( {
142154 path : `${ blogPath } ${ node . name } /` ,
143- component : blogCategoryTemplate ,
144- context : { categoryName : node . name } ,
155+ component : blogTemplate ,
156+ context : { categories : categoryEdges , category : node , posts } ,
157+ } ) ;
158+ } ) ;
159+
160+ apiPages . forEach ( page => {
161+ createPage ( {
162+ path : page . slug ,
163+ component : apiTemplate ,
164+ context : {
165+ ...page ,
166+ navigationData : apiNavigationData [ page . version ] ,
167+ nodeReleases : { nodeReleasesData, apiAvailableVersions } ,
168+ } ,
145169 } ) ;
146170 } ) ;
147171
@@ -150,6 +174,11 @@ exports.createPages = async ({ graphql, actions, reporter }) => {
150174 pageRedirects [ apiPath ] = `${ latestApiPath } documentation/` ;
151175 pageRedirects [ latestApiPath ] = `${ latestApiPath } documentation/` ;
152176
177+ // Updates `firebase.json` with new redirects
178+ // This is used for our static hosting redirects (npm run build)
179+ // When using `npm run serve` or `npm run start` this will not be needed
180+ generateRedirects ( pageRedirects ) ;
181+
153182 apiRedirects . forEach ( ( { from, to } ) => {
154183 pageRedirects [ `${ apiPath } ${ from } ` ] = `${ apiPath } ${ to } ` ;
155184
@@ -158,33 +187,13 @@ exports.createPages = async ({ graphql, actions, reporter }) => {
158187 pageRedirects [ `${ apiPath } ${ from . slice ( 0 , - 1 ) } .html` ] = `${ apiPath } ${ to } ` ;
159188 } ) ;
160189
161- apiPages . forEach ( page => {
162- createPage ( {
163- path : page . slug ,
164- component : apiTemplate ,
165- context : { ...page , navigationData : apiNavigationData [ page . version ] } ,
166- } ) ;
167- } ) ;
168-
169- markdownPages
170- . filter ( page => page . realPath . match ( blogPath ) )
171- . forEach ( page => {
172- // Blog Pages don't necessary need to be within the `blog` category
173- // But actually inside /content/blog/ section of the repository
174- createPage ( {
175- path : page . slug ,
176- component : blogTemplate ,
177- context : page ,
178- } ) ;
179- } ) ;
180-
181190 // Create Redirects for Pages
182191 Object . keys ( pageRedirects ) . forEach ( from => {
183192 const metadata = {
184193 fromPath : from ,
185194 toPath : pageRedirects [ from ] ,
186195 isPermanent : true ,
187- redirectInBrowser : true ,
196+ redirectInBrowser : process . env . NODE_ENV === 'development' ,
188197 statusCode : 200 ,
189198 } ;
190199
0 commit comments