rsnext/packages/next-server/server/optimize-amp.ts

45 lines
973 B
TypeScript
Raw Normal View History

import { ParsedUrlQuery } from 'querystring'
interface IOptimizerConfig {
transforms?: string[]
validAmp?: boolean
verbose?: boolean
}
interface IOptimizer {
transformHtml: (html: string, params?: object) => Promise<string>
setConfig: (config: IOptimizerConfig) => void
}
interface IOptimizeOptions {
amphtml?: boolean
query?: ParsedUrlQuery
}
export default async function optimize(
html: string,
{ amphtml, query }: IOptimizeOptions
): Promise<string> {
let ampOptimizer: IOptimizer
try {
ampOptimizer = require('amp-toolbox-optimizer')
} catch (_) {
return html
}
2019-04-15 11:49:10 +02:00
const validAmp = Boolean(amphtml && query && query.amp)
// Examples below
//
// pages/foo.js
// pages/foo.amp.js
// pages/bar.amp.js
//
// /foo => traditional
// /foo?amp=1 => clean AMP
// /bar => dirty amp
// /bar?amp=1 => clean AMP
ampOptimizer.setConfig({ validAmp })
html = await ampOptimizer.transformHtml(html)
return html
}