Skip to content

Commit ad5e153

Browse files
authored
Merge pull request #5337 from github/repo-sync
repo sync
2 parents b825d35 + f515fdc commit ad5e153

7 files changed

Lines changed: 4554 additions & 19 deletions

File tree

content/graphql/reference/input-objects.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,5 @@ For example, [`CommitAuthor`](/graphql/reference/input-objects#commitauthor) tak
1919

2020
For more information, see "[About mutations](/graphql/guides/forming-calls-with-graphql#about-mutations)."
2121

22-
{% for item in graphql.schemaForCurrentVersion.inputObjects %}
23-
{% include graphql-input-object %}
24-
{% endfor %}
22+
<!-- this page is pre-rendered by scripts because it's too big to load dynamically -->
23+
<!-- see lib/graphql/static/prerendered-input-objects.json -->

lib/graphql/static/prerendered-input-objects.json

Lines changed: 4487 additions & 0 deletions
Large diffs are not rendered by default.

middleware/contextualizers/graphql.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const previews = require('../../lib/graphql/static/previews')
22
const upcomingChanges = require('../../lib/graphql/static/upcoming-changes')
33
const changelog = require('../../lib/graphql/static/changelog')
44
const prerenderedObjects = require('../../lib/graphql/static/prerendered-objects')
5+
const prerenderedInputObjects = require('../../lib/graphql/static/prerendered-input-objects')
56
const allVersions = require('../../lib/all-versions')
67

78
const explorerUrl = process.env.NODE_ENV === 'production'
@@ -26,6 +27,7 @@ module.exports = function graphqlContext (req, res, next) {
2627
previewsForCurrentVersion: previews[graphqlVersion],
2728
upcomingChangesForCurrentVersion: upcomingChanges[graphqlVersion],
2829
prerenderedObjectsForCurrentVersion: prerenderedObjects[graphqlVersion],
30+
prerenderedInputObjectsForCurrentVersion: prerenderedInputObjects[graphqlVersion],
2931
explorerUrl,
3032
changelog
3133
}

middleware/render-page.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,13 @@ module.exports = async function renderPage (req, res, next) {
107107
context.renderedPage = context.renderedPage + req.context.graphql.prerenderedObjectsForCurrentVersion.html
108108
}
109109

110+
// handle special-case prerendered GraphQL input objects page
111+
if (req.path.endsWith('graphql/reference/input-objects')) {
112+
// concat the markdown source miniToc items and the prerendered miniToc items
113+
context.miniTocItems = context.miniTocItems.concat(req.context.graphql.prerenderedInputObjectsForCurrentVersion.miniToc)
114+
context.renderedPage = context.renderedPage + req.context.graphql.prerenderedInputObjectsForCurrentVersion.html
115+
}
116+
110117
// Create string for <title> tag
111118
context.page.fullTitle = context.page.title
112119

script/graphql/update-files.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ const processPreviews = require('./utils/process-previews')
1414
const processUpcomingChanges = require('./utils/process-upcoming-changes')
1515
const processSchemas = require('./utils/process-schemas')
1616
const prerenderObjects = require('./utils/prerender-objects')
17+
const prerenderInputObjects = require('./utils/prerender-input-objects')
1718
const { prependDatedEntry, createChangelogEntry } = require('./build-changelog')
19+
const loadData = require('../../lib/site-data')
1820

1921
// check for required PAT
2022
if (!process.env.GITHUB_TOKEN) {
@@ -36,12 +38,23 @@ const removeHiddenMembersScript = path.join(__dirname, './utils/remove-hidden-sc
3638

3739
const versionsToBuild = Object.keys(allVersions)
3840

41+
const currentLanguage = 'en'
42+
3943
main()
4044

4145
async function main () {
4246
const previewsJson = {}
4347
const upcomingChangesJson = {}
4448
const prerenderedObjects = {}
49+
const prerenderedInputObjects = {}
50+
51+
const siteData = await loadData()
52+
53+
// create a bare minimum context for rendering the graphql-object.html layout
54+
const context = {
55+
currentLanguage,
56+
site: siteData[currentLanguage].site
57+
}
4558

4659
for (const version of versionsToBuild) {
4760
// Get the relevant GraphQL name for the current version
@@ -73,11 +86,19 @@ async function main () {
7386
const schemaJsonPerVersion = await processSchemas(safeForPublicSchema, safeForPublicPreviews)
7487
updateStaticFile(schemaJsonPerVersion, path.join(graphqlStaticDir, `schema-${graphqlVersion}.json`))
7588

89+
// Add some version specific data to the context
90+
context.graphql = { schemaForCurrentVersion: schemaJsonPerVersion }
91+
context.currentVersion = version
92+
7693
// 4. PRERENDER OBJECTS HTML
7794
// because the objects page is too big to render on page load
78-
prerenderedObjects[graphqlVersion] = await prerenderObjects(schemaJsonPerVersion, version)
95+
prerenderedObjects[graphqlVersion] = await prerenderObjects(context)
96+
97+
// 5. PRERENDER INPUT OBJECTS HTML
98+
// because the objects page is too big to render on page load
99+
prerenderedInputObjects[graphqlVersion] = await prerenderInputObjects(context)
79100

80-
// 5. UPDATE CHANGELOG
101+
// 6. UPDATE CHANGELOG
81102
if (allVersions[version].nonEnterpriseDefault) {
82103
// The Changelog is only build for free-pro-team@latest
83104
const changelogEntry = await createChangelogEntry(
@@ -96,6 +117,7 @@ async function main () {
96117
updateStaticFile(previewsJson, path.join(graphqlStaticDir, 'previews.json'))
97118
updateStaticFile(upcomingChangesJson, path.join(graphqlStaticDir, 'upcoming-changes.json'))
98119
updateStaticFile(prerenderedObjects, path.join(graphqlStaticDir, 'prerendered-objects.json'))
120+
updateStaticFile(prerenderedInputObjects, path.join(graphqlStaticDir, 'prerendered-input-objects.json'))
99121

100122
// Ensure the YAML linter runs before checkinging in files
101123
execSync('npx prettier -w "**/*.{yml,yaml}"')
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
const fs = require('fs')
2+
const path = require('path')
3+
const cheerio = require('cheerio')
4+
const { liquid } = require('../../../lib/render-content')
5+
const getMiniTocItems = require('../../../lib/get-mini-toc-items')
6+
const rewriteLocalLinks = require('../../../lib/rewrite-local-links')
7+
const includes = path.join(process.cwd(), 'includes')
8+
const inputObjectIncludeFile = fs.readFileSync(path.join(includes, 'graphql-input-object.html'), 'utf8')
9+
10+
module.exports = async function prerenderInputObjects (context) {
11+
const inputObjectsArray = []
12+
13+
// render the graphql-object.html layout for every object
14+
for (const inputObject of context.graphql.schemaForCurrentVersion.inputObjects) {
15+
context.item = inputObject
16+
const inputObjectHtml = await liquid.parseAndRender(inputObjectIncludeFile, context)
17+
const $ = cheerio.load(inputObjectHtml, { xmlMode: true })
18+
rewriteLocalLinks($, context.currentVersion, context.currentLanguage)
19+
const htmlWithVersionedLinks = $.html()
20+
inputObjectsArray.push(htmlWithVersionedLinks)
21+
}
22+
23+
const inputObjectsHtml = inputObjectsArray.join('\n')
24+
25+
return {
26+
html: inputObjectsHtml,
27+
miniToc: getMiniTocItems(inputObjectsHtml)
28+
}
29+
}

script/graphql/utils/prerender-objects.js

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,16 @@ const getMiniTocItems = require('../../../lib/get-mini-toc-items')
66
const rewriteLocalLinks = require('../../../lib/rewrite-local-links')
77
const includes = path.join(process.cwd(), 'includes')
88
const objectIncludeFile = fs.readFileSync(path.join(includes, 'graphql-object.html'), 'utf8')
9-
// TODO need to localize
10-
const currentLanguage = 'en'
11-
12-
module.exports = async function prerenderObjects (schemaJsonPerVersion, version) {
13-
const site = await require('../../../lib/site-data')()
14-
15-
// create a bare minimum context for rendering the graphql-object.html layout
16-
const context = {
17-
currentLanguage,
18-
site: site[currentLanguage].site,
19-
graphql: { schemaForCurrentVersion: schemaJsonPerVersion }
20-
}
219

10+
module.exports = async function prerenderObjects (context) {
2211
const objectsArray = []
2312

2413
// render the graphql-object.html layout for every object
25-
for (const object of schemaJsonPerVersion.objects) {
14+
for (const object of context.graphql.schemaForCurrentVersion.objects) {
2615
context.item = object
2716
const objectHtml = await liquid.parseAndRender(objectIncludeFile, context)
2817
const $ = cheerio.load(objectHtml, { xmlMode: true })
29-
rewriteLocalLinks($, version, currentLanguage)
18+
rewriteLocalLinks($, context.currentVersion, context.currentLanguage)
3019
const htmlWithVersionedLinks = $.html()
3120
objectsArray.push(htmlWithVersionedLinks)
3221
}

0 commit comments

Comments
 (0)