/
optimize-amp.ts
41 lines (36 loc) · 970 Bytes
/
optimize-amp.ts
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
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
}
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
}