next-runtime
next-runtime copied to clipboard
[Bug]: next/image not working. TypeError - Invalid URL: http://
Summary
Hello, I'm migrating a site from Vercel to Netlify, but the images do not work. I'm using the next/image component, and it shows the following error on runtime: [TypeError](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError) - Invalid URL: http://. It's happening to local and subdomain images.
Here is the full error:
{
"errorType": "TypeError",
"errorMessage": "Invalid URL: http://",
"trace": [
"TypeError [ERR_INVALID_URL]: Invalid URL: http://",
" at new NodeError (internal/errors.js:322:7)",
" at onParseError (internal/url.js:270:9)",
" at new URL (internal/url.js:346:5)",
" at /var/task/node_modules/ipx/dist/chunks/middleware.cjs:131:12",
" at Array.map (<anonymous>)",
" at createHTTPSource (/var/task/node_modules/ipx/dist/chunks/middleware.cjs:127:28)",
" at createIPX (/var/task/node_modules/ipx/dist/chunks/middleware.cjs:423:24)",
" at createIPXHandler (/var/task/node_modules/@netlify/ipx/dist/index.js:16:37)",
" at Object.<anonymous> (/var/task/.netlify/functions-internal/_ipx/_ipx.js:7:46)",
" at Module._compile (internal/modules/cjs/loader.js:1085:14)"
]
}
Here is a link to a local image
And here is another link to an external image
Steps to reproduce
- Go to https://resilient-cranachan-3c07af.netlify.app
- Images do not work
A link to a reproduction repository
No response
Plugin version
^4.9.3
More information about your build
- [ ] I am building using the CLI
- [x] I am building using file-based configuration (
netlify.toml)
What OS are you using?
No response
Your netlify.toml file
`netlify.toml`
[[plugins]]
package = "@netlify/plugin-nextjs"
[build]
command = "npm run build"
publish = ".next"
Your public/_redirects file
`_redirects`
# Paste content of your `_redirects` file here
Your next.config.js file
`next.config.js`
const withSvgr = require("next-svgr");
const { withPlausibleProxy } = require('next-plausible')
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
})
const securityHeaders = [
{
key: 'X-DNS-Prefetch-Control',
value: 'on'
},
{
key: 'Strict-Transport-Security',
value: 'max-age=63072000; includeSubDomains; preload'
},
{
key: 'X-XSS-Protection',
value: '1; mode=block'
},
{
key: 'X-Frame-Options',
value: 'SAMEORIGIN'
},
{
key: 'Permissions-Policy',
value: '',
},
{
key: 'X-Content-Type-Options',
value: 'nosniff'
},
];
module.exports = withBundleAnalyzer(
withPlausibleProxy({
customDomain: "https://ec2-18-117-11-139.us-east-2.compute.amazonaws.com",
})(
withSvgr({
reactStrictMode: true,
compiler: {
styledComponents: true,
},
async headers() {
return [
{
source: '/(.*)',
headers: securityHeaders,
},
]
},
images: {
domains: [
`${process.env.S3_UPLOAD_BUCKET}.s3.amazonaws.com`,
`${process.env.S3_UPLOAD_BUCKET}.s3.${process.env.S3_UPLOAD_REGION}.amazonaws.com`,
'content.tabwhale.com',
'', // make blob image work
],
},
})
)
);
Builds logs (or link to your logs)
Build logs
6:44:11 PM: Build ready to start
6:44:13 PM: build-image version: 72a309a113b53ef075815b129953617827965e48 (focal)
6:44:13 PM: build-image tag: v4.8.2
6:44:13 PM: buildbot version: 72ebfe61ef7a5152002962d9129cc52f5b1bb560
6:44:13 PM: Fetching cached dependencies
6:44:13 PM: Failed to fetch cache, continuing with build
6:44:13 PM: Starting to prepare the repo for build
6:44:14 PM: No cached dependencies found. Cloning fresh repo
6:44:14 PM: git clone https://github.com/brunocalou/tabwhale
6:44:16 PM: Preparing Git Reference refs/heads/main
6:44:16 PM: Parsing package.json dependencies
6:44:17 PM: Starting build script
6:44:17 PM: Installing dependencies
6:44:17 PM: Python version set to 2.7
6:44:18 PM: v16.15.1 is already installed.
6:44:18 PM: Now using node v16.15.1 (npm v8.11.0)
6:44:18 PM: Started restoring cached build plugins
6:44:18 PM: Finished restoring cached build plugins
6:44:18 PM: Attempting ruby version 2.7.2, read from environment
6:44:19 PM: Using ruby version 2.7.2
6:44:20 PM: Using PHP version 8.0
6:44:20 PM: No npm workspaces detected
6:44:20 PM: Started restoring cached node modules
6:44:20 PM: Finished restoring cached node modules
6:44:20 PM: Installing NPM modules using NPM version 8.11.0
6:44:21 PM: npm WARN config tmp This setting is no longer used. npm stores temporary files in a special
6:44:21 PM: npm WARN config location in the cache, and they are managed by
6:44:21 PM: npm WARN config [`cacache`](http://npm.im/cacache).
6:44:21 PM: npm WARN config tmp This setting is no longer used. npm stores temporary files in a special
6:44:21 PM: npm WARN config location in the cache, and they are managed by
6:44:21 PM: npm WARN config [`cacache`](http://npm.im/cacache).
6:44:24 PM: npm WARN ERESOLVE overriding peer dependency
6:44:24 PM: npm WARN While resolving: @next-auth/[email protected]
6:44:24 PM: npm WARN Found: @prisma/[email protected]
6:44:24 PM: npm WARN node_modules/@prisma/client
6:44:24 PM: npm WARN @prisma/client@"^3.3.0" from the root project
6:44:24 PM: npm WARN 1 more (@next-auth/prisma-adapter)
6:44:24 PM: npm WARN
6:44:24 PM: npm WARN Could not resolve dependency:
6:44:24 PM: npm WARN peer @prisma/client@"^2.16.1" from @next-auth/[email protected]
6:44:24 PM: npm WARN node_modules/@next-auth/prisma-legacy-adapter
6:44:24 PM: npm WARN @next-auth/prisma-legacy-adapter@"0.1.2" from [email protected]
6:44:24 PM: npm WARN node_modules/next-auth
6:44:24 PM: npm WARN
6:44:24 PM: npm WARN Conflicting peer dependency: @prisma/[email protected]
6:44:24 PM: npm WARN node_modules/@prisma/client
6:44:24 PM: npm WARN peer @prisma/client@"^2.16.1" from @next-auth/[email protected]
6:44:24 PM: npm WARN node_modules/@next-auth/prisma-legacy-adapter
6:44:24 PM: npm WARN @next-auth/prisma-legacy-adapter@"0.1.2" from [email protected]
6:44:24 PM: npm WARN node_modules/next-auth
6:44:24 PM: npm WARN ERESOLVE overriding peer dependency
6:44:24 PM: npm WARN While resolving: @reach/[email protected]
6:44:24 PM: npm WARN Found: [email protected]
6:44:24 PM: npm WARN node_modules/react
6:44:24 PM: npm WARN react@"^17.0.2" from the root project
6:44:24 PM: npm WARN 76 more (@emotion/core, @emotion/styled, @emotion/styled-base, ...)
6:44:24 PM: npm WARN
6:44:24 PM: npm WARN Could not resolve dependency:
6:44:24 PM: npm WARN peer react@"15.x || 16.x || 16.4.0-alpha.0911da3" from @reach/[email protected]
6:44:24 PM: npm WARN node_modules/@reach/router
6:44:24 PM: npm WARN @reach/router@"^1.3.4" from @storybook/[email protected]
6:44:24 PM: npm WARN node_modules/@storybook/api
6:44:24 PM: npm WARN 1 more (@storybook/router)
6:44:24 PM: npm WARN
6:44:24 PM: npm WARN Conflicting peer dependency: [email protected]
6:44:24 PM: npm WARN node_modules/react
6:44:24 PM: npm WARN peer react@"15.x || 16.x || 16.4.0-alpha.0911da3" from @reach/[email protected]
6:44:24 PM: npm WARN node_modules/@reach/router
6:44:24 PM: npm WARN @reach/router@"^1.3.4" from @storybook/[email protected]
6:44:24 PM: npm WARN node_modules/@storybook/api
6:44:24 PM: npm WARN 1 more (@storybook/router)
6:44:24 PM: npm WARN ERESOLVE overriding peer dependency
6:44:24 PM: npm WARN While resolving: @reach/[email protected]
6:44:24 PM: npm WARN Found: [email protected]
6:44:24 PM: npm WARN node_modules/react-dom
6:44:24 PM: npm WARN react-dom@"^17.0.2" from the root project
6:44:24 PM: npm WARN 44 more (@next/react-dev-overlay, @react-three/drei, ...)
6:44:24 PM: npm WARN
6:44:24 PM: npm WARN Could not resolve dependency:
6:44:24 PM: npm WARN peer react-dom@"15.x || 16.x || 16.4.0-alpha.0911da3" from @reach/[email protected]
6:44:24 PM: npm WARN node_modules/@reach/router
6:44:24 PM: npm WARN @reach/router@"^1.3.4" from @storybook/[email protected]
6:44:24 PM: npm WARN node_modules/@storybook/api
6:44:24 PM: npm WARN 1 more (@storybook/router)
6:44:24 PM: npm WARN
6:44:24 PM: npm WARN Conflicting peer dependency: [email protected]
6:44:24 PM: npm WARN node_modules/react-dom
6:44:24 PM: npm WARN peer react-dom@"15.x || 16.x || 16.4.0-alpha.0911da3" from @reach/[email protected]
6:44:24 PM: npm WARN node_modules/@reach/router
6:44:24 PM: npm WARN @reach/router@"^1.3.4" from @storybook/[email protected]
6:44:24 PM: npm WARN node_modules/@storybook/api
6:44:24 PM: npm WARN 1 more (@storybook/router)
6:44:24 PM: npm WARN ERESOLVE overriding peer dependency
6:44:24 PM: npm WARN While resolving: [email protected]
6:44:24 PM: npm WARN Found: [email protected]
6:44:24 PM: npm WARN node_modules/react
6:44:24 PM: npm WARN react@"^17.0.2" from the root project
6:44:24 PM: npm WARN 76 more (@emotion/core, @emotion/styled, @emotion/styled-base, ...)
6:44:24 PM: npm WARN
6:44:24 PM: npm WARN Could not resolve dependency:
6:44:24 PM: npm WARN peer react@"^0.14.0 || ^15.0.0 || ^16.0.0" from [email protected]
6:44:24 PM: npm WARN node_modules/create-react-context
6:44:24 PM: npm WARN create-react-context@"0.3.0" from @reach/[email protected]
6:44:24 PM: npm WARN node_modules/@reach/router
6:44:24 PM: npm WARN
6:44:24 PM: npm WARN Conflicting peer dependency: [email protected]
6:44:24 PM: npm WARN node_modules/react
6:44:24 PM: npm WARN peer react@"^0.14.0 || ^15.0.0 || ^16.0.0" from [email protected]
6:44:24 PM: npm WARN node_modules/create-react-context
6:44:24 PM: npm WARN create-react-context@"0.3.0" from @reach/[email protected]
6:44:24 PM: npm WARN node_modules/@reach/router
6:44:41 PM: npm WARN deprecated [email protected]: this library is no longer supported
6:44:42 PM: npm WARN deprecated [email protected]: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
6:44:43 PM: npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
6:44:54 PM: npm WARN deprecated [email protected]: This SVGO version is no longer supported. Upgrade to v2.x.x.
6:45:01 PM: npm WARN deprecated [email protected]: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
6:45:10 PM: npm WARN deprecated [email protected]: Please see https://github.com/lydell/urix#deprecated
6:45:10 PM: npm WARN deprecated [email protected]: https://github.com/lydell/resolve-url#deprecated
6:45:36 PM: added 2788 packages, and audited 2789 packages in 1m
6:45:36 PM: 332 packages are looking for funding
6:45:36 PM: run `npm fund` for details
6:45:36 PM: 55 vulnerabilities (4 low, 7 moderate, 36 high, 8 critical)
6:45:36 PM: To address issues that do not require attention, run:
6:45:36 PM: npm audit fix
6:45:36 PM: To address all issues possible (including breaking changes), run:
6:45:36 PM: npm audit fix --force
6:45:36 PM: Some issues need review, and may require choosing
6:45:36 PM: a different dependency.
6:45:36 PM: Run `npm audit` for details.
6:45:36 PM: NPM modules installed
6:45:36 PM: npm WARN config tmp This setting is no longer used. npm stores temporary files in a special
6:45:36 PM: npm WARN config location in the cache, and they are managed by
6:45:36 PM: npm WARN config [`cacache`](http://npm.im/cacache).
6:45:36 PM: Started restoring cached go cache
6:45:36 PM: Finished restoring cached go cache
6:45:37 PM: Installing Go version 1.17 (requested 1.17)
6:45:43 PM: unset GOOS;
6:45:43 PM: unset GOARCH;
6:45:43 PM: export GOROOT='/opt/buildhome/.gimme/versions/go1.17.linux.amd64';
6:45:43 PM: export PATH="/opt/buildhome/.gimme/versions/go1.17.linux.amd64/bin:${PATH}";
6:45:43 PM: go version >&2;
6:45:43 PM: export GIMME_ENV="/opt/buildhome/.gimme/env/go1.17.linux.amd64.env"
6:45:43 PM: go version go1.17 linux/amd64
6:45:43 PM: Installing missing commands
6:45:43 PM: Verify run directory
6:45:45 PM:
6:45:45 PM: ────────────────────────────────────────────────────────────────
6:45:45 PM: Netlify Build
6:45:45 PM: ────────────────────────────────────────────────────────────────
6:45:45 PM:
6:45:45 PM: ❯ Version
6:45:45 PM: @netlify/build 27.3.0
6:45:45 PM:
6:45:45 PM: ❯ Flags
6:45:45 PM: baseRelDir: true
6:45:45 PM: buildId: 62bb762b7b88f91eb09a2164
6:45:45 PM: deployId: 62bb762b7b88f91eb09a2166
6:45:45 PM:
6:45:45 PM: ❯ Current directory
6:45:45 PM: /opt/build/repo
6:45:45 PM:
6:45:45 PM: ❯ Config file
6:45:45 PM: /opt/build/repo/netlify.toml
6:45:45 PM:
6:45:45 PM: ❯ Context
6:45:45 PM: production
6:45:45 PM:
6:45:45 PM: ❯ Loading plugins
6:45:45 PM: - @netlify/[email protected] from netlify.toml and package.json
6:45:46 PM:
6:45:46 PM: ────────────────────────────────────────────────────────────────
6:45:46 PM: 1. @netlify/plugin-nextjs (onPreBuild event)
6:45:46 PM: ────────────────────────────────────────────────────────────────
6:45:46 PM:
6:45:46 PM: No Next.js cache to restore.
6:45:46 PM: Netlify configuration property "build.environment.NEXT_PRIVATE_TARGET" value changed.
6:45:46 PM:
6:45:46 PM: (@netlify/plugin-nextjs onPreBuild completed in 25ms)
6:45:46 PM:
6:45:46 PM: ────────────────────────────────────────────────────────────────
6:45:46 PM: 2. build.command from netlify.toml
6:45:46 PM: ────────────────────────────────────────────────────────────────
6:45:46 PM:
6:45:46 PM: $ npm run build
6:45:47 PM: npm WARN config tmp This setting is no longer used. npm stores temporary files in a special
6:45:47 PM: npm WARN config location in the cache, and they are managed by
6:45:47 PM: npm WARN config [`cacache`](http://npm.im/cacache).
6:45:47 PM: > [email protected] build
6:45:47 PM: > next build
6:45:47 PM: warn - No build cache found. Please configure build caching for faster rebuilds. Read more: https://nextjs.org/docs/messages/no-cache
6:45:47 PM: Browserslist: caniuse-lite is outdated. Please run:
6:45:47 PM: npx browserslist@latest --update-db
6:45:47 PM: Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
6:45:47 PM: info - Checking validity of types...
6:46:20 PM: info - Creating an optimized production build...
6:46:20 PM: Browserslist: caniuse-lite is outdated. Please run:
6:46:20 PM: npx browserslist@latest --update-db
6:46:20 PM: Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
6:46:23 PM: Browserslist: caniuse-lite is outdated. Please run:
6:46:23 PM: npx browserslist@latest --update-db
6:46:23 PM: Why you should do it regularly:
6:46:23 PM: https://github.com/browserslist/browserslist#browsers-data-updating
6:47:57 PM: info - Compiled successfully
6:47:57 PM: info - Collecting page data...
6:48:07 PM: info - Generating static pages (0/15)
6:48:07 PM: info - Generating static pages (3/15)
6:48:08 PM: info - Generating static pages (7/15)
6:48:09 PM: info - Generating static pages (11/15)
6:48:10 PM: info - Generating static pages (15/15)
6:48:10 PM: info - Finalizing page optimization...
6:48:10 PM: Page Size First Load JS
6:48:10 PM: ┌ λ / 12.5 kB 198 kB
6:48:10 PM: ├ /_app 0 B 105 kB
6:48:10 PM: ├ ○ /404 6.38 kB 119 kB
6:48:10 PM: ├ λ /account 584 B 203 kB
6:48:10 PM: ├ λ /account/billing 590 B 203 kB
6:48:10 PM: ├ λ /account/profile 589 B 203 kB
6:48:10 PM: ├ λ /api/auth/[...nextauth] 0 B 105 kB
6:48:10 PM: ├ λ /api/auth/check/signin/[email] 0 B 105 kB
6:48:10 PM: ├ λ /api/blog/post/[slug]/view 0 B 105 kB
6:48:10 PM: ├ λ /api/profile 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/[id] 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/[id]/favorites/add 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/[id]/favorites/check 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/[id]/favorites/remove 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/[id]/save 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/[id]/view 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/list 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/list/following 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/new 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/request 0 B 105 kB
6:48:10 PM: ├ λ /api/sheet/search/[searchQuery] 0 B 105 kB
6:48:10 PM: ├ λ /api/user/[userId]/follow 0 B 105 kB
6:48:10 PM: ├ λ /api/user/[userId]/is-following 0 B 105 kB
6:48:10 PM: ├ λ /api/user/[userId]/unfollow 0 B 105 kB
6:48:10 PM: ├ λ /api/username/[newUsername] 0 B 105 kB
6:48:10 PM: ├ λ /api/username/check/[username] 0 B 105 kB
6:48:10 PM: ├ ● /blog (722 ms) 553 B 164 kB
6:48:10 PM: ├ ● /blog/category/[postCategory] (1178 ms) 568 B 165 kB
6:48:10 PM: ├ ├ /blog/category/kalimba (777 ms)
6:48:10 PM: ├ └ /blog/category/tabwhale (401 ms)
6:48:10 PM: ├ ● /blog/post/[postSlug] (6466 ms) 3.08 kB 172 kB
6:48:10 PM: ├ ├ /blog/post/how-to-read-kalimba-tabs (2623 ms)
6:48:10 PM: ├ ├ /blog/post/how-to-read-number-and-letter-kalimba-tabs (2129 ms)
6:48:10 PM: ├ └ /blog/post/about-tabwhale (1714 ms)
6:48:10 PM: ├ λ /check-your-email 1.32 kB 154 kB
6:48:10 PM: ├ λ /create-account 3.65 kB 156 kB
6:48:10 PM: ├ ○ /demo (1731 ms) 1.62 kB 554 kB
6:48:10 PM: ├ ○ /demo/edit (1331 ms) 1.62 kB 563 kB
6:48:10 PM: ├ ○ /embed/[sheetId] (365 ms) 5.51 kB 501 kB
6:48:10 PM: ├ λ /favorites 595 B 205 kB
6:48:10 PM: ├ λ /login 3.69 kB 156 kB
6:48:10 PM: ├ λ /print/[sheetId] 4.31 kB 479 kB
6:48:10 PM: ├ ○ /privacy-policy (340 ms) 8.17 kB 150 kB
6:48:10 PM: ├ λ /profile 592 B 205 kB
6:48:10 PM: ├ λ /profile/[username]/[[...initialTab]] 626 B 205 kB
6:48:10 PM: ├ ● /tab/[title]/[id] 786 B 553 kB
6:48:10 PM: ├ λ /tab/[title]/[id]/edit 789 B 563 kB
6:48:10 PM: ├ λ /tab/[title]/[id]/preview 790 B 553 kB
6:48:10 PM: ├ λ /tab/new 14.4 kB 528 kB
6:48:10 PM: ├ ○ /terms-of-service (636 ms) 8.3 kB 150 kB
6:48:10 PM: ├ ● /tools (640 ms) 3.31 kB 162 kB
6:48:10 PM: └ ● /tools/[toolSlug] (1494 ms) 14.7 kB 251 kB
6:48:10 PM: └ /tools/virtual-piano (1494 ms)
6:48:10 PM: + First Load JS shared by all 105 kB
6:48:10 PM: ├ chunks/framework-79bce4a3a540b080.js 42.1 kB
6:48:10 PM: ├ chunks/main-492fbff266beac1c.js 32.4 kB
6:48:10 PM: ├ chunks/pages/_app-5899c68e7834e8cb.js 28.8 kB
6:48:10 PM: └ chunks/webpack-e492e30a01011fa4.js 1.59 kB
6:48:10 PM: λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
6:48:10 PM: ○ (Static) automatically rendered as static HTML (uses no initial props)
6:48:10 PM: ● (SSG) automatically generated as static HTML + JSON (uses getStaticProps)
6:48:10 PM:
6:48:10 PM: (build.command completed in 2m 23.8s)
6:48:10 PM:
6:48:10 PM: ────────────────────────────────────────────────────────────────
6:48:10 PM: 3. @netlify/plugin-nextjs (onBuild event)
6:48:10 PM: ────────────────────────────────────────────────────────────────
6:48:10 PM:
6:48:11 PM: NextAuth package detected, setting NEXTAUTH_URL environment variable to https://resilient-cranachan-3c07af.netlify.app
6:48:11 PM: Patching /opt/build/repo/node_modules/next/dist/server/base-server.js
6:48:11 PM: Done
6:48:11 PM: Patching /opt/build/repo/node_modules/next/dist/server/next-server.js
6:48:11 PM: Done
6:48:11 PM: Moving static page files to serve from CDN...
6:48:11 PM: Moved 20 files
6:48:11 PM: Netlify configuration property "redirects" value changed to [
6:48:11 PM: { from: '/_next/static/*', to: '/static/:splat', status: 200 },
6:48:11 PM: {
6:48:11 PM: from: '/_next/image*',
6:48:11 PM: query: { url: ':url', w: ':width', q: ':quality' },
6:48:11 PM: to: '/_ipx/w_:width,q_:quality/:url',
6:48:11 PM: status: 301
6:48:11 PM: },
6:48:11 PM: { from: '/_ipx/*', to: '/.netlify/builders/_ipx', status: 200 },
6:48:11 PM: { from: '/cache/*', to: '/404.html', status: 404, force: true },
6:48:11 PM: { from: '/server/*', to: '/404.html', status: 404, force: true },
6:48:11 PM: { from: '/serverless/*', to: '/404.html', status: 404, force: true },
6:48:11 PM: { from: '/trace', to: '/404.html', status: 404, force: true },
6:48:11 PM: { from: '/traces', to: '/404.html', status: 404, force: true },
6:48:11 PM: {
6:48:11 PM: from: '/routes-manifest.json',
6:48:11 PM: to: '/404.html',
6:48:11 PM: status: 404,
6:48:11 PM: force: true
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/build-manifest.json',
6:48:11 PM: to: '/404.html',
6:48:11 PM: status: 404,
6:48:11 PM: force: true
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/prerender-manifest.json',
6:48:11 PM: to: '/404.html',
6:48:11 PM: status: 404,
6:48:11 PM: force: true
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/react-loadable-manifest.json',
6:48:11 PM: to: '/404.html',
6:48:11 PM: status: 404,
6:48:11 PM: force: true
6:48:11 PM: },
6:48:11 PM: { from: '/BUILD_ID', to: '/404.html', status: 404, force: true },
6:48:11 PM: {
6:48:11 PM: from: '/api',
6:48:11 PM: to: '/.netlify/functions/___netlify-handler',
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/api/*',
6:48:11 PM: to: '/.netlify/functions/___netlify-handler',
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/ads.txt',
6:48:11 PM: to: '/ads.txt',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/android-chrome-192x192.png',
6:48:11 PM: to: '/android-chrome-192x192.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/android-chrome-512x512.png',
6:48:11 PM: to: '/android-chrome-512x512.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/apple-touch-icon.png',
6:48:11 PM: to: '/apple-touch-icon.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/browserconfig.xml',
6:48:11 PM: to: '/browserconfig.xml',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/favicon-16x16.png',
6:48:11 PM: to: '/favicon-16x16.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/favicon-32x32.png',
6:48:11 PM: to: '/favicon-32x32.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/favicon.ico',
6:48:11 PM: to: '/favicon.ico',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/logo.png',
6:48:11 PM: to: '/logo.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/mstile-144x144.png',
6:48:11 PM: to: '/mstile-144x144.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/mstile-150x150.png',
6:48:11 PM: to: '/mstile-150x150.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/mstile-310x150.png',
6:48:11 PM: to: '/mstile-310x150.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/mstile-310x310.png',
6:48:11 PM: to: '/mstile-310x310.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/mstile-70x70.png',
6:48:11 PM: to: '/mstile-70x70.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/robots.txt',
6:48:11 PM: to: '/robots.txt',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/safari-pinned-tab.svg',
6:48:11 PM: to: '/safari-pinned-tab.svg',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/share.png',
6:48:11 PM: to: '/share.png',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/site.webmanifest',
6:48:11 PM: to: '/site.webmanifest',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/add-dots.mp4',
6:48:11 PM: to: '/videos/add-dots.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/add-harmony-note.mp4',
6:48:11 PM: to: '/videos/add-harmony-note.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/add-measure-after.mp4',
6:48:11 PM: to: '/videos/add-measure-after.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/add-measure-before.mp4',
6:48:11 PM: to: '/videos/add-measure-before.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/add-measure-to-end.mp4',
6:48:11 PM: to: '/videos/add-measure-to-end.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/add-melody-note.mp4',
6:48:11 PM: to: '/videos/add-melody-note.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/add-note.mp4',
6:48:11 PM: to: '/videos/add-note.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/add-tie.mp4',
6:48:11 PM: to: '/videos/add-tie.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/change-cursor.mp4',
6:48:11 PM: to: '/videos/change-cursor.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/change-duration-insert-note.mp4',
6:48:11 PM: to: '/videos/change-duration-insert-note.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/change-duration-mode-insert-note.mp4',
6:48:11 PM: to: '/videos/change-duration-mode-insert-note.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/change-duration-mode-replace-note.mp4',
6:48:11 PM: to: '/videos/change-duration-mode-replace-note.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/change-tempo.mp4',
6:48:11 PM: to: '/videos/change-tempo.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/change-time-signature.mp4',
6:48:11 PM: to: '/videos/change-time-signature.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/change-tine-color.mp4',
6:48:11 PM: to: '/videos/change-tine-color.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/delete-dots.mp4',
6:48:11 PM: to: '/videos/delete-dots.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/delete-measure.mp4',
6:48:11 PM: to: '/videos/delete-measure.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/delete-note.mp4',
6:48:11 PM: to: '/videos/delete-note.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/delete-rest.mp4',
6:48:11 PM: to: '/videos/delete-rest.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/delete-tie.mp4',
6:48:11 PM: to: '/videos/delete-tie.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/help.mp4',
6:48:11 PM: to: '/videos/help.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/insert-note.mp4',
6:48:11 PM: to: '/videos/insert-note.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/insert-rest.mp4',
6:48:11 PM: to: '/videos/insert-rest.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/lyric.mp4',
6:48:11 PM: to: '/videos/lyric.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/preview-tab.mp4',
6:48:11 PM: to: '/videos/preview-tab.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/publish-tab.mp4',
6:48:11 PM: to: '/videos/publish-tab.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/repeat.mp4',
6:48:11 PM: to: '/videos/repeat.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/save-tab.mp4',
6:48:11 PM: to: '/videos/save-tab.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/section-name.mp4',
6:48:11 PM: to: '/videos/section-name.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/undo-redo.mp4',
6:48:11 PM: to: '/videos/undo-redo.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/videos/unpublish-tab.mp4',
6:48:11 PM: to: '/videos/unpublish-tab.mp4',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-A2.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-A2.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-A4.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-A4.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-B3.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-B3.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-B5.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-B5.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-D3.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-D3.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-D5.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-D5.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-E2.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-E2.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-E4.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-E4.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-G3.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-G3.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/clean-guitar/clean-guitar-G5.mp3',
6:48:11 PM: to: '/sound/clean-guitar/clean-guitar-G5.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-A2.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-A2.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-A4.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-A4.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-B3.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-B3.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-B5.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-B5.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-D3.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-D3.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-D5.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-D5.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-E2.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-E2.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-E4.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-E4.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-G3.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-G3.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/guitar/guitar-G5.mp3',
6:48:11 PM: to: '/sound/guitar/guitar-G5.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/kalimba/gecko-k17k-C3.mp3',
6:48:11 PM: to: '/sound/kalimba/gecko-k17k-C3.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/kalimba/hluru-black-walnut-F2.mp3',
6:48:11 PM: to: '/sound/kalimba/hluru-black-walnut-F2.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/ocarina/ocarina-E4.mp3',
6:48:11 PM: to: '/sound/ocarina/ocarina-E4.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-C1.mp3',
6:48:11 PM: to: '/sound/piano/piano-C1.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-C2.mp3',
6:48:11 PM: to: '/sound/piano/piano-C2.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-C3.mp3',
6:48:11 PM: to: '/sound/piano/piano-C3.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-C4.mp3',
6:48:11 PM: to: '/sound/piano/piano-C4.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-C5.mp3',
6:48:11 PM: to: '/sound/piano/piano-C5.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-C6.mp3',
6:48:11 PM: to: '/sound/piano/piano-C6.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-C7.mp3',
6:48:11 PM: to: '/sound/piano/piano-C7.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-C8.mp3',
6:48:11 PM: to: '/sound/piano/piano-C8.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-Gb1.mp3',
6:48:11 PM: to: '/sound/piano/piano-Gb1.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-Gb2.mp3',
6:48:11 PM: to: '/sound/piano/piano-Gb2.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-Gb3.mp3',
6:48:11 PM: to: '/sound/piano/piano-Gb3.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-Gb4.mp3',
6:48:11 PM: to: '/sound/piano/piano-Gb4.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: {
6:48:11 PM: from: '/sound/piano/piano-Gb5.mp3',
6:48:11 PM: to: '/sound/piano/piano-Gb5.mp3',
6:48:11 PM: conditions: { Cookie: [Array] },
6:48:11 PM: status: 200
6:48:11 PM: },
6:48:11 PM: ... 80 more items
6:48:11 PM: ].
6:48:11 PM:
6:48:11 PM: (@netlify/plugin-nextjs onBuild completed in 675ms)
6:48:11 PM:
6:48:11 PM: ────────────────────────────────────────────────────────────────
6:48:11 PM: 4. Functions bundling
6:48:11 PM: ────────────────────────────────────────────────────────────────
6:48:11 PM:
6:48:11 PM: Packaging Functions from .netlify/functions-internal directory:
6:48:11 PM: - ___netlify-handler/___netlify-handler.js
6:48:11 PM: - ___netlify-odb-handler/___netlify-odb-handler.js
6:48:11 PM: - _ipx/_ipx.js
6:48:11 PM:
6:49:07 PM:
6:49:07 PM: (Functions bundling completed in 55.8s)
6:49:07 PM:
6:49:07 PM: ────────────────────────────────────────────────────────────────
6:49:07 PM: 5. @netlify/plugin-nextjs (onPostBuild event)
6:49:07 PM: ────────────────────────────────────────────────────────────────
6:49:07 PM:
6:49:07 PM: Next.js cache saved.
6:49:07 PM: Netlify configuration property "headers" value changed to [
6:49:07 PM: {
6:49:07 PM: for: '/(.*)',
6:49:07 PM: values: {
6:49:07 PM: 'X-DNS-Prefetch-Control': 'on',
6:49:07 PM: 'Strict-Transport-Security': 'max-age=63072000; includeSubDomains; preload',
6:49:07 PM: 'X-XSS-Protection': '1; mode=block',
6:49:07 PM: 'X-Frame-Options': 'SAMEORIGIN',
6:49:07 PM: 'Permissions-Policy': '',
6:49:07 PM: 'X-Content-Type-Options': 'nosniff'
6:49:07 PM: }
6:49:07 PM: }
6:49:07 PM: ].
6:49:07 PM:
6:49:07 PM: (@netlify/plugin-nextjs onPostBuild completed in 882ms)
6:49:07 PM:
6:49:07 PM: ────────────────────────────────────────────────────────────────
6:49:07 PM: 6. Deploy site
6:49:07 PM: ────────────────────────────────────────────────────────────────
6:49:07 PM:
6:49:08 PM: Starting to deploy site from '.next'
6:49:08 PM: Creating deploy tree
6:49:08 PM: Creating deploy upload records
6:49:09 PM: 62 new files to upload
6:49:09 PM: 3 new functions to upload
6:49:20 PM: Site deploy was successfully initiated
6:49:20 PM:
6:49:20 PM: (Deploy site completed in 12.1s)
6:49:20 PM:
6:49:20 PM: ────────────────────────────────────────────────────────────────
6:49:20 PM: Netlify Build Complete
6:49:20 PM: ────────────────────────────────────────────────────────────────
6:49:20 PM:
6:49:20 PM: (Netlify Build completed in 3m 35s)
6:49:20 PM: Starting post processing
6:49:20 PM: Caching artifacts
6:49:20 PM: Started saving node modules
6:49:20 PM: Finished saving node modules
6:49:20 PM: Started saving build plugins
6:49:20 PM: Finished saving build plugins
6:49:20 PM: Started saving pip cache
6:49:20 PM: Finished saving pip cache
6:49:20 PM: Started saving emacs cask dependencies
6:49:20 PM: Finished saving emacs cask dependencies
6:49:20 PM: Started saving maven dependencies
6:49:20 PM: Finished saving maven dependencies
6:49:20 PM: Started saving boot dependencies
6:49:20 PM: Finished saving boot dependencies
6:49:20 PM: Started saving rust rustup cache
6:49:20 PM: Finished saving rust rustup cache
6:49:20 PM: Started saving go dependencies
6:49:20 PM: Finished saving go dependencies
6:49:20 PM: Skipping HTML post processing
6:49:21 PM: Post processing - header rules
6:49:21 PM: Post processing - redirect rules
6:49:21 PM: Post processing done
6:49:21 PM: Build script success
6:49:25 PM: Site is live ✨
6:50:22 PM: Finished processing build request in 6m8.875748926s
Function logs
Function logs
7:03:53 PM 2022-06-28T22:03:53.777Z undefined ERROR Uncaught Exception {"errorType":"TypeError","errorMessage":"Invalid URL: http://","code":"ERR_INVALID_URL","input":"http://","stack":["TypeError [ERR_INVALID_URL]: Invalid URL: http://"," at new NodeError (internal/errors.js:322:7)"," at onParseError (internal/url.js:270:9)"," at new URL (internal/url.js:346:5)"," at /var/task/node_modules/ipx/dist/chunks/middleware.cjs:131:12"," at Array.map (<anonymous>)"," at createHTTPSource (/var/task/node_modules/ipx/dist/chunks/middleware.cjs:127:28)"," at createIPX (/var/task/node_modules/ipx/dist/chunks/middleware.cjs:423:24)"," at createIPXHandler (/var/task/node_modules/@netlify/ipx/dist/index.js:16:37)"," at Object.<anonymous> (/var/task/.netlify/functions-internal/_ipx/_ipx.js:7:46)"," at Module._compile (internal/modules/cjs/loader.js:1085:14)"]}
.next JSON files
generated .next JSON files
required-server-files.json
{
"version": 1,
"config": {
"env": {
"NEXTAUTH_URL": "https://resilient-cranachan-3c07af.netlify.app"
},
"webpackDevMiddleware": null,
"eslint": {
"ignoreDuringBuilds": false
},
"typescript": {
"ignoreBuildErrors": false,
"tsconfigPath": "tsconfig.json"
},
"distDir": ".next",
"cleanDistDir": true,
"assetPrefix": "",
"configOrigin": "next.config.js",
"useFileSystemPublicRoutes": true,
"generateEtags": true,
"pageExtensions": [
"tsx",
"ts",
"jsx",
"js"
],
"target": "server",
"poweredByHeader": true,
"compress": true,
"analyticsId": "",
"images": {
"deviceSizes": [
640,
750,
828,
1080,
1200,
1920,
2048,
3840
],
"imageSizes": [
16,
32,
48,
64,
96,
128,
256,
384
],
"path": "/_next/image",
"loader": "default",
"domains": [
"content.tabwhale.com.s3.amazonaws.com",
"content.tabwhale.com.s3.us-east-2.amazonaws.com",
"content.tabwhale.com",
""
],
"disableStaticImages": false,
"minimumCacheTTL": 60,
"formats": [
"image/webp"
],
"dangerouslyAllowSVG": false,
"contentSecurityPolicy": "script-src 'none'; frame-src 'none'; sandbox;"
},
"devIndicators": {
"buildActivity": true,
"buildActivityPosition": "bottom-right"
},
"onDemandEntries": {
"maxInactiveAge": 15000,
"pagesBufferLength": 2
},
"amp": {
"canonicalBase": ""
},
"basePath": "",
"sassOptions": {},
"trailingSlash": false,
"i18n": null,
"productionBrowserSourceMaps": false,
"optimizeFonts": true,
"excludeDefaultMomentLocales": true,
"serverRuntimeConfig": {},
"publicRuntimeConfig": {
"nextPlausibleProxyOptions": {
"customDomain": "https://ec2-18-117-11-139.us-east-2.compute.amazonaws.com"
}
},
"reactStrictMode": true,
"httpAgentOptions": {
"keepAlive": true
},
"outputFileTracing": true,
"staticPageGenerationTimeout": 60,
"swcMinify": false,
"experimental": {
"cpus": 7,
"sharedPool": true,
"plugins": false,
"profiling": false,
"isrFlushToDisk": true,
"workerThreads": false,
"pageEnv": false,
"optimizeCss": false,
"nextScriptWorkers": false,
"scrollRestoration": false,
"externalDir": false,
"reactRoot": false,
"disableOptimizedLoading": false,
"gzipSize": true,
"swcFileReading": true,
"craCompat": false,
"esmExternals": true,
"isrMemoryCacheSize": 52428800,
"serverComponents": false,
"fullySpecified": false,
"outputFileTracingRoot": "",
"outputStandalone": false,
"images": {
"layoutRaw": false
},
"trustHostHeader": false
},
"configFileName": "next.config.js",
"compiler": {
"styledComponents": true
}
},
"appDir": "/opt/build/repo",
"files": [
".next/routes-manifest.json",
".next/server/pages-manifest.json",
".next/build-manifest.json",
".next/prerender-manifest.json",
".next/server/middleware-manifest.json",
".next/react-loadable-manifest.json",
".next/server/font-manifest.json",
".next/BUILD_ID"
],
"ignore": [
"node_modules/next/dist/compiled/@ampproject/toolbox-optimizer/**/*"
]
}
prerender-manifest.json
{
"version": 3,
"routes": {
"/tools": {
"initialRevalidateSeconds": false,
"srcRoute": null,
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/tools.json"
},
"/blog/post/about-tabwhale": {
"initialRevalidateSeconds": false,
"srcRoute": "/blog/post/[postSlug]",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/blog/post/about-tabwhale.json"
},
"/blog/post/how-to-read-kalimba-tabs": {
"initialRevalidateSeconds": false,
"srcRoute": "/blog/post/[postSlug]",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/blog/post/how-to-read-kalimba-tabs.json"
},
"/blog/post/how-to-read-number-and-letter-kalimba-tabs": {
"initialRevalidateSeconds": false,
"srcRoute": "/blog/post/[postSlug]",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/blog/post/how-to-read-number-and-letter-kalimba-tabs.json"
},
"/blog": {
"initialRevalidateSeconds": false,
"srcRoute": null,
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/blog.json"
},
"/blog/category/kalimba": {
"initialRevalidateSeconds": false,
"srcRoute": "/blog/category/[postCategory]",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/blog/category/kalimba.json"
},
"/blog/category/tabwhale": {
"initialRevalidateSeconds": false,
"srcRoute": "/blog/category/[postCategory]",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/blog/category/tabwhale.json"
},
"/tools/virtual-piano": {
"initialRevalidateSeconds": false,
"srcRoute": "/tools/[toolSlug]",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/tools/virtual-piano.json"
}
},
"dynamicRoutes": {
"/blog/post/[postSlug]": {
"routeRegex": "^/blog/post/([^/]+?)(?:/)?$",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/blog/post/[postSlug].json",
"fallback": false,
"dataRouteRegex": "^/_next/data/HYCdsj7jwnTRMUSAb8\\-lZ/blog/post/([^/]+?)\\.json$"
},
"/blog/category/[postCategory]": {
"routeRegex": "^/blog/category/([^/]+?)(?:/)?$",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/blog/category/[postCategory].json",
"fallback": false,
"dataRouteRegex": "^/_next/data/HYCdsj7jwnTRMUSAb8\\-lZ/blog/category/([^/]+?)\\.json$"
},
"/tools/[toolSlug]": {
"routeRegex": "^/tools/([^/]+?)(?:/)?$",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/tools/[toolSlug].json",
"fallback": false,
"dataRouteRegex": "^/_next/data/HYCdsj7jwnTRMUSAb8\\-lZ/tools/([^/]+?)\\.json$"
},
"/tab/[title]/[id]": {
"routeRegex": "^/tab/([^/]+?)/([^/]+?)(?:/)?$",
"dataRoute": "/_next/data/HYCdsj7jwnTRMUSAb8-lZ/tab/[title]/[id].json",
"fallback": null,
"dataRouteRegex": "^/_next/data/HYCdsj7jwnTRMUSAb8\\-lZ/tab/([^/]+?)/([^/]+?)\\.json$"
}
},
"notFoundRoutes": [],
"preview": {
"previewModeId": "---",
"previewModeSigningKey": "---",
"previewModeEncryptionKey": "---"
}
}
Hi! I'm looking to replicate this - can you give me the format of your process.env.S3_UPLOAD_BUCKET. Does it include the http:// or https://, or is it just a variable like bucketname?
Hi! I'm looking to replicate this - can you give me the format of your
process.env.S3_UPLOAD_BUCKET. Does it include thehttp://orhttps://, or is it just a variable likebucketname?
Hello!
Sure, it's defined as S3_UPLOAD_BUCKET=content.tabwhale.com, and the region is S3_UPLOAD_REGION=us-east-2
Hi. Can you confirm whether this issue is still present?
Closing as we have not received a response. If this is still an issue, please re-open.
For anybody finding this issue while Googling, I had the same problem.
The problem came down to Netlify not liking an empty string provided in next.config.js's images: { domains: [...] } list.
The image below shows the line from OP's next config that was causing the issue on Netlify.
We removed the empty string and no longer receive the error. I hope this helps whoever finds this issue as well.