diff --git a/lib/feature-flags.js b/lib/feature-flags.js index 970599f073..f125b40b8c 100644 --- a/lib/feature-flags.js +++ b/lib/feature-flags.js @@ -1,4 +1,5 @@ -const featureFlags = require('../feature-flags') +const readJsonFile = require('./read-json-file') +const featureFlags = readJsonFile('./feature-flags.json') // add feature flags as environment variables Object.entries(featureFlags).forEach(([feature, value]) => { diff --git a/lib/read-json-file.js b/lib/read-json-file.js new file mode 100644 index 0000000000..353bdd078b --- /dev/null +++ b/lib/read-json-file.js @@ -0,0 +1,14 @@ +const fs = require('fs') +const path = require('path') + +module.exports = function readJsonFile (xpath) { + return JSON.parse( + fs.readFileSync( + path.join( + process.cwd(), + xpath + ), + 'utf8' + ) + ) +} diff --git a/lib/redirects/precompile.js b/lib/redirects/precompile.js index 9112bb32f4..cd3b4dfa75 100755 --- a/lib/redirects/precompile.js +++ b/lib/redirects/precompile.js @@ -1,4 +1,5 @@ -const developerRedirects = require('../redirects/static/developer') +const readJsonFile = require('../read-json-file') +const developerRedirects = readJsonFile('./lib/redirects/static/developer.json') const { latest } = require('../../lib/enterprise-server-releases') const latestDevRedirects = {} diff --git a/lib/render-content/plugins/rewrite-local-links.js b/lib/render-content/plugins/rewrite-local-links.js index 5e121c333f..a357a312ed 100644 --- a/lib/render-content/plugins/rewrite-local-links.js +++ b/lib/render-content/plugins/rewrite-local-links.js @@ -1,15 +1,17 @@ const path = require('path') const visit = require('unist-util-visit') -const externalRedirects = Object.keys(require('../../redirects/external-sites')) const { getPathWithoutLanguage, getVersionStringFromPath } = require('../../path-utils') const { getNewVersionedPath } = require('../../old-versions-utils') const patterns = require('../../patterns') const { deprecated, latest } = require('../../enterprise-server-releases') const nonEnterpriseDefaultVersion = require('../../non-enterprise-default-version') const allVersions = require('../../all-versions') +const removeFPTFromPath = require('../../remove-fpt-from-path') const supportedVersions = Object.keys(allVersions) const supportedPlans = Object.values(allVersions).map(v => v.plan) -const removeFPTFromPath = require('../../remove-fpt-from-path') +const readJsonFile = require('../../read-json-file') +const externalRedirects = Object.keys(readJsonFile('./lib/redirects/external-sites.json')) + // Matches any tags with an href that starts with `/` const matcher = node => ( diff --git a/lib/rewrite-local-links.js b/lib/rewrite-local-links.js index 947c684684..d30101f28c 100644 --- a/lib/rewrite-local-links.js +++ b/lib/rewrite-local-links.js @@ -1,6 +1,5 @@ const assert = require('assert') const path = require('path') -const externalRedirects = Object.keys(require('./redirects/external-sites')) const { getPathWithoutLanguage, getVersionStringFromPath } = require('./path-utils') const { getNewVersionedPath } = require('./old-versions-utils') const patterns = require('./patterns') @@ -10,6 +9,8 @@ const allVersions = require('./all-versions') const supportedVersions = Object.keys(allVersions) const supportedPlans = Object.values(allVersions).map(v => v.plan) const removeFPTFromPath = require('./remove-fpt-from-path') +const readJsonFile = require('./read-json-file') +const externalRedirects = readJsonFile('./lib/redirects/external-sites.json') // Content authors write links like `/some/article/path`, but they need to be // rewritten on the fly to match the current language and page version diff --git a/lib/search/algolia-search.js b/lib/search/algolia-search.js index 4f415a9c5c..4b915a52b9 100644 --- a/lib/search/algolia-search.js +++ b/lib/search/algolia-search.js @@ -1,6 +1,6 @@ const algoliasearch = require('algoliasearch') const { get } = require('lodash') -const { namePrefix } = require('./config') +const { namePrefix } = require('./config.js') // https://www.algolia.com/apps/ZI5KPY1HBE/dashboard // This API key is public. There's also a private API key for writing to the Algolia API diff --git a/lib/search/lunr-search.js b/lib/search/lunr-search.js index 5d01d60faa..8fddc5ff35 100644 --- a/lib/search/lunr-search.js +++ b/lib/search/lunr-search.js @@ -8,7 +8,7 @@ require('lunr-languages/lunr.pt')(lunr) require('lunr-languages/lunr.de')(lunr) const { get } = require('lodash') const readFileAsync = require('../readfile-async') -const { namePrefix } = require('./config') +const { namePrefix } = require('./config.js') const { decompress } = require('./compress') const LUNR_DIR = './indexes' diff --git a/middleware/archived-enterprise-versions.js b/middleware/archived-enterprise-versions.js index 3a5cd96f7f..c599a49db1 100644 --- a/middleware/archived-enterprise-versions.js +++ b/middleware/archived-enterprise-versions.js @@ -5,8 +5,9 @@ const patterns = require('../lib/patterns') const versionSatisfiesRange = require('../lib/version-satisfies-range') const isArchivedVersion = require('../lib/is-archived-version') const got = require('got') -const archvivedRedirects = require('../lib/redirects/static/archived-redirects-from-213-to-217') -const archivedFrontmatterFallbacks = require('../lib/redirects/static/archived-frontmatter-fallbacks') +const readJsonFile = require('../lib/read-json-file') +const archvivedRedirects = readJsonFile('./lib/redirects/static/archived-redirects-from-213-to-217.json') +const archivedFrontmatterFallbacks = readJsonFile('./lib/redirects/static/archived-frontmatter-fallbacks.json') // This module handles requests for deprecated GitHub Enterprise versions // by routing them to static content in help-docs-archived-enterprise-versions diff --git a/middleware/context.js b/middleware/context.js index 42cfcfe168..9eedd09a98 100644 --- a/middleware/context.js +++ b/middleware/context.js @@ -11,7 +11,8 @@ const { } = require('../lib/path-utils') const productNames = require('../lib/product-names') const warmServer = require('../lib/warm-server') -const featureFlags = Object.keys(require('../feature-flags')) +const readJsonFile = require('../lib/read-json-file') +const featureFlags = Object.keys(readJsonFile('./feature-flags.json')) const builtAssets = require('../lib/built-asset-urls') const searchVersions = require('../lib/search/versions') const nonEnterpriseDefaultVersion = require('../lib/non-enterprise-default-version') diff --git a/middleware/contextualizers/graphql.js b/middleware/contextualizers/graphql.js index f07a1506ed..037f4c0a3b 100644 --- a/middleware/contextualizers/graphql.js +++ b/middleware/contextualizers/graphql.js @@ -1,10 +1,11 @@ const fs = require('fs') const path = require('path') -const previews = require('../../lib/graphql/static/previews') -const upcomingChanges = require('../../lib/graphql/static/upcoming-changes') -const changelog = require('../../lib/graphql/static/changelog') -const prerenderedObjects = require('../../lib/graphql/static/prerendered-objects') -const prerenderedInputObjects = require('../../lib/graphql/static/prerendered-input-objects') +const readJsonFile = require('../../lib/read-json-file') +const previews = readJsonFile('./lib/graphql/static/previews.json') +const upcomingChanges = readJsonFile('./lib/graphql/static/upcoming-changes.json') +const changelog = readJsonFile('./lib/graphql/static/changelog.json') +const prerenderedObjects = readJsonFile('./lib/graphql/static/prerendered-objects.json') +const prerenderedInputObjects = readJsonFile('./lib/graphql/static/prerendered-input-objects.json') const allVersions = require('../../lib/all-versions') const explorerUrl = process.env.NODE_ENV === 'production' diff --git a/middleware/redirects/external.js b/middleware/redirects/external.js index b6172696e3..71c8344ed2 100644 --- a/middleware/redirects/external.js +++ b/middleware/redirects/external.js @@ -1,4 +1,5 @@ -const externalSites = require('../../lib/redirects/external-sites') +const readJsonFile = require('../../lib/read-json-file') +const externalSites = readJsonFile('./lib/redirects/external-sites.json') // blanket redirects to external websites module.exports = function externalRedirects (req, res, next) { diff --git a/script/graphql/update-files.js b/script/graphql/update-files.js index 50da5fbbf7..408b45893b 100755 --- a/script/graphql/update-files.js +++ b/script/graphql/update-files.js @@ -8,7 +8,7 @@ const { execSync } = require('child_process') const graphqlDataDir = path.join(process.cwd(), 'data/graphql') const graphqlStaticDir = path.join(process.cwd(), 'lib/graphql/static') const { getContents, listMatchingRefs } = require('../helpers/git-utils') -const dataFilenames = require('./utils/data-filenames') +const dataFilenames = JSON.parse(fs.readFileSync('./utils/data-filenames.json')) const allVersions = require('../../lib/all-versions') const processPreviews = require('./utils/process-previews') const processUpcomingChanges = require('./utils/process-upcoming-changes') diff --git a/script/graphql/utils/process-schemas.js b/script/graphql/utils/process-schemas.js index 16fde19ff2..ad55211c6a 100755 --- a/script/graphql/utils/process-schemas.js +++ b/script/graphql/utils/process-schemas.js @@ -1,8 +1,9 @@ const { sortBy } = require('lodash') const { parse, buildASTSchema } = require('graphql') const helpers = require('./schema-helpers') +const fs = require('fs') -const externalScalars = require('../../../lib/graphql/non-schema-scalars') +const externalScalars = JSON.parse(fs.readFileSync('../../../lib/graphql/non-schema-scalars.json')) .map(scalar => { scalar.id = helpers.getId(scalar.name) scalar.href = helpers.getFullLink('scalars', scalar.id) diff --git a/script/graphql/utils/schema-helpers.js b/script/graphql/utils/schema-helpers.js index 80ed730b7d..21958e3601 100644 --- a/script/graphql/utils/schema-helpers.js +++ b/script/graphql/utils/schema-helpers.js @@ -1,5 +1,6 @@ const renderContent = require('../../../lib/render-content') -const graphqlTypes = require('../../../lib/graphql/types') +const fs = require('fs') +const graphqlTypes = JSON.parse(fs.readFileSync('../../../lib/graphql/types.json')) const { isScalarType, isObjectType, diff --git a/tests/browser/browser.js b/tests/browser/browser.js index 88138c7ed5..6c1b12e809 100644 --- a/tests/browser/browser.js +++ b/tests/browser/browser.js @@ -4,7 +4,7 @@ const path = require('path') const sleep = require('await-sleep') const { latest } = require('../../lib/enterprise-server-releases') const languages = require('../../lib/languages') -const featureFlags = JSON.parse(fs.readFileSync(path.join(process.cwd(), '/feature-flags.json'))) +const featureFlags = JSON.parse(fs.readFileSync(path.join(process.cwd(), './feature-flags.json'))) describe('homepage', () => { jest.setTimeout(60 * 1000) diff --git a/tests/content/graphql.js b/tests/content/graphql.js index 67d2735f6b..3f0a3216a8 100644 --- a/tests/content/graphql.js +++ b/tests/content/graphql.js @@ -1,13 +1,14 @@ const fs = require('fs') const path = require('path') -const previewsJson = require('../../lib/graphql/static/previews') -const upcomingChangesJson = require('../../lib/graphql/static/upcoming-changes') -const prerenderedObjectsJson = require('../../lib/graphql/static/prerendered-objects') +const readJsonFile = require('../../lib/read-json-file') +const previewsJson = readJsonFile('./lib/graphql/static/previews.json') +const upcomingChangesJson = readJsonFile('./lib/graphql/static/upcoming-changes.json') +const prerenderedObjectsJson = readJsonFile('./lib/graphql/static/prerendered-objects.json') const { schemaValidator, previewsValidator, upcomingChangesValidator } = require('../../lib/graphql/validator') const revalidator = require('revalidator') const allVersions = Object.values(require('../../lib/all-versions')) const graphqlVersions = allVersions.map(v => v.miscVersionName) -const graphqlTypes = require('../../lib/graphql/types').map(t => t.kind) +const graphqlTypes = readJsonFile('./lib/graphql/types.json').map(t => t.kind) describe('graphql json files', () => { jest.setTimeout(3 * 60 * 1000) diff --git a/tests/graphql/build-changelog-test.js b/tests/graphql/build-changelog-test.js index e27f2f86a8..7c04d2edf5 100644 --- a/tests/graphql/build-changelog-test.js +++ b/tests/graphql/build-changelog-test.js @@ -3,8 +3,9 @@ const { createChangelogEntry, cleanPreviewTitle, previewAnchor, prependDatedEntr const fs = require('fs').promises const MockDate = require('mockdate') const readFileAsync = require('../../lib/readfile-async') -const expectedChangelogEntry = require('../fixtures/changelog-entry') -const expectedUpdatedChangelogFile = require('../fixtures/updated-changelog-file') +const readJsonFile = require('../../lib/read-json-file') +const expectedChangelogEntry = readJsonFile('./tests/fixtures/changelog-entry.json') +const expectedUpdatedChangelogFile = readJsonFile('./tests/fixtures/updated-changelog-file.json') describe('creating a changelog from old schema and new schema', () => { afterEach(() => { diff --git a/tests/routing/developer-site-redirects.js b/tests/routing/developer-site-redirects.js index 53a776d34b..89e75099c4 100644 --- a/tests/routing/developer-site-redirects.js +++ b/tests/routing/developer-site-redirects.js @@ -2,9 +2,10 @@ const path = require('path') const { eachOfLimit } = require('async') const enterpriseServerReleases = require('../../lib/enterprise-server-releases') const { get } = require('../helpers/supertest') -const restRedirectFixtures = require('../fixtures/rest-redirects') -const graphqlRedirectFixtures = require('../fixtures/graphql-redirects') -const developerRedirectFixtures = require('../fixtures/developer-redirects') +const readJsonFile = require('../../lib/read-json-file') +const restRedirectFixtures = readJsonFile('./tests/fixtures/rest-redirects.json') +const graphqlRedirectFixtures = readJsonFile('./tests/fixtures/graphql-redirects.json') +const developerRedirectFixtures = readJsonFile('./tests/fixtures/developer-redirects.json') const MAX_CONCURRENT_REQUESTS = 50 diff --git a/tests/routing/top-developer-site-path-redirects.js b/tests/routing/top-developer-site-path-redirects.js index 233b06ab5b..ee033f8cb6 100644 --- a/tests/routing/top-developer-site-path-redirects.js +++ b/tests/routing/top-developer-site-path-redirects.js @@ -1,7 +1,6 @@ -const fs = require('fs') -const path = require('path') const { head } = require('../helpers/supertest') -const topOldDeveloperSitePaths = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'tests/fixtures/top-old-developer-site-paths.json'))) +const readJsonFile = require('../../lib/read-json-file') +const topOldDeveloperSitePaths = readJsonFile('tests/fixtures/top-old-developer-site-paths.json') jest.useFakeTimers() diff --git a/tests/unit/feature-flags.js b/tests/unit/feature-flags.js index 4b41ada884..18be5f8207 100644 --- a/tests/unit/feature-flags.js +++ b/tests/unit/feature-flags.js @@ -1,5 +1,6 @@ require('../../lib/feature-flags') -const ffs = require('../../feature-flags') +const readJsonFile = require('../../lib/read-json-file') +const ffs = readJsonFile('./feature-flags.json') describe('feature flags', () => { Object.keys(ffs).forEach(featureName => { diff --git a/tests/unit/page.js b/tests/unit/page.js index 9f40ab794d..2711fb932a 100644 --- a/tests/unit/page.js +++ b/tests/unit/page.js @@ -1,7 +1,8 @@ const path = require('path') const cheerio = require('cheerio') const Page = require('../../lib/page') -const prerenderedObjects = require('../../lib/graphql/static/prerendered-objects') +const readJsonFile = require('../../lib/read-json-file') +const prerenderedObjects = readJsonFile('./lib/graphql/static/prerendered-objects.json') const allVersions = require('../../lib/all-versions') const enterpriseServerReleases = require('../../lib/enterprise-server-releases') const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')