Files
configure-pages/src/set-pages-config.js

101 lines
3.7 KiB
JavaScript
Raw Permalink Normal View History

const core = require('@actions/core')
const { ConfigParser } = require('./config-parser')
const removeTrailingSlash = require('./remove-trailing-slash')
2022-11-22 23:08:59 -06:00
const SUPPORTED_FILE_EXTENSIONS = ['.js', '.cjs', '.mjs']
// Return the settings to be passed to a {ConfigParser} for a given static site generator,
// optional configuration file path, and a Pages siteUrl value to inject
function getConfigParserSettings({ staticSiteGenerator, generatorConfigFile, siteUrl }) {
let { pathname: path, origin } = siteUrl
2022-07-18 16:42:45 -07:00
switch (staticSiteGenerator) {
case 'nuxt':
return {
configurationFile: generatorConfigFile || './nuxt.config.js',
2022-07-19 17:03:44 -07:00
blankConfigurationFile: `${__dirname}/blank-configurations/nuxt.js`,
properties: {
// Configure a base path on the router
'router.base': path,
// Set the target to static too
// https://nuxtjs.org/docs/configuration-glossary/configuration-target/
2022-07-20 15:28:26 -07:00
target: 'static'
2022-07-19 17:03:44 -07:00
}
2022-07-18 16:42:45 -07:00
}
case 'next':
2022-07-19 16:27:57 -07:00
// Next does not want a trailing slash
path = removeTrailingSlash(path)
2022-07-19 16:27:57 -07:00
2022-07-18 16:42:45 -07:00
return {
configurationFile: generatorConfigFile || './next.config.js',
2022-07-19 17:03:44 -07:00
blankConfigurationFile: `${__dirname}/blank-configurations/next.js`,
properties: {
// Configure a base path
basePath: path,
2022-07-19 17:16:40 -07:00
// Disable server side image optimization too
// https://nextjs.org/docs/api-reference/next/image#unoptimized
'experimental.images.unoptimized': true,
2022-11-18 00:50:00 -06:00
// No longer experimental as of Next.js v12.3.0
'images.unoptimized': true
2022-07-19 17:03:44 -07:00
}
2022-07-18 16:42:45 -07:00
}
case 'gatsby':
return {
configurationFile: generatorConfigFile || './gatsby-config.js',
2022-07-19 17:03:44 -07:00
blankConfigurationFile: `${__dirname}/blank-configurations/gatsby.js`,
properties: {
// Configure a path prefix
pathPrefix: path,
// Configure a site url
'siteMetadata.siteUrl': origin
2022-07-19 17:03:44 -07:00
}
2022-07-18 16:42:45 -07:00
}
case 'sveltekit':
// SvelteKit does not want a trailing slash
path = removeTrailingSlash(path)
return {
2022-08-10 10:45:56 -04:00
configurationFile: generatorConfigFile || './svelte.config.js',
blankConfigurationFile: `${__dirname}/blank-configurations/sveltekit.js`,
properties: {
// Configure a base path
'kit.paths.base': path,
// Configure a prerender origin
'kit.prerender.origin': origin
}
}
2022-07-18 16:42:45 -07:00
default:
throw `Unsupported static site generator: ${staticSiteGenerator}`
}
}
2022-07-19 11:47:29 -07:00
// Inject Pages configuration in a given static site generator's configuration file
function setPagesConfig({ staticSiteGenerator, generatorConfigFile, siteUrl }) {
try {
2022-07-19 11:47:29 -07:00
// Parse the configuration file and try to inject the Pages configuration in it
const settings = getConfigParserSettings({ staticSiteGenerator, generatorConfigFile, siteUrl })
2022-07-19 17:03:44 -07:00
new ConfigParser(settings).injectAll()
} catch (error) {
2022-11-22 23:08:59 -06:00
const isSupportedFileExtension = SUPPORTED_FILE_EXTENSIONS.some(ext => generatorConfigFile.endsWith(ext))
2022-11-22 23:10:37 -06:00
2022-07-19 11:47:29 -07:00
// Logging
2022-11-22 23:08:59 -06:00
if (!isSupportedFileExtension) {
2022-11-22 23:10:37 -06:00
core.warning(
2022-11-22 23:09:15 -06:00
`Unsupported configuration file extension. Currently supported extensions: ${SUPPORTED_FILE_EXTENSIONS.map(
ext => JSON.stringify(ext)
).join(', ')}`,
2022-11-22 23:10:37 -06:00
error
)
} else {
core.warning(
`We were unable to determine how to inject the site metadata into your config. Generated URLs may be incorrect. The base URL for this site should be ${siteUrl}. Please ensure your framework is configured to generate relative links appropriately.`,
error
)
}
}
}
module.exports = { getConfigParserSettings, setPagesConfig }