2019-05-29 13:57:26 +02:00
|
|
|
export async function generateBuildId(
|
2021-08-13 00:26:44 +02:00
|
|
|
generate: () => string | null | Promise<string | null>,
|
2019-05-29 13:57:26 +02:00
|
|
|
fallback: () => string
|
|
|
|
): Promise<string> {
|
2018-12-02 18:30:00 +01:00
|
|
|
let buildId = await generate()
|
|
|
|
// If there's no buildId defined we'll fall back
|
|
|
|
if (buildId === null) {
|
2019-05-29 13:57:26 +02:00
|
|
|
// We also create a new buildId if it contains the word `ad` to avoid false
|
2019-04-01 21:22:21 +02:00
|
|
|
// positives with ad blockers
|
2019-04-02 02:40:43 +02:00
|
|
|
while (!buildId || /ad/i.test(buildId)) {
|
2019-04-01 21:22:21 +02:00
|
|
|
buildId = fallback()
|
|
|
|
}
|
2018-12-02 18:30:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (typeof buildId !== 'string') {
|
2019-05-29 13:57:26 +02:00
|
|
|
throw new Error(
|
2021-03-29 10:25:00 +02:00
|
|
|
'generateBuildId did not return a string. https://nextjs.org/docs/messages/generatebuildid-not-a-string'
|
2019-05-29 13:57:26 +02:00
|
|
|
)
|
2018-12-02 18:30:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return buildId.trim()
|
|
|
|
}
|