Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

context.js 3.7 KB

You have to be logged in to leave a comment. Sign In
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
  1. const languages = require('../lib/languages')
  2. const enterpriseServerReleases = require('../lib/enterprise-server-releases')
  3. const allVersions = require('../lib/all-versions')
  4. const { productMap } = require('../lib/all-products')
  5. const activeProducts = Object.values(productMap).filter(product => !product.wip && !product.hidden)
  6. const {
  7. getVersionStringFromPath,
  8. getProductStringFromPath,
  9. getCategoryStringFromPath,
  10. getPathWithoutLanguage
  11. } = require('../lib/path-utils')
  12. const productNames = require('../lib/product-names')
  13. const warmServer = require('../lib/warm-server')
  14. const featureFlags = Object.keys(require('../feature-flags'))
  15. const builtAssets = require('../lib/built-asset-urls')
  16. const searchVersions = require('../lib/search/versions')
  17. const nonEnterpriseDefaultVersion = require('../lib/non-enterprise-default-version')
  18. // Supply all route handlers with a baseline `req.context` object
  19. // Note that additional middleware in middleware/index.js adds to this context object
  20. module.exports = async function contextualize (req, res, next) {
  21. // Ensure that we load some data only once on first request
  22. const { site, redirects, siteTree, pages: pageMap } = await warmServer()
  23. req.context = {}
  24. // make feature flag environment variables accessible in layouts
  25. req.context.process = { env: {} }
  26. featureFlags.forEach(featureFlagName => {
  27. req.context[featureFlagName] = process.env[featureFlagName]
  28. })
  29. // define each context property explicitly for code-search friendliness
  30. // e.g. searches for "req.context.page" will include results from this file
  31. req.context.currentLanguage = req.language
  32. req.context.userLanguage = req.userLanguage
  33. req.context.currentVersion = getVersionStringFromPath(req.pagePath)
  34. req.context.currentProduct = getProductStringFromPath(req.pagePath)
  35. req.context.currentCategory = getCategoryStringFromPath(req.pagePath)
  36. req.context.productMap = productMap
  37. req.context.activeProducts = activeProducts
  38. req.context.allVersions = allVersions
  39. req.context.currentPathWithoutLanguage = getPathWithoutLanguage(req.pagePath)
  40. req.context.currentPath = req.pagePath
  41. req.context.query = req.query
  42. req.context.languages = languages
  43. req.context.productNames = productNames
  44. req.context.enterpriseServerReleases = enterpriseServerReleases
  45. req.context.enterpriseServerVersions = Object.keys(allVersions).filter(version => version.startsWith('enterprise-server@'))
  46. req.context.redirects = redirects
  47. req.context.site = site[req.language].site
  48. req.context.siteTree = siteTree
  49. req.context.pages = pageMap
  50. // TODO we should create new data directories for these example files instead of using variable files
  51. if (productMap[req.context.currentProduct]) {
  52. req.context.productCodeExamples = req.context.site.data.variables[`${productMap[req.context.currentProduct].id}_code_examples`]
  53. req.context.productCommunityExamples = req.context.site.data.variables[`${productMap[req.context.currentProduct].id}_community_examples`]
  54. req.context.productUserExamples = req.context.site.data.variables[`${productMap[req.context.currentProduct].id}_user_examples`]
  55. }
  56. // JS + CSS asset paths
  57. req.context.builtAssets = builtAssets
  58. // Object exposing selected variables to client
  59. req.context.expose = JSON.stringify({
  60. // Languages and versions for search
  61. searchOptions: {
  62. languages: Object.keys(languages),
  63. versions: searchVersions,
  64. nonEnterpriseDefaultVersion
  65. },
  66. // `|| undefined` won't show at all for production
  67. airgap: Boolean(process.env.AIRGAP || req.cookies.AIRGAP) || undefined
  68. })
  69. if (process.env.AIRGAP || req.cookies.AIRGAP) req.context.AIRGAP = true
  70. req.context.searchVersions = searchVersions
  71. req.context.nonEnterpriseDefaultVersion = nonEnterpriseDefaultVersion
  72. return next()
  73. }
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...