@netlify/plugin-nextjs 3.9.2 → 4.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -55
- package/lib/constants.js +21 -0
- package/lib/helpers/cache.js +20 -0
- package/lib/helpers/config.js +119 -0
- package/lib/helpers/files.js +48 -0
- package/lib/helpers/functions.js +64 -0
- package/lib/helpers/verification.js +79 -0
- package/lib/index.js +47 -0
- package/lib/templates/getHandler.js +164 -0
- package/lib/templates/getPageResolver.js +24 -0
- package/lib/templates/ipx.js +8 -0
- package/manifest.yml +1 -1
- package/package.json +47 -54
- package/LICENSE.md +0 -7
- package/helpers/cacheBuild.js +0 -31
- package/helpers/checkNxConfig.js +0 -56
- package/helpers/copyUnstableIncludedDirs.js +0 -27
- package/helpers/doesNotNeedPlugin.js +0 -49
- package/helpers/doesSiteUseNextOnNetlify.js +0 -20
- package/helpers/getNextConfig.js +0 -46
- package/helpers/getNextRoot.js +0 -20
- package/helpers/isStaticExportProject.js +0 -20
- package/helpers/resolveNextModule.js +0 -30
- package/helpers/usesBuildCommand.js +0 -37
- package/helpers/validateNextUsage.js +0 -53
- package/helpers/verifyBuildTarget.js +0 -69
- package/index.js +0 -175
- package/src/index.js +0 -94
- package/src/lib/config.js +0 -58
- package/src/lib/constants/regex.js +0 -9
- package/src/lib/helpers/addDefaultLocaleRedirect.js +0 -25
- package/src/lib/helpers/addLocaleRedirects.js +0 -19
- package/src/lib/helpers/asyncForEach.js +0 -7
- package/src/lib/helpers/convertToBasePathRedirects.js +0 -80
- package/src/lib/helpers/copyDynamicImportChunks.js +0 -39
- package/src/lib/helpers/formatRedirectTarget.js +0 -9
- package/src/lib/helpers/getDataRouteForRoute.js +0 -30
- package/src/lib/helpers/getFilePathForRoute.js +0 -10
- package/src/lib/helpers/getI18n.js +0 -10
- package/src/lib/helpers/getNetlifyFunctionName.js +0 -38
- package/src/lib/helpers/getNetlifyRoutes.js +0 -45
- package/src/lib/helpers/getNextDistDir.js +0 -12
- package/src/lib/helpers/getNextSrcDir.js +0 -5
- package/src/lib/helpers/getPagesManifest.js +0 -19
- package/src/lib/helpers/getPrerenderManifest.js +0 -40
- package/src/lib/helpers/getPreviewModeFunctionName.js +0 -5
- package/src/lib/helpers/getRoutesManifest.js +0 -12
- package/src/lib/helpers/getSortedRedirects.js +0 -37
- package/src/lib/helpers/handleFileTracking.js +0 -61
- package/src/lib/helpers/isApiRoute.js +0 -4
- package/src/lib/helpers/isDynamicRoute.js +0 -6
- package/src/lib/helpers/isFrameworkRoute.js +0 -5
- package/src/lib/helpers/isHtmlFile.js +0 -4
- package/src/lib/helpers/isRootCatchAllRedirect.js +0 -6
- package/src/lib/helpers/isRouteInPrerenderManifest.js +0 -23
- package/src/lib/helpers/isRouteWithDataRoute.js +0 -13
- package/src/lib/helpers/isRouteWithFallback.js +0 -12
- package/src/lib/helpers/logger.js +0 -44
- package/src/lib/helpers/removeFileExtension.js +0 -4
- package/src/lib/helpers/runJobsQueue.js +0 -18
- package/src/lib/helpers/setupNetlifyFunctionForPage.js +0 -44
- package/src/lib/helpers/setupStaticFileForPage.js +0 -18
- package/src/lib/pages/api/pages.js +0 -22
- package/src/lib/pages/api/redirects.js +0 -13
- package/src/lib/pages/api/setup.js +0 -15
- package/src/lib/pages/getInitialProps/pages.js +0 -40
- package/src/lib/pages/getInitialProps/redirects.js +0 -26
- package/src/lib/pages/getInitialProps/setup.js +0 -15
- package/src/lib/pages/getServerSideProps/pages.js +0 -43
- package/src/lib/pages/getServerSideProps/redirects.js +0 -44
- package/src/lib/pages/getServerSideProps/setup.js +0 -15
- package/src/lib/pages/getStaticProps/pages.js +0 -26
- package/src/lib/pages/getStaticProps/redirects.js +0 -70
- package/src/lib/pages/getStaticProps/setup.js +0 -68
- package/src/lib/pages/getStaticPropsWithFallback/pages.js +0 -24
- package/src/lib/pages/getStaticPropsWithFallback/redirects.js +0 -51
- package/src/lib/pages/getStaticPropsWithFallback/setup.js +0 -29
- package/src/lib/pages/getStaticPropsWithRevalidate/pages.js +0 -45
- package/src/lib/pages/getStaticPropsWithRevalidate/redirects.js +0 -55
- package/src/lib/pages/getStaticPropsWithRevalidate/setup.js +0 -40
- package/src/lib/pages/withoutProps/pages.js +0 -27
- package/src/lib/pages/withoutProps/redirects.js +0 -51
- package/src/lib/pages/withoutProps/setup.js +0 -34
- package/src/lib/pages/worker.js +0 -19
- package/src/lib/steps/copyNextAssets.js +0 -31
- package/src/lib/steps/copyPublicFiles.js +0 -18
- package/src/lib/steps/prepareFolders.js +0 -39
- package/src/lib/steps/setupHeaders.js +0 -37
- package/src/lib/steps/setupImageFunction.js +0 -17
- package/src/lib/steps/setupPages.js +0 -25
- package/src/lib/steps/setupRedirects.js +0 -105
- package/src/lib/templates/getHandlerFunction.js +0 -209
- package/src/lib/templates/getTemplate.js +0 -15
- package/src/lib/templates/imageFunction.js +0 -135
- package/src/next-on-netlify.js +0 -22
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
const { builder } = require('@netlify/functions')
|
|
2
|
-
const etag = require('etag')
|
|
3
|
-
const config = require('./imageconfig.json')
|
|
4
|
-
const imageType = require('image-type')
|
|
5
|
-
const isSvg = require('is-svg')
|
|
6
|
-
const fetch = require('node-fetch')
|
|
7
|
-
const sharp = require('sharp')
|
|
8
|
-
// 6MB is hard max Lambda response size
|
|
9
|
-
const MAX_RESPONSE_SIZE = 6291456
|
|
10
|
-
|
|
11
|
-
function getImageType(buffer) {
|
|
12
|
-
const type = imageType(buffer)
|
|
13
|
-
if (type) {
|
|
14
|
-
return type
|
|
15
|
-
}
|
|
16
|
-
if (isSvg(buffer)) {
|
|
17
|
-
return { ext: 'svg', mime: 'image/svg' }
|
|
18
|
-
}
|
|
19
|
-
return null
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const IGNORED_FORMATS = new Set(['svg', 'gif'])
|
|
23
|
-
const OUTPUT_FORMATS = new Set(['png', 'jpg', 'webp', 'avif'])
|
|
24
|
-
|
|
25
|
-
// Function used to mimic next/image
|
|
26
|
-
const handler = async (event) => {
|
|
27
|
-
const [, , url, w = 500, q = 75] = event.path.split('/')
|
|
28
|
-
// Work-around a bug in redirect handling. Remove when fixed.
|
|
29
|
-
const parsedUrl = decodeURIComponent(url).replace('+', '%20')
|
|
30
|
-
const width = Number.parseInt(w)
|
|
31
|
-
|
|
32
|
-
if (!width) {
|
|
33
|
-
return {
|
|
34
|
-
statusCode: 400,
|
|
35
|
-
body: 'Invalid image parameters',
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const quality = Number.parseInt(q) || 60
|
|
40
|
-
|
|
41
|
-
let imageUrl
|
|
42
|
-
let isRemoteImage = false
|
|
43
|
-
// Relative image
|
|
44
|
-
if (parsedUrl.startsWith('/')) {
|
|
45
|
-
const protocol = event.headers['x-nf-connection-proto'] || event.headers['x-forwarded-proto'] || 'http'
|
|
46
|
-
imageUrl = `${protocol}://${event.headers.host || event.hostname}${parsedUrl}`
|
|
47
|
-
} else {
|
|
48
|
-
isRemoteImage = true
|
|
49
|
-
// Remote images need to be in the allowlist
|
|
50
|
-
let allowedDomains = config.domains || []
|
|
51
|
-
|
|
52
|
-
if (process.env.NEXT_IMAGE_ALLOWED_DOMAINS) {
|
|
53
|
-
console.log('Combining `NEXT_IMAGE_ALLOWED_DOMAINS` with any domains found in `next.config.js`')
|
|
54
|
-
allowedDomains = allowedDomains.concat(
|
|
55
|
-
process.env.NEXT_IMAGE_ALLOWED_DOMAINS.split(',').map((domain) => domain.trim()),
|
|
56
|
-
)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (!allowedDomains.includes(new URL(parsedUrl).hostname)) {
|
|
60
|
-
return {
|
|
61
|
-
statusCode: 403,
|
|
62
|
-
body: 'Image is not from a permitted domain',
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
imageUrl = parsedUrl
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const imageData = await fetch(imageUrl)
|
|
69
|
-
|
|
70
|
-
if (!imageData.ok) {
|
|
71
|
-
console.error(`Failed to download image ${imageUrl}. Status ${imageData.status} ${imageData.statusText}`)
|
|
72
|
-
return {
|
|
73
|
-
statusCode: imageData.status,
|
|
74
|
-
body: imageData.statusText,
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const bufferData = await imageData.buffer()
|
|
79
|
-
|
|
80
|
-
const type = getImageType(bufferData)
|
|
81
|
-
|
|
82
|
-
if (!type) {
|
|
83
|
-
return { statusCode: 400, body: 'Source does not appear to be an image' }
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
let { ext } = type
|
|
87
|
-
|
|
88
|
-
// For unsupported formats (gif, svg) we redirect to the original
|
|
89
|
-
if (IGNORED_FORMATS.has(ext)) {
|
|
90
|
-
return {
|
|
91
|
-
statusCode: 302,
|
|
92
|
-
headers: {
|
|
93
|
-
Location: isRemoteImage ? imageUrl : parsedUrl,
|
|
94
|
-
},
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (process.env.FORCE_WEBP_OUTPUT === 'true' || process.env.FORCE_WEBP_OUTPUT === '1') {
|
|
99
|
-
ext = 'webp'
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (!OUTPUT_FORMATS.has(ext)) {
|
|
103
|
-
ext = 'jpg'
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// The format methods are just to set options: they don't
|
|
107
|
-
// make it return that format.
|
|
108
|
-
const { info, data: imageBuffer } = await sharp(bufferData)
|
|
109
|
-
.rotate()
|
|
110
|
-
.jpeg({ quality, force: ext === 'jpg' })
|
|
111
|
-
.png({ quality, force: ext === 'png' })
|
|
112
|
-
.webp({ quality, force: ext === 'webp' })
|
|
113
|
-
.avif({ quality, force: ext === 'avif' })
|
|
114
|
-
.resize(width, null, { withoutEnlargement: true })
|
|
115
|
-
.toBuffer({ resolveWithObject: true })
|
|
116
|
-
|
|
117
|
-
if (imageBuffer.length > MAX_RESPONSE_SIZE) {
|
|
118
|
-
return {
|
|
119
|
-
statusCode: 400,
|
|
120
|
-
body: 'Requested image is too large. Maximum size is 6MB.',
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return {
|
|
125
|
-
statusCode: 200,
|
|
126
|
-
headers: {
|
|
127
|
-
'Content-Type': `image/${info.format}`,
|
|
128
|
-
etag: etag(imageBuffer),
|
|
129
|
-
},
|
|
130
|
-
body: imageBuffer.toString('base64'),
|
|
131
|
-
isBase64Encoded: true,
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
exports.handler = builder(handler)
|
package/src/next-on-netlify.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
const { program } = require('commander')
|
|
3
|
-
|
|
4
|
-
const nextOnNetlify = require('./index')
|
|
5
|
-
|
|
6
|
-
program.option('--max-log-lines [number]', 'lines of build output to show for each section', 50)
|
|
7
|
-
|
|
8
|
-
program
|
|
9
|
-
.command('watch')
|
|
10
|
-
.description('re-runs next-on-netlify on changes')
|
|
11
|
-
.action(async () => {
|
|
12
|
-
await nextOnNetlify({ watch: true })
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
program
|
|
16
|
-
.command('build', { isDefault: true })
|
|
17
|
-
.description('runs next-on-netlify')
|
|
18
|
-
.action(async () => {
|
|
19
|
-
await nextOnNetlify()
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
program.parse(process.argv)
|