2019-05-29 13:57:26 +02:00
|
|
|
import { ParsedUrlQuery } from 'querystring'
|
2019-04-02 20:01:34 +02:00
|
|
|
|
|
|
|
interface IOptimizerConfig {
|
2019-05-29 13:57:26 +02:00
|
|
|
transforms?: string[]
|
|
|
|
validAmp?: boolean
|
|
|
|
verbose?: boolean
|
2019-04-02 20:01:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
interface IOptimizer {
|
|
|
|
transformHtml: (html: string, params?: object) => Promise<string>
|
|
|
|
setConfig: (config: IOptimizerConfig) => void
|
|
|
|
}
|
|
|
|
|
|
|
|
interface IOptimizeOptions {
|
|
|
|
amphtml?: boolean
|
|
|
|
query?: ParsedUrlQuery
|
|
|
|
}
|
|
|
|
|
2019-05-29 13:57:26 +02:00
|
|
|
export default async function optimize(
|
|
|
|
html: string,
|
|
|
|
{ amphtml, query }: IOptimizeOptions
|
|
|
|
): Promise<string> {
|
2019-04-02 20:01:34 +02:00
|
|
|
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)
|
2019-04-02 20:01:34 +02:00
|
|
|
// 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
|
|
|
|
}
|