Skip to content

Commit d3d1902

Browse files
authored
Merge pull request #20017 from github/upgrade-esm
Enforce and Move to Top Level require
1 parent efcb508 commit d3d1902

26 files changed

+106
-71
lines changed

lib/frontmatter.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
const parse = require('./read-frontmatter')
2-
const layoutNames = Object.keys(require('./layouts')).concat([false])
2+
const semver = require('semver')
3+
const layouts = require('./layouts')
4+
5+
const semverValidRange = semver.validRange
6+
const layoutNames = Object.keys(layouts).concat([false])
37
const semverRange = {
48
type: 'string',
5-
conform: require('semver').validRange,
9+
conform: semverValidRange,
610
message: 'Must be a valid SemVer range'
711
}
812
const versionIds = Object.keys(require('./all-versions'))

lib/redirects/permalinks.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const path = require('path')
22
const patterns = require('../patterns')
3-
const supportedVersions = new Set(Object.keys(require('../all-versions')))
3+
const allVersions = require('../all-versions')
4+
const supportedVersions = new Set(Object.keys(allVersions))
45
const getOldPathsFromPermalink = require('./get-old-paths-from-permalink')
56
const { getVersionStringFromPath } = require('../path-utils')
67
const { getNewVersionedPath } = require('../old-versions-utils')

lib/rest/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const operations = {}
66
fs.readdirSync(schemasPath)
77
.forEach(filename => {
88
const key = filename.replace('.json', '')
9-
const value = require(path.join(schemasPath, filename))
9+
const value = JSON.parse(fs.readFileSync(path.join(schemasPath, filename)))
1010
operations[key] = value
1111
})
1212
const allVersions = require('../all-versions')

lib/webhooks/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ versions.forEach(version => {
1919
// payload file: /path/to/check_run.completed.payload.json
2020
// payload path: check_run.completed
2121
const payloadPath = path.basename(payloadFile).replace('.payload.json', '')
22-
set(payloadsPerVersion, payloadPath, formatAsJsonCodeBlock(require(payloadFile)))
22+
set(payloadsPerVersion, payloadPath, formatAsJsonCodeBlock(JSON.parse(fs.readFileSync(payloadFile))))
2323
})
2424

2525
payloads[version] = payloadsPerVersion

