This pull request is a temporary addition that uses the `x-now-route-params` header in serverless.
This header returns the regex groups with indexes, not their named variants.
As a result, we must use the getRouteMatcher utility to reverse this into Next.js' expected names.
Since this got complex, I've added a test for it. We should probably remove this behavior sooner than later.
* Remove static optimization from message
This check does not pertain to automatic static optimization.
Closes https://github.com/zeit/next.js/issues/9042
* Update help message
* Add buildId to SPR data routes
* Update buildId replace in serverless loader
* Use new RegExp and add comment
* Apply suggestions from code review
Co-Authored-By: Joe Haddad <joe.haddad@zeit.co>
* Test to ensure client transition and handle / data route
* Remove experimental.publicDirectory config
* Error when public is set as an output dir
* Remove experimental.publicDirectory checks
* Update publicFiles checking in next build
* Informative Error for Invalid Global CSS
This adds a helpful error message with a (basic) err.sh link for invalid Global CSS usage.
We'll want to expand on this topic more and offer alternatives when CSS Modules support lands.
* Update expected error message
* Show content as soon as <style> tags are added
* Add fallback removal
* Add test for when unused
* Ensure the function is ES5 compatible
* IE support
* Test it works on broken pages
* Remove `config` export
This removes the `config` export instead of all exports.
Reverts #8889 (but with fixed behavior)
* Add test to ensure config object is dropped from client-bundle
* Add SPR Dynamic Routes to Manifest
This adds dynamic routes for SPR pages to the prerender manifest so we can configure the Now Builder to handle these routes as SPR routes. Otherwise, they're treated like normal `getInitialProps` pages.
* Fix types
* Configure the Default Revalidate
The default revalidate behavior should be configured by Next.js. Otherwise, the behavior might drift or change in non-semver compliant ways between Next.js and the builder (or other 3rd party setups).
* Add additional comment
* Add revalidate header and error when invalid
object from getStaticProps
* Make sprCache no-op in dev mode
* Update packages/next/next-server/server/next-server.ts
* Update tests for fixes
* Update getStaticProps error and add test
* Update manifest test
* Add validating revalidate value
* Apply suggestions from code review
Co-Authored-By: Joe Haddad <joe.haddad@zeit.co>
* Change from error to warning high revalidate value
* initial commit for SPRv2
* Add initial SPR cache handling
* update SPR handling
* Implement SPR handling in render
* Update tests, handle caching with serverless next
start, add TODOs, and update manifest generating
* Handle no prerender-manifest from not being used
* Fix url.parse error
* Apply suggestions from code review
Co-Authored-By: Joe Haddad <joe.haddad@zeit.co>
* Replace set with constants in next-page-config
* simplify sprStatus.used
* Add error if getStaticProps is used with getInitialProps
* Remove stale TODO
* Update revalidate values in SPR cache for non-seeded routes
* Apply suggestions from code review
* Remove concurrency type
* Rename variable for clarity
* Add copying prerender files during export
* Add comment for clarity
* Fix exporting
* Update comment
* Add additional note
* Rename variable
* Update to not re-export SPR pages from build
* Hard navigate when fetching data fails
* Remove default extension
* Add brackets
* Add checking output files to prerender tests
* Adjust export move logic
* Clarify behavior of export aggregation
* Update variable names for clarity
* Update tests
* Add comment
* s/an oxymoron/contradictory/
* rename
* Extract error case
* Add tests for exporting SPR pages and update
/_next/data endpoint to end with .json
* Relocate variable
* Adjust route building
* Rename to unstable
* Rename unstable_getStaticParams
* Fix linting
* Only add this when a data request
* Update prerender data tests
* s/isServerless/isLikeServerless/
* Don't rely on query for `next start` in serverless mode
* Rename var
* Update renderedDuringBuild check
* Add test for dynamic param with bracket
* Fix serverless next start handling
* remove todo
* Adjust comment
* Update calculateRevalidate
* Remove cache logic from render.tsx
* Remove extra imports
* Move SPR cache logic to next-server
* Remove old isDynamic prop
* Add calling App getInitialProps for SPR pages
* Update revalidate logic
* Add isStale to SprCacheValue
* Update headers for SPR
* add awaiting pendingRevalidation
* Dont return null for revalidation render
* Adjust logic
* Be sure to remove coalesced render
* Fix data for serverless
* Create a method coalescing utility
* Remove TODO
* Extract send payload helper
* Wrap in-line
* Move around some code
* Add tests for de-duping and revalidating
* Update prerender manifest test
* Fix CSS Ordering
This fixes CSS ordering between development and production.
Before this change, globally imported CSS would come _after_ `<style jsx global>` in development, but _before_ in production.
After this change, it'll always be applied before.
* Move to correct element
* Add tests
* Fix obnoxious indents
* Update test/integration/css/fixtures/with-styled-jsx/pages/index.js
Co-Authored-By: JJ Kasper <jj@jjsweb.site>
* Global CSS Support
* Fix webpack configuration
* oneOf rule isn't necessary yet
* Adjust CSS chunk naming
* Begin testing CSS behavior
* Add another test TODO
* Replace null-loader with ignore-loader
* Turn on chunks for new CSS feature
* Fix multi test suite
* Test CSS import order
* Test style HMR
* Test CSS compilation
* Test compilation and prefixing together
* Verify CSS styling works for Development and Production
* Add missing TODO
* Remove unnecessary test
* Adjust TODO message
* Hide page until React hydrates
* Revert "Hide page until React hydrates"
This reverts commit 898d4e0ee547b003d5790e2b11476740d645b907.
* Hide FOUC during development
* Test CSS imports
* Update tests TODO
* Add fixture for url() test
* Test `file-loader` support in CSS files
* Use a simple variant of cssnano
* Self-import
* Undo bundling
* Implement suggestion
* Match public files priority in dev
* Remove un-needed old public file handling
* Run public file priority test for non-dev also
* Make sure to enable publicDirectory
* Add checking for conflicting pages in dev and during build
* Add error for public dir middleware conflict
* Add err.sh for _next conflict
* Move up public dir conflict checking
* Only run _next conflict check in dev when path contains it
* Add link to docs for prerender indicator and allow disabling
* Fix lint error from example
* Disable by default when electron is detected
* Add button to dismiss indicator for session
* Update disabling indicator in electron
* Ensure requests are resolved as directories
`resolveRequest` will strip down to baseDir if there's no trailing slash as it assumes you passed a file.
* Disable telemetry for PR Stats
* Fail build on duplicate pages
This will fail the `next build` command when a duplicate page is found.
In development, we'll emit a warning instead of crashing the dev server.
* Add test for warning in development
* Only issue a warning
* Fix production test
* Fix development test
* Remove useless arg
* Warn in development, too
* TypeScript report on active pages only
The TypeScript integration needs to report on active pages only.
When inactive pages are reported, they block the compilation and prevent the user from fixing the error (because the file isn't watched).
We cannot add the file to the webpack watcher because the compilation has already been sealed.
* Remove TODO message
* Test that inactive pages are not type checked
* Tweak test set-up
* Update azure config
* Add cleaning test files and windows handling
* Limit windows test to one at a time
* Tweak test settings
* Update tests splitting
* remove custom concurrency for azure
* Test Azure var
* Update Azure config
* bump
* Simplify cleaning up
* better type for AppTree in NextPageContext
* updated tests
* new AppTreeType type and updated tests
* removed a commented out line
* another take on the type of AppTree, with updated tests
* allow passing additional props to AppType
* Update suite name
* creates perf marks object constant
* updates clearmarks to only clear core marks
* adds test + fixes object constqnt reference
* hardcodes perf marks and removes constant
* adds test to check custom marks are not cleared
* Adjust lib chunk naming algorithm and prevent duplicate react-dom
* Remove alias for react-dom and update separator replacement logic
* Add comment to webpack-config
* Add integration test for react-dom duplication
* Switch to using hash for lib chunk names
* remove extra file from PR
* Remove another extraneous change
* Remove test based on lib chunk name
* Update index.test.js
* Check for TypeScript files for auto setup
This re-adds the behavior and only checks the `pages` directory for speed reasons.
* Adjust logic
* Handle not found too
* Tweak typescript test suite
* Revert "Tweak typescript test suite"
This reverts commit 9e0108da7c70e7ae45b412b60c07162383de65f3.
* Make sure HMR connection isn't being closed
while testing
* Update to not re-use NODE_ENV
* Break up/rework TypeScript test suite
* bump
* Add deprecation warning for App Container
* Apply suggestions from code review
Co-Authored-By: Joe Haddad <joe.haddad@zeit.co>
* Tweak for more dead-code elimination
* Add warning when empty object is returned
from getInitialProps
* Apply suggestions from code review
Co-Authored-By: Joe Haddad <joe.haddad@zeit.co>
* Apply suggestions from code review
Co-Authored-By: Jan Potoms <potoms.jan@gmail.com>
* Add experimental optimizeLibraries flag, currently prunes Moment.js locales
* expose moment for use in assertion
* try with the same setup as the production integration test
* Apply optimiztaions in dev and on server so they're consistent.
* fix build (oh dear)
* Update index.test.js
* Rename flag to future.excludeDefaultMomentLocales
* Adjust impl
* Fix dynamic APIs with query params
If you define a dynamic API such as
```
pages/
api/
[id].js
```
This api becomes available at `/api/[id]`. If you send a request with
a query parameter the value of `req.query.id` will include the query
string as well as the path parameter.
E.g. the request to `/api/2?test=123` will result in `req.query`
being
```javascript
{
id: "2?test=123",
test: "123",
}
```
instead of
```javascript
{
id: "2",
test: "123",
}
```
* Fix url parse in serverless loader
* Add serverless test
* Fix conflict between defaultPathMap and default 404.html export,if have a page in pages/404.js
* Update packages/next/export/index.js
Co-Authored-By: JJ Kasper <jj@jjsweb.site>
* add test export-override-404
* Add custom profiler / tracer
This captures both client/production builds and everything before and after is cpu profiled, which makes sure that the whole process instead of just webpack is included in the final report.
* Update tests
* Update profiling-plugin.js
* Rename profiling-plugin.js to profiling-plugin.ts
* Update profiling-plugin.ts
* Update and rename profiling-plugin.ts to profiling-plugin.js
* Update webpack-config.ts
* Update profiling-plugin.js
* Add types
* Add missing type
* Add back TypeScript linting
* Remove tracing-js
* Add transparent JSX optimization.
* fix duplicate React import
* fix React not being imported when only a single Fragment node is present in a source module
* remove babel-plugin-react-require
* Fix JSX optimization for CommonJS source files.
* Only read for typescript files if there's no tsconfig
* Update verifyTypeScriptSetup.ts
* Remove the recursive check for TS files
* Remove unused import
* Updated tests
* Add a check for the content of tsConfig
* Clean up
* utf8
* Also provide AppTree in NextPageContext
* Don't predefine AppTree as null in ctx
* Make update smaller
* Don’t reassign variable
* Add test for AppTree in NextPageContext
* Update utils.ts
* Add checking for hybrid AMP during static check
* Update to always hit server for prerender data
* Add removing of SPR code when not used
* Add checking for hybrid AMP during static check
* Update to always hit server for prerender data
* Add removing of SPR code when not used
* Update dead code elimination
* Throw error if next export detects an api route
* Moved the test to the export tests
* Added missing comma
* Move the API route comment
* Add comma after replace
* Show a warning instead