* Validate input to BadgeFactory.create() (#3875) * validate input to create() * remove deprecated properties (#3881) * remove BadgeFactory class (#3884) * Template literal templates (#4459) - Remove use of the doT template library and move to generating SVG output using javascript template literals. - Drop SVGO and mostly manually implement the optimisations. - Add a bunch more tests Co-authored-by: Paul Melnikow <github@paulmelnikow.com> * drop raster support in package CLI (#4523) * drop raster support in package CLI * update docs * rename gh-badges package to badge-maker * rename gh-badges dir to badge-maker * update relative imports and other refs to in parent dir 'gh-badges' --> 'badge-maker' * update snyk service tests This change is only tangentially related We've used the shields repo as an example for these tests so moving files around in our repo has a knock-on effect on them * add missing type hints to dev style page * write the changelog/migration guide for v3 * use extension in README CLI example * update CLI help whoops - missed this in #4523 * bump version * update for self-hosting users * README updates * drop .format param from CLI, always output SVG * Change text[] to label and message, Remove JSON output - Change text[] to label and message - Fix message only badge - Remove JSON output format - Update the docs * update package-lock * rename 'template' to 'style' * handle invalid styles in coalesceBadge * ensure makeBadge is passed a string for template in coalesceBadge() issue #4925 * fix (logo/no label text/label color specified) case issue #4926 * add example of (logo/no label text/label color specified) to style debug page * update type defs * padding fix for FTB style Co-authored-by: Paul Melnikow <github@paulmelnikow.com>
61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
'use strict'
|
|
|
|
const makeBadge = require('../../badge-maker/lib/make-badge')
|
|
const BaseService = require('./base')
|
|
const {
|
|
serverHasBeenUpSinceResourceCached,
|
|
setCacheHeadersForStaticResource,
|
|
} = require('./cache-headers')
|
|
const { makeSend } = require('./legacy-result-sender')
|
|
const { MetricHelper } = require('./metric-helper')
|
|
const coalesceBadge = require('./coalesce-badge')
|
|
const { prepareRoute, namedParamsForMatch } = require('./route')
|
|
|
|
module.exports = class BaseStaticService extends BaseService {
|
|
static register({ camp, metricInstance }, serviceConfig) {
|
|
const { regex, captureNames } = prepareRoute(this.route)
|
|
|
|
const metricHelper = MetricHelper.create({
|
|
metricInstance,
|
|
ServiceClass: this,
|
|
})
|
|
|
|
camp.route(regex, async (queryParams, match, end, ask) => {
|
|
if (serverHasBeenUpSinceResourceCached(ask.req)) {
|
|
// Send Not Modified.
|
|
ask.res.statusCode = 304
|
|
ask.res.end()
|
|
return
|
|
}
|
|
|
|
const metricHandle = metricHelper.startRequest()
|
|
|
|
const namedParams = namedParamsForMatch(captureNames, match, this)
|
|
const serviceData = await this.invoke(
|
|
{},
|
|
serviceConfig,
|
|
namedParams,
|
|
queryParams
|
|
)
|
|
|
|
const badgeData = coalesceBadge(
|
|
queryParams,
|
|
serviceData,
|
|
this.defaultBadgeData,
|
|
this
|
|
)
|
|
|
|
// The final capture group is the extension.
|
|
const format = (match.slice(-1)[0] || '.svg').replace(/^\./, '')
|
|
badgeData.format = format
|
|
|
|
setCacheHeadersForStaticResource(ask.res)
|
|
|
|
const svg = makeBadge(badgeData)
|
|
makeSend(format, ask.res, end)(svg)
|
|
|
|
metricHandle.noteResponseSent()
|
|
})
|
|
}
|
|
}
|