1
0
mirror of synced 2026-01-06 15:01:04 -05:00
Files
docs/middleware/index.js
Jason Etcovitch cc719ffb6f Render Enterprise release notes on docs.github.com (#16367)
* Create basic layout

* Create stubbed out release note YAML

* Get a real implementation going

* Simplify using site-data

* Add a real page to send from render-page.js

* Use array of patches

* Render patches

* Add sidebar and breadcrumbs

* Reverse order

* Add date

* Tweak labels

* Redirect to entweb for missing versions

* Render patch.intro

* Move to separate files for patches

* Show support for RC versions

* Improve some comments

* Sticky headers!

* Remove a console log

* Improve example formatting

* Add a link on /admin

* Add a schema and test

* Move to /index.md, add version_num filter

* Improve layout

* Use <details>

* Placeholder more realistic notes

* Don't require links in index pages

* Remove admin/index link for now

* Remove unused frontmatter field

* Add a test for middleware

* Fix remaining YAML file to test CI

* Update 2-rc.yml

* Don't call it RC

* Just push

* Make a main a div

* Fix a borked class

* Lint YAML files

* Improve Download link

Co-authored-by: Sarah Schneider <sarahs@users.noreply.github.com>

* Improve check order

* Move to contextualizers

* Use alternative version thing

Co-authored-by: Sarah Schneider <sarahs@users.noreply.github.com>

* Move back to `release-notes.md`

* Use version for anchor IDs

* Undo category-pages test change

* Fix borked details layout in Chrome

* Improve mobile setup

* Render markdown in note tags

* Use allVersions[currentVersion] again

Co-authored-by: Sarah Schneider <sarahs@users.noreply.github.com>

* Undo change to extended-markdown

* Add whitespace so it renders markdown bits

* Remove 2-22 files

* Add check for any release notes

* Fix the failing tests

Co-authored-by: Kevin Heis <heiskr@users.noreply.github.com>
Co-authored-by: Sarah Schneider <sarahs@users.noreply.github.com>
2020-11-20 13:33:11 -05:00

84 lines
3.5 KiB
JavaScript

const express = require('express')
const isDevelopment = process.env.NODE_ENV === 'development'
// Catch unhandled promise rejections and passing them to Express's error handler
// https://medium.com/@Abazhenov/using-async-await-in-express-with-node-8-b8af872c0016
const asyncMiddleware = fn =>
(req, res, next) => {
Promise.resolve(fn(req, res, next)).catch(next)
}
module.exports = function (app) {
// *** Development tools ***
app.use(require('morgan')('dev', { skip: (req, res) => !isDevelopment }))
if (isDevelopment) app.use(require('./webpack'))
// *** Early exits ***
// Don't use the proxy's IP, use the requester's for rate limiting
// See https://expressjs.com/en/guide/behind-proxies.html
app.set('trust proxy', 1)
app.use(require('./rate-limit'))
app.use(require('./handle-invalid-paths'))
// *** Security ***
app.use(require('./cors'))
app.use(require('./csp')) // Must come before helmet
app.use(require('helmet')())
app.use(require('./cookie-parser')) // Must come before csrf
app.use(express.json()) // Must come before csrf
app.use(require('./csrf'))
app.use(require('./handle-csrf-errors')) // Must come before regular handle-errors
// *** Headers ***
app.use(require('compression')())
app.use(require('./set-fastly-cache-headers'))
app.use(require('./disable-caching-on-safari'))
// *** Config and context for redirects ***
app.use(require('./req-utils')) // Must come before record-redirect and events
app.use(require('./record-redirect'))
app.use(require('./detect-language')) // Must come before context, breadcrumbs, find-page, handle-errors, homepages
app.use(asyncMiddleware(require('./context'))) // Must come before early-access-*, handle-redirects
// *** Redirects, 3xx responses ***
// I ordered these by use frequency
app.use(require('connect-slashes')(false))
app.use(require('./redirects/external'))
app.use(require('./redirects/help-to-docs'))
app.use(require('./redirects/language-code-redirects')) // Must come before contextualizers
app.use(require('./redirects/handle-redirects')) // Must come before contextualizers
// *** Config and context for rendering ***
app.use(require('./find-page')) // Must come before archived-enterprise-versions, breadcrumbs, featured-links, products, render-page
// *** Rendering, 2xx responses ***
// I largely ordered these by use frequency
app.use(require('./archived-enterprise-versions-assets')) // Must come before static/assets
app.use('/dist', express.static('dist'))
app.use('/assets', express.static('assets'))
app.use('/public', express.static('data/graphql'))
app.use('/events', require('./events'))
app.use('/csrf', require('./csrf-route'))
app.use(require('./archived-enterprise-versions'))
app.use(require('./robots'))
app.use(require('./early-access-paths'))
app.use(require('./early-access-proxy'))
app.use(require('./categories-for-support-team'))
app.use(require('./loaderio-verification'))
app.get('/_500', asyncMiddleware(require('./trigger-error')))
// *** Preparation for render-page ***
app.use(asyncMiddleware(require('./contextualizers/enterprise-release-notes')))
app.use(require('./contextualizers/graphql'))
app.use(require('./contextualizers/rest'))
app.use(require('./contextualizers/webhooks'))
app.use(require('./breadcrumbs'))
app.use(require('./dev-toc'))
app.use(require('./featured-links'))
// *** Rendering, must go last ***
app.get('/*', asyncMiddleware(require('./render-page')))
app.use(require('./handle-errors'))
}