1
0
Fork 0
mirror of https://github.com/betagouv/mon-entreprise synced 2025-03-14 05:35:05 +00:00
mon-entreprise/site/build/prerender.ts
Jérémy Rialland e8fa858eb6 prerender
2023-09-18 18:43:28 +02:00

105 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { readFileSync, statSync, writeFileSync } from 'node:fs'
import { resolve } from 'node:path'
import { argv } from 'node:process'
import Tinypool from 'tinypool'
import { absoluteSitePaths } from '../source/sitePaths.js'
const filename = new URL('./prerender-worker.ts', import.meta.url).href
const pool = new Tinypool({
filename,
execArgv: ['--loader', 'ts-node/esm'],
idleTimeout: 2000,
})
const sitePathFr = absoluteSitePaths.fr
const sitePathEn = absoluteSitePaths.en
export const pagesToPrerender: {
'mon-entreprise': string[]
infrance: string[]
} = {
'mon-entreprise': [
'/documentation/artisteauteur/cotisations/CSGCRDS/abattement',
// '/iframes/pamc',
// '/iframes/simulateur-embauche',
// '/iframes/simulateur-independant',
// sitePathFr.assistants['choix-du-statut'].index,
sitePathFr.index,
// sitePathFr.simulateursEtAssistants,
// sitePathFr.simulateurs.index,
// sitePathFr.simulateurs.comparaison,
// sitePathFr.simulateurs.dividendes,
// sitePathFr.simulateurs.eurl,
// sitePathFr.simulateurs.indépendant,
// sitePathFr.simulateurs.is,
// sitePathFr.simulateurs.salarié,
// sitePathFr.simulateurs.sasu,
// sitePathFr.simulateurs['artiste-auteur'],
sitePathFr.simulateurs['auto-entrepreneur'],
// sitePathFr.simulateurs['chômage-partiel'],
// sitePathFr.simulateurs['coût-création-entreprise'],
// sitePathFr.simulateurs['entreprise-individuelle'],
// sitePathFr.simulateurs['profession-libérale'].avocat,
// sitePathFr.simulateurs['profession-libérale']['chirurgien-dentiste'],
// sitePathFr.simulateurs['profession-libérale'].index,
].map((val) => encodeURI(val)),
infrance: [
sitePathEn.index,
// sitePathEn.simulateurs.salarié,
// '/iframes/simulateur-embauche',
].map((val) => encodeURI(val)),
}
const dev = argv.findIndex((val) => val === '--dev') > -1
const redirects = await Promise.all(
Object.entries(pagesToPrerender).flatMap(([site, urls]) =>
urls.map(async (url) => {
const path = await (pool.run({
site,
url,
lang: site === 'mon-entreprise' ? 'fr' : 'en',
}) as Promise<string>)
// eslint-disable-next-line no-console
console.log(`preredering ${url} done, adding redirect`)
return `
[[redirects]]
from = ":SITE_${site === 'mon-entreprise' ? 'FR' : 'EN'}${
dev ? decodeURI(url) : url
}"
to = "/${path}"
status = 200
${dev ? ' force = true\n' : ''}`
})
)
)
// Replace the #[prerender]# tag in netlify.toml if --netlify-toml-path is specified
const index = argv.findIndex((val) => val === '--netlify-toml-path')
if (index > -1 && argv[index + 1]) {
const netlifyTomlPath = resolve(argv[index + 1])
if (statSync(netlifyTomlPath).isFile()) {
const data = readFileSync(netlifyTomlPath, { encoding: 'utf8' })
if (/#\[prerender\]#/g.test(data)) {
writeFileSync(
netlifyTomlPath,
data.replace(/#\[prerender\]#/g, redirects.join(''))
)
// eslint-disable-next-line no-console
console.log('Redirects added to ' + netlifyTomlPath)
} else {
throw new Error('tag #[prerender]# not found in ' + netlifyTomlPath)
}
} else {
throw new Error('this path is not a file' + netlifyTomlPath)
}
}