From 745494a9a3ef630a87d6ee2fca602b222d1f3ba9 Mon Sep 17 00:00:00 2001 From: Shu Uesugi Date: Mon, 9 Mar 2020 09:47:21 -0700 Subject: [PATCH 01/47] Add demo URL for the DatoCMS example (#10901) --- docs/advanced-features/preview-mode.md | 2 +- docs/basic-features/data-fetching.md | 2 +- docs/basic-features/pages.md | 2 +- examples/cms-datocms/README.md | 4 ++++ 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/advanced-features/preview-mode.md b/docs/advanced-features/preview-mode.md index a5ef1e901e069b2..b0afff67050f3ac 100644 --- a/docs/advanced-features/preview-mode.md +++ b/docs/advanced-features/preview-mode.md @@ -153,7 +153,7 @@ https:///api/preview?secret=&slug= Take a look at the following examples to learn more: -- [DatoCMS Example](https://github.com/zeit/next.js/tree/canary/examples/cms-datocms) +- [DatoCMS Example](https://github.com/zeit/next.js/tree/canary/examples/cms-datocms) ([Demo](https://next-blog-datocms.now.sh/)) ## More Details diff --git a/docs/basic-features/data-fetching.md b/docs/basic-features/data-fetching.md index c3f5053cd529f5c..c94a5e5f07054ff 100644 --- a/docs/basic-features/data-fetching.md +++ b/docs/basic-features/data-fetching.md @@ -428,7 +428,7 @@ function Profile() { Take a look at the following examples to learn more: -- [DatoCMS Example](https://github.com/zeit/next.js/tree/canary/examples/cms-datocms) +- [DatoCMS Example](https://github.com/zeit/next.js/tree/canary/examples/cms-datocms) ([Demo](https://next-blog-datocms.now.sh/)) ## Learn more diff --git a/docs/basic-features/pages.md b/docs/basic-features/pages.md index 01142aee742dbe7..9c156edbda0797b 100644 --- a/docs/basic-features/pages.md +++ b/docs/basic-features/pages.md @@ -246,7 +246,7 @@ We've discussed two forms of pre-rendering for Next.js. Take a look at the following examples to learn more: -- [DatoCMS Example](https://github.com/zeit/next.js/tree/canary/examples/cms-datocms) +- [DatoCMS Example](https://github.com/zeit/next.js/tree/canary/examples/cms-datocms) ([Demo](https://next-blog-datocms.now.sh/)) ## Learn more diff --git a/examples/cms-datocms/README.md b/examples/cms-datocms/README.md index 0dffcfa1d8b42cd..ef71e5c4b3747f9 100644 --- a/examples/cms-datocms/README.md +++ b/examples/cms-datocms/README.md @@ -2,6 +2,10 @@ This example showcases Next.js's [Static Generation](/docs/basic-features/pages.md) feature using [DatoCMS](https://www.datocms.com/) as the data source. +## Demo + +### [https://next-blog-datocms.now.sh/](https://next-blog-datocms.now.sh/) + ## How to use ### Using `create-next-app` From 8443a809f3ff2b2a2707550f8accc8b53c87181a Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Mon, 9 Mar 2020 13:30:44 -0400 Subject: [PATCH 02/47] Verify GS(S)P Serializability (#10857) * Verify GS(S)P Serializability * Add support for cyclic refs * Add unit tests * Test for error in development mode * Fix prerender preview tests * Fix gssp preview tests * fix 2x test cases * Add desired test * fix some more tests * Fix route manifest expect * Fix test expects * Test that `getServerSideProps` does not error in production * Test that getStaticProps is not checked in production * Test serialization check during build * Fix export detection for serverless * Update test/unit/is-serializable-props.test.js Co-Authored-By: JJ Kasper Co-authored-by: JJ Kasper --- .../webpack/loaders/next-serverless-loader.ts | 7 +- packages/next/export/worker.js | 10 +- packages/next/lib/is-serializable-props.ts | 138 +++++++++++++ .../next/next-server/server/next-server.ts | 4 +- packages/next/next-server/server/render.tsx | 22 ++ .../getserversideprops-preview/pages/index.js | 8 +- .../test/index.test.js | 10 +- .../getserversideprops/pages/index.js | 4 + .../getserversideprops/pages/non-json.js | 11 + .../getserversideprops/test/index.test.js | 49 ++++- .../prerender-preview/pages/index.js | 8 +- .../prerender-preview/test/index.test.js | 8 +- test/integration/prerender/pages/index.js | 4 + .../prerender/pages/non-json/[p].js | 21 ++ test/integration/prerender/test/index.test.js | 81 ++++++++ test/unit/is-serializable-props.test.js | 190 ++++++++++++++++++ 16 files changed, 549 insertions(+), 26 deletions(-) create mode 100644 packages/next/lib/is-serializable-props.ts create mode 100644 test/integration/getserversideprops/pages/non-json.js create mode 100644 test/integration/prerender/pages/non-json/[p].js create mode 100644 test/unit/is-serializable-props.test.js diff --git a/packages/next/build/webpack/loaders/next-serverless-loader.ts b/packages/next/build/webpack/loaders/next-serverless-loader.ts index c50f932c8bf56d4..55ee67059859ff4 100644 --- a/packages/next/build/webpack/loaders/next-serverless-loader.ts +++ b/packages/next/build/webpack/loaders/next-serverless-loader.ts @@ -232,7 +232,8 @@ const nextServerlessLoader: loader.Loader = function() { export const config = ComponentInfo['confi' + 'g'] || {} export const _app = App - export async function renderReqToHTML(req, res, fromExport, _renderOpts, _params) { + export async function renderReqToHTML(req, res, renderMode, _renderOpts, _params) { + const fromExport = renderMode === 'export' || renderMode === true; ${ basePath ? ` @@ -327,7 +328,7 @@ const nextServerlessLoader: loader.Loader = function() { let result = await renderToHTML(req, res, "${page}", Object.assign({}, getStaticProps ? {} : parsedUrl.query, nowParams ? nowParams : params, _params, isFallback ? { __nextFallback: 'true' } : {}), renderOpts) - if (_nextData && !fromExport) { + if (_nextData && !renderMode) { const payload = JSON.stringify(renderOpts.pageData) res.setHeader('Content-Type', 'application/json') res.setHeader('Content-Length', Buffer.byteLength(payload)) @@ -349,7 +350,7 @@ const nextServerlessLoader: loader.Loader = function() { ) } - if (fromExport) return { html: result, renderOpts } + if (renderMode) return { html: result, renderOpts } return result } catch (err) { if (err.code === 'ENOENT') { diff --git a/packages/next/export/worker.js b/packages/next/export/worker.js index a5169bf8d62e06d..55770c11800c6e0 100644 --- a/packages/next/export/worker.js +++ b/packages/next/export/worker.js @@ -154,7 +154,13 @@ export default async function({ } renderMethod = mod.renderReqToHTML - const result = await renderMethod(req, res, true, { ampPath }, params) + const result = await renderMethod( + req, + res, + 'export', + { ampPath }, + params + ) curRenderOpts = result.renderOpts || {} html = result.html } @@ -227,7 +233,7 @@ export default async function({ let ampHtml if (serverless) { req.url += (req.url.includes('?') ? '&' : '?') + 'amp=1' - ampHtml = (await renderMethod(req, res, true)).html + ampHtml = (await renderMethod(req, res, 'export')).html } else { ampHtml = await renderMethod( req, diff --git a/packages/next/lib/is-serializable-props.ts b/packages/next/lib/is-serializable-props.ts new file mode 100644 index 000000000000000..6053b064be6d8ce --- /dev/null +++ b/packages/next/lib/is-serializable-props.ts @@ -0,0 +1,138 @@ +const regexpPlainIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/ + +function isPlainObject(value: any): boolean { + if (Object.prototype.toString.call(value) !== '[object Object]') { + return false + } + + const prototype = Object.getPrototypeOf(value) + return prototype === null || prototype === Object.prototype +} + +export function isSerializableProps( + page: string, + method: string, + input: any +): true { + if (!isPlainObject(input)) { + throw new SerializableError( + page, + method, + '', + `Props must be returned as a plain object from ${method}: \`{ props: { ... } }\`.` + ) + } + + const visited = new WeakSet() + + function visit(value: any, path: string) { + if (visited.has(value)) { + throw new SerializableError( + page, + method, + path, + 'Circular references cannot be expressed in JSON.' + ) + } + + visited.add(value) + } + + function isSerializable(value: any, path: string): true { + const type = typeof value + if ( + // `null` can be serialized, but not `undefined`. + value === null || + // n.b. `bigint`, `function`, `symbol`, and `undefined` cannot be + // serialized. + // + // `object` is special-cased below, as it may represent `null`, an Array, + // a plain object, a class, et al. + type === 'boolean' || + type === 'number' || + type === 'string' + ) { + return true + } + + if (type === 'undefined') { + throw new SerializableError( + page, + method, + path, + '`undefined` cannot be serialized as JSON. Please use `null` or omit this value all together.' + ) + } + + if (isPlainObject(value)) { + visit(value, path) + + if ( + Object.entries(value).every(([key, value]) => { + const nextPath = regexpPlainIdentifier.test(key) + ? `${path}.${key}` + : `${path}[${JSON.stringify(key)}]` + + return ( + isSerializable(key, nextPath) && isSerializable(value, nextPath) + ) + }) + ) { + return true + } + + throw new SerializableError( + page, + method, + path, + `invariant: Unknown error encountered in Object.` + ) + } + + if (Array.isArray(value)) { + visit(value, path) + + if ( + value.every((value, index) => + isSerializable(value, `${path}[${index}]`) + ) + ) { + return true + } + + throw new SerializableError( + page, + method, + path, + `invariant: Unknown error encountered in Array.` + ) + } + + // None of these can be expressed as JSON: + // const type: "bigint" | "symbol" | "object" | "function" + throw new SerializableError( + page, + method, + path, + '`' + + type + + '`' + + (type === 'object' + ? ` ("${Object.prototype.toString.call(value)}")` + : '') + + ' cannot be serialized as JSON. Please only return JSON serializable data types.' + ) + } + + return isSerializable(input, '') +} + +export class SerializableError extends Error { + constructor(page: string, method: string, path: string, message: string) { + super( + path + ? `Error serializing \`${path}\` returned from \`${method}\` in "${page}".\nReason: ${message}` + : `Error serializing props returned from \`${method}\` in "${page}".\nReason: ${message}` + ) + } +} diff --git a/packages/next/next-server/server/next-server.ts b/packages/next/next-server/server/next-server.ts index d5869ef61b9023f..294c6abf3eaa028 100644 --- a/packages/next/next-server/server/next-server.ts +++ b/packages/next/next-server/server/next-server.ts @@ -925,7 +925,7 @@ export default class Server { const renderResult = await (components.Component as any).renderReqToHTML( req, res, - true + 'passthrough' ) sendPayload( @@ -1028,7 +1028,7 @@ export default class Server { renderResult = await (components.Component as any).renderReqToHTML( req, res, - true + 'passthrough' ) html = renderResult.html diff --git a/packages/next/next-server/server/render.tsx b/packages/next/next-server/server/render.tsx index 65a6d7e51213dff..f36786bfcf78586 100644 --- a/packages/next/next-server/server/render.tsx +++ b/packages/next/next-server/server/render.tsx @@ -8,6 +8,7 @@ import { SERVER_PROPS_SSG_CONFLICT, SSG_GET_INITIAL_PROPS_CONFLICT, } from '../../lib/constants' +import { isSerializableProps } from '../../lib/is-serializable-props' import { isInAmpMode } from '../lib/amp' import { AmpStateContext } from '../lib/amp-context' import { @@ -329,6 +330,7 @@ export async function renderToHTML( delete query.__nextFallback const isSSG = !!getStaticProps + const isBuildTimeSSG = isSSG && renderOpts.nextExport const defaultAppGetInitialProps = App.getInitialProps === (App as any).origGetInitialProps @@ -508,6 +510,16 @@ export async function renderToHTML( throw new Error(invalidKeysMsg('getStaticProps', invalidKeys)) } + if ( + (dev || isBuildTimeSSG) && + !isSerializableProps(pathname, 'getStaticProps', data.props) + ) { + // this fn should throw an error instead of ever returning `false` + throw new Error( + 'invariant: getStaticProps did not return valid props. Please report this.' + ) + } + if (typeof data.revalidate === 'number') { if (!Number.isInteger(data.revalidate)) { throw new Error( @@ -567,6 +579,16 @@ export async function renderToHTML( throw new Error(invalidKeysMsg('getServerSideProps', invalidKeys)) } + if ( + (dev || isBuildTimeSSG) && + !isSerializableProps(pathname, 'getServerSideProps', data.props) + ) { + // this fn should throw an error instead of ever returning `false` + throw new Error( + 'invariant: getServerSideProps did not return valid props. Please report this.' + ) + } + props.pageProps = data.props ;(renderOpts as any).pageData = props } diff --git a/test/integration/getserversideprops-preview/pages/index.js b/test/integration/getserversideprops-preview/pages/index.js index 848b6a14138e384..bc556a1e7dc1632 100644 --- a/test/integration/getserversideprops-preview/pages/index.js +++ b/test/integration/getserversideprops-preview/pages/index.js @@ -1,5 +1,11 @@ export function getServerSideProps({ preview, previewData }) { - return { props: { hasProps: true, preview, previewData } } + return { + props: { + hasProps: true, + preview: !!preview, + previewData: previewData || null, + }, + } } export default function({ hasProps, preview, previewData }) { diff --git a/test/integration/getserversideprops-preview/test/index.test.js b/test/integration/getserversideprops-preview/test/index.test.js index d210e6611ed7ea9..289160dfa3df223 100644 --- a/test/integration/getserversideprops-preview/test/index.test.js +++ b/test/integration/getserversideprops-preview/test/index.test.js @@ -53,14 +53,14 @@ function runTests(startServer = nextStart) { const html = await renderViaHTTP(appPort, '/') const { nextData, pre } = getData(html) expect(nextData).toMatchObject({ isFallback: false }) - expect(pre).toBe('undefined and undefined') + expect(pre).toBe('false and null') }) it('should return page on second request', async () => { const html = await renderViaHTTP(appPort, '/') const { nextData, pre } = getData(html) expect(nextData).toMatchObject({ isFallback: false }) - expect(pre).toBe('undefined and undefined') + expect(pre).toBe('false and null') }) let previewCookieString @@ -198,9 +198,7 @@ function runTests(startServer = nextStart) { await browser.get(`http://localhost:${appPort}/`) await browser.waitForElementByCss('#props-pre') - expect(await browser.elementById('props-pre').text()).toBe( - 'undefined and undefined' - ) + expect(await browser.elementById('props-pre').text()).toBe('false and null') }) afterAll(async () => { @@ -219,7 +217,7 @@ const startServerlessEmulator = async (dir, port) => { return initNextServerScript(scriptPath, /ready on/i, env) } -describe('Prerender Preview Mode', () => { +describe('ServerSide Props Preview Mode', () => { describe('Development Mode', () => { beforeAll(async () => { await fs.remove(nextConfigPath) diff --git a/test/integration/getserversideprops/pages/index.js b/test/integration/getserversideprops/pages/index.js index 80ce2375b131c27..7db7e529a58bfbf 100644 --- a/test/integration/getserversideprops/pages/index.js +++ b/test/integration/getserversideprops/pages/index.js @@ -14,6 +14,10 @@ const Page = ({ world, time }) => { <>

hello {world}

time: {time} + + to non-json + +
to another diff --git a/test/integration/getserversideprops/pages/non-json.js b/test/integration/getserversideprops/pages/non-json.js new file mode 100644 index 000000000000000..dc418a32cf22b34 --- /dev/null +++ b/test/integration/getserversideprops/pages/non-json.js @@ -0,0 +1,11 @@ +export async function getServerSideProps() { + return { + props: { time: new Date() }, + } +} + +const Page = ({ time }) => { + return

hello {time.toString()}

+} + +export default Page diff --git a/test/integration/getserversideprops/test/index.test.js b/test/integration/getserversideprops/test/index.test.js index 613e58760a1c45f..1f3e58cd4c10144 100644 --- a/test/integration/getserversideprops/test/index.test.js +++ b/test/integration/getserversideprops/test/index.test.js @@ -1,21 +1,23 @@ /* eslint-env jest */ /* global jasmine */ -import fs from 'fs-extra' -import { join } from 'path' -import webdriver from 'next-webdriver' import cheerio from 'cheerio' import escapeRegex from 'escape-string-regexp' +import fs from 'fs-extra' import { - renderViaHTTP, + check, fetchViaHTTP, findPort, - launchApp, + getBrowserBodyText, killApp, - waitFor, + launchApp, nextBuild, nextStart, normalizeRegEx, + renderViaHTTP, + waitFor, } from 'next-test-utils' +import webdriver from 'next-webdriver' +import { join } from 'path' jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 2 const appDir = join(__dirname, '..') @@ -76,6 +78,12 @@ const expectedManifestRoutes = () => [ ), page: '/invalid-keys', }, + { + dataRouteRegex: normalizeRegEx( + `^\\/_next\\/data\\/${escapeRegex(buildId)}\\/non-json.json$` + ), + page: '/non-json', + }, { dataRouteRegex: normalizeRegEx( `^\\/_next\\/data\\/${escapeRegex(buildId)}\\/something.json$` @@ -369,6 +377,23 @@ const runTests = (dev = false) => { `Keys that need to be moved: world, query, params, time, random` ) }) + + it('should show error for invalid JSON returned from getServerSideProps', async () => { + const html = await renderViaHTTP(appPort, '/non-json') + expect(html).toContain( + 'Error serializing `.time` returned from `getServerSideProps`' + ) + }) + + it('should show error for invalid JSON returned from getStaticProps on CST', async () => { + const browser = await webdriver(appPort, '/') + await browser.elementByCss('#non-json').click() + + await check( + () => getBrowserBodyText(browser), + /Error serializing `.time` returned from `getServerSideProps`/ + ) + }) } else { it('should not fetch data on mount', async () => { const browser = await webdriver(appPort, '/blog/post-100') @@ -396,6 +421,18 @@ const runTests = (dev = false) => { ) expect(res.headers.get('cache-control')).toContain('no-cache') }) + + it('should not show error for invalid JSON returned from getServerSideProps', async () => { + const html = await renderViaHTTP(appPort, '/non-json') + expect(html).not.toContain('Error serializing') + expect(html).toContain('hello ') + }) + + it('should not show error for invalid JSON returned from getStaticProps on CST', async () => { + const browser = await webdriver(appPort, '/') + await browser.elementByCss('#non-json').click() + await check(() => getBrowserBodyText(browser), /hello /) + }) } } diff --git a/test/integration/prerender-preview/pages/index.js b/test/integration/prerender-preview/pages/index.js index 8fa4d03b6b519a8..26d417d3b2b5b96 100644 --- a/test/integration/prerender-preview/pages/index.js +++ b/test/integration/prerender-preview/pages/index.js @@ -1,5 +1,11 @@ export function getStaticProps({ preview, previewData }) { - return { props: { hasProps: true, preview, previewData } } + return { + props: { + hasProps: true, + preview: !!preview, + previewData: previewData || null, + }, + } } export default function({ hasProps, preview, previewData }) { diff --git a/test/integration/prerender-preview/test/index.test.js b/test/integration/prerender-preview/test/index.test.js index 9c40640c7921222..a8abd24ccfc71b3 100644 --- a/test/integration/prerender-preview/test/index.test.js +++ b/test/integration/prerender-preview/test/index.test.js @@ -53,14 +53,14 @@ function runTests(startServer = nextStart) { const html = await renderViaHTTP(appPort, '/') const { nextData, pre } = getData(html) expect(nextData).toMatchObject({ isFallback: false }) - expect(pre).toBe('undefined and undefined') + expect(pre).toBe('false and null') }) it('should return prerendered page on second request', async () => { const html = await renderViaHTTP(appPort, '/') const { nextData, pre } = getData(html) expect(nextData).toMatchObject({ isFallback: false }) - expect(pre).toBe('undefined and undefined') + expect(pre).toBe('false and null') }) it('should throw error when setting too large of preview data', async () => { @@ -198,9 +198,7 @@ function runTests(startServer = nextStart) { await browser.get(`http://localhost:${appPort}/`) await browser.waitForElementByCss('#props-pre') - expect(await browser.elementById('props-pre').text()).toBe( - 'undefined and undefined' - ) + expect(await browser.elementById('props-pre').text()).toBe('false and null') }) afterAll(async () => { diff --git a/test/integration/prerender/pages/index.js b/test/integration/prerender/pages/index.js index b1e2a18e4dab11d..59b333fddfe53d4 100644 --- a/test/integration/prerender/pages/index.js +++ b/test/integration/prerender/pages/index.js @@ -15,6 +15,10 @@ const Page = ({ world, time }) => { {/*
idk
*/}

hello {world}

time: {time} + + to non-json + +
to another diff --git a/test/integration/prerender/pages/non-json/[p].js b/test/integration/prerender/pages/non-json/[p].js new file mode 100644 index 000000000000000..e4f27b95f65c9bc --- /dev/null +++ b/test/integration/prerender/pages/non-json/[p].js @@ -0,0 +1,21 @@ +import { useRouter } from 'next/router' + +export async function getStaticProps() { + return { + props: { time: new Date() }, + } +} + +export async function getStaticPaths() { + return { paths: [], fallback: true } +} + +const Page = ({ time }) => { + const { isFallback } = useRouter() + + if (isFallback) return null + + return

hello {time.toString()}

+} + +export default Page diff --git a/test/integration/prerender/test/index.test.js b/test/integration/prerender/test/index.test.js index dc9a62a4521556f..13cff47a1ffc1c6 100644 --- a/test/integration/prerender/test/index.test.js +++ b/test/integration/prerender/test/index.test.js @@ -6,7 +6,9 @@ import fs from 'fs-extra' import { check, fetchViaHTTP, + File, findPort, + getBrowserBodyText, getReactErrorOverlayContent, initNextServerScript, killApp, @@ -682,6 +684,40 @@ const runTests = (dev = false, looseMode = false) => { const curRandom = await browser.elementByCss('#random').text() expect(curRandom).toBe(initialRandom + '') }) + + it('should show fallback before invalid JSON is returned from getStaticProps', async () => { + const html = await renderViaHTTP(appPort, '/non-json/foobar') + expect(html).toContain('"isFallback":true') + }) + + it('should show error for invalid JSON returned from getStaticProps on SSR', async () => { + const browser = await webdriver(appPort, '/non-json/direct') + + // FIXME: enable this + // expect(await getReactErrorOverlayContent(browser)).toMatch( + // /Error serializing `.time` returned from `getStaticProps`/ + // ) + + // FIXME: disable this + expect(await getReactErrorOverlayContent(browser)).toMatch( + /Failed to load static props/ + ) + }) + + it('should show error for invalid JSON returned from getStaticProps on CST', async () => { + const browser = await webdriver(appPort, '/') + await browser.elementByCss('#non-json').click() + + // FIXME: enable this + // expect(await getReactErrorOverlayContent(browser)).toMatch( + // /Error serializing `.time` returned from `getStaticProps`/ + // ) + + // FIXME: disable this + expect(await getReactErrorOverlayContent(browser)).toMatch( + /Failed to load static props/ + ) + }) } else { if (!looseMode) { it('should should use correct caching headers for a no-revalidate page', async () => { @@ -692,6 +728,18 @@ const runTests = (dev = false, looseMode = false) => { const initialHtml = await initialRes.text() expect(initialHtml).toMatch(/hello.*?world/) }) + + it('should not show error for invalid JSON returned from getStaticProps on SSR', async () => { + const browser = await webdriver(appPort, '/non-json/direct') + + await check(() => getBrowserBodyText(browser), /hello /) + }) + + it('should show error for invalid JSON returned from getStaticProps on CST', async () => { + const browser = await webdriver(appPort, '/') + await browser.elementByCss('#non-json').click() + await check(() => getBrowserBodyText(browser), /hello /) + }) } it('outputs dataRoutes in routes-manifest correctly', async () => { @@ -762,6 +810,14 @@ const runTests = (dev = false, looseMode = false) => { ), page: '/default-revalidate', }, + { + dataRouteRegex: normalizeRegEx( + `^\\/_next\\/data\\/${escapeRegex( + buildId + )}\\/non\\-json\\/([^\\/]+?)\\.json$` + ), + page: '/non-json/[p]', + }, { dataRouteRegex: normalizeRegEx( `^\\/_next\\/data\\/${escapeRegex(buildId)}\\/something.json$` @@ -817,6 +873,14 @@ const runTests = (dev = false, looseMode = false) => { '^\\/blog\\/([^\\/]+?)\\/([^\\/]+?)(?:\\/)?$' ), }, + '/non-json/[p]': { + dataRoute: `/_next/data/${buildId}/non-json/[p].json`, + dataRouteRegex: normalizeRegEx( + `^\\/_next\\/data\\/${escapedBuildId}\\/non\\-json\\/([^\\/]+?)\\.json$` + ), + fallback: '/non-json/[p].html', + routeRegex: normalizeRegEx('^\\/non\\-json\\/([^\\/]+?)(?:\\/)?$'), + }, '/user/[user]/profile': { fallback: '/user/[user]/profile.html', dataRoute: `/_next/data/${buildId}/user/[user]/profile.json`, @@ -1083,6 +1147,23 @@ describe('SSG Prerender', () => { 'You can not use getInitialProps with getStaticProps' ) }) + + it('should show serialization error during build', async () => { + await fs.remove(join(appDir, '.next')) + + const nonJsonPage = join(appDir, 'pages/non-json/[p].js') + const f = new File(nonJsonPage) + try { + f.replace('paths: []', `paths: [{ params: { p: 'testing' } }]`) + + const { stderr } = await nextBuild(appDir, [], { stderr: true }) + expect(stderr).toContain( + 'Error serializing `.time` returned from `getStaticProps` in "/non-json/[p]".' + ) + } finally { + f.restore() + } + }) }) describe('enumlated serverless mode', () => { diff --git a/test/unit/is-serializable-props.test.js b/test/unit/is-serializable-props.test.js new file mode 100644 index 000000000000000..55c1a325126cf17 --- /dev/null +++ b/test/unit/is-serializable-props.test.js @@ -0,0 +1,190 @@ +/* eslint-env jest */ +import { isSerializableProps } from 'next/dist/lib/is-serializable-props' + +describe('isSerializableProps', () => { + it('handles null and undefined props', () => { + expect(() => isSerializableProps('/', 'test', null)) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing props returned from \`test\` in \\"/\\". +Reason: Props must be returned as a plain object from test: \`{ props: { ... } }\`." +`) + + expect(() => isSerializableProps('/', 'test', undefined)) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing props returned from \`test\` in \\"/\\". +Reason: Props must be returned as a plain object from test: \`{ props: { ... } }\`." +`) + }) + + it('allows empty props', () => { + expect(isSerializableProps('/', 'test', {})).toBe(true) + }) + + it('allows all different types of props', () => { + expect( + isSerializableProps('/', 'test', { + str: 'foobar', + bool: true, + bool2: false, + num: 0, + numn1: -1, + num5: 5, + noop: null, + arr: [ + 'f', + true, + false, + -5, + -1, + 0, + 1, + 5, + null, + {}, + { + str: 'foobar', + bool: true, + bool2: false, + num: 0, + numn1: -1, + num5: 5, + noop: null, + }, + ], + obj1: { + str: 'foobar', + bool: true, + bool2: false, + num: 0, + numn1: -1, + num5: 5, + noop: null, + arr: [ + 'f', + true, + false, + -5, + -1, + 0, + 1, + 5, + null, + {}, + { + str: 'foobar', + bool: true, + bool2: false, + num: 0, + numn1: -1, + num5: 5, + noop: null, + }, + ], + }, + }) + ).toBe(true) + }) + + it('disallows top-level non-serializable types', () => { + expect(() => isSerializableProps('/', 'test', { toplevel: new Date() })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.toplevel\` returned from \`test\` in \\"/\\". +Reason: \`object\` (\\"[object Date]\\") cannot be serialized as JSON. Please only return JSON serializable data types." +`) + + expect(() => isSerializableProps('/', 'test', { toplevel: class A {} })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.toplevel\` returned from \`test\` in \\"/\\". +Reason: \`function\` cannot be serialized as JSON. Please only return JSON serializable data types." +`) + + expect(() => isSerializableProps('/', 'test', { toplevel: undefined })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.toplevel\` returned from \`test\` in \\"/\\". +Reason: \`undefined\` cannot be serialized as JSON. Please use \`null\` or omit this value all together." +`) + + expect(() => + isSerializableProps('/', 'test', { toplevel: Symbol('FOOBAR') }) + ).toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.toplevel\` returned from \`test\` in \\"/\\". +Reason: \`symbol\` cannot be serialized as JSON. Please only return JSON serializable data types." +`) + + expect(() => isSerializableProps('/', 'test', { toplevel: function() {} })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.toplevel\` returned from \`test\` in \\"/\\". +Reason: \`function\` cannot be serialized as JSON. Please only return JSON serializable data types." +`) + }) + + it('diallows nested non-serializable types', () => { + expect(() => + isSerializableProps('/', 'test', { k: { a: [1, { n: new Date() }] } }) + ).toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.k.a[1].n\` returned from \`test\` in \\"/\\". +Reason: \`object\` (\\"[object Date]\\") cannot be serialized as JSON. Please only return JSON serializable data types." +`) + + expect(() => + isSerializableProps('/', 'test', { k: { a: [1, { n: class A {} }] } }) + ).toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.k.a[1].n\` returned from \`test\` in \\"/\\". +Reason: \`function\` cannot be serialized as JSON. Please only return JSON serializable data types." +`) + + expect(() => isSerializableProps('/', 'test', { k: { a: [1, undefined] } })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.k.a[1]\` returned from \`test\` in \\"/\\". +Reason: \`undefined\` cannot be serialized as JSON. Please use \`null\` or omit this value all together." +`) + + expect(() => + isSerializableProps('/', 'test', { k: { n: Symbol('FOOBAR') } }) + ).toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.k.n\` returned from \`test\` in \\"/\\". +Reason: \`symbol\` cannot be serialized as JSON. Please only return JSON serializable data types." +`) + + expect(() => + isSerializableProps('/', 'test', { k: { a: [function() {}] } }) + ).toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.k.a[0]\` returned from \`test\` in \\"/\\". +Reason: \`function\` cannot be serialized as JSON. Please only return JSON serializable data types." +`) + }) + + it('can handle obj circular refs', () => { + const obj = { foo: 'bar', test: true } + obj.child = obj + + expect(() => isSerializableProps('/', 'test', obj)) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.child\` returned from \`test\` in \\"/\\". +Reason: Circular references cannot be expressed in JSON." +`) + + expect(() => isSerializableProps('/', 'test', { k: [obj] })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.k[0].child\` returned from \`test\` in \\"/\\". +Reason: Circular references cannot be expressed in JSON." +`) + }) + + it('can handle arr circular refs', () => { + const arr = [{ foo: 'bar' }, true] + arr.push(arr) + + expect(() => isSerializableProps('/', 'test', { arr })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.arr[2]\` returned from \`test\` in \\"/\\". +Reason: Circular references cannot be expressed in JSON." +`) + + expect(() => isSerializableProps('/', 'test', { k: [{ arr }] })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.k[0].arr[2]\` returned from \`test\` in \\"/\\". +Reason: Circular references cannot be expressed in JSON." +`) + }) +}) From 713340600d17daf02840104315c89cd89ecc939e Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Mon, 9 Mar 2020 13:31:12 -0400 Subject: [PATCH 03/47] v9.2.3-canary.29 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-google-analytics/package.json | 2 +- packages/next-plugin-material-ui/package.json | 2 +- packages/next-plugin-sentry/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next/package.json | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index 4c767fbbff9ec56..946238ca8a26b6a 100644 --- a/lerna.json +++ b/lerna.json @@ -12,5 +12,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "9.2.3-canary.28" + "version": "9.2.3-canary.29" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index de37f8403d95ba5..0b338e69a9db160 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "9.2.3-canary.28", + "version": "9.2.3-canary.29", "keywords": [ "react", "next", diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index eab9e5543ab20a2..f4c98a8569bcd0b 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "9.2.3-canary.28", + "version": "9.2.3-canary.29", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 8d38268afbad40a..0ebf6fc9c7e9e33 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "9.2.3-canary.28", + "version": "9.2.3-canary.29", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-google-analytics/package.json b/packages/next-plugin-google-analytics/package.json index 3171592310e4021..b4ece5924f6c85d 100644 --- a/packages/next-plugin-google-analytics/package.json +++ b/packages/next-plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-google-analytics", - "version": "9.2.3-canary.28", + "version": "9.2.3-canary.29", "nextjs": { "name": "Google Analytics", "required-env": [ diff --git a/packages/next-plugin-material-ui/package.json b/packages/next-plugin-material-ui/package.json index b9af7c59eebf827..3bff151bc2566b1 100644 --- a/packages/next-plugin-material-ui/package.json +++ b/packages/next-plugin-material-ui/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-material-ui", - "version": "9.2.3-canary.28", + "version": "9.2.3-canary.29", "nextjs": { "name": "Material UI", "required-env": [] diff --git a/packages/next-plugin-sentry/package.json b/packages/next-plugin-sentry/package.json index ae5ca8c624693cc..bce8a34ee95b99c 100644 --- a/packages/next-plugin-sentry/package.json +++ b/packages/next-plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-sentry", - "version": "9.2.3-canary.28", + "version": "9.2.3-canary.29", "nextjs": { "name": "Sentry", "required-env": [ diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 21e9cdee9a11c4f..9390546c3aac740 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "9.2.3-canary.28", + "version": "9.2.3-canary.29", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next/package.json b/packages/next/package.json index 5e25a032050c8fb..c33fd7f77a36583 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "9.2.3-canary.28", + "version": "9.2.3-canary.29", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -73,7 +73,7 @@ "@babel/preset-typescript": "7.7.2", "@babel/runtime": "7.7.2", "@babel/types": "7.7.4", - "@next/polyfill-nomodule": "9.2.3-canary.28", + "@next/polyfill-nomodule": "9.2.3-canary.29", "amphtml-validator": "1.0.30", "async-retry": "1.2.3", "async-sema": "3.0.0", From befb5006f4528977c80a7f0862a3021153a61b73 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Mon, 9 Mar 2020 19:08:52 +0100 Subject: [PATCH 04/47] v9.3.0 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-google-analytics/package.json | 2 +- packages/next-plugin-material-ui/package.json | 2 +- packages/next-plugin-sentry/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next/package.json | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index 946238ca8a26b6a..c63c1fa80355c05 100644 --- a/lerna.json +++ b/lerna.json @@ -12,5 +12,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "9.2.3-canary.29" + "version": "9.3.0" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index 0b338e69a9db160..bb91046a57e5408 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "9.2.3-canary.29", + "version": "9.3.0", "keywords": [ "react", "next", diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index f4c98a8569bcd0b..29e57402df1ec51 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "9.2.3-canary.29", + "version": "9.3.0", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 0ebf6fc9c7e9e33..876e49ac143b747 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "9.2.3-canary.29", + "version": "9.3.0", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-google-analytics/package.json b/packages/next-plugin-google-analytics/package.json index b4ece5924f6c85d..76dbd50daf9e944 100644 --- a/packages/next-plugin-google-analytics/package.json +++ b/packages/next-plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-google-analytics", - "version": "9.2.3-canary.29", + "version": "9.3.0", "nextjs": { "name": "Google Analytics", "required-env": [ diff --git a/packages/next-plugin-material-ui/package.json b/packages/next-plugin-material-ui/package.json index 3bff151bc2566b1..761e0308cdf9dee 100644 --- a/packages/next-plugin-material-ui/package.json +++ b/packages/next-plugin-material-ui/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-material-ui", - "version": "9.2.3-canary.29", + "version": "9.3.0", "nextjs": { "name": "Material UI", "required-env": [] diff --git a/packages/next-plugin-sentry/package.json b/packages/next-plugin-sentry/package.json index bce8a34ee95b99c..db807335c2062fe 100644 --- a/packages/next-plugin-sentry/package.json +++ b/packages/next-plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-sentry", - "version": "9.2.3-canary.29", + "version": "9.3.0", "nextjs": { "name": "Sentry", "required-env": [ diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 9390546c3aac740..9e3c7dc0ae692b0 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "9.2.3-canary.29", + "version": "9.3.0", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next/package.json b/packages/next/package.json index c33fd7f77a36583..876fda821b55b66 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "9.2.3-canary.29", + "version": "9.3.0", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -73,7 +73,7 @@ "@babel/preset-typescript": "7.7.2", "@babel/runtime": "7.7.2", "@babel/types": "7.7.4", - "@next/polyfill-nomodule": "9.2.3-canary.29", + "@next/polyfill-nomodule": "9.3.0", "amphtml-validator": "1.0.30", "async-retry": "1.2.3", "async-sema": "3.0.0", From 1e53a4961adcde3d7aa637f237bf8997c567df5f Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Mon, 9 Mar 2020 14:58:51 -0400 Subject: [PATCH 05/47] Correctly Count Object References (#10903) * Correctly Count Object References * Make error message better * add more tests --- packages/next/lib/is-serializable-props.ts | 29 ++++--- test/unit/is-serializable-props.test.js | 96 +++++++++++++++++++++- yarn.lock | 27 +----- 3 files changed, 112 insertions(+), 40 deletions(-) diff --git a/packages/next/lib/is-serializable-props.ts b/packages/next/lib/is-serializable-props.ts index 6053b064be6d8ce..0a45620bcbff50b 100644 --- a/packages/next/lib/is-serializable-props.ts +++ b/packages/next/lib/is-serializable-props.ts @@ -23,22 +23,26 @@ export function isSerializableProps( ) } - const visited = new WeakSet() - - function visit(value: any, path: string) { + function visit(visited: Map, value: any, path: string) { if (visited.has(value)) { throw new SerializableError( page, method, path, - 'Circular references cannot be expressed in JSON.' + `Circular references cannot be expressed in JSON (references: \`${visited.get( + value + ) || '(self)'}\`).` ) } - visited.add(value) + visited.set(value, path) } - function isSerializable(value: any, path: string): true { + function isSerializable( + refs: Map, + value: any, + path: string + ): true { const type = typeof value if ( // `null` can be serialized, but not `undefined`. @@ -65,7 +69,7 @@ export function isSerializableProps( } if (isPlainObject(value)) { - visit(value, path) + visit(refs, value, path) if ( Object.entries(value).every(([key, value]) => { @@ -73,8 +77,10 @@ export function isSerializableProps( ? `${path}.${key}` : `${path}[${JSON.stringify(key)}]` + const newRefs = new Map(refs) return ( - isSerializable(key, nextPath) && isSerializable(value, nextPath) + isSerializable(newRefs, key, nextPath) && + isSerializable(newRefs, value, nextPath) ) }) ) { @@ -90,11 +96,12 @@ export function isSerializableProps( } if (Array.isArray(value)) { - visit(value, path) + visit(refs, value, path) + const newRefs = new Map(refs) if ( value.every((value, index) => - isSerializable(value, `${path}[${index}]`) + isSerializable(newRefs, value, `${path}[${index}]`) ) ) { return true @@ -124,7 +131,7 @@ export function isSerializableProps( ) } - return isSerializable(input, '') + return isSerializable(new Map(), input, '') } export class SerializableError extends Error { diff --git a/test/unit/is-serializable-props.test.js b/test/unit/is-serializable-props.test.js index 55c1a325126cf17..451090000b52ea9 100644 --- a/test/unit/is-serializable-props.test.js +++ b/test/unit/is-serializable-props.test.js @@ -161,13 +161,13 @@ Reason: \`function\` cannot be serialized as JSON. Please only return JSON seria expect(() => isSerializableProps('/', 'test', obj)) .toThrowErrorMatchingInlineSnapshot(` "Error serializing \`.child\` returned from \`test\` in \\"/\\". -Reason: Circular references cannot be expressed in JSON." +Reason: Circular references cannot be expressed in JSON (references: \`(self)\`)." `) expect(() => isSerializableProps('/', 'test', { k: [obj] })) .toThrowErrorMatchingInlineSnapshot(` "Error serializing \`.k[0].child\` returned from \`test\` in \\"/\\". -Reason: Circular references cannot be expressed in JSON." +Reason: Circular references cannot be expressed in JSON (references: \`.k[0]\`)." `) }) @@ -178,13 +178,101 @@ Reason: Circular references cannot be expressed in JSON." expect(() => isSerializableProps('/', 'test', { arr })) .toThrowErrorMatchingInlineSnapshot(` "Error serializing \`.arr[2]\` returned from \`test\` in \\"/\\". -Reason: Circular references cannot be expressed in JSON." +Reason: Circular references cannot be expressed in JSON (references: \`.arr\`)." `) expect(() => isSerializableProps('/', 'test', { k: [{ arr }] })) .toThrowErrorMatchingInlineSnapshot(` "Error serializing \`.k[0].arr[2]\` returned from \`test\` in \\"/\\". -Reason: Circular references cannot be expressed in JSON." +Reason: Circular references cannot be expressed in JSON (references: \`.k[0].arr\`)." `) }) + + it('can handle deep obj circular refs', () => { + const obj = { foo: 'bar', test: true, leve1: { level2: {} } } + obj.leve1.level2.child = obj + + expect(() => isSerializableProps('/', 'test', obj)) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.leve1.level2.child\` returned from \`test\` in \\"/\\". +Reason: Circular references cannot be expressed in JSON (references: \`(self)\`)." +`) + }) + + it('can handle deep obj circular refs (with arrays)', () => { + const obj = { foo: 'bar', test: true, leve1: { level2: {} } } + obj.leve1.level2.child = [{ another: [obj] }] + + expect(() => isSerializableProps('/', 'test', obj)) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.leve1.level2.child[0].another[0]\` returned from \`test\` in \\"/\\". +Reason: Circular references cannot be expressed in JSON (references: \`(self)\`)." +`) + }) + + it('can handle deep arr circular refs', () => { + const arr = [1, 2, []] + arr[3] = [false, [null, 0, arr]] + + expect(() => isSerializableProps('/', 'test', { k: arr })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.k[3][1][2]\` returned from \`test\` in \\"/\\". +Reason: Circular references cannot be expressed in JSON (references: \`.k\`)." +`) + }) + + it('can handle deep arr circular refs (with objects)', () => { + const arr = [1, 2, []] + arr[3] = [false, { nested: [null, 0, arr] }] + + expect(() => isSerializableProps('/', 'test', { k: arr })) + .toThrowErrorMatchingInlineSnapshot(` +"Error serializing \`.k[3][1].nested[2]\` returned from \`test\` in \\"/\\". +Reason: Circular references cannot be expressed in JSON (references: \`.k\`)." +`) + }) + + it('allows multi object refs', () => { + const obj = { foo: 'bar', test: true } + expect( + isSerializableProps('/', 'test', { + obj1: obj, + obj2: obj, + }) + ).toBe(true) + }) + + it('allows multi object refs nested', () => { + const obj = { foo: 'bar', test: true } + expect( + isSerializableProps('/', 'test', { + obj1: obj, + obj2: obj, + anArray: [obj], + aKey: { obj }, + }) + ).toBe(true) + }) + + it('allows multi array refs', () => { + const arr = [{ foo: 'bar' }, true] + expect( + isSerializableProps('/', 'test', { + arr1: arr, + arr2: arr, + }) + ).toBe(true) + }) + + it('allows multi array refs nested', () => { + const arr = [{ foo: 'bar' }, true] + expect( + isSerializableProps('/', 'test', { + arr1: arr, + arr2: arr, + arr3: [arr], + arr4: [1, [2, 3, arr]], + }) + ).toBe(true) + }) }) diff --git a/yarn.lock b/yarn.lock index af1559a64f740a0..123d36c5498cc91 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4145,7 +4145,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.8.3, browserslist@^4.0.0, browserslist@^4.3.6, browserslist@^4.6.0, browserslist@^4.6.4, browserslist@^4.8.0, browserslist@^4.8.2, browserslist@^4.8.3: +browserslist@4.8.3, browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6, browserslist@^4.0.0, browserslist@^4.3.6, browserslist@^4.6.0, browserslist@^4.6.4, browserslist@^4.8.0, browserslist@^4.8.2, browserslist@^4.8.3: version "4.8.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.3.tgz#65802fcd77177c878e015f0e3189f2c4f627ba44" integrity sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg== @@ -4154,14 +4154,6 @@ browserslist@4.8.3, browserslist@^4.0.0, browserslist@^4.3.6, browserslist@^4.6. electron-to-chromium "^1.3.322" node-releases "^1.1.44" -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - browserstack-local@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.4.0.tgz#d979cac056f57b9af159b3bcd7fdc09b4354537c" @@ -4465,21 +4457,11 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634: resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001023.tgz#f856f71af16a5a44e81f1fcefc1673912a43da72" integrity sha512-EnlshvE6oAum+wWwKmJNVaoqJMjIc0bLUy4Dj77VVnz1o6bzSPr1Ze9iPy6g5ycg1xD6jGU6vBmo7pLEz2MbCQ== -caniuse-db@^1.0.30000639: - version "1.0.30001033" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001033.tgz#383288df833c85d83c2bfc3469245ec1fa1f881e" - integrity sha512-2ZReq+OHqHhsIQSiv8OVNhQ6Ht9eYJpwblZydHV8nI44Od6J5YUl3J9Wxvjry/v969jCHH5fR9+C6FwJ41XbOQ== - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001017, caniuse-lite@^1.0.30001019: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001017, caniuse-lite@^1.0.30001019, caniuse-lite@^1.0.30001020: version "1.0.30001019" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001019.tgz#857e3fccaad2b2feb3f1f6d8a8f62d747ea648e1" integrity sha512-6ljkLtF1KM5fQ+5ZN0wuyVvvebJxgJPTmScOMaFuQN2QuOzvRJnWSKfzQskQU5IOU4Gap3zasYPIinzwUjoj/g== -caniuse-lite@^1.0.30001020: - version "1.0.30001033" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001033.tgz#60c328fb56860de60f9a2cb419c31fb80587cba0" - integrity sha512-8Ibzxee6ibc5q88cM1usPsMpJOG5CTq0s/dKOmlekPbDGKt+UrnOOTPSjQz3kVo6yL7N4SB5xd+FGLHQmbzh6A== - capitalize@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/capitalize/-/capitalize-1.0.0.tgz#dc802c580aee101929020d2ca14b4ca8a0ae44be" @@ -6271,11 +6253,6 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.2.7: - version "1.3.372" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.372.tgz#fb61b6dfe06f3278a384d084ebef75d463ec7580" - integrity sha512-77a4jYC52OdisHM+Tne7dgWEvQT1FoNu/jYl279pP88ZtG4ZRIPyhQwAKxj6C2rzsyC1OwsOds9JlZtNncSz6g== - electron-to-chromium@^1.3.322: version "1.3.327" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.327.tgz#516f28b4271727004362b4ac814494ae64d9dde7" From a4ab0887465d43ad3081e142924145a495b5727f Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Mon, 9 Mar 2020 14:59:13 -0400 Subject: [PATCH 06/47] v9.3.1-canary.0 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-google-analytics/package.json | 2 +- packages/next-plugin-material-ui/package.json | 2 +- packages/next-plugin-sentry/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next/package.json | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index c63c1fa80355c05..54c4f7b109faac9 100644 --- a/lerna.json +++ b/lerna.json @@ -12,5 +12,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "9.3.0" + "version": "9.3.1-canary.0" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index bb91046a57e5408..7430ea5c57cae05 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "9.3.0", + "version": "9.3.1-canary.0", "keywords": [ "react", "next", diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 29e57402df1ec51..43f74a8466ecc4c 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "9.3.0", + "version": "9.3.1-canary.0", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 876e49ac143b747..e83bc892949d87f 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "9.3.0", + "version": "9.3.1-canary.0", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-google-analytics/package.json b/packages/next-plugin-google-analytics/package.json index 76dbd50daf9e944..62d206df724b509 100644 --- a/packages/next-plugin-google-analytics/package.json +++ b/packages/next-plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-google-analytics", - "version": "9.3.0", + "version": "9.3.1-canary.0", "nextjs": { "name": "Google Analytics", "required-env": [ diff --git a/packages/next-plugin-material-ui/package.json b/packages/next-plugin-material-ui/package.json index 761e0308cdf9dee..1acba359795790e 100644 --- a/packages/next-plugin-material-ui/package.json +++ b/packages/next-plugin-material-ui/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-material-ui", - "version": "9.3.0", + "version": "9.3.1-canary.0", "nextjs": { "name": "Material UI", "required-env": [] diff --git a/packages/next-plugin-sentry/package.json b/packages/next-plugin-sentry/package.json index db807335c2062fe..fe29ca4b7297952 100644 --- a/packages/next-plugin-sentry/package.json +++ b/packages/next-plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-sentry", - "version": "9.3.0", + "version": "9.3.1-canary.0", "nextjs": { "name": "Sentry", "required-env": [ diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 9e3c7dc0ae692b0..636a102cc97488c 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "9.3.0", + "version": "9.3.1-canary.0", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next/package.json b/packages/next/package.json index 876fda821b55b66..a34d741db37dd17 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "9.3.0", + "version": "9.3.1-canary.0", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -73,7 +73,7 @@ "@babel/preset-typescript": "7.7.2", "@babel/runtime": "7.7.2", "@babel/types": "7.7.4", - "@next/polyfill-nomodule": "9.3.0", + "@next/polyfill-nomodule": "9.3.1-canary.0", "amphtml-validator": "1.0.30", "async-retry": "1.2.3", "async-sema": "3.0.0", From fde1ce2924a1086e9a266bf3622241bd0b8df298 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Tue, 10 Mar 2020 13:29:40 -0500 Subject: [PATCH 07/47] Add warning when built-in CSS/SCSS support is disabled (#10942) --- errors/built-in-css-disabled.md | 18 ++++++++++++++++++ packages/next/build/webpack-config.ts | 12 ++++++++++++ .../css-customization/test/index.test.js | 6 +++++- 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 errors/built-in-css-disabled.md diff --git a/errors/built-in-css-disabled.md b/errors/built-in-css-disabled.md new file mode 100644 index 000000000000000..4f6311769a31be0 --- /dev/null +++ b/errors/built-in-css-disabled.md @@ -0,0 +1,18 @@ +# Built-in CSS Support Disabled + +#### Why This Error Occurred + +Custom CSS configuration was added in `next.config.js` which disables the built-in CSS/SCSS support to prevent conflicting configuration. + +A legacy plugin such as `@zeit/next-css` being added in `next.config.js` can cause this message. + +#### Possible Ways to Fix It + +If you would like to leverage the built-in CSS/SCSS support you can remove any custom CSS configuration or any plugins like `@zeit/next-css` or `@zeit/next-sass` in your `next.config.js`. + +If you would prefer not to leverage the built-in support you can ignore this message. + +### Useful Links + +- [Built-in CSS Support docs](https://nextjs.org/docs/basic-features/built-in-css-support) +- [Custom webpack config docs](https://nextjs.org/docs/api-reference/next.config.js/custom-webpack-config) diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index 2df362d3984810d..106cd1bf379198e 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -1,3 +1,4 @@ +import chalk from 'chalk' import crypto from 'crypto' import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin' import path from 'path' @@ -963,6 +964,17 @@ export default async function getBaseWebpackConfig( ) ?? false if (hasUserCssConfig) { + // only show warning for one build + if (isServer) { + console.warn( + chalk.yellow.bold('Warning: ') + + chalk.bold( + 'Built-in CSS support is being disabled due to custom CSS configuration being detected.\n' + ) + + 'See here for more info: https://err.sh/next.js/built-in-css-disabled\n' + ) + } + if (webpackConfig.module?.rules.length) { // Remove default CSS Loader webpackConfig.module.rules = webpackConfig.module.rules.filter( diff --git a/test/integration/css-customization/test/index.test.js b/test/integration/css-customization/test/index.test.js index b09141c5def77fe..2d5d7d51db89a14 100644 --- a/test/integration/css-customization/test/index.test.js +++ b/test/integration/css-customization/test/index.test.js @@ -83,11 +83,15 @@ describe('Legacy Next-CSS Customization', () => { }) it('should compile successfully', async () => { - const { code, stdout } = await nextBuild(appDir, [], { + const { code, stdout, stderr } = await nextBuild(appDir, [], { stdout: true, + stderr: true, }) expect(code).toBe(0) expect(stdout).toMatch(/Compiled successfully/) + expect(stderr).toMatch( + /Built-in CSS support is being disabled due to custom CSS configuration being detected/ + ) }) it(`should've compiled and prefixed`, async () => { From dffde48472efd368351d98ae7be21037aaf6403d Mon Sep 17 00:00:00 2001 From: Shu Uesugi Date: Tue, 10 Mar 2020 11:33:31 -0700 Subject: [PATCH 08/47] Add missing words in docs (#10941) * Add missing words * Update docs/basic-features/data-fetching.md Co-Authored-By: JJ Kasper Co-authored-by: JJ Kasper Co-authored-by: Joe Haddad --- docs/basic-features/data-fetching.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/basic-features/data-fetching.md b/docs/basic-features/data-fetching.md index c94a5e5f07054ff..763191de851f9df 100644 --- a/docs/basic-features/data-fetching.md +++ b/docs/basic-features/data-fetching.md @@ -366,7 +366,7 @@ export default Page ### When should I use `getServerSideProps`? -You should use `getServerSideProps` only if you need to pre-render a page whose data must be fetched at request time. Time to first byte (TTFB) will be slower than `getStaticProps` because the server must compute the result on every request, and the result cannot be cached by a CDN without extra . +You should use `getServerSideProps` only if you need to pre-render a page whose data must be fetched at request time. Time to first byte (TTFB) will be slower than `getStaticProps` because the server must compute the result on every request, and the result cannot be cached by a CDN without extra configuration. If you don’t need to pre-render the data, then you should consider fetching data on the client side. [Click here to learn more](#fetching-data-on-the-client-side). @@ -389,7 +389,7 @@ export const getServerSideProps: GetServerSideProps = async context => { `getServerSideProps` only runs on server-side and never runs on the browser. If a page uses `getServerSideProps` , then: - When you request this page directly, `getServerSideProps` runs at the request time, and this page will be pre-rendered with the returned props. -- When you request this page on client-side page transitions through `next/link` ([documentation](/docs/api-reference/next/link.md)), Next.js sends an API request to server, which runs `getServerSideProps`. It’ll return a JSON that contains the result of running `getServerSideProps`, and the JSON will be used to render the page. All this work will be handled automatically by Next.js, so you don’t need to do anything extra as long as you have `getServerSideProps` defined. +- When you request this page on client-side page transitions through `next/link` ([documentation](/docs/api-reference/next/link.md)) or `next/router` ([documentation](/docs/api-reference/next/router.md)), Next.js sends an API request to the server, which runs `getServerSideProps`. It’ll return JSON that contains the result of running `getServerSideProps`, and the JSON will be used to render the page. All this work will be handled automatically by Next.js, so you don’t need to do anything extra as long as you have `getServerSideProps` defined. #### Only allowed in a page From 6616a371e8a733f58a9e222f9e223319ef2abb00 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Tue, 10 Mar 2020 15:09:35 -0500 Subject: [PATCH 09/47] Update handling for patterns in custom routes (#10523) * Update handling for unnamed params and named patterns in custom-routes * Update query handling to match Now --- packages/next/lib/check-custom-routes.ts | 35 ++++++- .../next/next-server/server/lib/path-match.ts | 12 +-- .../next/next-server/server/next-server.ts | 3 +- packages/next/next-server/server/router.ts | 50 +++++++--- test/integration/custom-routes/next.config.js | 20 +++- .../custom-routes/test/index.test.js | 99 +++++++++++++++++-- .../invalid-custom-routes/test/index.test.js | 19 ++++ 7 files changed, 202 insertions(+), 36 deletions(-) diff --git a/packages/next/lib/check-custom-routes.ts b/packages/next/lib/check-custom-routes.ts index c3a538901323883..d51747c90335239 100644 --- a/packages/next/lib/check-custom-routes.ts +++ b/packages/next/lib/check-custom-routes.ts @@ -1,4 +1,4 @@ -import { match as regexpMatch } from 'path-to-regexp' +import * as pathToRegexp from 'path-to-regexp' import { PERMANENT_REDIRECT_STATUS, TEMPORARY_REDIRECT_STATUS, @@ -150,12 +150,15 @@ export default function checkCustomRoutes( invalidParts.push(...result.invalidParts) } + let sourceTokens: pathToRegexp.Token[] | undefined + if (typeof route.source === 'string' && route.source.startsWith('/')) { // only show parse error if we didn't already show error // for not being a string try { // Make sure we can parse the source properly - regexpMatch(route.source) + sourceTokens = pathToRegexp.parse(route.source) + pathToRegexp.tokensToRegexp(sourceTokens) } catch (err) { // If there is an error show our err.sh but still show original error or a formatted one if we can const errMatches = err.message.match(/at (\d{0,})/) @@ -179,6 +182,34 @@ export default function checkCustomRoutes( } } + // make sure no unnamed patterns are attempted to be used in the + // destination as this can cause confusion and is not allowed + if (typeof (route as Rewrite).destination === 'string') { + if ( + (route as Rewrite).destination.startsWith('/') && + Array.isArray(sourceTokens) + ) { + const unnamedInDest = new Set() + + for (const token of sourceTokens) { + if (typeof token === 'object' && typeof token.name === 'number') { + const unnamedIndex = `:${token.name}` + if ((route as Rewrite).destination.includes(unnamedIndex)) { + unnamedInDest.add(unnamedIndex) + } + } + } + + if (unnamedInDest.size > 0) { + invalidParts.push( + `\`destination\` has unnamed params ${[...unnamedInDest].join( + ', ' + )}` + ) + } + } + } + const hasInvalidKeys = invalidKeys.length > 0 const hasInvalidParts = invalidParts.length > 0 diff --git a/packages/next/next-server/server/lib/path-match.ts b/packages/next/next-server/server/lib/path-match.ts index 199268b13381baa..81e1fb5fe048bec 100644 --- a/packages/next/next-server/server/lib/path-match.ts +++ b/packages/next/next-server/server/lib/path-match.ts @@ -25,19 +25,13 @@ export default (customRoute = false) => { } if (customRoute) { - const newParams: { [k: string]: string } = {} for (const key of keys) { - // unnamed matches should always be a number while named - // should be a string + // unnamed params should be removed as they + // are not allowed to be used in the destination if (typeof key.name === 'number') { - newParams[key.name + 1 + ''] = (res.params as any)[key.name + ''] - delete (res.params as any)[key.name + ''] + delete (res.params as any)[key.name] } } - res.params = { - ...res.params, - ...newParams, - } } return { ...params, ...res.params } diff --git a/packages/next/next-server/server/next-server.ts b/packages/next/next-server/server/next-server.ts index 294c6abf3eaa028..f9ecd2ed57deadf 100644 --- a/packages/next/next-server/server/next-server.ts +++ b/packages/next/next-server/server/next-server.ts @@ -488,7 +488,8 @@ export default class Server { fn: async (_req, res, params, _parsedUrl) => { const { parsedDestination } = prepareDestination( route.destination, - params + params, + true ) const updatedDestination = formatUrl(parsedDestination) diff --git a/packages/next/next-server/server/router.ts b/packages/next/next-server/server/router.ts index 73eced0696bdd3c..c738a23bab7fab3 100644 --- a/packages/next/next-server/server/router.ts +++ b/packages/next/next-server/server/router.ts @@ -1,7 +1,6 @@ import { IncomingMessage, ServerResponse } from 'http' import { parse as parseUrl, UrlWithParsedQuery } from 'url' import { compile as compilePathToRegex } from 'path-to-regexp' -import { stringify as stringifyQs } from 'querystring' import pathMatch from './lib/path-match' export const route = pathMatch() @@ -34,24 +33,53 @@ export type DynamicRoutes = Array<{ page: string; match: RouteMatch }> export type PageChecker = (pathname: string) => Promise -export const prepareDestination = (destination: string, params: Params) => { +export const prepareDestination = ( + destination: string, + params: Params, + isRedirect?: boolean +) => { const parsedDestination = parseUrl(destination, true) const destQuery = parsedDestination.query let destinationCompiler = compilePathToRegex( - `${parsedDestination.pathname!}${parsedDestination.hash || ''}` + `${parsedDestination.pathname!}${parsedDestination.hash || ''}`, + // we don't validate while compiling the destination since we should + // have already validated before we got to this point and validating + // breaks compiling destinations with named pattern params from the source + // e.g. /something:hello(.*) -> /another/:hello is broken with validation + // since compile validation is meant for reversing and not for inserting + // params from a separate path-regex into another + { validate: false } ) let newUrl - Object.keys(destQuery).forEach(key => { - const val = destQuery[key] + // update any params in query values + for (const [key, strOrArray] of Object.entries(destQuery)) { + let value = Array.isArray(strOrArray) ? strOrArray[0] : strOrArray + if (value) { + const queryCompiler = compilePathToRegex(value, { validate: false }) + value = queryCompiler(params) + } + destQuery[key] = value + } + + // add params to query + for (const [name, value] of Object.entries(params)) { if ( - typeof val === 'string' && - val.startsWith(':') && - params[val.substr(1)] + isRedirect && + new RegExp(`:${name}(?!\\w)`).test( + parsedDestination.pathname + (parsedDestination.hash || '') + ) ) { - destQuery[key] = params[val.substr(1)] + // Don't add segment to query if used in destination + // and it's a redirect so that we don't pollute the query + // with unwanted values + continue } - }) + + if (!(name in destQuery)) { + destQuery[name] = Array.isArray(value) ? value.join('/') : value + } + } try { newUrl = encodeURI(destinationCompiler(params)) @@ -59,8 +87,8 @@ export const prepareDestination = (destination: string, params: Params) => { const [pathname, hash] = newUrl.split('#') parsedDestination.pathname = pathname parsedDestination.hash = `${hash ? '#' : ''}${hash || ''}` - parsedDestination.search = stringifyQs(parsedDestination.query) parsedDestination.path = `${pathname}${parsedDestination.search}` + delete parsedDestination.search } catch (err) { if (err.message.match(/Expected .*? to not repeat, but got an array/)) { throw new Error( diff --git a/test/integration/custom-routes/next.config.js b/test/integration/custom-routes/next.config.js index 3ff2dca5755d5a6..ae854925d8dddd6 100644 --- a/test/integration/custom-routes/next.config.js +++ b/test/integration/custom-routes/next.config.js @@ -68,8 +68,8 @@ module.exports = { destination: '/api/hello', }, { - source: '/api-hello-regex/(.*)', - destination: '/api/hello?name=:1', + source: '/api-hello-regex/:first(.*)', + destination: '/api/hello?name=:first*', }, { source: '/api-hello-param/:name', @@ -83,6 +83,10 @@ module.exports = { source: '/:path/post-321', destination: '/with-params', }, + { + source: '/unnamed-params/nested/(.*)/:test/(.*)', + destination: '/with-params', + }, ] }, async redirects() { @@ -159,7 +163,7 @@ module.exports = { }, { source: '/unnamed/(first|second)/(.*)', - destination: '/:1/:2', + destination: '/got-unnamed', permanent: false, }, { @@ -172,6 +176,16 @@ module.exports = { destination: '/thank-you-next', permanent: false, }, + { + source: '/docs/:first(integrations|now-cli)/v2:second(.*)', + destination: '/:first/:second', + permanent: false, + }, + { + source: '/catchall-redirect/:path*', + destination: '/somewhere', + permanent: false, + }, ] }, diff --git a/test/integration/custom-routes/test/index.test.js b/test/integration/custom-routes/test/index.test.js index a3436c75ec52068..d574b1f46002e75 100644 --- a/test/integration/custom-routes/test/index.test.js +++ b/test/integration/custom-routes/test/index.test.js @@ -104,19 +104,39 @@ const runTests = (isDev = false) => { redirect: 'manual', } ) - const { pathname, hash } = url.parse(res.headers.get('location')) + const { pathname, hash, query } = url.parse( + res.headers.get('location'), + true + ) expect(res.status).toBe(301) expect(pathname).toBe('/docs/v2/network/status-codes') expect(hash).toBe('#500') + expect(query).toEqual({}) }) it('should redirect successfully with provided statusCode', async () => { const res = await fetchViaHTTP(appPort, '/redirect2', undefined, { redirect: 'manual', }) - const { pathname } = url.parse(res.headers.get('location')) + const { pathname, query } = url.parse(res.headers.get('location'), true) expect(res.status).toBe(301) expect(pathname).toBe('/') + expect(query).toEqual({}) + }) + + it('should redirect successfully with catchall', async () => { + const res = await fetchViaHTTP( + appPort, + '/catchall-redirect/hello/world', + undefined, + { + redirect: 'manual', + } + ) + const { pathname, query } = url.parse(res.headers.get('location'), true) + expect(res.status).toBe(307) + expect(pathname).toBe('/somewhere') + expect(query).toEqual({ path: 'hello/world' }) }) it('should server static files through a rewrite', async () => { @@ -158,7 +178,12 @@ const runTests = (isDev = false) => { const { pathname, query } = url.parse(res.headers.get('location'), true) expect(res.status).toBe(307) expect(pathname).toBe('/with-params') - expect(query).toEqual({ first: 'hello', second: 'world' }) + expect(query).toEqual({ + first: 'hello', + second: 'world', + name: 'world', + section: 'hello', + }) }) it('should overwrite param values correctly', async () => { @@ -260,7 +285,7 @@ const runTests = (isDev = false) => { it('should support proxying to external resource', async () => { const res = await fetchViaHTTP(appPort, '/proxy-me/first') expect(res.status).toBe(200) - expect([...externalServerHits]).toEqual(['/first']) + expect([...externalServerHits]).toEqual(['/first?path=first']) expect(await res.text()).toContain('hi from external') }) @@ -270,7 +295,7 @@ const runTests = (isDev = false) => { }) const { pathname } = url.parse(res.headers.get('location') || '') expect(res.status).toBe(307) - expect(pathname).toBe('/first/final') + expect(pathname).toBe('/got-unnamed') }) it('should support named like unnamed parameters correctly', async () => { @@ -303,7 +328,7 @@ const runTests = (isDev = false) => { it('should handle api rewrite with un-named param successfully', async () => { const data = await renderViaHTTP(appPort, '/api-hello-regex/hello/world') expect(JSON.parse(data)).toEqual({ - query: { '1': 'hello/world', name: 'hello/world' }, + query: { name: 'hello/world', first: 'hello/world' }, }) }) @@ -324,10 +349,41 @@ const runTests = (isDev = false) => { } ) - const { pathname, hostname } = url.parse(res.headers.get('location') || '') + const { pathname, hostname, query } = url.parse( + res.headers.get('location') || '', + true + ) expect(res.status).toBe(307) expect(pathname).toBe(encodeURI('/\\google.com/about')) expect(hostname).not.toBe('google.com') + expect(query).toEqual({}) + }) + + it('should handle unnamed parameters with multi-match successfully', async () => { + const html = await renderViaHTTP( + appPort, + '/unnamed-params/nested/first/second/hello/world' + ) + const params = JSON.parse( + cheerio + .load(html)('p') + .text() + ) + expect(params).toEqual({ test: 'hello' }) + }) + + it('should handle named regex parameters with multi-match successfully', async () => { + const res = await fetchViaHTTP( + appPort, + '/docs/integrations/v2-some/thing', + undefined, + { + redirect: 'manual', + } + ) + const { pathname } = url.parse(res.headers.get('location') || '') + expect(res.status).toBe(307) + expect(pathname).toBe('/integrations/-some/thing') }) if (!isDev) { @@ -439,7 +495,7 @@ const runTests = (isDev = false) => { statusCode: 307, }, { - destination: '/:1/:2', + destination: '/got-unnamed', regex: normalizeRegEx( '^\\/unnamed(?:\\/(first|second))(?:\\/(.*))$' ), @@ -458,6 +514,22 @@ const runTests = (isDev = false) => { source: '/redirect-override', statusCode: 307, }, + { + destination: '/:first/:second', + regex: normalizeRegEx( + '^\\/docs(?:\\/(integrations|now-cli))\\/v2(.*)$' + ), + source: '/docs/:first(integrations|now-cli)/v2:second(.*)', + statusCode: 307, + }, + { + destination: '/somewhere', + regex: normalizeRegEx( + '^\\/catchall-redirect(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))?$' + ), + source: '/catchall-redirect/:path*', + statusCode: 307, + }, ], headers: [ { @@ -591,9 +663,9 @@ const runTests = (isDev = false) => { source: '/api-hello', }, { - destination: '/api/hello?name=:1', + destination: '/api/hello?name=:first*', regex: normalizeRegEx('^\\/api-hello-regex(?:\\/(.*))$'), - source: '/api-hello-regex/(.*)', + source: '/api-hello-regex/:first(.*)', }, { destination: '/api/hello?hello=:name', @@ -610,6 +682,13 @@ const runTests = (isDev = false) => { regex: normalizeRegEx('^(?:\\/([^\\/]+?))\\/post-321$'), source: '/:path/post-321', }, + { + destination: '/with-params', + regex: normalizeRegEx( + '^\\/unnamed-params\\/nested(?:\\/(.*))(?:\\/([^\\/]+?))(?:\\/(.*))$' + ), + source: '/unnamed-params/nested/(.*)/:test/(.*)', + }, ], dynamicRoutes: [ { diff --git a/test/integration/invalid-custom-routes/test/index.test.js b/test/integration/invalid-custom-routes/test/index.test.js index 92b0b166309e9d5..c9d731be9d71e26 100644 --- a/test/integration/invalid-custom-routes/test/index.test.js +++ b/test/integration/invalid-custom-routes/test/index.test.js @@ -59,6 +59,12 @@ const runTests = () => { destination: '/another', permanent: 'yes', }, + { + // unnamed in destination + source: '/hello/world/(.*)', + destination: '/:0', + permanent: true, + }, // invalid objects null, 'string', @@ -99,6 +105,10 @@ const runTests = () => { `\`permanent\` is not set to \`true\` or \`false\` for route {"source":"/hello","destination":"/another","permanent":"yes"}` ) + expect(stderr).toContain( + `\`destination\` has unnamed params :0 for route {"source":"/hello/world/(.*)","destination":"/:0","permanent":true}` + ) + expect(stderr).toContain( `The route null is not a valid object with \`source\` and \`destination\`` ) @@ -142,6 +152,11 @@ const runTests = () => { source: '/feedback/(?!general)', destination: '/feedback/general', }, + { + // unnamed in destination + source: '/hello/world/(.*)', + destination: '/:0', + }, // invalid objects null, 'string', @@ -174,6 +189,10 @@ const runTests = () => { `Error parsing \`/feedback/(?!general)\` https://err.sh/zeit/next.js/invalid-route-source` ) + expect(stderr).toContain( + `\`destination\` has unnamed params :0 for route {"source":"/hello/world/(.*)","destination":"/:0"}` + ) + expect(stderr).toContain( `The route null is not a valid object with \`source\` and \`destination\`` ) From f1cb4ea8674cd09397d1e7837b529a4a0a4cd4aa Mon Sep 17 00:00:00 2001 From: 5alidz Date: Wed, 11 Mar 2020 00:16:54 +0300 Subject: [PATCH 10/47] Remove extra closing parenthesis (#10948) * fix missing open parenthesis * Apply suggestions from code review Co-Authored-By: JJ Kasper Co-authored-by: JJ Kasper --- docs/basic-features/data-fetching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/basic-features/data-fetching.md b/docs/basic-features/data-fetching.md index 763191de851f9df..b77dc3dc58063d1 100644 --- a/docs/basic-features/data-fetching.md +++ b/docs/basic-features/data-fetching.md @@ -229,7 +229,7 @@ If `fallback` is `true`, then the behavior of `getStaticProps` changes: In the “fallback” version of a page: - The page’s props will be empty. -- Using the [router](/docs/api-reference/next/router.md)), you can detect if the fallback is being rendered, `router.isFallback` will be `true`. +- Using the [router](/docs/api-reference/next/router.md), you can detect if the fallback is being rendered, `router.isFallback` will be `true`. Here’s an example that uses `isFallback`: From 1edc1a9481cd6fca7d44f64404b8557fa8f520d0 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 11 Mar 2020 20:20:59 +0900 Subject: [PATCH 11/47] fix paths.params.type in getStaticPaths(document) (#10959) --- docs/basic-features/data-fetching.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/basic-features/data-fetching.md b/docs/basic-features/data-fetching.md index b77dc3dc58063d1..b5eca093ed8bdd1 100644 --- a/docs/basic-features/data-fetching.md +++ b/docs/basic-features/data-fetching.md @@ -152,8 +152,8 @@ The `paths` key determines which paths will be pre-rendered. For example, suppos ```js return { paths: [ - { params: { id: 1 } }, - { params: { id: 2 } } + { params: { id: '1' } }, + { params: { id: '2' } } ], fallback: ... } From 905f0ce21489af1c75979fc27318484884bef464 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Wed, 11 Mar 2020 10:33:55 -0400 Subject: [PATCH 12/47] Check SSG Page via Route Lookup (#10971) --- packages/next/next-server/server/spr-cache.ts | 6 + .../prerender-no-revalidate/pages/index.js | 27 ++++ .../prerender-no-revalidate/pages/named.js | 27 ++++ .../pages/nested/index.js | 27 ++++ .../pages/nested/named.js | 27 ++++ .../test/index.test.js | 129 ++++++++++++++++++ 6 files changed, 243 insertions(+) create mode 100644 test/integration/prerender-no-revalidate/pages/index.js create mode 100644 test/integration/prerender-no-revalidate/pages/named.js create mode 100644 test/integration/prerender-no-revalidate/pages/nested/index.js create mode 100644 test/integration/prerender-no-revalidate/pages/nested/named.js create mode 100644 test/integration/prerender-no-revalidate/test/index.test.js diff --git a/packages/next/next-server/server/spr-cache.ts b/packages/next/next-server/server/spr-cache.ts index c449fcd331dbfff..65b0de02e47e076 100644 --- a/packages/next/next-server/server/spr-cache.ts +++ b/packages/next/next-server/server/spr-cache.ts @@ -11,6 +11,10 @@ const mkdirp = promisify(mkdirpOrig) const readFile = promisify(fs.readFile) const writeFile = promisify(fs.writeFile) +function toRoute(pathname: string): string { + return pathname.replace(/\/$/, '').replace(/\/index$/, '') || '/' +} + type SprCacheValue = { html: string pageData: any @@ -34,6 +38,8 @@ const getSeedPath = (pathname: string, ext: string): string => { } export const calculateRevalidate = (pathname: string): number | false => { + pathname = toRoute(pathname) + // in development we don't have a prerender-manifest // and default to always revalidating to allow easier debugging const curTime = new Date().getTime() diff --git a/test/integration/prerender-no-revalidate/pages/index.js b/test/integration/prerender-no-revalidate/pages/index.js new file mode 100644 index 000000000000000..cf712032d6a2c6d --- /dev/null +++ b/test/integration/prerender-no-revalidate/pages/index.js @@ -0,0 +1,27 @@ +let runs = 0 + +export async function getStaticProps() { + if (runs++) { + throw new Error('GSP was re-run.') + } + + return { + props: { + world: 'world', + time: new Date().getTime(), + other: Math.random(), + }, + } +} + +const Page = ({ world, time, other }) => { + return ( +
+

hello {world}

+ time: {time} + other: {other} +
+ ) +} + +export default Page diff --git a/test/integration/prerender-no-revalidate/pages/named.js b/test/integration/prerender-no-revalidate/pages/named.js new file mode 100644 index 000000000000000..cf712032d6a2c6d --- /dev/null +++ b/test/integration/prerender-no-revalidate/pages/named.js @@ -0,0 +1,27 @@ +let runs = 0 + +export async function getStaticProps() { + if (runs++) { + throw new Error('GSP was re-run.') + } + + return { + props: { + world: 'world', + time: new Date().getTime(), + other: Math.random(), + }, + } +} + +const Page = ({ world, time, other }) => { + return ( +
+

hello {world}

+ time: {time} + other: {other} +
+ ) +} + +export default Page diff --git a/test/integration/prerender-no-revalidate/pages/nested/index.js b/test/integration/prerender-no-revalidate/pages/nested/index.js new file mode 100644 index 000000000000000..cf712032d6a2c6d --- /dev/null +++ b/test/integration/prerender-no-revalidate/pages/nested/index.js @@ -0,0 +1,27 @@ +let runs = 0 + +export async function getStaticProps() { + if (runs++) { + throw new Error('GSP was re-run.') + } + + return { + props: { + world: 'world', + time: new Date().getTime(), + other: Math.random(), + }, + } +} + +const Page = ({ world, time, other }) => { + return ( +
+

hello {world}

+ time: {time} + other: {other} +
+ ) +} + +export default Page diff --git a/test/integration/prerender-no-revalidate/pages/nested/named.js b/test/integration/prerender-no-revalidate/pages/nested/named.js new file mode 100644 index 000000000000000..cf712032d6a2c6d --- /dev/null +++ b/test/integration/prerender-no-revalidate/pages/nested/named.js @@ -0,0 +1,27 @@ +let runs = 0 + +export async function getStaticProps() { + if (runs++) { + throw new Error('GSP was re-run.') + } + + return { + props: { + world: 'world', + time: new Date().getTime(), + other: Math.random(), + }, + } +} + +const Page = ({ world, time, other }) => { + return ( +
+

hello {world}

+ time: {time} + other: {other} +
+ ) +} + +export default Page diff --git a/test/integration/prerender-no-revalidate/test/index.test.js b/test/integration/prerender-no-revalidate/test/index.test.js new file mode 100644 index 000000000000000..3779bd7595a8d36 --- /dev/null +++ b/test/integration/prerender-no-revalidate/test/index.test.js @@ -0,0 +1,129 @@ +/* eslint-env jest */ +/* global jasmine */ +import fs from 'fs-extra' +import { + findPort, + killApp, + nextBuild, + nextStart, + renderViaHTTP, + waitFor, +} from 'next-test-utils' +import { join } from 'path' + +jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 2 +const appDir = join(__dirname, '..') +const nextConfig = join(appDir, 'next.config.js') +let app +let appPort +let buildId +let stderr + +function runTests(route, routePath, serverless) { + it(`[${route}] should not revalidate when set to false`, async () => { + const fileName = join( + appDir, + `.next`, + ...(serverless ? ['serverless'] : ['server', 'static', buildId]), + `pages/${routePath}.html` + ) + const initialHtml = await renderViaHTTP(appPort, route) + const initialFileHtml = await fs.readFile(fileName, 'utf8') + + let newHtml = await renderViaHTTP(appPort, route) + expect(initialHtml).toBe(newHtml) + expect(await fs.readFile(fileName, 'utf8')).toBe(initialFileHtml) + + await waitFor(500) + + newHtml = await renderViaHTTP(appPort, route) + expect(initialHtml).toBe(newHtml) + expect(await fs.readFile(fileName, 'utf8')).toBe(initialFileHtml) + + await waitFor(500) + + newHtml = await renderViaHTTP(appPort, route) + expect(initialHtml).toBe(newHtml) + expect(await fs.readFile(fileName, 'utf8')).toBe(initialFileHtml) + + expect(stderr).not.toContain('GSP was re-run') + }) + + it(`[${route}] should not revalidate /_next/data when set to false`, async () => { + const route = join(`/_next/data/${buildId}`, `${routePath}.json`) + const fileName = join( + appDir, + `.next`, + ...(serverless ? ['serverless'] : ['server', 'static', buildId]), + `pages/${routePath}.json` + ) + + const initialData = JSON.parse(await renderViaHTTP(appPort, route)) + const initialFileJson = await fs.readFile(fileName, 'utf8') + + expect(JSON.parse(await renderViaHTTP(appPort, route))).toEqual(initialData) + expect(await fs.readFile(fileName, 'utf8')).toBe(initialFileJson) + await waitFor(500) + + expect(JSON.parse(await renderViaHTTP(appPort, route))).toEqual(initialData) + expect(await fs.readFile(fileName, 'utf8')).toBe(initialFileJson) + await waitFor(500) + + expect(JSON.parse(await renderViaHTTP(appPort, route))).toEqual(initialData) + expect(await fs.readFile(fileName, 'utf8')).toBe(initialFileJson) + + expect(stderr).not.toContain('GSP was re-run') + }) +} + +describe('SSG Prerender No Revalidate', () => { + afterAll(() => fs.remove(nextConfig)) + + describe('serverless mode', () => { + beforeAll(async () => { + await fs.writeFile( + nextConfig, + `module.exports = { target: 'experimental-serverless-trace' }`, + 'utf8' + ) + await fs.remove(join(appDir, '.next')) + await nextBuild(appDir) + appPort = await findPort() + stderr = '' + app = await nextStart(appDir, appPort, { + onStderr: msg => { + stderr += msg + }, + }) + buildId = await fs.readFile(join(appDir, '.next/BUILD_ID'), 'utf8') + }) + afterAll(() => killApp(app)) + + runTests('/', '/index', true) + runTests('/named', '/named', true) + runTests('/nested', '/nested', true) + runTests('/nested/named', '/nested/named', true) + }) + + describe('production mode', () => { + beforeAll(async () => { + await fs.remove(nextConfig) + await fs.remove(join(appDir, '.next')) + await nextBuild(appDir, []) + appPort = await findPort() + stderr = '' + app = await nextStart(appDir, appPort, { + onStderr: msg => { + stderr += msg + }, + }) + buildId = await fs.readFile(join(appDir, '.next/BUILD_ID'), 'utf8') + }) + afterAll(() => killApp(app)) + + runTests('/', '/index') + runTests('/named', '/named') + runTests('/nested', '/nested') + runTests('/nested/named', '/nested/named') + }) +}) From 33503f70a77424160aabfb503bdd9b43e463c2b2 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Wed, 11 Mar 2020 10:37:26 -0400 Subject: [PATCH 13/47] v9.3.1-canary.1 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-google-analytics/package.json | 2 +- packages/next-plugin-material-ui/package.json | 2 +- packages/next-plugin-sentry/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next/package.json | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index 54c4f7b109faac9..508bc0447250e8f 100644 --- a/lerna.json +++ b/lerna.json @@ -12,5 +12,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "9.3.1-canary.0" + "version": "9.3.1-canary.1" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index 7430ea5c57cae05..3e0f3df892b5d8e 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "9.3.1-canary.0", + "version": "9.3.1-canary.1", "keywords": [ "react", "next", diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 43f74a8466ecc4c..304cfaf4019f485 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "9.3.1-canary.0", + "version": "9.3.1-canary.1", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index e83bc892949d87f..1d57e6778b857ed 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "9.3.1-canary.0", + "version": "9.3.1-canary.1", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-google-analytics/package.json b/packages/next-plugin-google-analytics/package.json index 62d206df724b509..ae0cbcc1530cbbe 100644 --- a/packages/next-plugin-google-analytics/package.json +++ b/packages/next-plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-google-analytics", - "version": "9.3.1-canary.0", + "version": "9.3.1-canary.1", "nextjs": { "name": "Google Analytics", "required-env": [ diff --git a/packages/next-plugin-material-ui/package.json b/packages/next-plugin-material-ui/package.json index 1acba359795790e..46f961321169c76 100644 --- a/packages/next-plugin-material-ui/package.json +++ b/packages/next-plugin-material-ui/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-material-ui", - "version": "9.3.1-canary.0", + "version": "9.3.1-canary.1", "nextjs": { "name": "Material UI", "required-env": [] diff --git a/packages/next-plugin-sentry/package.json b/packages/next-plugin-sentry/package.json index fe29ca4b7297952..2fd6be2fec62711 100644 --- a/packages/next-plugin-sentry/package.json +++ b/packages/next-plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-sentry", - "version": "9.3.1-canary.0", + "version": "9.3.1-canary.1", "nextjs": { "name": "Sentry", "required-env": [ diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 636a102cc97488c..bad41302075bdba 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "9.3.1-canary.0", + "version": "9.3.1-canary.1", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next/package.json b/packages/next/package.json index a34d741db37dd17..e1f5b55175a914e 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "9.3.1-canary.0", + "version": "9.3.1-canary.1", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -73,7 +73,7 @@ "@babel/preset-typescript": "7.7.2", "@babel/runtime": "7.7.2", "@babel/types": "7.7.4", - "@next/polyfill-nomodule": "9.3.1-canary.0", + "@next/polyfill-nomodule": "9.3.1-canary.1", "amphtml-validator": "1.0.30", "async-retry": "1.2.3", "async-sema": "3.0.0", From 34a8e8843dbd89c220eafe4d9d848f3ff3054e87 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Wed, 11 Mar 2020 11:18:05 -0500 Subject: [PATCH 14/47] Make sure to not show pages/404 GIP error from _app having GIP (#10974) * Make sure to not show pages/404 GIP error from _app having GIP * Add error for getStaticProps in pages/404 too --- packages/next/lib/constants.ts | 2 +- packages/next/next-server/server/render.tsx | 5 +- test/integration/404-page/test/index.test.js | 201 +++++++++++++++---- 3 files changed, 170 insertions(+), 38 deletions(-) diff --git a/packages/next/lib/constants.ts b/packages/next/lib/constants.ts index e8025b25e9ec28b..ae74148ce8256c9 100644 --- a/packages/next/lib/constants.ts +++ b/packages/next/lib/constants.ts @@ -30,4 +30,4 @@ export const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialP export const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps with getServerSideProps. To use SSG, please remove getServerSideProps` -export const PAGES_404_GET_INITIAL_PROPS_ERROR = `\`pages/404\` can not have getInitialProps/getServerSideProps, https://err.sh/zeit/next.js/404-get-initial-props` +export const PAGES_404_GET_INITIAL_PROPS_ERROR = `\`pages/404\` can not have getInitialProps/getServerSideProps/getStaticProps, https://err.sh/zeit/next.js/404-get-initial-props` diff --git a/packages/next/next-server/server/render.tsx b/packages/next/next-server/server/render.tsx index f36786bfcf78586..7e5e85d2b636671 100644 --- a/packages/next/next-server/server/render.tsx +++ b/packages/next/next-server/server/render.tsx @@ -418,7 +418,10 @@ export async function renderToHTML( renderOpts.nextExport = true } - if (pathname === '/404' && !isAutoExport) { + if ( + pathname === '/404' && + (hasPageGetInitialProps || getServerSideProps || isSSG) + ) { throw new Error(PAGES_404_GET_INITIAL_PROPS_ERROR) } } diff --git a/test/integration/404-page/test/index.test.js b/test/integration/404-page/test/index.test.js index 9029af04c2f982d..6c481628d24aefc 100644 --- a/test/integration/404-page/test/index.test.js +++ b/test/integration/404-page/test/index.test.js @@ -19,6 +19,7 @@ const appDir = join(__dirname, '../') const pages404 = join(appDir, 'pages/404.js') const appPage = join(appDir, 'pages/_app.js') const nextConfig = join(appDir, 'next.config.js') +const gip404Err = /`pages\/404` can not have getInitialProps\/getServerSideProps/ let nextConfigContent let buildId @@ -148,9 +149,7 @@ describe('404 Page Support', () => { await fs.remove(pages404) await fs.move(`${pages404}.bak`, pages404) - expect(stderr).toContain( - `\`pages/404\` can not have getInitialProps/getServerSideProps, https://err.sh/zeit/next.js/404-get-initial-props` - ) + expect(stderr).toMatch(gip404Err) expect(code).toBe(1) }) @@ -180,51 +179,181 @@ describe('404 Page Support', () => { await fs.remove(pages404) await fs.move(`${pages404}.bak`, pages404) - const error = `\`pages/404\` can not have getInitialProps/getServerSideProps, https://err.sh/zeit/next.js/404-get-initial-props` + expect(stderr).toMatch(gip404Err) + }) + + it('shows error with getStaticProps in pages/404 build', async () => { + await fs.move(pages404, `${pages404}.bak`) + await fs.writeFile( + pages404, + ` + const page = () => 'custom 404 page' + export const getStaticProps = () => ({ props: { a: 'b' } }) + export default page + ` + ) + const { stderr, code } = await nextBuild(appDir, [], { stderr: true }) + await fs.remove(pages404) + await fs.move(`${pages404}.bak`, pages404) + + expect(stderr).toMatch(gip404Err) + expect(code).toBe(1) + }) + + it('shows error with getStaticProps in pages/404 dev', async () => { + await fs.move(pages404, `${pages404}.bak`) + await fs.writeFile( + pages404, + ` + const page = () => 'custom 404 page' + export const getStaticProps = () => ({ props: { a: 'b' } }) + export default page + ` + ) + + let stderr = '' + appPort = await findPort() + app = await launchApp(appDir, appPort, { + onStderr(msg) { + stderr += msg || '' + }, + }) + await renderViaHTTP(appPort, '/abc') + await waitFor(1000) + + await killApp(app) + + await fs.remove(pages404) + await fs.move(`${pages404}.bak`, pages404) + + expect(stderr).toMatch(gip404Err) + }) + + it('shows error with getServerSideProps in pages/404 build', async () => { + await fs.move(pages404, `${pages404}.bak`) + await fs.writeFile( + pages404, + ` + const page = () => 'custom 404 page' + export const getServerSideProps = () => ({ props: { a: 'b' } }) + export default page + ` + ) + const { stderr, code } = await nextBuild(appDir, [], { stderr: true }) + await fs.remove(pages404) + await fs.move(`${pages404}.bak`, pages404) + + expect(stderr).toMatch(gip404Err) + expect(code).toBe(1) + }) + + it('shows error with getServerSideProps in pages/404 dev', async () => { + await fs.move(pages404, `${pages404}.bak`) + await fs.writeFile( + pages404, + ` + const page = () => 'custom 404 page' + export const getServerSideProps = () => ({ props: { a: 'b' } }) + export default page + ` + ) + + let stderr = '' + appPort = await findPort() + app = await launchApp(appDir, appPort, { + onStderr(msg) { + stderr += msg || '' + }, + }) + await renderViaHTTP(appPort, '/abc') + await waitFor(1000) + + await killApp(app) + + await fs.remove(pages404) + await fs.move(`${pages404}.bak`, pages404) - expect(stderr).toContain(error) + expect(stderr).toMatch(gip404Err) }) describe('_app with getInitialProps', () => { - beforeAll(async () => { - await fs.writeFile( + beforeAll(() => + fs.writeFile( appPage, ` - import NextApp from 'next/app' - const App = ({ Component, pageProps }) => - App.getInitialProps = NextApp.getInitialProps - export default App - ` + import NextApp from 'next/app' + const App = ({ Component, pageProps }) => + App.getInitialProps = NextApp.getInitialProps + export default App + ` ) - await nextBuild(appDir) - appPort = await findPort() - app = await nextStart(appDir, appPort) - buildId = await fs.readFile(join(appDir, '.next/BUILD_ID'), 'utf8') - }) - afterAll(async () => { - await fs.remove(appPage) - await killApp(app) - }) + ) + afterAll(() => fs.remove(appPage)) - it('should not output static 404 if _app has getInitialProps', async () => { - expect( - await fs.exists( - join(appDir, '.next/server/static', buildId, 'pages/404.html') + describe('production mode', () => { + afterAll(() => killApp(app)) + + it('should build successfully', async () => { + const { code, stderr, stdout } = await nextBuild(appDir, [], { + stderr: true, + stdout: true, + }) + + expect(code).toBe(0) + expect(stderr).not.toMatch(gip404Err) + expect(stdout).not.toMatch(gip404Err) + + appPort = await findPort() + app = await nextStart(appDir, appPort) + buildId = await fs.readFile(join(appDir, '.next/BUILD_ID'), 'utf8') + }) + + it('should not output static 404 if _app has getInitialProps', async () => { + expect( + await fs.exists( + join(appDir, '.next/server/static', buildId, 'pages/404.html') + ) + ).toBe(false) + }) + + it('specify to use the 404 page still in the routes-manifest', async () => { + const manifest = await fs.readJSON( + join(appDir, '.next/routes-manifest.json') ) - ).toBe(false) - }) + expect(manifest.pages404).toBe(true) + }) - it('specify to use the 404 page still in the routes-manifest', async () => { - const manifest = await fs.readJSON( - join(appDir, '.next/routes-manifest.json') - ) - expect(manifest.pages404).toBe(true) + it('should still use 404 page', async () => { + const res = await fetchViaHTTP(appPort, '/abc') + expect(res.status).toBe(404) + expect(await res.text()).toContain('custom 404 page') + }) }) - it('should still use 404 page', async () => { - const res = await fetchViaHTTP(appPort, '/abc') - expect(res.status).toBe(404) - expect(await res.text()).toContain('custom 404 page') + describe('dev mode', () => { + let stderr = '' + let stdout = '' + + beforeAll(async () => { + appPort = await findPort() + app = await launchApp(appDir, appPort, { + onStderr(msg) { + stderr += msg + }, + onStdout(msg) { + stdout += msg + }, + }) + }) + afterAll(() => killApp(app)) + + it('should not show pages/404 GIP error if _app has GIP', async () => { + const res = await fetchViaHTTP(appPort, '/abc') + expect(res.status).toBe(404) + expect(await res.text()).toContain('custom 404 page') + expect(stderr).not.toMatch(gip404Err) + expect(stdout).not.toMatch(gip404Err) + }) }) }) }) From 76a08c9671f3eb822adbf8d8a83b004a34cad7c1 Mon Sep 17 00:00:00 2001 From: Petr Messner Date: Wed, 11 Mar 2020 20:35:17 +0100 Subject: [PATCH 15/47] Fix examples with relay-compiler (#10976) * Example with-react-relay-network-modern: update dependencies * Example with-react-relay-network-modern: move relay __generated__ out of pages dir * Example with-react-relay-network-modern: fix some errors - Without checking if props.allBlogPosts exists it fails sometimes on "TypeError: Cannot read property 'edges' of undefined" - I have no idea how it could work before with Component.query().params.name, but maybe some dependent library API has changed * Example with-relay-modern-server-express: update dependencies * Example with-relay-modern-server-express: move relay __generated__ out of pages dir Fixes Error: Build optimization failed: found page without a React Component as default export in pages/__generated__/pages_indexQuery.graphql * Example with-relay-modern: update dependencies * Example with-react-relay-network-modern: fix prettier errors --- .../with-react-relay-network-modern/.babelrc | 4 ++-- .../components/BlogPosts.js | 7 ++++--- .../package.json | 18 +++++++++--------- .../pages/_app.js | 2 +- .../with-relay-modern-server-express/.babelrc | 2 +- .../package.json | 16 ++++++++-------- examples/with-relay-modern/package.json | 12 ++++++------ 7 files changed, 31 insertions(+), 30 deletions(-) diff --git a/examples/with-react-relay-network-modern/.babelrc b/examples/with-react-relay-network-modern/.babelrc index 8fad94a215c1e96..8a782ec48561c39 100644 --- a/examples/with-react-relay-network-modern/.babelrc +++ b/examples/with-react-relay-network-modern/.babelrc @@ -3,6 +3,6 @@ "next/babel" ], "plugins": [ - "relay" + ["relay", { artifactDirectory: "__generated__" }] ] -} \ No newline at end of file +} diff --git a/examples/with-react-relay-network-modern/components/BlogPosts.js b/examples/with-react-relay-network-modern/components/BlogPosts.js index c341f62c486eab1..30ff74963e2072c 100644 --- a/examples/with-react-relay-network-modern/components/BlogPosts.js +++ b/examples/with-react-relay-network-modern/components/BlogPosts.js @@ -6,9 +6,10 @@ const BlogPosts = props => { return (

Blog posts

- {props.viewer.allBlogPosts.edges.map(({ node }) => ( - - ))} + {props.viewer.allBlogPosts && + props.viewer.allBlogPosts.edges.map(({ node }) => ( + + ))}
) } diff --git a/examples/with-react-relay-network-modern/package.json b/examples/with-react-relay-network-modern/package.json index 82cb57a3bc3d4a3..23f4685fa8ee47d 100644 --- a/examples/with-react-relay-network-modern/package.json +++ b/examples/with-react-relay-network-modern/package.json @@ -7,7 +7,7 @@ "dev": "next", "build": "next build", "start": "next start", - "relay": "relay-compiler --src ./ --exclude '**/.next/**' '**/node_modules/**' '**/test/**' '**/__generated__/**' --exclude '**/schema/**' --schema ./schema/schema.graphql", + "relay": "relay-compiler --src ./ --exclude '**/.next/**' '**/node_modules/**' '**/test/**' '**/__generated__/**' --exclude '**/schema/**' --schema ./schema/schema.graphql --artifactDirectory __generated__", "schema": "graphql get-schema -e dev" }, "author": "", @@ -15,19 +15,19 @@ "dependencies": { "dotenv": "^8.0.0", "dotenv-webpack": "^1.5.4", - "graphql": "^14.3.0", + "graphql": "^14.6.0", "isomorphic-fetch": "^2.2.1", "next": "latest", - "react": "^16.7.0", - "react-dom": "^16.7.0", - "react-relay": "^5.0.0", - "react-relay-network-modern": "^4.0.0", - "react-relay-network-modern-ssr": "^1.2.2" + "react": "^16.13.0", + "react-dom": "^16.13.0", + "react-relay": "^9.0.0", + "react-relay-network-modern": "^4.5.0", + "react-relay-network-modern-ssr": "^1.4.0" }, "devDependencies": { - "babel-plugin-relay": "^5.0.0", + "babel-plugin-relay": "^9.0.0", "graphcool": "^1.2.1", "graphql-cli": "^3.0.11", - "relay-compiler": "^5.0.0" + "relay-compiler": "^9.0.0" } } diff --git a/examples/with-react-relay-network-modern/pages/_app.js b/examples/with-react-relay-network-modern/pages/_app.js index 07e62e6bf690f37..79b6b48da6a7629 100644 --- a/examples/with-react-relay-network-modern/pages/_app.js +++ b/examples/with-react-relay-network-modern/pages/_app.js @@ -35,7 +35,7 @@ export default class App extends NextApp { const environment = createEnvironment( relayData, JSON.stringify({ - queryID: Component.query ? Component.query().params.name : undefined, + queryID: Component.query ? Component.query.params.name : undefined, variables, }) ) diff --git a/examples/with-relay-modern-server-express/.babelrc b/examples/with-relay-modern-server-express/.babelrc index 8fad94a215c1e96..c7eb72f9da57075 100644 --- a/examples/with-relay-modern-server-express/.babelrc +++ b/examples/with-relay-modern-server-express/.babelrc @@ -3,6 +3,6 @@ "next/babel" ], "plugins": [ - "relay" + ["relay", { artifactDirectory: "__generated__" }] ] } \ No newline at end of file diff --git a/examples/with-relay-modern-server-express/package.json b/examples/with-relay-modern-server-express/package.json index 70b4a5ba8cb6f8b..a4519dd2c9c7593 100644 --- a/examples/with-relay-modern-server-express/package.json +++ b/examples/with-relay-modern-server-express/package.json @@ -8,25 +8,25 @@ "build": "next build", "prestart": "npm run build", "start": "NODE_ENV=production node server", - "relay": "relay-compiler --src ./ --exclude '**/.next/**' '**/node_modules/**' '**/test/**' '**/__generated__/**' '**/server/**' --schema ./server/schema.graphql --verbose" + "relay": "relay-compiler --src ./ --exclude '**/.next/**' '**/node_modules/**' '**/test/**' '**/__generated__/**' '**/server/**' --schema ./server/schema.graphql --artifactDirectory __generated__ --verbose" }, "author": "", "license": "ISC", "dependencies": { "dotenv": "^4.0.0", "dotenv-webpack": "^1.5.4", - "express-graphql": "^0.7.1", - "graphql": "^14.1.1", + "express-graphql": "^0.9.0", + "graphql": "^14.6.0", "graphql-relay": "^0.6.0", "isomorphic-unfetch": "^3.0.0", "next": "latest", - "react": "^16.7.0", - "react-dom": "^16.7.0", - "react-relay": "^5.0.0" + "react": "^16.13.0", + "react-dom": "^16.13.0", + "react-relay": "^9.0.0" }, "devDependencies": { - "babel-plugin-relay": "^2.0.0", + "babel-plugin-relay": "^9.0.0", "graphql-cli": "^1.0.0-beta.4", - "relay-compiler": "^2.0.0" + "relay-compiler": "^9.0.0" } } diff --git a/examples/with-relay-modern/package.json b/examples/with-relay-modern/package.json index 014bc7dde2541b3..2187db4ad0b3274 100644 --- a/examples/with-relay-modern/package.json +++ b/examples/with-relay-modern/package.json @@ -15,17 +15,17 @@ "dependencies": { "dotenv": "^8.2.0", "dotenv-webpack": "^1.7.0", - "graphql": "^14.5.8", + "graphql": "^14.6.0", "isomorphic-unfetch": "^3.0.0", "next": "latest", - "react": "^16.12.0", - "react-dom": "^16.12.0", - "react-relay": "^8.0.0" + "react": "^16.13.0", + "react-dom": "^16.13.0", + "react-relay": "^9.0.0" }, "devDependencies": { - "babel-plugin-relay": "^8.0.0", + "babel-plugin-relay": "^9.0.0", "graphcool": "^1.4.0", "graphql-cli": "^3.0.14", - "relay-compiler": "^8.0.0" + "relay-compiler": "^9.0.0" } } From e52048daa71bb449f4d02c647003be0b1487c122 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Wed, 11 Mar 2020 21:21:49 +0100 Subject: [PATCH 16/47] Use core-js promise polyfill for nomodule browsers (#10985) * Use core-js promise polyfill for nomodule browsers Also updated to the core-js@3 features modules instead of importing the exact modules directly. Fixes #10966 * Simplify reflect and regexp * Add ie11 test for bad Promise * Add test script for regexp and ie11 Co-authored-by: JJ Kasper Co-authored-by: Joe Haddad --- .eslintignore | 1 + .prettierignore | 1 + .prettierignore_staged | 1 + packages/next-polyfill-nomodule/package.json | 1 - packages/next-polyfill-nomodule/src/index.js | 107 ++++++++---------- .../production/pages/bad-promise.js | 12 ++ .../production/pages/regexp-polyfill.js | 12 ++ .../production/public/regexp-test.js | 13 +++ .../integration/production/test/index.test.js | 12 ++ .../integration/size-limit/test/index.test.js | 2 +- 10 files changed, 99 insertions(+), 63 deletions(-) create mode 100644 test/integration/production/pages/bad-promise.js create mode 100644 test/integration/production/pages/regexp-polyfill.js create mode 100644 test/integration/production/public/regexp-test.js diff --git a/.eslintignore b/.eslintignore index 6a558257c0a76c1..12017a94b4fa3ac 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,4 @@ node_modules **/dist/** examples/with-ioc/** examples/with-kea/** +test/integration/production/public/**/* \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 5c51653d42d7c7f..45b15e04b5f79dc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,3 +2,4 @@ node_modules **/.next/** **/_next/** **/dist/** +test/integration/production/public/**/* \ No newline at end of file diff --git a/.prettierignore_staged b/.prettierignore_staged index cead30ab8514cc6..9bb6a6d7011975d 100644 --- a/.prettierignore_staged +++ b/.prettierignore_staged @@ -1,3 +1,4 @@ **/.next/** **/_next/** **/dist/** +test/integration/production/public/**/* \ No newline at end of file diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index bad41302075bdba..194a5c5f692b027 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -12,7 +12,6 @@ "core-js": "3.6.4", "microbundle": "0.11.0", "object-assign": "4.1.1", - "promise-polyfill": "8.1.3", "url-polyfill": "1.1.8", "whatwg-fetch": "3.0.0" } diff --git a/packages/next-polyfill-nomodule/src/index.js b/packages/next-polyfill-nomodule/src/index.js index 5b4552e10a8fcfc..6d2a5e38dcb45a6 100644 --- a/packages/next-polyfill-nomodule/src/index.js +++ b/packages/next-polyfill-nomodule/src/index.js @@ -1,66 +1,51 @@ -import 'core-js/modules/es6.array.copy-within' -import 'core-js/modules/es6.array.fill' -import 'core-js/modules/es6.array.find' -import 'core-js/modules/es6.array.find-index' -import 'core-js/modules/es7.array.flat-map' -import 'core-js/modules/es6.array.from' -import 'core-js/modules/es7.array.includes' -import 'core-js/modules/es6.array.iterator' -import 'core-js/modules/es6.array.of' -import 'core-js/modules/es6.array.species' -import 'core-js/modules/es6.function.has-instance' -import 'core-js/modules/es6.map' -import 'core-js/modules/es6.number.constructor' -import 'core-js/modules/es6.number.epsilon' -import 'core-js/modules/es6.number.is-finite' -import 'core-js/modules/es6.number.is-integer' -import 'core-js/modules/es6.number.is-nan' -import 'core-js/modules/es6.number.is-safe-integer' -import 'core-js/modules/es6.number.max-safe-integer' -import 'core-js/modules/es6.number.min-safe-integer' -import 'core-js/modules/es7.object.entries' -import 'core-js/modules/es7.object.get-own-property-descriptors' -import 'core-js/modules/es6.object.is' -import 'core-js/modules/es7.object.values' -import 'core-js/modules/es6.reflect.apply' -import 'core-js/modules/es6.reflect.construct' -import 'core-js/modules/es6.reflect.define-property' -import 'core-js/modules/es6.reflect.delete-property' -import 'core-js/modules/es6.reflect.get' -import 'core-js/modules/es6.reflect.get-own-property-descriptor' -import 'core-js/modules/es6.reflect.get-prototype-of' -import 'core-js/modules/es6.reflect.has' -import 'core-js/modules/es6.reflect.is-extensible' -import 'core-js/modules/es6.reflect.own-keys' -import 'core-js/modules/es6.reflect.prevent-extensions' -import 'core-js/modules/es6.reflect.set' -import 'core-js/modules/es6.reflect.set-prototype-of' -import 'core-js/modules/es6.regexp.constructor' -import 'core-js/modules/es6.regexp.flags' -import 'core-js/modules/es6.regexp.match' -import 'core-js/modules/es6.regexp.replace' -import 'core-js/modules/es6.regexp.split' -import 'core-js/modules/es6.regexp.search' -import 'core-js/modules/es6.set' -import 'core-js/modules/es6.symbol' -import 'core-js/modules/es7.symbol.async-iterator' -import 'core-js/modules/es6.string.code-point-at' -import 'core-js/modules/es6.string.ends-with' -import 'core-js/modules/es6.string.from-code-point' -import 'core-js/modules/es6.string.includes' -import 'core-js/modules/es6.string.iterator' -import 'core-js/modules/es7.string.pad-start' -import 'core-js/modules/es7.string.pad-end' -import 'core-js/modules/es6.string.raw' -import 'core-js/modules/es6.string.repeat' -import 'core-js/modules/es6.string.starts-with' -import 'core-js/modules/es7.string.trim-left' -import 'core-js/modules/es7.string.trim-right' -import 'core-js/modules/es6.weak-map' -import 'core-js/modules/es6.weak-set' +import 'core-js/features/array/copy-within' +import 'core-js/features/array/fill' +import 'core-js/features/array/find' +import 'core-js/features/array/find-index' +import 'core-js/features/array/flat-map' +import 'core-js/features/array/from' +import 'core-js/features/array/includes' +import 'core-js/features/array/iterator' +import 'core-js/features/array/of' +import 'core-js/features/array/species' +import 'core-js/features/function/has-instance' +import 'core-js/features/map' +import 'core-js/features/number/constructor' +import 'core-js/features/number/epsilon' +import 'core-js/features/number/is-finite' +import 'core-js/features/number/is-integer' +import 'core-js/features/number/is-nan' +import 'core-js/features/number/is-safe-integer' +import 'core-js/features/number/max-safe-integer' +import 'core-js/features/number/min-safe-integer' +import 'core-js/features/object/entries' +import 'core-js/features/object/get-own-property-descriptors' +import 'core-js/features/object/is' +import 'core-js/features/object/values' +import 'core-js/features/reflect' +import 'core-js/features/regexp' +import 'core-js/features/set' +import 'core-js/features/symbol' +import 'core-js/features/symbol/async-iterator' +import 'core-js/features/string/code-point-at' +import 'core-js/features/string/ends-with' +import 'core-js/features/string/from-code-point' +import 'core-js/features/string/includes' +import 'core-js/features/string/iterator' +import 'core-js/features/string/pad-start' +import 'core-js/features/string/pad-end' +import 'core-js/features/string/raw' +import 'core-js/features/string/repeat' +import 'core-js/features/string/starts-with' +import 'core-js/features/string/trim-left' +import 'core-js/features/string/trim-right' +import 'core-js/features/weak-map' +import 'core-js/features/weak-set' +import 'core-js/features/promise' +import 'core-js/features/promise/all-settled' +import 'core-js/features/promise/finally' // Specialized Packages: -import 'promise-polyfill/src/polyfill' import 'whatwg-fetch' import 'url-polyfill' import assign from 'object-assign' diff --git a/test/integration/production/pages/bad-promise.js b/test/integration/production/pages/bad-promise.js new file mode 100644 index 000000000000000..ad186e3c1a009aa --- /dev/null +++ b/test/integration/production/pages/bad-promise.js @@ -0,0 +1,12 @@ +export default () => { + if (typeof window !== 'undefined') { + window.didRender = true + } + return ( + <> + ")},isSubmissionResponseMessage:function(e,t){var n,r,i,o;null==t&&(t=[]);n=e.origin&&t.indexOf(e.origin)>-1;return n&&null!=(null!=(r=e.data)?r.accepted:void 0)&&(null!=(i=e.data)?i.formGuid:void 0)&&(null!=(o=e.data)?o.conversionId:void 0)},isInViewport:function(e){var t,n;n=e.getBoundingClientRect();t=document.documentElement;return n.top>=0&&n.left>=0&&n.bottom<=(window.innerHeight||t.clientHeight)&&n.right<=(window.innerWidth||t.clientWidth)},isShareableLink:function(){return/share\.hsforms(qa)?\.(com|net)|\/forms-standalone\//.test(window.location.href)},_legacyCurrentScript:function(t){var n,r;r=document.getElementsByTagName("script");n=this.filter(r,function(n){return function(n){var r;if(n.src.length)return!1;if(n.getAttribute(e))return!1;r=n.innerHTML;!/^\s*hbspt\.forms\.create\(/.test(r);return r.indexOf(t)>-1?!0:void 0}}(this));return n.length>0?n[0]:r[r.length-1]},getCurrentScript:function(e){return document.currentScript?document.currentScript:this._legacyCurrentScript(e)},hasFormValidityChanged:function(e,t){var n;for(n in e){if(!e.hasOwnProperty(n))return;if(!t.hasOwnProperty(n)||e[n].valid===!t[n].valid)return!0}for(n in t){if(!t.hasOwnProperty(n))return;if(!e.hasOwnProperty(n)||t[n].valid===!e[n].valid)return!0}return!1},isEmpty:function(e){var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0},removeEmpty:function(e){var t,n,r;n={};for(t in e){r=e[t];null!==r&&void 0!==r&&""!==r&&(n[t]=r)}return n},parseObjWithDefault:function(e,t){var n;try{n=JSON.parse(e);n=this.removeEmpty(n)}catch(r){n=t}return n},mergeStyles:function(e,t){var n,r,i;null==e&&(e={});null==t&&(t={});i=this.extend({},t);for(r in e)if(e[r]){n=r;switch(r){case"fontColor":n="labelTextColor";break;case"buttonFontColor":n="submitFontColor";break;case"buttonBackgroundColor":n="submitColor"}t[n]||(i[n]=e[r])}return i},isSmartGroup:function(e){return e.isSmartGroup||e["default"]===!1},stripCustomStyleProps:function(e){var t;t={};(null!=e?e.backgroundWidth:void 0)&&(t.backgroundWidth=e.backgroundWidth);(null!=e?e.fontFamily:void 0)&&(t.fontFamily=e.fontFamily);return t},shouldRenderShell:function(e,t){var n,r,i;return e.shell?!1:u.isShareableLink()?!1:u.isCos(e)?!1:(null!=t&&null!=(n=t.scopes)?n.renderShell:void 0)?!0:(null!=t&&null!=(r=t.scopes)?r.rawHtmlAccess:void 0)&&u.shouldRenderFormRawHtml(e,null!=t?t.formData:void 0)?!1:e.hasOwnProperty("css")?!1:(null!=t&&null!=(i=t.formData)?i.themeName:void 0)&&t.formData.themeName!==s.legacyThemeName?!0:!1},getDomainFromUrl:function(e){var t;t=e.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i);return t&&t[1]}};if(!u.currentScript)if(document.currentScript)u.currentScript=document.currentScript;else{c=document.getElementsByTagName("script");u.currentScript=c[c.length-1]}hns("hubspot.utils",u)}).call(this);(function(){var e;e=function(){function e(){}var t,n;n={da:"da",de:"de",el:"el",en:"en","es-mx":"es-mx",es:"es",fi:"fi",fr:"fr",it:"it",ja:"ja",nl:"nl",pl:"pl","pt-br":"pt-br",sv:"sv","zh-cn":"zh-cn","zh-hk":"zh-hk"};t="en";e.prototype.getBestSupportedLocale=function(e){return this.getBestSupportedLocaleFromList([e])};e.prototype.getBestSupportedLocaleFromList=function(e){var n,r,i,o;for(r=0,i=e.length;i>r;r++){n=e[r];o=this._maybeFindMatch(n);if(null!=o)return o}return t};e.prototype._maybeFindMatch=function(e){var t;e=this._normalizeLocale(e);if(e in n)return e;t=this._extractLanguage(e);return t in n?t:void 0};e.prototype._normalizeLocale=function(e){e=e||"";return e.toLowerCase().replace("_","-")};e.prototype._extractLanguage=function(e){return e.split("-")[0]};return e}();hns("hubspot.locale_utils",new e)}).call(this);(function(){var e;e=function(){function e(){}var t,n,r,i;t={AF:"+93",AL:"+355",DZ:"+213",AS:"+1684",AD:"+376",AO:"+244",AI:"+1264",AG:"+1268",AR:"+54",AM:"+374",AW:"+297",AU:"+61",AT:"+43",AZ:"+994",BS:"+1242",BH:"+973",BD:"+880",BB:"+1246",BY:"+375",BE:"+32",BZ:"+501",BJ:"+229",BM:"+1441",BT:"+975",BO:"+591",BA:"+387",BW:"+267",BR:"+55",IO:"+246",VG:"+1284",BN:"+673",BG:"+359",BF:"+226",BI:"+257",KH:"+855",CM:"+237",CA:"+1",CV:"+238",BQ:"+599",KY:"+1345",CF:"+236",TD:"+235",CL:"+56",CN:"+86",CO:"+57",KM:"+269",CD:"+243",CG:"+242",CK:"+682",CR:"+506",CI:"+225",HR:"+385",CU:"+53",CW:"+599",CY:"+357",CZ:"+420",DK:"+45",DJ:"+253",DM:"+1767",DO:"+1",EC:"+593",EG:"+20",SV:"+503",GQ:"+240",ER:"+291",EE:"+372",ET:"+251",FK:"+500",FO:"+298",FJ:"+679",FI:"+358",FR:"+33",GF:"+594",PF:"+689",GA:"+241",GM:"+220",GE:"+995",DE:"+49",GH:"+233",GI:"+350",GR:"+30",GL:"+299",GD:"+1473",GP:"+590",GU:"+1671",GT:"+502",GN:"+224",GW:"+245",GY:"+592",HT:"+509",HN:"+504",HK:"+852",HU:"+36",IS:"+354",IN:"+91",ID:"+62",IR:"+98",IQ:"+964",IE:"+353",IL:"+972",IT:"+39",JM:"+1876",JP:"+81",JO:"+962",KZ:"+7",KE:"+254",KI:"+686",KW:"+965",KG:"+996",LA:"+856",LV:"+371",LB:"+961",LS:"+266",LR:"+231",LY:"+218",LI:"+423",LT:"+370",LU:"+352",MO:"+853",MK:"+389",MG:"+261",MW:"+265",MY:"+60",MV:"+960",ML:"+223",MT:"+356",MH:"+692",MQ:"+596",MR:"+222",MU:"+230",MX:"+52",FM:"+691",MD:"+373",MC:"+377",MN:"+976",ME:"+382",MS:"+1664",MA:"+212",MZ:"+258",MM:"+95",NA:"+264",NR:"+674",NP:"+977",NL:"+31",NC:"+687",NZ:"+64",NI:"+505",NE:"+227",NG:"+234",NU:"+683",NF:"+672",KP:"+850",MP:"+1670",NO:"+47",OM:"+968",PK:"+92",PW:"+680",PS:"+970",PA:"+507",PG:"+675",PY:"+595",PE:"+51",PH:"+63",PL:"+48",PT:"+351",PR:"+1",QA:"+974",RE:"+262",RO:"+40",RU:"+7",RW:"+250",BL:"+590",SH:"+290",KN:"+1869",LC:"+1758",MF:"+590",PM:"+508",VC:"+1784",WS:"+685",SM:"+378",ST:"+239",SA:"+966",SN:"+221",RS:"+381",SC:"+248",SL:"+232",SG:"+65",SX:"+1721",SK:"+421",SI:"+386",SB:"+677",SO:"+252",ZA:"+27",KR:"+82",SS:"+211",ES:"+34",LK:"+94",SD:"+249",SR:"+597",SZ:"+268",SE:"+46",CH:"+41",SY:"+963",TW:"+886",TJ:"+992",TZ:"+255",TH:"+66",TL:"+670",TG:"+228",TK:"+690",TO:"+676",TT:"+1868",TN:"+216",TR:"+90",TM:"+993",TC:"+1649",TV:"+688",VI:"+1340",UG:"+256",UA:"+380",AE:"+971",GB:"+44",US:"+1",UY:"+598",UZ:"+998",VU:"+678",VA:"+39",VE:"+58",VN:"+84",WF:"+681",YE:"+967",ZM:"+260",ZW:"+263"};i={de:"DE",en:"US",es:"ES",fi:"FI",fr:"FR",it:"IT",ja:"JP",nl:"NL",sv:"SE"};r={AF:"Afghanistan (‫افغانستان‬‎)",AL:"Albania (Shqipëri)",DZ:"Algeria (‫الجزائر‬‎)",AS:"American Samoa",AD:"Andorra",AO:"Angola",AI:"Anguilla",AG:"Antigua and Barbuda",AR:"Argentina",AM:"Armenia (Հայաստան)",AW:"Aruba",AU:"Australia",AT:"Austria (Österreich)",AZ:"Azerbaijan (Azərbaycan)",BS:"Bahamas",BH:"Bahrain (‫البحرين‬‎)",BD:"Bangladesh (বাংলাদেশ)",BB:"Barbados",BY:"Belarus (Беларусь)",BE:"Belgium (België)",BZ:"Belize",BJ:"Benin (Bénin)",BM:"Bermuda",BT:"Bhutan (འབྲུག)",BO:"Bolivia",BA:"Bosnia and Herzegovina (Босна и Херцеговина)",BW:"Botswana",BR:"Brazil (Brasil)",IO:"British Indian Ocean Territory",VG:"British Virgin Islands",BN:"Brunei",BG:"Bulgaria (България)",BF:"Burkina Faso",BI:"Burundi (Uburundi)",KH:"Cambodia (កម្ពុជា)",CM:"Cameroon (Cameroun)",CA:"Canada",CV:"Cape Verde (Kabu Verdi)",BQ:"Caribbean Netherlands",KY:"Cayman Islands",CF:"Central African Republic (République centrafricaine)",TD:"Chad (Tchad)",CL:"Chile",CN:"China (中国)",CO:"Colombia",KM:"Comoros (‫جزر القمر‬‎)",CD:"Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)",CG:"Congo (Republic) (Congo-Brazzaville)",CK:"Cook Islands",CR:"Costa Rica",CI:"Côte d’Ivoire",HR:"Croatia (Hrvatska)",CU:"Cuba",CW:"Curaçao",CY:"Cyprus (Κύπρος)",CZ:"Czech Republic (Česká republika)",DK:"Denmark (Danmark)",DJ:"Djibouti",DM:"Dominica",DO:"Dominican Republic (República Dominicana)",EC:"Ecuador",EG:"Egypt (‫مصر‬‎)",SV:"El Salvador",GQ:"Equatorial Guinea (Guinea Ecuatorial)",ER:"Eritrea",EE:"Estonia (Eesti)",ET:"Ethiopia",FK:"Falkland Islands (Islas Malvinas)",FO:"Faroe Islands (Føroyar)",FJ:"Fiji",FI:"Finland (Suomi)",FR:"France",GF:"French Guiana (Guyane française)",PF:"French Polynesia (Polynésie française)",GA:"Gabon",GM:"Gambia",GE:"Georgia (საქართველო)",DE:"Germany (Deutschland)",GH:"Ghana (Gaana)",GI:"Gibraltar",GR:"Greece (Ελλάδα)",GL:"Greenland (Kalaallit Nunaat)",GD:"Grenada",GP:"Guadeloupe",GU:"Guam",GT:"Guatemala",GN:"Guinea (Guinée)",GW:"Guinea-Bissau (Guiné Bissau)",GY:"Guyana",HT:"Haiti",HN:"Honduras",HK:"Hong Kong (香港)",HU:"Hungary (Magyarország)",IS:"Iceland (Ísland)",IN:"India (भारत)",ID:"Indonesia",IR:"Iran (‫ایران‬‎)",IQ:"Iraq (‫العراق‬‎)",IE:"Ireland",IL:"Israel (‫ישראל‬‎)",IT:"Italy (Italia)",JM:"Jamaica",JP:"Japan (日本)",JO:"Jordan (‫الأردن‬‎)",KZ:"Kazakhstan (Казахстан)",KE:"Kenya",KI:"Kiribati",KW:"Kuwait (‫الكويت‬‎)",KG:"Kyrgyzstan (Кыргызстан)",LA:"Laos (ລາວ)",LV:"Latvia (Latvija)",LB:"Lebanon (‫لبنان‬‎)",LS:"Lesotho",LR:"Liberia",LY:"Libya (‫ليبيا‬‎)",LI:"Liechtenstein",LT:"Lithuania (Lietuva)",LU:"Luxembourg",MO:"Macau (澳門)",MK:"Macedonia (FYROM) (Македонија)",MG:"Madagascar (Madagasikara)",MW:"Malawi",MY:"Malaysia",MV:"Maldives",ML:"Mali",MT:"Malta",MH:"Marshall Islands",MQ:"Martinique",MR:"Mauritania (‫موريتانيا‬‎)",MU:"Mauritius (Moris)",MX:"Mexico (México)",FM:"Micronesia",MD:"Moldova (Republica Moldova)",MC:"Monaco",MN:"Mongolia (Монгол)",ME:"Montenegro (Crna Gora)",MS:"Montserrat",MA:"Morocco (‫المغرب‬‎)",MZ:"Mozambique (Moçambique)",MM:"Myanmar (Burma) (မြန်မာ)",NA:"Namibia (Namibië)",NR:"Nauru",NP:"Nepal (नेपाल)",NL:"Netherlands (Nederland)",NC:"New Caledonia (Nouvelle-Calédonie)",NZ:"New Zealand",NI:"Nicaragua",NE:"Niger (Nijar)",NG:"Nigeria",NU:"Niue",NF:"Norfolk Island",KP:"North Korea (조선 민주주의 인민 공화국)",MP:"Northern Mariana Islands",NO:"Norway (Norge)",OM:"Oman (‫عُمان‬‎)",PK:"Pakistan (‫پاکستان‬‎)",PW:"Palau",PS:"Palestine (‫فلسطين‬‎)",PA:"Panama (Panamá)",PG:"Papua New Guinea",PY:"Paraguay",PE:"Peru (Perú)",PH:"Philippines",PL:"Poland (Polska)",PT:"Portugal",PR:"Puerto Rico",QA:"Qatar (‫قطر‬‎)",RE:"Réunion (La Réunion)",RO:"Romania (România)",RU:"Russia (Россия)",RW:"Rwanda",BL:"Saint Barthélemy (Saint-Barthélemy)",SH:"Saint Helena",KN:"Saint Kitts and Nevis",LC:"Saint Lucia",MF:"Saint Martin (Saint-Martin (partie française))",PM:"Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)",VC:"Saint Vincent and the Grenadines",WS:"Samoa",SM:"San Marino",ST:"São Tomé and Príncipe (São Tomé e Príncipe)",SA:"Saudi Arabia (‫المملكة العربية السعودية‬‎)",SN:"Senegal (Sénégal)",RS:"Serbia (Србија)",SC:"Seychelles",SL:"Sierra Leone",SG:"Singapore",SX:"Sint Maarten",SK:"Slovakia (Slovensko)",SI:"Slovenia (Slovenija)",SB:"Solomon Islands",SO:"Somalia (Soomaaliya)",ZA:"South Africa",KR:"South Korea (대한민국)",SS:"South Sudan (‫جنوب السودان‬‎)",ES:"Spain (España)",LK:"Sri Lanka (ශ්‍රී ලංකාව)",SD:"Sudan (‫السودان‬‎)",SR:"Suriname",SZ:"Swaziland",SE:"Sweden (Sverige)",CH:"Switzerland (Schweiz)",SY:"Syria (‫سوريا‬‎)",TW:"Taiwan (台灣)",TJ:"Tajikistan",TZ:"Tanzania",TH:"Thailand (ไทย)",TL:"Timor-Leste",TG:"Togo",TK:"Tokelau",TO:"Tonga",TT:"Trinidad and Tobago",TN:"Tunisia (‫تونس‬‎)",TR:"Turkey (Türkiye)",TM:"Turkmenistan",TC:"Turks and Caicos Islands",TV:"Tuvalu",VI:"U.S. Virgin Islands",UG:"Uganda",UA:"Ukraine (Україна)",AE:"United Arab Emirates (‫الإمارات العربية المتحدة‬‎)",GB:"United Kingdom",US:"United States",UY:"Uruguay",UZ:"Uzbekistan (Oʻzbekiston)",VU:"Vanuatu",VA:"Vatican City (Città del Vaticano)",VE:"Venezuela",VN:"Vietnam (Việt Nam)",WF:"Wallis and Futuna",YE:"Yemen (‫اليمن‬‎)",ZM:"Zambia",ZW:"Zimbabwe"};n=Object.keys(t);e.prototype.getCountryCodes=function(){return n};e.prototype.getDefaultCountryCode=function(){return"US"};e.prototype.getExtensionFromCountryCode=function(e){return t[e]};e.prototype.getCountryNameFromCountryCode=function(e){return r[e]};e.prototype.getCountryCodeFromLocale=function(e){return i[e]};e.prototype.getCountryCodeFromKnownProperties=function(e){null==e&&(e={});return this.getExtensionFromCountryCode(e.hs_calculated_phone_number_country_code)?e.hs_calculated_phone_number_country_code:void 0};return e}();hns("hubspot.phone_utils",new e)}).call(this);(function(){var e,t,n={}.hasOwnProperty;if(!hubspot.form.api){t={};e=function(r){var i,o,a,s,l,c;i=null;o={};a={};l=[];s={id:r,onReady:function(e){return l.push(e)},hasField:function(e){return null!=o[e]},getField:function(e){return o[e]},getFields:function(){var e,t,r;t=[];for(e in o)if(n.call(o,e)){r=o[e];t.push(r)}return t},setFieldValue:function(e,t){var n;n=a[e];if(!n.setFieldValue)throw new Error("cannot set value for field");return n.setFieldValue(t)},setSubmitText:function(e){var t;t=this._getComponent();return t.setSubmitText(e)},shouldSubmitForm:function(e){var t;t=this._getComponent();return t.addShouldSubmitHandler(e)},getMetaData:function(e){var t;t=this._getComponent();return t.getMetaDataValue(e)},_setSubmitKey:function(e){var t;t=this.getField("Submit");return t.setSubmitKey(e)},_getComponent:function(){return i},_registerField:function(e,t){return o[e]=t},_registerInput:function(e,t){return a[e]=t},_triggerReady:function(){i=this;l.forEach(function(e){return e.call(c)});return e.singletonReadyQueue.forEach(function(e){return e.call(e,c)})}};t[r]=s;c=s;return s};e.getForm=function(e){return t[e]};e.getFormForEl=function(e){return t[e.getAttribute("data-form-id")]};e.getForms=function(){var e,r,i;r=[];for(e in t)if(n.call(t,e)){i=t[e];r.push(i)}return r};e.singletonReadyQueue=[];e.onFormReady=function(e){return this.singletonReadyQueue.push(e)};e.reset=function(){this.singletonReadyQueue.length=0;return t={}};hns("hubspot.form.api",e)}}).call(this);(function(){var e,t,n,r;r=hns("hubspot.utils");t=["_currentElement","Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings."];n={setupErrorReporter:function(e){return this.errorReporter=new OutpostErrorReporter("formsnextembed",{env:r.isQA()?"QA":"PROD",disabled:!1,tags:{formGuid:e.formId,portalId:e.portalId,isCOS:r.isCos(e),version:window.hubspot.formsnext.version}})},getBlacklistedErrorMessages:function(){return t},report:function(e,n){var r,i,o,a,s;if(e&&"test"!==(null!=(a=hubspot.server)?a.env:void 0)){for(i=0,o=t.length;o>i;i++){r=t[i];if((null!=(s=e.message)?s.indexOf(r):void 0)>-1)return}return this.errorReporter.report(e,n)}},addCookies:function(e){return this.errorReporter?this.errorReporter.addCookies(e):void 0}};null==hubspot.form&&(hubspot.form={});null==(e=hubspot.form).lib&&(e.lib={});hubspot.form.lib.errorReport=n}).call(this);(function(){var e,t,n,r,i;r=window.reqwest;i=hns("hubspot.utils");t="https://hubspot-forms-static-embed.s3.amazonaws.com";n=".json.gz";e=function(){function e(e,r,i){"local"===e&&(e="qa");e=e||"prod";this.url=t+"/"+e+"/"+r+"/"+i+n}e.prototype.fetch=function(){return r({url:this.url,type:"json",method:"get",crossOrigin:!0})};return e}();hns("hubspot.FallbackEmbedClient",e)}).call(this);(function(){var e;e=function(e){var t,n,r,i;i=[];n=0;if(!e.elements)return i;for(;n0)return this.forceValidate()}catch(r){}},handleJqueryChange:function(e){var t;t={target:e.target};return this.handleChangeAndValidate(t)},setFieldValue:function(e){this.setState({value:e});return"function"==typeof this.handleBlur?this.handleBlur():void 0},forceValidate:function(){var e,t,n;return this.constructor===("undefined"!=typeof hubspot&&null!==hubspot&&null!=(e=hubspot.form)&&null!=(t=e.components)&&null!=(n=t.inputs)?n.Phone:void 0)?this.validatePhoneNumberOnChange():this.validate()}};hns("hubspot.form.mixins.InputMixin",e)}).call(this);(function(){var e,t,n,r,i,o;n=window.React;e=hubspot.form.mixins.I18nMixin;o=hns("hubspot.form.constants");t=window.Promise;r={mixins:[e],componentDidMount:function(){return this.props.registerValidator(this._validate)},componentWillUnmount:function(){return this.props.deregisterValidator(this._validate)},validateTrimmed:function(){return this.props.required&&""===hubspot.utils.trim(this.state.value)?{valid:!1,message:this.i18nTranslate("formsNext.required"),type:"REQUIRED_FIELD"}:{valid:!0}},validateMaxInputLength:function(){return hubspot.utils.trim(this.state.value).length>o.maxInputLength?{valid:!1,message:this.i18nTranslate("formsNext.inputTooLarge")}:{valid:!0}},validateRequired:function(e){var t,r,i,o;o=!0;i=[];r=[];t=null!=n.findDOMNode(this).validity&&!n.findDOMNode(this).validity.valid;(this.props.required&&!e||t)&&(o=!1);this.setState({validationArmed:!0});if(t&&this.browserInvalidError){i.push(this.browserInvalidError);r.push("REQUIRED_FIELD")}else if(!o){i.push(this.i18nTranslate("formsNext.required"));r.push("REQUIRED_FIELD")}return{name:this.props.name,valid:o,messages:i,errorTypes:r}},_validate:function(e){null==e&&(e=this.validators);return new t(function(n){return function(r){var i,o,a,s,l,c,u,p;if(!n.state.value){p=n.validateRequired(!1);return r({name:p.name,valid:p.valid,messages:p.messages,errorTypes:p.errorTypes})}if(null!=e?!e.length:!0)return r({name:n.props.name,valid:!0,messages:[]});u=[];l=!0;s=[];i=[];for(o=0,a=e.length;a>o;o++){c=e[o];u.push(n[c].apply(n))}t.all(u).then(function(e){var t,o,a,c;l=!0;for(o=0,a=e.length;a>o;o++){c=e[o];t=Array.isArray(c)?n.extractValidation(c):n.extractValidation([c]);null!=(null!=t?t.messages:void 0)&&(s=s.concat(t.messages));null!=(null!=t?t.valid:void 0)&&(l=t.valid);null!=(null!=t?t.errorTypes:void 0)&&(i=i.concat(t.errorTypes))}return r({name:n.props.name,valid:l,messages:s,errorTypes:i})});return n.setState({validationArmed:!0})}}(this))},validatePhoneNumberOnChange:function(){var e;e=this.validateRequired(!0);return this.props.setFieldValidity(e.name,e.valid,e.messages,e.errorTypes)},extractValidation:function(e){var t,n,r,i;t={};for(n=0,r=e.length;r>n;n++){i=e[n];if(i.info){t.messages||(t.messages=[]);t.messages=t.messages.concat([i.message])}else if(!i.valid){t.messages||(t.messages=[]);t.valid=!1;t.messages=t.messages.concat([i.message]);t.errorTypes||(t.errorTypes=[]);t.errorTypes=t.errorTypes.concat([i.type])}}return t},validate:function(e){return this._validate(e).then(function(e){return function(t){return e.props.setFieldValidity(t.name,t.valid,t.messages,t.errorTypes)}}(this))}};null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).mixins&&(i.mixins={});hubspot.form.mixins.ValidatorMixin=r}).call(this);(function(){var e,t,n,r,i,o;n=window.React;t=hubspot.form.mixins.InputMixin;r=hubspot.form.mixins.ValidatorMixin;e=n.createClass({displayName:"BooleanCheckbox",mixins:[r,t],componentDidMount:function(){return this.props.registerBoolCheckBoxField(this.props.name)},componentWillUnmount:function(){return this.props.deregisterBoolCheckBoxField(this.props.name)},getRequiredHtml:function(){return'*'},getChecked:function(){var e;return"true"===this.props.defaultValue||(null!=(e=this.props.selectedOptions)?e.indexOf("true"):void 0)>-1},getLabel:function(){var e,t,n;e=null!=(n=this.props.translations)?n.fieldLabels:void 0;t=null!=(null!=e?e[this.props.name]:void 0)?e[this.props.name]:this.props.label;this.props.required&&(t+=this.getRequiredHtml());return t},handleChangeAndValidate:function(e){return this.handleChange(e)},handleChange:function(e){return this.setState({value:e.target.checked,needsValidation:!0,validationArmed:!1})},getInitialState:function(){return{value:this.getChecked(),validationArmed:!1}},componentDidUpdate:function(){if(this.state.needsValidation){this.props.setFieldValue(this.state.value);this.validate();return this.setState({needsValidation:!1})}},render:function(){return n.createElement("ul",{className:"inputs-list",required:this.props.required},n.createElement("li",{className:"hs-form-"+this.props.fieldType},n.createElement("label",{htmlFor:this.props.name+"-"+this.props.uniqueId,className:"hs-form-"+this.props.fieldType+"-display"},n.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:"hs-input",type:"checkbox",name:this.props.name,value:"true",checked:this.state.value,onChange:this.handleChange}),n.createElement("span",{dangerouslySetInnerHTML:{__html:this.getLabel()}}))))}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.BooleanCheckbox=e}).call(this);(function(){var e,t,n,r;t=window.React;e=t.createClass({displayName:"Context",userAgent:"undefined"!=typeof navigator&&null!==navigator?navigator.userAgent:void 0,recentFieldsCookie:window.hubspot.utils.getRecentFieldsCookie(),source:window.hubspot.utils.getCodeVersion(),disableCookieSubmission:!1,componentWillMount:function(){var e,t,n,r,i;t=(null!=(n=window.hubspot)&&null!=(r=n.form)&&null!=(i=r.lib)?i.errorReport:void 0)||{};this.isHostedOnHubspot=window.hubspot.utils.isHostedOnHubspot(null!=this.props.shell);try{return window.hubspot.form.formFetcher.fetchAnalytics(this.props.shell,this.props.hutk,this.props.canonicalUrl,this.props.contentType).then(function(e){return function(n){var r,i;i=e.props.hutk;r=e.props.contentType;if(!i){if(null!=n?!n.hutk:!0){t.report(new Error("No utk present in analytics callback"),{cookies:document.cookie});return}i=n.hutk}!r&&(null!=n?n.contentType:void 0)&&(r=n.contentType);t.addCookies({hutk:i});return i!==e.props.hutk||r!==e.props.contentType?e.setState({pageUrl:e.props.isVideo&&null!=n?n.canonicalUrl:void 0,hutk:i,contentType:r}):void 0}}(this)).done()}catch(o){e=o;return t.report(e)}},getMetaDataForSubmit:function(){var e,t,n,r,i,o;i={};if(this.props.metaData){o=this.props.metaData;for(t=0,n=o.length;n>t;t++){r=o[t];i[r.name]=r.value;"disableCookieSubmission"===r.name&&(this.disableCookieSubmission=!0)}}e=hubspot.utils.getLocalStorage("HS_FORM_DEBUG");e&&(i.debugMode=!0);return i},getContextString:function(){var e,t,n;t=this.getMetaDataForSubmit();e={pageUrl:this.props.pageUrl||this.state.pageUrl||hubspot.utils.getCurrentUrl(),pageTitle:this.props.pageTitle||document.title,source:this.source,timestamp:this.props.timestamp,userAgent:this.userAgent,referrer:this.props.referrer||document.referrer,originalEmbedContext:this.props.originalEmbedContext,formName:this.props.formName,recentFieldsCookie:this.recentFieldsCookie||null,pageId:this.props.pageId,path:this.props.path,referrerPath:this.props.referrerPath,pageName:this.props.pageName,boolCheckBoxFields:this.props.boolCheckBoxFields.toString(),dateFields:this.props.dateFields.toString(),redirectUrl:this.props.redirectUrl,variantId:this.props.variantId,formInstanceId:this.props.formInstanceId,smartFields:this.props.hiddenSmartFields,urlParams:this.props.urlParams,notificationRecipients:this.props.notificationRecipients,formValidity:this.props.formValidity,domFields:this.props.domFields,rawInlineMessage:this.props.rawInlineMessage,hsFormKey:this.props.hsFormKey,formTarget:this.props.formTarget,followUpEmailId:this.props.followUpEmailId,followUpEmailCampaignId:this.props.followUpEmailCampaignId,followUpId:this.props.followUpId,sfdcCampaignId:this.props.sfdcCampaignId,goToWebinarWebinarKey:this.props.goToWebinarWebinarKey,abTestId:this.props.abTestId,correlationId:this.props.correlationId,contentType:this.state.contentType,hutk:this.state.hutk};this.disableCookieSubmission&&(e.disableCookieSubmission=!0);this.isHostedOnHubspot&&(e.isHostedOnHubspot=this.isHostedOnHubspot);this.props.isFallback&&(e.isFallback=this.props.isFallback);if(this.props.isCookieReset){e.isCookieReset=this.props.isCookieReset;e.hutk=void 0}e=hubspot.utils.extend(this.props.extraMetaData,this.props.realUserMonitoring,t,e);n=function(e,t){return null==t||0===t.length||"object"==typeof t&&0===Object.keys(t).length?void 0:t};return JSON.stringify(e,n)},getInitialState:function(){return{hutk:this.props.hutk,contentType:this.props.contentType}},render:function(){return t.createElement("input",{name:"hs_context",type:"hidden",value:this.getContextString()})}});null==hubspot.form&&(hubspot.form={});null==(n=hubspot.form).components&&(n.components={});null==(r=hubspot.form.components).inputs&&(r.inputs={});hubspot.form.components.inputs.Context=e}).call(this);(function(){var e,t,n,r,i,o,a;n=window.React;r=hubspot.form.mixins.ValidatorMixin;t=hubspot.form.mixins.InputMixin;a=hns("hubspot.utils");e=n.createClass({displayName:"DateInput",mixins:[r,t],validationRegex:/^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$/,validators:["validateDate"],validateDate:function(){return""===this.state.value||this.validationRegex.test(this.state.value)?{valid:!0}:{valid:!1,message:this.i18nTranslate("formsNext.invalidDate")}},utcDateToString:function(e){var t,n,r,i,o;o=e.getUTCFullYear().toString();i=(e.getUTCMonth()+1).toString();t=e.getUTCDate().toString();r=i.length<2?"0"+i:i;n=t.length<2?"0"+t:t;return o+"-"+r+"-"+n},componentWillMount:function(){return this.shouldUsePikaday=!a.isBrowserCompatibleWithNativeDatePicker()},componentDidMount:function(){this.props.registerDateField(this.props.name);return this.shouldUsePikaday?this.setupPikaday():void 0},setupPikaday:function(){return this.picker=new hbspt.forms.deps.Pikaday({field:n.findDOMNode(this),theme:"fn-date-picker",container:n.findDOMNode(this.refs.datepickerContainer),yearRange:[1900,(new Date).getFullYear()+10],defaultDate:this.convertDateOffset(new Date(this.state.value)),setDefaultDate:!0,i18n:{previousMonth:this.i18nTranslate("formsNext.previousMonth"),nextMonth:this.i18nTranslate("formsNext.nextMonth"),months:[this.i18nTranslate("formsNext.january"),this.i18nTranslate("formsNext.february"),this.i18nTranslate("formsNext.march"),this.i18nTranslate("formsNext.april"),this.i18nTranslate("formsNext.may"),this.i18nTranslate("formsNext.june"),this.i18nTranslate("formsNext.july"),this.i18nTranslate("formsNext.august"),this.i18nTranslate("formsNext.september"),this.i18nTranslate("formsNext.october"),this.i18nTranslate("formsNext.november"),this.i18nTranslate("formsNext.december")],weekdays:[this.i18nTranslate("formsNext.sunday"),this.i18nTranslate("formsNext.monday"),this.i18nTranslate("formsNext.tuesday"),this.i18nTranslate("formsNext.wednesday"),this.i18nTranslate("formsNext.thursday"),this.i18nTranslate("formsNext.friday"),this.i18nTranslate("formsNext.saturday")],weekdaysShort:[this.i18nTranslate("formsNext.sundayShort"),this.i18nTranslate("formsNext.mondayShort"),this.i18nTranslate("formsNext.tuesdayShort"),this.i18nTranslate("formsNext.wednesdayShort"),this.i18nTranslate("formsNext.thursdayShort"),this.i18nTranslate("formsNext.fridayShort"),this.i18nTranslate("formsNext.saturdayShort")]},onSelect:function(e){return function(){var t;t=e.convertDateToUTCDate(e.picker.getDate());e.setState({value:e.utcDateToString(t)});return e.validate()}}(this),onClose:function(e){return function(){return e.handleBlur()}}(this)})},getInitialState:function(){var e,t,n;n="";if(this.validationRegex.test(this.props.defaultValue))n=this.props.defaultValue;else{e=-1!==this.props.defaultValue.indexOf("/")||-1!==this.props.defaultValue.indexOf("-")?this.convertDateToUTCDate(new Date(this.props.defaultValue)):new Date(parseInt(this.props.defaultValue));t=this.utcDateToString(e);this.validationRegex.test(t)&&(n=t)}return{value:n}},getMinDate:function(){return"1900-01-01"},getMaxDate:function(){return(new Date).getFullYear()+10+"-01-01"},getTimezoneOffsetInMS:function(){return 60*(new Date).getTimezoneOffset()*1e3},convertDateOffset:function(e){var t;t=this.getTimezoneOffsetInMS();return new Date(Date.parse(e)+t)},convertDateToUTCDate:function(e){var t;t=Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0);return new Date(t)},getInputClass:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return e},handleChangeAndValidate:function(e){var t;if(this.validationRegex.test(e.target.value)&&e.target.value!==this.state.value){t=this.convertDateOffset(e.target.value);this.shouldUsePikaday&&this.picker.setDate(t);return this.handleBlur()}},handleFocus:function(){return this.shouldUsePikaday?this.picker.show():void 0},handleKeyDown:function(e){return 9===e.which?this.picker.hide():void 0},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},handleNativeChange:function(e){return this.setState({value:this.utcDateToString(e.target.valueAsDate)},function(){this.props.setFieldValue(this.state.value);return this.validate()})},renderPikadayInput:function(){return n.createElement("div",{className:"hs-dateinput"},n.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:this.getInputClass(),type:"text",name:this.props.name,required:this.props.required,value:this.state.value,readOnly:"readOnly",onChange:this.validate,onFocus:this.handleFocus,onKeyDown:this.handleKeyDown}),n.createElement("div",{ref:"datepickerContainer",className:"hs-datepicker",style:{position:"absolute",zIndex:1e4}}))},renderNativeInput:function(){return n.createElement("div",{className:"hs-dateinput"},n.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:this.getInputClass(),type:"date",name:this.props.name,required:this.props.required,value:this.state.value,min:this.getMinDate(),max:this.getMaxDate(),onChange:this.handleNativeChange}))},render:function(){return this.shouldUsePikaday?this.renderPikadayInput():this.renderNativeInput()}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.DateInput=e}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f;o=window.React;s=hubspot.form.mixins.ValidatorMixin;n=hubspot.form.mixins.InputMixin;p=window.reqwest;r=window.Promise;t=hns("hubspot.EmailValidationClient");f=hns("hubspot.utils");u=hns("hubspot.form.lib.errorReport");a=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;i=4e3;e=o.createClass({displayName:"Email",mixins:[s,n],validators:["validateEmailAndCheckResubscribe","validateMaxInputLength"],componentWillMount:function(){return this.debouncedValidate=f.debounce(this.validate,300)},acceptSuggestion:function(){return this.setState({value:this.state.suggestion,suggestion:"",needsValidation:!0})},requestResubscribe:function(){var e,t,n,r,o;t={portalId:this.props.portalId,resub_form_name:encodeURIComponent(document.title),resub_form_address:encodeURIComponent(window.location.href)};n=function(){var n;n=[];for(e in t){o=t[e];n.push(e+"="+o)}return n}().join("&");r="https://api.hubapi"+this.props.env+".com/email/v1/form-resubscribe/"+encodeURIComponent(this.state.value)+"/jsonp/initiate?"+n+"&callback=?";return p({url:r,type:hubspot.utils.getRequestType(),success:function(e){return function(t){if(t.success){window.hubspot._emailValidationAndResubCache[e.state.value].emailShouldResubscribe=!1;e.setState({resubscribed:!0,needsValidation:!0});return setTimeout(function(){return e.setState({resubscribed:!1,needsValidation:!0})},i)}}}(this)})},getEmailSuggestion:function(e){this.setState({suggestion:e});return[{valid:!1,message:this.i18nTranslate("formsNext.invalidEmail"),type:"INVALID_EMAIL"},{valid:!1,info:!0,message:{label:this.i18nTranslate("formsNext.emailSuggestion",{email:e}),callback:this.acceptSuggestion}}]},validateEmailFormat:function(e){return a.test(e)},validateEmailAndCheckResubscribe:function(){return new r(function(e){return function(n){var r,i,o,a;f.log("Validating email "+e.state.value);if(""===e.state.value||""===hubspot.utils.trim(e.state.value))return n(e.props.required?{valid:!1,message:e.i18nTranslate("formsNext.required",{type:"REQUIRED_FIELD"})}:{valid:!0});r=hubspot.utils.getEmailDomain(e.state.value);if(!e.validateEmailFormat(e.state.value))return n({valid:!1,message:e.i18nTranslate("formsNext.invalidEmailFormat"),type:"INVALID_EMAIL"});if(r&&e.state.blockedDomains.indexOf(r)>-1)return n({valid:!1,message:e.i18nTranslate("formsNext.manuallyBlockedEmailDomain",{domain:r}),type:"BLOCKED_DOMAIN"});if(e.state.resubscribed)return n({valid:!0,info:!0,message:e.i18nTranslate("formsNext.emailOptIn")});i=window.hubspot._emailValidationAndResubCache[e.state.value];a=window.hubspot._xhrCache;null!=a.emailValidationAndResub&&a.emailValidationAndResub.abort();o=new t({env:e.props.env,portalId:e.props.portalId,formsBaseUrl:e.props.formsBaseUrl});a.emailValidationAndResub=o.fetch({emailValue:e.state.value,includeFreemailSuggestions:!e.props.usingHubspotBlockedDomains,onSuccess:function(t){if(!i){window.hubspot._emailValidationAndResubCache[t.email]=t;f.log("Handling email validation response",t);return n(e.handleValidationResponse(t))}JSON.stringify(i)!==JSON.stringify(t)&&u.report(new Error("Cached emailValidationAndResub different from actual"),{cached:i,actual:t})},onError:function(){return n({valid:!0})}});if(i){f.log("Email validation found email in cache ",e.state.value,i);return n(e.handleValidationResponse(i))}}}(this))},handleValidationResponse:function(e){var t,n,r,i,o;o=!!e.success;n=!!e.emailShouldResubscribe;r=e.emailSuggestion;i=!!e.emailFree;if(!o)return r?this.getEmailSuggestion(r):{valid:!1,message:this.i18nTranslate("formsNext.invalidEmail"),type:"INVALID_EMAIL"};if(this.props.usingHubspotBlockedDomains&&i){t=hubspot.utils.getEmailDomain(this.state.value);return{valid:!1,message:this.i18nTranslate("formsNext.forbiddenEmailDomain",{domain:t}),type:"BLOCKED_DOMAIN"}}return o&&n&&!this.state.resubscribed?{valid:!0,info:!0,message:{label:this.i18nTranslate("formsNext.resubscribeMessage"),callback:this.requestResubscribe}}:{valid:!0}},getBlockedDomains:function(){var e,t,n,r,i,o,a;e=this.props.blockedDomains||[];if(this.props.validationData){a=this.props.validationData[0];i=a.split(",");for(n=0,r=i.length;r>n;n++){t=i[n];t=hubspot.utils.trim(t.toLowerCase());t=t.replace(/^@/g,"");t&&e.push(t)}(null!=(o=this.props.blockedDomains)?o.length:void 0)&&(e=e.concat(this.props.blockedDomains))}return e},handleChangeAndValidate:function(e,t){return e.target.value!==this.state.value?this.setState({value:e.target.value,validationArmed:!1},this.handleChange.bind(this,e)):void 0},componentDidUpdate:function(){if(this.state.needsValidation){this.validate();return this.setState({needsValidation:!1})}},getInitialState:function(){return{value:this.props.defaultValue,blockedDomains:this.getBlockedDomains(),suggestion:"",resubscribed:!1,needsValidation:!1}},handleChange:function(e){this.setState({value:e.target.value,validationArmed:!1});this.props.setFieldValue(e.target.value);return this.debouncedValidate()},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return o.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:"email",inputmode:"email",name:this.props.name,required:this.props.required,placeholder:this.props.placeholder,value:this.state.value,onChange:this.handleChange,onBlur:this.handleChange,autoComplete:this.props.autoCompleteLabel})}});null==hubspot.form&&(hubspot.form={});null==(l=hubspot.form).components&&(l.components={});null==(c=hubspot.form.components).inputs&&(c.inputs={});hubspot.form.components.inputs.Email=e}).call(this);(function(){var e,t,n,r,i,o,a,s=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};n=window.React;r=hubspot.form.mixins.ValidatorMixin;t=hubspot.form.mixins.InputMixin;a=hns("hubspot.utils");e=n.createClass({displayName:"Enum",mixins:[r,t],validators:["validateEnum"],getRole:function(e){"ul"===e&&"radio"===this.props.fieldType;return"li"===e&&"radio"===this.props.fieldType?"radio":"checkbox"},getUlClassString:function(){var e;e=["inputs-list","multi-container"];null==this.props.valid||this.props.valid||e.push(""+this.props.errorClass);if(this.state.numColumns){e.push("inline-list");e.push("inline-list-"+this.state.numColumns)}return e.join(" ")},getInputClassString:function(e){var t;null==e&&(e="");t=["hs-input",e];this.props.cms&&t.push("AutoFormInput");return t.join(" ")},validateEnum:function(){return this.props.required&&!this.state.value.length?{valid:!1,message:this.i18nTranslate("formsNext.missingOptionSelection"),type:"REQUIRED_FIELD"}:{valid:!0}},handleChangeAndValidate:function(e){return this.handleChange(e)},handleChange:function(e){var t,n;t=e.target.checked;n=e.target.value;return this.setState(function(e){var r,i;i="radio"===this.props.fieldType?[]:"string"==typeof e.value?[e.value]:e.value.slice();if(t)-1===i.indexOf(n)&&i.push(n);else{r=i.indexOf(n);r>-1&&i.splice(r,1)}return{value:i}})},getInitialState:function(){var e,t,n;t=this.parseInitialValue(this.props.selectedOptions);n=hubspot.utils.map(this.props.options,function(e){return e.value});e=hubspot.utils.filter(t,function(e){return s.call(n,e)>=0});return{value:e,numColumns:parseInt(a.getMetaDataValue(this.props.metaData,"numColumns")||0,10)}},parseInitialValue:function(e){return Array.isArray(e)?e:e?e.split(/,|;/).map(function(e){return e.trim()}):void 0},componentDidUpdate:function(e,t){if(t.value!==this.state.value){this.props.setFieldValue(this.state.value);return this.validate()}},renderOptions:function(){var e;e="label-"+this.props.name+"-"+this.props.uniqueId;return hubspot.utils.map(this.props.options,function(t){return function(r,i){var o,a;o=Array.isArray(t.state.value)?(a=r.value,s.call(t.state.value,a)>=0):r.value===t.state.value;return n.createElement("li",{key:r.value,className:"hs-form-"+t.props.fieldType,role:t.getRole("li")},n.createElement("label",{htmlFor:t.props.name+i+"-"+t.props.uniqueId,className:"hs-form-"+t.props.fieldType+"-display"},n.createElement("input",{id:t.props.name+i+"-"+t.props.uniqueId,className:t.getInputClassString(),type:t.props.fieldType,name:t.props.name,value:r.value,checked:o||!1,onChange:t.handleChange,"aria-labelledby":e}),n.createElement("span",{dangerouslySetInnerHTML:{__html:r.label}})))}}(this))},render:function(){return n.createElement("ul",{required:this.props.required,role:this.getRole("ul"),className:this.getUlClassString()},this.renderOptions())}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Enum=e}).call(this);(function(){var e,t,n,r,i;t=window.React;n=hubspot.form.mixins.ValidatorMixin;e=t.createClass({displayName:"File",mixins:[n],validators:["fileSizeValidator"],ONE_HUNDRED_MB:104857600,handleChangeAndValidate:function(e){return this.handleChange(e)},fileSizeValidator:function(){var e,t,n,r;r=this.getDOMNode().files;for(t=0,n=r.length;n>t;t++){e=r[t];if(e.size>this.ONE_HUNDRED_MB)return{valid:!1,message:this.i18nTranslate("formsNext.fileTooLarge")}}return{valid:!0}},handleChange:function(e){return this.setState({value:e.target.value,needsValidation:!0,validationArmed:!1})},getInitialState:function(){return{value:"",needsValidation:!1,validationArmed:!1}},componentDidUpdate:function(){if(this.state.needsValidation){this.props.setFieldValue(this.state.value);this.validate();return this.setState({needsValidation:!1})}},isMultiple:function(){var e,t,n,r;r=this.props.metaData;for(e=0,t=r.length;t>e;e++){n=r[e];if("isMultipleFileUpload"===n.name&&"true"===n.value)return!0}return!1},render:function(){return t.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:"hs-input",type:this.props.type,required:this.props.required,name:this.props.name,size:"30",onChange:this.handleChange,multiple:this.isMultiple()})}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});null==(i=hubspot.form.components).inputs&&(i.inputs={});hubspot.form.components.inputs.File=e}).call(this);(function(){var e,t,n,r,i,o,a;n=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;a=hns("hubspot.utils");t=n.createClass({displayName:"NumberInput",mixins:[r,e],validators:["validateNumber","validateMaxInputLength"],componentDidMount:function(){return this.browserInvalidError=this.i18nTranslate("formsNext.invalidNumber")},validateNumber:function(){var e,t,n,r;if(!hubspot.utils.isNumeric(this.state.value))return{valid:!1,message:this.i18nTranslate("formsNext.invalidNumber")};if(this.props.validationData){n=parseInt(this.props.validationData[0]);n=a.isNumeric(n)?n:null;t=parseInt(this.props.validationData[1])||null;r=parseFloat(this.state.value);e=this.props.validationData.length>2&&"false"===this.props.validationData[2]?!1:!0;if(e&&null!==n&&null!==t){if(r>t)return{valid:!1,message:this.i18nTranslate("formsNext.invalidNumberRangeTooLarge",{max:t})};if(n>r)return{valid:!1,message:this.i18nTranslate("formsNext.invalidNumberRangeTooSmall",{min:n})}}}return{valid:!0}},handleChangeAndValidate:function(e){return this.setState({value:e.target.value,validationArmed:!1},this.handleBlur)},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},getInitialState:function(){return{value:this.props.defaultValue,validationArmed:!1}},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return n.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:this.props.type,inputmode:"numeric",name:this.props.name,required:this.props.required,value:this.state.value,placeholder:this.props.placeholder,step:"any",onChange:this.handleChange,onBlur:this.handleBlur})}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.NumberInput=t}).call(this);(function(){var e,t,n,r,i,o,a,s,l;r=window.React;e=window.I18n;i=hubspot.form.mixins.ValidatorMixin;t=hubspot.form.mixins.InputMixin;l=hns("hubspot.utils");s=hns("hubspot.phone_utils");n=r.createClass({displayName:"Phone",mixins:[i,t],validators:["validateLength","validateFormat"],validateLength:function(){var e,t,n,r,i,o;n=this.state.dialCode||"";t=(""+n+this.state.value).replace(/[- +().x]/g,"");o=t.length;if(this.props.validationData){i=parseInt(this.props.validationData[0]);r=parseInt(this.props.validationData[1]);e=this.props.validationData.length>2&&"false"===this.props.validationData[2]?!1:!0;if(e&&null!==i&&null!==r){if(o>r)return{valid:!1,message:this.i18nTranslate("formsNext.phoneInvalidRangeTooLong",{max:r})};if(i>o)return{valid:!1,message:this.i18nTranslate("formsNext.phoneInvalidRangeTooShort",{min:i})}}return{valid:!0}}},validateFormat:function(){var e,t;e=/^\+?(((?:\(x?\d+\))|(?:x?\d+))[\-\.]?)+$/i;t=this.state.value.replace(/\s/g,"");return e.test(t)?{valid:!0}:{valid:!1,message:this.i18nTranslate("formsNext.phoneInvalidCharacters")}},handleChangeAndValidate:function(e){return"SELECT"===e.target.tagName?this.handleCountryCodeChange(e,this.handleBlur):this.handleChange(e,this.handleBlur)},handleChange:function(e,t){var n;null==t&&(t=function(){});n=e.target.value;this.state.isUsingCountryCodeSelect&&this.state.dialCode&&0===n.indexOf(this.state.dialCode)&&(n=n.substring(this.state.dialCode.length+1));return this.setState({value:n,validationArmed:!1},t)},handleCountryCodeChange:function(e,t){var n;null==t&&(t=function(){});n=s.getExtensionFromCountryCode(e.target.value);return this.setState({countryCode:e.target.value,dialCode:n,validationArmed:!1},t)},getInitialValues:function(){var t,n,r,i,o;t="";r="";o=this.props.defaultValue;i=!1;if(l.getMetaDataValue(this.props.metaData,"useCountryCodeSelect"))if(this.props.defaultValue){if(s.getCountryCodeFromKnownProperties(this.props.knownProperties)){t=s.getCountryCodeFromKnownProperties(this.props.knownProperties);r=s.getExtensionFromCountryCode(t);r&&(o=o.substring(r.length))}}else{n=this.props.countryCode;n=n||s.getCountryCodeFromLocale(e.locale);t=n||s.getDefaultCountryCode();r=s.getExtensionFromCountryCode(t)}i=t&&r;return{countryCode:t,dialCode:r,value:o,isUsingCountryCodeSelect:i +}},getInitialState:function(){return hubspot.utils.extend(this.getInitialValues(),{validationArmed:!1})},handleBlur:function(){this.props.setFieldValue(this.getValueToSubmit());return this.validate()},renderOptions:function(){return hubspot.utils.map(s.getCountryCodes(),function(e){return function(e,t){return r.createElement("option",{key:e,value:e},s.getCountryNameFromCountryCode(e))}}(this))},getValueToSubmit:function(){var e,t;t=this.state.value.replace(/^\s*0/,"");e=this.state.dialCode||"";return 0===this.state.value.length?"":""+e+t},renderNumberWithExtensionInputs:function(e){return r.createElement("div",{className:"hs-input hs-fieldtype-intl-phone"},r.createElement("select",{id:this.props.name+"_ext-"+this.props.uniqueId,required:this.props.required,name:"",className:e,value:this.state.countryCode,onChange:this.handleCountryCodeChange,onBlur:this.handleBlur},this.renderOptions()),r.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:"tel",inputmode:"tel",name:"",required:this.props.required,value:this.state.dialCode+" "+this.state.value,placeholder:this.props.placeholder,onChange:this.handleChange,onBlur:this.handleBlur,autoComplete:this.props.autoCompleteLabel}),r.createElement("input",{ref:"hiddenInput",name:this.props.name,className:"hs-input",type:"hidden",value:""+this.getValueToSubmit()}))},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return this.state.isUsingCountryCodeSelect?this.renderNumberWithExtensionInputs(e):r.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:"tel",inputmode:"tel",name:this.props.name,required:this.props.required,value:this.state.value,placeholder:this.props.placeholder,onChange:this.handleChange,onBlur:this.handleBlur,autoComplete:this.props.autoCompleteLabel})}});null==hubspot.form&&(hubspot.form={});null==(o=hubspot.form).components&&(o.components={});null==(a=hubspot.form.components).inputs&&(a.inputs={});hubspot.form.components.inputs.Phone=n}).call(this);(function(){var e,t,n,r,i,o;n=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;t=n.createClass({displayName:"RangeInput",mixins:[r,e],getInitialState:function(){return{value:this.props.defaultValue||this.props.min}},getDefaultProps:function(){return{min:0,max:10}},handleChangeAndValidate:function(e){this.setState({value:e.target.value,validationArmed:!0});this.props.setFieldValue(this.state.value);return this.validate()},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},render:function(){return n.createElement("div",{className:"hs-input-range-container"},n.createElement("div",{className:"hs-input-range"},n.createElement("span",{className:"hs-default-font-element"},this.props.min),n.createElement("input",{type:"range",value:this.state.value,min:this.props.min,max:this.props.max,onChange:this.handleChange,name:"range-field",className:"hs-input-range__slider"}),n.createElement("span",{className:"hs-default-font-element"},this.props.max)),n.createElement("div",{className:"hs-input-range-value-container"},n.createElement("span",{className:"hs-input"},this.state.value)))}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Range=t}).call(this);(function(){var e,t,n,r,i,o;n=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;o=hns("hubspot.utils");t=n.createClass({displayName:"RatingInput",mixins:[r,e],getInitialState:function(){return{value:this.props.defaultValue||this.props.min}},getDefaultProps:function(){return{min:0,max:10,isStar:!1}},handleChangeAndValidate:function(e){this.setState({value:e.target.value,validationArmed:!0});this.props.setFieldValue(this.state.value);return this.validate()},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},renderStar:function(e){var t;t=e<=this.state.value?"hs-input-rating__svg-is-selected":"";return n.createElement("svg",{viewBox:"0 0 51 48",className:""+t},n.createElement("path",{d:"m25,1 6,17h18l-14,11 5,17-15-10-15,10 5-17-14-11h18z"}))},renderOptions:function(){var e,t,r;e=function(){r=[];for(var e=t=this.props.min,n=this.props.max;n>=t?n>=e:e>=n;n>=t?e++:e--)r.push(e);return r}.apply(this);return o.map(e,function(e){return function(t){return n.createElement("label",{className:"hs-input-rating__label",htmlFor:"radio-"+t+"-"+e.props.name,key:t},t,n.createElement("input",{type:"radio",name:"hs-radio-"+e.props.name,id:"radio-"+t+"-"+e.props.name,value:t,checked:t===parseInt(e.state.value,10),onChange:e.handleChange}),e.props.isStar&&e.renderStar(t))}}(this))},render:function(){var e;e=this.props.isStar?" hs-input-rating__is-star":"";return n.createElement("div",{className:"hs-input-rating__container"+e},n.createElement("section",null,this.renderOptions()))}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});hubspot.form.components.inputs.Rating=t}).call(this);(function(){var e,t,n,r,i;e=window.React;i=window.reqwest;t=e.createClass({validateCaptcha:function(){return this.state.value?{valid:!0}:{valid:!1}},componentDidMount:function(){var t,n,r,i,o;"qa"===this.props.env||"local"===this.props.env?this.sitekey="6LfoMB8UAAAAAAxuC2YUhdgQvIKqJLk7qjX9yvzE":this.sitekey="6Lc2_RsUAAAAAAYBSd4rxsgeQz7whuL9COCsHeET";if(this.props.shell){r="https://app.hubspot.com/forms-next-v2-captcha";"qa"===this.props.env?r="https://app.hubspotqa.com/forms-next-v2-captcha":"local"===this.props.env&&(r="https://local.hubspotqa.com/FormsNext/static-3.465/html/recaptcha.html");t=document.createElement("iframe");t.src=r;t.style.border="none";t.style.display="block";t.style.overflow="hidden";t.style.width="100%";t.scrolling="no";t.setAttribute("height",70);t.setAttribute("width",270);i=e.findDOMNode(this.refs.recaptchaTarget);i.appendChild(t);window.setRecaptchaToken=this.setCaptchaResponse}else o=null!=(n=window.grecaptcha)?n.render(e.findDOMNode(this.refs.recaptchaTarget),{sitekey:this.sitekey,callback:this.setCaptchaResponse,"expired-callback":this.setCaptchaExpired,size:"invisible",badge:"inline"},!0):void 0;this.props.sendRecaptchaWidgetId(o);return this.setState({widgetId:o})},setCaptchaResponse:function(e){this.setState({value:e});return this.props.onSuccessCallback()},setCaptchaExpired:function(){var e;this.setState({value:"",validResponse:""});return null!=(e=window.grecaptcha)?e.reset(this.state.widgetId):void 0},getInitialState:function(){return{value:"",widgetId:""}},componentDidUpdate:function(e,t){return t.value!==this.state.value?this.validateCaptcha():void 0},renderToken:function(t){return e.createElement("input",{type:"hidden",name:"g-recaptcha-response",id:"hs-recaptcha-response",value:t})},renderError:function(t){return e.createElement("li",null,e.createElement("label",null,t))},renderErrors:function(e){return this.props.groupErrors?hubspot.utils.map(e,function(e){return function(t){return e.renderError(t)}}(this)):this.renderError(e[0])},renderErrorsList:function(){var t,n;return(null!=(t=this.props.formValidity)&&null!=(n=t.recaptcha)?n.errors.length:void 0)?e.createElement("ul",{className:"no-list "+this.props.errorMessageClass,style:{display:"block"}},this.renderErrors(this.props.formValidity.recaptcha.errors)):void 0},render:function(){return this.props.captchaEnabled?e.createElement("div",{className:"hs_recaptcha hs-recaptcha field hs-form-field"},e.createElement("div",{ref:"recaptchaTarget",className:"input"}),this.renderToken(this.state.value),this.renderErrorsList()):void 0}});null==hubspot.form&&(hubspot.form={});null==(n=hubspot.form).components&&(n.components={});null==(r=hubspot.form.components).inputs&&(r.inputs={});hubspot.form.components.inputs.Recaptcha=t}).call(this);(function(){var e,t,n,r,i,o;t=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;n=t.createClass({displayName:"Select",mixins:[r,e],validators:["validateRequiredSelect"],componentDidMount:function(){return this.browserInvalidError=this.i18nTranslate("formsNext.missingSelect")},validateRequiredSelect:function(){return this.props.required&&!this.state.value?{valid:!1,message:this.i18nTranslate("formsNext.missingSelect")}:{valid:!0}},renderPlaceholder:function(){return t.createElement("option",{value:"",disabled:"disabled",selected:"selected"},this.props.unselectedLabel||this.props.placeholder||this.i18nTranslate("formsNext.defaultSelectOptionLabel"))},renderOptions:function(){return hubspot.utils.map(this.props.options,function(e){return function(e,n){return t.createElement("option",{key:e.value,value:e.value},e.label)}}(this))},handleChangeAndValidate:function(e){return this.setState({value:e.target.value},this.validate)},handleChange:function(e){return this.setState({value:e.target.value})},componentDidUpdate:function(e,t){if(t.value!==this.state.value){this.props.setFieldValue(this.state.value);return this.validate()}},getInitialState:function(){return{value:this.props.selectedOptions.length?this.props.selectedOptions[0]:this.props.defaultValue}},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return t.createElement("select",{id:this.props.name+"-"+this.props.uniqueId,required:this.props.required,className:e,name:this.props.name,value:this.state.value,onChange:this.handleChange,onBlur:this.validate},this.renderPlaceholder(),this.renderOptions())}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Select=n}).call(this);(function(){var e,t,n,r,i,o;t=window.React;e=hubspot.form.mixins.I18nMixin;r=hns("hubspot.utils");n=t.createClass({mixins:[e],contextTypes:{formInstance:t.PropTypes.object},propTypes:{submitText:t.PropTypes.string,submitButtonClass:t.PropTypes.string,cms:t.PropTypes.bool.isRequired,portalId:t.PropTypes.number.isRequired,formId:t.PropTypes.string.isRequired,isVideo:t.PropTypes.bool.isRequired},getDefaultProps:function(){return{noBrandingScope:!0,isVideo:!1}},getInitialState:function(){return{submitKey:"formsNext.submitText"}},setSubmitKey:function(e){return this.setState({submitKey:e})},componentDidMount:function(){this.context.formInstance.register("Submit",this);if(this.props.isVideo){this.setSubmitColorBasedOnPlayer();return this.getBestContrastTextColor()}},setSubmitColorBasedOnPlayer:function(){var e,t;e=this.refs.submit.getDOMNode();t=r.getQueryStringParams(!0);if(null!=t.play_button_color){e.style.backgroundColor="#"+t.play_button_color;return e.style.borderColor="#"+t.play_button_color}},getBestContrastTextColor:function(){var e,t,n,r,i,o,a,s;e=this.refs.submit.getDOMNode();a=getComputedStyle(e)["background-color"];o=a.match(/\d+/g),i=o[0],n=o[1],t=o[2];i=parseInt(i);n=parseInt(n);t=parseInt(t);s=(299*i+587*n+114*t)/1e3;r=s>=186?"#111111":"#FFFFFF";return e.style.color=r},getSubmitText:function(){var e;e=this.state.submitKey||"formsNext.submitText";return this.i18nTranslate(e,null,this.props.submitText)},render:function(){var e,n,r;r=this.getSubmitText();n=this.props.submitButtonClass||"hs-button primary large";this.props.cms&&(n+=" FormSubmitButton");e=t.createElement("div",{className:"hs_submit hs-submit"},t.createElement("div",{className:"hs-field-desc",style:{display:"none"}}),t.createElement("div",{className:"actions"},t.createElement("input",{ref:"submit",type:"submit",value:r,className:n})));return e}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Submit=n}).call(this);(function(){var e,t,n,r,i,o;t=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;n=t.createClass({displayName:"Text",mixins:[r,e],validators:["validateTrimmed","validateMaxInputLength"],handleChangeAndValidate:function(e){return this.setState({value:e.target.value,validationArmed:!1},this.handleBlur)},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},getInitialState:function(){return{value:this.props.defaultValue}},getInputMode:function(e){return"website"===e?"url":"text"},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return t.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:this.props.type,inputmode:this.getInputMode(this.props.name),name:this.props.name,required:this.props.required,value:this.state.value,placeholder:this.props.placeholder,onChange:this.handleChange,onBlur:this.handleBlur,autoComplete:this.props.autoCompleteLabel})}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Text=n}).call(this);(function(){var e,t,n,r,i,o;t=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;n=t.createClass({displayName:"TextArea",mixins:[r,e],validators:["validateTrimmed","validateMaxInputLength"],handleChangeAndValidate:function(e){return this.setState({value:e.target.value,validationArmed:!1},this.handleBlur)},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},getInitialState:function(){return{value:this.props.defaultValue}},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return t.createElement("textarea",{id:this.props.name+"-"+this.props.uniqueId,className:e,name:this.props.name,required:this.props.required,value:this.state.value,placeholder:this.props.placeholder,onChange:this.handleChange,onBlur:this.handleBlur,autoComplete:this.props.autoCompleteLabel})}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.TextArea=n}).call(this);(function(){var e;e={submit:function(e,t,n){var r,i;i="https://forms.hsforms"+e+".com/embed/v3/timings.gif?key="+t+"&valueInMs="+n;r=new Image;return r.src=i}};hns("hubspot.form.perf.API",e)}).call(this);(function(){var e,t,n,r;e=hns("hubspot.form.perf.API");r=hns("hubspot.utils");n=!0;t={shouldMeasure:function(){return!1},setup:function(e){return this.environmentSuffix="qa"===e?"qa":""},submitTiming:function(t,n){return e.submit(this.environmentSuffix,t,n)},measureEmbedScript:function(){var e,t;try{if(!this.shouldMeasure())return;e=performance.getEntriesByType("resource").filter(function(e){return function(e){return e.name.indexOf("forms/v2.js")}}(this))[0].duration;if(e)return this.submitTiming("embed-script",e)}catch(n){t=n;return r.debug(t)}},measureFormRequest:function(e){var t,n;try{if(!this.shouldMeasure())return;t=performance.getEntriesByType("resource").filter(function(t){return new RegExp("embed.*"+e).exec(t.name)})[0].duration;if(t)return this.submitTiming("fetch-definition",t)}catch(i){n=i;return r.debug(n)}},markStart:function(e,t){var n,i;i=t+"-"+e+"-start";try{if(!this.shouldMeasure())return;return performance.mark(i)}catch(o){n=o;return r.debug(n)}},markEnd:function(e,t){var n,i,o,a,s;s=t+"-"+e+"-start";o=t+"-"+e+"-end";try{if(!this.shouldMeasure())return;performance.mark(o);performance.measure(e,s,o);n=null!=(a=performance.getEntriesByName(e)[0])?a.duration:void 0;this.submitTiming(e,n);performance.clearMarks(s);performance.clearMarks(o);return performance.clearMeasures(e)}catch(l){i=l;return r.debug(i)}}};hns("hubspot.form.perf.PerfMeasurer",t)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f,d,h,m;u=window.React;r=hubspot.form.components.inputs.Enum;p=hubspot.form.components.inputs.Select;e=hubspot.form.components.inputs.BooleanCheckbox;f=hubspot.form.components.inputs.Text;s=hubspot.form.components.inputs.Phone;n=hubspot.form.components.inputs.Email;a=hubspot.form.components.inputs.NumberInput;t=hubspot.form.components.inputs.DateInput;d=hubspot.form.components.inputs.TextArea;i=hubspot.form.components.inputs.File;l=hubspot.form.components.inputs.Range;c=hubspot.form.components.inputs.Rating;m=hns("hubspot.utils");o=u.createClass({displayName:"Input",componentDidMount:function(){if(this.props.hidden){if("date"===this.props.fieldType)return this.props.registerDateField(this.props.name);if("booleancheckbox"===this.props.fieldType)return this.props.registerBoolCheckBoxField(this.props.name)}},getInputType:function(){var e;return(null!=(e=this.props.validation)?e.name:void 0)?this.props.validation.name:this.props.fieldType},getAutoCompleteLabel:function(){switch(this.props.name){case"phone":return"tel";case"email":return"email";case"company":return"organization";case"fax":return"fax";case"firstname":return"given-name";case"jobtitle":return"organization-title";case"lastname":return"family-name";case"mobilephone":return"mobile";case"salutation":return"honorific-prefix";case"state":return"address-level1";case"address":return"street-address";case"city":return"address-level2";default:return}},renderInputs:function(){var o,h,m,g,v,x,b,y,E,C,S,I,T,k;if(this.props.hidden){k="";if("enumeration"===this.props.type)try{k=this.props.selectedOptions.join(";")}catch(w){k="string"==typeof this.props.selectedOptions?this.props.selectedOptions:this.props.defaultValue}else k=this.props.defaultValue;return u.createElement("input",{ref:"hiddenInput",name:this.props.name,className:"hs-input",type:"hidden",defaultValue:k})}v={name:this.props.name,uniqueId:this.props.uniqueId,fieldType:this.props.fieldType,type:this.getInputType(),required:this.props.required,defaultValue:this.props.defaultValue,options:this.props.options,selectedOptions:this.props.selectedOptions,placeholder:this.props.placeholder,valid:this.props.valid,setFieldValidity:this.props.setFieldValidity,registerValidator:this.props.registerValidator,deregisterValidator:this.props.deregisterValidator,errorClass:this.props.errorClass,locale:this.props.locale,translations:this.props.translations,cms:this.props.cms,setFieldValue:this.props.setFieldValue,autoCompleteLabel:this.getAutoCompleteLabel(),metaData:this.props.metaData,knownProperties:this.props.knownProperties,countryCode:this.props.countryCode};switch(this.props.fieldType){case"text":if("phone"===this.props.name||"mobilephone"===this.props.name){T=(null!=(x=this.props.validation)?x.data:void 0)?this.props.validation.data.split(":"):[];return u.createElement(s,u.__spread({},v,{validationData:T}))}if("email"===this.props.name){T=(null!=(b=this.props.validation)?b.data:void 0)?this.props.validation.data.split("|||"):!1;I=(null!=(y=this.props.validation)?y.useDefaultBlockList:void 0)?this.props.validation.useDefaultBlockList:!1;return u.createElement(n,u.__spread({},v,{env:this.props.env},{portalId:this.props.portalId},{validationData:T},{blockedDomains:this.props.blockedDomains},{usingHubspotBlockedDomains:I},{formsBaseUrl:this.props.formsBaseUrl}))}return u.createElement(f,u.__spread({},v));case"date":return u.createElement(t,u.__spread({},v,{registerDateField:this.props.registerDateField}));case"checkbox":case"radio":return u.createElement(r,u.__spread({},v));case"number":T=(null!=(E=this.props.validation)?E.data:void 0)?this.props.validation.data.split(":"):[];return u.createElement(a,u.__spread({},v,{validationData:T}));case"textarea":return u.createElement(d,u.__spread({},v));case"select":return u.createElement(p,u.__spread({},v,{unselectedLabel:this.props.unselectedLabel}));case"file":m=this.props.metaData?this.props.metaData:{};return u.createElement(i,u.__spread({},v,{metaData:m}));case"booleancheckbox":return u.createElement(e,u.__spread({},v,{label:this.props.label},{registerBoolCheckBoxField:this.props.registerBoolCheckBoxField},{deregisterBoolCheckBoxField:this.props.deregisterBoolCheckBoxField}));case"range":T=(null!=(C=this.props.validation)?C.data:void 0)?this.props.validation.data.split(":"):[];g=T[0],h=T[1];return u.createElement(l,u.__spread({},v,{min:g},{max:h}));case"rating":case"starRating":T=(null!=(S=this.props.validation)?S.data:void 0)?this.props.validation.data.split(":"):[];o="starRating"===this.props.fieldType;g=T[0],h=T[1];return u.createElement(c,u.__spread({},v,{min:g},{max:h},{isStar:o}))}},render:function(){return u.createElement("div",{className:"input"},this.renderInputs())}});null==hubspot.form&&(hubspot.form={});null==(h=hubspot.form).components&&(h.components={});hubspot.form.components.Input=o}).call(this);(function(){var e,t,n,r,i=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};n=window.React;t=hubspot.form.components.Input;e=n.createClass({displayName:"Field",contextTypes:{formInstance:n.PropTypes.object},componentDidMount:function(){return this.context.formInstance.register(this.props.name,this)},getContainerStyle:function(){return this.props.hidden||this.state.hidden?{display:"none"}:void 0},getDescriptionStyle:function(){return this.props.description&&!this.props.hidden?{display:"block"}:{display:"none"}},renderRequired:function(){return n.createElement("span",{className:"hs-form-required"},"*")},renderError:function(e,t){return"object"==typeof e?n.createElement("li",{key:t},n.createElement("label",null,n.createElement("a",{href:"javascript:void(0);",onClick:e.callback},e.label))):n.createElement("li",{key:t},n.createElement("label",{className:"hs-error-msg"},e))},renderErrors:function(){return this.props.groupErrors?hubspot.utils.map(this.props.errors,function(e){return function(t,n){return e.renderError(t,n)}}(this)):this.renderError(this.props.errors[0])},renderErrorsList:function(){var e;return(null!=(e=this.props.errors)?e.length:void 0)?n.createElement("ul",{className:"no-list "+this.props.errorMessageClass,style:{display:"block"},role:"alert"},this.renderErrors()):void 0},getLabel:function(){var e,t;if("booleancheckbox"!==this.props.fieldType){e=null!=(t=this.props.translations)?t.fieldLabels:void 0;return null!=(null!=e?e[this.props.name]:void 0)?e[this.props.name]:this.props.label}return""},renderDependentFields:function(){return this.props.dependentFieldFilters?hubspot.utils.map(this.props.dependentFieldFilters,function(e){return function(t){var n,r;if(e.state.dependentFieldsToRender&&(r=t.dependentFormField.name,i.call(e.state.dependentFieldsToRender,r)>=0)){n=t.dependentFormField;return e.props.dependentFields[n.name]}}}(this)):void 0},setFieldValue:function(e){return this.setState({fieldValue:e})},setHidden:function(e){return this.setState({hidden:e})},getInitialState:function(){return{fieldValue:this.props.defaultValue}},componentWillMount:function(){return this.props.dependentFieldFilters&&this.state.fieldValue?this.collectDependentFields():void 0},componentDidUpdate:function(e,t){return this.props.dependentFieldFilters&&t.fieldValue!==this.state.fieldValue?this.collectDependentFields():void 0},collectDependentFields:function(){var e;e=[];hubspot.utils.map(this.props.dependentFieldFilters,function(t){return function(n){var r,i,o,a,s;a=n.filters;s=[];for(i=0,o=a.length;o>i;i++){r=a[i];hubspot.utils.filterDependentField(t.state.fieldValue,t.props.type,t.props.fieldType,r)?s.push(e.push(n.dependentFormField.name)):s.push(void 0)}return s}}(this));return this.setState({dependentFieldsToRender:e})},renderLabel:function(e){var t;t=this.props.name+"-"+this.props.uniqueId;return n.createElement("label",{id:"label-"+t,className:e,placeholder:"Enter your "+this.props.label,htmlFor:t},n.createElement("span",{dangerouslySetInnerHTML:{__html:this.getLabel()}}),this.props.required&&"booleancheckbox"!==this.props.fieldType?this.renderRequired():void 0)},renderField:function(){var e,r;e="hs_"+this.props.name+" hs-"+this.props.name+" hs-fieldtype-"+this.props.fieldType+" field hs-form-field";this.props.isSmartField&&(e+=" smart-field");this.props.cms&&(e+=" ContactFormItem");r="";this.props.cms&&(r+=" AutoFormLabel");this.props.labelHidden&&(r+=" hs-hidden");return n.createElement("div",{className:e,key:this.props.name,style:this.getContainerStyle()},"booleancheckbox"!==this.props.fieldType?this.renderLabel(r):void 0,n.createElement("legend",{className:"hs-field-desc",style:this.getDescriptionStyle(),dangerouslySetInnerHTML:{__html:this.props.description}}),n.createElement(t,{key:this.props.name,env:this.props.env,portalId:this.props.portalId,name:this.props.name,required:this.props.required,type:this.props.type,fieldType:this.props.fieldType,options:this.props.options,selectedOptions:this.props.selectedOptions,uniqueId:this.props.uniqueId,defaultValue:this.props.defaultValue,placeholder:this.props.placeholder,unselectedLabel:this.props.unselectedLabel,label:this.props.label,hidden:this.props.hidden,validation:this.props.validation,valid:this.props.valid,setFieldValidity:this.props.setFieldValidity,registerValidator:this.props.registerValidator,deregisterValidator:this.props.deregisterValidator,registerBoolCheckBoxField:this.props.registerBoolCheckBoxField,deregisterBoolCheckBoxField:this.props.deregisterBoolCheckBoxField,registerDateField:this.props.registerDateField,errorClass:this.props.errorClass,locale:this.props.locale,translations:this.props.translations,blockedDomains:this.props.blockedDomains,cms:this.props.cms,setFieldValue:this.setFieldValue,metaData:this.props.metaData,formsBaseUrl:this.props.formsBaseUrl,knownProperties:this.props.knownProperties,countryCode:this.props.countryCode}),this.renderErrorsList())},render:function(){return this.props.dependentFieldFilters?n.createElement("div",{className:"hs-dependent-field"},this.renderField(),this.renderDependentFields()):this.renderField()}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.Field=e}).call(this);(function(){var e,t,n,r;n=window.React;e=hubspot.form.components.Field;t=n.createClass({displayName:"FieldGroup",sortOptions:function(e){var t;if(e.length>0){t=hubspot.utils.mergeSort(e,function(e,t){return e.displayOrder===t.displayOrder?0:e.displayOrder>t.displayOrder?1:-1});return t}return e},getSelectedOptions:function(e){return!hubspot.utils.isExistingProperty(this.props.contactProperties,e.name)||this.props.ignoreCurrentValues||e.hidden?!e.defaultValue||e.hidden&&"enumeration"===e.type?this.props.urlParams[e.name]?"enumeration"===e.type?hubspot.utils.getSelectedOptionsByLabel(e.options,this.props.urlParams[e.name]):hubspot.utils.getSelectedOptions(e.options,this.props.urlParams[e.name]):e.selectedOptions?e.selectedOptions:[]:e.defaultValue:hubspot.utils.getSelectedOptions(e.options,this.props.contactProperties[e.name])},getDefaultValue:function(e){var t;switch(e.fieldType){case"select":case"booleancheckbox":t=e.selectedOptions[0];break;case"radio":case"checkbox":t=e.selectedOptions;break;default:t=e.defaultValue}hubspot.utils.isExistingProperty(this.props.contactProperties,e.name)&&!this.props.ignoreCurrentValues&&(e.hidden&&e.defaultValue||(t=this.props.contactProperties[e.name]));this.props.urlParams[e.name]&&(t=this.props.urlParams[e.name]);"email"===e.name&&this.props.urlParams._hse&&(t=this.props.urlParams._hse);return t},getNumberOfSmartFieldsToShow:function(){var e;if(this.props.isSmartGroup){e=hubspot.utils.filter(this.props.fields,function(e){return function(t){return!e.isHiddenSmartField(t)}}(this));return null!=e?e.length:void 0}},isHiddenSmartField:function(e){var t,n;t=e.name.toLowerCase();return null!=(null!=(n=this.props.hiddenSmartFields)?n[t]:void 0)},getDependentFields:function(e){var t,n,r,i,o,a;n={};a=e.dependentFieldFilters;for(i=0,o=a.length;o>i;i++){r=a[i];t=r.dependentFormField;n[t.name]=this.renderField(t)}return n},getSafeFieldName:function(e){var t;t=e.name;if("submit"===t)return"submit[]";e.propertyObjectType&&"CONTACT"!==e.propertyObjectType&&(t=e.propertyObjectType+"."+t);return t},renderField:function(t){var r,i,o,a,s;r=this.getDefaultValue(t);return n.createElement(e,{key:t.name,env:this.props.env,portalId:this.props.portalId,defaultValue:r,placeholder:t.placeholder,name:this.getSafeFieldName(t),label:t.label,labelHidden:t.labelHidden,required:t.required,type:t.type,fieldType:t.fieldType,isSmartField:this.props.isSmartGroup||t.isSmartField,options:this.sortOptions(t.options),selectedOptions:this.getSelectedOptions(t),unselectedLabel:t.unselectedLabel,description:t.description,hidden:t.hidden,validation:t.validation,uniqueId:this.props.uniqueId,cms:this.props.cms,metaData:t.metaData,valid:null!=(i=this.props.formValidity[this.getSafeFieldName(t)])?i.valid:void 0,errors:null!=(o=this.props.formValidity[this.getSafeFieldName(t)])?o.errors:void 0,formValidity:this.props.formValidity,setFieldValidity:this.props.setFieldValidity,registerValidator:this.props.registerValidator,deregisterValidator:this.props.deregisterValidator,registerBoolCheckBoxField:this.props.registerBoolCheckBoxField,deregisterBoolCheckBoxField:this.props.deregisterBoolCheckBoxField,registerDateField:this.props.registerDateField,errorClass:this.props.errorClass,groupErrors:this.props.groupErrors,errorMessageClass:this.props.errorMessageClass,locale:this.props.locale,translations:this.props.translations,blockedDomains:this.props.blockedDomains,dependentFieldFilters:(null!=(a=t.dependentFieldFilters)?a.length:void 0)?t.dependentFieldFilters:void 0,dependentFields:(null!=(s=t.dependentFieldFilters)?s.length:void 0)?this.getDependentFields(t):void 0,formsBaseUrl:this.props.formsBaseUrl,knownProperties:this.props.contactProperties,countryCode:this.props.countryCode})},renderFields:function(){return hubspot.utils.map(this.props.fields,function(e){return function(t){return e.isHiddenSmartField(t)?void 0:e.renderField(t)}}(this))},renderRichText:function(){return null!=this.props.richText&&""!==this.props.richText.content?n.createElement("div",{className:"hs-richtext hs-main-font-element",dangerouslySetInnerHTML:{__html:this.props.richText.content}}):void 0},render:function(){var e,t;if(this.props.multiColumn){t=this.getNumberOfSmartFieldsToShow()||this.props.fields.length;return n.createElement("fieldset",{className:"form-columns-"+t},this.renderRichText(),this.renderFields())}if(null!=this.props.richText&&""!==this.props.richText.content){e=this.props.fields[0];return n.createElement("div",null,this.renderRichText(),e?this.renderField(e):void 0)}if(this.props.fields[0]){e=this.props.fields[0];return this.renderField(e)}return null}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.FieldGroup=t}).call(this);(function(){var e,t,n,r,i,o;n=window.React;e=hubspot.form.components.Field;o=hns("hubspot.utils");i=hns("hubspot.legalOptions.constants");t=n.createClass({contextTypes:{formInstance:n.PropTypes.object},componentDidMount:function(){return this.context.formInstance.register("LegalConsent",this)},getContainerStyle:function(){return this.state.hidden?{display:"none"}:void 0},getHelpTextStyle:function(e){return e&&0!==e.replace(/<[^>]*>/g,"").length?{display:"block"}:{display:"none"}},getVisibleOptionKeys:function(e){var t,n;t=e[i.options.IS_LEGITIMATE_INTEREST];n=e[i.options.PROCESSING_CONSENT_TYPE];return t||n!==i.processingConsentTypes.IMPLICIT?t||n!==i.processingConsentTypes.REQUIRED_CHECKBOX?t?[i.options.SUBSCRIPTION_TYPE,i.options.LAWFUL_BASIS,i.options.PRIVACY_POLICY_TEXT]:[]:[i.options.COMMUNICATION_CONSENT_TEXT,i.options.COMMUNICATION_CONSENT_CHECKBOXES,i.options.PROCESSING_CONSENT_TEXT,i.options.PROCESSING_CONSENT_CHECKBOX_LABEL,i.options.PROCESSING_CONSENT_FOOTER_TEXT,i.options.PRIVACY_POLICY_TEXT]:[i.options.COMMUNICATION_CONSENT_TEXT,i.options.COMMUNICATION_CONSENT_CHECKBOXES,i.options.PRIVACY_POLICY_TEXT,i.options.PROCESSING_CONSENT_TEXT]; +},setHidden:function(e){return this.setState({hidden:e})},getInitialState:function(){return{hidden:!1}},renderCheckbox:function(t,r,i,o){var a,s,l;a={options:[{value:"true"},{value:"false"}],validation:{name:"",message:"",data:"",useDefaultBlockList:!1,blockedEmailAddresses:[]}};return n.createElement("div",null,n.createElement(e,{key:t,env:this.props.env,portalId:this.props.portalId,defaultValue:"",placeholder:"",name:t,label:r,labelHidden:!1,required:i,type:"enumeration",fieldType:"booleancheckbox",isSmartField:!1,options:a.options,selectedOptions:[],unselectedLabel:"",description:"",hidden:!1,validation:a.validation,uniqueId:this.props.uniqueId,cms:this.props.cms,metaData:[],locale:this.props.locale,valid:null!=(s=this.props.formValidity[t])?s.valid:void 0,errors:null!=(l=this.props.formValidity[t])?l.errors:void 0,formValidity:this.props.formValidity,setFieldValidity:this.props.setFieldValidity,registerValidator:this.props.registerValidator,deregisterValidator:this.props.deregisterValidator,registerBoolCheckBoxField:this.props.registerBoolCheckBoxField,deregisterBoolCheckBoxField:this.props.deregisterBoolCheckBoxField,errorClass:this.props.errorClass,groupErrors:this.props.groupErrors,errorMessageClass:this.props.errorMessageClass,dependentFieldFilters:[],dependentFields:[],translations:this.props.translations}),n.createElement("legend",{className:"hs-field-desc checkbox-desc",style:this.getHelpTextStyle(o),dangerouslySetInnerHTML:{__html:o}}))},renderText:function(e){return null!=e&&""!==e?n.createElement("div",{className:"hs-richtext",dangerouslySetInnerHTML:{__html:e}}):void 0},renderLegalConsentFields:function(){var e,t,r;e=this;r=this.getVisibleOptionKeys(this.props.legalConsentRecord);t=Object.keys(this.props.legalConsentRecord);return n.createElement("div",{className:"legal-consent-container",style:this.getContainerStyle()},r.map(function(n){var r;if(-1!==t.indexOf(n))switch(n){case i.options.COMMUNICATION_CONSENT_CHECKBOXES:return e.props.legalConsentRecord[n].map(function(t){return e.renderCheckbox(i.nameKey+".subscription_type_"+t.communicationTypeId,t.label,t.required)});case i.options.PROCESSING_CONSENT_CHECKBOX_LABEL:r=e.props.legalConsentRecord[i.options.PROCESSING_CONSENT_FOOTER_TEXT];return e.renderCheckbox(i.nameKey+".processing",e.props.legalConsentRecord[n],!0,r);case i.options.COMMUNICATION_CONSENT_TEXT:case i.options.PROCESSING_CONSENT_TEXT:case i.options.PRIVACY_POLICY_TEXT:return e.renderText(e.props.legalConsentRecord[n]);default:return null}}))},render:function(){var e;e=Object.keys(this.props.legalConsentRecord);return 0===e.length?null:this.props.multiColumn?n.createElement("fieldset",{className:"form-columns-1"},this.renderLegalConsentFields()):this.renderLegalConsentFields()}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.LegalConsentFields=t}).call(this);(function(){var e,t,n,r,i;t=window.React;e=hubspot.form.mixins.I18nMixin;i=hns("hubspot.form.constants");n=t.createClass({displayName:"ViralityLink",mixins:[e],getTrackingPrefix:function(){return i.knownHubspotDomains.filter(function(e){return window.location.host.indexOf(e)>=0}).length>0?"utm":"hubs"},getViralLink:function(e){var t,n,r;r=this.getTrackingPrefix();t="local"===this.props.env||"qa"===this.props.env?"qa":"";n=this.props.inlineMessage&&this.props.submitted?"forms-branding-thankyou":e?"forms-branding-variation":"forms-branding-control";return"https://app.hubspot"+t+".com/signup/marketing?"+r+"_medium=virality&"+r+"_campaign=hubspot-forms-virality&"+r+"_id="+n+"&"+r+"_source="+(window.location.host||window.parent.location.host)+"&intent=marketingFreeForms&opt_sidebar=forms"},render:function(){return this.props.noBrandingScope?null:this.props.isViralityVariation?t.createElement("div",{className:"hubspot-link__container sproket"},t.createElement("img",{src:"https://js.hsforms.net/sproket.png",className:"hubspot-link__icon"}),t.createElement("a",{href:this.getViralLink(this.props.isViralityVariation),target:"_blank",className:"hubspot-link",dangerouslySetInnerHTML:{__html:this.i18nTranslate("formsNext.virality.version1")}})):t.createElement("div",{className:"hubspot-link__container sproket"},t.createElement("img",{src:"https://js.hsforms.net/sproket.png",className:"hubspot-link__icon"}),t.createElement("span",null,this.i18nTranslate("formsNext.viralLinkTextBeginning")," "),t.createElement("a",{href:this.getViralLink(),target:"_blank",className:"hubspot-link"},t.createElement("span",{className:"hubspot-link-text"},this.i18nTranslate("formsNext.viralLinkTextEnding"))))}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.ViralityLink=n}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f,d,h,m=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};l=window.React;t=hubspot.form.components.FieldGroup;c=hubspot.form.components.inputs.Recaptcha;o=hubspot.form.components.LegalConsentFields;p=hubspot.form.components.ViralityLink;u=hubspot.form.components.inputs.Submit;e=hubspot.form.components.inputs.Context;s=window.Promise;i=window.I18n;h=hns("hubspot.utils");d=hns("hubspot.form.lib.errorReport");a=hns("hubspot.form.perf.PerfMeasurer");r={MISSING_REQUIRED_FIELDS:"MISSING_REQUIRED_FIELDS",BLOCKED_EMAIL:"BLOCKED_EMAIL",OUT_OF_DATE:"OUT_OF_DATE",FORM_NEVER_EXISTED:"FORM_NEVER_EXISTED",MISSING_SCOPE:"MISSING_SCOPE",FORM_TYPE_MISMATCH:"FORM_TYPE_MISMATCH"};n=l.createClass({displayName:"Form",slotsAvailable:0,addShouldSubmitHandler:function(e){return this._shouldSubmitCallbacks.push(e)},runShouldSubmitHandlers:function(e){var t;t=!0;this._shouldSubmitCallbacks.forEach(function(n){return t=t&&n(e)});return t},setSubmitText:function(e){return this.setState({submitText:e})},getMetaDataValue:function(e){return h.getMetaDataValue(this.props.metaData,e)},componentDidMount:function(){var e,t;hubspot.utils.runCustomerCallbackFunction(this,"onBeforeValidationInit",this.props.formId);hubspot.utils.runCustomerCallbackFunction(this,"onFormReady",this.props.formId);this.windowForScroll=this.props.shell?window.parent:window;"function"==typeof(e=this.windowForScroll).addEventListener&&e.addEventListener("scroll",this.scrollHandler);"function"==typeof(t=this.getDOMNode()).addEventListener&&t.addEventListener("focusin",this.focusHandler);this.handleRendered();this.checkFormVisible();this.overrideSubmit();"function"==typeof window.addEventListener&&window.addEventListener("message",this.submissionResponseHandler);this.errorMessageMap={REQUIRED_FIELD:"required",INVALID_EMAIL:"invalidEmail",BLOCKED_EMAIL:"forbiddenEmailDomainGeneric",INVALID_NUMBER:"invalidNumber",FILE_TOO_LARGE:"fileTooLarge",INPUT_TOO_LARGE:"inputTooLarge",INVALID_DATE:"invalidDate",VALUE_NOT_IN_FIELD_DEFINITION:"valueNotInFieldDefintion",NUMBER_OUT_OF_RANGE:"numberOutOfRange"};a.markEnd("render",this.props.correlationId);this.props.shell&&this.monitorDomResize();return this._shouldSubmitCallbacks=[]},monitorDomResize:function(){var e;if(null!=window.ResizeObserver){e=new ResizeObserver(function(e){return function(t){return e.handleRendered(t[0])}}(this));return e.observe(document.getElementsByClassName("hbspt-form")[0])}return setInterval(this.handleRendered,500)},getDefaultProps:function(){return{noBrandingScope:!0}},componentWillMount:function(){var e;e=this.props.env;"local"===e&&(e="qa");this.formsDomain="https://forms.hsforms"+e+".com";this.targetObject={};return this.targetObject.target=this.getSubmissionIframeName()},componentWillUnmount:function(){this.removeInjectedCss();return window.removeEventListener("message",this.submissionResponseHandler)},createSubmissionResponseTimeout:function(){return setTimeout(function(){return d.report(new Error("Timeout waiting for submission response"))},13e3)},getAllFields:function(){var e,t,n,r,i,o,a,s,l;e=[];s=this.state.fieldGroups;for(r=0,o=s.length;o>r;r++){n=s[r];l=n.fields;for(i=0,a=l.length;a>i;i++){t=l[i];e.push(t.name)}}return e},submissionResponseHandler:function(e){var t,n,i,o,a,s,l,c,u,p,f;c="https://share.hsforms"+this.props.env+".com";f=this.props.shell?window.parent:window;t=[this.formsDomain,"https://local.hubspotqa.com"];if((e.origin!==c||document.location.origin===c)&&h.isSubmissionResponseMessage(e,t)){l=e.data;n=null!=l?l.formGuid:void 0;if(n===this.props.formId){o=null!=this.props.formInstanceId&&(null!=l?l.hasOwnProperty("formInstanceId"):void 0)&&(null!=l?l.formInstanceId:void 0)!==this.props.formInstanceId.toString();if(!o){clearTimeout(this.submissionResponseTimeout);u=null!=l?l.accepted:void 0;i=null!=l?l.formSubmissionError:void 0;if(!u){null!=(s=window.grecaptcha)&&s.reset(this.state.widgetId);return i?"RECAPTCHA_VALIDATION_ERROR"!==i||this.props.captchaEnabled?this.isSubmissionNotAllowed(i)?this.setGlobalError("SUBMISSION_NOT_ALLOWED"):this.setGlobalError(i):this.setGlobalError(r.OUT_OF_DATE):this.handleValidation(l.validationResults)}this.handlePostSubmission();if(null!=l?l.redirectUrl:void 0){p=h.getDomainFromUrl(l.redirectUrl)===f.location.hostname?l.redirectUrl:h.createCrossDomainTrackingUrl(l.redirectUrl);return f.location.assign(p)}return(null!=l?l.inlineMessage:void 0)?this.setState({inlineMessage:hubspot.utils.unescapeScriptClosingTag(l.inlineMessage)}):!this.state.inlineMessage&&this.props.isVideo&&null!=(a=f.API)?a.closeCta():void 0}}}},isSubmissionNotAllowed:function(e){return e===r.FORM_NEVER_EXISTED||e===r.MISSING_SCOPE||e===r.FORM_TYPE_MISMATCH},handleValidation:function(e){var t,n,i,o,a,s,l,c;n={};t=this.getAllFields();i=void 0;for(o=0,a=e.length;a>o;o++){c=e[o];s={};if(l=c.fieldName,m.call(t,l)<0){this.setGlobalError(r.OUT_OF_DATE);return}"BLOCKED_EMAIL"===c.formSubmissionValidationType?i=r.BLOCKED_EMAIL:"REQUIRED_FIELD"===c.formSubmissionValidationType&&(i=r.MISSING_REQUIRED_FIELDS);n[c.fieldName]={valid:!1,errors:this.getValidationError(c.formSubmissionValidationType,s)}}this.setState({formValidity:hubspot.utils.extend(this.state.formValidity,n),submitting:!1});return this.setGlobalError(i)},setGlobalError:function(e){return this.setState({errorType:e})},getValidationError:function(e,t){return[hubspot.utils.i18nTranslate(this.props.translations,"formsNext."+this.errorMessageMap[e],t)]},componentDidUpdate:function(e,t){this.handleRendered();h.hasFormValidityChanged(t.formValidity,this.state.formValidity)&&this.handleChange();return!t.submitted&&this.state.submitted?this.scrollToThankYouMessage():void 0},scrollToThankYouMessage:function(){var e,t,n,r;t=document.getElementsByClassName("submitted-message hs-form-"+this.props.formId)[0];if(t&&!hubspot.utils.isInViewport(t)){n=t.getBoundingClientRect();e=n.top+window.pageYOffset;r=e-window.innerHeight/2;return window.scrollTo({top:r,behaviour:"smooth"})}},handleRendered:function(e){var t;if(this.props.shell){t=requestAnimationFrame||setTimeout;return t(function(t){return function(){var n,r;n=e?e.contentRect:document.getElementsByClassName("hbspt-form")[0].getBoundingClientRect();if(n.height!==t.height||n.width!==t.width){t.height=n.height;t.width=n.width;window.private_form_height=t.height;window.private_form_width=t.width;r=document.createEvent("Event");r.initEvent("FORM_RESIZE",!0,!0);window.dispatchEvent(r);return window.parent.hbspt.forms.resize[t.props.shellId](t.height,t.width)}}}(this))}},focusHandler:function(e){var t;if(!this.formInteractionEventSent&&!this.props.isFormDemo){t=this.props.shell?window.parent:window;t._hsq.push(["trackFormInteraction",this.props.formId,this.props.correlationId,{formType:this.props.analyticsFormTypeNumber,formVariantId:this.props.variantId}]);return this.formInteractionEventSent=!0}},scrollHandler:function(e){return this.checkFormVisible(e)},checkFormVisible:function(e){var t;if(!this.formVisibleEventSent&&!this.props.isFormDemo&&this.isFormVisible()){t=this.props.shell?window.parent:window;t._hsq.push(["trackFormVisible",this.props.formId,this.props.correlationId,{formType:this.props.analyticsFormTypeNumber,formVariantId:this.props.variantId}]);return this.formVisibleEventSent=!0}},isFormVisible:function(){var e;null==this.domNodeForScrollHandler&&(this.domNodeForScrollHandler=this.props.shell?window.frameElement:this.getDOMNode());e=Math.max(this.windowForScroll.innerHeight||0,this.windowForScroll.document.documentElement.clientHeight);return this.domNodeForScrollHandler.getBoundingClientRect().top0},overrideSubmit:function(){var e,t,n;e=l.findDOMNode(this.refs.hsForm);t=(null!=e?e.hasOwnProperty("submit"):void 0)?e.submit:void 0;n=this;return e?e.submit=function(){return n.actuallySubmitForm(this,t)}:void 0},getInitialState:function(){var e;this.registeredValidators=[];this.hiddenSmartFields={};e=this.props.originalEmbedContext;return{inlineMessage:this.props.inlineMessage,formValidity:{},boolCheckBoxFields:[],dateFields:[],fieldGroups:this.getFieldGroups(),showInlineMessageInitially:this.isPostSubmitRedirect(),submitting:!1,widgetId:"",errorType:void 0,submitText:this.props.submitText}},isPostSubmitRedirect:function(){return hubspot.utils.isPostSubmitRedirect(this.props.formId)},childContextTypes:{formInstance:l.PropTypes.object},registerField:function(e,t){var n;return null!=(n=this.props.api)?n._registerField(e,t):void 0},registerInput:function(e,t){var n;return null!=(n=this.props.api)?n._registerInput(e,t):void 0},getChildContext:function(){return{formInstance:{register:this.registerField,registerInput:this.registerInput}}},registerBoolCheckBoxField:function(e){return this.setState(function(t){var n;n=t.boolCheckBoxFields.slice();n.push(e);return{boolCheckBoxFields:n}})},deregisterBoolCheckBoxField:function(e){return this.props.isFormDemo?void 0:this.setState(function(t){return{boolCheckBoxFields:hubspot.utils.filter(t.boolCheckBoxFields,function(t){return t!==e})}})},registerDateField:function(e){return this.setState(function(t){var n;n=t.dateFields.slice();n.push(e);return{dateFields:n}})},registerValidator:function(e){return e?this.registeredValidators.push(e):void 0},deregisterValidator:function(e){var t;if(e){t=this.registeredValidators.indexOf(e);if(t>-1)return this.registeredValidators.splice(t,1)}},setFieldValidity:function(e,t,n,r){return this.setState(function(i){var o;o=h.extend({},i.formValidity);o[e]={valid:t,errors:(null!=n?n.length:void 0)?n:[],errorTypes:(null!=r?r.length:void 0)?r:[]};return{formValidity:o}})},isNotExistingSmartProperty:function(e){var t,n,r,i,o,a,s;if(h.isSmartGroup(e)){t=!1;a=e.fields;for(i=0,o=a.length;o>i;i++){n=a[i];r=n.name.toLowerCase();(null!=(s=this.props.contactProperties)?s[r]:void 0)?this.hiddenSmartFields[r]=this.props.contactProperties[r]:t=!0}return t}return!0},shouldRenderGroup:function(e){var t;if(this.props.deactivateSmartForm&&!(null!=(t=this.props.urlParams)?t.email:void 0)){if(e["default"])return!0}else if(e["default"]){if(this.isNotExistingSmartProperty(e))return!0;this.slotsAvailable+=1}else if(this.isNotExistingSmartProperty(e)&&this.slotsAvailable>0){this.slotsAvailable-=1;return!0}return!1},getFieldGroups:function(){var e;e=[];hubspot.utils.map(this.props.fieldGroups,function(t){return function(n){return t.shouldRenderGroup(n)?e.push(n):void 0}}(this));return e},removeInjectedCss:function(){var e;e=document.getElementById("hs-form-style"+this.props.uniqueIdForClass);return null!=e&&"function"==typeof e.remove?e.remove():void 0},renderFieldGroups:function(){var e;e=hubspot.utils.checkIfMultiColumn(this.props.fieldGroups);return hubspot.utils.map(this.state.fieldGroups,function(n){return function(r,i){var o;return l.createElement(t,{key:i,env:n.props.env,portalId:n.props.portalId,fields:r.fields,uniqueId:n.props.uniqueId,cms:n.props.cms,multiColumn:e,ignoreCurrentValues:n.props.ignoreCurrentValues,contactProperties:n.props.contactProperties,countryCode:n.props.countryCode,isSmartGroup:h.isSmartGroup(r),hiddenSmartFields:n.hiddenSmartFields,formValidity:n.state.formValidity,setFieldValidity:n.setFieldValidity,registerValidator:n.registerValidator,deregisterValidator:n.deregisterValidator,registerBoolCheckBoxField:n.registerBoolCheckBoxField,deregisterBoolCheckBoxField:n.deregisterBoolCheckBoxField,registerDateField:n.registerDateField,richText:r.richText,urlParams:n.props.urlParams,errorClass:n.props.errorClass,groupErrors:n.props.groupErrors,errorMessageClass:n.props.errorMessageClass,locale:n.props.locale,translations:null!=(o=n.props.translations)?o[n.props.locale]:void 0,blockedDomains:n.props.blockedDomains,apiValidations:n.state.apiValidations,formsBaseUrl:n.props.formsBaseUrl})}}(this))},renderRecaptcha:function(){var e,t,n;n=this.props.shell?window.parent:window;return this.props.captchaEnabled&&null!=(null!=(e=n.grecaptcha)?e.render:void 0)?l.createElement(c,{name:"recaptcha",errorClass:this.props.errorClass,groupErrors:this.props.groupErrors,errorMessageClass:this.props.errorMessageClass,captchaEnabled:this.props.captchaEnabled,env:this.props.env,locale:this.props.locale,translations:null!=(t=this.props.translations)?t[this.props.locale]:void 0,portalId:this.props.portalId,formId:this.props.formId,onSuccessCallback:this.submitForm,sendRecaptchaWidgetId:this.setRecaptchaWidgetId,shell:this.props.shell,shellId:this.props.shellId}):void 0},renderLegalConsentFields:function(){var e,t,n,r,i;e=(null!=(n=this.props.metaData.filter(function(e){return"legalConsentOptions"===e.name}))&&null!=(r=n[0])?r.value:void 0)||"{}";t=hubspot.utils.checkIfMultiColumn(this.props.fieldGroups);return l.createElement(o,{cms:this.props.cms,deregisterBoolCheckBoxField:this.deregisterBoolCheckBoxField,deregisterValidator:this.deregisterValidator,env:this.props.env,errorClass:this.props.errorClass,errorMessageClass:this.props.errorMessageClass,formValidity:this.state.formValidity,groupErrors:this.props.groupErrors,legalConsentRecord:JSON.parse(e),locale:this.props.locale,portalId:this.props.portalId,registerBoolCheckBoxField:this.registerBoolCheckBoxField,registerValidator:this.registerValidator,setFieldValidity:this.setFieldValidity,uniqueId:this.props.uniqueId,urlParams:this.props.urlParams,multiColumn:t,translations:null!=(i=this.props.translations)?i[this.props.locale]:void 0})},setRecaptchaWidgetId:function(e){return this.setState({widgetId:e})},validateForm:function(){var e,t,n,r,i;i=[];n=this.registeredValidators;for(e=0,t=n.length;t>e;e++){r=n[e];i.push(r())}return s.all(i)},getDomFields:function(){var e,t;e=l.findDOMNode(this).querySelectorAll("div.input input, div.input select, div.input textarea");t=hubspot.utils.map(e,function(e){var t;return"radio"===(t=e.type)||"checkbox"===t?e.name+":"+e.value:e.name});return t},checkIfAllRequired:function(){var e,t,n,r,i;for(t in this.state.formValidity)if(this.state.formValidity[t].valid===!1){i=this.state.formValidity[t].errorTypes;for(n=0,r=i.length;r>n;n++){e=i[n];if("REQUIRED_FIELD"===e)return!1}}return!0},checkIfEmailValid:function(){var e,t,n,r;if(null!=this.state.formValidity.email){r=this.state.formValidity.email.errorTypes;for(t=0,n=r.length;n>t;t++){e=r[t];if("INVALID_EMAIL"===e)return!1}}return!0},handleChange:function(){return this.checkIfAllRequired()&&this.state.errorType===r.MISSING_REQUIRED_FIELDS?this.setState({errorType:void 0}):this.checkIfEmailValid()&&this.state.errorType===r.BLOCKED_EMAIL?this.setState({errorType:void 0}):void 0},handleSubmit:function(e){var t;e.preventDefault();if(/https:\/\/preview\.hs-sites\.com\/.*preview=true/i.test(null!=(t=document.location)?t.href:void 0))console.info("Not submitting form from CMS preview page");else{if(!this.state.submitting){this.setState({submitting:!0});return this.validateForm().done(function(e){return function(t){var n,r,i,o;r=!0;o={};hubspot.utils.map(t,function(e){var t,n;e.valid||(r=!1);return o[e.name]={valid:e.valid,errors:(null!=(t=e.messages)?t.length:void 0)?e.messages:[],errorTypes:(null!=(n=e.errorTypes)?n.length:void 0)?e.errorTypes:[]}});e.setState({formValidity:o,domFields:e.getDomFields(),submitting:r});e.maybeSetGlobalError(t);n=e.runShouldSubmitHandlers(t);r=n&&r;if(r){if(e.props.captchaEnabled){e.props.shell?window.parent.hbspt.forms.executeRecaptcha[e.props.shellId]():null!=(i=window.grecaptcha)&&i.execute(e.state.widgetId);return e.setState({submitting:!1})}e.submitForm();return a.markStart("submit",e.props.correlationId)}e.setState({submitting:!1});return hubspot.utils.runCustomerCallbackFunction(e,"onFormFailedValidation",e.props.formId,t)}}(this))}console.warn("Not submitting form because we are already submitting")}},handlePostSubmission:function(){this.setState({submitted:!0});hubspot.utils.runCustomerCallbackFunction(this,"onFormSubmitted",this.props.formId);return a.markEnd("submit",this.props.correlationId)},maybeSetGlobalError:function(e){var t,n,i,o,a,s,l;l=[];for(n=0,i=e.length;i>n;n++){t=e[n];t.valid===!1?(null!=(o=t.errorTypes)?o.indexOf("REQUIRED_FIELD"):void 0)>-1?l.push(this.setGlobalError(r.MISSING_REQUIRED_FIELDS)):(null!=(a=t.errorTypes)?a.indexOf("INVALID_EMAIL"):void 0)>-1||(null!=(s=t.errorTypes)?s.indexOf("BLOCKED_DOMAIN"):void 0)>-1?l.push(this.setGlobalError(r.BLOCKED_EMAIL)):l.push(void 0):l.push(void 0)}return l},getFormEl:function(){var e,t;e=l.findDOMNode(this);t="form"===e.tagName.toLowerCase()?e:e.querySelector("form");return t},submitForm:function(){var e,t,n,r;t=this.props.shell?window.parent.jQuery:window.jQuery;this.setState({submitting:!0,extraMetaData:this.getExtraMetaDataBeforeSubmit()});if(document.createEvent){n=document.createEvent("Event");n.initEvent("hsvalidatedsubmit",!0,!0);l.findDOMNode(this).dispatchEvent(n)}else if(null!=t){e=t(l.findDOMNode(this));e.trigger("hsvalidatedsubmit")}r=hubspot.utils.retriveSubmissionFieldsFromForm(this.getFormEl(),this.props.fieldGroups);hubspot.utils.runCustomerCallbackFunction(this,"onFormSubmit",this.props.formId,r);this.submissionResponseTimeout=this.createSubmissionResponseTimeout();return l.findDOMNode(this.refs.hsForm).submit()},actuallySubmitForm:function(e,t){var n,r;if(!this.state.submitting){n=e.hs_context.value;r=JSON.parse(n);r.submittedFromExternalJs=!0;e.hs_context.value=JSON.stringify(r)}return null!=t?t.call(e):HTMLFormElement.prototype.submit.call(e)},getFormClass:function(e){var t;t=this.props.cssClass;-1===t.toLowerCase().indexOf("hs-form")&&(t+=" hs-form");this.props.cms&&-1===t.toLowerCase().indexOf("contactformitems")&&(t+=" ContactFormItems");this.props.isVideo&&(t+=" hs-video-form");this.props.hasCustomStyle&&(t+=" hs-custom-style");return t+" hs-form-private hsForm_"+this.props.formId+" hs-form-"+this.props.formId+" hs-form-"+e},getFormAction:function(){var e,t;t="submissions/v3/public/submit/formsnext/multipart/"+this.props.portalId+"/"+this.props.formId;e="local"===hubspot.utils.getLocalStorage("SUBMISSIONS_ENV")?"https://local.hubspotqa.com":this.formsDomain;return e+"/"+t},getFormEncType:function(){var e;e="multipart/form-data";return e},getExtraMetaDataBeforeSubmit:function(){var e,t;t="function"==typeof(e=this.props).getExtraMetaDataBeforeSubmit?e.getExtraMetaDataBeforeSubmit():void 0;return hubspot.utils.isObject(t)?t:{}},generateThankYouMessageFragment:function(){var e,t,n;if(!this.thankYouMessageRendered){e=document.querySelector(this.props.formTarget);e.className="submitted-message hs-form-"+this.props.formId+" hs-form-"+this.props.uniqueIdForClass;t=document.createRange();if("createContextualFragment"in t){n=t.createContextualFragment(this.state.inlineMessage);e.appendChild(n)}else e.innerHTML=this.state.inlineMessage}this.thankYouMessageRendered=!0;return null},renderHubspotLink:function(){return l.createElement(p,{inlineMessage:this.state.inlineMessage,submitted:this.state.submitted,env:this.props.env,portalId:this.props.portalId,formId:this.props.formId,noBrandingScope:this.props.noBrandingScope,isViralityVariation:this.props.isViralityVariation,locale:this.props.locale})},maybeRenderCookieReset:function(){var e,t,n,r;t=h.getMetaDataValue(this.props.metaData,"allowCookieReset");e=!h.isEmpty(this.props.contactProperties);return t&&e?l.createElement("div",{className:"cookie-reset-container"},hubspot.utils.i18nTranslate(null!=(n=this.props.translations)?n[this.props.locale]:void 0,"formsNext.notYou",{locale:this.props.locale})+" ",l.createElement("a",{href:"javascript:void(0);",onClick:this.props.resetCookieAndReRenderForm},hubspot.utils.i18nTranslate(null!=(r=this.props.translations)?r[this.props.locale]:void 0,"formsNext.resetTheForm",{locale:this.props.locale}))):void 0},renderForm:function(){var t;return l.createElement("form",l.__spread({ref:"hsForm"},{noValidate:!0},{acceptCharset:"UTF-8"},{action:this.getFormAction()},{encType:this.getFormEncType()},{id:"hsForm_"+this.props.uniqueId},{method:"POST"},{className:this.getFormClass(this.props.uniqueIdForClass)},{onSubmit:this.handleSubmit},{"data-form-id":this.props.formId},{"data-portal-id":this.props.portalId},this.targetObject),this.maybeRenderCookieReset(),this.renderFieldGroups(),this.renderLegalConsentFields(),this.renderRecaptcha(),this.renderSubmissionError(),l.createElement(u,{submitButtonClass:this.props.submitButtonClass,submitText:this.state.submitText,cms:this.props.cms,translations:null!=(t=this.props.translations)?t[this.props.locale]:void 0,portalId:this.props.portalId,formId:this.props.formId,isVideo:this.props.isVideo}),this.renderHubspotLink(),l.createElement(e,{originalEmbedContext:this.props.originalEmbedContext,formName:this.props.name,timestamp:this.props.timestamp,metaData:this.props.metaData,hutk:this.props.hutk,pageId:this.props.pageId,path:this.props.path,referrer:this.props.referrer,referrerPath:this.props.referrerPath,pageName:this.props.pageName,pageUrl:this.getPageUrlForContext(),pageTitle:this.props.pageTitle,redirectUrl:this.props.redirectUrl,variantId:this.props.variantId,formInstanceId:this.props.formInstanceId,boolCheckBoxFields:this.state.boolCheckBoxFields,dateFields:this.state.dateFields,hiddenSmartFields:this.hiddenSmartFields,urlParams:this.props.urlParams,notificationRecipients:this.props.notificationRecipients,formValidity:this.state.formValidity,domFields:this.state.domFields,rawInlineMessage:this.props.rawInlineMessage,hsFormKey:this.props.hsFormKey,formTarget:this.props.formTarget,isVideo:this.props.isVideo,followUpEmailId:this.props.followUpEmailId,followUpEmailCampaignId:this.props.followUpEmailCampaignId,followUpId:this.props.followUpId,contentType:this.props.contentType,sfdcCampaignId:this.props.sfdcCampaignId,goToWebinarWebinarKey:this.props.goToWebinarWebinarKey,abTestId:this.props.abTestId,correlationId:this.props.correlationId,realUserMonitoring:this.props.realUserMonitoring,isFallback:h.isFallback(),isCookieReset:this.props.isCookieReset,extraMetaData:this.state.extraMetaData,shell:this.props.shell}),this.renderIframe())},getSubmissionIframeName:function(){return"target_iframe_"+this.props.uniqueId},getPageUrlForContext:function(){return this.props.isVideo?this.props.canonicalUrl:this.props.pageUrl},renderIframe:function(){return l.createElement("iframe",{name:this.getSubmissionIframeName(),style:{display:"none"}})},renderSubmissionError:function(){var e;return this.state.errorType?l.createElement("div",{className:"hs_error_rollup"},l.createElement("ul",{className:"no-list "+this.props.errorMessageClass,style:{display:"block"}},l.createElement("li",null,l.createElement("label",{className:"hs-main-font-element"},hubspot.utils.i18nTranslate(null!=(e=this.props.translations)?e[this.props.locale]:void 0,"formsNext.submissionErrors."+this.state.errorType,{locale:this.props.locale}))))):void 0},render:function(){return this.state.inlineMessage&&!this.props.isCos&&(this.state.submitted||this.state.showInlineMessageInitially)?this.props.noBrandingScope||!h.isShareableLink()?l.createElement("div",{className:"submitted-message hs-main-font-element hs-form-"+this.props.formId+" hs-form-"+this.props.uniqueIdForClass,dangerouslySetInnerHTML:{__html:this.state.inlineMessage}}):l.createElement("div",{className:"submitted-message hs-main-font-element free-message"},l.createElement("div",{className:"hs-form-"+this.props.formId+" hs-form-"+this.props.uniqueIdForClass,dangerouslySetInnerHTML:{__html:this.state.inlineMessage}}),this.renderHubspotLink()):this.state.inlineMessage&&this.props.isCos&&(this.state.submitted||this.state.showInlineMessageInitially)?this.generateThankYouMessageFragment():document.querySelector("form "+this.props.formTarget)?l.createElement("div",{className:"hs-nested-form-fix"},l.createElement("span",{dangerouslySetInnerHTML:{__html:''}}),this.renderForm()):this.renderForm()}});null==hubspot.form&&(hubspot.form={});null==(f=hubspot.form).components&&(f.components={});hubspot.form.components.Form=n}).call(this);(function(){var e,t,n,r,i,o;n=window.React;t=window.I18n;o=hns("hubspot.utils");i=hns("hubspot.locale_utils");e=n.createClass({displayName:"ErrorState",toQueryString:function(e){var t,n,r;n=[];for(t in e){r=e[t];n.push(encodeURIComponent(t)+"="+encodeURIComponent(r))}return n.join("&")},getFallbackUrl:function(){var e;e=this.toQueryString(o.extend(hubspot.utils.getQueryStringParams(this.props.context.shell),{isFallback:!0}));return"https://share.hsforms"+this.props.env+".com/"+this.props.context.portalId+"/"+this.props.context.formId+"?"+e},renderErrorStateWithFallback:function(e){return n.createElement("p",{id:"error-state-fallback"},n.createElement("span",null,t.translate("formsNext.fallbackDescription",{locale:e}))," ",n.createElement("a",{href:this.getFallbackUrl()},t.translate("formsNext.fallbackCta",{locale:e})))},renderGenericErrorState:function(e){return n.createElement("p",{id:"error-state-generic"},n.createElement("span",null,t.translate("formsNext.fallbackGenericDescription",{locale:e})))},render:function(){var e;e=i.getBestSupportedLocale(window.navigator.language);return o.isFallback()?this.renderGenericErrorState(e):this.renderErrorStateWithFallback()}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.ErrorState=e}).call(this);(function(){var e,t,n;n=null;t={setUp:function(e){return n=new OutpostErrorReporter("formsnextembed",{env:hubspot.utils.isQA()?"QA":"PROD",disabled:!1,tags:{formGuid:e.formId,portalId:e.portalId,isCOS:hubspot.utils.isCos(e)}})},get:function(){return n}};null==hubspot.form&&(hubspot.form={});null==(e=hubspot.form).formErrorReporter&&(e.formErrorReporter=t)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u;t=window.React;e=hns("hubspot.form.components.Form");u=hns("hubspot.utils");n=9;c={};s=function(e){var t,n;n=null!=e.shell?window.parent:window;return e.pageId?e.pageId:(null!=(t=n.hsVars)?t.page_id:void 0)?n.hsVars.page_id:void 0};a=function(e){var t,n,r,i;if(null!=e.metaData){i=e.metaData;for(t=0,n=i.length;n>t;t++){r=i[t];if("lang"===r.name)return hubspot.utils.getlocaleCode(r.value)}}return!1};l=function(){var e,t,n;e=[/\:\/\/.*\/FormsNext\/static\/coffee\/forms\.js.*/,/\:\/\/js\.hsforms(qa)?\.net\/forms\//];n=(null!=(t=u.currentScript)?t.src:void 0)||"";return 0===e.filter(function(e){return e.test(n)}).length};i=function(e,n,r,i,a,s,l,c,p,f,d,h,m,g,v){var x;e=u.extend({},e,{hutk:void 0});x=document.querySelector(e.target);t.unmountComponentAtNode(x);return o.renderForm(e,n,{},i,a,s,l,c,p,f,d,h,m,g,!0)};o={rerenderForms:function(e){var t,n,r,i,o,a,s;s=null!=e.shell?window.parent:window;if(null!=s&&null!=(i=s.HSFR)?i.FORM_COMPONENTS.length:void 0){o=s.HSFR.FORM_COMPONENTS;a=[];for(n=0,r=o.length;r>n;n++){t=o[n];a.push(t.forceUpdate())}return a}},renderForm:function(r,o,u,p,f,d,h,m,g,v,x,b,y,E,C){var S,I,T,k,w,_,D,N,M,R,O,F,A,L,P,B,V,j,U,z,q,H,G,K,W,Y,Q,J,X,Z,$,ee,te,ne,re;c[r.target]=i.bind(this,r,o,u,p,f,d,h,m,g,v,x,b,y,E,C);J=null!=(B=window.performance)&&"function"==typeof B.now?B.now():void 0;_=hubspot.utils.isQA()?"qa":"";M=r.hutk;ee=hubspot.utils.getUniqueFormId(r.formId,r.formInstanceId);te=hubspot.utils.getUniqueFormIdForClass(r.formId);O=document.querySelector(r.target)?null!==document.querySelector(r.target).querySelector(".performable-legacy"):!1; +S=r.canonicalUrl;L=r.path;Y=r.referrerPath;T=r.contentType;A=s(r);ne=hubspot.utils.getQueryStringParams(r.shell);$=hubspot.utils.shouldRenderFormRawHtml(r,o)&&(null!=d?d.rawHtmlAccess:void 0);R=hubspot.utils.isCos(r);k=r.css;Q=r.cssRequired;N=hubspot.utils.parseObjWithDefault(h,{});D=hubspot.utils.parseObjWithDefault(o.style,{});(null!=d?d.customStyleAccess:void 0)||(D=hubspot.utils.stripCustomStyleProps(D));try{w=hubspot.utils.mergeStyles(N,D)}catch(ie){w={}}R&&(w={});if($){k="";m="";w={}}hubspot.utils.injectCss(k,Q,m,te,w);F=hubspot.utils.extend({},r);null!=F.inlineMessage&&(F.inlineMessage=!0);if(r.inlineMessage&&r.redirectUrl){console.error("Only one of inlineMessage or redirectUrl should be specified in hbspt.forms.create. Using inlineMessage.");delete r.inlineMessage}r.inlineMessage||r.redirectUrl||(r.redirectUrl=o.redirectUrl);r.redirectUrl||r.inlineMessage||(r.inlineMessage=o.inlineMessage);if(J){X=(null!=(V=window.performance)&&"function"==typeof V.now?V.now():void 0)-J;Z=null!=(j=window.performance)&&"function"==typeof j.now?j.now():void 0}P={rumScriptExecuteTime:v,rumServiceResponseTime:x,rumFormRenderTime:X,rumTotalRenderTime:Z,rumTotalRequestTime:b};I=t.render(t.createElement(e,{env:r.env||_,portalId:r.portalId||null,formId:r.formId||null,hutk:M||null,uniqueId:ee,uniqueIdForClass:te,redirectUrl:r.redirectUrl,variantId:o.variantId,formInstanceId:r.formInstanceId,isPerfForm:O,fieldGroups:o.formFieldGroups||[],submitText:o.submitText||"Submit",cms:o.cms||!1,name:o.name,ignoreCurrentValues:r.ignoreCurrentValues||!1,contactProperties:u||{},countryCode:p,canonicalUrl:S?S:void 0,path:L?L:void 0,referrer:r.referrer,referrerPath:Y?Y:void 0,type:r.type,contentType:T?T:void 0,pageId:A?A:void 0,isCos:!0,means:!0,is:!0,s:!0,a:!0,COS:!0,form:!0,widget:!0,isCos:R,pageName:r.pageName,pageUrl:r.pageUrl,pageTitle:r.pageTitle,originalEmbedContext:F,timestamp:g,metaData:o.metaData,deactivateSmartForm:r.deactivateSmartForm||!1,urlParams:ne,onFormReady:r.onFormReady,onFormSubmit:r.onFormSubmit,onFormSubmitted:r.onFormSubmitted,onBeforeValidationInit:r.onBeforeValidationInit,getExtraMetaDataBeforeSubmit:r.getExtraMetaDataBeforeSubmit,notificationRecipients:r.notificationRecipients,formTarget:r.target,api:y,newMultipartSubmissionUngated:(null!=f?f.newMultipartSubmissionUngated:void 0)||!1,noBrandingScope:null!=d?d.noBranding:void 0,isViralityVariation:null!=f?f.viralityVariation:void 0,hasCustomStyle:null!=(null!=w?w.backgroundWidth:void 0)&&!$,cssClass:r.cssClass||(null!=(U=r.formData)?U.cssClass:void 0)||o.cssClass||"",submitButtonClass:r.submitButtonClass,errorClass:r.errorClass||(null!=(z=r.validationOptions)?z.errorClass:void 0)||"invalid error",errorMessageClass:r.errorMessageClass||(null!=(q=r.validationOptions)?q.messageClass:void 0)||"hs-error-msgs inputs-list",groupErrors:r.groupErrors||(null!=(H=r.validationOptions)?H.grouped:void 0)||!0,locale:r.locale||hubspot.utils.getlocaleCode(null!=(G=r.validationOptions)?G.lang:void 0)||a(o)||"en",blockedDomains:r.blockedDomains||(null!=(K=r.validationOptions)?K.forbiddenDomains:void 0)||[],inlineMessage:r.inlineMessage,rawInlineMessage:r.rawInlineMessage,hsFormKey:r.hsFormKey,translations:r.translations||null,followUpEmailId:r.followUpEmailId,followUpEmailCampaignId:r.followUpEmailCampaignId,followUpId:r.followUpId,sfdcCampaignId:r.sfdcCampaignId,goToWebinarWebinarKey:r.goToWebinarWebinarKey,abTestId:r.abTestId,captchaEnabled:r.captchaEnabled||o.captchaEnabled,correlationId:E,realUserMonitoring:P,isFormDemo:Boolean(r.hsFormDemo),isVideo:o.formTypeNumber===n,shell:r.shell,shellId:r.shellId,target:r.target,isCookieReset:C||!1,analyticsFormTypeNumber:o.formTypeNumber,formsBaseUrl:r.formsBaseUrl,isCustomerHostedFormsEmbedScript:l(),resetCookieAndReRenderForm:function(){var e;return"function"==typeof c[e=r.target]?c[e]():void 0}}),document.querySelector(r.target),null!=y?y._triggerReady:void 0);re=r.shell?window.parent:window;null!=re&&null!=(W=re.HSFR)&&W.FORM_COMPONENTS.push(I);return I}};null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).formRenderer&&(r.formRenderer=o)}).call(this);(function(){var e,t,n,r,i,o;o=hns("hubspot.utils");r=hns("hubspot.form.lib.errorReport");e=hns("hubspot.form.formRenderer");t=window.Promise;i={getEmail:function(e){var t;t=o.getQueryStringParams(e.shell);return null!=(null!=t?t.email:void 0)?email:void 0},getUtk:function(){var e;return e=o.getCookie("hubspotutk")},fetchRecaptcha:function(t,n){var r,i,o;o=window;if(!o.HSFR.RECAPTCHA_REQUESTED){o.HSFR.RECAPTCHA_REQUESTED=!0;i=document.createElement("script");document.querySelector("head").appendChild(i);o.hsRecaptchaLoadCallback=function(r){return function(){clearInterval(o.RECAPTCHA_INTERVAL);e.rerenderForms(t);return null!=n?n():void 0}}(this);i.src="https://www.google.com/recaptcha/api.js?onload=hsRecaptchaLoadCallback&render=explicit&isolated=true";return o.RECAPTCHA_INTERVAL=setInterval(function(){var r;if(null!=(null!=(r=o.grecaptcha)?r.render:void 0)){clearInterval(o.RECAPTCHA_INTERVAL);e.rerenderForms(t);if(null!=n)return n()}},100)}return null!=n?r=setInterval(function(){var e;if(null!=(null!=(e=window.grecaptcha)?e.render:void 0)){clearInterval(r);return n()}},100):void 0},fetchAnalytics:function(e,n,i,o){var a;a=e?window.parent:window;return new t(function(e){return a._hsq.push(function(t){var s,l,c;s={};try{null==t.utk||n||(s.hutk=(null!=(c=t.utk)?c.visitor:void 0)||void 0);null==t.canonicalUrl||i||(s.canonicalUrl=t.canonicalUrl);null==t.contentType||o||(s.contentType=t.contentType);null!=t.pageId&&(s.pageId=t.pageId);null!=t.path&&(s.path=t.path);null!=t.referrerPath&&(s.referrerPath=t.referrerPath);return e(s)}catch(u){l=u;r.report(l,{cookies:a.document.cookie,type:"analytics callback"});return e()}})})},fetchData:function(e,t){var n,i,a,s,l;i=o.isQA()?"qa":"";l=o.getUniqueFormId(e.formId,e.formInstanceId);s=null!=(a=window.performance)&&"function"==typeof a.now?a.now():void 0;n=new hubspot.EmbedClient(e.env||i,e.portalId,e.formId,t,e.formsBaseUrl);return n.fetch().then(function(t){return function(n,i){var a,l,c,u,p,f,d,h,m,g,v,x,b,y;if(o.isInteger(n)){404===n?console.error("Couldn't find HubSpot form data. If this is an old form not being used, please consider removing the script"):402===n?console.error("Your HubSpot account is expired or doesn't have access to forms"):400===n?console.error("HubSpot data could not be loaded. Please ensure the form is embedable and the form guid is correct"):500>n?console.error("Hubspot data could not be loaded"):r.report(new Error("Couldn't fetch embed client data because of server error"));o.runCustomerCallbackFunction(null,"onFormDefinitionFetchError",e.formId,i)}else try{g=null!=(h=window.performance)&&"function"==typeof h.now?h.now():void 0;s&&(v=(null!=(m=window.performance)&&"function"==typeof m.now?m.now():void 0)-s);p=n.form;a=e.previewMode?e.properties:o.extend(n.properties,e.properties,o.getCachedCompletedFields());a=hubspot.utils.isCOSPreview()&&window.forms_preview_contact?window.forms_preview_contact:a;f=n.gates;x=n.scopes;y=n.time;d=n.globalStyle;b=n.themeCss;l=n.countryCode;if(p.cms){u=document.querySelector(e.target);u.classList?u.classList.add("Normal","ContactFormWrapper"):u.className+=" Normal ContactFormWrapper"}o.runCustomerCallbackFunction(null,"onBeforeFormInit",e.formId);null!=e.onBeforeFormInit&&e.onBeforeFormInit(e);p.captchaEnabled&&!e.shell&&t.fetchRecaptcha(e);return{formData:p,contactProperties:a,gates:f,scopes:x,globalStyle:d,themeCss:b,time:y,rumServiceResponseTime:g,rumTotalRequestTime:v,countryCode:l}}catch(E){c=E;o.runCustomerCallbackFunction(null,"onFormDefinitionFetchError",e.formId);return r.report(c,{cookies:document.cookie,type:"fetch callback"})}}}(this))}};null==hubspot.form&&(hubspot.form={});null==(n=hubspot.form).formFetcher&&(n.formFetcher=i)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f,d,h,m,g;i=window.React;e=hns("hubspot.form.components.Form");t=hns("hubspot.form.formFetcher");g=hns("hubspot.utils");n="6Lc2_RsUAAAAAAYBSd4rxsgeQz7whuL9COCsHeET";r="6LfoMB8UAAAAAAxuC2YUhdgQvIKqJLk7qjX9yvzE";window.hbspt.forms.shells=window.hbspt.forms.shells||0;window.hbspt.forms.resize=window.hbspt.forms.resize||{};window.hbspt.forms.executeRecaptcha=window.hbspt.forms.executeRecaptcha||{};a=function(e){delete e.css;return delete e.cssClass};u=function(e,t,n){if(t&&n){e.setAttribute("height",t);e.setAttribute("width",n);e.style.height=t+"px";return e.style.width=n+"px"}};m=function(e){e.style.position="static";e.style.border="none";e.style.display="block";e.style.overflow="hidden";return e.style.width="100%"};s=function(e,t){var n,r,i,o;if(e.target){i=document.querySelector(e.target);if(!i){console.error("No target with selector "+e.target+" found to render HubSpot form, please make sure there's an existing DOM element with a matching selector");return!1}r=i}else{i=document.createElement("div");i.className="hs-form";o="hs-form-"+e.shellId;i.setAttribute("id",o);g.currentScript.insertAdjacentHTML("afterend",i.outerHTML);r=document.getElementById(""+o)}n=document.createElement("iframe");n.id="hs-form-iframe-"+e.shellId;n.className="hs-form-iframe";n.scrolling="no";m(n);u(n,0,0);window.hbspt.forms.resize[e.shellId]=function(e,t){return u(n,e,t)};n.onload=function(){return f(n,e,t)};r.appendChild(n);return n};l=function(e,t){var n;n=document.createElement("div");n.id="hbspt-forms-recaptchaTarget-"+t.shellId;return e.parentNode.insertBefore(n,e)};f=function(e,t,n){p(e);h(e);return d(e,t,n)};p=function(e){var t,n;n=e.contentWindow.document;t=n.createElement("base");t.href=document.location.href;t.target="_parent";return n.head.appendChild(t)};h=function(e){var t,n;t=e.contentWindow.document;n=t.createElement("style");n.innerText=".hs-form * { box-sizing: border-box; } body { margin: 0 }";return t.head.appendChild(n)};d=function(e,t,n){var r,i,o,a;i=e.contentWindow;r=i.document;a=g.currentScript.src;"local"===t.env&&(a=document.location.origin+"/FormsNext/static-3.465/bundles/project_debug_legacy.js");o=r.createElement("script");o.src=a;o.setAttribute("data-hs-shell",!0);t.shell=!0;t.pageUrl=t.pageUrl||document.location.href;t.pageTitle=t.pageTitle||document.title;t.referrer=t.referrer||document.referrer;t.target=void 0;t.privateInternalContext=n;o.onload=function(){return e.contentWindow.hbspt.forms.create(t)};return r.body.appendChild(o)};c={renderRecaptcha:function(e,i){var o;o=null;t.fetchRecaptcha(e,function(t){return function(){var t,a,s,l;s=document.createElement("div");l="hs-outer-captcha-target-"+e.shellId;s.setAttribute("id",l);s.setAttribute("style","display:none;width:0;height:0;");i.insertAdjacentHTML("afterend",s.outerHTML);t={badge:"inline",callback:function(e){return i.contentWindow.setRecaptchaToken(e)},"expired-callback":function(){return i.contentWindow.setRecaptchaToken("")},sitekey:"qa"===e.env?r:n,size:"invisible"};o=null!=(a=window.grecaptcha)?a.render(document.getElementById(l),t,!0):void 0;return window.hbspt.forms.executeRecaptcha[e.shellId]=function(){return window.grecaptcha.execute(o)}}}(this));return l(i,e)},renderShell:function(e,t){var n;a(e);e.shellId=window.hbspt.forms.shells++;n=s(e,t);return n&&t.formData.captchaEnabled?this.renderRecaptcha(e,n):void 0}};null==hubspot.form&&(hubspot.form={});null==(o=hubspot.form).formShellRenderer&&(o.formShellRenderer=c)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c;i=window.React;t=hns("hubspot.form.components.Form");e=hns("hubspot.form.components.ErrorState");n=hns("hubspot.form.formRenderer");r=hns("hubspot.form.formShellRenderer");c=hns("hubspot.utils");a=hns("hubspot.form.constants");l=function(e){var t,n,r,i;if(null!=e.metaData){i=e.metaData;for(t=0,n=i.length;n>t;t++){r=i[t];if("lang"===r.name)return hubspot.utils.getlocaleCode(r.value)}}return!1};s={render:function(e,t){var i,o,a,s,l,u,p,f,d,h,m,g,v;if(c.shouldRenderShell(e,t))return r.renderShell(e,t);l=t.formData,o=t.contactProperties,s=t.countryCode,u=t.gates,m=t.scopes,p=t.globalStyle,g=t.themeCss,v=t.time,f=t.rumScriptExecuteTime,d=t.rumServiceResponseTime,h=t.rumTotalRequestTime,i=t.api,a=t.correlationId;return n.renderForm(e,l,o,s,u,m,p,g,v,f,d,h,i,a)},renderDemo:function(e,t){var r,i,o,a,s,l,c,u,p,f,d,h,m,g;l=t.formDefinition,i=t.contactProperties,a=t.countryCode,c=t.gates,h=t.scopes,u=t.globalStyle,m=t.themeCss,g=t.time,p=t.rumScriptExecuteTime,f=t.rumServiceResponseTime,d=t.rumTotalRequestTime,r=t.api,o=t.correlationId;s=l;return n.renderForm(e,s,i,a,c,h,u,m,g,p,f,d,r,o)},renderErrorState:function(t){var n;return i.render(i.createElement(e,{context:t,env:t.env||env,locale:t.locale||hubspot.utils.getlocaleCode(null!=(n=t.validationOptions)?n.lang:void 0)||"en"}),document.querySelector(t.target))}};null==hubspot.form&&(hubspot.form={});null==(o=hubspot.form).formBootstrapper&&(o.formBootstrapper=s)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f,d,h;r||(r=null!=(f=window.performance)&&"function"==typeof f.now?f.now():void 0);t=hns("hubspot.form.api");h=hns("hubspot.utils");u=hns("hubspot.form.formBootstrapper");p=hns("hubspot.form.formFetcher");c=hns("hubspot.form.lib.errorReport");n=hns("hubspot.form.perf.PerfMeasurer");i=window.React;window.I18n.defaultLocale="en";window.I18n.fallbacks=!0;e="data-hubspot-rendered";d=function(e,t,n,r,i){null==t&&(t={});if(document.querySelector(e.target)){null==t.api&&(t.api=n);null==t.correlationId&&(t.correlationId=r);null==t.rumScriptExecuteTime&&(t.rumScriptExecuteTime=i);return u.render(e,t)}console.warn("Couldn't find target container "+e.target+" for HubSpot Form "+e.formId+". Not rendering form onto the page")};l=function(t){var n,r,i,o,a,s,l;r=document.createElement("div");s=t.cms?["hbspt-form","Normal","ContactFormWrapper"]:["hbspt-form"];if(r.classList)for(n=0,i=s.length;i>n;n++){a=s[n];r.classList.add(a)}else r.className=s.join(" ");l="hbspt-form-"+(new Date).getTime()+"-"+Math.floor(1e10*Math.random()+1);r.setAttribute("id",l);o=h.getCurrentScript(t.formId);o.setAttribute(e,"true");o.insertAdjacentHTML("afterend",r.outerHTML);return l};a=function(e){var t,n;e.portalId=null!=(t=e.portalId)?t.toString().trim():void 0;return e.formId=null!=(n=e.formId)?n.toString().trim():void 0};s=function(e){var o,s,f,m,g,v,x;a(e);if(e.portalId&&e.formId){e.shell||(e.privateInternalContext=null);o=t(e.formId);c.setupErrorReporter(e);s=hubspot.utils.getUuid();n.setup(e.env);n.measureEmbedScript();if(e.target){g=document.querySelector(e.target);g&&i.unmountComponentAtNode(g)}else{v=l(e);e.target="#"+v}x=null!=e.shell?window.parent:window;x.HSFR||(x.HSFR={FORM_COMPONENTS:[],RECAPTCHA_REQUESTED:!1,RECAPTCHA_INTERVAL:void 0});e.shell||null==window._hsq&&(window._hsq=[]);f=null;if(e.hsFormDemo)hubspot.utils.ready(function(){return u.renderDemo(e,e.hsFormDemo)});else{if(null==e.shell||null==e.privateInternalContext){e.hsFallback||(m=p.getUtk());if(m){e.hutk=m;c.addCookies({hutk:m})}p.fetchData(e,m,e.hsFallback).then(function(t){if(t){f=t;n.measureFormRequest(e.formId);return hubspot.utils.ready(function(){n.markStart("render",s);d(e,f,o,s,r);x=e.shell?window.parent:window;return x._hsq.push(["trackFormView",e.formId,s,{formType:f.formData.formTypeNumber,formVariantId:f.formData.variantId}])})}})["catch"](function(){h.runCustomerCallbackFunction(null,"onFormDefinitionFetchError",e.formId);return u.renderErrorState(e)});return o}hubspot.utils.ready(function(){return d(h.omit(e,["privateInternalContext"]),e.privateInternalContext)})}}else console.error("Please, pass a portal id and form id to render your HubSpot form")};null==window.hbspt&&(window.hbspt={});null==(o=window.hbspt).forms&&(o.forms={});window.hbspt.forms.create=s;hubspot.utils.ready(function(){return setTimeout(function(){var e,t,n,r,i,o;n=document.querySelectorAll(".hbspt-form-container");if(n.length)for(i=r=0,o=n.length;o>r;i=++r){e=n[i];t={};t.portalId=e.getAttribute("data-portalid");t.formId=e.getAttribute("data-formid");t.env=e.getAttribute("data-env");if(!t.portalId||!t.formId){h.debug('Element with class ".hbspt-form-container" is missing [data-portalid] or [data-formid] attributes');return}t.async=!0;t.target="#hbspt-form-"+i;e.setAttribute("id","hbspt-form-"+i);hbspt.forms.create(t)}},200)})}).call(this);!function(){for(var e=0;e { expect(html).toMatch(/Hello World/) }) + if (browserName === 'internet explorer') { + it('should handle bad Promise polyfill', async () => { + const browser = await webdriver(appPort, '/bad-promise') + expect(await browser.eval('window.didRender')).toBe(true) + }) + + it('should polyfill RegExp successfully', async () => { + const browser = await webdriver(appPort, '/regexp-polyfill') + expect(await browser.eval('window.didRender')).toBe(true) + }) + } + it('should allow etag header support', async () => { const url = `http://localhost:${appPort}/` const etag = (await fetch(url)).headers.get('ETag') diff --git a/test/integration/size-limit/test/index.test.js b/test/integration/size-limit/test/index.test.js index 31c977e5ab73d0c..59d77021a016c2c 100644 --- a/test/integration/size-limit/test/index.test.js +++ b/test/integration/size-limit/test/index.test.js @@ -80,7 +80,7 @@ describe('Production response size', () => { ) // These numbers are without gzip compression! - const delta = responseSizesBytes - 232 * 1024 + const delta = responseSizesBytes - 257 * 1024 expect(delta).toBeLessThanOrEqual(1024) // don't increase size more than 1kb expect(delta).toBeGreaterThanOrEqual(-1024) // don't decrease size more than 1kb without updating target }) From 9d9f7a587330329cdf1c36bde76740f06545bba4 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Wed, 11 Mar 2020 16:34:14 -0400 Subject: [PATCH 17/47] Improve Sass Error (#10982) * Improve Sass Error * test sass error massage * use quotes Co-authored-by: JJ Kasper --- errors/install-sass.md | 19 +++++++++ .../error-overlay/format-webpack-messages.js | 17 +++++--- .../scss-fixtures/webpack-error/mock.js | 7 ++++ .../scss-fixtures/webpack-error/pages/_app.js | 12 ++++++ .../webpack-error/pages/index.js | 3 ++ .../webpack-error/styles/global.scss | 4 ++ test/integration/scss/test/index.test.js | 41 ++++++++++++++++--- 7 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 errors/install-sass.md create mode 100644 test/integration/scss-fixtures/webpack-error/mock.js create mode 100644 test/integration/scss-fixtures/webpack-error/pages/_app.js create mode 100644 test/integration/scss-fixtures/webpack-error/pages/index.js create mode 100644 test/integration/scss-fixtures/webpack-error/styles/global.scss diff --git a/errors/install-sass.md b/errors/install-sass.md new file mode 100644 index 000000000000000..91b7d1301f39562 --- /dev/null +++ b/errors/install-sass.md @@ -0,0 +1,19 @@ +# Install `sass` to Use Built-In Sass Support + +#### Why This Error Occurred + +Using Next.js' [built-in Sass support](https://nextjs.org/docs/basic-features/built-in-css-support#sass-support) requires that you bring your own version of Sass. + +#### Possible Ways to Fix It + +Please install the `sass` package in your project. + +```bash +npm i sass +# or +yarn add sass +``` + +### Useful Links + +- [Sass Support in Documentation](https://nextjs.org/docs/basic-features/built-in-css-support#sass-support) diff --git a/packages/next/client/dev/error-overlay/format-webpack-messages.js b/packages/next/client/dev/error-overlay/format-webpack-messages.js index 6ff01edca15be6e..c61845352ff6abb 100644 --- a/packages/next/client/dev/error-overlay/format-webpack-messages.js +++ b/packages/next/client/dev/error-overlay/format-webpack-messages.js @@ -31,8 +31,7 @@ function isLikelyASyntaxError(message) { } // Cleans up webpack error messages. -// eslint-disable-next-line no-unused-vars -function formatMessage(message, isError) { +function formatMessage(message) { let lines = message.split('\n') // Strip Webpack-added headers off errors/warnings @@ -58,9 +57,6 @@ function formatMessage(message, isError) { /SyntaxError\s+\((\d+):(\d+)\)\s*(.+?)\n/g, `${friendlySyntaxErrorLabel} $3 ($1:$2)\n` ) - // Remove columns from ESLint formatter output (we added these for more - // accurate syntax errors) - message = message.replace(/Line (\d+):\d+:/g, 'Line $1:') // Clean up export errors message = message.replace( /^.*export '(.+?)' was not found in '(.+?)'.*$/gm, @@ -93,6 +89,17 @@ function formatMessage(message, isError) { ] } + // Add helpful message for users trying to use Sass for the first time + if (lines[1] && lines[1].match(/Cannot find module.+node-sass/)) { + // ./file.module.scss (<>) => ./file.module.scss + lines[0] = lines[0].replace(/(.+) \(.+?(?=\?\?).+?\)/, '$1') + + lines[1] = + "To use Next.js' built-in Sass support, you first need to install `sass`.\n" + lines[1] += 'Run `npm i sass` or `yarn add sass` inside your workspace.\n' + lines[1] += '\nLearn more: https://err.sh/next.js/install-sass' + } + message = lines.join('\n') // Internal stacks are generally useless so we strip them... with the // exception of stacks containing `webpack:` because they're normally diff --git a/test/integration/scss-fixtures/webpack-error/mock.js b/test/integration/scss-fixtures/webpack-error/mock.js new file mode 100644 index 000000000000000..2b56e6dc476c766 --- /dev/null +++ b/test/integration/scss-fixtures/webpack-error/mock.js @@ -0,0 +1,7 @@ +let originalLoader +const M = require('module') +originalLoader = M._load +M._load = function hookedLoader(request, parent, isMain) { + if (request === 'node-sass') request = 'node-sass-begone' + return originalLoader(request, parent, isMain) +} diff --git a/test/integration/scss-fixtures/webpack-error/pages/_app.js b/test/integration/scss-fixtures/webpack-error/pages/_app.js new file mode 100644 index 000000000000000..b89fe16feb73145 --- /dev/null +++ b/test/integration/scss-fixtures/webpack-error/pages/_app.js @@ -0,0 +1,12 @@ +import React from 'react' +import App from 'next/app' +import '../styles/global.scss' + +class MyApp extends App { + render() { + const { Component, pageProps } = this.props + return + } +} + +export default MyApp diff --git a/test/integration/scss-fixtures/webpack-error/pages/index.js b/test/integration/scss-fixtures/webpack-error/pages/index.js new file mode 100644 index 000000000000000..5cbac8a153d77f0 --- /dev/null +++ b/test/integration/scss-fixtures/webpack-error/pages/index.js @@ -0,0 +1,3 @@ +export default function Home() { + return
This text should be red.
+} diff --git a/test/integration/scss-fixtures/webpack-error/styles/global.scss b/test/integration/scss-fixtures/webpack-error/styles/global.scss new file mode 100644 index 000000000000000..da7b3d1417b1bba --- /dev/null +++ b/test/integration/scss-fixtures/webpack-error/styles/global.scss @@ -0,0 +1,4 @@ +$var: red; +.red-text { + color: $var; +} diff --git a/test/integration/scss/test/index.test.js b/test/integration/scss/test/index.test.js index 5a75663ce8235c1..1678bb00e07962d 100644 --- a/test/integration/scss/test/index.test.js +++ b/test/integration/scss/test/index.test.js @@ -1,26 +1,55 @@ /* eslint-env jest */ /* global jasmine */ +import cheerio from 'cheerio' import 'flat-map-polyfill' -import { join } from 'path' import { readdir, readFile, remove } from 'fs-extra' import { + File, findPort, + killApp, + launchApp, nextBuild, nextStart, - launchApp, - killApp, - File, - waitFor, renderViaHTTP, + waitFor, } from 'next-test-utils' import webdriver from 'next-webdriver' -import cheerio from 'cheerio' +import { join } from 'path' +import { quote as shellQuote } from 'shell-quote' jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 2 const fixturesDir = join(__dirname, '../..', 'scss-fixtures') describe('SCSS Support', () => { + describe('Friendly Webpack Error', () => { + const appDir = join(fixturesDir, 'webpack-error') + + const mockFile = join(appDir, 'mock.js') + + beforeAll(async () => { + await remove(join(appDir, '.next')) + }) + + it('should be a friendly error successfully', async () => { + const { code, stderr } = await nextBuild(appDir, [], { + env: { NODE_OPTIONS: shellQuote([`--require`, mockFile]) }, + stderr: true, + }) + expect(code).toBe(1) + expect(stderr.split('Require stack:')[0]).toMatchInlineSnapshot(` + "Failed to compile. + + ./styles/global.scss + To use Next.js' built-in Sass support, you first need to install \`sass\`. + Run \`npm i sass\` or \`yarn add sass\` inside your workspace. + + Learn more: https://err.sh/next.js/install-sass + " + `) + }) + }) + describe('Basic Global Support', () => { const appDir = join(fixturesDir, 'single-global') From ccb6ce7ed40ab22ceb1005921e4b26f3dcfb56b0 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Thu, 12 Mar 2020 04:48:14 -0500 Subject: [PATCH 18/47] Add support for getStaticProps in pages/404 (#10984) * Make sure to not show pages/404 GIP error from _app having GIP * Add error for getStaticProps in pages/404 too * Add support for getStaticProps in pages/404 * Update test --- packages/next/build/index.ts | 4 +- packages/next/lib/constants.ts | 2 +- packages/next/next-server/server/render.tsx | 5 +- test/integration/404-page-ssg/next.config.js | 1 + test/integration/404-page-ssg/pages/404.js | 6 + test/integration/404-page-ssg/pages/_app.js | 12 ++ test/integration/404-page-ssg/pages/err.js | 5 + test/integration/404-page-ssg/pages/index.js | 1 + .../404-page-ssg/test/index.test.js | 180 ++++++++++++++++++ test/integration/404-page/test/index.test.js | 10 +- 10 files changed, 214 insertions(+), 12 deletions(-) create mode 100644 test/integration/404-page-ssg/next.config.js create mode 100644 test/integration/404-page-ssg/pages/404.js create mode 100644 test/integration/404-page-ssg/pages/_app.js create mode 100644 test/integration/404-page-ssg/pages/err.js create mode 100644 test/integration/404-page-ssg/pages/index.js create mode 100644 test/integration/404-page-ssg/test/index.test.js diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 39b3bcfd36468b7..24d92156f690941 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -549,12 +549,12 @@ export default async function build(dir: string, conf = null): Promise { } if (hasPages404 && page === '/404') { - if (!result.isStatic) { + if (!result.isStatic && !result.hasStaticProps) { throw new Error(PAGES_404_GET_INITIAL_PROPS_ERROR) } // we need to ensure the 404 lambda is present since we use // it when _app has getInitialProps - if (customAppGetInitialProps) { + if (customAppGetInitialProps && !result.hasStaticProps) { staticPages.delete(page) } } diff --git a/packages/next/lib/constants.ts b/packages/next/lib/constants.ts index ae74148ce8256c9..e8025b25e9ec28b 100644 --- a/packages/next/lib/constants.ts +++ b/packages/next/lib/constants.ts @@ -30,4 +30,4 @@ export const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialP export const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps with getServerSideProps. To use SSG, please remove getServerSideProps` -export const PAGES_404_GET_INITIAL_PROPS_ERROR = `\`pages/404\` can not have getInitialProps/getServerSideProps/getStaticProps, https://err.sh/zeit/next.js/404-get-initial-props` +export const PAGES_404_GET_INITIAL_PROPS_ERROR = `\`pages/404\` can not have getInitialProps/getServerSideProps, https://err.sh/zeit/next.js/404-get-initial-props` diff --git a/packages/next/next-server/server/render.tsx b/packages/next/next-server/server/render.tsx index 7e5e85d2b636671..920b6b70e130914 100644 --- a/packages/next/next-server/server/render.tsx +++ b/packages/next/next-server/server/render.tsx @@ -418,10 +418,7 @@ export async function renderToHTML( renderOpts.nextExport = true } - if ( - pathname === '/404' && - (hasPageGetInitialProps || getServerSideProps || isSSG) - ) { + if (pathname === '/404' && (hasPageGetInitialProps || getServerSideProps)) { throw new Error(PAGES_404_GET_INITIAL_PROPS_ERROR) } } diff --git a/test/integration/404-page-ssg/next.config.js b/test/integration/404-page-ssg/next.config.js new file mode 100644 index 000000000000000..4ba52ba2c8df675 --- /dev/null +++ b/test/integration/404-page-ssg/next.config.js @@ -0,0 +1 @@ +module.exports = {} diff --git a/test/integration/404-page-ssg/pages/404.js b/test/integration/404-page-ssg/pages/404.js new file mode 100644 index 000000000000000..3af534db8fc8966 --- /dev/null +++ b/test/integration/404-page-ssg/pages/404.js @@ -0,0 +1,6 @@ +export const getStaticProps = () => ({ + props: { hello: 'world', random: Math.random() }, +}) + +const page = ({ random }) => `custom 404 page ${random}` +export default page diff --git a/test/integration/404-page-ssg/pages/_app.js b/test/integration/404-page-ssg/pages/_app.js new file mode 100644 index 000000000000000..93e23041c80e84a --- /dev/null +++ b/test/integration/404-page-ssg/pages/_app.js @@ -0,0 +1,12 @@ +const App = ({ Component, pageProps }) => + +App.getInitialProps = async ({ Component, ctx }) => { + if (Component.getInitialProps) { + await Component.getInitialProps(ctx) + } + return { + pageProps: {}, + } +} + +export default App diff --git a/test/integration/404-page-ssg/pages/err.js b/test/integration/404-page-ssg/pages/err.js new file mode 100644 index 000000000000000..6d0f2c17817a3a7 --- /dev/null +++ b/test/integration/404-page-ssg/pages/err.js @@ -0,0 +1,5 @@ +const page = () => 'err page' +page.getInitialProps = () => { + throw new Error('oops') +} +export default page diff --git a/test/integration/404-page-ssg/pages/index.js b/test/integration/404-page-ssg/pages/index.js new file mode 100644 index 000000000000000..f6c15d1f66e8a6d --- /dev/null +++ b/test/integration/404-page-ssg/pages/index.js @@ -0,0 +1 @@ +export default () => 'hello from index' diff --git a/test/integration/404-page-ssg/test/index.test.js b/test/integration/404-page-ssg/test/index.test.js new file mode 100644 index 000000000000000..487ecae21109007 --- /dev/null +++ b/test/integration/404-page-ssg/test/index.test.js @@ -0,0 +1,180 @@ +/* eslint-env jest */ +/* global jasmine */ +import fs from 'fs-extra' +import { join } from 'path' +import { + killApp, + findPort, + launchApp, + nextStart, + nextBuild, + renderViaHTTP, + fetchViaHTTP, +} from 'next-test-utils' + +jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 2 + +const appDir = join(__dirname, '../') +const nextConfig = join(appDir, 'next.config.js') +const gip404Err = /`pages\/404` can not have getInitialProps\/getServerSideProps/ + +let nextConfigContent +let stdout +let stderr +let buildId +let appPort +let app + +const runTests = isDev => { + it('should respond to 404 correctly', async () => { + const res = await fetchViaHTTP(appPort, '/404') + expect(res.status).toBe(404) + expect(await res.text()).toContain('custom 404 page') + }) + + it('should render error correctly', async () => { + const text = await renderViaHTTP(appPort, '/err') + expect(text).toContain(isDev ? 'oops' : 'An unexpected error has occurred') + }) + + it('should not show an error in the logs for 404 SSG', async () => { + await renderViaHTTP(appPort, '/non-existent') + expect(stderr).not.toMatch(gip404Err) + expect(stdout).not.toMatch(gip404Err) + }) + + it('should render index page normal', async () => { + const html = await renderViaHTTP(appPort, '/') + expect(html).toContain('hello from index') + }) + + if (!isDev) { + it('should not revalidate custom 404 page', async () => { + const res1 = await renderViaHTTP(appPort, '/non-existent') + const res2 = await renderViaHTTP(appPort, '/non-existent') + const res3 = await renderViaHTTP(appPort, '/non-existent') + const res4 = await renderViaHTTP(appPort, '/non-existent') + + expect(res1 === res2 && res2 === res3 && res3 === res4).toBe(true) + + expect(res1).toContain('custom 404 page') + }) + + it('should set pages404 in routes-manifest correctly', async () => { + const data = await fs.readJSON(join(appDir, '.next/routes-manifest.json')) + expect(data.pages404).toBe(true) + }) + + it('should have 404 page in prerender-manifest', async () => { + const data = await fs.readJSON( + join(appDir, '.next/prerender-manifest.json') + ) + expect(data.routes['/404']).toEqual({ + initialRevalidateSeconds: false, + srcRoute: null, + dataRoute: `/_next/data/${buildId}/404.json`, + }) + }) + } +} + +describe('404 Page Support SSG', () => { + describe('server mode', () => { + afterAll(() => killApp(app)) + + it('should build successfully', async () => { + nextConfigContent = await fs.readFile(nextConfig, 'utf8') + const { + code, + stderr: buildStderr, + stdout: buildStdout, + } = await nextBuild(appDir, [], { + stderr: true, + stdout: true, + }) + + expect(code).toBe(0) + expect(buildStderr).not.toMatch(gip404Err) + expect(buildStdout).not.toMatch(gip404Err) + + appPort = await findPort() + stderr = '' + stdout = '' + + app = await nextStart(appDir, appPort, { + onStdout(msg) { + stdout += msg + }, + onStderr(msg) { + stderr += msg + }, + }) + buildId = await fs.readFile(join(appDir, '.next/BUILD_ID'), 'utf8') + }) + + runTests() + }) + + describe('serverless mode', () => { + afterAll(async () => { + await fs.writeFile(nextConfig, nextConfigContent) + await killApp(app) + }) + + it('should build successfully', async () => { + nextConfigContent = await fs.readFile(nextConfig, 'utf8') + await fs.writeFile( + nextConfig, + ` + module.exports = { target: 'experimental-serverless-trace' } + ` + ) + const { + code, + stderr: buildStderr, + stdout: buildStdout, + } = await nextBuild(appDir, [], { + stderr: true, + stdout: true, + }) + + expect(code).toBe(0) + expect(buildStderr).not.toMatch(gip404Err) + expect(buildStdout).not.toMatch(gip404Err) + + appPort = await findPort() + stderr = '' + stdout = '' + app = await nextStart(appDir, appPort, { + onStdout(msg) { + stdout += msg + }, + onStderr(msg) { + stderr += msg + }, + }) + buildId = await fs.readFile(join(appDir, '.next/BUILD_ID'), 'utf8') + }) + + runTests() + }) + + describe('dev mode', () => { + beforeAll(async () => { + appPort = await findPort() + stderr = '' + stdout = '' + app = await launchApp(appDir, appPort, { + onStdout(msg) { + stdout += msg + }, + onStderr(msg) { + stderr += msg + }, + }) + }) + afterAll(() => killApp(app)) + + runTests(true) + }) +}) diff --git a/test/integration/404-page/test/index.test.js b/test/integration/404-page/test/index.test.js index 6c481628d24aefc..913304ede143892 100644 --- a/test/integration/404-page/test/index.test.js +++ b/test/integration/404-page/test/index.test.js @@ -182,7 +182,7 @@ describe('404 Page Support', () => { expect(stderr).toMatch(gip404Err) }) - it('shows error with getStaticProps in pages/404 build', async () => { + it('does not show error with getStaticProps in pages/404 build', async () => { await fs.move(pages404, `${pages404}.bak`) await fs.writeFile( pages404, @@ -196,11 +196,11 @@ describe('404 Page Support', () => { await fs.remove(pages404) await fs.move(`${pages404}.bak`, pages404) - expect(stderr).toMatch(gip404Err) - expect(code).toBe(1) + expect(stderr).not.toMatch(gip404Err) + expect(code).toBe(0) }) - it('shows error with getStaticProps in pages/404 dev', async () => { + it('does not show error with getStaticProps in pages/404 dev', async () => { await fs.move(pages404, `${pages404}.bak`) await fs.writeFile( pages404, @@ -226,7 +226,7 @@ describe('404 Page Support', () => { await fs.remove(pages404) await fs.move(`${pages404}.bak`, pages404) - expect(stderr).toMatch(gip404Err) + expect(stderr).not.toMatch(gip404Err) }) it('shows error with getServerSideProps in pages/404 build', async () => { From a86184eb894140c832db154b9f71c55252d107a0 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 12 Mar 2020 07:31:26 -0400 Subject: [PATCH 19/47] v9.3.1-canary.2 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-google-analytics/package.json | 2 +- packages/next-plugin-material-ui/package.json | 2 +- packages/next-plugin-sentry/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next/package.json | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index 508bc0447250e8f..0b6c53afa53300d 100644 --- a/lerna.json +++ b/lerna.json @@ -12,5 +12,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "9.3.1-canary.1" + "version": "9.3.1-canary.2" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index 3e0f3df892b5d8e..27846481c7cc9c2 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "9.3.1-canary.1", + "version": "9.3.1-canary.2", "keywords": [ "react", "next", diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 304cfaf4019f485..ab36cd52f3b58ee 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "9.3.1-canary.1", + "version": "9.3.1-canary.2", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 1d57e6778b857ed..6f60ff3ae55f55b 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "9.3.1-canary.1", + "version": "9.3.1-canary.2", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-google-analytics/package.json b/packages/next-plugin-google-analytics/package.json index ae0cbcc1530cbbe..5fd4967b1d456ed 100644 --- a/packages/next-plugin-google-analytics/package.json +++ b/packages/next-plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-google-analytics", - "version": "9.3.1-canary.1", + "version": "9.3.1-canary.2", "nextjs": { "name": "Google Analytics", "required-env": [ diff --git a/packages/next-plugin-material-ui/package.json b/packages/next-plugin-material-ui/package.json index 46f961321169c76..8e0f1517030dace 100644 --- a/packages/next-plugin-material-ui/package.json +++ b/packages/next-plugin-material-ui/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-material-ui", - "version": "9.3.1-canary.1", + "version": "9.3.1-canary.2", "nextjs": { "name": "Material UI", "required-env": [] diff --git a/packages/next-plugin-sentry/package.json b/packages/next-plugin-sentry/package.json index 2fd6be2fec62711..f22f4c8ec2d10e6 100644 --- a/packages/next-plugin-sentry/package.json +++ b/packages/next-plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-sentry", - "version": "9.3.1-canary.1", + "version": "9.3.1-canary.2", "nextjs": { "name": "Sentry", "required-env": [ diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 194a5c5f692b027..1bf82bedfa74d7a 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "9.3.1-canary.1", + "version": "9.3.1-canary.2", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next/package.json b/packages/next/package.json index e1f5b55175a914e..c024658df1802b0 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "9.3.1-canary.1", + "version": "9.3.1-canary.2", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -73,7 +73,7 @@ "@babel/preset-typescript": "7.7.2", "@babel/runtime": "7.7.2", "@babel/types": "7.7.4", - "@next/polyfill-nomodule": "9.3.1-canary.1", + "@next/polyfill-nomodule": "9.3.1-canary.2", "amphtml-validator": "1.0.30", "async-retry": "1.2.3", "async-sema": "3.0.0", From 3b5029fb927d2ea258283bb5db19c7dc02a8b699 Mon Sep 17 00:00:00 2001 From: Brad Larson Date: Thu, 12 Mar 2020 08:07:57 -0400 Subject: [PATCH 20/47] cms-datocms SerializableError fixes (#10986) --- examples/cms-datocms/pages/index.js | 2 +- examples/cms-datocms/pages/posts/[slug].js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/cms-datocms/pages/index.js b/examples/cms-datocms/pages/index.js index e789b602ee15a88..736ad6121294567 100644 --- a/examples/cms-datocms/pages/index.js +++ b/examples/cms-datocms/pages/index.js @@ -36,7 +36,7 @@ export default function Index({ allPosts }) { } export async function getStaticProps({ preview }) { - const allPosts = await getAllPostsForHome(preview) + const allPosts = await getAllPostsForHome(preview) || [] return { props: { allPosts }, } diff --git a/examples/cms-datocms/pages/posts/[slug].js b/examples/cms-datocms/pages/posts/[slug].js index bcfa6683eec7ee0..d00288b803ee2ea 100644 --- a/examples/cms-datocms/pages/posts/[slug].js +++ b/examples/cms-datocms/pages/posts/[slug].js @@ -50,7 +50,7 @@ export default function Post({ post, morePosts, preview }) { ) } -export async function getStaticProps({ params, preview }) { +export async function getStaticProps({ params, preview = null }) { const data = await getPostAndMorePosts(params.slug, preview) const content = await markdownToHtml(data?.post?.content || '') From 39ed66496644cb3cc2954f62959045780cc64480 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 12 Mar 2020 09:09:12 -0400 Subject: [PATCH 21/47] Fix Lint --- examples/cms-datocms/pages/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/cms-datocms/pages/index.js b/examples/cms-datocms/pages/index.js index 736ad6121294567..f2b4e4f3e7a98bf 100644 --- a/examples/cms-datocms/pages/index.js +++ b/examples/cms-datocms/pages/index.js @@ -36,7 +36,7 @@ export default function Index({ allPosts }) { } export async function getStaticProps({ preview }) { - const allPosts = await getAllPostsForHome(preview) || [] + const allPosts = (await getAllPostsForHome(preview)) || [] return { props: { allPosts }, } From 861257bdfc0b5b210d28ccf9ad4c2600533586b8 Mon Sep 17 00:00:00 2001 From: Jeremy Stucki Date: Thu, 12 Mar 2020 14:11:15 +0100 Subject: [PATCH 22/47] Generic form of GetStaticProps and GetServerSideProps (#10856) * Generic form of GetStaticProps and GetServerSideProps * Oops, fix type! * Add constraint for P * Update packages/next/types/index.d.ts Co-authored-by: Joe Haddad Co-authored-by: Joe Haddad --- packages/next/types/index.d.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/next/types/index.d.ts b/packages/next/types/index.d.ts index ae8bbe80665dc1b..08767b0d1956489 100644 --- a/packages/next/types/index.d.ts +++ b/packages/next/types/index.d.ts @@ -64,12 +64,14 @@ export { NextApiHandler, } -export type GetStaticProps = (ctx: { +export type GetStaticProps< + P extends { [key: string]: any } = { [key: string]: any } +> = (ctx: { params?: ParsedUrlQuery preview?: boolean previewData?: any }) => Promise<{ - props: { [key: string]: any } + props: P revalidate?: number | boolean }> @@ -78,13 +80,15 @@ export type GetStaticPaths = () => Promise<{ fallback: boolean }> -export type GetServerSideProps = (context: { +export type GetServerSideProps< + P extends { [key: string]: any } = { [key: string]: any } +> = (context: { req: IncomingMessage res: ServerResponse params?: ParsedUrlQuery query: ParsedUrlQuery preview?: boolean previewData?: any -}) => Promise<{ [key: string]: any }> +}) => Promise<{ props: P }> export default next From 20c546710d758a17ecb7abac64208d2fa09186e4 Mon Sep 17 00:00:00 2001 From: Daniel Lutz Date: Thu, 12 Mar 2020 15:03:06 +0100 Subject: [PATCH 23/47] Add Array.flat polyfill to nomodule-polyfills (#11004) * Add Array.flat polyfill to nomodule-polyfills * Fix code style issue --- packages/next-polyfill-nomodule/src/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/next-polyfill-nomodule/src/index.js b/packages/next-polyfill-nomodule/src/index.js index 6d2a5e38dcb45a6..51f97f54997fd25 100644 --- a/packages/next-polyfill-nomodule/src/index.js +++ b/packages/next-polyfill-nomodule/src/index.js @@ -3,6 +3,7 @@ import 'core-js/features/array/fill' import 'core-js/features/array/find' import 'core-js/features/array/find-index' import 'core-js/features/array/flat-map' +import 'core-js/features/array/flat' import 'core-js/features/array/from' import 'core-js/features/array/includes' import 'core-js/features/array/iterator' From 886037b1bac4bdbfeb689b032c1612750fb593f7 Mon Sep 17 00:00:00 2001 From: Armand Abric Date: Thu, 12 Mar 2020 16:23:58 +0100 Subject: [PATCH 24/47] Add "noreferrer" to the prerender indicator doc link (#11005) --- packages/next/client/dev/prerender-indicator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next/client/dev/prerender-indicator.js b/packages/next/client/dev/prerender-indicator.js index c22b3163ea825af..234d9f3fdd0d64c 100644 --- a/packages/next/client/dev/prerender-indicator.js +++ b/packages/next/client/dev/prerender-indicator.js @@ -94,7 +94,7 @@ function createContainer(prefix) { - +
From 8f8030f7eb4dddbe7980e1e40e5e1cfe8c5bc7c8 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 12 Mar 2020 14:09:12 -0400 Subject: [PATCH 25/47] v9.3.1-canary.3 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-google-analytics/package.json | 2 +- packages/next-plugin-material-ui/package.json | 2 +- packages/next-plugin-sentry/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next/package.json | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index 0b6c53afa53300d..34e65d35cfb2af9 100644 --- a/lerna.json +++ b/lerna.json @@ -12,5 +12,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "9.3.1-canary.2" + "version": "9.3.1-canary.3" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index 27846481c7cc9c2..fa1eb456ea10214 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "9.3.1-canary.2", + "version": "9.3.1-canary.3", "keywords": [ "react", "next", diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index ab36cd52f3b58ee..cda2125c61ac17d 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "9.3.1-canary.2", + "version": "9.3.1-canary.3", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 6f60ff3ae55f55b..2fc90cf4f436f77 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "9.3.1-canary.2", + "version": "9.3.1-canary.3", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-google-analytics/package.json b/packages/next-plugin-google-analytics/package.json index 5fd4967b1d456ed..7793f8addbfb9d7 100644 --- a/packages/next-plugin-google-analytics/package.json +++ b/packages/next-plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-google-analytics", - "version": "9.3.1-canary.2", + "version": "9.3.1-canary.3", "nextjs": { "name": "Google Analytics", "required-env": [ diff --git a/packages/next-plugin-material-ui/package.json b/packages/next-plugin-material-ui/package.json index 8e0f1517030dace..fc1afdf37892ecf 100644 --- a/packages/next-plugin-material-ui/package.json +++ b/packages/next-plugin-material-ui/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-material-ui", - "version": "9.3.1-canary.2", + "version": "9.3.1-canary.3", "nextjs": { "name": "Material UI", "required-env": [] diff --git a/packages/next-plugin-sentry/package.json b/packages/next-plugin-sentry/package.json index f22f4c8ec2d10e6..d08d4db64ef18ce 100644 --- a/packages/next-plugin-sentry/package.json +++ b/packages/next-plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-sentry", - "version": "9.3.1-canary.2", + "version": "9.3.1-canary.3", "nextjs": { "name": "Sentry", "required-env": [ diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 1bf82bedfa74d7a..c718c7560e77a56 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "9.3.1-canary.2", + "version": "9.3.1-canary.3", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next/package.json b/packages/next/package.json index c024658df1802b0..8cb3e0a9035595c 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "9.3.1-canary.2", + "version": "9.3.1-canary.3", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -73,7 +73,7 @@ "@babel/preset-typescript": "7.7.2", "@babel/runtime": "7.7.2", "@babel/types": "7.7.4", - "@next/polyfill-nomodule": "9.3.1-canary.2", + "@next/polyfill-nomodule": "9.3.1-canary.3", "amphtml-validator": "1.0.30", "async-retry": "1.2.3", "async-sema": "3.0.0", From 9943334d44e20707b597985df3ffc2c63d94d058 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Thu, 12 Mar 2020 13:24:44 -0500 Subject: [PATCH 26/47] Update RegExp test and remove extra script (#11006) Co-authored-by: Joe Haddad --- .eslintignore | 3 +-- .prettierignore | 3 +-- .prettierignore_staged | 3 +-- .../production/pages/regexp-polyfill.js | 15 +++++++++-- .../production/public/regexp-test.js | 25 +++++++++---------- .../integration/production/test/index.test.js | 6 +++++ 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/.eslintignore b/.eslintignore index 12017a94b4fa3ac..02dd2b05059b4c9 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,5 +3,4 @@ node_modules **/_next/** **/dist/** examples/with-ioc/** -examples/with-kea/** -test/integration/production/public/**/* \ No newline at end of file +examples/with-kea/** \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 45b15e04b5f79dc..3701997c2bbfccc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,4 @@ node_modules **/.next/** **/_next/** -**/dist/** -test/integration/production/public/**/* \ No newline at end of file +**/dist/** \ No newline at end of file diff --git a/.prettierignore_staged b/.prettierignore_staged index 9bb6a6d7011975d..7278db6b0605e4a 100644 --- a/.prettierignore_staged +++ b/.prettierignore_staged @@ -1,4 +1,3 @@ **/.next/** **/_next/** -**/dist/** -test/integration/production/public/**/* \ No newline at end of file +**/dist/** \ No newline at end of file diff --git a/test/integration/production/pages/regexp-polyfill.js b/test/integration/production/pages/regexp-polyfill.js index da7fbe2910ec1b0..72d7af39b1d106a 100644 --- a/test/integration/production/pages/regexp-polyfill.js +++ b/test/integration/production/pages/regexp-polyfill.js @@ -1,12 +1,23 @@ -export default () => { +import * as React from 'react' + +const Home = () => { if (typeof window !== 'undefined') { window.didRender = true } + React.useEffect(() => { + // If this script is loaded before the polyfills it will + // still fail + const el = document.createElement('script') + el.src = '/regexp-test.js' + document.querySelector('body').appendChild(el) + }, []) + return ( <>

hi

- ")},isSubmissionResponseMessage:function(e,t){var n,r,i,o;null==t&&(t=[]);n=e.origin&&t.indexOf(e.origin)>-1;return n&&null!=(null!=(r=e.data)?r.accepted:void 0)&&(null!=(i=e.data)?i.formGuid:void 0)&&(null!=(o=e.data)?o.conversionId:void 0)},isInViewport:function(e){var t,n;n=e.getBoundingClientRect();t=document.documentElement;return n.top>=0&&n.left>=0&&n.bottom<=(window.innerHeight||t.clientHeight)&&n.right<=(window.innerWidth||t.clientWidth)},isShareableLink:function(){return/share\.hsforms(qa)?\.(com|net)|\/forms-standalone\//.test(window.location.href)},_legacyCurrentScript:function(t){var n,r;r=document.getElementsByTagName("script");n=this.filter(r,function(n){return function(n){var r;if(n.src.length)return!1;if(n.getAttribute(e))return!1;r=n.innerHTML;!/^\s*hbspt\.forms\.create\(/.test(r);return r.indexOf(t)>-1?!0:void 0}}(this));return n.length>0?n[0]:r[r.length-1]},getCurrentScript:function(e){return document.currentScript?document.currentScript:this._legacyCurrentScript(e)},hasFormValidityChanged:function(e,t){var n;for(n in e){if(!e.hasOwnProperty(n))return;if(!t.hasOwnProperty(n)||e[n].valid===!t[n].valid)return!0}for(n in t){if(!t.hasOwnProperty(n))return;if(!e.hasOwnProperty(n)||t[n].valid===!e[n].valid)return!0}return!1},isEmpty:function(e){var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0},removeEmpty:function(e){var t,n,r;n={};for(t in e){r=e[t];null!==r&&void 0!==r&&""!==r&&(n[t]=r)}return n},parseObjWithDefault:function(e,t){var n;try{n=JSON.parse(e);n=this.removeEmpty(n)}catch(r){n=t}return n},mergeStyles:function(e,t){var n,r,i;null==e&&(e={});null==t&&(t={});i=this.extend({},t);for(r in e)if(e[r]){n=r;switch(r){case"fontColor":n="labelTextColor";break;case"buttonFontColor":n="submitFontColor";break;case"buttonBackgroundColor":n="submitColor"}t[n]||(i[n]=e[r])}return i},isSmartGroup:function(e){return e.isSmartGroup||e["default"]===!1},stripCustomStyleProps:function(e){var t;t={};(null!=e?e.backgroundWidth:void 0)&&(t.backgroundWidth=e.backgroundWidth);(null!=e?e.fontFamily:void 0)&&(t.fontFamily=e.fontFamily);return t},shouldRenderShell:function(e,t){var n,r,i;return e.shell?!1:u.isShareableLink()?!1:u.isCos(e)?!1:(null!=t&&null!=(n=t.scopes)?n.renderShell:void 0)?!0:(null!=t&&null!=(r=t.scopes)?r.rawHtmlAccess:void 0)&&u.shouldRenderFormRawHtml(e,null!=t?t.formData:void 0)?!1:e.hasOwnProperty("css")?!1:(null!=t&&null!=(i=t.formData)?i.themeName:void 0)&&t.formData.themeName!==s.legacyThemeName?!0:!1},getDomainFromUrl:function(e){var t;t=e.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i);return t&&t[1]}};if(!u.currentScript)if(document.currentScript)u.currentScript=document.currentScript;else{c=document.getElementsByTagName("script");u.currentScript=c[c.length-1]}hns("hubspot.utils",u)}).call(this);(function(){var e;e=function(){function e(){}var t,n;n={da:"da",de:"de",el:"el",en:"en","es-mx":"es-mx",es:"es",fi:"fi",fr:"fr",it:"it",ja:"ja",nl:"nl",pl:"pl","pt-br":"pt-br",sv:"sv","zh-cn":"zh-cn","zh-hk":"zh-hk"};t="en";e.prototype.getBestSupportedLocale=function(e){return this.getBestSupportedLocaleFromList([e])};e.prototype.getBestSupportedLocaleFromList=function(e){var n,r,i,o;for(r=0,i=e.length;i>r;r++){n=e[r];o=this._maybeFindMatch(n);if(null!=o)return o}return t};e.prototype._maybeFindMatch=function(e){var t;e=this._normalizeLocale(e);if(e in n)return e;t=this._extractLanguage(e);return t in n?t:void 0};e.prototype._normalizeLocale=function(e){e=e||"";return e.toLowerCase().replace("_","-")};e.prototype._extractLanguage=function(e){return e.split("-")[0]};return e}();hns("hubspot.locale_utils",new e)}).call(this);(function(){var e;e=function(){function e(){}var t,n,r,i;t={AF:"+93",AL:"+355",DZ:"+213",AS:"+1684",AD:"+376",AO:"+244",AI:"+1264",AG:"+1268",AR:"+54",AM:"+374",AW:"+297",AU:"+61",AT:"+43",AZ:"+994",BS:"+1242",BH:"+973",BD:"+880",BB:"+1246",BY:"+375",BE:"+32",BZ:"+501",BJ:"+229",BM:"+1441",BT:"+975",BO:"+591",BA:"+387",BW:"+267",BR:"+55",IO:"+246",VG:"+1284",BN:"+673",BG:"+359",BF:"+226",BI:"+257",KH:"+855",CM:"+237",CA:"+1",CV:"+238",BQ:"+599",KY:"+1345",CF:"+236",TD:"+235",CL:"+56",CN:"+86",CO:"+57",KM:"+269",CD:"+243",CG:"+242",CK:"+682",CR:"+506",CI:"+225",HR:"+385",CU:"+53",CW:"+599",CY:"+357",CZ:"+420",DK:"+45",DJ:"+253",DM:"+1767",DO:"+1",EC:"+593",EG:"+20",SV:"+503",GQ:"+240",ER:"+291",EE:"+372",ET:"+251",FK:"+500",FO:"+298",FJ:"+679",FI:"+358",FR:"+33",GF:"+594",PF:"+689",GA:"+241",GM:"+220",GE:"+995",DE:"+49",GH:"+233",GI:"+350",GR:"+30",GL:"+299",GD:"+1473",GP:"+590",GU:"+1671",GT:"+502",GN:"+224",GW:"+245",GY:"+592",HT:"+509",HN:"+504",HK:"+852",HU:"+36",IS:"+354",IN:"+91",ID:"+62",IR:"+98",IQ:"+964",IE:"+353",IL:"+972",IT:"+39",JM:"+1876",JP:"+81",JO:"+962",KZ:"+7",KE:"+254",KI:"+686",KW:"+965",KG:"+996",LA:"+856",LV:"+371",LB:"+961",LS:"+266",LR:"+231",LY:"+218",LI:"+423",LT:"+370",LU:"+352",MO:"+853",MK:"+389",MG:"+261",MW:"+265",MY:"+60",MV:"+960",ML:"+223",MT:"+356",MH:"+692",MQ:"+596",MR:"+222",MU:"+230",MX:"+52",FM:"+691",MD:"+373",MC:"+377",MN:"+976",ME:"+382",MS:"+1664",MA:"+212",MZ:"+258",MM:"+95",NA:"+264",NR:"+674",NP:"+977",NL:"+31",NC:"+687",NZ:"+64",NI:"+505",NE:"+227",NG:"+234",NU:"+683",NF:"+672",KP:"+850",MP:"+1670",NO:"+47",OM:"+968",PK:"+92",PW:"+680",PS:"+970",PA:"+507",PG:"+675",PY:"+595",PE:"+51",PH:"+63",PL:"+48",PT:"+351",PR:"+1",QA:"+974",RE:"+262",RO:"+40",RU:"+7",RW:"+250",BL:"+590",SH:"+290",KN:"+1869",LC:"+1758",MF:"+590",PM:"+508",VC:"+1784",WS:"+685",SM:"+378",ST:"+239",SA:"+966",SN:"+221",RS:"+381",SC:"+248",SL:"+232",SG:"+65",SX:"+1721",SK:"+421",SI:"+386",SB:"+677",SO:"+252",ZA:"+27",KR:"+82",SS:"+211",ES:"+34",LK:"+94",SD:"+249",SR:"+597",SZ:"+268",SE:"+46",CH:"+41",SY:"+963",TW:"+886",TJ:"+992",TZ:"+255",TH:"+66",TL:"+670",TG:"+228",TK:"+690",TO:"+676",TT:"+1868",TN:"+216",TR:"+90",TM:"+993",TC:"+1649",TV:"+688",VI:"+1340",UG:"+256",UA:"+380",AE:"+971",GB:"+44",US:"+1",UY:"+598",UZ:"+998",VU:"+678",VA:"+39",VE:"+58",VN:"+84",WF:"+681",YE:"+967",ZM:"+260",ZW:"+263"};i={de:"DE",en:"US",es:"ES",fi:"FI",fr:"FR",it:"IT",ja:"JP",nl:"NL",sv:"SE"};r={AF:"Afghanistan (‫افغانستان‬‎)",AL:"Albania (Shqipëri)",DZ:"Algeria (‫الجزائر‬‎)",AS:"American Samoa",AD:"Andorra",AO:"Angola",AI:"Anguilla",AG:"Antigua and Barbuda",AR:"Argentina",AM:"Armenia (Հայաստան)",AW:"Aruba",AU:"Australia",AT:"Austria (Österreich)",AZ:"Azerbaijan (Azərbaycan)",BS:"Bahamas",BH:"Bahrain (‫البحرين‬‎)",BD:"Bangladesh (বাংলাদেশ)",BB:"Barbados",BY:"Belarus (Беларусь)",BE:"Belgium (België)",BZ:"Belize",BJ:"Benin (Bénin)",BM:"Bermuda",BT:"Bhutan (འབྲུག)",BO:"Bolivia",BA:"Bosnia and Herzegovina (Босна и Херцеговина)",BW:"Botswana",BR:"Brazil (Brasil)",IO:"British Indian Ocean Territory",VG:"British Virgin Islands",BN:"Brunei",BG:"Bulgaria (България)",BF:"Burkina Faso",BI:"Burundi (Uburundi)",KH:"Cambodia (កម្ពុជា)",CM:"Cameroon (Cameroun)",CA:"Canada",CV:"Cape Verde (Kabu Verdi)",BQ:"Caribbean Netherlands",KY:"Cayman Islands",CF:"Central African Republic (République centrafricaine)",TD:"Chad (Tchad)",CL:"Chile",CN:"China (中国)",CO:"Colombia",KM:"Comoros (‫جزر القمر‬‎)",CD:"Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)",CG:"Congo (Republic) (Congo-Brazzaville)",CK:"Cook Islands",CR:"Costa Rica",CI:"Côte d’Ivoire",HR:"Croatia (Hrvatska)",CU:"Cuba",CW:"Curaçao",CY:"Cyprus (Κύπρος)",CZ:"Czech Republic (Česká republika)",DK:"Denmark (Danmark)",DJ:"Djibouti",DM:"Dominica",DO:"Dominican Republic (República Dominicana)",EC:"Ecuador",EG:"Egypt (‫مصر‬‎)",SV:"El Salvador",GQ:"Equatorial Guinea (Guinea Ecuatorial)",ER:"Eritrea",EE:"Estonia (Eesti)",ET:"Ethiopia",FK:"Falkland Islands (Islas Malvinas)",FO:"Faroe Islands (Føroyar)",FJ:"Fiji",FI:"Finland (Suomi)",FR:"France",GF:"French Guiana (Guyane française)",PF:"French Polynesia (Polynésie française)",GA:"Gabon",GM:"Gambia",GE:"Georgia (საქართველო)",DE:"Germany (Deutschland)",GH:"Ghana (Gaana)",GI:"Gibraltar",GR:"Greece (Ελλάδα)",GL:"Greenland (Kalaallit Nunaat)",GD:"Grenada",GP:"Guadeloupe",GU:"Guam",GT:"Guatemala",GN:"Guinea (Guinée)",GW:"Guinea-Bissau (Guiné Bissau)",GY:"Guyana",HT:"Haiti",HN:"Honduras",HK:"Hong Kong (香港)",HU:"Hungary (Magyarország)",IS:"Iceland (Ísland)",IN:"India (भारत)",ID:"Indonesia",IR:"Iran (‫ایران‬‎)",IQ:"Iraq (‫العراق‬‎)",IE:"Ireland",IL:"Israel (‫ישראל‬‎)",IT:"Italy (Italia)",JM:"Jamaica",JP:"Japan (日本)",JO:"Jordan (‫الأردن‬‎)",KZ:"Kazakhstan (Казахстан)",KE:"Kenya",KI:"Kiribati",KW:"Kuwait (‫الكويت‬‎)",KG:"Kyrgyzstan (Кыргызстан)",LA:"Laos (ລາວ)",LV:"Latvia (Latvija)",LB:"Lebanon (‫لبنان‬‎)",LS:"Lesotho",LR:"Liberia",LY:"Libya (‫ليبيا‬‎)",LI:"Liechtenstein",LT:"Lithuania (Lietuva)",LU:"Luxembourg",MO:"Macau (澳門)",MK:"Macedonia (FYROM) (Македонија)",MG:"Madagascar (Madagasikara)",MW:"Malawi",MY:"Malaysia",MV:"Maldives",ML:"Mali",MT:"Malta",MH:"Marshall Islands",MQ:"Martinique",MR:"Mauritania (‫موريتانيا‬‎)",MU:"Mauritius (Moris)",MX:"Mexico (México)",FM:"Micronesia",MD:"Moldova (Republica Moldova)",MC:"Monaco",MN:"Mongolia (Монгол)",ME:"Montenegro (Crna Gora)",MS:"Montserrat",MA:"Morocco (‫المغرب‬‎)",MZ:"Mozambique (Moçambique)",MM:"Myanmar (Burma) (မြန်မာ)",NA:"Namibia (Namibië)",NR:"Nauru",NP:"Nepal (नेपाल)",NL:"Netherlands (Nederland)",NC:"New Caledonia (Nouvelle-Calédonie)",NZ:"New Zealand",NI:"Nicaragua",NE:"Niger (Nijar)",NG:"Nigeria",NU:"Niue",NF:"Norfolk Island",KP:"North Korea (조선 민주주의 인민 공화국)",MP:"Northern Mariana Islands",NO:"Norway (Norge)",OM:"Oman (‫عُمان‬‎)",PK:"Pakistan (‫پاکستان‬‎)",PW:"Palau",PS:"Palestine (‫فلسطين‬‎)",PA:"Panama (Panamá)",PG:"Papua New Guinea",PY:"Paraguay",PE:"Peru (Perú)",PH:"Philippines",PL:"Poland (Polska)",PT:"Portugal",PR:"Puerto Rico",QA:"Qatar (‫قطر‬‎)",RE:"Réunion (La Réunion)",RO:"Romania (România)",RU:"Russia (Россия)",RW:"Rwanda",BL:"Saint Barthélemy (Saint-Barthélemy)",SH:"Saint Helena",KN:"Saint Kitts and Nevis",LC:"Saint Lucia",MF:"Saint Martin (Saint-Martin (partie française))",PM:"Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)",VC:"Saint Vincent and the Grenadines",WS:"Samoa",SM:"San Marino",ST:"São Tomé and Príncipe (São Tomé e Príncipe)",SA:"Saudi Arabia (‫المملكة العربية السعودية‬‎)",SN:"Senegal (Sénégal)",RS:"Serbia (Србија)",SC:"Seychelles",SL:"Sierra Leone",SG:"Singapore",SX:"Sint Maarten",SK:"Slovakia (Slovensko)",SI:"Slovenia (Slovenija)",SB:"Solomon Islands",SO:"Somalia (Soomaaliya)",ZA:"South Africa",KR:"South Korea (대한민국)",SS:"South Sudan (‫جنوب السودان‬‎)",ES:"Spain (España)",LK:"Sri Lanka (ශ්‍රී ලංකාව)",SD:"Sudan (‫السودان‬‎)",SR:"Suriname",SZ:"Swaziland",SE:"Sweden (Sverige)",CH:"Switzerland (Schweiz)",SY:"Syria (‫سوريا‬‎)",TW:"Taiwan (台灣)",TJ:"Tajikistan",TZ:"Tanzania",TH:"Thailand (ไทย)",TL:"Timor-Leste",TG:"Togo",TK:"Tokelau",TO:"Tonga",TT:"Trinidad and Tobago",TN:"Tunisia (‫تونس‬‎)",TR:"Turkey (Türkiye)",TM:"Turkmenistan",TC:"Turks and Caicos Islands",TV:"Tuvalu",VI:"U.S. Virgin Islands",UG:"Uganda",UA:"Ukraine (Україна)",AE:"United Arab Emirates (‫الإمارات العربية المتحدة‬‎)",GB:"United Kingdom",US:"United States",UY:"Uruguay",UZ:"Uzbekistan (Oʻzbekiston)",VU:"Vanuatu",VA:"Vatican City (Città del Vaticano)",VE:"Venezuela",VN:"Vietnam (Việt Nam)",WF:"Wallis and Futuna",YE:"Yemen (‫اليمن‬‎)",ZM:"Zambia",ZW:"Zimbabwe"};n=Object.keys(t);e.prototype.getCountryCodes=function(){return n};e.prototype.getDefaultCountryCode=function(){return"US"};e.prototype.getExtensionFromCountryCode=function(e){return t[e]};e.prototype.getCountryNameFromCountryCode=function(e){return r[e]};e.prototype.getCountryCodeFromLocale=function(e){return i[e]};e.prototype.getCountryCodeFromKnownProperties=function(e){null==e&&(e={});return this.getExtensionFromCountryCode(e.hs_calculated_phone_number_country_code)?e.hs_calculated_phone_number_country_code:void 0};return e}();hns("hubspot.phone_utils",new e)}).call(this);(function(){var e,t,n={}.hasOwnProperty;if(!hubspot.form.api){t={};e=function(r){var i,o,a,s,l,c;i=null;o={};a={};l=[];s={id:r,onReady:function(e){return l.push(e)},hasField:function(e){return null!=o[e]},getField:function(e){return o[e]},getFields:function(){var e,t,r;t=[];for(e in o)if(n.call(o,e)){r=o[e];t.push(r)}return t},setFieldValue:function(e,t){var n;n=a[e];if(!n.setFieldValue)throw new Error("cannot set value for field");return n.setFieldValue(t)},setSubmitText:function(e){var t;t=this._getComponent();return t.setSubmitText(e)},shouldSubmitForm:function(e){var t;t=this._getComponent();return t.addShouldSubmitHandler(e)},getMetaData:function(e){var t;t=this._getComponent();return t.getMetaDataValue(e)},_setSubmitKey:function(e){var t;t=this.getField("Submit");return t.setSubmitKey(e)},_getComponent:function(){return i},_registerField:function(e,t){return o[e]=t},_registerInput:function(e,t){return a[e]=t},_triggerReady:function(){i=this;l.forEach(function(e){return e.call(c)});return e.singletonReadyQueue.forEach(function(e){return e.call(e,c)})}};t[r]=s;c=s;return s};e.getForm=function(e){return t[e]};e.getFormForEl=function(e){return t[e.getAttribute("data-form-id")]};e.getForms=function(){var e,r,i;r=[];for(e in t)if(n.call(t,e)){i=t[e];r.push(i)}return r};e.singletonReadyQueue=[];e.onFormReady=function(e){return this.singletonReadyQueue.push(e)};e.reset=function(){this.singletonReadyQueue.length=0;return t={}};hns("hubspot.form.api",e)}}).call(this);(function(){var e,t,n,r;r=hns("hubspot.utils");t=["_currentElement","Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings."];n={setupErrorReporter:function(e){return this.errorReporter=new OutpostErrorReporter("formsnextembed",{env:r.isQA()?"QA":"PROD",disabled:!1,tags:{formGuid:e.formId,portalId:e.portalId,isCOS:r.isCos(e),version:window.hubspot.formsnext.version}})},getBlacklistedErrorMessages:function(){return t},report:function(e,n){var r,i,o,a,s;if(e&&"test"!==(null!=(a=hubspot.server)?a.env:void 0)){for(i=0,o=t.length;o>i;i++){r=t[i];if((null!=(s=e.message)?s.indexOf(r):void 0)>-1)return}return this.errorReporter.report(e,n)}},addCookies:function(e){return this.errorReporter?this.errorReporter.addCookies(e):void 0}};null==hubspot.form&&(hubspot.form={});null==(e=hubspot.form).lib&&(e.lib={});hubspot.form.lib.errorReport=n}).call(this);(function(){var e,t,n,r,i;r=window.reqwest;i=hns("hubspot.utils");t="https://hubspot-forms-static-embed.s3.amazonaws.com";n=".json.gz";e=function(){function e(e,r,i){"local"===e&&(e="qa");e=e||"prod";this.url=t+"/"+e+"/"+r+"/"+i+n}e.prototype.fetch=function(){return r({url:this.url,type:"json",method:"get",crossOrigin:!0})};return e}();hns("hubspot.FallbackEmbedClient",e)}).call(this);(function(){var e;e=function(e){var t,n,r,i;i=[];n=0;if(!e.elements)return i;for(;n0)return this.forceValidate()}catch(r){}},handleJqueryChange:function(e){var t;t={target:e.target};return this.handleChangeAndValidate(t)},setFieldValue:function(e){this.setState({value:e});return"function"==typeof this.handleBlur?this.handleBlur():void 0},forceValidate:function(){var e,t,n;return this.constructor===("undefined"!=typeof hubspot&&null!==hubspot&&null!=(e=hubspot.form)&&null!=(t=e.components)&&null!=(n=t.inputs)?n.Phone:void 0)?this.validatePhoneNumberOnChange():this.validate()}};hns("hubspot.form.mixins.InputMixin",e)}).call(this);(function(){var e,t,n,r,i,o;n=window.React;e=hubspot.form.mixins.I18nMixin;o=hns("hubspot.form.constants");t=window.Promise;r={mixins:[e],componentDidMount:function(){return this.props.registerValidator(this._validate)},componentWillUnmount:function(){return this.props.deregisterValidator(this._validate)},validateTrimmed:function(){return this.props.required&&""===hubspot.utils.trim(this.state.value)?{valid:!1,message:this.i18nTranslate("formsNext.required"),type:"REQUIRED_FIELD"}:{valid:!0}},validateMaxInputLength:function(){return hubspot.utils.trim(this.state.value).length>o.maxInputLength?{valid:!1,message:this.i18nTranslate("formsNext.inputTooLarge")}:{valid:!0}},validateRequired:function(e){var t,r,i,o;o=!0;i=[];r=[];t=null!=n.findDOMNode(this).validity&&!n.findDOMNode(this).validity.valid;(this.props.required&&!e||t)&&(o=!1);this.setState({validationArmed:!0});if(t&&this.browserInvalidError){i.push(this.browserInvalidError);r.push("REQUIRED_FIELD")}else if(!o){i.push(this.i18nTranslate("formsNext.required"));r.push("REQUIRED_FIELD")}return{name:this.props.name,valid:o,messages:i,errorTypes:r}},_validate:function(e){null==e&&(e=this.validators);return new t(function(n){return function(r){var i,o,a,s,l,c,u,p;if(!n.state.value){p=n.validateRequired(!1);return r({name:p.name,valid:p.valid,messages:p.messages,errorTypes:p.errorTypes})}if(null!=e?!e.length:!0)return r({name:n.props.name,valid:!0,messages:[]});u=[];l=!0;s=[];i=[];for(o=0,a=e.length;a>o;o++){c=e[o];u.push(n[c].apply(n))}t.all(u).then(function(e){var t,o,a,c;l=!0;for(o=0,a=e.length;a>o;o++){c=e[o];t=Array.isArray(c)?n.extractValidation(c):n.extractValidation([c]);null!=(null!=t?t.messages:void 0)&&(s=s.concat(t.messages));null!=(null!=t?t.valid:void 0)&&(l=t.valid);null!=(null!=t?t.errorTypes:void 0)&&(i=i.concat(t.errorTypes))}return r({name:n.props.name,valid:l,messages:s,errorTypes:i})});return n.setState({validationArmed:!0})}}(this))},validatePhoneNumberOnChange:function(){var e;e=this.validateRequired(!0);return this.props.setFieldValidity(e.name,e.valid,e.messages,e.errorTypes)},extractValidation:function(e){var t,n,r,i;t={};for(n=0,r=e.length;r>n;n++){i=e[n];if(i.info){t.messages||(t.messages=[]);t.messages=t.messages.concat([i.message])}else if(!i.valid){t.messages||(t.messages=[]);t.valid=!1;t.messages=t.messages.concat([i.message]);t.errorTypes||(t.errorTypes=[]);t.errorTypes=t.errorTypes.concat([i.type])}}return t},validate:function(e){return this._validate(e).then(function(e){return function(t){return e.props.setFieldValidity(t.name,t.valid,t.messages,t.errorTypes)}}(this))}};null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).mixins&&(i.mixins={});hubspot.form.mixins.ValidatorMixin=r}).call(this);(function(){var e,t,n,r,i,o;n=window.React;t=hubspot.form.mixins.InputMixin;r=hubspot.form.mixins.ValidatorMixin;e=n.createClass({displayName:"BooleanCheckbox",mixins:[r,t],componentDidMount:function(){return this.props.registerBoolCheckBoxField(this.props.name)},componentWillUnmount:function(){return this.props.deregisterBoolCheckBoxField(this.props.name)},getRequiredHtml:function(){return'*'},getChecked:function(){var e;return"true"===this.props.defaultValue||(null!=(e=this.props.selectedOptions)?e.indexOf("true"):void 0)>-1},getLabel:function(){var e,t,n;e=null!=(n=this.props.translations)?n.fieldLabels:void 0;t=null!=(null!=e?e[this.props.name]:void 0)?e[this.props.name]:this.props.label;this.props.required&&(t+=this.getRequiredHtml());return t},handleChangeAndValidate:function(e){return this.handleChange(e)},handleChange:function(e){return this.setState({value:e.target.checked,needsValidation:!0,validationArmed:!1})},getInitialState:function(){return{value:this.getChecked(),validationArmed:!1}},componentDidUpdate:function(){if(this.state.needsValidation){this.props.setFieldValue(this.state.value);this.validate();return this.setState({needsValidation:!1})}},render:function(){return n.createElement("ul",{className:"inputs-list",required:this.props.required},n.createElement("li",{className:"hs-form-"+this.props.fieldType},n.createElement("label",{htmlFor:this.props.name+"-"+this.props.uniqueId,className:"hs-form-"+this.props.fieldType+"-display"},n.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:"hs-input",type:"checkbox",name:this.props.name,value:"true",checked:this.state.value,onChange:this.handleChange}),n.createElement("span",{dangerouslySetInnerHTML:{__html:this.getLabel()}}))))}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.BooleanCheckbox=e}).call(this);(function(){var e,t,n,r;t=window.React;e=t.createClass({displayName:"Context",userAgent:"undefined"!=typeof navigator&&null!==navigator?navigator.userAgent:void 0,recentFieldsCookie:window.hubspot.utils.getRecentFieldsCookie(),source:window.hubspot.utils.getCodeVersion(),disableCookieSubmission:!1,componentWillMount:function(){var e,t,n,r,i;t=(null!=(n=window.hubspot)&&null!=(r=n.form)&&null!=(i=r.lib)?i.errorReport:void 0)||{};this.isHostedOnHubspot=window.hubspot.utils.isHostedOnHubspot(null!=this.props.shell);try{return window.hubspot.form.formFetcher.fetchAnalytics(this.props.shell,this.props.hutk,this.props.canonicalUrl,this.props.contentType).then(function(e){return function(n){var r,i;i=e.props.hutk;r=e.props.contentType;if(!i){if(null!=n?!n.hutk:!0){t.report(new Error("No utk present in analytics callback"),{cookies:document.cookie});return}i=n.hutk}!r&&(null!=n?n.contentType:void 0)&&(r=n.contentType);t.addCookies({hutk:i});return i!==e.props.hutk||r!==e.props.contentType?e.setState({pageUrl:e.props.isVideo&&null!=n?n.canonicalUrl:void 0,hutk:i,contentType:r}):void 0}}(this)).done()}catch(o){e=o;return t.report(e)}},getMetaDataForSubmit:function(){var e,t,n,r,i,o;i={};if(this.props.metaData){o=this.props.metaData;for(t=0,n=o.length;n>t;t++){r=o[t];i[r.name]=r.value;"disableCookieSubmission"===r.name&&(this.disableCookieSubmission=!0)}}e=hubspot.utils.getLocalStorage("HS_FORM_DEBUG");e&&(i.debugMode=!0);return i},getContextString:function(){var e,t,n;t=this.getMetaDataForSubmit();e={pageUrl:this.props.pageUrl||this.state.pageUrl||hubspot.utils.getCurrentUrl(),pageTitle:this.props.pageTitle||document.title,source:this.source,timestamp:this.props.timestamp,userAgent:this.userAgent,referrer:this.props.referrer||document.referrer,originalEmbedContext:this.props.originalEmbedContext,formName:this.props.formName,recentFieldsCookie:this.recentFieldsCookie||null,pageId:this.props.pageId,path:this.props.path,referrerPath:this.props.referrerPath,pageName:this.props.pageName,boolCheckBoxFields:this.props.boolCheckBoxFields.toString(),dateFields:this.props.dateFields.toString(),redirectUrl:this.props.redirectUrl,variantId:this.props.variantId,formInstanceId:this.props.formInstanceId,smartFields:this.props.hiddenSmartFields,urlParams:this.props.urlParams,notificationRecipients:this.props.notificationRecipients,formValidity:this.props.formValidity,domFields:this.props.domFields,rawInlineMessage:this.props.rawInlineMessage,hsFormKey:this.props.hsFormKey,formTarget:this.props.formTarget,followUpEmailId:this.props.followUpEmailId,followUpEmailCampaignId:this.props.followUpEmailCampaignId,followUpId:this.props.followUpId,sfdcCampaignId:this.props.sfdcCampaignId,goToWebinarWebinarKey:this.props.goToWebinarWebinarKey,abTestId:this.props.abTestId,correlationId:this.props.correlationId,contentType:this.state.contentType,hutk:this.state.hutk};this.disableCookieSubmission&&(e.disableCookieSubmission=!0);this.isHostedOnHubspot&&(e.isHostedOnHubspot=this.isHostedOnHubspot);this.props.isFallback&&(e.isFallback=this.props.isFallback);if(this.props.isCookieReset){e.isCookieReset=this.props.isCookieReset;e.hutk=void 0}e=hubspot.utils.extend(this.props.extraMetaData,this.props.realUserMonitoring,t,e);n=function(e,t){return null==t||0===t.length||"object"==typeof t&&0===Object.keys(t).length?void 0:t};return JSON.stringify(e,n)},getInitialState:function(){return{hutk:this.props.hutk,contentType:this.props.contentType}},render:function(){return t.createElement("input",{name:"hs_context",type:"hidden",value:this.getContextString()})}});null==hubspot.form&&(hubspot.form={});null==(n=hubspot.form).components&&(n.components={});null==(r=hubspot.form.components).inputs&&(r.inputs={});hubspot.form.components.inputs.Context=e}).call(this);(function(){var e,t,n,r,i,o,a;n=window.React;r=hubspot.form.mixins.ValidatorMixin;t=hubspot.form.mixins.InputMixin;a=hns("hubspot.utils");e=n.createClass({displayName:"DateInput",mixins:[r,t],validationRegex:/^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$/,validators:["validateDate"],validateDate:function(){return""===this.state.value||this.validationRegex.test(this.state.value)?{valid:!0}:{valid:!1,message:this.i18nTranslate("formsNext.invalidDate")}},utcDateToString:function(e){var t,n,r,i,o;o=e.getUTCFullYear().toString();i=(e.getUTCMonth()+1).toString();t=e.getUTCDate().toString();r=i.length<2?"0"+i:i;n=t.length<2?"0"+t:t;return o+"-"+r+"-"+n},componentWillMount:function(){return this.shouldUsePikaday=!a.isBrowserCompatibleWithNativeDatePicker()},componentDidMount:function(){this.props.registerDateField(this.props.name);return this.shouldUsePikaday?this.setupPikaday():void 0},setupPikaday:function(){return this.picker=new hbspt.forms.deps.Pikaday({field:n.findDOMNode(this),theme:"fn-date-picker",container:n.findDOMNode(this.refs.datepickerContainer),yearRange:[1900,(new Date).getFullYear()+10],defaultDate:this.convertDateOffset(new Date(this.state.value)),setDefaultDate:!0,i18n:{previousMonth:this.i18nTranslate("formsNext.previousMonth"),nextMonth:this.i18nTranslate("formsNext.nextMonth"),months:[this.i18nTranslate("formsNext.january"),this.i18nTranslate("formsNext.february"),this.i18nTranslate("formsNext.march"),this.i18nTranslate("formsNext.april"),this.i18nTranslate("formsNext.may"),this.i18nTranslate("formsNext.june"),this.i18nTranslate("formsNext.july"),this.i18nTranslate("formsNext.august"),this.i18nTranslate("formsNext.september"),this.i18nTranslate("formsNext.october"),this.i18nTranslate("formsNext.november"),this.i18nTranslate("formsNext.december")],weekdays:[this.i18nTranslate("formsNext.sunday"),this.i18nTranslate("formsNext.monday"),this.i18nTranslate("formsNext.tuesday"),this.i18nTranslate("formsNext.wednesday"),this.i18nTranslate("formsNext.thursday"),this.i18nTranslate("formsNext.friday"),this.i18nTranslate("formsNext.saturday")],weekdaysShort:[this.i18nTranslate("formsNext.sundayShort"),this.i18nTranslate("formsNext.mondayShort"),this.i18nTranslate("formsNext.tuesdayShort"),this.i18nTranslate("formsNext.wednesdayShort"),this.i18nTranslate("formsNext.thursdayShort"),this.i18nTranslate("formsNext.fridayShort"),this.i18nTranslate("formsNext.saturdayShort")]},onSelect:function(e){return function(){var t;t=e.convertDateToUTCDate(e.picker.getDate());e.setState({value:e.utcDateToString(t)});return e.validate()}}(this),onClose:function(e){return function(){return e.handleBlur()}}(this)})},getInitialState:function(){var e,t,n;n="";if(this.validationRegex.test(this.props.defaultValue))n=this.props.defaultValue;else{e=-1!==this.props.defaultValue.indexOf("/")||-1!==this.props.defaultValue.indexOf("-")?this.convertDateToUTCDate(new Date(this.props.defaultValue)):new Date(parseInt(this.props.defaultValue));t=this.utcDateToString(e);this.validationRegex.test(t)&&(n=t)}return{value:n}},getMinDate:function(){return"1900-01-01"},getMaxDate:function(){return(new Date).getFullYear()+10+"-01-01"},getTimezoneOffsetInMS:function(){return 60*(new Date).getTimezoneOffset()*1e3},convertDateOffset:function(e){var t;t=this.getTimezoneOffsetInMS();return new Date(Date.parse(e)+t)},convertDateToUTCDate:function(e){var t;t=Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),0,0,0);return new Date(t)},getInputClass:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return e},handleChangeAndValidate:function(e){var t;if(this.validationRegex.test(e.target.value)&&e.target.value!==this.state.value){t=this.convertDateOffset(e.target.value);this.shouldUsePikaday&&this.picker.setDate(t);return this.handleBlur()}},handleFocus:function(){return this.shouldUsePikaday?this.picker.show():void 0},handleKeyDown:function(e){return 9===e.which?this.picker.hide():void 0},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},handleNativeChange:function(e){return this.setState({value:this.utcDateToString(e.target.valueAsDate)},function(){this.props.setFieldValue(this.state.value);return this.validate()})},renderPikadayInput:function(){return n.createElement("div",{className:"hs-dateinput"},n.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:this.getInputClass(),type:"text",name:this.props.name,required:this.props.required,value:this.state.value,readOnly:"readOnly",onChange:this.validate,onFocus:this.handleFocus,onKeyDown:this.handleKeyDown}),n.createElement("div",{ref:"datepickerContainer",className:"hs-datepicker",style:{position:"absolute",zIndex:1e4}}))},renderNativeInput:function(){return n.createElement("div",{className:"hs-dateinput"},n.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:this.getInputClass(),type:"date",name:this.props.name,required:this.props.required,value:this.state.value,min:this.getMinDate(),max:this.getMaxDate(),onChange:this.handleNativeChange}))},render:function(){return this.shouldUsePikaday?this.renderPikadayInput():this.renderNativeInput()}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.DateInput=e}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f;o=window.React;s=hubspot.form.mixins.ValidatorMixin;n=hubspot.form.mixins.InputMixin;p=window.reqwest;r=window.Promise;t=hns("hubspot.EmailValidationClient");f=hns("hubspot.utils");u=hns("hubspot.form.lib.errorReport");a=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;i=4e3;e=o.createClass({displayName:"Email",mixins:[s,n],validators:["validateEmailAndCheckResubscribe","validateMaxInputLength"],componentWillMount:function(){return this.debouncedValidate=f.debounce(this.validate,300)},acceptSuggestion:function(){return this.setState({value:this.state.suggestion,suggestion:"",needsValidation:!0})},requestResubscribe:function(){var e,t,n,r,o;t={portalId:this.props.portalId,resub_form_name:encodeURIComponent(document.title),resub_form_address:encodeURIComponent(window.location.href)};n=function(){var n;n=[];for(e in t){o=t[e];n.push(e+"="+o)}return n}().join("&");r="https://api.hubapi"+this.props.env+".com/email/v1/form-resubscribe/"+encodeURIComponent(this.state.value)+"/jsonp/initiate?"+n+"&callback=?";return p({url:r,type:hubspot.utils.getRequestType(),success:function(e){return function(t){if(t.success){window.hubspot._emailValidationAndResubCache[e.state.value].emailShouldResubscribe=!1;e.setState({resubscribed:!0,needsValidation:!0});return setTimeout(function(){return e.setState({resubscribed:!1,needsValidation:!0})},i)}}}(this)})},getEmailSuggestion:function(e){this.setState({suggestion:e});return[{valid:!1,message:this.i18nTranslate("formsNext.invalidEmail"),type:"INVALID_EMAIL"},{valid:!1,info:!0,message:{label:this.i18nTranslate("formsNext.emailSuggestion",{email:e}),callback:this.acceptSuggestion}}]},validateEmailFormat:function(e){return a.test(e)},validateEmailAndCheckResubscribe:function(){return new r(function(e){return function(n){var r,i,o,a;f.log("Validating email "+e.state.value);if(""===e.state.value||""===hubspot.utils.trim(e.state.value))return n(e.props.required?{valid:!1,message:e.i18nTranslate("formsNext.required",{type:"REQUIRED_FIELD"})}:{valid:!0});r=hubspot.utils.getEmailDomain(e.state.value);if(!e.validateEmailFormat(e.state.value))return n({valid:!1,message:e.i18nTranslate("formsNext.invalidEmailFormat"),type:"INVALID_EMAIL"});if(r&&e.state.blockedDomains.indexOf(r)>-1)return n({valid:!1,message:e.i18nTranslate("formsNext.manuallyBlockedEmailDomain",{domain:r}),type:"BLOCKED_DOMAIN"});if(e.state.resubscribed)return n({valid:!0,info:!0,message:e.i18nTranslate("formsNext.emailOptIn")});i=window.hubspot._emailValidationAndResubCache[e.state.value];a=window.hubspot._xhrCache;null!=a.emailValidationAndResub&&a.emailValidationAndResub.abort();o=new t({env:e.props.env,portalId:e.props.portalId,formsBaseUrl:e.props.formsBaseUrl});a.emailValidationAndResub=o.fetch({emailValue:e.state.value,includeFreemailSuggestions:!e.props.usingHubspotBlockedDomains,onSuccess:function(t){if(!i){window.hubspot._emailValidationAndResubCache[t.email]=t;f.log("Handling email validation response",t);return n(e.handleValidationResponse(t))}JSON.stringify(i)!==JSON.stringify(t)&&u.report(new Error("Cached emailValidationAndResub different from actual"),{cached:i,actual:t})},onError:function(){return n({valid:!0})}});if(i){f.log("Email validation found email in cache ",e.state.value,i);return n(e.handleValidationResponse(i))}}}(this))},handleValidationResponse:function(e){var t,n,r,i,o;o=!!e.success;n=!!e.emailShouldResubscribe;r=e.emailSuggestion;i=!!e.emailFree;if(!o)return r?this.getEmailSuggestion(r):{valid:!1,message:this.i18nTranslate("formsNext.invalidEmail"),type:"INVALID_EMAIL"};if(this.props.usingHubspotBlockedDomains&&i){t=hubspot.utils.getEmailDomain(this.state.value);return{valid:!1,message:this.i18nTranslate("formsNext.forbiddenEmailDomain",{domain:t}),type:"BLOCKED_DOMAIN"}}return o&&n&&!this.state.resubscribed?{valid:!0,info:!0,message:{label:this.i18nTranslate("formsNext.resubscribeMessage"),callback:this.requestResubscribe}}:{valid:!0}},getBlockedDomains:function(){var e,t,n,r,i,o,a;e=this.props.blockedDomains||[];if(this.props.validationData){a=this.props.validationData[0];i=a.split(",");for(n=0,r=i.length;r>n;n++){t=i[n];t=hubspot.utils.trim(t.toLowerCase());t=t.replace(/^@/g,"");t&&e.push(t)}(null!=(o=this.props.blockedDomains)?o.length:void 0)&&(e=e.concat(this.props.blockedDomains))}return e},handleChangeAndValidate:function(e,t){return e.target.value!==this.state.value?this.setState({value:e.target.value,validationArmed:!1},this.handleChange.bind(this,e)):void 0},componentDidUpdate:function(){if(this.state.needsValidation){this.validate();return this.setState({needsValidation:!1})}},getInitialState:function(){return{value:this.props.defaultValue,blockedDomains:this.getBlockedDomains(),suggestion:"",resubscribed:!1,needsValidation:!1}},handleChange:function(e){this.setState({value:e.target.value,validationArmed:!1});this.props.setFieldValue(e.target.value);return this.debouncedValidate()},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return o.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:"email",inputmode:"email",name:this.props.name,required:this.props.required,placeholder:this.props.placeholder,value:this.state.value,onChange:this.handleChange,onBlur:this.handleChange,autoComplete:this.props.autoCompleteLabel})}});null==hubspot.form&&(hubspot.form={});null==(l=hubspot.form).components&&(l.components={});null==(c=hubspot.form.components).inputs&&(c.inputs={});hubspot.form.components.inputs.Email=e}).call(this);(function(){var e,t,n,r,i,o,a,s=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};n=window.React;r=hubspot.form.mixins.ValidatorMixin;t=hubspot.form.mixins.InputMixin;a=hns("hubspot.utils");e=n.createClass({displayName:"Enum",mixins:[r,t],validators:["validateEnum"],getRole:function(e){"ul"===e&&"radio"===this.props.fieldType;return"li"===e&&"radio"===this.props.fieldType?"radio":"checkbox"},getUlClassString:function(){var e;e=["inputs-list","multi-container"];null==this.props.valid||this.props.valid||e.push(""+this.props.errorClass);if(this.state.numColumns){e.push("inline-list");e.push("inline-list-"+this.state.numColumns)}return e.join(" ")},getInputClassString:function(e){var t;null==e&&(e="");t=["hs-input",e];this.props.cms&&t.push("AutoFormInput");return t.join(" ")},validateEnum:function(){return this.props.required&&!this.state.value.length?{valid:!1,message:this.i18nTranslate("formsNext.missingOptionSelection"),type:"REQUIRED_FIELD"}:{valid:!0}},handleChangeAndValidate:function(e){return this.handleChange(e)},handleChange:function(e){var t,n;t=e.target.checked;n=e.target.value;return this.setState(function(e){var r,i;i="radio"===this.props.fieldType?[]:"string"==typeof e.value?[e.value]:e.value.slice();if(t)-1===i.indexOf(n)&&i.push(n);else{r=i.indexOf(n);r>-1&&i.splice(r,1)}return{value:i}})},getInitialState:function(){var e,t,n;t=this.parseInitialValue(this.props.selectedOptions);n=hubspot.utils.map(this.props.options,function(e){return e.value});e=hubspot.utils.filter(t,function(e){return s.call(n,e)>=0});return{value:e,numColumns:parseInt(a.getMetaDataValue(this.props.metaData,"numColumns")||0,10)}},parseInitialValue:function(e){return Array.isArray(e)?e:e?e.split(/,|;/).map(function(e){return e.trim()}):void 0},componentDidUpdate:function(e,t){if(t.value!==this.state.value){this.props.setFieldValue(this.state.value);return this.validate()}},renderOptions:function(){var e;e="label-"+this.props.name+"-"+this.props.uniqueId;return hubspot.utils.map(this.props.options,function(t){return function(r,i){var o,a;o=Array.isArray(t.state.value)?(a=r.value,s.call(t.state.value,a)>=0):r.value===t.state.value;return n.createElement("li",{key:r.value,className:"hs-form-"+t.props.fieldType,role:t.getRole("li")},n.createElement("label",{htmlFor:t.props.name+i+"-"+t.props.uniqueId,className:"hs-form-"+t.props.fieldType+"-display"},n.createElement("input",{id:t.props.name+i+"-"+t.props.uniqueId,className:t.getInputClassString(),type:t.props.fieldType,name:t.props.name,value:r.value,checked:o||!1,onChange:t.handleChange,"aria-labelledby":e}),n.createElement("span",{dangerouslySetInnerHTML:{__html:r.label}})))}}(this))},render:function(){return n.createElement("ul",{required:this.props.required,role:this.getRole("ul"),className:this.getUlClassString()},this.renderOptions())}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Enum=e}).call(this);(function(){var e,t,n,r,i;t=window.React;n=hubspot.form.mixins.ValidatorMixin;e=t.createClass({displayName:"File",mixins:[n],validators:["fileSizeValidator"],ONE_HUNDRED_MB:104857600,handleChangeAndValidate:function(e){return this.handleChange(e)},fileSizeValidator:function(){var e,t,n,r;r=this.getDOMNode().files;for(t=0,n=r.length;n>t;t++){e=r[t];if(e.size>this.ONE_HUNDRED_MB)return{valid:!1,message:this.i18nTranslate("formsNext.fileTooLarge")}}return{valid:!0}},handleChange:function(e){return this.setState({value:e.target.value,needsValidation:!0,validationArmed:!1})},getInitialState:function(){return{value:"",needsValidation:!1,validationArmed:!1}},componentDidUpdate:function(){if(this.state.needsValidation){this.props.setFieldValue(this.state.value);this.validate();return this.setState({needsValidation:!1})}},isMultiple:function(){var e,t,n,r;r=this.props.metaData;for(e=0,t=r.length;t>e;e++){n=r[e];if("isMultipleFileUpload"===n.name&&"true"===n.value)return!0}return!1},render:function(){return t.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:"hs-input",type:this.props.type,required:this.props.required,name:this.props.name,size:"30",onChange:this.handleChange,multiple:this.isMultiple()})}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});null==(i=hubspot.form.components).inputs&&(i.inputs={});hubspot.form.components.inputs.File=e}).call(this);(function(){var e,t,n,r,i,o,a;n=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;a=hns("hubspot.utils");t=n.createClass({displayName:"NumberInput",mixins:[r,e],validators:["validateNumber","validateMaxInputLength"],componentDidMount:function(){return this.browserInvalidError=this.i18nTranslate("formsNext.invalidNumber")},validateNumber:function(){var e,t,n,r;if(!hubspot.utils.isNumeric(this.state.value))return{valid:!1,message:this.i18nTranslate("formsNext.invalidNumber")};if(this.props.validationData){n=parseInt(this.props.validationData[0]);n=a.isNumeric(n)?n:null;t=parseInt(this.props.validationData[1])||null;r=parseFloat(this.state.value);e=this.props.validationData.length>2&&"false"===this.props.validationData[2]?!1:!0;if(e&&null!==n&&null!==t){if(r>t)return{valid:!1,message:this.i18nTranslate("formsNext.invalidNumberRangeTooLarge",{max:t})};if(n>r)return{valid:!1,message:this.i18nTranslate("formsNext.invalidNumberRangeTooSmall",{min:n})}}}return{valid:!0}},handleChangeAndValidate:function(e){return this.setState({value:e.target.value,validationArmed:!1},this.handleBlur)},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},getInitialState:function(){return{value:this.props.defaultValue,validationArmed:!1}},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return n.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:this.props.type,inputmode:"numeric",name:this.props.name,required:this.props.required,value:this.state.value,placeholder:this.props.placeholder,step:"any",onChange:this.handleChange,onBlur:this.handleBlur})}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.NumberInput=t}).call(this);(function(){var e,t,n,r,i,o,a,s,l;r=window.React;e=window.I18n;i=hubspot.form.mixins.ValidatorMixin;t=hubspot.form.mixins.InputMixin;l=hns("hubspot.utils");s=hns("hubspot.phone_utils");n=r.createClass({displayName:"Phone",mixins:[i,t],validators:["validateLength","validateFormat"],validateLength:function(){var e,t,n,r,i,o;n=this.state.dialCode||"";t=(""+n+this.state.value).replace(/[- +().x]/g,"");o=t.length;if(this.props.validationData){i=parseInt(this.props.validationData[0]);r=parseInt(this.props.validationData[1]);e=this.props.validationData.length>2&&"false"===this.props.validationData[2]?!1:!0;if(e&&null!==i&&null!==r){if(o>r)return{valid:!1,message:this.i18nTranslate("formsNext.phoneInvalidRangeTooLong",{max:r})};if(i>o)return{valid:!1,message:this.i18nTranslate("formsNext.phoneInvalidRangeTooShort",{min:i})}}return{valid:!0}}},validateFormat:function(){var e,t;e=/^\+?(((?:\(x?\d+\))|(?:x?\d+))[\-\.]?)+$/i;t=this.state.value.replace(/\s/g,"");return e.test(t)?{valid:!0}:{valid:!1,message:this.i18nTranslate("formsNext.phoneInvalidCharacters")}},handleChangeAndValidate:function(e){return"SELECT"===e.target.tagName?this.handleCountryCodeChange(e,this.handleBlur):this.handleChange(e,this.handleBlur)},handleChange:function(e,t){var n;null==t&&(t=function(){});n=e.target.value;this.state.isUsingCountryCodeSelect&&this.state.dialCode&&0===n.indexOf(this.state.dialCode)&&(n=n.substring(this.state.dialCode.length+1));return this.setState({value:n,validationArmed:!1},t)},handleCountryCodeChange:function(e,t){var n;null==t&&(t=function(){});n=s.getExtensionFromCountryCode(e.target.value);return this.setState({countryCode:e.target.value,dialCode:n,validationArmed:!1},t)},getInitialValues:function(){var t,n,r,i,o;t="";r="";o=this.props.defaultValue;i=!1;if(l.getMetaDataValue(this.props.metaData,"useCountryCodeSelect"))if(this.props.defaultValue){if(s.getCountryCodeFromKnownProperties(this.props.knownProperties)){t=s.getCountryCodeFromKnownProperties(this.props.knownProperties);r=s.getExtensionFromCountryCode(t);r&&(o=o.substring(r.length))}}else{n=this.props.countryCode;n=n||s.getCountryCodeFromLocale(e.locale);t=n||s.getDefaultCountryCode();r=s.getExtensionFromCountryCode(t)}i=t&&r;return{countryCode:t,dialCode:r,value:o,isUsingCountryCodeSelect:i -}},getInitialState:function(){return hubspot.utils.extend(this.getInitialValues(),{validationArmed:!1})},handleBlur:function(){this.props.setFieldValue(this.getValueToSubmit());return this.validate()},renderOptions:function(){return hubspot.utils.map(s.getCountryCodes(),function(e){return function(e,t){return r.createElement("option",{key:e,value:e},s.getCountryNameFromCountryCode(e))}}(this))},getValueToSubmit:function(){var e,t;t=this.state.value.replace(/^\s*0/,"");e=this.state.dialCode||"";return 0===this.state.value.length?"":""+e+t},renderNumberWithExtensionInputs:function(e){return r.createElement("div",{className:"hs-input hs-fieldtype-intl-phone"},r.createElement("select",{id:this.props.name+"_ext-"+this.props.uniqueId,required:this.props.required,name:"",className:e,value:this.state.countryCode,onChange:this.handleCountryCodeChange,onBlur:this.handleBlur},this.renderOptions()),r.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:"tel",inputmode:"tel",name:"",required:this.props.required,value:this.state.dialCode+" "+this.state.value,placeholder:this.props.placeholder,onChange:this.handleChange,onBlur:this.handleBlur,autoComplete:this.props.autoCompleteLabel}),r.createElement("input",{ref:"hiddenInput",name:this.props.name,className:"hs-input",type:"hidden",value:""+this.getValueToSubmit()}))},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return this.state.isUsingCountryCodeSelect?this.renderNumberWithExtensionInputs(e):r.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:"tel",inputmode:"tel",name:this.props.name,required:this.props.required,value:this.state.value,placeholder:this.props.placeholder,onChange:this.handleChange,onBlur:this.handleBlur,autoComplete:this.props.autoCompleteLabel})}});null==hubspot.form&&(hubspot.form={});null==(o=hubspot.form).components&&(o.components={});null==(a=hubspot.form.components).inputs&&(a.inputs={});hubspot.form.components.inputs.Phone=n}).call(this);(function(){var e,t,n,r,i,o;n=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;t=n.createClass({displayName:"RangeInput",mixins:[r,e],getInitialState:function(){return{value:this.props.defaultValue||this.props.min}},getDefaultProps:function(){return{min:0,max:10}},handleChangeAndValidate:function(e){this.setState({value:e.target.value,validationArmed:!0});this.props.setFieldValue(this.state.value);return this.validate()},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},render:function(){return n.createElement("div",{className:"hs-input-range-container"},n.createElement("div",{className:"hs-input-range"},n.createElement("span",{className:"hs-default-font-element"},this.props.min),n.createElement("input",{type:"range",value:this.state.value,min:this.props.min,max:this.props.max,onChange:this.handleChange,name:"range-field",className:"hs-input-range__slider"}),n.createElement("span",{className:"hs-default-font-element"},this.props.max)),n.createElement("div",{className:"hs-input-range-value-container"},n.createElement("span",{className:"hs-input"},this.state.value)))}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Range=t}).call(this);(function(){var e,t,n,r,i,o;n=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;o=hns("hubspot.utils");t=n.createClass({displayName:"RatingInput",mixins:[r,e],getInitialState:function(){return{value:this.props.defaultValue||this.props.min}},getDefaultProps:function(){return{min:0,max:10,isStar:!1}},handleChangeAndValidate:function(e){this.setState({value:e.target.value,validationArmed:!0});this.props.setFieldValue(this.state.value);return this.validate()},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},renderStar:function(e){var t;t=e<=this.state.value?"hs-input-rating__svg-is-selected":"";return n.createElement("svg",{viewBox:"0 0 51 48",className:""+t},n.createElement("path",{d:"m25,1 6,17h18l-14,11 5,17-15-10-15,10 5-17-14-11h18z"}))},renderOptions:function(){var e,t,r;e=function(){r=[];for(var e=t=this.props.min,n=this.props.max;n>=t?n>=e:e>=n;n>=t?e++:e--)r.push(e);return r}.apply(this);return o.map(e,function(e){return function(t){return n.createElement("label",{className:"hs-input-rating__label",htmlFor:"radio-"+t+"-"+e.props.name,key:t},t,n.createElement("input",{type:"radio",name:"hs-radio-"+e.props.name,id:"radio-"+t+"-"+e.props.name,value:t,checked:t===parseInt(e.state.value,10),onChange:e.handleChange}),e.props.isStar&&e.renderStar(t))}}(this))},render:function(){var e;e=this.props.isStar?" hs-input-rating__is-star":"";return n.createElement("div",{className:"hs-input-rating__container"+e},n.createElement("section",null,this.renderOptions()))}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});hubspot.form.components.inputs.Rating=t}).call(this);(function(){var e,t,n,r,i;e=window.React;i=window.reqwest;t=e.createClass({validateCaptcha:function(){return this.state.value?{valid:!0}:{valid:!1}},componentDidMount:function(){var t,n,r,i,o;"qa"===this.props.env||"local"===this.props.env?this.sitekey="6LfoMB8UAAAAAAxuC2YUhdgQvIKqJLk7qjX9yvzE":this.sitekey="6Lc2_RsUAAAAAAYBSd4rxsgeQz7whuL9COCsHeET";if(this.props.shell){r="https://app.hubspot.com/forms-next-v2-captcha";"qa"===this.props.env?r="https://app.hubspotqa.com/forms-next-v2-captcha":"local"===this.props.env&&(r="https://local.hubspotqa.com/FormsNext/static-3.465/html/recaptcha.html");t=document.createElement("iframe");t.src=r;t.style.border="none";t.style.display="block";t.style.overflow="hidden";t.style.width="100%";t.scrolling="no";t.setAttribute("height",70);t.setAttribute("width",270);i=e.findDOMNode(this.refs.recaptchaTarget);i.appendChild(t);window.setRecaptchaToken=this.setCaptchaResponse}else o=null!=(n=window.grecaptcha)?n.render(e.findDOMNode(this.refs.recaptchaTarget),{sitekey:this.sitekey,callback:this.setCaptchaResponse,"expired-callback":this.setCaptchaExpired,size:"invisible",badge:"inline"},!0):void 0;this.props.sendRecaptchaWidgetId(o);return this.setState({widgetId:o})},setCaptchaResponse:function(e){this.setState({value:e});return this.props.onSuccessCallback()},setCaptchaExpired:function(){var e;this.setState({value:"",validResponse:""});return null!=(e=window.grecaptcha)?e.reset(this.state.widgetId):void 0},getInitialState:function(){return{value:"",widgetId:""}},componentDidUpdate:function(e,t){return t.value!==this.state.value?this.validateCaptcha():void 0},renderToken:function(t){return e.createElement("input",{type:"hidden",name:"g-recaptcha-response",id:"hs-recaptcha-response",value:t})},renderError:function(t){return e.createElement("li",null,e.createElement("label",null,t))},renderErrors:function(e){return this.props.groupErrors?hubspot.utils.map(e,function(e){return function(t){return e.renderError(t)}}(this)):this.renderError(e[0])},renderErrorsList:function(){var t,n;return(null!=(t=this.props.formValidity)&&null!=(n=t.recaptcha)?n.errors.length:void 0)?e.createElement("ul",{className:"no-list "+this.props.errorMessageClass,style:{display:"block"}},this.renderErrors(this.props.formValidity.recaptcha.errors)):void 0},render:function(){return this.props.captchaEnabled?e.createElement("div",{className:"hs_recaptcha hs-recaptcha field hs-form-field"},e.createElement("div",{ref:"recaptchaTarget",className:"input"}),this.renderToken(this.state.value),this.renderErrorsList()):void 0}});null==hubspot.form&&(hubspot.form={});null==(n=hubspot.form).components&&(n.components={});null==(r=hubspot.form.components).inputs&&(r.inputs={});hubspot.form.components.inputs.Recaptcha=t}).call(this);(function(){var e,t,n,r,i,o;t=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;n=t.createClass({displayName:"Select",mixins:[r,e],validators:["validateRequiredSelect"],componentDidMount:function(){return this.browserInvalidError=this.i18nTranslate("formsNext.missingSelect")},validateRequiredSelect:function(){return this.props.required&&!this.state.value?{valid:!1,message:this.i18nTranslate("formsNext.missingSelect")}:{valid:!0}},renderPlaceholder:function(){return t.createElement("option",{value:"",disabled:"disabled",selected:"selected"},this.props.unselectedLabel||this.props.placeholder||this.i18nTranslate("formsNext.defaultSelectOptionLabel"))},renderOptions:function(){return hubspot.utils.map(this.props.options,function(e){return function(e,n){return t.createElement("option",{key:e.value,value:e.value},e.label)}}(this))},handleChangeAndValidate:function(e){return this.setState({value:e.target.value},this.validate)},handleChange:function(e){return this.setState({value:e.target.value})},componentDidUpdate:function(e,t){if(t.value!==this.state.value){this.props.setFieldValue(this.state.value);return this.validate()}},getInitialState:function(){return{value:this.props.selectedOptions.length?this.props.selectedOptions[0]:this.props.defaultValue}},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return t.createElement("select",{id:this.props.name+"-"+this.props.uniqueId,required:this.props.required,className:e,name:this.props.name,value:this.state.value,onChange:this.handleChange,onBlur:this.validate},this.renderPlaceholder(),this.renderOptions())}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Select=n}).call(this);(function(){var e,t,n,r,i,o;t=window.React;e=hubspot.form.mixins.I18nMixin;r=hns("hubspot.utils");n=t.createClass({mixins:[e],contextTypes:{formInstance:t.PropTypes.object},propTypes:{submitText:t.PropTypes.string,submitButtonClass:t.PropTypes.string,cms:t.PropTypes.bool.isRequired,portalId:t.PropTypes.number.isRequired,formId:t.PropTypes.string.isRequired,isVideo:t.PropTypes.bool.isRequired},getDefaultProps:function(){return{noBrandingScope:!0,isVideo:!1}},getInitialState:function(){return{submitKey:"formsNext.submitText"}},setSubmitKey:function(e){return this.setState({submitKey:e})},componentDidMount:function(){this.context.formInstance.register("Submit",this);if(this.props.isVideo){this.setSubmitColorBasedOnPlayer();return this.getBestContrastTextColor()}},setSubmitColorBasedOnPlayer:function(){var e,t;e=this.refs.submit.getDOMNode();t=r.getQueryStringParams(!0);if(null!=t.play_button_color){e.style.backgroundColor="#"+t.play_button_color;return e.style.borderColor="#"+t.play_button_color}},getBestContrastTextColor:function(){var e,t,n,r,i,o,a,s;e=this.refs.submit.getDOMNode();a=getComputedStyle(e)["background-color"];o=a.match(/\d+/g),i=o[0],n=o[1],t=o[2];i=parseInt(i);n=parseInt(n);t=parseInt(t);s=(299*i+587*n+114*t)/1e3;r=s>=186?"#111111":"#FFFFFF";return e.style.color=r},getSubmitText:function(){var e;e=this.state.submitKey||"formsNext.submitText";return this.i18nTranslate(e,null,this.props.submitText)},render:function(){var e,n,r;r=this.getSubmitText();n=this.props.submitButtonClass||"hs-button primary large";this.props.cms&&(n+=" FormSubmitButton");e=t.createElement("div",{className:"hs_submit hs-submit"},t.createElement("div",{className:"hs-field-desc",style:{display:"none"}}),t.createElement("div",{className:"actions"},t.createElement("input",{ref:"submit",type:"submit",value:r,className:n})));return e}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Submit=n}).call(this);(function(){var e,t,n,r,i,o;t=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;n=t.createClass({displayName:"Text",mixins:[r,e],validators:["validateTrimmed","validateMaxInputLength"],handleChangeAndValidate:function(e){return this.setState({value:e.target.value,validationArmed:!1},this.handleBlur)},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},getInitialState:function(){return{value:this.props.defaultValue}},getInputMode:function(e){return"website"===e?"url":"text"},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return t.createElement("input",{id:this.props.name+"-"+this.props.uniqueId,className:e,type:this.props.type,inputmode:this.getInputMode(this.props.name),name:this.props.name,required:this.props.required,value:this.state.value,placeholder:this.props.placeholder,onChange:this.handleChange,onBlur:this.handleBlur,autoComplete:this.props.autoCompleteLabel})}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.Text=n}).call(this);(function(){var e,t,n,r,i,o;t=window.React;r=hubspot.form.mixins.ValidatorMixin;e=hubspot.form.mixins.InputMixin;n=t.createClass({displayName:"TextArea",mixins:[r,e],validators:["validateTrimmed","validateMaxInputLength"],handleChangeAndValidate:function(e){return this.setState({value:e.target.value,validationArmed:!1},this.handleBlur)},handleChange:function(e){return this.setState({value:e.target.value,validationArmed:!1})},getInitialState:function(){return{value:this.props.defaultValue}},handleBlur:function(){this.props.setFieldValue(this.state.value);return this.validate()},render:function(){var e;e=this.state.validationArmed&&null!=this.props.valid&&!this.props.valid?"hs-input "+this.props.errorClass:"hs-input";this.props.cms&&(e+=" AutoFormInput");return t.createElement("textarea",{id:this.props.name+"-"+this.props.uniqueId,className:e,name:this.props.name,required:this.props.required,value:this.state.value,placeholder:this.props.placeholder,onChange:this.handleChange,onBlur:this.handleBlur,autoComplete:this.props.autoCompleteLabel})}});null==hubspot.form&&(hubspot.form={});null==(i=hubspot.form).components&&(i.components={});null==(o=hubspot.form.components).inputs&&(o.inputs={});hubspot.form.components.inputs.TextArea=n}).call(this);(function(){var e;e={submit:function(e,t,n){var r,i;i="https://forms.hsforms"+e+".com/embed/v3/timings.gif?key="+t+"&valueInMs="+n;r=new Image;return r.src=i}};hns("hubspot.form.perf.API",e)}).call(this);(function(){var e,t,n,r;e=hns("hubspot.form.perf.API");r=hns("hubspot.utils");n=!0;t={shouldMeasure:function(){return!1},setup:function(e){return this.environmentSuffix="qa"===e?"qa":""},submitTiming:function(t,n){return e.submit(this.environmentSuffix,t,n)},measureEmbedScript:function(){var e,t;try{if(!this.shouldMeasure())return;e=performance.getEntriesByType("resource").filter(function(e){return function(e){return e.name.indexOf("forms/v2.js")}}(this))[0].duration;if(e)return this.submitTiming("embed-script",e)}catch(n){t=n;return r.debug(t)}},measureFormRequest:function(e){var t,n;try{if(!this.shouldMeasure())return;t=performance.getEntriesByType("resource").filter(function(t){return new RegExp("embed.*"+e).exec(t.name)})[0].duration;if(t)return this.submitTiming("fetch-definition",t)}catch(i){n=i;return r.debug(n)}},markStart:function(e,t){var n,i;i=t+"-"+e+"-start";try{if(!this.shouldMeasure())return;return performance.mark(i)}catch(o){n=o;return r.debug(n)}},markEnd:function(e,t){var n,i,o,a,s;s=t+"-"+e+"-start";o=t+"-"+e+"-end";try{if(!this.shouldMeasure())return;performance.mark(o);performance.measure(e,s,o);n=null!=(a=performance.getEntriesByName(e)[0])?a.duration:void 0;this.submitTiming(e,n);performance.clearMarks(s);performance.clearMarks(o);return performance.clearMeasures(e)}catch(l){i=l;return r.debug(i)}}};hns("hubspot.form.perf.PerfMeasurer",t)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f,d,h,m;u=window.React;r=hubspot.form.components.inputs.Enum;p=hubspot.form.components.inputs.Select;e=hubspot.form.components.inputs.BooleanCheckbox;f=hubspot.form.components.inputs.Text;s=hubspot.form.components.inputs.Phone;n=hubspot.form.components.inputs.Email;a=hubspot.form.components.inputs.NumberInput;t=hubspot.form.components.inputs.DateInput;d=hubspot.form.components.inputs.TextArea;i=hubspot.form.components.inputs.File;l=hubspot.form.components.inputs.Range;c=hubspot.form.components.inputs.Rating;m=hns("hubspot.utils");o=u.createClass({displayName:"Input",componentDidMount:function(){if(this.props.hidden){if("date"===this.props.fieldType)return this.props.registerDateField(this.props.name);if("booleancheckbox"===this.props.fieldType)return this.props.registerBoolCheckBoxField(this.props.name)}},getInputType:function(){var e;return(null!=(e=this.props.validation)?e.name:void 0)?this.props.validation.name:this.props.fieldType},getAutoCompleteLabel:function(){switch(this.props.name){case"phone":return"tel";case"email":return"email";case"company":return"organization";case"fax":return"fax";case"firstname":return"given-name";case"jobtitle":return"organization-title";case"lastname":return"family-name";case"mobilephone":return"mobile";case"salutation":return"honorific-prefix";case"state":return"address-level1";case"address":return"street-address";case"city":return"address-level2";default:return}},renderInputs:function(){var o,h,m,g,v,x,b,y,E,C,S,I,T,k;if(this.props.hidden){k="";if("enumeration"===this.props.type)try{k=this.props.selectedOptions.join(";")}catch(w){k="string"==typeof this.props.selectedOptions?this.props.selectedOptions:this.props.defaultValue}else k=this.props.defaultValue;return u.createElement("input",{ref:"hiddenInput",name:this.props.name,className:"hs-input",type:"hidden",defaultValue:k})}v={name:this.props.name,uniqueId:this.props.uniqueId,fieldType:this.props.fieldType,type:this.getInputType(),required:this.props.required,defaultValue:this.props.defaultValue,options:this.props.options,selectedOptions:this.props.selectedOptions,placeholder:this.props.placeholder,valid:this.props.valid,setFieldValidity:this.props.setFieldValidity,registerValidator:this.props.registerValidator,deregisterValidator:this.props.deregisterValidator,errorClass:this.props.errorClass,locale:this.props.locale,translations:this.props.translations,cms:this.props.cms,setFieldValue:this.props.setFieldValue,autoCompleteLabel:this.getAutoCompleteLabel(),metaData:this.props.metaData,knownProperties:this.props.knownProperties,countryCode:this.props.countryCode};switch(this.props.fieldType){case"text":if("phone"===this.props.name||"mobilephone"===this.props.name){T=(null!=(x=this.props.validation)?x.data:void 0)?this.props.validation.data.split(":"):[];return u.createElement(s,u.__spread({},v,{validationData:T}))}if("email"===this.props.name){T=(null!=(b=this.props.validation)?b.data:void 0)?this.props.validation.data.split("|||"):!1;I=(null!=(y=this.props.validation)?y.useDefaultBlockList:void 0)?this.props.validation.useDefaultBlockList:!1;return u.createElement(n,u.__spread({},v,{env:this.props.env},{portalId:this.props.portalId},{validationData:T},{blockedDomains:this.props.blockedDomains},{usingHubspotBlockedDomains:I},{formsBaseUrl:this.props.formsBaseUrl}))}return u.createElement(f,u.__spread({},v));case"date":return u.createElement(t,u.__spread({},v,{registerDateField:this.props.registerDateField}));case"checkbox":case"radio":return u.createElement(r,u.__spread({},v));case"number":T=(null!=(E=this.props.validation)?E.data:void 0)?this.props.validation.data.split(":"):[];return u.createElement(a,u.__spread({},v,{validationData:T}));case"textarea":return u.createElement(d,u.__spread({},v));case"select":return u.createElement(p,u.__spread({},v,{unselectedLabel:this.props.unselectedLabel}));case"file":m=this.props.metaData?this.props.metaData:{};return u.createElement(i,u.__spread({},v,{metaData:m}));case"booleancheckbox":return u.createElement(e,u.__spread({},v,{label:this.props.label},{registerBoolCheckBoxField:this.props.registerBoolCheckBoxField},{deregisterBoolCheckBoxField:this.props.deregisterBoolCheckBoxField}));case"range":T=(null!=(C=this.props.validation)?C.data:void 0)?this.props.validation.data.split(":"):[];g=T[0],h=T[1];return u.createElement(l,u.__spread({},v,{min:g},{max:h}));case"rating":case"starRating":T=(null!=(S=this.props.validation)?S.data:void 0)?this.props.validation.data.split(":"):[];o="starRating"===this.props.fieldType;g=T[0],h=T[1];return u.createElement(c,u.__spread({},v,{min:g},{max:h},{isStar:o}))}},render:function(){return u.createElement("div",{className:"input"},this.renderInputs())}});null==hubspot.form&&(hubspot.form={});null==(h=hubspot.form).components&&(h.components={});hubspot.form.components.Input=o}).call(this);(function(){var e,t,n,r,i=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};n=window.React;t=hubspot.form.components.Input;e=n.createClass({displayName:"Field",contextTypes:{formInstance:n.PropTypes.object},componentDidMount:function(){return this.context.formInstance.register(this.props.name,this)},getContainerStyle:function(){return this.props.hidden||this.state.hidden?{display:"none"}:void 0},getDescriptionStyle:function(){return this.props.description&&!this.props.hidden?{display:"block"}:{display:"none"}},renderRequired:function(){return n.createElement("span",{className:"hs-form-required"},"*")},renderError:function(e,t){return"object"==typeof e?n.createElement("li",{key:t},n.createElement("label",null,n.createElement("a",{href:"javascript:void(0);",onClick:e.callback},e.label))):n.createElement("li",{key:t},n.createElement("label",{className:"hs-error-msg"},e))},renderErrors:function(){return this.props.groupErrors?hubspot.utils.map(this.props.errors,function(e){return function(t,n){return e.renderError(t,n)}}(this)):this.renderError(this.props.errors[0])},renderErrorsList:function(){var e;return(null!=(e=this.props.errors)?e.length:void 0)?n.createElement("ul",{className:"no-list "+this.props.errorMessageClass,style:{display:"block"},role:"alert"},this.renderErrors()):void 0},getLabel:function(){var e,t;if("booleancheckbox"!==this.props.fieldType){e=null!=(t=this.props.translations)?t.fieldLabels:void 0;return null!=(null!=e?e[this.props.name]:void 0)?e[this.props.name]:this.props.label}return""},renderDependentFields:function(){return this.props.dependentFieldFilters?hubspot.utils.map(this.props.dependentFieldFilters,function(e){return function(t){var n,r;if(e.state.dependentFieldsToRender&&(r=t.dependentFormField.name,i.call(e.state.dependentFieldsToRender,r)>=0)){n=t.dependentFormField;return e.props.dependentFields[n.name]}}}(this)):void 0},setFieldValue:function(e){return this.setState({fieldValue:e})},setHidden:function(e){return this.setState({hidden:e})},getInitialState:function(){return{fieldValue:this.props.defaultValue}},componentWillMount:function(){return this.props.dependentFieldFilters&&this.state.fieldValue?this.collectDependentFields():void 0},componentDidUpdate:function(e,t){return this.props.dependentFieldFilters&&t.fieldValue!==this.state.fieldValue?this.collectDependentFields():void 0},collectDependentFields:function(){var e;e=[];hubspot.utils.map(this.props.dependentFieldFilters,function(t){return function(n){var r,i,o,a,s;a=n.filters;s=[];for(i=0,o=a.length;o>i;i++){r=a[i];hubspot.utils.filterDependentField(t.state.fieldValue,t.props.type,t.props.fieldType,r)?s.push(e.push(n.dependentFormField.name)):s.push(void 0)}return s}}(this));return this.setState({dependentFieldsToRender:e})},renderLabel:function(e){var t;t=this.props.name+"-"+this.props.uniqueId;return n.createElement("label",{id:"label-"+t,className:e,placeholder:"Enter your "+this.props.label,htmlFor:t},n.createElement("span",{dangerouslySetInnerHTML:{__html:this.getLabel()}}),this.props.required&&"booleancheckbox"!==this.props.fieldType?this.renderRequired():void 0)},renderField:function(){var e,r;e="hs_"+this.props.name+" hs-"+this.props.name+" hs-fieldtype-"+this.props.fieldType+" field hs-form-field";this.props.isSmartField&&(e+=" smart-field");this.props.cms&&(e+=" ContactFormItem");r="";this.props.cms&&(r+=" AutoFormLabel");this.props.labelHidden&&(r+=" hs-hidden");return n.createElement("div",{className:e,key:this.props.name,style:this.getContainerStyle()},"booleancheckbox"!==this.props.fieldType?this.renderLabel(r):void 0,n.createElement("legend",{className:"hs-field-desc",style:this.getDescriptionStyle(),dangerouslySetInnerHTML:{__html:this.props.description}}),n.createElement(t,{key:this.props.name,env:this.props.env,portalId:this.props.portalId,name:this.props.name,required:this.props.required,type:this.props.type,fieldType:this.props.fieldType,options:this.props.options,selectedOptions:this.props.selectedOptions,uniqueId:this.props.uniqueId,defaultValue:this.props.defaultValue,placeholder:this.props.placeholder,unselectedLabel:this.props.unselectedLabel,label:this.props.label,hidden:this.props.hidden,validation:this.props.validation,valid:this.props.valid,setFieldValidity:this.props.setFieldValidity,registerValidator:this.props.registerValidator,deregisterValidator:this.props.deregisterValidator,registerBoolCheckBoxField:this.props.registerBoolCheckBoxField,deregisterBoolCheckBoxField:this.props.deregisterBoolCheckBoxField,registerDateField:this.props.registerDateField,errorClass:this.props.errorClass,locale:this.props.locale,translations:this.props.translations,blockedDomains:this.props.blockedDomains,cms:this.props.cms,setFieldValue:this.setFieldValue,metaData:this.props.metaData,formsBaseUrl:this.props.formsBaseUrl,knownProperties:this.props.knownProperties,countryCode:this.props.countryCode}),this.renderErrorsList())},render:function(){return this.props.dependentFieldFilters?n.createElement("div",{className:"hs-dependent-field"},this.renderField(),this.renderDependentFields()):this.renderField()}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.Field=e}).call(this);(function(){var e,t,n,r;n=window.React;e=hubspot.form.components.Field;t=n.createClass({displayName:"FieldGroup",sortOptions:function(e){var t;if(e.length>0){t=hubspot.utils.mergeSort(e,function(e,t){return e.displayOrder===t.displayOrder?0:e.displayOrder>t.displayOrder?1:-1});return t}return e},getSelectedOptions:function(e){return!hubspot.utils.isExistingProperty(this.props.contactProperties,e.name)||this.props.ignoreCurrentValues||e.hidden?!e.defaultValue||e.hidden&&"enumeration"===e.type?this.props.urlParams[e.name]?"enumeration"===e.type?hubspot.utils.getSelectedOptionsByLabel(e.options,this.props.urlParams[e.name]):hubspot.utils.getSelectedOptions(e.options,this.props.urlParams[e.name]):e.selectedOptions?e.selectedOptions:[]:e.defaultValue:hubspot.utils.getSelectedOptions(e.options,this.props.contactProperties[e.name])},getDefaultValue:function(e){var t;switch(e.fieldType){case"select":case"booleancheckbox":t=e.selectedOptions[0];break;case"radio":case"checkbox":t=e.selectedOptions;break;default:t=e.defaultValue}hubspot.utils.isExistingProperty(this.props.contactProperties,e.name)&&!this.props.ignoreCurrentValues&&(e.hidden&&e.defaultValue||(t=this.props.contactProperties[e.name]));this.props.urlParams[e.name]&&(t=this.props.urlParams[e.name]);"email"===e.name&&this.props.urlParams._hse&&(t=this.props.urlParams._hse);return t},getNumberOfSmartFieldsToShow:function(){var e;if(this.props.isSmartGroup){e=hubspot.utils.filter(this.props.fields,function(e){return function(t){return!e.isHiddenSmartField(t)}}(this));return null!=e?e.length:void 0}},isHiddenSmartField:function(e){var t,n;t=e.name.toLowerCase();return null!=(null!=(n=this.props.hiddenSmartFields)?n[t]:void 0)},getDependentFields:function(e){var t,n,r,i,o,a;n={};a=e.dependentFieldFilters;for(i=0,o=a.length;o>i;i++){r=a[i];t=r.dependentFormField;n[t.name]=this.renderField(t)}return n},getSafeFieldName:function(e){var t;t=e.name;if("submit"===t)return"submit[]";e.propertyObjectType&&"CONTACT"!==e.propertyObjectType&&(t=e.propertyObjectType+"."+t);return t},renderField:function(t){var r,i,o,a,s;r=this.getDefaultValue(t);return n.createElement(e,{key:t.name,env:this.props.env,portalId:this.props.portalId,defaultValue:r,placeholder:t.placeholder,name:this.getSafeFieldName(t),label:t.label,labelHidden:t.labelHidden,required:t.required,type:t.type,fieldType:t.fieldType,isSmartField:this.props.isSmartGroup||t.isSmartField,options:this.sortOptions(t.options),selectedOptions:this.getSelectedOptions(t),unselectedLabel:t.unselectedLabel,description:t.description,hidden:t.hidden,validation:t.validation,uniqueId:this.props.uniqueId,cms:this.props.cms,metaData:t.metaData,valid:null!=(i=this.props.formValidity[this.getSafeFieldName(t)])?i.valid:void 0,errors:null!=(o=this.props.formValidity[this.getSafeFieldName(t)])?o.errors:void 0,formValidity:this.props.formValidity,setFieldValidity:this.props.setFieldValidity,registerValidator:this.props.registerValidator,deregisterValidator:this.props.deregisterValidator,registerBoolCheckBoxField:this.props.registerBoolCheckBoxField,deregisterBoolCheckBoxField:this.props.deregisterBoolCheckBoxField,registerDateField:this.props.registerDateField,errorClass:this.props.errorClass,groupErrors:this.props.groupErrors,errorMessageClass:this.props.errorMessageClass,locale:this.props.locale,translations:this.props.translations,blockedDomains:this.props.blockedDomains,dependentFieldFilters:(null!=(a=t.dependentFieldFilters)?a.length:void 0)?t.dependentFieldFilters:void 0,dependentFields:(null!=(s=t.dependentFieldFilters)?s.length:void 0)?this.getDependentFields(t):void 0,formsBaseUrl:this.props.formsBaseUrl,knownProperties:this.props.contactProperties,countryCode:this.props.countryCode})},renderFields:function(){return hubspot.utils.map(this.props.fields,function(e){return function(t){return e.isHiddenSmartField(t)?void 0:e.renderField(t)}}(this))},renderRichText:function(){return null!=this.props.richText&&""!==this.props.richText.content?n.createElement("div",{className:"hs-richtext hs-main-font-element",dangerouslySetInnerHTML:{__html:this.props.richText.content}}):void 0},render:function(){var e,t;if(this.props.multiColumn){t=this.getNumberOfSmartFieldsToShow()||this.props.fields.length;return n.createElement("fieldset",{className:"form-columns-"+t},this.renderRichText(),this.renderFields())}if(null!=this.props.richText&&""!==this.props.richText.content){e=this.props.fields[0];return n.createElement("div",null,this.renderRichText(),e?this.renderField(e):void 0)}if(this.props.fields[0]){e=this.props.fields[0];return this.renderField(e)}return null}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.FieldGroup=t}).call(this);(function(){var e,t,n,r,i,o;n=window.React;e=hubspot.form.components.Field;o=hns("hubspot.utils");i=hns("hubspot.legalOptions.constants");t=n.createClass({contextTypes:{formInstance:n.PropTypes.object},componentDidMount:function(){return this.context.formInstance.register("LegalConsent",this)},getContainerStyle:function(){return this.state.hidden?{display:"none"}:void 0},getHelpTextStyle:function(e){return e&&0!==e.replace(/<[^>]*>/g,"").length?{display:"block"}:{display:"none"}},getVisibleOptionKeys:function(e){var t,n;t=e[i.options.IS_LEGITIMATE_INTEREST];n=e[i.options.PROCESSING_CONSENT_TYPE];return t||n!==i.processingConsentTypes.IMPLICIT?t||n!==i.processingConsentTypes.REQUIRED_CHECKBOX?t?[i.options.SUBSCRIPTION_TYPE,i.options.LAWFUL_BASIS,i.options.PRIVACY_POLICY_TEXT]:[]:[i.options.COMMUNICATION_CONSENT_TEXT,i.options.COMMUNICATION_CONSENT_CHECKBOXES,i.options.PROCESSING_CONSENT_TEXT,i.options.PROCESSING_CONSENT_CHECKBOX_LABEL,i.options.PROCESSING_CONSENT_FOOTER_TEXT,i.options.PRIVACY_POLICY_TEXT]:[i.options.COMMUNICATION_CONSENT_TEXT,i.options.COMMUNICATION_CONSENT_CHECKBOXES,i.options.PRIVACY_POLICY_TEXT,i.options.PROCESSING_CONSENT_TEXT]; -},setHidden:function(e){return this.setState({hidden:e})},getInitialState:function(){return{hidden:!1}},renderCheckbox:function(t,r,i,o){var a,s,l;a={options:[{value:"true"},{value:"false"}],validation:{name:"",message:"",data:"",useDefaultBlockList:!1,blockedEmailAddresses:[]}};return n.createElement("div",null,n.createElement(e,{key:t,env:this.props.env,portalId:this.props.portalId,defaultValue:"",placeholder:"",name:t,label:r,labelHidden:!1,required:i,type:"enumeration",fieldType:"booleancheckbox",isSmartField:!1,options:a.options,selectedOptions:[],unselectedLabel:"",description:"",hidden:!1,validation:a.validation,uniqueId:this.props.uniqueId,cms:this.props.cms,metaData:[],locale:this.props.locale,valid:null!=(s=this.props.formValidity[t])?s.valid:void 0,errors:null!=(l=this.props.formValidity[t])?l.errors:void 0,formValidity:this.props.formValidity,setFieldValidity:this.props.setFieldValidity,registerValidator:this.props.registerValidator,deregisterValidator:this.props.deregisterValidator,registerBoolCheckBoxField:this.props.registerBoolCheckBoxField,deregisterBoolCheckBoxField:this.props.deregisterBoolCheckBoxField,errorClass:this.props.errorClass,groupErrors:this.props.groupErrors,errorMessageClass:this.props.errorMessageClass,dependentFieldFilters:[],dependentFields:[],translations:this.props.translations}),n.createElement("legend",{className:"hs-field-desc checkbox-desc",style:this.getHelpTextStyle(o),dangerouslySetInnerHTML:{__html:o}}))},renderText:function(e){return null!=e&&""!==e?n.createElement("div",{className:"hs-richtext",dangerouslySetInnerHTML:{__html:e}}):void 0},renderLegalConsentFields:function(){var e,t,r;e=this;r=this.getVisibleOptionKeys(this.props.legalConsentRecord);t=Object.keys(this.props.legalConsentRecord);return n.createElement("div",{className:"legal-consent-container",style:this.getContainerStyle()},r.map(function(n){var r;if(-1!==t.indexOf(n))switch(n){case i.options.COMMUNICATION_CONSENT_CHECKBOXES:return e.props.legalConsentRecord[n].map(function(t){return e.renderCheckbox(i.nameKey+".subscription_type_"+t.communicationTypeId,t.label,t.required)});case i.options.PROCESSING_CONSENT_CHECKBOX_LABEL:r=e.props.legalConsentRecord[i.options.PROCESSING_CONSENT_FOOTER_TEXT];return e.renderCheckbox(i.nameKey+".processing",e.props.legalConsentRecord[n],!0,r);case i.options.COMMUNICATION_CONSENT_TEXT:case i.options.PROCESSING_CONSENT_TEXT:case i.options.PRIVACY_POLICY_TEXT:return e.renderText(e.props.legalConsentRecord[n]);default:return null}}))},render:function(){var e;e=Object.keys(this.props.legalConsentRecord);return 0===e.length?null:this.props.multiColumn?n.createElement("fieldset",{className:"form-columns-1"},this.renderLegalConsentFields()):this.renderLegalConsentFields()}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.LegalConsentFields=t}).call(this);(function(){var e,t,n,r,i;t=window.React;e=hubspot.form.mixins.I18nMixin;i=hns("hubspot.form.constants");n=t.createClass({displayName:"ViralityLink",mixins:[e],getTrackingPrefix:function(){return i.knownHubspotDomains.filter(function(e){return window.location.host.indexOf(e)>=0}).length>0?"utm":"hubs"},getViralLink:function(e){var t,n,r;r=this.getTrackingPrefix();t="local"===this.props.env||"qa"===this.props.env?"qa":"";n=this.props.inlineMessage&&this.props.submitted?"forms-branding-thankyou":e?"forms-branding-variation":"forms-branding-control";return"https://app.hubspot"+t+".com/signup/marketing?"+r+"_medium=virality&"+r+"_campaign=hubspot-forms-virality&"+r+"_id="+n+"&"+r+"_source="+(window.location.host||window.parent.location.host)+"&intent=marketingFreeForms&opt_sidebar=forms"},render:function(){return this.props.noBrandingScope?null:this.props.isViralityVariation?t.createElement("div",{className:"hubspot-link__container sproket"},t.createElement("img",{src:"https://js.hsforms.net/sproket.png",className:"hubspot-link__icon"}),t.createElement("a",{href:this.getViralLink(this.props.isViralityVariation),target:"_blank",className:"hubspot-link",dangerouslySetInnerHTML:{__html:this.i18nTranslate("formsNext.virality.version1")}})):t.createElement("div",{className:"hubspot-link__container sproket"},t.createElement("img",{src:"https://js.hsforms.net/sproket.png",className:"hubspot-link__icon"}),t.createElement("span",null,this.i18nTranslate("formsNext.viralLinkTextBeginning")," "),t.createElement("a",{href:this.getViralLink(),target:"_blank",className:"hubspot-link"},t.createElement("span",{className:"hubspot-link-text"},this.i18nTranslate("formsNext.viralLinkTextEnding"))))}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.ViralityLink=n}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f,d,h,m=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};l=window.React;t=hubspot.form.components.FieldGroup;c=hubspot.form.components.inputs.Recaptcha;o=hubspot.form.components.LegalConsentFields;p=hubspot.form.components.ViralityLink;u=hubspot.form.components.inputs.Submit;e=hubspot.form.components.inputs.Context;s=window.Promise;i=window.I18n;h=hns("hubspot.utils");d=hns("hubspot.form.lib.errorReport");a=hns("hubspot.form.perf.PerfMeasurer");r={MISSING_REQUIRED_FIELDS:"MISSING_REQUIRED_FIELDS",BLOCKED_EMAIL:"BLOCKED_EMAIL",OUT_OF_DATE:"OUT_OF_DATE",FORM_NEVER_EXISTED:"FORM_NEVER_EXISTED",MISSING_SCOPE:"MISSING_SCOPE",FORM_TYPE_MISMATCH:"FORM_TYPE_MISMATCH"};n=l.createClass({displayName:"Form",slotsAvailable:0,addShouldSubmitHandler:function(e){return this._shouldSubmitCallbacks.push(e)},runShouldSubmitHandlers:function(e){var t;t=!0;this._shouldSubmitCallbacks.forEach(function(n){return t=t&&n(e)});return t},setSubmitText:function(e){return this.setState({submitText:e})},getMetaDataValue:function(e){return h.getMetaDataValue(this.props.metaData,e)},componentDidMount:function(){var e,t;hubspot.utils.runCustomerCallbackFunction(this,"onBeforeValidationInit",this.props.formId);hubspot.utils.runCustomerCallbackFunction(this,"onFormReady",this.props.formId);this.windowForScroll=this.props.shell?window.parent:window;"function"==typeof(e=this.windowForScroll).addEventListener&&e.addEventListener("scroll",this.scrollHandler);"function"==typeof(t=this.getDOMNode()).addEventListener&&t.addEventListener("focusin",this.focusHandler);this.handleRendered();this.checkFormVisible();this.overrideSubmit();"function"==typeof window.addEventListener&&window.addEventListener("message",this.submissionResponseHandler);this.errorMessageMap={REQUIRED_FIELD:"required",INVALID_EMAIL:"invalidEmail",BLOCKED_EMAIL:"forbiddenEmailDomainGeneric",INVALID_NUMBER:"invalidNumber",FILE_TOO_LARGE:"fileTooLarge",INPUT_TOO_LARGE:"inputTooLarge",INVALID_DATE:"invalidDate",VALUE_NOT_IN_FIELD_DEFINITION:"valueNotInFieldDefintion",NUMBER_OUT_OF_RANGE:"numberOutOfRange"};a.markEnd("render",this.props.correlationId);this.props.shell&&this.monitorDomResize();return this._shouldSubmitCallbacks=[]},monitorDomResize:function(){var e;if(null!=window.ResizeObserver){e=new ResizeObserver(function(e){return function(t){return e.handleRendered(t[0])}}(this));return e.observe(document.getElementsByClassName("hbspt-form")[0])}return setInterval(this.handleRendered,500)},getDefaultProps:function(){return{noBrandingScope:!0}},componentWillMount:function(){var e;e=this.props.env;"local"===e&&(e="qa");this.formsDomain="https://forms.hsforms"+e+".com";this.targetObject={};return this.targetObject.target=this.getSubmissionIframeName()},componentWillUnmount:function(){this.removeInjectedCss();return window.removeEventListener("message",this.submissionResponseHandler)},createSubmissionResponseTimeout:function(){return setTimeout(function(){return d.report(new Error("Timeout waiting for submission response"))},13e3)},getAllFields:function(){var e,t,n,r,i,o,a,s,l;e=[];s=this.state.fieldGroups;for(r=0,o=s.length;o>r;r++){n=s[r];l=n.fields;for(i=0,a=l.length;a>i;i++){t=l[i];e.push(t.name)}}return e},submissionResponseHandler:function(e){var t,n,i,o,a,s,l,c,u,p,f;c="https://share.hsforms"+this.props.env+".com";f=this.props.shell?window.parent:window;t=[this.formsDomain,"https://local.hubspotqa.com"];if((e.origin!==c||document.location.origin===c)&&h.isSubmissionResponseMessage(e,t)){l=e.data;n=null!=l?l.formGuid:void 0;if(n===this.props.formId){o=null!=this.props.formInstanceId&&(null!=l?l.hasOwnProperty("formInstanceId"):void 0)&&(null!=l?l.formInstanceId:void 0)!==this.props.formInstanceId.toString();if(!o){clearTimeout(this.submissionResponseTimeout);u=null!=l?l.accepted:void 0;i=null!=l?l.formSubmissionError:void 0;if(!u){null!=(s=window.grecaptcha)&&s.reset(this.state.widgetId);return i?"RECAPTCHA_VALIDATION_ERROR"!==i||this.props.captchaEnabled?this.isSubmissionNotAllowed(i)?this.setGlobalError("SUBMISSION_NOT_ALLOWED"):this.setGlobalError(i):this.setGlobalError(r.OUT_OF_DATE):this.handleValidation(l.validationResults)}this.handlePostSubmission();if(null!=l?l.redirectUrl:void 0){p=h.getDomainFromUrl(l.redirectUrl)===f.location.hostname?l.redirectUrl:h.createCrossDomainTrackingUrl(l.redirectUrl);return f.location.assign(p)}return(null!=l?l.inlineMessage:void 0)?this.setState({inlineMessage:hubspot.utils.unescapeScriptClosingTag(l.inlineMessage)}):!this.state.inlineMessage&&this.props.isVideo&&null!=(a=f.API)?a.closeCta():void 0}}}},isSubmissionNotAllowed:function(e){return e===r.FORM_NEVER_EXISTED||e===r.MISSING_SCOPE||e===r.FORM_TYPE_MISMATCH},handleValidation:function(e){var t,n,i,o,a,s,l,c;n={};t=this.getAllFields();i=void 0;for(o=0,a=e.length;a>o;o++){c=e[o];s={};if(l=c.fieldName,m.call(t,l)<0){this.setGlobalError(r.OUT_OF_DATE);return}"BLOCKED_EMAIL"===c.formSubmissionValidationType?i=r.BLOCKED_EMAIL:"REQUIRED_FIELD"===c.formSubmissionValidationType&&(i=r.MISSING_REQUIRED_FIELDS);n[c.fieldName]={valid:!1,errors:this.getValidationError(c.formSubmissionValidationType,s)}}this.setState({formValidity:hubspot.utils.extend(this.state.formValidity,n),submitting:!1});return this.setGlobalError(i)},setGlobalError:function(e){return this.setState({errorType:e})},getValidationError:function(e,t){return[hubspot.utils.i18nTranslate(this.props.translations,"formsNext."+this.errorMessageMap[e],t)]},componentDidUpdate:function(e,t){this.handleRendered();h.hasFormValidityChanged(t.formValidity,this.state.formValidity)&&this.handleChange();return!t.submitted&&this.state.submitted?this.scrollToThankYouMessage():void 0},scrollToThankYouMessage:function(){var e,t,n,r;t=document.getElementsByClassName("submitted-message hs-form-"+this.props.formId)[0];if(t&&!hubspot.utils.isInViewport(t)){n=t.getBoundingClientRect();e=n.top+window.pageYOffset;r=e-window.innerHeight/2;return window.scrollTo({top:r,behaviour:"smooth"})}},handleRendered:function(e){var t;if(this.props.shell){t=requestAnimationFrame||setTimeout;return t(function(t){return function(){var n,r;n=e?e.contentRect:document.getElementsByClassName("hbspt-form")[0].getBoundingClientRect();if(n.height!==t.height||n.width!==t.width){t.height=n.height;t.width=n.width;window.private_form_height=t.height;window.private_form_width=t.width;r=document.createEvent("Event");r.initEvent("FORM_RESIZE",!0,!0);window.dispatchEvent(r);return window.parent.hbspt.forms.resize[t.props.shellId](t.height,t.width)}}}(this))}},focusHandler:function(e){var t;if(!this.formInteractionEventSent&&!this.props.isFormDemo){t=this.props.shell?window.parent:window;t._hsq.push(["trackFormInteraction",this.props.formId,this.props.correlationId,{formType:this.props.analyticsFormTypeNumber,formVariantId:this.props.variantId}]);return this.formInteractionEventSent=!0}},scrollHandler:function(e){return this.checkFormVisible(e)},checkFormVisible:function(e){var t;if(!this.formVisibleEventSent&&!this.props.isFormDemo&&this.isFormVisible()){t=this.props.shell?window.parent:window;t._hsq.push(["trackFormVisible",this.props.formId,this.props.correlationId,{formType:this.props.analyticsFormTypeNumber,formVariantId:this.props.variantId}]);return this.formVisibleEventSent=!0}},isFormVisible:function(){var e;null==this.domNodeForScrollHandler&&(this.domNodeForScrollHandler=this.props.shell?window.frameElement:this.getDOMNode());e=Math.max(this.windowForScroll.innerHeight||0,this.windowForScroll.document.documentElement.clientHeight);return this.domNodeForScrollHandler.getBoundingClientRect().top0},overrideSubmit:function(){var e,t,n;e=l.findDOMNode(this.refs.hsForm);t=(null!=e?e.hasOwnProperty("submit"):void 0)?e.submit:void 0;n=this;return e?e.submit=function(){return n.actuallySubmitForm(this,t)}:void 0},getInitialState:function(){var e;this.registeredValidators=[];this.hiddenSmartFields={};e=this.props.originalEmbedContext;return{inlineMessage:this.props.inlineMessage,formValidity:{},boolCheckBoxFields:[],dateFields:[],fieldGroups:this.getFieldGroups(),showInlineMessageInitially:this.isPostSubmitRedirect(),submitting:!1,widgetId:"",errorType:void 0,submitText:this.props.submitText}},isPostSubmitRedirect:function(){return hubspot.utils.isPostSubmitRedirect(this.props.formId)},childContextTypes:{formInstance:l.PropTypes.object},registerField:function(e,t){var n;return null!=(n=this.props.api)?n._registerField(e,t):void 0},registerInput:function(e,t){var n;return null!=(n=this.props.api)?n._registerInput(e,t):void 0},getChildContext:function(){return{formInstance:{register:this.registerField,registerInput:this.registerInput}}},registerBoolCheckBoxField:function(e){return this.setState(function(t){var n;n=t.boolCheckBoxFields.slice();n.push(e);return{boolCheckBoxFields:n}})},deregisterBoolCheckBoxField:function(e){return this.props.isFormDemo?void 0:this.setState(function(t){return{boolCheckBoxFields:hubspot.utils.filter(t.boolCheckBoxFields,function(t){return t!==e})}})},registerDateField:function(e){return this.setState(function(t){var n;n=t.dateFields.slice();n.push(e);return{dateFields:n}})},registerValidator:function(e){return e?this.registeredValidators.push(e):void 0},deregisterValidator:function(e){var t;if(e){t=this.registeredValidators.indexOf(e);if(t>-1)return this.registeredValidators.splice(t,1)}},setFieldValidity:function(e,t,n,r){return this.setState(function(i){var o;o=h.extend({},i.formValidity);o[e]={valid:t,errors:(null!=n?n.length:void 0)?n:[],errorTypes:(null!=r?r.length:void 0)?r:[]};return{formValidity:o}})},isNotExistingSmartProperty:function(e){var t,n,r,i,o,a,s;if(h.isSmartGroup(e)){t=!1;a=e.fields;for(i=0,o=a.length;o>i;i++){n=a[i];r=n.name.toLowerCase();(null!=(s=this.props.contactProperties)?s[r]:void 0)?this.hiddenSmartFields[r]=this.props.contactProperties[r]:t=!0}return t}return!0},shouldRenderGroup:function(e){var t;if(this.props.deactivateSmartForm&&!(null!=(t=this.props.urlParams)?t.email:void 0)){if(e["default"])return!0}else if(e["default"]){if(this.isNotExistingSmartProperty(e))return!0;this.slotsAvailable+=1}else if(this.isNotExistingSmartProperty(e)&&this.slotsAvailable>0){this.slotsAvailable-=1;return!0}return!1},getFieldGroups:function(){var e;e=[];hubspot.utils.map(this.props.fieldGroups,function(t){return function(n){return t.shouldRenderGroup(n)?e.push(n):void 0}}(this));return e},removeInjectedCss:function(){var e;e=document.getElementById("hs-form-style"+this.props.uniqueIdForClass);return null!=e&&"function"==typeof e.remove?e.remove():void 0},renderFieldGroups:function(){var e;e=hubspot.utils.checkIfMultiColumn(this.props.fieldGroups);return hubspot.utils.map(this.state.fieldGroups,function(n){return function(r,i){var o;return l.createElement(t,{key:i,env:n.props.env,portalId:n.props.portalId,fields:r.fields,uniqueId:n.props.uniqueId,cms:n.props.cms,multiColumn:e,ignoreCurrentValues:n.props.ignoreCurrentValues,contactProperties:n.props.contactProperties,countryCode:n.props.countryCode,isSmartGroup:h.isSmartGroup(r),hiddenSmartFields:n.hiddenSmartFields,formValidity:n.state.formValidity,setFieldValidity:n.setFieldValidity,registerValidator:n.registerValidator,deregisterValidator:n.deregisterValidator,registerBoolCheckBoxField:n.registerBoolCheckBoxField,deregisterBoolCheckBoxField:n.deregisterBoolCheckBoxField,registerDateField:n.registerDateField,richText:r.richText,urlParams:n.props.urlParams,errorClass:n.props.errorClass,groupErrors:n.props.groupErrors,errorMessageClass:n.props.errorMessageClass,locale:n.props.locale,translations:null!=(o=n.props.translations)?o[n.props.locale]:void 0,blockedDomains:n.props.blockedDomains,apiValidations:n.state.apiValidations,formsBaseUrl:n.props.formsBaseUrl})}}(this))},renderRecaptcha:function(){var e,t,n;n=this.props.shell?window.parent:window;return this.props.captchaEnabled&&null!=(null!=(e=n.grecaptcha)?e.render:void 0)?l.createElement(c,{name:"recaptcha",errorClass:this.props.errorClass,groupErrors:this.props.groupErrors,errorMessageClass:this.props.errorMessageClass,captchaEnabled:this.props.captchaEnabled,env:this.props.env,locale:this.props.locale,translations:null!=(t=this.props.translations)?t[this.props.locale]:void 0,portalId:this.props.portalId,formId:this.props.formId,onSuccessCallback:this.submitForm,sendRecaptchaWidgetId:this.setRecaptchaWidgetId,shell:this.props.shell,shellId:this.props.shellId}):void 0},renderLegalConsentFields:function(){var e,t,n,r,i;e=(null!=(n=this.props.metaData.filter(function(e){return"legalConsentOptions"===e.name}))&&null!=(r=n[0])?r.value:void 0)||"{}";t=hubspot.utils.checkIfMultiColumn(this.props.fieldGroups);return l.createElement(o,{cms:this.props.cms,deregisterBoolCheckBoxField:this.deregisterBoolCheckBoxField,deregisterValidator:this.deregisterValidator,env:this.props.env,errorClass:this.props.errorClass,errorMessageClass:this.props.errorMessageClass,formValidity:this.state.formValidity,groupErrors:this.props.groupErrors,legalConsentRecord:JSON.parse(e),locale:this.props.locale,portalId:this.props.portalId,registerBoolCheckBoxField:this.registerBoolCheckBoxField,registerValidator:this.registerValidator,setFieldValidity:this.setFieldValidity,uniqueId:this.props.uniqueId,urlParams:this.props.urlParams,multiColumn:t,translations:null!=(i=this.props.translations)?i[this.props.locale]:void 0})},setRecaptchaWidgetId:function(e){return this.setState({widgetId:e})},validateForm:function(){var e,t,n,r,i;i=[];n=this.registeredValidators;for(e=0,t=n.length;t>e;e++){r=n[e];i.push(r())}return s.all(i)},getDomFields:function(){var e,t;e=l.findDOMNode(this).querySelectorAll("div.input input, div.input select, div.input textarea");t=hubspot.utils.map(e,function(e){var t;return"radio"===(t=e.type)||"checkbox"===t?e.name+":"+e.value:e.name});return t},checkIfAllRequired:function(){var e,t,n,r,i;for(t in this.state.formValidity)if(this.state.formValidity[t].valid===!1){i=this.state.formValidity[t].errorTypes;for(n=0,r=i.length;r>n;n++){e=i[n];if("REQUIRED_FIELD"===e)return!1}}return!0},checkIfEmailValid:function(){var e,t,n,r;if(null!=this.state.formValidity.email){r=this.state.formValidity.email.errorTypes;for(t=0,n=r.length;n>t;t++){e=r[t];if("INVALID_EMAIL"===e)return!1}}return!0},handleChange:function(){return this.checkIfAllRequired()&&this.state.errorType===r.MISSING_REQUIRED_FIELDS?this.setState({errorType:void 0}):this.checkIfEmailValid()&&this.state.errorType===r.BLOCKED_EMAIL?this.setState({errorType:void 0}):void 0},handleSubmit:function(e){var t;e.preventDefault();if(/https:\/\/preview\.hs-sites\.com\/.*preview=true/i.test(null!=(t=document.location)?t.href:void 0))console.info("Not submitting form from CMS preview page");else{if(!this.state.submitting){this.setState({submitting:!0});return this.validateForm().done(function(e){return function(t){var n,r,i,o;r=!0;o={};hubspot.utils.map(t,function(e){var t,n;e.valid||(r=!1);return o[e.name]={valid:e.valid,errors:(null!=(t=e.messages)?t.length:void 0)?e.messages:[],errorTypes:(null!=(n=e.errorTypes)?n.length:void 0)?e.errorTypes:[]}});e.setState({formValidity:o,domFields:e.getDomFields(),submitting:r});e.maybeSetGlobalError(t);n=e.runShouldSubmitHandlers(t);r=n&&r;if(r){if(e.props.captchaEnabled){e.props.shell?window.parent.hbspt.forms.executeRecaptcha[e.props.shellId]():null!=(i=window.grecaptcha)&&i.execute(e.state.widgetId);return e.setState({submitting:!1})}e.submitForm();return a.markStart("submit",e.props.correlationId)}e.setState({submitting:!1});return hubspot.utils.runCustomerCallbackFunction(e,"onFormFailedValidation",e.props.formId,t)}}(this))}console.warn("Not submitting form because we are already submitting")}},handlePostSubmission:function(){this.setState({submitted:!0});hubspot.utils.runCustomerCallbackFunction(this,"onFormSubmitted",this.props.formId);return a.markEnd("submit",this.props.correlationId)},maybeSetGlobalError:function(e){var t,n,i,o,a,s,l;l=[];for(n=0,i=e.length;i>n;n++){t=e[n];t.valid===!1?(null!=(o=t.errorTypes)?o.indexOf("REQUIRED_FIELD"):void 0)>-1?l.push(this.setGlobalError(r.MISSING_REQUIRED_FIELDS)):(null!=(a=t.errorTypes)?a.indexOf("INVALID_EMAIL"):void 0)>-1||(null!=(s=t.errorTypes)?s.indexOf("BLOCKED_DOMAIN"):void 0)>-1?l.push(this.setGlobalError(r.BLOCKED_EMAIL)):l.push(void 0):l.push(void 0)}return l},getFormEl:function(){var e,t;e=l.findDOMNode(this);t="form"===e.tagName.toLowerCase()?e:e.querySelector("form");return t},submitForm:function(){var e,t,n,r;t=this.props.shell?window.parent.jQuery:window.jQuery;this.setState({submitting:!0,extraMetaData:this.getExtraMetaDataBeforeSubmit()});if(document.createEvent){n=document.createEvent("Event");n.initEvent("hsvalidatedsubmit",!0,!0);l.findDOMNode(this).dispatchEvent(n)}else if(null!=t){e=t(l.findDOMNode(this));e.trigger("hsvalidatedsubmit")}r=hubspot.utils.retriveSubmissionFieldsFromForm(this.getFormEl(),this.props.fieldGroups);hubspot.utils.runCustomerCallbackFunction(this,"onFormSubmit",this.props.formId,r);this.submissionResponseTimeout=this.createSubmissionResponseTimeout();return l.findDOMNode(this.refs.hsForm).submit()},actuallySubmitForm:function(e,t){var n,r;if(!this.state.submitting){n=e.hs_context.value;r=JSON.parse(n);r.submittedFromExternalJs=!0;e.hs_context.value=JSON.stringify(r)}return null!=t?t.call(e):HTMLFormElement.prototype.submit.call(e)},getFormClass:function(e){var t;t=this.props.cssClass;-1===t.toLowerCase().indexOf("hs-form")&&(t+=" hs-form");this.props.cms&&-1===t.toLowerCase().indexOf("contactformitems")&&(t+=" ContactFormItems");this.props.isVideo&&(t+=" hs-video-form");this.props.hasCustomStyle&&(t+=" hs-custom-style");return t+" hs-form-private hsForm_"+this.props.formId+" hs-form-"+this.props.formId+" hs-form-"+e},getFormAction:function(){var e,t;t="submissions/v3/public/submit/formsnext/multipart/"+this.props.portalId+"/"+this.props.formId;e="local"===hubspot.utils.getLocalStorage("SUBMISSIONS_ENV")?"https://local.hubspotqa.com":this.formsDomain;return e+"/"+t},getFormEncType:function(){var e;e="multipart/form-data";return e},getExtraMetaDataBeforeSubmit:function(){var e,t;t="function"==typeof(e=this.props).getExtraMetaDataBeforeSubmit?e.getExtraMetaDataBeforeSubmit():void 0;return hubspot.utils.isObject(t)?t:{}},generateThankYouMessageFragment:function(){var e,t,n;if(!this.thankYouMessageRendered){e=document.querySelector(this.props.formTarget);e.className="submitted-message hs-form-"+this.props.formId+" hs-form-"+this.props.uniqueIdForClass;t=document.createRange();if("createContextualFragment"in t){n=t.createContextualFragment(this.state.inlineMessage);e.appendChild(n)}else e.innerHTML=this.state.inlineMessage}this.thankYouMessageRendered=!0;return null},renderHubspotLink:function(){return l.createElement(p,{inlineMessage:this.state.inlineMessage,submitted:this.state.submitted,env:this.props.env,portalId:this.props.portalId,formId:this.props.formId,noBrandingScope:this.props.noBrandingScope,isViralityVariation:this.props.isViralityVariation,locale:this.props.locale})},maybeRenderCookieReset:function(){var e,t,n,r;t=h.getMetaDataValue(this.props.metaData,"allowCookieReset");e=!h.isEmpty(this.props.contactProperties);return t&&e?l.createElement("div",{className:"cookie-reset-container"},hubspot.utils.i18nTranslate(null!=(n=this.props.translations)?n[this.props.locale]:void 0,"formsNext.notYou",{locale:this.props.locale})+" ",l.createElement("a",{href:"javascript:void(0);",onClick:this.props.resetCookieAndReRenderForm},hubspot.utils.i18nTranslate(null!=(r=this.props.translations)?r[this.props.locale]:void 0,"formsNext.resetTheForm",{locale:this.props.locale}))):void 0},renderForm:function(){var t;return l.createElement("form",l.__spread({ref:"hsForm"},{noValidate:!0},{acceptCharset:"UTF-8"},{action:this.getFormAction()},{encType:this.getFormEncType()},{id:"hsForm_"+this.props.uniqueId},{method:"POST"},{className:this.getFormClass(this.props.uniqueIdForClass)},{onSubmit:this.handleSubmit},{"data-form-id":this.props.formId},{"data-portal-id":this.props.portalId},this.targetObject),this.maybeRenderCookieReset(),this.renderFieldGroups(),this.renderLegalConsentFields(),this.renderRecaptcha(),this.renderSubmissionError(),l.createElement(u,{submitButtonClass:this.props.submitButtonClass,submitText:this.state.submitText,cms:this.props.cms,translations:null!=(t=this.props.translations)?t[this.props.locale]:void 0,portalId:this.props.portalId,formId:this.props.formId,isVideo:this.props.isVideo}),this.renderHubspotLink(),l.createElement(e,{originalEmbedContext:this.props.originalEmbedContext,formName:this.props.name,timestamp:this.props.timestamp,metaData:this.props.metaData,hutk:this.props.hutk,pageId:this.props.pageId,path:this.props.path,referrer:this.props.referrer,referrerPath:this.props.referrerPath,pageName:this.props.pageName,pageUrl:this.getPageUrlForContext(),pageTitle:this.props.pageTitle,redirectUrl:this.props.redirectUrl,variantId:this.props.variantId,formInstanceId:this.props.formInstanceId,boolCheckBoxFields:this.state.boolCheckBoxFields,dateFields:this.state.dateFields,hiddenSmartFields:this.hiddenSmartFields,urlParams:this.props.urlParams,notificationRecipients:this.props.notificationRecipients,formValidity:this.state.formValidity,domFields:this.state.domFields,rawInlineMessage:this.props.rawInlineMessage,hsFormKey:this.props.hsFormKey,formTarget:this.props.formTarget,isVideo:this.props.isVideo,followUpEmailId:this.props.followUpEmailId,followUpEmailCampaignId:this.props.followUpEmailCampaignId,followUpId:this.props.followUpId,contentType:this.props.contentType,sfdcCampaignId:this.props.sfdcCampaignId,goToWebinarWebinarKey:this.props.goToWebinarWebinarKey,abTestId:this.props.abTestId,correlationId:this.props.correlationId,realUserMonitoring:this.props.realUserMonitoring,isFallback:h.isFallback(),isCookieReset:this.props.isCookieReset,extraMetaData:this.state.extraMetaData,shell:this.props.shell}),this.renderIframe())},getSubmissionIframeName:function(){return"target_iframe_"+this.props.uniqueId},getPageUrlForContext:function(){return this.props.isVideo?this.props.canonicalUrl:this.props.pageUrl},renderIframe:function(){return l.createElement("iframe",{name:this.getSubmissionIframeName(),style:{display:"none"}})},renderSubmissionError:function(){var e;return this.state.errorType?l.createElement("div",{className:"hs_error_rollup"},l.createElement("ul",{className:"no-list "+this.props.errorMessageClass,style:{display:"block"}},l.createElement("li",null,l.createElement("label",{className:"hs-main-font-element"},hubspot.utils.i18nTranslate(null!=(e=this.props.translations)?e[this.props.locale]:void 0,"formsNext.submissionErrors."+this.state.errorType,{locale:this.props.locale}))))):void 0},render:function(){return this.state.inlineMessage&&!this.props.isCos&&(this.state.submitted||this.state.showInlineMessageInitially)?this.props.noBrandingScope||!h.isShareableLink()?l.createElement("div",{className:"submitted-message hs-main-font-element hs-form-"+this.props.formId+" hs-form-"+this.props.uniqueIdForClass,dangerouslySetInnerHTML:{__html:this.state.inlineMessage}}):l.createElement("div",{className:"submitted-message hs-main-font-element free-message"},l.createElement("div",{className:"hs-form-"+this.props.formId+" hs-form-"+this.props.uniqueIdForClass,dangerouslySetInnerHTML:{__html:this.state.inlineMessage}}),this.renderHubspotLink()):this.state.inlineMessage&&this.props.isCos&&(this.state.submitted||this.state.showInlineMessageInitially)?this.generateThankYouMessageFragment():document.querySelector("form "+this.props.formTarget)?l.createElement("div",{className:"hs-nested-form-fix"},l.createElement("span",{dangerouslySetInnerHTML:{__html:''}}),this.renderForm()):this.renderForm()}});null==hubspot.form&&(hubspot.form={});null==(f=hubspot.form).components&&(f.components={});hubspot.form.components.Form=n}).call(this);(function(){var e,t,n,r,i,o;n=window.React;t=window.I18n;o=hns("hubspot.utils");i=hns("hubspot.locale_utils");e=n.createClass({displayName:"ErrorState",toQueryString:function(e){var t,n,r;n=[];for(t in e){r=e[t];n.push(encodeURIComponent(t)+"="+encodeURIComponent(r))}return n.join("&")},getFallbackUrl:function(){var e;e=this.toQueryString(o.extend(hubspot.utils.getQueryStringParams(this.props.context.shell),{isFallback:!0}));return"https://share.hsforms"+this.props.env+".com/"+this.props.context.portalId+"/"+this.props.context.formId+"?"+e},renderErrorStateWithFallback:function(e){return n.createElement("p",{id:"error-state-fallback"},n.createElement("span",null,t.translate("formsNext.fallbackDescription",{locale:e}))," ",n.createElement("a",{href:this.getFallbackUrl()},t.translate("formsNext.fallbackCta",{locale:e})))},renderGenericErrorState:function(e){return n.createElement("p",{id:"error-state-generic"},n.createElement("span",null,t.translate("formsNext.fallbackGenericDescription",{locale:e})))},render:function(){var e;e=i.getBestSupportedLocale(window.navigator.language);return o.isFallback()?this.renderGenericErrorState(e):this.renderErrorStateWithFallback()}});null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).components&&(r.components={});hubspot.form.components.ErrorState=e}).call(this);(function(){var e,t,n;n=null;t={setUp:function(e){return n=new OutpostErrorReporter("formsnextembed",{env:hubspot.utils.isQA()?"QA":"PROD",disabled:!1,tags:{formGuid:e.formId,portalId:e.portalId,isCOS:hubspot.utils.isCos(e)}})},get:function(){return n}};null==hubspot.form&&(hubspot.form={});null==(e=hubspot.form).formErrorReporter&&(e.formErrorReporter=t)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u;t=window.React;e=hns("hubspot.form.components.Form");u=hns("hubspot.utils");n=9;c={};s=function(e){var t,n;n=null!=e.shell?window.parent:window;return e.pageId?e.pageId:(null!=(t=n.hsVars)?t.page_id:void 0)?n.hsVars.page_id:void 0};a=function(e){var t,n,r,i;if(null!=e.metaData){i=e.metaData;for(t=0,n=i.length;n>t;t++){r=i[t];if("lang"===r.name)return hubspot.utils.getlocaleCode(r.value)}}return!1};l=function(){var e,t,n;e=[/\:\/\/.*\/FormsNext\/static\/coffee\/forms\.js.*/,/\:\/\/js\.hsforms(qa)?\.net\/forms\//];n=(null!=(t=u.currentScript)?t.src:void 0)||"";return 0===e.filter(function(e){return e.test(n)}).length};i=function(e,n,r,i,a,s,l,c,p,f,d,h,m,g,v){var x;e=u.extend({},e,{hutk:void 0});x=document.querySelector(e.target);t.unmountComponentAtNode(x);return o.renderForm(e,n,{},i,a,s,l,c,p,f,d,h,m,g,!0)};o={rerenderForms:function(e){var t,n,r,i,o,a,s;s=null!=e.shell?window.parent:window;if(null!=s&&null!=(i=s.HSFR)?i.FORM_COMPONENTS.length:void 0){o=s.HSFR.FORM_COMPONENTS;a=[];for(n=0,r=o.length;r>n;n++){t=o[n];a.push(t.forceUpdate())}return a}},renderForm:function(r,o,u,p,f,d,h,m,g,v,x,b,y,E,C){var S,I,T,k,w,_,D,N,M,R,O,F,A,L,P,B,V,j,U,z,q,H,G,K,W,Y,Q,J,X,Z,$,ee,te,ne,re;c[r.target]=i.bind(this,r,o,u,p,f,d,h,m,g,v,x,b,y,E,C);J=null!=(B=window.performance)&&"function"==typeof B.now?B.now():void 0;_=hubspot.utils.isQA()?"qa":"";M=r.hutk;ee=hubspot.utils.getUniqueFormId(r.formId,r.formInstanceId);te=hubspot.utils.getUniqueFormIdForClass(r.formId);O=document.querySelector(r.target)?null!==document.querySelector(r.target).querySelector(".performable-legacy"):!1; -S=r.canonicalUrl;L=r.path;Y=r.referrerPath;T=r.contentType;A=s(r);ne=hubspot.utils.getQueryStringParams(r.shell);$=hubspot.utils.shouldRenderFormRawHtml(r,o)&&(null!=d?d.rawHtmlAccess:void 0);R=hubspot.utils.isCos(r);k=r.css;Q=r.cssRequired;N=hubspot.utils.parseObjWithDefault(h,{});D=hubspot.utils.parseObjWithDefault(o.style,{});(null!=d?d.customStyleAccess:void 0)||(D=hubspot.utils.stripCustomStyleProps(D));try{w=hubspot.utils.mergeStyles(N,D)}catch(ie){w={}}R&&(w={});if($){k="";m="";w={}}hubspot.utils.injectCss(k,Q,m,te,w);F=hubspot.utils.extend({},r);null!=F.inlineMessage&&(F.inlineMessage=!0);if(r.inlineMessage&&r.redirectUrl){console.error("Only one of inlineMessage or redirectUrl should be specified in hbspt.forms.create. Using inlineMessage.");delete r.inlineMessage}r.inlineMessage||r.redirectUrl||(r.redirectUrl=o.redirectUrl);r.redirectUrl||r.inlineMessage||(r.inlineMessage=o.inlineMessage);if(J){X=(null!=(V=window.performance)&&"function"==typeof V.now?V.now():void 0)-J;Z=null!=(j=window.performance)&&"function"==typeof j.now?j.now():void 0}P={rumScriptExecuteTime:v,rumServiceResponseTime:x,rumFormRenderTime:X,rumTotalRenderTime:Z,rumTotalRequestTime:b};I=t.render(t.createElement(e,{env:r.env||_,portalId:r.portalId||null,formId:r.formId||null,hutk:M||null,uniqueId:ee,uniqueIdForClass:te,redirectUrl:r.redirectUrl,variantId:o.variantId,formInstanceId:r.formInstanceId,isPerfForm:O,fieldGroups:o.formFieldGroups||[],submitText:o.submitText||"Submit",cms:o.cms||!1,name:o.name,ignoreCurrentValues:r.ignoreCurrentValues||!1,contactProperties:u||{},countryCode:p,canonicalUrl:S?S:void 0,path:L?L:void 0,referrer:r.referrer,referrerPath:Y?Y:void 0,type:r.type,contentType:T?T:void 0,pageId:A?A:void 0,isCos:!0,means:!0,is:!0,s:!0,a:!0,COS:!0,form:!0,widget:!0,isCos:R,pageName:r.pageName,pageUrl:r.pageUrl,pageTitle:r.pageTitle,originalEmbedContext:F,timestamp:g,metaData:o.metaData,deactivateSmartForm:r.deactivateSmartForm||!1,urlParams:ne,onFormReady:r.onFormReady,onFormSubmit:r.onFormSubmit,onFormSubmitted:r.onFormSubmitted,onBeforeValidationInit:r.onBeforeValidationInit,getExtraMetaDataBeforeSubmit:r.getExtraMetaDataBeforeSubmit,notificationRecipients:r.notificationRecipients,formTarget:r.target,api:y,newMultipartSubmissionUngated:(null!=f?f.newMultipartSubmissionUngated:void 0)||!1,noBrandingScope:null!=d?d.noBranding:void 0,isViralityVariation:null!=f?f.viralityVariation:void 0,hasCustomStyle:null!=(null!=w?w.backgroundWidth:void 0)&&!$,cssClass:r.cssClass||(null!=(U=r.formData)?U.cssClass:void 0)||o.cssClass||"",submitButtonClass:r.submitButtonClass,errorClass:r.errorClass||(null!=(z=r.validationOptions)?z.errorClass:void 0)||"invalid error",errorMessageClass:r.errorMessageClass||(null!=(q=r.validationOptions)?q.messageClass:void 0)||"hs-error-msgs inputs-list",groupErrors:r.groupErrors||(null!=(H=r.validationOptions)?H.grouped:void 0)||!0,locale:r.locale||hubspot.utils.getlocaleCode(null!=(G=r.validationOptions)?G.lang:void 0)||a(o)||"en",blockedDomains:r.blockedDomains||(null!=(K=r.validationOptions)?K.forbiddenDomains:void 0)||[],inlineMessage:r.inlineMessage,rawInlineMessage:r.rawInlineMessage,hsFormKey:r.hsFormKey,translations:r.translations||null,followUpEmailId:r.followUpEmailId,followUpEmailCampaignId:r.followUpEmailCampaignId,followUpId:r.followUpId,sfdcCampaignId:r.sfdcCampaignId,goToWebinarWebinarKey:r.goToWebinarWebinarKey,abTestId:r.abTestId,captchaEnabled:r.captchaEnabled||o.captchaEnabled,correlationId:E,realUserMonitoring:P,isFormDemo:Boolean(r.hsFormDemo),isVideo:o.formTypeNumber===n,shell:r.shell,shellId:r.shellId,target:r.target,isCookieReset:C||!1,analyticsFormTypeNumber:o.formTypeNumber,formsBaseUrl:r.formsBaseUrl,isCustomerHostedFormsEmbedScript:l(),resetCookieAndReRenderForm:function(){var e;return"function"==typeof c[e=r.target]?c[e]():void 0}}),document.querySelector(r.target),null!=y?y._triggerReady:void 0);re=r.shell?window.parent:window;null!=re&&null!=(W=re.HSFR)&&W.FORM_COMPONENTS.push(I);return I}};null==hubspot.form&&(hubspot.form={});null==(r=hubspot.form).formRenderer&&(r.formRenderer=o)}).call(this);(function(){var e,t,n,r,i,o;o=hns("hubspot.utils");r=hns("hubspot.form.lib.errorReport");e=hns("hubspot.form.formRenderer");t=window.Promise;i={getEmail:function(e){var t;t=o.getQueryStringParams(e.shell);return null!=(null!=t?t.email:void 0)?email:void 0},getUtk:function(){var e;return e=o.getCookie("hubspotutk")},fetchRecaptcha:function(t,n){var r,i,o;o=window;if(!o.HSFR.RECAPTCHA_REQUESTED){o.HSFR.RECAPTCHA_REQUESTED=!0;i=document.createElement("script");document.querySelector("head").appendChild(i);o.hsRecaptchaLoadCallback=function(r){return function(){clearInterval(o.RECAPTCHA_INTERVAL);e.rerenderForms(t);return null!=n?n():void 0}}(this);i.src="https://www.google.com/recaptcha/api.js?onload=hsRecaptchaLoadCallback&render=explicit&isolated=true";return o.RECAPTCHA_INTERVAL=setInterval(function(){var r;if(null!=(null!=(r=o.grecaptcha)?r.render:void 0)){clearInterval(o.RECAPTCHA_INTERVAL);e.rerenderForms(t);if(null!=n)return n()}},100)}return null!=n?r=setInterval(function(){var e;if(null!=(null!=(e=window.grecaptcha)?e.render:void 0)){clearInterval(r);return n()}},100):void 0},fetchAnalytics:function(e,n,i,o){var a;a=e?window.parent:window;return new t(function(e){return a._hsq.push(function(t){var s,l,c;s={};try{null==t.utk||n||(s.hutk=(null!=(c=t.utk)?c.visitor:void 0)||void 0);null==t.canonicalUrl||i||(s.canonicalUrl=t.canonicalUrl);null==t.contentType||o||(s.contentType=t.contentType);null!=t.pageId&&(s.pageId=t.pageId);null!=t.path&&(s.path=t.path);null!=t.referrerPath&&(s.referrerPath=t.referrerPath);return e(s)}catch(u){l=u;r.report(l,{cookies:a.document.cookie,type:"analytics callback"});return e()}})})},fetchData:function(e,t){var n,i,a,s,l;i=o.isQA()?"qa":"";l=o.getUniqueFormId(e.formId,e.formInstanceId);s=null!=(a=window.performance)&&"function"==typeof a.now?a.now():void 0;n=new hubspot.EmbedClient(e.env||i,e.portalId,e.formId,t,e.formsBaseUrl);return n.fetch().then(function(t){return function(n,i){var a,l,c,u,p,f,d,h,m,g,v,x,b,y;if(o.isInteger(n)){404===n?console.error("Couldn't find HubSpot form data. If this is an old form not being used, please consider removing the script"):402===n?console.error("Your HubSpot account is expired or doesn't have access to forms"):400===n?console.error("HubSpot data could not be loaded. Please ensure the form is embedable and the form guid is correct"):500>n?console.error("Hubspot data could not be loaded"):r.report(new Error("Couldn't fetch embed client data because of server error"));o.runCustomerCallbackFunction(null,"onFormDefinitionFetchError",e.formId,i)}else try{g=null!=(h=window.performance)&&"function"==typeof h.now?h.now():void 0;s&&(v=(null!=(m=window.performance)&&"function"==typeof m.now?m.now():void 0)-s);p=n.form;a=e.previewMode?e.properties:o.extend(n.properties,e.properties,o.getCachedCompletedFields());a=hubspot.utils.isCOSPreview()&&window.forms_preview_contact?window.forms_preview_contact:a;f=n.gates;x=n.scopes;y=n.time;d=n.globalStyle;b=n.themeCss;l=n.countryCode;if(p.cms){u=document.querySelector(e.target);u.classList?u.classList.add("Normal","ContactFormWrapper"):u.className+=" Normal ContactFormWrapper"}o.runCustomerCallbackFunction(null,"onBeforeFormInit",e.formId);null!=e.onBeforeFormInit&&e.onBeforeFormInit(e);p.captchaEnabled&&!e.shell&&t.fetchRecaptcha(e);return{formData:p,contactProperties:a,gates:f,scopes:x,globalStyle:d,themeCss:b,time:y,rumServiceResponseTime:g,rumTotalRequestTime:v,countryCode:l}}catch(E){c=E;o.runCustomerCallbackFunction(null,"onFormDefinitionFetchError",e.formId);return r.report(c,{cookies:document.cookie,type:"fetch callback"})}}}(this))}};null==hubspot.form&&(hubspot.form={});null==(n=hubspot.form).formFetcher&&(n.formFetcher=i)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f,d,h,m,g;i=window.React;e=hns("hubspot.form.components.Form");t=hns("hubspot.form.formFetcher");g=hns("hubspot.utils");n="6Lc2_RsUAAAAAAYBSd4rxsgeQz7whuL9COCsHeET";r="6LfoMB8UAAAAAAxuC2YUhdgQvIKqJLk7qjX9yvzE";window.hbspt.forms.shells=window.hbspt.forms.shells||0;window.hbspt.forms.resize=window.hbspt.forms.resize||{};window.hbspt.forms.executeRecaptcha=window.hbspt.forms.executeRecaptcha||{};a=function(e){delete e.css;return delete e.cssClass};u=function(e,t,n){if(t&&n){e.setAttribute("height",t);e.setAttribute("width",n);e.style.height=t+"px";return e.style.width=n+"px"}};m=function(e){e.style.position="static";e.style.border="none";e.style.display="block";e.style.overflow="hidden";return e.style.width="100%"};s=function(e,t){var n,r,i,o;if(e.target){i=document.querySelector(e.target);if(!i){console.error("No target with selector "+e.target+" found to render HubSpot form, please make sure there's an existing DOM element with a matching selector");return!1}r=i}else{i=document.createElement("div");i.className="hs-form";o="hs-form-"+e.shellId;i.setAttribute("id",o);g.currentScript.insertAdjacentHTML("afterend",i.outerHTML);r=document.getElementById(""+o)}n=document.createElement("iframe");n.id="hs-form-iframe-"+e.shellId;n.className="hs-form-iframe";n.scrolling="no";m(n);u(n,0,0);window.hbspt.forms.resize[e.shellId]=function(e,t){return u(n,e,t)};n.onload=function(){return f(n,e,t)};r.appendChild(n);return n};l=function(e,t){var n;n=document.createElement("div");n.id="hbspt-forms-recaptchaTarget-"+t.shellId;return e.parentNode.insertBefore(n,e)};f=function(e,t,n){p(e);h(e);return d(e,t,n)};p=function(e){var t,n;n=e.contentWindow.document;t=n.createElement("base");t.href=document.location.href;t.target="_parent";return n.head.appendChild(t)};h=function(e){var t,n;t=e.contentWindow.document;n=t.createElement("style");n.innerText=".hs-form * { box-sizing: border-box; } body { margin: 0 }";return t.head.appendChild(n)};d=function(e,t,n){var r,i,o,a;i=e.contentWindow;r=i.document;a=g.currentScript.src;"local"===t.env&&(a=document.location.origin+"/FormsNext/static-3.465/bundles/project_debug_legacy.js");o=r.createElement("script");o.src=a;o.setAttribute("data-hs-shell",!0);t.shell=!0;t.pageUrl=t.pageUrl||document.location.href;t.pageTitle=t.pageTitle||document.title;t.referrer=t.referrer||document.referrer;t.target=void 0;t.privateInternalContext=n;o.onload=function(){return e.contentWindow.hbspt.forms.create(t)};return r.body.appendChild(o)};c={renderRecaptcha:function(e,i){var o;o=null;t.fetchRecaptcha(e,function(t){return function(){var t,a,s,l;s=document.createElement("div");l="hs-outer-captcha-target-"+e.shellId;s.setAttribute("id",l);s.setAttribute("style","display:none;width:0;height:0;");i.insertAdjacentHTML("afterend",s.outerHTML);t={badge:"inline",callback:function(e){return i.contentWindow.setRecaptchaToken(e)},"expired-callback":function(){return i.contentWindow.setRecaptchaToken("")},sitekey:"qa"===e.env?r:n,size:"invisible"};o=null!=(a=window.grecaptcha)?a.render(document.getElementById(l),t,!0):void 0;return window.hbspt.forms.executeRecaptcha[e.shellId]=function(){return window.grecaptcha.execute(o)}}}(this));return l(i,e)},renderShell:function(e,t){var n;a(e);e.shellId=window.hbspt.forms.shells++;n=s(e,t);return n&&t.formData.captchaEnabled?this.renderRecaptcha(e,n):void 0}};null==hubspot.form&&(hubspot.form={});null==(o=hubspot.form).formShellRenderer&&(o.formShellRenderer=c)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c;i=window.React;t=hns("hubspot.form.components.Form");e=hns("hubspot.form.components.ErrorState");n=hns("hubspot.form.formRenderer");r=hns("hubspot.form.formShellRenderer");c=hns("hubspot.utils");a=hns("hubspot.form.constants");l=function(e){var t,n,r,i;if(null!=e.metaData){i=e.metaData;for(t=0,n=i.length;n>t;t++){r=i[t];if("lang"===r.name)return hubspot.utils.getlocaleCode(r.value)}}return!1};s={render:function(e,t){var i,o,a,s,l,u,p,f,d,h,m,g,v;if(c.shouldRenderShell(e,t))return r.renderShell(e,t);l=t.formData,o=t.contactProperties,s=t.countryCode,u=t.gates,m=t.scopes,p=t.globalStyle,g=t.themeCss,v=t.time,f=t.rumScriptExecuteTime,d=t.rumServiceResponseTime,h=t.rumTotalRequestTime,i=t.api,a=t.correlationId;return n.renderForm(e,l,o,s,u,m,p,g,v,f,d,h,i,a)},renderDemo:function(e,t){var r,i,o,a,s,l,c,u,p,f,d,h,m,g;l=t.formDefinition,i=t.contactProperties,a=t.countryCode,c=t.gates,h=t.scopes,u=t.globalStyle,m=t.themeCss,g=t.time,p=t.rumScriptExecuteTime,f=t.rumServiceResponseTime,d=t.rumTotalRequestTime,r=t.api,o=t.correlationId;s=l;return n.renderForm(e,s,i,a,c,h,u,m,g,p,f,d,r,o)},renderErrorState:function(t){var n;return i.render(i.createElement(e,{context:t,env:t.env||env,locale:t.locale||hubspot.utils.getlocaleCode(null!=(n=t.validationOptions)?n.lang:void 0)||"en"}),document.querySelector(t.target))}};null==hubspot.form&&(hubspot.form={});null==(o=hubspot.form).formBootstrapper&&(o.formBootstrapper=s)}).call(this);(function(){var e,t,n,r,i,o,a,s,l,c,u,p,f,d,h;r||(r=null!=(f=window.performance)&&"function"==typeof f.now?f.now():void 0);t=hns("hubspot.form.api");h=hns("hubspot.utils");u=hns("hubspot.form.formBootstrapper");p=hns("hubspot.form.formFetcher");c=hns("hubspot.form.lib.errorReport");n=hns("hubspot.form.perf.PerfMeasurer");i=window.React;window.I18n.defaultLocale="en";window.I18n.fallbacks=!0;e="data-hubspot-rendered";d=function(e,t,n,r,i){null==t&&(t={});if(document.querySelector(e.target)){null==t.api&&(t.api=n);null==t.correlationId&&(t.correlationId=r);null==t.rumScriptExecuteTime&&(t.rumScriptExecuteTime=i);return u.render(e,t)}console.warn("Couldn't find target container "+e.target+" for HubSpot Form "+e.formId+". Not rendering form onto the page")};l=function(t){var n,r,i,o,a,s,l;r=document.createElement("div");s=t.cms?["hbspt-form","Normal","ContactFormWrapper"]:["hbspt-form"];if(r.classList)for(n=0,i=s.length;i>n;n++){a=s[n];r.classList.add(a)}else r.className=s.join(" ");l="hbspt-form-"+(new Date).getTime()+"-"+Math.floor(1e10*Math.random()+1);r.setAttribute("id",l);o=h.getCurrentScript(t.formId);o.setAttribute(e,"true");o.insertAdjacentHTML("afterend",r.outerHTML);return l};a=function(e){var t,n;e.portalId=null!=(t=e.portalId)?t.toString().trim():void 0;return e.formId=null!=(n=e.formId)?n.toString().trim():void 0};s=function(e){var o,s,f,m,g,v,x;a(e);if(e.portalId&&e.formId){e.shell||(e.privateInternalContext=null);o=t(e.formId);c.setupErrorReporter(e);s=hubspot.utils.getUuid();n.setup(e.env);n.measureEmbedScript();if(e.target){g=document.querySelector(e.target);g&&i.unmountComponentAtNode(g)}else{v=l(e);e.target="#"+v}x=null!=e.shell?window.parent:window;x.HSFR||(x.HSFR={FORM_COMPONENTS:[],RECAPTCHA_REQUESTED:!1,RECAPTCHA_INTERVAL:void 0});e.shell||null==window._hsq&&(window._hsq=[]);f=null;if(e.hsFormDemo)hubspot.utils.ready(function(){return u.renderDemo(e,e.hsFormDemo)});else{if(null==e.shell||null==e.privateInternalContext){e.hsFallback||(m=p.getUtk());if(m){e.hutk=m;c.addCookies({hutk:m})}p.fetchData(e,m,e.hsFallback).then(function(t){if(t){f=t;n.measureFormRequest(e.formId);return hubspot.utils.ready(function(){n.markStart("render",s);d(e,f,o,s,r);x=e.shell?window.parent:window;return x._hsq.push(["trackFormView",e.formId,s,{formType:f.formData.formTypeNumber,formVariantId:f.formData.variantId}])})}})["catch"](function(){h.runCustomerCallbackFunction(null,"onFormDefinitionFetchError",e.formId);return u.renderErrorState(e)});return o}hubspot.utils.ready(function(){return d(h.omit(e,["privateInternalContext"]),e.privateInternalContext)})}}else console.error("Please, pass a portal id and form id to render your HubSpot form")};null==window.hbspt&&(window.hbspt={});null==(o=window.hbspt).forms&&(o.forms={});window.hbspt.forms.create=s;hubspot.utils.ready(function(){return setTimeout(function(){var e,t,n,r,i,o;n=document.querySelectorAll(".hbspt-form-container");if(n.length)for(i=r=0,o=n.length;o>r;i=++r){e=n[i];t={};t.portalId=e.getAttribute("data-portalid");t.formId=e.getAttribute("data-formid");t.env=e.getAttribute("data-env");if(!t.portalId||!t.formId){h.debug('Element with class ".hbspt-form-container" is missing [data-portalid] or [data-formid] attributes');return}t.async=!0;t.target="#hbspt-form-"+i;e.setAttribute("id","hbspt-form-"+i);hbspt.forms.create(t)}},200)})}).call(this);!function(){for(var e=0;e { it('should polyfill RegExp successfully', async () => { const browser = await webdriver(appPort, '/regexp-polyfill') expect(await browser.eval('window.didRender')).toBe(true) + // wait a second for the script to be loaded + await waitFor(1000) + + expect(await browser.eval('window.isSticky')).toBe(true) + expect(await browser.eval('window.isMatch1')).toBe(true) + expect(await browser.eval('window.isMatch2')).toBe(false) }) } From 0f0013b9e479dbf6a8f8c5c6900643483d76540f Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 12 Mar 2020 19:21:18 -0300 Subject: [PATCH 27/47] Update data-fetch example to SSG (#11017) * Update to SSG * Change to getServerSideProps * Fix lint * Update --- examples/data-fetch/README.md | 2 +- examples/data-fetch/package.json | 2 +- examples/data-fetch/pages/index.js | 14 +++++++++----- examples/data-fetch/pages/preact.js | 14 +++++++++----- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/examples/data-fetch/README.md b/examples/data-fetch/README.md index bbbd445a5fba318..272091d25d99443 100644 --- a/examples/data-fetch/README.md +++ b/examples/data-fetch/README.md @@ -3,7 +3,7 @@ Next.js was conceived to make it easy to create universal apps. That's why fetching data on the server and the client when necessary is so easy with Next. -Using `getInitialProps` fetches data on the server for SSR and then on the client when the component is re-mounted (not on the first paint). +Using `getStaticProps` fetches data at built time from a page, Next.js will pre-render this page at build time. ## Deploy your own diff --git a/examples/data-fetch/package.json b/examples/data-fetch/package.json index ce6b96d2187181f..55d94b79a3ea614 100644 --- a/examples/data-fetch/package.json +++ b/examples/data-fetch/package.json @@ -7,8 +7,8 @@ "start": "next start" }, "dependencies": { - "isomorphic-unfetch": "^3.0.0", "next": "latest", + "node-fetch": "^2.6.0", "react": "^16.8.4", "react-dom": "^16.8.4" }, diff --git a/examples/data-fetch/pages/index.js b/examples/data-fetch/pages/index.js index b9aee6825d7dbaa..a6d2c2b2edba0e8 100644 --- a/examples/data-fetch/pages/index.js +++ b/examples/data-fetch/pages/index.js @@ -1,11 +1,11 @@ import React from 'react' import Link from 'next/link' -import fetch from 'isomorphic-unfetch' +import fetch from 'node-fetch' -function Index(props) { +function Index({ stars }) { return (
-

Next.js has {props.stars} ⭐️

+

Next.js has {stars} ⭐️

How about preact? @@ -13,10 +13,14 @@ function Index(props) { ) } -Index.getInitialProps = async () => { +export async function getStaticProps() { const res = await fetch('https://api.github.com/repos/zeit/next.js') const json = await res.json() // better use it inside try .. catch - return { stars: json.stargazers_count } + return { + props: { + stars: json.stargazers_count, + }, + } } export default Index diff --git a/examples/data-fetch/pages/preact.js b/examples/data-fetch/pages/preact.js index 1a9d707863297f0..9c4df30454e8bee 100644 --- a/examples/data-fetch/pages/preact.js +++ b/examples/data-fetch/pages/preact.js @@ -1,11 +1,11 @@ import React from 'react' import Link from 'next/link' -import fetch from 'isomorphic-unfetch' +import fetch from 'node-fetch' -function Preact(props) { +function Preact({ stars }) { return (
-

Preact has {props.stars} ⭐

+

Preact has {stars} ⭐

I bet Next.js has more stars (?) @@ -13,10 +13,14 @@ function Preact(props) { ) } -Preact.getInitialProps = async () => { +export async function getStaticProps() { const res = await fetch('https://api.github.com/repos/developit/preact') const json = await res.json() // better use it inside try .. catch - return { stars: json.stargazers_count } + return { + props: { + stars: json.stargazers_count, + }, + } } export default Preact From fe4da7346938a11ab781c0842204f3ca7ad2ba30 Mon Sep 17 00:00:00 2001 From: Josiah Wiebe Date: Thu, 12 Mar 2020 17:55:24 -0500 Subject: [PATCH 28/47] feat: update api-routes example to SSG (#11019) * feat: update api-routes example to SSG * Update examples/api-routes/components/Person.js Co-authored-by: Luis Alvarez D --- examples/api-routes/components/Person.js | 2 +- examples/api-routes/package.json | 2 +- examples/api-routes/pages/index.js | 6 ++--- .../pages/{person.js => person/[id].js} | 26 ++++++++++++++++--- 4 files changed, 27 insertions(+), 9 deletions(-) rename examples/api-routes/pages/{person.js => person/[id].js} (63%) diff --git a/examples/api-routes/components/Person.js b/examples/api-routes/components/Person.js index 16c2bf63a523c91..d43584b1668bc37 100644 --- a/examples/api-routes/components/Person.js +++ b/examples/api-routes/components/Person.js @@ -2,7 +2,7 @@ import Link from 'next/link' export default ({ person }) => (
  • - + {person.name}
  • diff --git a/examples/api-routes/package.json b/examples/api-routes/package.json index 5eeb8a1552fb2a4..f74abdd7e0fca8d 100644 --- a/examples/api-routes/package.json +++ b/examples/api-routes/package.json @@ -7,8 +7,8 @@ "start": "next start" }, "dependencies": { - "isomorphic-unfetch": "3.0.0", "next": "latest", + "node-fetch": "2.6.0", "react": "^16.8.6", "react-dom": "^16.8.6" }, diff --git a/examples/api-routes/pages/index.js b/examples/api-routes/pages/index.js index 4f1b5c97d411e1a..0197601de68437b 100644 --- a/examples/api-routes/pages/index.js +++ b/examples/api-routes/pages/index.js @@ -1,5 +1,5 @@ import Person from '../components/Person' -import fetch from 'isomorphic-unfetch' +import fetch from 'node-fetch' const Index = ({ people }) => (
      @@ -9,11 +9,11 @@ const Index = ({ people }) => (
    ) -Index.getInitialProps = async () => { +export async function getStaticProps() { const response = await fetch('http://localhost:3000/api/people') const people = await response.json() - return { people } + return { props: { people } } } export default Index diff --git a/examples/api-routes/pages/person.js b/examples/api-routes/pages/person/[id].js similarity index 63% rename from examples/api-routes/pages/person.js rename to examples/api-routes/pages/person/[id].js index ec15c7a3786c02c..5c98e8e8451726c 100644 --- a/examples/api-routes/pages/person.js +++ b/examples/api-routes/pages/person/[id].js @@ -1,4 +1,4 @@ -import fetch from 'isomorphic-unfetch' +import fetch from 'node-fetch' const Person = ({ data, status }) => status === 200 ? ( @@ -30,11 +30,29 @@ const Person = ({ data, status }) =>

    {data.message}

    ) -Person.getInitialProps = async ({ query }) => { - const response = await fetch(`http://localhost:3000/api/people/${query.id}`) +export async function getStaticPaths() { + const response = await fetch('http://localhost:3000/api/people') + const data = await response.json() + + const paths = data.map(person => ({ + params: { + id: person.id, + }, + })) + return { paths, fallback: false } +} + +export async function getStaticProps({ params }) { + const response = await fetch(`http://localhost:3000/api/people/${params.id}`) const data = await response.json() - return { data, status: response.status } + + return { + props: { + data, + status: response.status, + }, + } } export default Person From c1358301cc521469f0cd48a79b89d1f28b50ef30 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 12 Mar 2020 23:23:21 -0400 Subject: [PATCH 29/47] Fix Test for Windows --- test/integration/scss/test/index.test.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/integration/scss/test/index.test.js b/test/integration/scss/test/index.test.js index 1678bb00e07962d..9daec89617a4358 100644 --- a/test/integration/scss/test/index.test.js +++ b/test/integration/scss/test/index.test.js @@ -37,16 +37,16 @@ describe('SCSS Support', () => { stderr: true, }) expect(code).toBe(1) - expect(stderr.split('Require stack:')[0]).toMatchInlineSnapshot(` - "Failed to compile. - - ./styles/global.scss - To use Next.js' built-in Sass support, you first need to install \`sass\`. - Run \`npm i sass\` or \`yarn add sass\` inside your workspace. - - Learn more: https://err.sh/next.js/install-sass - " - `) + expect(stderr).toContain('Failed to compile.') + expect(stderr).toContain( + "To use Next.js' built-in Sass support, you first need to install `sass`." + ) + expect(stderr).toContain( + 'Run `npm i sass` or `yarn add sass` inside your workspace.' + ) + expect(stderr).toContain( + 'Learn more: https://err.sh/next.js/install-sass' + ) }) }) From b092ff72b9be4812cfd4a80b63478076170f6c6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?JIMMY=20=E3=83=A0=E3=83=B3=20=28MOON=29?= Date: Fri, 13 Mar 2020 12:30:47 +0900 Subject: [PATCH 30/47] Update amp-first example to use GSSP (#11028) --- examples/amp-first/pages/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/amp-first/pages/index.js b/examples/amp-first/pages/index.js index 36ea2f07cd18def..6518d49e8d108c5 100644 --- a/examples/amp-first/pages/index.js +++ b/examples/amp-first/pages/index.js @@ -234,10 +234,10 @@ const Home = props => ( ) // amp-script requires absolute URLs, so we create a property `host` which we can use to calculate the script URL. -Home.getInitialProps = async ({ req }) => { +export async function getServerSideProps({ req }) { // WARNING: This is a generally unsafe application unless you're deploying to a managed platform like ZEIT Now. // Be sure your load balancer is configured to not allow spoofed host headers. - return { host: `${getProtocol(req)}://${req.headers.host}` } + return { props: { host: `${getProtocol(req)}://${req.headers.host}` } } } function getProtocol(req) { From 9d9496e4a952f73c5cb3e8c9926268b9b0eacc49 Mon Sep 17 00:00:00 2001 From: Rui Saraiva Date: Fri, 13 Mar 2020 03:32:50 +0000 Subject: [PATCH 31/47] Update with-zeit-fetch example to use SSG (#11026) --- examples/with-zeit-fetch/pages/index.js | 12 ++++++------ examples/with-zeit-fetch/pages/preact.js | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/with-zeit-fetch/pages/index.js b/examples/with-zeit-fetch/pages/index.js index 45154170f08a947..3a0f26b58229a6e 100644 --- a/examples/with-zeit-fetch/pages/index.js +++ b/examples/with-zeit-fetch/pages/index.js @@ -2,10 +2,10 @@ import React from 'react' import Link from 'next/link' import fetch from '../fetch' -function Index(props) { +export default function Index({ stars }) { return (
    -

    Next.js has {props.stars} ⭐️

    +

    Next.js has {stars} ⭐️

    How about preact? @@ -13,10 +13,10 @@ function Index(props) { ) } -Index.getInitialProps = async () => { +export async function getStaticProps() { const res = await fetch('https://api.github.com/repos/zeit/next.js') const json = await res.json() // better use it inside try .. catch - return { stars: json.stargazers_count } + return { + props: { stars: json.stargazers_count }, + } } - -export default Index diff --git a/examples/with-zeit-fetch/pages/preact.js b/examples/with-zeit-fetch/pages/preact.js index e89e8a23257e127..80c2ff9b94cecc1 100644 --- a/examples/with-zeit-fetch/pages/preact.js +++ b/examples/with-zeit-fetch/pages/preact.js @@ -2,10 +2,10 @@ import React from 'react' import Link from 'next/link' import fetch from '../fetch' -function Preact(props) { +export default function Preact({ stars }) { return (
    -

    Preact has {props.stars} ⭐

    +

    Preact has {stars} ⭐

    I bet Next.js has more stars (?) @@ -13,10 +13,10 @@ function Preact(props) { ) } -Preact.getInitialProps = async () => { +export async function getStaticProps() { const res = await fetch('https://api.github.com/repos/developit/preact') const json = await res.json() // better use it inside try .. catch - return { stars: json.stargazers_count } + return { + props: { stars: json.stargazers_count }, + } } - -export default Preact From 6997b0236b68fd7c8f5395003c99a719974cc404 Mon Sep 17 00:00:00 2001 From: Sarbast Mohammed Date: Fri, 13 Mar 2020 04:42:21 +0100 Subject: [PATCH 32/47] Update next-sass example to use built-in sass support (#11015) * update next-sass example to use built-in sass support * Update README.md Co-authored-by: Joe Haddad --- examples/with-next-sass/README.md | 2 +- examples/with-next-sass/components/hello-world.js | 7 +++++++ .../with-next-sass/components/hello-world.module.scss | 5 +++++ examples/with-next-sass/next.config.js | 2 -- examples/with-next-sass/package.json | 5 ++--- examples/with-next-sass/pages/_app.js | 7 +++++++ examples/with-next-sass/pages/index.js | 8 ++++++-- examples/with-next-sass/styles.scss | 5 +++++ examples/with-next-sass/styles/style.scss | 4 ---- 9 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 examples/with-next-sass/components/hello-world.js create mode 100644 examples/with-next-sass/components/hello-world.module.scss delete mode 100644 examples/with-next-sass/next.config.js create mode 100644 examples/with-next-sass/pages/_app.js create mode 100644 examples/with-next-sass/styles.scss delete mode 100644 examples/with-next-sass/styles/style.scss diff --git a/examples/with-next-sass/README.md b/examples/with-next-sass/README.md index 60ef149c54ac712..4df3a58463dd8d5 100644 --- a/examples/with-next-sass/README.md +++ b/examples/with-next-sass/README.md @@ -1,6 +1,6 @@ # Example app with next-sass -This example uses next-sass without css-modules. The config can be found in `next.config.js`, change `withSass()` to `withSass({cssModules: true})` if you use css-modules. Then in the code, you import the stylesheet as `import style from '../styles/style.scss'` and use it like `
    `. [Learn more](https://github.com/zeit/next-plugins/tree/master/packages/next-sass). +This example demonstrates how to use Next.js' built-in Global Sass/Scss imports and Component-Level Sass/Scss modules support. ## Deploy your own diff --git a/examples/with-next-sass/components/hello-world.js b/examples/with-next-sass/components/hello-world.js new file mode 100644 index 000000000000000..2a478662183d392 --- /dev/null +++ b/examples/with-next-sass/components/hello-world.js @@ -0,0 +1,7 @@ +import styles from './hello-world.module.scss' + +export default () => ( +
    + Hello World, I am being styled using SCSS Modules! +
    +) diff --git a/examples/with-next-sass/components/hello-world.module.scss b/examples/with-next-sass/components/hello-world.module.scss new file mode 100644 index 000000000000000..5b1000dcd9c613e --- /dev/null +++ b/examples/with-next-sass/components/hello-world.module.scss @@ -0,0 +1,5 @@ +$color: red; + +.hello { + color: $color; +} diff --git a/examples/with-next-sass/next.config.js b/examples/with-next-sass/next.config.js deleted file mode 100644 index ed73b1374f1bd56..000000000000000 --- a/examples/with-next-sass/next.config.js +++ /dev/null @@ -1,2 +0,0 @@ -const withSass = require('@zeit/next-sass') -module.exports = withSass() diff --git a/examples/with-next-sass/package.json b/examples/with-next-sass/package.json index da5a8dcd941d7ba..3511b5b825603b4 100644 --- a/examples/with-next-sass/package.json +++ b/examples/with-next-sass/package.json @@ -5,10 +5,9 @@ "start": "next start" }, "dependencies": { - "@zeit/next-sass": "^1.0.0", "next": "latest", - "node-sass": "4.7.2", "react": "^16.7.0", - "react-dom": "^16.7.0" + "react-dom": "^16.7.0", + "sass": "1.26.3" } } diff --git a/examples/with-next-sass/pages/_app.js b/examples/with-next-sass/pages/_app.js new file mode 100644 index 000000000000000..569ae43d200dad8 --- /dev/null +++ b/examples/with-next-sass/pages/_app.js @@ -0,0 +1,7 @@ +import '../styles.scss' + +function MyApp({ Component, pageProps }) { + return +} + +export default MyApp diff --git a/examples/with-next-sass/pages/index.js b/examples/with-next-sass/pages/index.js index bfb3f3abf7c5496..55d4550097ccbbb 100644 --- a/examples/with-next-sass/pages/index.js +++ b/examples/with-next-sass/pages/index.js @@ -1,3 +1,7 @@ -import '../styles/style.scss' +import HelloWorld from '../components/hello-world' -export default () =>
    Hello World!
    +export default () => ( +
    + +
    +) diff --git a/examples/with-next-sass/styles.scss b/examples/with-next-sass/styles.scss new file mode 100644 index 000000000000000..f1a1f1957ed9bd3 --- /dev/null +++ b/examples/with-next-sass/styles.scss @@ -0,0 +1,5 @@ +$backgroundColor: #2ecc71; + +.app { + background-color: $backgroundColor; +} diff --git a/examples/with-next-sass/styles/style.scss b/examples/with-next-sass/styles/style.scss deleted file mode 100644 index 73cc2e0e844ba3d..000000000000000 --- a/examples/with-next-sass/styles/style.scss +++ /dev/null @@ -1,4 +0,0 @@ -$color: #2ecc71; -.example { - background-color: $color; -} From 18036d4e5198b6375a849c584c8b5a822ee41952 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Fri, 13 Mar 2020 05:40:10 -0400 Subject: [PATCH 33/47] Correct Cache-Control Behavior for GS(S)P (#11022) * Correct Cache-Control Behavior for GS(S)P * remove old line * fix test --- .../webpack/loaders/next-serverless-loader.ts | 25 +++--- .../next/next-server/server/next-server.ts | 82 ++++++++----------- .../next/next-server/server/send-payload.ts | 50 +++++++++++ .../getserversideprops-preview/pages/index.js | 4 +- .../getserversideprops/pages/custom-cache.js | 12 +++ .../getserversideprops/test/index.test.js | 30 ++++++- 6 files changed, 136 insertions(+), 67 deletions(-) create mode 100644 packages/next/next-server/server/send-payload.ts create mode 100644 test/integration/getserversideprops/pages/custom-cache.js diff --git a/packages/next/build/webpack/loaders/next-serverless-loader.ts b/packages/next/build/webpack/loaders/next-serverless-loader.ts index 55ee67059859ff4..7fcaf28c218005b 100644 --- a/packages/next/build/webpack/loaders/next-serverless-loader.ts +++ b/packages/next/build/webpack/loaders/next-serverless-loader.ts @@ -205,6 +205,7 @@ const nextServerlessLoader: loader.Loader = function() { const {renderToHTML} = require('next/dist/next-server/server/render'); const { tryGetPreviewData } = require('next/dist/next-server/server/api-utils'); const {sendHTML} = require('next/dist/next-server/server/send-html'); + const {sendPayload} = require('next/dist/next-server/server/send-payload'); const buildManifest = require('${buildManifest}'); const reactLoadableManifest = require('${reactLoadableManifest}'); const Document = require('${absoluteDocumentPath}').default; @@ -328,21 +329,15 @@ const nextServerlessLoader: loader.Loader = function() { let result = await renderToHTML(req, res, "${page}", Object.assign({}, getStaticProps ? {} : parsedUrl.query, nowParams ? nowParams : params, _params, isFallback ? { __nextFallback: 'true' } : {}), renderOpts) - if (_nextData && !renderMode) { - const payload = JSON.stringify(renderOpts.pageData) - res.setHeader('Content-Type', 'application/json') - res.setHeader('Content-Length', Buffer.byteLength(payload)) - - res.setHeader( - 'Cache-Control', - isPreviewMode - ? \`private, no-cache, no-store, max-age=0, must-revalidate\` - : getServerSideProps - ? \`no-cache, no-store, must-revalidate\` - : \`s-maxage=\${renderOpts.revalidate}, stale-while-revalidate\` - ) - res.end(payload) - return null + if (!renderMode) { + if (_nextData || getStaticProps || getServerSideProps) { + sendPayload(res, _nextData ? JSON.stringify(renderOpts.pageData) : result, _nextData ? 'json' : 'html', { + private: isPreviewMode, + stateful: !!getServerSideProps, + revalidate: renderOpts.revalidate, + }) + return null + } } else if (isPreviewMode) { res.setHeader( 'Cache-Control', diff --git a/packages/next/next-server/server/next-server.ts b/packages/next/next-server/server/next-server.ts index f9ecd2ed57deadf..2fb9c66b5a39d4a 100644 --- a/packages/next/next-server/server/next-server.ts +++ b/packages/next/next-server/server/next-server.ts @@ -52,6 +52,7 @@ import Router, { Route, } from './router' import { sendHTML } from './send-html' +import { sendPayload } from './send-payload' import { serveStatic } from './serve-static' import { getFallback, @@ -932,11 +933,11 @@ export default class Server { sendPayload( res, JSON.stringify(renderResult?.renderOpts?.pageData), - 'application/json', + 'json', !this.renderOpts.dev ? { - revalidate: -1, - private: isPreviewMode, // Leave to user-land caching + private: isPreviewMode, + stateful: true, // non-SSG data request } : undefined ) @@ -955,11 +956,11 @@ export default class Server { sendPayload( res, JSON.stringify(props), - 'application/json', + 'json', !this.renderOpts.dev ? { - revalidate: -1, - private: isPreviewMode, // Leave to user-land caching + private: isPreviewMode, + stateful: true, // GSSP data request } : undefined ) @@ -971,11 +972,12 @@ export default class Server { ...opts, }) - if (html && isServerProps && isPreviewMode) { - sendPayload(res, html, 'text/html; charset=utf-8', { - revalidate: -1, + if (html && isServerProps) { + sendPayload(res, html, 'html', { private: isPreviewMode, + stateful: true, // GSSP request }) + return null } return html @@ -1000,9 +1002,16 @@ export default class Server { sendPayload( res, data, - isDataReq ? 'application/json' : 'text/html; charset=utf-8', - cachedData.curRevalidate !== undefined && !this.renderOpts.dev - ? { revalidate: cachedData.curRevalidate, private: isPreviewMode } + isDataReq ? 'json' : 'html', + !this.renderOpts.dev + ? { + private: isPreviewMode, + stateful: false, // GSP response + revalidate: + cachedData.curRevalidate !== undefined + ? cachedData.curRevalidate + : /* default to minimum revalidate (this should be an invariant) */ 1, + } : undefined ) @@ -1105,7 +1114,12 @@ export default class Server { query.__nextFallback = 'true' if (isLikeServerless) { prepareServerlessUrl(req, query) - html = await (components.Component as any).renderReqToHTML(req, res) + const renderResult = await (components.Component as any).renderReqToHTML( + req, + res, + 'passthrough' + ) + html = renderResult.html } else { html = (await renderToHTML(req, res, pathname, query, { ...components, @@ -1114,7 +1128,7 @@ export default class Server { } } - sendPayload(res, html, 'text/html; charset=utf-8') + sendPayload(res, html, 'html') } const { @@ -1125,9 +1139,13 @@ export default class Server { sendPayload( res, isDataReq ? JSON.stringify(pageData) : html, - isDataReq ? 'application/json' : 'text/html; charset=utf-8', + isDataReq ? 'json' : 'html', !this.renderOpts.dev - ? { revalidate: sprRevalidate, private: isPreviewMode } + ? { + private: isPreviewMode, + stateful: false, // GSP response + revalidate: sprRevalidate, + } : undefined ) } @@ -1348,38 +1366,6 @@ export default class Server { } } -function sendPayload( - res: ServerResponse, - payload: any, - type: string, - options?: { revalidate: number | false; private: boolean } -) { - // TODO: ETag? Cache-Control headers? Next-specific headers? - res.setHeader('Content-Type', type) - res.setHeader('Content-Length', Buffer.byteLength(payload)) - if (options != null) { - if (options?.private) { - res.setHeader( - 'Cache-Control', - `private, no-cache, no-store, max-age=0, must-revalidate` - ) - } else if (options?.revalidate) { - res.setHeader( - 'Cache-Control', - options.revalidate < 0 - ? `no-cache, no-store, must-revalidate` - : `s-maxage=${options.revalidate}, stale-while-revalidate` - ) - } else if (options?.revalidate === false) { - res.setHeader( - 'Cache-Control', - `s-maxage=31536000, stale-while-revalidate` - ) - } - } - res.end(payload) -} - function prepareServerlessUrl(req: IncomingMessage, query: ParsedUrlQuery) { const curUrl = parseUrl(req.url!, true) req.url = formatUrl({ diff --git a/packages/next/next-server/server/send-payload.ts b/packages/next/next-server/server/send-payload.ts new file mode 100644 index 000000000000000..0a222ebdbb52c84 --- /dev/null +++ b/packages/next/next-server/server/send-payload.ts @@ -0,0 +1,50 @@ +import { ServerResponse } from 'http' +import { isResSent } from '../lib/utils' + +export function sendPayload( + res: ServerResponse, + payload: any, + type: 'html' | 'json', + options?: + | { private: true } + | { private: boolean; stateful: true } + | { private: boolean; stateful: false; revalidate: number | false } +): void { + if (isResSent(res)) { + return + } + + // TODO: ETag headers? + res.setHeader( + 'Content-Type', + type === 'json' ? 'application/json' : 'text/html; charset=utf-8' + ) + res.setHeader('Content-Length', Buffer.byteLength(payload)) + if (options != null) { + if (options.private || options.stateful) { + if (options.private || !res.hasHeader('Cache-Control')) { + res.setHeader( + 'Cache-Control', + `private, no-cache, no-store, max-age=0, must-revalidate` + ) + } + } else if (typeof options.revalidate === 'number') { + if (options.revalidate < 1) { + throw new Error( + `invariant: invalid Cache-Control duration provided: ${options.revalidate} < 1` + ) + } + + res.setHeader( + 'Cache-Control', + `s-maxage=${options.revalidate}, stale-while-revalidate` + ) + } else if (options.revalidate === false) { + res.setHeader( + 'Cache-Control', + `s-maxage=31536000, stale-while-revalidate` + ) + } + } + res.end(payload) +} diff --git a/test/integration/getserversideprops-preview/pages/index.js b/test/integration/getserversideprops-preview/pages/index.js index bc556a1e7dc1632..d48204d469bf744 100644 --- a/test/integration/getserversideprops-preview/pages/index.js +++ b/test/integration/getserversideprops-preview/pages/index.js @@ -1,4 +1,6 @@ -export function getServerSideProps({ preview, previewData }) { +export function getServerSideProps({ res, preview, previewData }) { + // test override in preview mode + res.setHeader('Cache-Control', 'public, max-age=3600') return { props: { hasProps: true, diff --git a/test/integration/getserversideprops/pages/custom-cache.js b/test/integration/getserversideprops/pages/custom-cache.js new file mode 100644 index 000000000000000..ddeb3bd7a11ef19 --- /dev/null +++ b/test/integration/getserversideprops/pages/custom-cache.js @@ -0,0 +1,12 @@ +import React from 'react' + +export async function getServerSideProps({ res }) { + res.setHeader('Cache-Control', 'public, max-age=3600') + return { + props: { world: 'world' }, + } +} + +export default ({ world }) => { + return

    hello: {world}

    +} diff --git a/test/integration/getserversideprops/test/index.test.js b/test/integration/getserversideprops/test/index.test.js index 1f3e58cd4c10144..283560deff2416a 100644 --- a/test/integration/getserversideprops/test/index.test.js +++ b/test/integration/getserversideprops/test/index.test.js @@ -66,6 +66,12 @@ const expectedManifestRoutes = () => [ ), page: '/catchall/[...path]', }, + { + dataRouteRegex: normalizeRegEx( + `^\\/_next\\/data\\/${escapeRegex(buildId)}\\/custom-cache.json$` + ), + page: '/custom-cache', + }, { dataRouteRegex: normalizeRegEx( `^\\/_next\\/data\\/${escapeRegex(buildId)}\\/default-revalidate.json$` @@ -414,12 +420,30 @@ const runTests = (dev = false) => { expect(dataRoutes).toEqual(expectedManifestRoutes()) }) - it('should set no-cache, no-store, must-revalidate header', async () => { - const res = await fetchViaHTTP( + it('should set default caching header', async () => { + const resPage = await fetchViaHTTP(appPort, `/something`) + expect(resPage.headers.get('cache-control')).toBe( + 'private, no-cache, no-store, max-age=0, must-revalidate' + ) + + const resData = await fetchViaHTTP( appPort, `/_next/data/${buildId}/something.json` ) - expect(res.headers.get('cache-control')).toContain('no-cache') + expect(resData.headers.get('cache-control')).toBe( + 'private, no-cache, no-store, max-age=0, must-revalidate' + ) + }) + + it('should respect custom caching header', async () => { + const resPage = await fetchViaHTTP(appPort, `/custom-cache`) + expect(resPage.headers.get('cache-control')).toBe('public, max-age=3600') + + const resData = await fetchViaHTTP( + appPort, + `/_next/data/${buildId}/custom-cache.json` + ) + expect(resData.headers.get('cache-control')).toBe('public, max-age=3600') }) it('should not show error for invalid JSON returned from getServerSideProps', async () => { From f75c37fcac56d5fca5f16e242e9fe87c6715f2fd Mon Sep 17 00:00:00 2001 From: Patrick Dahms Date: Fri, 13 Mar 2020 10:53:57 +0100 Subject: [PATCH 34/47] Update custom-server-fastify example to not use internal fn (#11040) --- examples/custom-server-fastify/package.json | 8 ++++---- examples/custom-server-fastify/server.js | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/examples/custom-server-fastify/package.json b/examples/custom-server-fastify/package.json index 8b8ad5b148f81f6..c4ef63115d86a8b 100644 --- a/examples/custom-server-fastify/package.json +++ b/examples/custom-server-fastify/package.json @@ -7,10 +7,10 @@ "start": "cross-env NODE_ENV=production node ./server.js" }, "dependencies": { - "cross-env": "^5.2.0", - "fastify": "2.1.0", + "cross-env": "^7.0.2", + "fastify": "^2.12.1", "next": "latest", - "react": "^16.8.4", - "react-dom": "^16.8.4" + "react": "^16.13.0", + "react-dom": "^16.13.0" } } diff --git a/examples/custom-server-fastify/server.js b/examples/custom-server-fastify/server.js index a381d324926d4dd..256e3756031e437 100644 --- a/examples/custom-server-fastify/server.js +++ b/examples/custom-server-fastify/server.js @@ -6,6 +6,7 @@ const dev = process.env.NODE_ENV !== 'production' fastify.register((fastify, opts, next) => { const app = Next({ dev }) + const handle = app.getRequestHandler() app .prepare() .then(() => { @@ -30,7 +31,7 @@ fastify.register((fastify, opts, next) => { }) fastify.all('/*', (req, reply) => { - return app.handleRequest(req.req, reply.res).then(() => { + return handle(req.req, reply.res).then(() => { reply.sent = true }) }) From f78c36f68699b51e298181de7fc15325a4993e53 Mon Sep 17 00:00:00 2001 From: akhila-ariyachandra Date: Fri, 13 Mar 2020 15:30:10 +0530 Subject: [PATCH 35/47] Updated analyze-bundles example (#11031) * Updated analyze-bundles example * Updated react and react-dom (for hooks) --- examples/analyze-bundles/package.json | 4 +-- examples/analyze-bundles/pages/index.js | 45 ++++++++++++------------- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/examples/analyze-bundles/package.json b/examples/analyze-bundles/package.json index 44577da10f31566..49db7282fda0e2f 100644 --- a/examples/analyze-bundles/package.json +++ b/examples/analyze-bundles/package.json @@ -12,8 +12,8 @@ "cross-env": "^6.0.3", "faker": "^4.1.0", "next": "latest", - "react": "^16.7.0", - "react-dom": "^16.7.0" + "react": "^16.8.0", + "react-dom": "^16.8.0" }, "license": "ISC" } diff --git a/examples/analyze-bundles/pages/index.js b/examples/analyze-bundles/pages/index.js index c5e13c7e8f9cc01..c40a24da07b1892 100644 --- a/examples/analyze-bundles/pages/index.js +++ b/examples/analyze-bundles/pages/index.js @@ -1,31 +1,28 @@ import React from 'react' import Link from 'next/link' +import faker from 'faker' -export default class Index extends React.Component { - static getInitialProps({ req }) { - if (req) { - // Runs only in the server - const faker = require('faker') - const name = faker.name.findName() - return { name } - } - - // Runs only in the client - return { name: 'Arunoda' } - } - - render() { - const { name } = this.props - return ( +const Index = ({ name }) => { + return ( +
    +

    Home Page

    +

    Welcome, {name}

    -

    Home Page

    -

    Welcome, {name}

    -
    - - About Page - -
    + + About Page +
    - ) +
    + ) +} + +export default Index + +export async function getStaticProps() { + // The name will be generated at build time only + const name = faker.name.findName() + + return { + props: { name }, } } From 925d84350334643ab4b7ce2bdb0b7d6cc6c7527b Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Fri, 13 Mar 2020 09:09:10 -0400 Subject: [PATCH 36/47] v9.3.1-canary.4 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-google-analytics/package.json | 2 +- packages/next-plugin-material-ui/package.json | 2 +- packages/next-plugin-sentry/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next/package.json | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index 34e65d35cfb2af9..20ad3dc0ba45760 100644 --- a/lerna.json +++ b/lerna.json @@ -12,5 +12,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "9.3.1-canary.3" + "version": "9.3.1-canary.4" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index fa1eb456ea10214..028714fdb7cb1e9 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "9.3.1-canary.3", + "version": "9.3.1-canary.4", "keywords": [ "react", "next", diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index cda2125c61ac17d..9e8aeec6dae5f44 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "9.3.1-canary.3", + "version": "9.3.1-canary.4", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 2fc90cf4f436f77..2eaddaccf9b59e6 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "9.3.1-canary.3", + "version": "9.3.1-canary.4", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-google-analytics/package.json b/packages/next-plugin-google-analytics/package.json index 7793f8addbfb9d7..c088c27eeab249b 100644 --- a/packages/next-plugin-google-analytics/package.json +++ b/packages/next-plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-google-analytics", - "version": "9.3.1-canary.3", + "version": "9.3.1-canary.4", "nextjs": { "name": "Google Analytics", "required-env": [ diff --git a/packages/next-plugin-material-ui/package.json b/packages/next-plugin-material-ui/package.json index fc1afdf37892ecf..01a853389e90d01 100644 --- a/packages/next-plugin-material-ui/package.json +++ b/packages/next-plugin-material-ui/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-material-ui", - "version": "9.3.1-canary.3", + "version": "9.3.1-canary.4", "nextjs": { "name": "Material UI", "required-env": [] diff --git a/packages/next-plugin-sentry/package.json b/packages/next-plugin-sentry/package.json index d08d4db64ef18ce..fecea02a2aacb48 100644 --- a/packages/next-plugin-sentry/package.json +++ b/packages/next-plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-sentry", - "version": "9.3.1-canary.3", + "version": "9.3.1-canary.4", "nextjs": { "name": "Sentry", "required-env": [ diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index c718c7560e77a56..ea18ebe1e35e82b 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "9.3.1-canary.3", + "version": "9.3.1-canary.4", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next/package.json b/packages/next/package.json index 8cb3e0a9035595c..436cb9a7e51e5cf 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "9.3.1-canary.3", + "version": "9.3.1-canary.4", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -73,7 +73,7 @@ "@babel/preset-typescript": "7.7.2", "@babel/runtime": "7.7.2", "@babel/types": "7.7.4", - "@next/polyfill-nomodule": "9.3.1-canary.3", + "@next/polyfill-nomodule": "9.3.1-canary.4", "amphtml-validator": "1.0.30", "async-retry": "1.2.3", "async-sema": "3.0.0", From 7bf7c232ea432c7efba868cb1bab497512ddabdf Mon Sep 17 00:00:00 2001 From: Luis Alvarez D Date: Fri, 13 Mar 2020 11:54:32 -0500 Subject: [PATCH 37/47] Use getServerSideProps (#11057) --- examples/api-routes/pages/index.js | 2 +- examples/api-routes/pages/person/[id].js | 15 +-------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/examples/api-routes/pages/index.js b/examples/api-routes/pages/index.js index 0197601de68437b..bfabbc5ced50e70 100644 --- a/examples/api-routes/pages/index.js +++ b/examples/api-routes/pages/index.js @@ -9,7 +9,7 @@ const Index = ({ people }) => ( ) -export async function getStaticProps() { +export async function getServerSideProps() { const response = await fetch('http://localhost:3000/api/people') const people = await response.json() diff --git a/examples/api-routes/pages/person/[id].js b/examples/api-routes/pages/person/[id].js index 5c98e8e8451726c..34d63cce840c512 100644 --- a/examples/api-routes/pages/person/[id].js +++ b/examples/api-routes/pages/person/[id].js @@ -30,20 +30,7 @@ const Person = ({ data, status }) =>

    {data.message}

    ) -export async function getStaticPaths() { - const response = await fetch('http://localhost:3000/api/people') - const data = await response.json() - - const paths = data.map(person => ({ - params: { - id: person.id, - }, - })) - - return { paths, fallback: false } -} - -export async function getStaticProps({ params }) { +export async function getServerSideProps({ params }) { const response = await fetch(`http://localhost:3000/api/people/${params.id}`) const data = await response.json() From 13bfb9a73d126b3361db786acd02248cebef9a6f Mon Sep 17 00:00:00 2001 From: matamatanot <39780486+matamatanot@users.noreply.github.com> Date: Sat, 14 Mar 2020 03:48:07 +0900 Subject: [PATCH 38/47] Update custom-server-express example with getServerSideProps (#11035) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * use getServerSideProps * run Prettier * update react * use getStaticProps * delete query * Remove data fetching requirements Co-authored-by: “kosuke_matano” Co-authored-by: Luis Alvarez --- examples/custom-server-express/package.json | 4 ++-- examples/custom-server-express/pages/index.js | 5 ----- examples/custom-server-express/pages/posts.js | 19 ------------------- examples/custom-server-express/server.js | 4 ---- 4 files changed, 2 insertions(+), 30 deletions(-) delete mode 100644 examples/custom-server-express/pages/posts.js diff --git a/examples/custom-server-express/package.json b/examples/custom-server-express/package.json index 6c17a925470a747..3fa6f68b09cdf6f 100644 --- a/examples/custom-server-express/package.json +++ b/examples/custom-server-express/package.json @@ -10,7 +10,7 @@ "cross-env": "^5.2.0", "express": "^4.14.0", "next": "latest", - "react": "^16.7.0", - "react-dom": "^16.7.0" + "react": "^16.13.0", + "react-dom": "^16.13.0" } } diff --git a/examples/custom-server-express/pages/index.js b/examples/custom-server-express/pages/index.js index 958fffabb6361c3..2dfad58236b7892 100644 --- a/examples/custom-server-express/pages/index.js +++ b/examples/custom-server-express/pages/index.js @@ -13,10 +13,5 @@ export default () => ( b -
  • - - post #2 - -
  • ) diff --git a/examples/custom-server-express/pages/posts.js b/examples/custom-server-express/pages/posts.js deleted file mode 100644 index 6c300ddb00363e3..000000000000000 --- a/examples/custom-server-express/pages/posts.js +++ /dev/null @@ -1,19 +0,0 @@ -import React, { Component } from 'react' - -export default class extends Component { - static getInitialProps({ query: { id } }) { - return { postId: id } - } - - render() { - return ( -
    -

    My blog post #{this.props.postId}

    -

    - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. -

    -
    - ) - } -} diff --git a/examples/custom-server-express/server.js b/examples/custom-server-express/server.js index 802c0726ff92038..f5f4ac20263c761 100644 --- a/examples/custom-server-express/server.js +++ b/examples/custom-server-express/server.js @@ -17,10 +17,6 @@ app.prepare().then(() => { return app.render(req, res, '/b', req.query) }) - server.get('/posts/:id', (req, res) => { - return app.render(req, res, '/posts', { id: req.params.id }) - }) - server.all('*', (req, res) => { return handle(req, res) }) From b596c2167d715a0e5f91b530d19367c7e3c4046e Mon Sep 17 00:00:00 2001 From: Shu Uesugi Date: Fri, 13 Mar 2020 12:03:29 -0700 Subject: [PATCH 39/47] Upgrade next.js version on datocms example (#11039) * Remove unused files * Update next Co-authored-by: Joe Haddad --- examples/cms-datocms/package.json | 2 +- examples/cms-datocms/public/images/author.jpg | Bin 40904 -> 0 bytes examples/cms-datocms/public/images/image.jpg | Bin 297961 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 examples/cms-datocms/public/images/author.jpg delete mode 100644 examples/cms-datocms/public/images/image.jpg diff --git a/examples/cms-datocms/package.json b/examples/cms-datocms/package.json index ab883a9f5797129..8be37cb0d18576a 100644 --- a/examples/cms-datocms/package.json +++ b/examples/cms-datocms/package.json @@ -10,7 +10,7 @@ "classnames": "2.2.6", "date-fns": "2.10.0", "isomorphic-unfetch": "3.0.0", - "next": "9.2.3-canary.26", + "next": "9.3.0", "react": "^16.13.0", "react-datocms": "1.1.0", "react-dom": "^16.13.0", diff --git a/examples/cms-datocms/public/images/author.jpg b/examples/cms-datocms/public/images/author.jpg deleted file mode 100644 index a3794bc993800428394d1ebe30294a60a779a384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40904 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 diff --git a/examples/cms-datocms/public/images/image.jpg b/examples/cms-datocms/public/images/image.jpg deleted file mode 100644 index 3a119fd96f97d8658450d234f2297eba08afe2e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297961 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%0A$<0v9)c8SdmgH* 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 Date: Sat, 14 Mar 2020 02:48:32 +0500 Subject: [PATCH 40/47] Update with-loading example to SSG (#11050) * Update getInitialProps to getStaticProps * Updated example Co-authored-by: Luis Alvarez --- examples/with-loading/README.md | 2 +- examples/with-loading/package.json | 1 - examples/with-loading/pages/_app.js | 63 ++++++++++++-------------- examples/with-loading/pages/about.js | 6 +-- examples/with-loading/pages/forever.js | 6 +-- examples/with-loading/pages/index.js | 2 - 6 files changed, 34 insertions(+), 46 deletions(-) diff --git a/examples/with-loading/README.md b/examples/with-loading/README.md index 7573404122cd3b8..82ab5b88fd68734 100644 --- a/examples/with-loading/README.md +++ b/examples/with-loading/README.md @@ -1,6 +1,6 @@ # Example app with page loading indicator -Sometimes when switching between pages, Next.js needs to download pages(chunks) from the server before rendering the page. And it may also need to wait for the data. So while doing these tasks, browser might be non responsive. +Sometimes when switching between pages, Next.js needs to download pages(chunks) from the server before rendering the page. And it may also need to wait for the data. So while doing these tasks, the browser might be non responsive. We can simply fix this issue by showing a loading indicator. That's what this examples shows. diff --git a/examples/with-loading/package.json b/examples/with-loading/package.json index 0ed321dce58843a..ab0f1b9cfb82d33 100644 --- a/examples/with-loading/package.json +++ b/examples/with-loading/package.json @@ -1,7 +1,6 @@ { "name": "with-loading", "version": "1.0.0", - "description": "This example features:", "main": "index.js", "scripts": { "dev": "next", diff --git a/examples/with-loading/pages/_app.js b/examples/with-loading/pages/_app.js index 282d54900f3d536..ebc53649086a791 100644 --- a/examples/with-loading/pages/_app.js +++ b/examples/with-loading/pages/_app.js @@ -1,9 +1,7 @@ -import React from 'react' -import App from 'next/app' -import Link from 'next/link' -import NProgress from 'nprogress' import Router from 'next/router' +import Link from 'next/link' import Head from 'next/head' +import NProgress from 'nprogress' Router.events.on('routeChangeStart', url => { console.log(`Loading: ${url}`) @@ -12,34 +10,31 @@ Router.events.on('routeChangeStart', url => { Router.events.on('routeChangeComplete', () => NProgress.done()) Router.events.on('routeChangeError', () => NProgress.done()) -export default class MyApp extends App { - render() { - const { Component, pageProps } = this.props - return ( - <> - - {/* Import CSS for nprogress */} - - -

    - - - ) - } +export default function App({ Component, pageProps }) { + return ( + <> + + {/* Import CSS for nprogress */} + + + + + + ) } diff --git a/examples/with-loading/pages/about.js b/examples/with-loading/pages/about.js index 39942733aae5c3c..ffa87104a122983 100644 --- a/examples/with-loading/pages/about.js +++ b/examples/with-loading/pages/about.js @@ -1,12 +1,10 @@ -import React from 'react' - const AboutPage = () =>

    This is about Next.js!

    -AboutPage.getInitialProps = async () => { +export async function getServerSideProps() { await new Promise(resolve => { setTimeout(resolve, 500) }) - return {} + return { props: {} } } export default AboutPage diff --git a/examples/with-loading/pages/forever.js b/examples/with-loading/pages/forever.js index 6d6c43815f56f77..f36f4ba4d4a0068 100644 --- a/examples/with-loading/pages/forever.js +++ b/examples/with-loading/pages/forever.js @@ -1,12 +1,10 @@ -import React from 'react' - const ForeverPage = () =>

    This page was rendered for a while!

    -ForeverPage.getInitialProps = async () => { +export async function getServerSideProps() { await new Promise(resolve => { setTimeout(resolve, 3000) }) - return {} + return { props: {} } } export default ForeverPage diff --git a/examples/with-loading/pages/index.js b/examples/with-loading/pages/index.js index dc2940c298f9ca0..5070538cdf800ab 100644 --- a/examples/with-loading/pages/index.js +++ b/examples/with-loading/pages/index.js @@ -1,5 +1,3 @@ -import React from 'react' - const IndexPage = () =>

    Hello Next.js!

    export default IndexPage From e6b4cdd665bc43b0ca114790964919ccf00b397d Mon Sep 17 00:00:00 2001 From: Tom Dohnal Date: Fri, 13 Mar 2020 22:57:12 +0100 Subject: [PATCH 41/47] update form handler example (#11059) --- examples/form-handler/components/index.js | 37 ----------------------- examples/form-handler/package.json | 3 +- examples/form-handler/pages/_app.js | 28 +++++------------ examples/form-handler/pages/index.js | 36 +++++++++++++++++++--- examples/form-handler/server.js | 29 ------------------ 5 files changed, 40 insertions(+), 93 deletions(-) delete mode 100644 examples/form-handler/components/index.js delete mode 100644 examples/form-handler/server.js diff --git a/examples/form-handler/components/index.js b/examples/form-handler/components/index.js deleted file mode 100644 index 526b37a09f1dbc2..000000000000000 --- a/examples/form-handler/components/index.js +++ /dev/null @@ -1,37 +0,0 @@ -import React, { Component } from 'react' -import Head from 'next/head' -import { Col, Row } from 'react-bootstrap' - -import Header from './Header' -import DisplayForm from './DisplayForm' - -import UserForm from './UserForm' -import Social from './Social' - -class Main extends Component { - render() { - return ( -
    - - Form Handler - - -
    - - - - - - - - - -
    - ) - } -} - -export default Main diff --git a/examples/form-handler/package.json b/examples/form-handler/package.json index ae631e78b4273c5..ac38f593e977ae4 100644 --- a/examples/form-handler/package.json +++ b/examples/form-handler/package.json @@ -5,14 +5,13 @@ "main": "index.js", "scripts": { "start": "next start", - "dev": "node server.js", + "dev": "next", "build": "next build" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { - "express": "^4.16.4", "next": "latest", "next-redux-wrapper": "^2.1.0", "react": "^16.8.4", diff --git a/examples/form-handler/pages/_app.js b/examples/form-handler/pages/_app.js index fbb59e4c98b6786..7d795471c626586 100644 --- a/examples/form-handler/pages/_app.js +++ b/examples/form-handler/pages/_app.js @@ -1,28 +1,14 @@ -import App from 'next/app' import React from 'react' import { Provider } from 'react-redux' import withRedux from 'next-redux-wrapper' import { initStore } from '../store' -class MyApp extends App { - static async getInitialProps({ Component, router, ctx }) { - let pageProps = {} - - if (Component.getInitialProps) { - pageProps = await Component.getInitialProps(ctx) - } - - return { pageProps } - } - - render() { - const { Component, pageProps, store } = this.props - return ( - - - - ) - } +const App = ({ Component, pageProps, store }) => { + return ( + + + + ) } -export default withRedux(initStore)(MyApp) +export default withRedux(initStore)(App) diff --git a/examples/form-handler/pages/index.js b/examples/form-handler/pages/index.js index fbf022aaf2daf51..bdbc2e76f1035ff 100644 --- a/examples/form-handler/pages/index.js +++ b/examples/form-handler/pages/index.js @@ -1,13 +1,41 @@ import React, { Component } from 'react' +import Head from 'next/head' +import { Col, Row, Grid } from 'react-bootstrap' -import { connect } from 'react-redux' +import Header from '../components/Header' +import DisplayForm from '../components/DisplayForm' -import Main from '../components' +import UserForm from '../components/UserForm' +import Social from '../components/Social' class Index extends Component { render() { - return
    + return ( +
    + + Form Handler + + + +
    + + + + + + + + + + +
    + ) } } -export default connect()(Index) +export default Index diff --git a/examples/form-handler/server.js b/examples/form-handler/server.js deleted file mode 100644 index 37b0bdb46ade622..000000000000000 --- a/examples/form-handler/server.js +++ /dev/null @@ -1,29 +0,0 @@ -const express = require('express') -const next = require('next') - -const dev = process.env.NODE_ENV !== 'production' -const app = next({ dev }) -const handle = app.getRequestHandler() - -app - .prepare() - .then(() => { - const server = express() - - server.get('/', (req, res) => { - return handle(req, res) - }) - - server.get('*', (req, res) => { - return handle(req, res) - }) - - server.listen(3000, err => { - if (err) throw err - console.log('> Ready on http://localhost:3000') - }) - }) - .catch(ex => { - console.error(ex.stack) - process.exit(1) - }) From 71f97198d19b0bfabf40ca559b90fcfc677ad66b Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Sat, 14 Mar 2020 03:58:20 -0500 Subject: [PATCH 42/47] Add support for static 404 when _error does not have custom GIP (#11062) * Add support for static 404 when _error does not have custom GIP * Update tests --- packages/next/build/index.ts | 30 ++++- packages/next/build/utils.ts | 18 ++- packages/next/pages/_error.tsx | 19 +-- .../pages/_error.js | 0 .../404-page-custom-error/pages/err.js | 5 + .../404-page-custom-error/pages/index.js | 1 + .../404-page-custom-error/test/index.test.js | 127 ++++++++++++++++++ test/integration/static-404/next.config.js | 4 - .../integration/static-404/test/index.test.js | 16 ++- 9 files changed, 195 insertions(+), 25 deletions(-) rename test/integration/{static-404 => 404-page-custom-error}/pages/_error.js (100%) create mode 100644 test/integration/404-page-custom-error/pages/err.js create mode 100644 test/integration/404-page-custom-error/pages/index.js create mode 100644 test/integration/404-page-custom-error/test/index.test.js delete mode 100644 test/integration/static-404/next.config.js diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index 24d92156f690941..a63780edc904442 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -64,7 +64,7 @@ import createSpinner from './spinner' import { collectPages, getPageSizeInKb, - hasCustomAppGetInitialProps, + hasCustomGetInitialProps, isPageStatic, PageInfo, printCustomRoutes, @@ -229,6 +229,7 @@ export default async function build(dir: string, conf = null): Promise { const hasPages404 = Boolean( mappedPages['/404'] && mappedPages['/404'].startsWith('private-next-pages') ) + let hasNonStaticErrorPage: boolean if (hasPublicDir) { try { @@ -456,6 +457,24 @@ export default async function build(dir: string, conf = null): Promise { staticCheckWorkers.getStdout().pipe(process.stdout) staticCheckWorkers.getStderr().pipe(process.stderr) + const runtimeEnvConfig = { + publicRuntimeConfig: config.publicRuntimeConfig, + serverRuntimeConfig: config.serverRuntimeConfig, + } + + hasNonStaticErrorPage = + hasCustomErrorPage && + (await hasCustomGetInitialProps( + path.join( + distDir, + ...(isLikeServerless + ? ['serverless', 'pages'] + : ['server', 'static', buildId, 'pages']), + '_error.js' + ), + runtimeEnvConfig + )) + const analysisBegin = process.hrtime() await Promise.all( pageKeys.map(async page => { @@ -485,14 +504,10 @@ export default async function build(dir: string, conf = null): Promise { pagesManifest[page] = bundleRelative.replace(/\\/g, '/') - const runtimeEnvConfig = { - publicRuntimeConfig: config.publicRuntimeConfig, - serverRuntimeConfig: config.serverRuntimeConfig, - } const nonReservedPage = !page.match(/^\/(_app|_error|_document|api)/) if (nonReservedPage && customAppGetInitialProps === undefined) { - customAppGetInitialProps = hasCustomAppGetInitialProps( + customAppGetInitialProps = hasCustomGetInitialProps( isLikeServerless ? serverBundle : path.join( @@ -618,7 +633,7 @@ export default async function build(dir: string, conf = null): Promise { // Since custom _app.js can wrap the 404 page we have to opt-out of static optimization if it has getInitialProps // Only export the static 404 when there is no /_error present const useStatic404 = - !customAppGetInitialProps && (!hasCustomErrorPage || hasPages404) + !customAppGetInitialProps && (!hasNonStaticErrorPage || hasPages404) if (invalidPages.size > 0) { throw new Error( @@ -907,6 +922,7 @@ export default async function build(dir: string, conf = null): Promise { distPath: distDir, buildId: buildId, pagesDir, + useStatic404, pageExtensions: config.pageExtensions, buildManifest, isModern: config.experimental.modern, diff --git a/packages/next/build/utils.ts b/packages/next/build/utils.ts index e0e9ae3d605ffa7..999f29c56ad1eee 100644 --- a/packages/next/build/utils.ts +++ b/packages/next/build/utils.ts @@ -57,6 +57,7 @@ export async function printTreeView( pageExtensions, buildManifest, isModern, + useStatic404, }: { distPath: string buildId: string @@ -64,6 +65,7 @@ export async function printTreeView( pageExtensions: string[] buildManifest: BuildManifestShape isModern: boolean + useStatic404: boolean } ) { const getPrettySize = (_size: number): string => { @@ -87,6 +89,14 @@ export async function printTreeView( const hasCustomApp = await findPageFile(pagesDir, '/_app', pageExtensions) const hasCustomError = await findPageFile(pagesDir, '/_error', pageExtensions) + if (useStatic404) { + pageInfos.set('/404', { + ...(pageInfos.get('/404') || pageInfos.get('/_error')), + static: true, + } as any) + list = [...list, '/404'] + } + const pageList = list .slice() .filter( @@ -720,14 +730,14 @@ export async function isPageStatic( } } -export function hasCustomAppGetInitialProps( - _appBundle: string, +export function hasCustomGetInitialProps( + bundle: string, runtimeEnvConfig: any ): boolean { require('../next-server/lib/runtime-config').setConfig(runtimeEnvConfig) - let mod = require(_appBundle) + let mod = require(bundle) - if (_appBundle.endsWith('_app.js')) { + if (bundle.endsWith('_app.js') || bundle.endsWith('_error.js')) { mod = mod.default || mod } else { // since we don't output _app in serverless mode get it from a page diff --git a/packages/next/pages/_error.tsx b/packages/next/pages/_error.tsx index e52e207c19ebd25..1a9718984210754 100644 --- a/packages/next/pages/_error.tsx +++ b/packages/next/pages/_error.tsx @@ -14,20 +14,23 @@ export type ErrorProps = { title?: string } +function _getInitialProps({ + res, + err, +}: NextPageContext): Promise | ErrorProps { + const statusCode = + res && res.statusCode ? res.statusCode : err ? err.statusCode! : 404 + return { statusCode } +} + /** * `Error` component used for handling errors. */ export default class Error

    extends React.Component

    { static displayName = 'ErrorPage' - static getInitialProps({ - res, - err, - }: NextPageContext): Promise | ErrorProps { - const statusCode = - res && res.statusCode ? res.statusCode : err ? err.statusCode! : 404 - return { statusCode } - } + static getInitialProps = _getInitialProps + static origGetInitialProps = _getInitialProps render() { const { statusCode } = this.props diff --git a/test/integration/static-404/pages/_error.js b/test/integration/404-page-custom-error/pages/_error.js similarity index 100% rename from test/integration/static-404/pages/_error.js rename to test/integration/404-page-custom-error/pages/_error.js diff --git a/test/integration/404-page-custom-error/pages/err.js b/test/integration/404-page-custom-error/pages/err.js new file mode 100644 index 000000000000000..6d0f2c17817a3a7 --- /dev/null +++ b/test/integration/404-page-custom-error/pages/err.js @@ -0,0 +1,5 @@ +const page = () => 'err page' +page.getInitialProps = () => { + throw new Error('oops') +} +export default page diff --git a/test/integration/404-page-custom-error/pages/index.js b/test/integration/404-page-custom-error/pages/index.js new file mode 100644 index 000000000000000..f6c15d1f66e8a6d --- /dev/null +++ b/test/integration/404-page-custom-error/pages/index.js @@ -0,0 +1 @@ +export default () => 'hello from index' diff --git a/test/integration/404-page-custom-error/test/index.test.js b/test/integration/404-page-custom-error/test/index.test.js new file mode 100644 index 000000000000000..3caf5cd042de74f --- /dev/null +++ b/test/integration/404-page-custom-error/test/index.test.js @@ -0,0 +1,127 @@ +/* eslint-env jest */ +/* global jasmine */ +import fs from 'fs-extra' +import { join } from 'path' +import { + killApp, + findPort, + launchApp, + nextStart, + nextBuild, + renderViaHTTP, + fetchViaHTTP, +} from 'next-test-utils' + +jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 2 + +const appDir = join(__dirname, '../') +const nextConfig = join(appDir, 'next.config.js') + +let appPort +let buildId +let app + +const runTests = mode => { + const isDev = mode === 'dev' + + it('should respond to 404 correctly', async () => { + const res = await fetchViaHTTP(appPort, '/404') + expect(res.status).toBe(404) + expect(await res.text()).toContain('This page could not be found') + }) + + it('should render error correctly', async () => { + const text = await renderViaHTTP(appPort, '/err') + expect(text).toContain(isDev ? 'oops' : 'Internal Server Error') + }) + + it('should render index page normal', async () => { + const html = await renderViaHTTP(appPort, '/') + expect(html).toContain('hello from index') + }) + + if (!isDev) { + it('should set pages404 in routes-manifest correctly', async () => { + const data = await fs.readJSON(join(appDir, '.next/routes-manifest.json')) + expect(data.pages404).toBe(true) + }) + + it('should have output 404.html', async () => { + expect( + await fs + .access( + join( + appDir, + '.next', + ...(mode === 'server' + ? ['server', 'static', buildId, 'pages'] + : ['serverless', 'pages']), + '404.html' + ) + ) + .then(() => true) + .catch(() => false) + ) + }) + } +} + +describe('Default 404 Page with custom _error', () => { + describe('server mode', () => { + afterAll(() => killApp(app)) + + it('should build successfully', async () => { + const { code } = await nextBuild(appDir, [], { + stderr: true, + stdout: true, + }) + + expect(code).toBe(0) + + appPort = await findPort() + + app = await nextStart(appDir, appPort) + buildId = await fs.readFile(join(appDir, '.next/BUILD_ID'), 'utf8') + }) + + runTests('server') + }) + + describe('serverless mode', () => { + afterAll(async () => { + await fs.remove(nextConfig) + await killApp(app) + }) + + it('should build successfully', async () => { + await fs.writeFile( + nextConfig, + ` + module.exports = { target: 'experimental-serverless-trace' } + ` + ) + const { code } = await nextBuild(appDir, [], { + stderr: true, + stdout: true, + }) + + expect(code).toBe(0) + + appPort = await findPort() + app = await nextStart(appDir, appPort) + buildId = await fs.readFile(join(appDir, '.next/BUILD_ID'), 'utf8') + }) + + runTests('serverless') + }) + + describe('dev mode', () => { + beforeAll(async () => { + appPort = await findPort() + app = await launchApp(appDir, appPort) + }) + afterAll(() => killApp(app)) + + runTests('dev') + }) +}) diff --git a/test/integration/static-404/next.config.js b/test/integration/static-404/next.config.js deleted file mode 100644 index 5e70488e69d7d4f..000000000000000 --- a/test/integration/static-404/next.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - generateBuildId: () => 'test-id', - experimental: { static404: true }, -} diff --git a/test/integration/static-404/test/index.test.js b/test/integration/static-404/test/index.test.js index 2d100d3cdec8a60..ad612bdd5c1d3da 100644 --- a/test/integration/static-404/test/index.test.js +++ b/test/integration/static-404/test/index.test.js @@ -63,8 +63,20 @@ describe('Static 404 page', () => { ).toBe(true) }) - it('should not export 404 page with custom _error', async () => { - await fs.writeFile(errorPage, `export { default } from 'next/error'`) + it('should not export 404 page with custom _error GIP', async () => { + await fs.writeFile( + errorPage, + ` + import Error from 'next/error' + export default class MyError extends Error { + static getInitialProps() { + return { + statusCode: 404 + } + } + } + ` + ) await nextBuild(appDir) await fs.remove(errorPage) expect(await fs.exists(static404)).toBe(false) From bb3cce2315d73a48add52692a521b26f9f80caee Mon Sep 17 00:00:00 2001 From: Carlos Pavanetti <12738516+carlospavanetti@users.noreply.github.com> Date: Sat, 14 Mar 2020 06:14:14 -0300 Subject: [PATCH 43/47] Update ssr-caching example with getServerSideProps (#11032) * Replace getInitialProps by getServerSideProps * Replace getServerSideProps getStaticProps --- examples/ssr-caching/pages/blog.js | 19 ----------------- examples/ssr-caching/pages/blog/[id].js | 28 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 19 deletions(-) delete mode 100644 examples/ssr-caching/pages/blog.js create mode 100644 examples/ssr-caching/pages/blog/[id].js diff --git a/examples/ssr-caching/pages/blog.js b/examples/ssr-caching/pages/blog.js deleted file mode 100644 index f70cd07a6316662..000000000000000 --- a/examples/ssr-caching/pages/blog.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' - -export default class extends React.Component { - static getInitialProps({ query: { id } }) { - return { id } - } - - render() { - return ( -

    -

    My {this.props.id} blog post

    -

    - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. -

    -
    - ) - } -} diff --git a/examples/ssr-caching/pages/blog/[id].js b/examples/ssr-caching/pages/blog/[id].js new file mode 100644 index 000000000000000..44606a200e1304d --- /dev/null +++ b/examples/ssr-caching/pages/blog/[id].js @@ -0,0 +1,28 @@ +import React from 'react' + +export default function(props) { + return ( +
    +

    My {props.id} blog post

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. +

    +
    + ) +} + +export async function getStaticProps({ params: { id } }) { + return { props: { id } } +} + +export async function getStaticPaths() { + return { + paths: [ + { params: { id: 'first' } }, + { params: { id: 'second' } }, + { params: { id: 'last' } }, + ], + fallback: true, + } +} From bc4aba1713269da46f2f761d1aca6868884db773 Mon Sep 17 00:00:00 2001 From: Giuseppe Date: Sun, 15 Mar 2020 11:51:55 +0100 Subject: [PATCH 44/47] Upgrade styled-jsx (#11070) The main change in this version is https://github.com/zeit/styled-jsx/pull/621 --- packages/next/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/next/package.json b/packages/next/package.json index 436cb9a7e51e5cf..7d42b031206fc76 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -136,7 +136,7 @@ "string-hash": "1.1.3", "strip-ansi": "5.2.0", "style-loader": "1.0.0", - "styled-jsx": "3.2.4", + "styled-jsx": "3.2.5", "terser": "4.4.2", "thread-loader": "2.1.3", "unfetch": "4.1.0", From 85e9ce1b0b83b59e352dd23cd04274921f2c4dec Mon Sep 17 00:00:00 2001 From: Aaron Reisman Date: Sun, 15 Mar 2020 04:22:53 -0700 Subject: [PATCH 45/47] Update preset.ts: Remove any and use updated Node.js types (#11075) Remove any and use updated Node.js types --- packages/next/build/babel/preset.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/next/build/babel/preset.ts b/packages/next/build/babel/preset.ts index a244e4e00ae6bf7..95fa36aecfd5dca 100644 --- a/packages/next/build/babel/preset.ts +++ b/packages/next/build/babel/preset.ts @@ -157,9 +157,7 @@ module.exports = ( helpers: true, regenerator: true, useESModules: supportsESM && presetEnvConfig.modules !== 'commonjs', - absoluteRuntime: (process.versions as any).pnp - ? __dirname - : undefined, + absoluteRuntime: process.versions.pnp ? __dirname : undefined, ...options['transform-runtime'], }, ], From 4cac93a75ea661973bf15aaaf5cdce1e185c279a Mon Sep 17 00:00:00 2001 From: Kaito Sugimoto Date: Sun, 15 Mar 2020 20:24:07 +0900 Subject: [PATCH 46/47] Update @next/bundle-analyzer dependencies (#11068) * Update @next/bundle-analyzer * update module * Update yarn.lock --- package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- yarn.lock | 30 ++++++++++++++-------- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 5a958e468991f39..f6512307ff35c31 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "tree-kill": "1.2.1", "typescript": "3.7.3", "wait-port": "0.2.2", - "webpack-bundle-analyzer": "3.3.2" + "webpack-bundle-analyzer": "3.6.1" }, "resolutions": { "browserslist": "^4.8.3", diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 9e8aeec6dae5f44..2b669de2e4f376a 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -8,6 +8,6 @@ "directory": "packages/next-bundle-analyzer" }, "dependencies": { - "webpack-bundle-analyzer": "3.3.2" + "webpack-bundle-analyzer": "3.6.1" } } diff --git a/yarn.lock b/yarn.lock index 123d36c5498cc91..b6b0124631e8d4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3221,17 +3221,22 @@ acorn-jsx@^5.0.1, acorn-jsx@^5.1.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== -acorn-walk@^6.0.1, acorn-walk@^6.1.1: +acorn-walk@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== +acorn-walk@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" + integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== + acorn@^5.5.3: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1, acorn@^6.0.7, acorn@^6.1.1, acorn@^6.2.1: +acorn@^6.0.1, acorn@^6.1.1, acorn@^6.2.1: version "6.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== @@ -3241,6 +3246,11 @@ acorn@^7.1.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== +acorn@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== + adjust-sourcemap-loader@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz#6471143af75ec02334b219f54bc7970c52fb29a4" @@ -10174,7 +10184,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.10: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -16770,13 +16780,13 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-bundle-analyzer@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz#3da733a900f515914e729fcebcd4c40dde71fc6f" - integrity sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA== +webpack-bundle-analyzer@3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.1.tgz#bdb637c2304424f2fbff9a950c7be42a839ae73b" + integrity sha512-Nfd8HDwfSx1xBwC+P8QMGvHAOITxNBSvu/J/mCJvOwv+G4VWkU7zir9SSenTtyCi0LnVtmsc7G5SZo1uV+bxRw== dependencies: - acorn "^6.0.7" - acorn-walk "^6.1.1" + acorn "^7.1.1" + acorn-walk "^7.1.1" bfj "^6.1.1" chalk "^2.4.1" commander "^2.18.0" @@ -16784,7 +16794,7 @@ webpack-bundle-analyzer@3.3.2: express "^4.16.3" filesize "^3.6.1" gzip-size "^5.0.0" - lodash "^4.17.10" + lodash "^4.17.15" mkdirp "^0.5.1" opener "^1.5.1" ws "^6.0.0" From 30cf4d5ab6b1665da2de322b6dbbc3f7b57216f9 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Sun, 15 Mar 2020 15:15:19 +0100 Subject: [PATCH 47/47] v9.3.1-canary.5 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-google-analytics/package.json | 2 +- packages/next-plugin-material-ui/package.json | 2 +- packages/next-plugin-sentry/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next/package.json | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lerna.json b/lerna.json index 20ad3dc0ba45760..f3be2ef7a6f3df8 100644 --- a/lerna.json +++ b/lerna.json @@ -12,5 +12,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "9.3.1-canary.4" + "version": "9.3.1-canary.5" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index 028714fdb7cb1e9..69b2a61061b8fb8 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "9.3.1-canary.4", + "version": "9.3.1-canary.5", "keywords": [ "react", "next", diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index 2b669de2e4f376a..120773cae0027c3 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "9.3.1-canary.4", + "version": "9.3.1-canary.5", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index 2eaddaccf9b59e6..3cc9aa9034aaae8 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "9.3.1-canary.4", + "version": "9.3.1-canary.5", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-google-analytics/package.json b/packages/next-plugin-google-analytics/package.json index c088c27eeab249b..67bebdb5384b243 100644 --- a/packages/next-plugin-google-analytics/package.json +++ b/packages/next-plugin-google-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-google-analytics", - "version": "9.3.1-canary.4", + "version": "9.3.1-canary.5", "nextjs": { "name": "Google Analytics", "required-env": [ diff --git a/packages/next-plugin-material-ui/package.json b/packages/next-plugin-material-ui/package.json index 01a853389e90d01..60d4e3f5c96f2d1 100644 --- a/packages/next-plugin-material-ui/package.json +++ b/packages/next-plugin-material-ui/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-material-ui", - "version": "9.3.1-canary.4", + "version": "9.3.1-canary.5", "nextjs": { "name": "Material UI", "required-env": [] diff --git a/packages/next-plugin-sentry/package.json b/packages/next-plugin-sentry/package.json index fecea02a2aacb48..6cfca3e9206fd74 100644 --- a/packages/next-plugin-sentry/package.json +++ b/packages/next-plugin-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-sentry", - "version": "9.3.1-canary.4", + "version": "9.3.1-canary.5", "nextjs": { "name": "Sentry", "required-env": [ diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index ea18ebe1e35e82b..85b397bbe0b4038 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "9.3.1-canary.4", + "version": "9.3.1-canary.5", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next/package.json b/packages/next/package.json index 7d42b031206fc76..1e6a3e74e7ac997 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "9.3.1-canary.4", + "version": "9.3.1-canary.5", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -73,7 +73,7 @@ "@babel/preset-typescript": "7.7.2", "@babel/runtime": "7.7.2", "@babel/types": "7.7.4", - "@next/polyfill-nomodule": "9.3.1-canary.4", + "@next/polyfill-nomodule": "9.3.1-canary.5", "amphtml-validator": "1.0.30", "async-retry": "1.2.3", "async-sema": "3.0.0",