middleware/contextualizers/graphql.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
const fs = require('fs')
2+
const path = require('path')
13
const previews = require('../../lib/graphql/static/previews')
24
const upcomingChanges = require('../../lib/graphql/static/upcoming-changes')
35
const changelog = require('../../lib/graphql/static/changelog')
@@ -23,7 +25,7 @@ module.exports = function graphqlContext (req, res, next) {
2325
const graphqlVersion = currentVersionObj.miscVersionName
2426

2527
req.context.graphql = {
26-
schemaForCurrentVersion: require(`../../lib/graphql/static/schema-${graphqlVersion}`),
28+
schemaForCurrentVersion: JSON.parse(fs.readFileSync(path.join(process.cwd(), `lib/graphql/static/schema-${graphqlVersion}.json`))),
2729
previewsForCurrentVersion: previews[graphqlVersion],
2830
upcomingChangesForCurrentVersion: upcomingChanges[graphqlVersion],
2931
prerenderedObjectsForCurrentVersion: prerenderedObjects[graphqlVersion],

middleware/csrf.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
const cookieSettings = require('../lib/cookie-settings')
2+
13
module.exports = require('csurf')({
2-
cookie: require('../lib/cookie-settings'),
4+
cookie: cookieSettings,
35
ignoreMethods: ['GET', 'HEAD', 'OPTIONS']
46
})

middleware/index.js

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,26 @@
11
const express = require('express')
22
const instrument = require('../lib/instrument-middleware')
33
const haltOnDroppedConnection = require('./halt-on-dropped-connection')
4+
const abort = require('./abort')
5+
const timeout = require('./timeout')
6+
const morgan = require('morgan')
7+
const datadog = require('./connect-datadog')
8+
const rateLimit = require('./rate-limit')
9+
const cors = require('./cors')
10+
const helmet = require('helmet')
11+
const csp = require('./csp')
12+
const cookieParser = require('./cookie-parser')
13+
const csrf = require('./csrf')
14+
const handleCsrfErrors = require('./handle-csrf-errors')
15+
const compression = require('compression')
16+
const disableCachingOnSafari = require('./disable-caching-on-safari')
17+
const setFastlySurrogateKey = require('./set-fastly-surrogate-key')
18+
const setFastlyCacheHeaders = require('./set-fastly-cache-headers')
19+
const catchBadAcceptLanguage = require('./catch-bad-accept-language')
20+
const reqUtils = require('./req-utils')
21+
const recordRedirect = require('./record-redirect')
22+
const connectSlashes = require('connect-slashes')
23+
const handleErrors = require('./handle-errors')
424

525
const { NODE_ENV } = process.env
626
const isDevelopment = NODE_ENV === 'development'
@@ -15,58 +35,57 @@ const asyncMiddleware = fn =>
1535

1636
module.exports = function (app) {
1737
// *** Request connection management ***
18-
if (!isTest) app.use(require('./timeout'))
19-
app.use(require('./abort'))
38+
if (!isTest) app.use(timeout)
39+
app.use(abort)
2040

2141
// *** Development tools ***
22-
app.use(require('morgan')('dev', { skip: (req, res) => !isDevelopment }))
23-
if (isDevelopment) app.use(require('./webpack'))
42+
app.use(morgan('dev', { skip: (req, res) => !isDevelopment }))
2443

2544
// *** Observability ***
2645
if (process.env.DD_API_KEY) {
27-
app.use(require('./connect-datadog'))
46+
app.use(datadog)
2847
}
2948

3049
// *** Early exits ***
3150
// Don't use the proxy's IP, use the requester's for rate limiting
3251
// See https://expressjs.com/en/guide/behind-proxies.html
3352
app.set('trust proxy', 1)
34-
app.use(require('./rate-limit'))
53+
app.use(rateLimit)
3554
app.use(instrument('./handle-invalid-paths'))
3655
app.use(instrument('./handle-next-data-path'))
3756

3857
// *** Security ***
39-
app.use(require('./cors'))
40-
app.use(require('helmet')({
58+
app.use(cors)
59+
app.use(helmet({
4160
// Override referrerPolicy to match the browser's default: "strict-origin-when-cross-origin".
4261
// Helmet now defaults to "no-referrer", which is a problem for our archived assets proxying.
4362
referrerPolicy: {
4463
policy: 'strict-origin-when-cross-origin'
4564
}
4665
}))
47-
app.use(require('./csp')) // Must come after helmet
48-
app.use(require('./cookie-parser')) // Must come before csrf
66+
app.use(csp) // Must come after helmet
67+
app.use(cookieParser) // Must come before csrf
4968
app.use(express.json()) // Must come before csrf
50-
app.use(require('./csrf'))
51-
app.use(require('./handle-csrf-errors')) // Must come before regular handle-errors
69+
app.use(csrf)
70+
app.use(handleCsrfErrors) // Must come before regular handle-errors
5271

5372
// *** Headers ***
5473
app.set('etag', false) // We will manage our own ETags if desired
55-
app.use(require('compression')())
56-
app.use(require('./disable-caching-on-safari'))
57-
app.use(require('./set-fastly-surrogate-key'))
58-
app.use(require('./catch-bad-accept-language'))
74+
app.use(compression())
75+
app.use(disableCachingOnSafari)
76+
app.use(setFastlySurrogateKey)
77+
app.use(catchBadAcceptLanguage)
5978

6079
// *** Config and context for redirects ***
61-
app.use(require('./req-utils')) // Must come before record-redirect and events
62-
app.use(require('./record-redirect'))
80+
app.use(reqUtils) // Must come before record-redirect and events
81+
app.use(recordRedirect)
6382
app.use(instrument('./detect-language')) // Must come before context, breadcrumbs, find-page, handle-errors, homepages
6483
app.use(asyncMiddleware(instrument('./context'))) // Must come before early-access-*, handle-redirects
6584
app.use(asyncMiddleware(instrument('./contextualizers/short-versions'))) // Support version shorthands
6685

6786
// *** Redirects, 3xx responses ***
6887
// I ordered these by use frequency
69-
app.use(require('connect-slashes')(false))
88+
app.use(connectSlashes(false))
7089
app.use(instrument('./redirects/external'))
7190
app.use(instrument('./redirects/help-to-docs'))
7291
app.use(instrument('./redirects/language-code-redirects')) // Must come before contextualizers
@@ -132,7 +151,7 @@ module.exports = function (app) {
132151
app.use(asyncMiddleware(instrument('./is-next-request')))
133152

134153
// *** Headers for pages only ***
135-
app.use(require('./set-fastly-cache-headers'))
154+
app.use(setFastlyCacheHeaders)
136155

137156
// handle serving NextJS bundled code (/_next/*)
138157
if (process.env.FEATURE_NEXTJS) {
@@ -146,5 +165,5 @@ module.exports = function (app) {
146165
app.get('/*', asyncMiddleware(instrument('./render-page')))
147166

148167
// *** Error handling, must go last ***
149-
app.use(require('./handle-errors'))
168+
app.use(handleErrors)
150169
}

middleware/search.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
const express = require('express')
2-
const languages = new Set(Object.keys(require('../lib/languages')))
3-
const versions = new Set(Object.values(require('../lib/search/versions')))
2+
const libLanguages = require('../lib/languages')
3+
const searchVersions = require('../lib/search/versions')
4+
const languages = new Set(Object.keys(libLanguages))
5+
const versions = new Set(Object.values(searchVersions))
46
const loadLunrResults = require('../lib/search/lunr-search')
57
const loadAlgoliaResults = require('../lib/search/algolia-search')
68

middleware/webpack.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

package-lock.json

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@
5757
"lodash": "^4.17.21",
5858
"lunr": "^2.3.9",
5959
"lunr-languages": "^1.4.0",
60-
"mdast-util-to-string": "^2.0.0",
6160
"mdast-util-from-markdown": "^0.8.5",
61+
"mdast-util-to-string": "^2.0.0",
6262
"morgan": "^1.10.0",
6363
"next": "^11.0.0",
6464
"node-fetch": "^2.6.1",
@@ -175,7 +175,6 @@
175175
"url-template": "^2.0.8",
176176
"webpack": "^5.37.0",
177177
"webpack-cli": "^4.7.0",
178-
"webpack-dev-middleware": "^4.2.0",
179178
"website-scraper": "^4.2.3"
180179
},
181180
"optionalDependencies": {

script/enterprise-server-releases/create-rest-files.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ async function main () {
6363
fs.writeFileSync(newDereferencedFile, newDereferenceContent)
6464
console.log(`Created ${newDereferencedFile}.`)
6565

66-
const dereferencedSchema = require(path.join(process.cwd(), newDereferencedFile))
66+
const dereferencedSchema = JSON.parse(fs.readFileSync(path.join(process.cwd(), newDereferencedFile)))
6767

6868
// Store all operations in an array of operation objects
6969
const operations = await getOperations(dereferencedSchema)

script/helpers/github.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
const dotenv = require('dotenv')
2+
13
if (!process.env.GITHUB_TOKEN) {
2-
require('dotenv').config()
4+
dotenv.config()
35
}
46

57
// this module needs to work in development, production, and GitHub Actions

script/reconcile-filenames-with-ids.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
const fs = require('fs')
44
const path = require('path')
55
const walk = require('walk-sync')
6-
const slugger = new (require('github-slugger'))()
7-
const entities = new (require('html-entities').XmlEntities)()
6+
const GithubSlugger = require('github-slugger')
7+
const htmlEntities = require('html-entities')
8+
const slugger = new GithubSlugger()
9+
const entities = new htmlEntities.XmlEntities()
810
const frontmatter = require('../lib/read-frontmatter')
911
const { execSync } = require('child_process')
1012
const addRedirectToFrontmatter = require('./helpers/add-redirect-to-frontmatter')

script/rest/openapi-check.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/usr/bin/env node
2-
2+
const fs = require('fs')
3+
const path = require('path')
34
const glob = require('glob')
45
const program = require('commander')
56
const getOperations = require('./utils/get-operations')
@@ -28,8 +29,7 @@ if (filesToCheck.length) {
2829

2930
async function check (files) {
3031
console.log('Verifying OpenAPI files are valid with decorator')
31-
32-
const documents = files.map(filename => [filename, require(filename)])
32+
const documents = files.map(filename => [filename, JSON.parse(fs.readFileSync(path.join(process.cwd(), filename)))])
3333

3434
for (const [filename, schema] of documents) {
3535
try {

script/rest/update-files.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ async function getDereferencedFiles () {
7575
// name of the `github/github` checkout. A CI test
7676
// checks the version and fails if it's not a semantic version.
7777
schemas.forEach(filename => {
78-
const schema = require(path.join(dereferencedPath, filename))
78+
const schema = JSON.parse(fs.readFileSync(path.join(dereferencedPath, filename)))
7979
schema.info.version = `${githubBranch} !!DEVELOPMENT MODE - DO NOT MERGE!!`
8080
fs.writeFileSync(path.join(dereferencedPath, filename), JSON.stringify(schema, null, 2))
8181
})
@@ -85,7 +85,7 @@ async function decorate () {
8585
console.log('\n🎄 Decorating the OpenAPI schema files in lib/rest/static/dereferenced.\n')
8686

8787
const dereferencedSchemas = schemas.reduce((acc, filename) => {
88-
const schema = require(path.join(dereferencedPath, filename))
88+
const schema = JSON.parse(fs.readFileSync(path.join(dereferencedPath, filename)))
8989
const key = filename.replace('.deref.json', '')
9090
return { ...acc, [key]: schema }
9191
}, {})

script/rest/utils/operation.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
const { get, flatten, isPlainObject } = require('lodash')
22
const { sentenceCase } = require('change-case')
3-
const slugger = new (require('github-slugger'))()
3+
const GitHubSlugger = require('github-slugger')
4+
const slugger = new GitHubSlugger()
45
const httpStatusCodes = require('http-status-code')
56
const renderContent = require('../../../lib/render-content')
67
const createCodeSamples = require('./create-code-samples')
78
const Ajv = require('ajv')
9+
const operationSchema = require('./operation-schema')
810

911
// titles that can't be derived by sentence-casing the ID
1012
const categoryTitles = { scim: 'SCIM' }
@@ -39,7 +41,7 @@ module.exports = class Operation {
3941
}
4042

4143
get schema () {
42-
return require('./operation-schema')
44+
return operationSchema
4345
}
4446

4547
async process () {

script/sync-search-indices.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
// It can also be run manually. For more info see [contributing/search.md](contributing/search.md)
77
//
88
// [end-readme]
9-
9+
const searchSync = require('./search/sync')
1010
require('make-promises-safe')
1111

1212
main()
1313

1414
async function main () {
15-
const sync = require('./search/sync')
15+
const sync = searchSync
1616
const opts = {
1717
dryRun: 'DRY_RUN' in process.env,
1818
language: process.env.LANGUAGE,

server.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ const throng = require('throng')
44
const os = require('os')
55
const portUsed = require('port-used')
66
const prefixStreamWrite = require('./lib/prefix-stream-write')
7+
const libApp = require('./lib/app')
8+
const libWarmServer = require('./lib/warm-server')
9+
const http = require('http')
710

811
// Intentionally require these for both cluster primary and workers
912
require('./lib/check-node-version')
@@ -46,8 +49,8 @@ async function checkPortAvailability () {
4649
}
4750

4851
async function startServer () {
49-
const app = require('./lib/app')
50-
const warmServer = require('./lib/warm-server')
52+
const app = libApp
53+
const warmServer = libWarmServer
5154

5255
// If in a deployed environment...
5356
if (NODE_ENV === 'production') {
@@ -58,7 +61,7 @@ async function startServer () {
5861
}
5962

6063
// Workaround for https://github.com/expressjs/express/issues/1101
61-
const server = require('http').createServer(app)
64+
const server = http.createServer(app)
6265
server
6366
.listen(port, () => console.log(`app running on http://localhost:${port}`))
6467
.on('error', () => server.close())

tests/browser/browser.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
/* global page, browser */
2+
const fs = require('fs')
3+
const path = require('path')
24
const sleep = require('await-sleep')
35
const { latest } = require('../../lib/enterprise-server-releases')
46
const languages = require('../../lib/languages')
7+
const featureFlags = JSON.parse(fs.readFileSync(path.join(process.cwd(), '/feature-flags.json')))
58

69
describe('homepage', () => {
710
jest.setTimeout(60 * 1000)
@@ -329,7 +332,7 @@ describe('nextjs query param', () => {
329332
jest.setTimeout(60 * 1000)
330333

331334
it('landing page renders through nextjs pipeline depending on FEATURE_NEXTJS value', async () => {
332-
const flagVal = require('../../feature-flags.json').FEATURE_NEXTJS
335+
const flagVal = featureFlags.FEATURE_NEXTJS
333336
await page.goto('http://localhost:4001/en/actions?nextjs=')
334337
const IS_NEXTJS_PAGE = await page.evaluate(() => window.IS_NEXTJS_PAGE)
335338
const nextWrapper = await page.$('#__next')

0 commit comments

Comments
 (0)