Best JavaScript code snippet using playwright-internal
get-label-from-stack-trace.js
Source:get-label-from-stack-trace.js
1// @flow2import { getLabelFromStackTrace } from '../src/get-label-from-stack-trace'3/**4 * # Safari stack traces5 *6 * The component name may not appear in the Safari stack trace because Safari7 * implements Proper Tail Calls.8 *9 * Two components that seem almost identical may produce different stack traces10 * based on whether or not a Proper Tail Call optimization was possible. As a11 * result, you may not get the same stack traces if you try to reproduce these12 * test cases on your own.13 *14 * If Safari omits the component name from the stack trace, the best thing we15 * can do is:16 *17 * 1. Match the parent component's name if it is in the stack trace, or18 * 2. Return `undefined`.19 */20// Ensure that it works for components that have numbers and $ in their name21const expectedLabel = 'MyComponent-9'22/**23 * E.g.24 *25 * ```26 * function MyComponent$9() {27 * return <div css={{ color: 'red' }} />28 * }29 * ```30 *31 * See `playgrounds/cra/.env` for instructions on testing with the old JSX32 * transform.33 *34 * All tests after this block are for runtime=automatic, i.e. the new JSX35 * transform introduced in React 1736 */37describe('typical function component - runtime=classic', () => {38 test('Chrome', () => {39 // Each "at" line starts with some whitespace40 const stackTrace = `Error41 at createEmotionProps (emotion-element-1fb5ab00.browser.esm.js:143)42 at jsx (emotion-react.browser.esm.js:100)43 at MyComponent$9 (App.js:22)44 at renderWithHooks (react-dom.development.js:14803)45 at mountIndeterminateComponent (react-dom.development.js:17482)46 at beginWork (react-dom.development.js:18596)`47 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)48 })49 test('Firefox', () => {50 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/bundle.js:46440:4051jsx@http://localhost:3000/static/js/bundle.js:46636:11352MyComponent$9@http://localhost:3000/static/js/bundle.js:47600:7253renderWithHooks@http://localhost:3000/static/js/bundle.js:18904:2754mountIndeterminateComponent@http://localhost:3000/static/js/bundle.js:21583:1355beginWork@http://localhost:3000/static/js/bundle.js:22697:16`56 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)57 })58 test('Safari', () => {59 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/bundle.js:46440:4960jsx@http://localhost:3000/static/js/bundle.js:46635:11361renderWithHooks@http://localhost:3000/static/js/bundle.js:18904:2762mountIndeterminateComponent@http://localhost:3000/static/js/bundle.js:21583:2863beginWork$1@http://localhost:3000/static/js/bundle.js:27280:23`64 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()65 })66 test('SSR', () => {67 const stackTrace = `Error68 at Object.createEmotionProps (webpack-internal:///../../packages/react/dist/emotion-element-7a506f09.cjs.dev.js:195:40)69 at jsx (webpack-internal:///../../packages/react/dist/emotion-react.cjs.dev.js:103:45)70 at MyComponent$9 (webpack-internal:///./pages/index.js:20:61)71 at processChild (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3043:14)72 at resolve (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:2960:5)73 at ReactDOMServerRenderer.render (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3435:22)74 at ReactDOMServerRenderer.read (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3373:29)75 at Object.renderToString (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3988:27)76 at Object.renderPage (C:/Projects/OSS/emotion/node_modules/next/dist/server/render.js:621:45)77 at Object.defaultGetInitialProps (C:/Projects/OSS/emotion/node_modules/next/dist/server/render.js:301:51)`78 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)79 })80})81/**82 * E.g.83 *84 * ```85 * function MyComponent$9() {86 * return <div css={{ color: 'red' }} />87 * }88 * ```89 */90describe('typical function component', () => {91 test('Chrome', () => {92 const stackTrace = `Error93 at createEmotionProps (emotion-element-895e3bbe.browser.esm.js:142)94 at jsxDEV (emotion-react-jsx-dev-runtime.browser.esm.js:18)95 at MyComponent$9 (App.js:5)96 at renderWithHooks (react-dom.development.js:14803)97 at mountIndeterminateComponent (react-dom.development.js:17482)98 at beginWork (react-dom.development.js:18596)99 at beginWork$1 (react-dom.development.js:23179)`100 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)101 })102 test('Firefox', () => {103 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:844:40104jsxDEV@http://localhost:3000/static/js/main.chunk.js:1126:247105MyComponent$9@http://localhost:3000/static/js/main.chunk.js:2274:92106renderWithHooks@http://localhost:3000/static/js/vendors~main.chunk.js:16616:31107mountIndeterminateComponent@http://localhost:3000/static/js/vendors~main.chunk.js:19228:17108beginWork@http://localhost:3000/static/js/vendors~main.chunk.js:20306:20`109 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)110 })111 test('Safari', () => {112 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:844:49113jsxDEV@http://localhost:3000/static/js/main.chunk.js:1126:247114MyComponent$9@http://localhost:3000/static/js/main.chunk.js:2274:92115renderWithHooks@http://localhost:3000/static/js/vendors~main.chunk.js:16616:31116mountIndeterminateComponent@http://localhost:3000/static/js/vendors~main.chunk.js:19228:32117beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:24848:27`118 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)119 })120 test('SSR', () => {121 const stackTrace = `Error122 at Object.createEmotionProps (webpack-internal:///../../packages/react/dist/emotion-element-7a9c77b4.cjs.dev.js:175:40)123 at jsxDEV (webpack-internal:///../../packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.dev.js:22:75)124 at MyComponent$9 (webpack-internal:///./pages/index.js:60:85)125 at processChild (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3043:14)126 at resolve (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:2960:5)127 at ReactDOMServerRenderer.render (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3435:22)128 at ReactDOMServerRenderer.read (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3373:29)129 at Object.renderToString (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3988:27)130 at Object.renderPage (C:/Projects/OSS/emotion/node_modules/next/dist/server/render.js:621:45)131 at Object.defaultGetInitialProps (C:/Projects/OSS/emotion/node_modules/next/dist/server/render.js:301:51)`132 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)133 })134})135/**136 * E.g.137 *138 * ```139 * function MyComponent$9() {140 * function renderSpan() {141 * return <span css={{ color: 'orchid' }}>Orchid</span>142 * }143 *144 * return <div>{renderSpan()}</div>145 * }146 * ```147 */148describe('render function within function component', () => {149 test('Chrome', () => {150 const stackTrace = `Error151 at createEmotionProps (emotion-element-895e3bbe.browser.esm.js:142)152 at jsxDEV (emotion-react-jsx-dev-runtime.browser.esm.js:18)153 at renderSpan (App.js:5)154 at MyComponent$9 (App.js:8)155 at renderWithHooks (react-dom.development.js:14803)156 at mountIndeterminateComponent (react-dom.development.js:17482)157 at beginWork (react-dom.development.js:18596)`158 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)159 })160 test('Firefox', () => {161 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:844:40162jsxDEV@http://localhost:3000/static/js/main.chunk.js:1126:247163renderSpan@http://localhost:3000/static/js/main.chunk.js:2273:89164MyComponent$9@http://localhost:3000/static/js/main.chunk.js:2287:15165renderWithHooks@http://localhost:3000/static/js/vendors~main.chunk.js:16616:31166mountIndeterminateComponent@http://localhost:3000/static/js/vendors~main.chunk.js:19228:17167beginWork@http://localhost:3000/static/js/vendors~main.chunk.js:20306:20168beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:24848:18`169 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)170 })171 test('Safari', () => {172 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:844:49173jsxDEV@http://localhost:3000/static/js/main.chunk.js:1126:247174MyComponent$9@http://localhost:3000/main.4d087bc1a783e9f2b657.hot-update.js:36:25175renderWithHooks@http://localhost:3000/static/js/vendors~main.chunk.js:16616:31176updateFunctionComponent@http://localhost:3000/static/js/vendors~main.chunk.js:18795:39177beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:24848:27`178 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)179 })180 test('SSR', () => {181 const stackTrace = `Error182 at Object.createEmotionProps (webpack-internal:///../../packages/react/dist/emotion-element-7a9c77b4.cjs.dev.js:175:40)183 at jsxDEV (webpack-internal:///../../packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.dev.js:22:75)184 at renderSpan (webpack-internal:///./pages/index.js:28:82)185 at MyComponent$9 (webpack-internal:///./pages/index.js:71:15)186 at processChild (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3043:14)187 at resolve (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:2960:5)188 at ReactDOMServerRenderer.render (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3435:22)189 at ReactDOMServerRenderer.read (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3373:29)190 at Object.renderToString (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3988:27)191 at Object.renderPage (C:/Projects/OSS/emotion/node_modules/next/dist/server/render.js:621:45)`192 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)193 })194})195/**196 * E.g.197 *198 * ```199 * function MyComponent$9() {200 * return <div>201 * {[0].map(i => <div css={{ color: 'red' }} key={i} />)}202 * </div>203 * }204 * ```205 */206describe('element returned by Array.map', () => {207 test('Chrome', () => {208 const stackTrace = `Error209 at createEmotionProps (emotion-element-895e3bbe.browser.esm.js:142)210 at jsxDEV (emotion-react-jsx-dev-runtime.browser.esm.js:18)211 at App.js:5212 at Array.map (<anonymous>)213 at MyComponent$9 (App.js:5)214 at renderWithHooks (react-dom.development.js:14803)215 at mountIndeterminateComponent (react-dom.development.js:17482)216 at beginWork (react-dom.development.js:18596)217 at beginWork$1 (react-dom.development.js:23179)`218 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)219 })220 test('Firefox', () => {221 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:844:40222jsxDEV@http://localhost:3000/static/js/main.chunk.js:1126:247223MyComponent$9/<.children<@http://localhost:3000/static/js/main.chunk.js:2274:106224MyComponent$9@http://localhost:3000/static/js/main.chunk.js:2274:19225renderWithHooks@http://localhost:3000/static/js/vendors~main.chunk.js:16616:31226mountIndeterminateComponent@http://localhost:3000/static/js/vendors~main.chunk.js:19228:17227beginWork@http://localhost:3000/static/js/vendors~main.chunk.js:20306:20228beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:24848:18`229 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)230 })231 test('Safari', () => {232 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:844:49233jsxDEV@http://localhost:3000/static/js/main.chunk.js:1126:247234map@[native code]235MyComponent$9@http://localhost:3000/static/js/main.chunk.js:2274:22236renderWithHooks@http://localhost:3000/static/js/vendors~main.chunk.js:16616:31237mountIndeterminateComponent@http://localhost:3000/static/js/vendors~main.chunk.js:19228:32238beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:24848:27`239 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)240 })241 test('SSR', () => {242 const stackTrace = `Error243 at Object.createEmotionProps (webpack-internal:///../../packages/react/dist/emotion-element-7a9c77b4.cjs.dev.js:175:40)244 at jsxDEV (webpack-internal:///../../packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.dev.js:22:75)245 at eval (webpack-internal:///./pages/index.js:78:99)246 at Array.map (<anonymous>)247 at MyComponent$9 (webpack-internal:///./pages/index.js:78:19)248 at processChild (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3043:14)249 at resolve (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:2960:5)250 at ReactDOMServerRenderer.render (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3435:22)251 at ReactDOMServerRenderer.read (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3373:29)252 at Object.renderToString (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3988:27)`253 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)254 })255})256/**257 * E.g.258 *259 * ```260 * const test = {261 * MyComponent$9() {262 * return <div css={{ color: 'red' }}>red</div>263 * }264 * }265 *266 * function App() {267 * const el = test.MyComponent$9()268 *269 * return ...270 * }271 * ```272 */273describe('function component within object', () => {274 test('Chrome', () => {275 const stackTrace = `Error276 at createEmotionProps (emotion-element-6352414e.browser.esm.js?fcc6:142)277 at jsxDEV (emotion-react-jsx-dev-runtime.browser.esm.js?cf67:18)278 at Object.MyComponent$9 (index.js?bee7:7)279 at App (index.js?bee7:14)280 at renderWithHooks (react-dom.development.js?3c4a:14803)281 at mountIndeterminateComponent (react-dom.development.js?3c4a:17482)282 at beginWork (react-dom.development.js?3c4a:18596)283 at beginWork$1 (react-dom.development.js?3c4a:23179)`284 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)285 })286 test('Firefox', () => {287 const stackTrace = `createEmotionProps@webpack-internal:///../../packages/react/dist/emotion-element-6352414e.browser.esm.js:163:40288jsxDEV@webpack-internal:///../../packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js:35:230289MyComponent$9@webpack-internal:///./pages/index.js:32:82290App@webpack-internal:///./pages/index.js:49:17291renderWithHooks@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:14803:27292mountIndeterminateComponent@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:17482:13293beginWork@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:18596:16294beginWork$1@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:23179:14`295 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)296 })297 test('Safari', () => {298 // MyComponent$9 does not appear in the stack trace299 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:866:49300jsxDEV@http://localhost:3000/static/js/main.chunk.js:1147:247301App@http://localhost:3000/static/js/main.chunk.js:2290:32302renderWithHooks@http://localhost:3000/static/js/vendors~main.chunk.js:19152:31303mountIndeterminateComponent@http://localhost:3000/static/js/vendors~main.chunk.js:21764:32304beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:27384:27`305 expect(getLabelFromStackTrace(stackTrace)).toBe('App')306 })307 test('SSR', () => {308 const stackTrace = `Error309 at Object.createEmotionProps (webpack-internal:///../../packages/react/dist/emotion-element-7a9c77b4.cjs.dev.js:175:40)310 at jsxDEV (webpack-internal:///../../packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.dev.js:22:75)311 at Object.MyComponent$9 (webpack-internal:///./pages/index.js:31:82)312 at App (webpack-internal:///./pages/index.js:47:19)313 at processChild (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3043:14)314 at resolve (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:2960:5)315 at ReactDOMServerRenderer.render (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3435:22)316 at ReactDOMServerRenderer.read (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3373:29)317 at Object.renderToString (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3988:27)318 at Object.renderPage (C:/Projects/OSS/emotion/node_modules/next/dist/server/render.js:621:45)`319 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)320 })321})322test('Chrome: Module.jsx', () => {323 // From https://github.com/emotion-js/emotion/issues/1947324 const stackTrace = `Error325 at Module.jsx (http://localhost:10400/foo/bar/Combo?WZC6ZC&1ECYELF&12FP1RC&17F9LE8&P29J1Z&19IF3L2&AS09Z5&DHIG3C&EZJOER&13HZV70&1Y0F1JC&7UNIX3&SXHPTZ&K2YF13&11KMHHF&ZT36EV&Z44N8N&1QZW1DM&O16D0M&CW2QNS&1FH6TF2&ZWDLTF&1X87ICA&6LRWIZ&ME66AT&1SR9GT&1YH9ZQP&HHC8F2&1DB0VYO&FKOBET&1MJ8I38&JLAULY&1CH0G0Z&1TVRXYJ&SPNXDO&1JYOJGK&1LO9VOK&11TND7U&1YWNKYV&1DXWRM&TK6KOI&154ANPU&RWT5PA&19HGOKC&1YUJVCR&VFG0H0&172UQH&WFFZOK&1G8KK9P&Z4U2ZW&9UOM25&CBEUA3&1BURRUK&34VP40&CT8SCX&C5EGO8&XBSA9O&LL4E3N&1G5530W&R7QR2I&11ZITTG&1OIUGH1&ZN50OK&19R3ZDC&68ZZJF&413IE5&P0AYR7&1SMIEQU&1I34GN7&1GCT1EE&165FEOI&1NN6TMC&1FGT66H&1CP9Y2C&1R3WFPP&16Z97O3&1HGGWC2&AL9WFH&JXOSA2&QUXERX&NU7E4G&3HPVD3&16NVKFB&1JO5LOD&PIJWGC&1HD0KL3&A5KQ0E&UVG8ZT&156786I&1EGYRX&931PJP&71A44J&K4T5RR&YJS0J6&6NKXDV&15LGDNT&DK4XFH:6963:17)326 at MyComponent$9 (http://localhost:10400/foo/bar/Combo?WZC6ZC&1ECYELF&12FP1RC&17F9LE8&P29J1Z&19IF3L2&AS09Z5&DHIG3C&EZJOER&13HZV70&1Y0F1JC&7UNIX3&SXHPTZ&K2YF13&11KMHHF&ZT36EV&Z44N8N&1QZW1DM&O16D0M&CW2QNS&1FH6TF2&ZWDLTF&1X87ICA&6LRWIZ&ME66AT&1SR9GT&1YH9ZQP&HHC8F2&1DB0VYO&FKOBET&1MJ8I38&JLAULY&1CH0G0Z&1TVRXYJ&SPNXDO&1JYOJGK&1LO9VOK&11TND7U&1YWNKYV&1DXWRM&TK6KOI&154ANPU&RWT5PA&19HGOKC&1YUJVCR&VFG0H0&172UQH&WFFZOK&1G8KK9P&Z4U2ZW&9UOM25&CBEUA3&1BURRUK&34VP40&CT8SCX&C5EGO8&XBSA9O&LL4E3N&1G5530W&R7QR2I&11ZITTG&1OIUGH1&ZN50OK&19R3ZDC&68ZZJF&413IE5&P0AYR7&1SMIEQU&1I34GN7&1GCT1EE&165FEOI&1NN6TMC&1FGT66H&1CP9Y2C&1R3WFPP&16Z97O3&1HGGWC2&AL9WFH&JXOSA2&QUXERX&NU7E4G&3HPVD3&16NVKFB&1JO5LOD&PIJWGC&1HD0KL3&A5KQ0E&UVG8ZT&156786I&1EGYRX&931PJP&71A44J&K4T5RR&YJS0J6&6NKXDV&15LGDNT&DK4XFH:13679:15)327 at renderWithHooks (http://localhost:10400/foo/bar/Combo?1J6XZOQ&CV1G7Q&178CDN5&8GO7HW&1NEWTVK&11D8SWR&EUW1RW&B0SNY0&UKYKU8&Z2LJ32&OMFXIN&1CKRK5M&1DCE7I2&BTKQMZ&BF6IS9&IGMBPD&17GLBW0&F1NR3R&1BYJ6GK&1QMDI0S&1YBURTD&N3FA6J&1OKN2Q4&1VX6R8D&1RN5YOY&1PGEWZS&186NYSC&6OOHB&DAQXGM&18F8OG0&IEBF22&16BSJS0&270VGN&220EF0&PP2DW2&EXOH0W&1UI8QOX&BESS5A&SYNC6D&3EWNSZ&TX0EOZ&YHES22&SS37DN&155I4KT&SBSDY7&G2CFJM&1L12OEG&189382Y&4IWM93&RVOAXW&NMAEHJ&A3HW6D&react_v16.8.4&react-dom_v16.8.4&1I1OITG&1ZY465&1R86UXI&WLU3QX&1OO689&1N913EH&RZP360&15WCYOM&17TCHPC&115R68D&1VRCLJ7&12F8G3T&QXNNQC&128FRJB&1OH35FB&CHPVZ7&15VJLWF&DXTQHG&TI7NW9&8F7DFB&3ER51Q&1DTSSTA&1PQZ3V&1CA54WE&1GEM33A&OC7AMR&3AYWID&1KYS5DS&O76Y7S&1CD2C6F&1SB1JQ0&1DMMKMS&OCFDX4&1MO3710&1GVEDEZ&1FT6HVF&4JF9F9&1F8VFMW&1GAQQYW&149YUOT&12GEY49&4MFMGQ&16N8W14&12SV68C&2F7EYB&23HVSL&4TAXU8&1YL1F3&14H19K&1WHTWL7&1PYNLWK&1RUO08N&1PLVRSS&126YWXW&1TAPDE6&18TCRAP:78801:18)328 at updateFunctionComponent (http://localhost:10400/foo/bar/Combo?1J6XZOQ&CV1G7Q&178CDN5&8GO7HW&1NEWTVK&11D8SWR&EUW1RW&B0SNY0&UKYKU8&Z2LJ32&OMFXIN&1CKRK5M&1DCE7I2&BTKQMZ&BF6IS9&IGMBPD&17GLBW0&F1NR3R&1BYJ6GK&1QMDI0S&1YBURTD&N3FA6J&1OKN2Q4&1VX6R8D&1RN5YOY&1PGEWZS&186NYSC&6OOHB&DAQXGM&18F8OG0&IEBF22&16BSJS0&270VGN&220EF0&PP2DW2&EXOH0W&1UI8QOX&BESS5A&SYNC6D&3EWNSZ&TX0EOZ&YHES22&SS37DN&155I4KT&SBSDY7&G2CFJM&1L12OEG&189382Y&4IWM93&RVOAXW&NMAEHJ&A3HW6D&react_v16.8.4&react-dom_v16.8.4&1I1OITG&1ZY465&1R86UXI&WLU3QX&1OO689&1N913EH&RZP360&15WCYOM&17TCHPC&115R68D&1VRCLJ7&12F8G3T&QXNNQC&128FRJB&1OH35FB&CHPVZ7&15VJLWF&DXTQHG&TI7NW9&8F7DFB&3ER51Q&1DTSSTA&1PQZ3V&1CA54WE&1GEM33A&OC7AMR&3AYWID&1KYS5DS&O76Y7S&1CD2C6F&1SB1JQ0&1DMMKMS&OCFDX4&1MO3710&1GVEDEZ&1FT6HVF&4JF9F9&1F8VFMW&1GAQQYW&149YUOT&12GEY49&4MFMGQ&16N8W14&12SV68C&2F7EYB&23HVSL&4TAXU8&1YL1F3&14H19K&1WHTWL7&1PYNLWK&1RUO08N&1PLVRSS&126YWXW&1TAPDE6&18TCRAP:80490:19)329 at beginWork (http://localhost:10400/foo/bar/Combo?1J6XZOQ&CV1G7Q&178CDN5&8GO7HW&1NEWTVK&11D8SWR&EUW1RW&B0SNY0&UKYKU8&Z2LJ32&OMFXIN&1CKRK5M&1DCE7I2&BTKQMZ&BF6IS9&IGMBPD&17GLBW0&F1NR3R&1BYJ6GK&1QMDI0S&1YBURTD&N3FA6J&1OKN2Q4&1VX6R8D&1RN5YOY&1PGEWZS&186NYSC&6OOHB&DAQXGM&18F8OG0&IEBF22&16BSJS0&270VGN&220EF0&PP2DW2&EXOH0W&1UI8QOX&BESS5A&SYNC6D&3EWNSZ&TX0EOZ&YHES22&SS37DN&155I4KT&SBSDY7&G2CFJM&1L12OEG&189382Y&4IWM93&RVOAXW&NMAEHJ&A3HW6D&react_v16.8.4&react-dom_v16.8.4&1I1OITG&1ZY465&1R86UXI&WLU3QX&1OO689&1N913EH&RZP360&15WCYOM&17TCHPC&115R68D&1VRCLJ7&12F8G3T&QXNNQC&128FRJB&1OH35FB&CHPVZ7&15VJLWF&DXTQHG&TI7NW9&8F7DFB&3ER51Q&1DTSSTA&1PQZ3V&1CA54WE&1GEM33A&OC7AMR&3AYWID&1KYS5DS&O76Y7S&1CD2C6F&1SB1JQ0&1DMMKMS&OCFDX4&1MO3710&1GVEDEZ&1FT6HVF&4JF9F9&1F8VFMW&1GAQQYW&149YUOT&12GEY49&4MFMGQ&16N8W14&12SV68C&2F7EYB&23HVSL&4TAXU8&1YL1F3&14H19K&1WHTWL7&1PYNLWK&1RUO08N&1PLVRSS&126YWXW&1TAPDE6&18TCRAP:81500:13)330 at performUnitOfWork (http://localhost:10400/foo/bar/Combo?1J6XZOQ&CV1G7Q&178CDN5&8GO7HW&1NEWTVK&11D8SWR&EUW1RW&B0SNY0&UKYKU8&Z2LJ32&OMFXIN&1CKRK5M&1DCE7I2&BTKQMZ&BF6IS9&IGMBPD&17GLBW0&F1NR3R&1BYJ6GK&1QMDI0S&1YBURTD&N3FA6J&1OKN2Q4&1VX6R8D&1RN5YOY&1PGEWZS&186NYSC&6OOHB&DAQXGM&18F8OG0&IEBF22&16BSJS0&270VGN&220EF0&PP2DW2&EXOH0W&1UI8QOX&BESS5A&SYNC6D&3EWNSZ&TX0EOZ&YHES22&SS37DN&155I4KT&SBSDY7&G2CFJM&1L12OEG&189382Y&4IWM93&RVOAXW&NMAEHJ&A3HW6D&react_v16.8.4&react-dom_v16.8.4&1I1OITG&1ZY465&1R86UXI&WLU3QX&1OO689&1N913EH&RZP360&15WCYOM&17TCHPC&115R68D&1VRCLJ7&12F8G3T&QXNNQC&128FRJB&1OH35FB&CHPVZ7&15VJLWF&DXTQHG&TI7NW9&8F7DFB&3ER51Q&1DTSSTA&1PQZ3V&1CA54WE&1GEM33A&OC7AMR&3AYWID&1KYS5DS&O76Y7S&1CD2C6F&1SB1JQ0&1DMMKMS&OCFDX4&1MO3710&1GVEDEZ&1FT6HVF&4JF9F9&1F8VFMW&1GAQQYW&149YUOT&12GEY49&4MFMGQ&16N8W14&12SV68C&2F7EYB&23HVSL&4TAXU8&1YL1F3&14H19K&1WHTWL7&1PYNLWK&1RUO08N&1PLVRSS&126YWXW&1TAPDE6&18TCRAP:85175:11)331 at workLoop (http://localhost:10400/foo/bar/Combo?1J6XZOQ&CV1G7Q&178CDN5&8GO7HW&1NEWTVK&11D8SWR&EUW1RW&B0SNY0&UKYKU8&Z2LJ32&OMFXIN&1CKRK5M&1DCE7I2&BTKQMZ&BF6IS9&IGMBPD&17GLBW0&F1NR3R&1BYJ6GK&1QMDI0S&1YBURTD&N3FA6J&1OKN2Q4&1VX6R8D&1RN5YOY&1PGEWZS&186NYSC&6OOHB&DAQXGM&18F8OG0&IEBF22&16BSJS0&270VGN&220EF0&PP2DW2&EXOH0W&1UI8QOX&BESS5A&SYNC6D&3EWNSZ&TX0EOZ&YHES22&SS37DN&155I4KT&SBSDY7&G2CFJM&1L12OEG&189382Y&4IWM93&RVOAXW&NMAEHJ&A3HW6D&react_v16.8.4&react-dom_v16.8.4&1I1OITG&1ZY465&1R86UXI&WLU3QX&1OO689&1N913EH&RZP360&15WCYOM&17TCHPC&115R68D&1VRCLJ7&12F8G3T&QXNNQC&128FRJB&1OH35FB&CHPVZ7&15VJLWF&DXTQHG&TI7NW9&8F7DFB&3ER51Q&1DTSSTA&1PQZ3V&1CA54WE&1GEM33A&OC7AMR&3AYWID&1KYS5DS&O76Y7S&1CD2C6F&1SB1JQ0&1DMMKMS&OCFDX4&1MO3710&1GVEDEZ&1FT6HVF&4JF9F9&1F8VFMW&1GAQQYW&149YUOT&12GEY49&4MFMGQ&16N8W14&12SV68C&2F7EYB&23HVSL&4TAXU8&1YL1F3&14H19K&1WHTWL7&1PYNLWK&1RUO08N&1PLVRSS&126YWXW&1TAPDE6&18TCRAP:85215:22)332 at renderRoot (http://localhost:10400/foo/bar/Combo?1J6XZOQ&CV1G7Q&178CDN5&8GO7HW&1NEWTVK&11D8SWR&EUW1RW&B0SNY0&UKYKU8&Z2LJ32&OMFXIN&1CKRK5M&1DCE7I2&BTKQMZ&BF6IS9&IGMBPD&17GLBW0&F1NR3R&1BYJ6GK&1QMDI0S&1YBURTD&N3FA6J&1OKN2Q4&1VX6R8D&1RN5YOY&1PGEWZS&186NYSC&6OOHB&DAQXGM&18F8OG0&IEBF22&16BSJS0&270VGN&220EF0&PP2DW2&EXOH0W&1UI8QOX&BESS5A&SYNC6D&3EWNSZ&TX0EOZ&YHES22&SS37DN&155I4KT&SBSDY7&G2CFJM&1L12OEG&189382Y&4IWM93&RVOAXW&NMAEHJ&A3HW6D&react_v16.8.4&react-dom_v16.8.4&1I1OITG&1ZY465&1R86UXI&WLU3QX&1OO689&1N913EH&RZP360&15WCYOM&17TCHPC&115R68D&1VRCLJ7&12F8G3T&QXNNQC&128FRJB&1OH35FB&CHPVZ7&15VJLWF&DXTQHG&TI7NW9&8F7DFB&3ER51Q&1DTSSTA&1PQZ3V&1CA54WE&1GEM33A&OC7AMR&3AYWID&1KYS5DS&O76Y7S&1CD2C6F&1SB1JQ0&1DMMKMS&OCFDX4&1MO3710&1GVEDEZ&1FT6HVF&4JF9F9&1F8VFMW&1GAQQYW&149YUOT&12GEY49&4MFMGQ&16N8W14&12SV68C&2F7EYB&23HVSL&4TAXU8&1YL1F3&14H19K&1WHTWL7&1PYNLWK&1RUO08N&1PLVRSS&126YWXW&1TAPDE6&18TCRAP:85298:5)333 at performWorkOnRoot (http://localhost:10400/foo/bar/Combo?1J6XZOQ&CV1G7Q&178CDN5&8GO7HW&1NEWTVK&11D8SWR&EUW1RW&B0SNY0&UKYKU8&Z2LJ32&OMFXIN&1CKRK5M&1DCE7I2&BTKQMZ&BF6IS9&IGMBPD&17GLBW0&F1NR3R&1BYJ6GK&1QMDI0S&1YBURTD&N3FA6J&1OKN2Q4&1VX6R8D&1RN5YOY&1PGEWZS&186NYSC&6OOHB&DAQXGM&18F8OG0&IEBF22&16BSJS0&270VGN&220EF0&PP2DW2&EXOH0W&1UI8QOX&BESS5A&SYNC6D&3EWNSZ&TX0EOZ&YHES22&SS37DN&155I4KT&SBSDY7&G2CFJM&1L12OEG&189382Y&4IWM93&RVOAXW&NMAEHJ&A3HW6D&react_v16.8.4&react-dom_v16.8.4&1I1OITG&1ZY465&1R86UXI&WLU3QX&1OO689&1N913EH&RZP360&15WCYOM&17TCHPC&115R68D&1VRCLJ7&12F8G3T&QXNNQC&128FRJB&1OH35FB&CHPVZ7&15VJLWF&DXTQHG&TI7NW9&8F7DFB&3ER51Q&1DTSSTA&1PQZ3V&1CA54WE&1GEM33A&OC7AMR&3AYWID&1KYS5DS&O76Y7S&1CD2C6F&1SB1JQ0&1DMMKMS&OCFDX4&1MO3710&1GVEDEZ&1FT6HVF&4JF9F9&1F8VFMW&1GAQQYW&149YUOT&12GEY49&4MFMGQ&16N8W14&12SV68C&2F7EYB&23HVSL&4TAXU8&1YL1F3&14H19K&1WHTWL7&1PYNLWK&1RUO08N&1PLVRSS&126YWXW&1TAPDE6&18TCRAP:86205:5)334 at performWork (http://localhost:10400/foo/bar/Combo?1J6XZOQ&CV1G7Q&178CDN5&8GO7HW&1NEWTVK&11D8SWR&EUW1RW&B0SNY0&UKYKU8&Z2LJ32&OMFXIN&1CKRK5M&1DCE7I2&BTKQMZ&BF6IS9&IGMBPD&17GLBW0&F1NR3R&1BYJ6GK&1QMDI0S&1YBURTD&N3FA6J&1OKN2Q4&1VX6R8D&1RN5YOY&1PGEWZS&186NYSC&6OOHB&DAQXGM&18F8OG0&IEBF22&16BSJS0&270VGN&220EF0&PP2DW2&EXOH0W&1UI8QOX&BESS5A&SYNC6D&3EWNSZ&TX0EOZ&YHES22&SS37DN&155I4KT&SBSDY7&G2CFJM&1L12OEG&189382Y&4IWM93&RVOAXW&NMAEHJ&A3HW6D&react_v16.8.4&react-dom_v16.8.4&1I1OITG&1ZY465&1R86UXI&WLU3QX&1OO689&1N913EH&RZP360&15WCYOM&17TCHPC&115R68D&1VRCLJ7&12F8G3T&QXNNQC&128FRJB&1OH35FB&CHPVZ7&15VJLWF&DXTQHG&TI7NW9&8F7DFB&3ER51Q&1DTSSTA&1PQZ3V&1CA54WE&1GEM33A&OC7AMR&3AYWID&1KYS5DS&O76Y7S&1CD2C6F&1SB1JQ0&1DMMKMS&OCFDX4&1MO3710&1GVEDEZ&1FT6HVF&4JF9F9&1F8VFMW&1GAQQYW&149YUOT&12GEY49&4MFMGQ&16N8W14&12SV68C&2F7EYB&23HVSL&4TAXU8&1YL1F3&14H19K&1WHTWL7&1PYNLWK&1RUO08N&1PLVRSS&126YWXW&1TAPDE6&18TCRAP:86117:5)`335 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)336})337/**338 * E.g.339 *340 * ```341 * const MyComponent$9 = React.forwardRef(function MyComponent$9() {342 * return <div css={{ color: 'red' }} />343 * })344 * ```345 */346describe('React.forwardRef with named function', () => {347 // forwardRef only changes the stack trace for SSR348 test('SSR', () => {349 const stackTrace = `Error350 at Object.createEmotionProps (webpack-internal:///../../packages/react/dist/emotion-element-7a9c77b4.cjs.dev.js:175:40)351 at jsxDEV (webpack-internal:///../../packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.dev.js:22:75)352 at Object.MyComponent$9 [as render] (webpack-internal:///./pages/index.js:31:80)353 at ReactDOMServerRenderer.render (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3535:44)354 at ReactDOMServerRenderer.read (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3373:29)355 at Object.renderToString (C:/Projects/OSS/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3988:27)356 at Object.renderPage (C:/Projects/OSS/emotion/node_modules/next/dist/server/render.js:621:45)357 at Object.defaultGetInitialProps (C:/Projects/OSS/emotion/node_modules/next/dist/server/render.js:301:51)358 at Function.getInitialProps (webpack-internal:///../../node_modules/next/dist/pages/_document.js:187:16)359 at Object.loadGetInitialProps (C:/Projects/OSS/emotion/node_modules/next/dist/shared/lib/utils.js:69:29)`360 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)361 })362})363/**364 * E.g. (put an @ in front of jsxImportSource if doing this for real)365 *366 * ```367 * // jsxImportSource theme-ui368 *369 * function MyComponent$9() {370 * return <div sx={{ color: 'red' }} />371 * }372 * ```373 *374 * See https://theme-ui.com/sx-prop.375 */376describe('multiple jsx factories', () => {377 test('Chrome', () => {378 const stackTrace = `Error379 at createEmotionProps (emotion-element-db00a197.browser.esm.js:78)380 at jsxDEV (emotion-react-jsx-dev-runtime.browser.esm.js:14)381 at jsxDEV (theme-ui-core-jsx-dev-runtime.esm.js:7)382 at MyComponent$9 (App.js:6)383 at renderWithHooks (react-dom.development.js:14803)384 at mountIndeterminateComponent (react-dom.development.js:17482)385 at beginWork (react-dom.development.js:18596)386 at beginWork$1 (react-dom.development.js:23179)`387 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)388 })389 test('Firefox', () => {390 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:771:40391jsxDEV@http://localhost:3000/static/js/main.chunk.js:942:247392jsxDEV@http://localhost:3000/static/js/vendors~main.chunk.js:3998:87393MyComponent$9@http://localhost:3000/static/js/main.chunk.js:2094:86394renderWithHooks@http://localhost:3000/static/js/vendors~main.chunk.js:21501:31395mountIndeterminateComponent@http://localhost:3000/static/js/vendors~main.chunk.js:24113:17396beginWork@http://localhost:3000/static/js/vendors~main.chunk.js:25191:20397beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:29733:18`398 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)399 })400 test('Safari', () => {401 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:866:49402jsxDEV@http://localhost:3000/static/js/main.chunk.js:1147:247403MyComponent$9@http://localhost:3000/static/js/main.chunk.js:2277:86404renderWithHooks@http://localhost:3000/static/js/vendors~main.chunk.js:19627:31405mountIndeterminateComponent@http://localhost:3000/static/js/vendors~main.chunk.js:22239:32406beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:27859:27`407 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)408 })409 test('SSR', () => {410 const stackTrace = `Error411 at Object.createEmotionProps (C:/Projects/OSS/emotion/packages/react/dist/emotion-element-7a9c77b4.cjs.dev.js:175:40)412 at Object.jsxDEV (C:/Projects/OSS/emotion/packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.dev.js:22:75)413 at jsxDEV (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/@theme-ui/core/jsx-dev-runtime/dist/theme-ui-core-jsx-dev-runtime.cjs.dev.js:15:24)414 at MyComponent$9 (webpack-internal:///./pages/index.js:64:79)415 at processChild (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:3043:14)416 at resolve (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:2960:5)417 at ReactDOMServerRenderer.render (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:3435:22)418 at ReactDOMServerRenderer.read (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:3373:29)419 at Object.renderToString (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:3988:27)420 at Object.renderPage (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/next/dist/server/render.js:621:45)`421 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)422 })423 // From https://github.com/emotion-js/emotion/pull/1714#discussion_r365518850424 test('dollar signs in jsx', () => {425 const stackTrace = `jsx@http://localhost:3000/_next/static/development/pages/theme_ui.js?ts=1578745166666:440:17426jsx$$1@http://localhost:3000/_next/static/development/pages/theme_ui.js?ts=1578745166666:2777:60427MyComponent$9@http://localhost:3000/_next/static/development/pages/theme_ui.js?ts=1578745166666:23:62428renderWithHooks@http://localhost:3000/_next/static/development/dll/dll_d6a88dbe3071bd165157.js?ts=1578745166666:16511:27429mountIndeterminateComponent@http://localhost:3000/_next/static/development/dll/dll_d6a88dbe3071bd165157.js?ts=1578745166666:19045:13`430 expect(getLabelFromStackTrace(stackTrace)).toBe(expectedLabel)431 })432})433/**434 * E.g.435 *436 * ```437 * class MyComponent$9 extends React.Component {438 * render() {439 * return <div css={{ color: 'red' }} />440 * }441 * }442 * ```443 */444describe('class component', () => {445 test('Chrome', () => {446 const stackTrace = `Error447 at createEmotionProps (emotion-element-6352414e.browser.esm.js:142)448 at jsxDEV (emotion-react-jsx-dev-runtime.browser.esm.js:18)449 at MyComponent$9.render (App.js:6)450 at finishClassComponent (react-dom.development.js:17163)451 at updateClassComponent (react-dom.development.js:17110)452 at beginWork (react-dom.development.js:18620)453 at beginWork$1 (react-dom.development.js:23179)`454 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()455 })456 test('Firefox', () => {457 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:844:40458jsxDEV@http://localhost:3000/static/js/main.chunk.js:1125:247459render@http://localhost:3000/static/js/main.chunk.js:2276:89460finishClassComponent@http://localhost:3000/static/js/vendors~main.chunk.js:23777:22461updateClassComponent@http://localhost:3000/static/js/vendors~main.chunk.js:23727:48462beginWork@http://localhost:3000/static/js/vendors~main.chunk.js:25187:20463beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:29705:18`464 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()465 })466 test('Safari', () => {467 // render does not appear in the stack trace468 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:866:49469jsxDEV@http://localhost:3000/static/js/main.chunk.js:1147:247470finishClassComponent@http://localhost:3000/static/js/vendors~main.chunk.js:21453:41471updateClassComponent@http://localhost:3000/static/js/vendors~main.chunk.js:21406:48472beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:27384:27`473 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()474 })475 test('SSR', () => {476 const stackTrace = `Error477 at Object.createEmotionProps (C:/Projects/OSS/emotion/packages/react/dist/emotion-element-7a9c77b4.cjs.dev.js:175:40)478 at Object.jsxDEV (C:/Projects/OSS/emotion/packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.dev.js:22:75)479 at jsxDEV (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/@theme-ui/core/jsx-dev-runtime/dist/theme-ui-core-jsx-dev-runtime.cjs.dev.js:15:24)480 at MyComponent$9.render (webpack-internal:///./pages/index.js:40:76)481 at processChild (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:3134:18)482 at resolve (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:2960:5)483 at ReactDOMServerRenderer.render (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:3435:22)484 at ReactDOMServerRenderer.read (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:3373:29)485 at Object.renderToString (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/react-dom/cjs/react-dom-server.node.development.js:3988:27)486 at Object.renderPage (C:/Projects/OSS/emotion/playgrounds/nextjs/node_modules/next/dist/server/render.js:621:45)`487 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()488 })489})490/**491 * E.g.492 *493 * ```494 * import React from 'react'495 *496 * var __extends =497 * (this && this.__extends) ||498 * (function () {499 * var extendStatics = function (d, b) {500 * extendStatics =501 * Object.setPrototypeOf ||502 * ({ __proto__: [] } instanceof Array &&503 * function (d, b) {504 * d.__proto__ = b505 * }) ||506 * function (d, b) {507 * for (var p in b)508 * if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]509 * }510 * return extendStatics(d, b)511 * }512 * return function (d, b) {513 * extendStatics(d, b)514 * function __() {515 * this.constructor = d516 * }517 * d.prototype =518 * b === null ? Object.create(b) : ((__.prototype = b.prototype), new __())519 * }520 * })()521 *522 * export const MyComponent$9 = (function (_super) {523 * __extends(MyComponent$9, _super)524 * function MyComponent$9() {525 * var _this = (_super !== null && _super.apply(this, arguments)) || this526 * return _this527 * }528 * MyComponent$9.prototype.render = function () {529 * // Defining a variable to prevent Proper Tail Call530 * const el = <div css={{ color: 'red' }} />531 * return el532 * }533 * return MyComponent$9534 * })(React.PureComponent)535 * ```536 */537describe('class component transpiled to ES 5', () => {538 test('Chrome', () => {539 const stackTrace = `Error540 at createEmotionProps (emotion-element-10a9af6f.browser.esm.js?d0a2:168)541 at jsxDEV (emotion-react-jsx-dev-runtime.browser.esm.js?cf67:18)542 at MyComponent$9.render (MyComponent9.js?2fbf:37)543 at finishClassComponent (react-dom.development.js?3c4a:17160)544 at updateClassComponent (react-dom.development.js?3c4a:17110)545 at beginWork (react-dom.development.js?3c4a:18620)546 at beginWork$1 (react-dom.development.js?3c4a:23179)547 at performUnitOfWork (react-dom.development.js?3c4a:22154)548 at workLoopSync (react-dom.development.js?3c4a:22130)549 at performSyncWorkOnRoot (react-dom.development.js?3c4a:21756)`550 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()551 })552 test('Firefox', () => {553 const stackTrace = `createEmotionProps@webpack-internal:///../../packages/react/dist/emotion-element-10a9af6f.browser.esm.js:189:42554jsxDEV@webpack-internal:///../../packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js:35:230555MyComponent$9</MyComponent$9.prototype.render@webpack-internal:///./pages/MyComponent9.js:62:82556finishClassComponent@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:17163:18557updateClassComponent@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:17110:44558beginWork@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:18620:16559beginWork$1@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:23179:14560performUnitOfWork@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:22154:12561workLoopSync@webpack-internal:///../../node_modules/react-dom/cjs/react-dom.development.js:22130:22`562 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()563 })564 test('Safari', () => {565 // No idea why the function name is just blank in this stack trace566 const stackTrace = `createEmotionProps@http://localhost:3000/static/js/main.chunk.js:973:49567jsxDEV@http://localhost:3000/static/js/main.chunk.js:1609:247568@http://localhost:3000/static/js/main.chunk.js:2926:93569finishClassComponent@http://localhost:3000/static/js/vendors~main.chunk.js:21433:41570updateClassComponent@http://localhost:3000/static/js/vendors~main.chunk.js:21386:48571beginWork$1@http://localhost:3000/static/js/vendors~main.chunk.js:27364:27572performUnitOfWork@http://localhost:3000/static/js/vendors~main.chunk.js:26352:27573workLoopSync@http://localhost:3000/static/js/vendors~main.chunk.js:26328:43574performSyncWorkOnRoot@http://localhost:3000/static/js/vendors~main.chunk.js:25946:25`575 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()576 })577 test('SSR', () => {578 const stackTrace = `Error579 at Object.createEmotionProps (webpack-internal:///../../packages/react/dist/emotion-element-491a37fd.cjs.dev.js:201:42)580 at jsxDEV (webpack-internal:///../../packages/react/jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.dev.js:22:75)581 at MyComponent$9.render (webpack-internal:///./pages/MyComponent9.js:60:82)582 at processChild (/Users/sammagura/Documents/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3134:18)583 at resolve (/Users/sammagura/Documents/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:2960:5)584 at ReactDOMServerRenderer.render (/Users/sammagura/Documents/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3435:22)585 at ReactDOMServerRenderer.read (/Users/sammagura/Documents/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3373:29)586 at Object.renderToString (/Users/sammagura/Documents/emotion/node_modules/react-dom/cjs/react-dom-server.node.development.js:3988:27)587 at Object.renderPage (/Users/sammagura/Documents/emotion/node_modules/next/dist/server/render.js:621:45)588 at Object.defaultGetInitialProps (/Users/sammagura/Documents/emotion/node_modules/next/dist/server/render.js:301:51)`589 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()590 })591})592/**593 * https://github.com/emotion-js/emotion/issues/2614594 *595 * Not sure how to reproduce this other than this repro project:596 * https://github.com/srmagura/emotion-issue-2614597 */598describe('issue #2614 - class component transpiled to ES 5', () => {599 test('Chrome', () => {600 const stackTrace = `Error601 at createEmotionProps (webpack-internal:///./node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js:183)602 at Module.jsx (webpack-internal:///./node_modules/@emotion/react/dist/emotion-react.browser.esm.js:127)603 at Loader.render (webpack-internal:///./node_modules/react-spinners/ScaleLoader.js:56)604 at finishClassComponent (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:17485)605 at updateClassComponent (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:17435)606 at beginWork (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:19073)607 at beginWork$1 (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:23935)608 at performUnitOfWork (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:22771)609 at workLoopSync (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:22702)610 at renderRootSync (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:22665)`611 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()612 })613 test('Firefox', () => {614 const stackTrace = `createEmotionProps@webpack-internal:///./node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js:183:40615jsx@webpack-internal:///./node_modules/@emotion/react/dist/emotion-react.browser.esm.js:127:105616Loader.prototype.render@webpack-internal:///./node_modules/react-spinners/ScaleLoader.js:56:35617finishClassComponent@webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:17485:31618updateClassComponent@webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:17435:44619beginWork@webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:19073:16620beginWork$1@webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:23935:14621performUnitOfWork@webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:22771:12622workLoopSync@webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:22702:22`623 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()624 })625 test('Safari', () => {626 // No idea why the function name is blank and there are no file locations627 const stackTrace = `createEmotionProps@628jsx@629@630finishClassComponent@631updateClassComponent@632beginWork$1@633performUnitOfWork@634workLoopSync@635renderRootSync@636performSyncWorkOnRoot@637scheduleUpdateOnFiber@638updateContainer@`639 expect(getLabelFromStackTrace(stackTrace)).toBeUndefined()640 })641 // No SSR stack trace since this comes from a Gatsby project...
App.js
Source:App.js
1import React, { Component } from 'react';2import './App.css';3class App extends Component {4 constructor(props) {5 super(props);6 this.state = {7 recipes: [8 {9 id: 0,10 title: "Spaghetti",11 instructions: "Open jar of Spaghetti sauce. Bring to simmer. Boil water. Cook pasta until done. Combine pasta and sauce",12 ingredients: ["pasta", "8 cups water", "1 box spaghetti"],13 img: "spaghetti.jpg"14 },15 {16 id: 1,17 title: "Milkshake",18 instructions: "Combine ice cream and milk. Blend until creamy",19 ingredients: ["2 Scoops Ice cream", "8 ounces milk"],20 img: "milkshake.jpg"21 },22 {23 id: 2,24 title: "Avocado Toast",25 instructions: "Toast bread. Slice avocado and spread on bread. Add salt, oil, and pepper to taste.",26 ingredients: ["2 slices of bread", "1 avocado", "1 tablespoon olive oil", "1 pinch of salt", "pepper"],27 img: "avocado_toast.jpg"28 }29 ],30 nextRecipeId: 3,31 }32 this.handleSave = this.handleSave.bind(this);33 }34 handleSave(recipe) {35 this.setState((prevState, props) => {36 const newRecipe = { ...recipe, id: this.state.nextRecipeId };37 return {38 nextRecipeId: prevState.nextRecipeId + 1,39 recipes: [...this.state.recipes, newRecipe],40 }41 });42 }43 // EXERCISE 1 : Form component is where user enter recipe's data. Its initial state is empty 44 // string for title, instructions, img and an empty array for ingredients45 // it has onSubmit event, onClick event, and several onChange events with associated function calls46 // onSubmit event triggers a onSave call (passed as prop from App component) and state is updated.47 // onClick event reset the form.48 // onChange event set the state to the values entered by the user as new recipe.49 // onSave passed from App component through the props is linked to this.handleSave in the App component50 // By submitting the form, onSave function call allows App component, parent of Form, to acquire the new51 // recipe values and add it to its state.recipes array. The event happens in Form component, but it 52 // is being implemented in App component. Remember data travels down the tree only, not upstream or between53 // siblings. In order for the new recipe to be listed, the new recipe values must pass to List54 // component. It cannot happen directly. So, Form "communicate" the new recipe values to App through onSave call55 // then App component passes its new state (with the new recipe) downstream as prop to List component56 // ** HOW DO YOU PASS AS PROP this.handleSave in App component to onSave in FORM COMPONENT?57 // EXERCISE 2 : this.state.recipes contains the data you do want to pass to List component.58 //in the List component you can access it through props.recipes59 // in the List component you generate a JSX element by using map method on recipes object60 render() {61 return (62 <div className="App">63 <h1>My Recipes</h1>64 <Form /> {/*Modify it here EXERCISE 1 */}65 <hr />66 <List /> {/*Modify it here EXERCISE 2 */}67 </div>68 );69 }70}71 {/*go to line 187 for EXERCISE 3 */}72function List(props) {73 //try <Recipe key={recipe.id} {...recipe} /> //spread operator instead of 74 // passing one-by-one property75 //In return statement you wrap Recipe JSX component with div class 'recipe-list'76 const recipesJSX = props.recipes.map((recipe, index) => (77 <Recipe key={recipe.id} title={recipe.title} img={recipe.img}78 instructions={recipe.instructions} id={recipe.id}79 ingredients={recipe.ingredients} />80 ));81 return (82 <div className="recipe-list">83 {recipesJSX}84 </div>85 );86}87function Recipe(props) {88 const { title, img, instructions, id } = props; // destructuring the props 89 // wrapping each ingredient with li HTML elements and returning them90 // with an implicit return inside an arrow function.91 // note that the unique key is the index, which is not optimal92 const ingredientsJSX = props.ingredients.map((ing, index) => (93 <li key={index}>{ing}</li>94 ));95 return (96 <div className="recipe-card">97 <div className="recipe-card-img">98 <img src={img} alt={title} />99 </div>100 <div className="recipe-card-content">101 <h3 className="recipe-title">{title}</h3>102 <h4>Ingredients:</h4>103 <ul>104 {ingredientsJSX}105 </ul>106 <h4>Instructions:</h4>107 <p>{instructions}</p>108 <button type="button" onClick={() => alert(`Are you sure to DELETE recipe number ${id + 1}?`)}>DELETE</button>109 </div>110 </div>111 );112}113class Form extends Component {114 115 constructor(props) {116 super(props);117 this.state = {118 title: '',119 instructions: "",120 ingredients: [''],121 img: ''122 };123 124 //this.handleChange = this.handleChange.bind(this);125 this.handleNewIngredient = this.handleNewIngredient.bind(this);126 this.handleChangeIng = this.handleChangeIng.bind(this);127 this.handleSubmit = this.handleSubmit.bind(this);128 }129 130 // handleChange(e) {131 // console.log(e.target.value);132 // this.setState({[e.target.name]: e.target.value});133 // }134 // Pay ATTENTION: arrow functions DO NOT HAVE their own "this" : no need to bind135 handleChangeTitle= (e) => {136 console.log(e.target.value);137 this.setState({title: e.target.value})138 }139 handleChangeIns = (e) => {140 console.log(e.target.value);141 this.setState({instructions: e.target.value})142 }143 handleChangeImg = (e) => {144 console.log(e.target.value);145 this.setState({img: e.target.value})146 }147 148 handleNewIngredient(e) {149 const {ingredients} = this.state;150 this.setState({ingredients: [...ingredients, '']});151 }152 153 handleChangeIng(e) {154 const index = Number(e.target.name.split('-')[1]);155 const ingredients = this.state.ingredients.map((ing, i) => (156 i === index ? e.target.value : ing157 ));158 this.setState({ingredients});159 }160 // EXERCISE 3: handleReset call must set state to its initial state as 161 // when the constructor of class Form is called (look above)162 // You should use this.setState( {.....})163 handleReset = (e) => {164 e.preventDefault();165 alert(`Are you sure you want to reset?`)166 {/*Modify it here EXERCISE 3 */}167}168 handleSubmit(e) {169 e.preventDefault();170 this.props.onSave({...this.state});171 this.setState({172 title: '',173 instructions: '',174 ingredients: [''],175 img: ''176 })177 }178 179 render() {180 const {title, instructions, img, ingredients} = this.state;181 let inputs = ingredients.map((ing, i) => (182 <div183 className="recipe-form-line"184 key={`ingredient-${i}`}185 >186 <label>{i+1}.187 <input188 type="text"189 name={`ingredient-${i}`}190 value={ing}191 size={45}192 autoComplete="off"193 placeholder=" Ingredient"194 onChange={this.handleChangeIng} />195 </label>196 </div>197 ));198 199 return (200 <div className="recipe-form-container">201 <form className='recipe-form' onSubmit={this.handleSubmit}>202 <button203 type="button"204 className="close-button"205 onClick={this.handleReset}206 >207 X208 </button>209 <div className='recipe-form-line'>210 <label htmlFor='recipe-title-input'>Title</label>211 <input212 id='recipe-title-input'213 key='title'214 name='title'215 type='text'216 value={title}217 size={42}218 autoComplete="off"219 onChange={this.handleChangeTitle}/>220 </div>221 <label222 htmlFor='recipe-instructions-input'223 style={{marginTop: '5px'}}224 >225 Instructions226 </label>227 <textarea228 key='instructions'229 id='recipe-instructions-input'230 type='Instructions'231 name='instructions'232 rows='8'233 cols='50'234 autoComplete='off'235 value={instructions}236 onChange={this.handleChangeIns}/>237 {inputs}238 <button239 type="button"240 onClick={this.handleNewIngredient}241 className="buttons"242 >243 +244 </button>245 <div className='recipe-form-line'>246 <label htmlFor='recipe-img-input'>Image Url</label>247 <input248 id='recipe-img-input'249 type='text'250 placeholder=''251 name='img'252 value={img}253 size={36}254 autoComplete='off'255 onChange={this.handleChangeImg} />256 </div>257 <button258 type="submit"259 className="buttons"260 style={{alignSelf: 'flex-end', marginRight: 0}}261 >262 SAVE263 </button>264 </form>265 </div>266 )267 }268}269export default App;270/**271 * THIS IS THE ERROR YOU SHOULD RECEIVE WHEN TRYING TO RUN THE APP AS IT IS NOW:272 * It points to line 89: cannot run map on an undefined value: what is the object273 * that map is expecting to execute on??274 * 275 * App.js:89 Uncaught TypeError: Cannot read properties of undefined (reading 'map')276 at List (App.js:89:1)277 at renderWithHooks (react-dom.development.js:14985:1)278 at mountIndeterminateComponent (react-dom.development.js:17811:1)279 at beginWork (react-dom.development.js:19049:1)280 at HTMLUnknownElement.callCallback (react-dom.development.js:3945:1)281 at Object.invokeGuardedCallbackDev (react-dom.development.js:3994:1)282 at invokeGuardedCallback (react-dom.development.js:4056:1)283 at beginWork$1 (react-dom.development.js:23964:1)284 at performUnitOfWork (react-dom.development.js:22776:1)285 at workLoopSync (react-dom.development.js:22707:1)286List @ App.js:89287renderWithHooks @ react-dom.development.js:14985288mountIndeterminateComponent @ react-dom.development.js:17811289beginWork @ react-dom.development.js:19049290callCallback @ react-dom.development.js:3945291invokeGuardedCallbackDev @ react-dom.development.js:3994292invokeGuardedCallback @ react-dom.development.js:4056293beginWork$1 @ react-dom.development.js:23964294performUnitOfWork @ react-dom.development.js:22776295workLoopSync @ react-dom.development.js:22707296renderRootSync @ react-dom.development.js:22670297performSyncWorkOnRoot @ react-dom.development.js:22293298scheduleUpdateOnFiber @ react-dom.development.js:21881299updateContainer @ react-dom.development.js:25482300(anonymous) @ react-dom.development.js:26021301unbatchedUpdates @ react-dom.development.js:22431302legacyRenderSubtreeIntoContainer @ react-dom.development.js:26020303render @ react-dom.development.js:26103304./src/index.js @ index.js:7305options.factory @ react refresh:6306__webpack_require__ @ bootstrap:24307(anonymous) @ startup:7308(anonymous) @ startup:7309react-dom.development.js:20085 The above error occurred in the <List> component:310 at List (http://localhost:3003/static/js/bundle.js:118:28)311 at div312 at App (http://localhost:3003/static/js/bundle.js:28:5)313Consider adding an error boundary to your tree to customize error handling behavior.314Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.315logCapturedError @ react-dom.development.js:20085316update.callback @ react-dom.development.js:20118317callCallback @ react-dom.development.js:12318318commitUpdateQueue @ react-dom.development.js:12339319commitLifeCycles @ react-dom.development.js:20736320commitLayoutEffects @ react-dom.development.js:23426321callCallback @ react-dom.development.js:3945322invokeGuardedCallbackDev @ react-dom.development.js:3994323invokeGuardedCallback @ react-dom.development.js:4056324commitRootImpl @ react-dom.development.js:23151325unstable_runWithPriority @ scheduler.development.js:468326runWithPriority$1 @ react-dom.development.js:11276327commitRoot @ react-dom.development.js:22990328performSyncWorkOnRoot @ react-dom.development.js:22329329scheduleUpdateOnFiber @ react-dom.development.js:21881330updateContainer @ react-dom.development.js:25482331(anonymous) @ react-dom.development.js:26021332unbatchedUpdates @ react-dom.development.js:22431333legacyRenderSubtreeIntoContainer @ react-dom.development.js:26020334render @ react-dom.development.js:26103335./src/index.js @ index.js:7336options.factory @ react refresh:6337__webpack_require__ @ bootstrap:24338(anonymous) @ startup:7339(anonymous) @ startup:7340App.js:89 Uncaught TypeError: Cannot read properties of undefined (reading 'map')341 at List (App.js:89:1)342 at renderWithHooks (react-dom.development.js:14985:1)343 at mountIndeterminateComponent (react-dom.development.js:17811:1)344 at beginWork (react-dom.development.js:19049:1)345 at HTMLUnknownElement.callCallback (react-dom.development.js:3945:1)346 at Object.invokeGuardedCallbackDev (react-dom.development.js:3994:1)347 at invokeGuardedCallback (react-dom.development.js:4056:1)348 at beginWork$1 (react-dom.development.js:23964:1)349 at performUnitOfWork (react-dom.development.js:22776:1)350 at workLoopSync (react-dom.development.js:22707:1)351List @ App.js:89352renderWithHooks @ react-dom.development.js:14985353mountIndeterminateComponent @ react-dom.development.js:17811354beginWork @ react-dom.development.js:19049355callCallback @ react-dom.development.js:3945356invokeGuardedCallbackDev @ react-dom.development.js:3994357invokeGuardedCallback @ react-dom.development.js:4056358beginWork$1 @ react-dom.development.js:23964359performUnitOfWork @ react-dom.development.js:22776360workLoopSync @ react-dom.development.js:22707361renderRootSync @ react-dom.development.js:22670362performSyncWorkOnRoot @ react-dom.development.js:22293363scheduleUpdateOnFiber @ react-dom.development.js:21881364updateContainer @ react-dom.development.js:25482365(anonymous) @ react-dom.development.js:26021366unbatchedUpdates @ react-dom.development.js:22431367legacyRenderSubtreeIntoContainer @ react-dom.development.js:26020368render @ react-dom.development.js:26103369./src/index.js @ index.js:7370options.factory @ react refresh:6371__webpack_require__ @ bootstrap:24372(anonymous) @ startup:7373(anonymous) @ startup:7...
react-filber-beginwork.js
Source:react-filber-beginwork.js
...7 */8export function beginWork(current, workInProgress) {9 switch(workInProgress.tag) {10 case IndeterminateComponent: //å½æ°ç»ä»¶11 return mountIndeterminateComponent(12 current,13 workInProgress,14 workInProgress.type // ç»ä»¶15 )16 default:17 break;18 }19}20/**21 *22 * @param {*} current ä¸ä¸ä¸ªfiber å次æè½½ çæ¶ånull23 * @param {*} workInProgress è¿ä¸æ¬¡æ£å¨æ建ä¸çfiber24 * @param {*} Component //å½åç»ä»¶25 */26function mountIndeterminateComponent(current, workInProgress, Component) {27 // value å°±æ¯ç»ä»¶çè¿åå¼28 let children = renderWithHooks(29 current,30 workInProgress,31 Component32 );33 console.log('children', children);34 window.counter = children;35 workInProgress.tag = FunctionComponent;36 // æ ¹æ®å¿åçæè
说ä¸é¢è¿åçèæDOmï¼æ建Fiberåæ 37 reconcileChildren(current, workInProgress, children);38 return null;39}40/**...
config.js
Source:config.js
1import React from 'react';2import Router, { withRouter } from 'next/router';3import { configure } from '@storybook/react';4import { action } from '@storybook/addon-actions';5const requireComponents = require.context('../components/', true, /stories\.js$/);6function loadStories() {7 requireComponents.keys().forEach(requireComponents);8 // Add any new component folders with stories here, using the patterns defined above9}10/* ********************************************************** */11/* Necessary to mock Next's router */12// https://github.com/zeit/next.js/issues/1827#issuecomment-32372122113const actionWithPromise = () => {14 action('clicked link')();15 // we need to return promise because it is needed by Link.linkClicked16 return new Promise((resolve, reject) => reject());17};18const mockedRouter = {19 push: actionWithPromise,20 replace: actionWithPromise,21 prefetch: () => {},22 route: '/mock-route',23};24Router.router = mockedRouter;25withRouter = Component => props => <Component {...props} router={mockedRouter} />26/*27 Commenting out `withRouter` leads to red screen of death in Storybook with:28 Cannot read property 'route' of undefined29 TypeError: Cannot read property 'route' of undefined30 at OutboundLink (http://localhost:9001/static/preview.bundle.js:51877:81)31 at mountIndeterminateComponent (http://localhost:9001/static/preview.bundle.js:32410:13)32 at beginWork (http://localhost:9001/static/preview.bundle.js:32850:14)33 at performUnitOfWork (http://localhost:9001/static/preview.bundle.js:34893:12)34 at workLoop (http://localhost:9001/static/preview.bundle.js:34932:24)35 at renderRoot (http://localhost:9001/static/preview.bundle.js:34972:7)36 at performWorkOnRoot (http://localhost:9001/static/preview.bundle.js:35590:22)37 at performWork (http://localhost:9001/static/preview.bundle.js:35512:7)38 at performSyncWork (http://localhost:9001/static/preview.bundle.js:35484:3)39 at requestWork (http://localhost:9001/static/preview.bundle.js:35384:5)40*/41/* ********************************************************** */...
beginWork.js
Source:beginWork.js
...11 // ä¸ç¡®å®ç»ä»¶12 case IndeterminateComponent: {13 const elementType = workInProgress.elementType;14 // å è½½åå§ç»ä»¶15 return mountIndeterminateComponent(16 current,17 workInProgress,18 elementType,19 renderExpirationTime,20 );21 }22 // å½æ°ç»ä»¶23 case FunctionComponent: {24 const Component = workInProgress.type;25 const unresolvedProps = workInProgress.pendingProps;26 const resolvedProps =27 workInProgress.elementType === Component28 ? unresolvedProps29 : resolveDefaultProps(Component, unresolvedProps);...
ReactFiberWorkLoop.js
Source:ReactFiberWorkLoop.js
1import { renderWithHooks } from "./ReactFiberHooks";2import { FunctionComponent, HostComponent, IndeterminateComponent } from "./ReactWorkTags";3let workInProgress = null4function mountIndeterminateComponent(current, workInProgress, Component) {5 let children = renderWithHooks(6 current,7 workInProgress,8 Component9 )10 console.log(children);11 workInProgress.tag = FunctionComponent12 reconcileChildren(current, workInProgress, children)13 return workInProgress.child;14}15function beginWork (current, workInProgress) {16 switch (workInProgress.tag) {17 case IndeterminateComponent:18 return mountIndeterminateComponent(19 current,20 workInProgress,21 workInProgress.type // Counter22 );23 default:24 break; 25 }26}27function performUnitOfWork(unitOfWork) {28 debugger29 var current = unitOfWork.alternate;30 return beginWork(current, unitOfWork)31}32function workLoop() {...
mountIndeterminateComponent.js
Source:mountIndeterminateComponent.js
1// ...2function mountIndeterminateComponent(3 _current,4 workInProgress,5 Component,6 renderExpirationTime,7 ) {8 9 /** çç¥åå¤é¶æ®µä»£ç **/ 10 // ...11 12 // valueå°±æ¯æ¸²æåºæ¥çAPPç»ä»¶13 let value;14 15 value = renderWithHooks(16 null,...
ReactFiberBeginWork.js
Source:ReactFiberBeginWork.js
...5 */6function beginWork(current, workInProgress) {7 switch(workInProgress.tag) {8 case IndeterminateComponent: 9 return mountIndeterminateComponent(10 current,11 workInProgress,12 workInProgress.type13 );14 default:15 break;16 }17}18function mountIndeterminateComponent(current, workInProgress,Component) {19 value = renderWithHooks(20 current, 21 workInProgress,22 Component23 )...
Using AI Code Generation
1const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');2const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');3const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');4const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');5const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');6const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');7const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');8const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');9const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');10const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');11const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');12const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');13const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');14const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');15const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');16const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');
Using AI Code Generation
1const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');2const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');3const { chromium } = require('playwright');4(async () => {5 const browser = await chromium.launch();6 const page = await browser.newPage();7 const app = await mountIndeterminateComponent(page, 'test.js');8 await app.evaluate(() => {9 console.log('hello');10 });11 await browser.close();12})();13const { mountIndeterminateComponent } = require('playwright/lib/server/inspector');14const { chromium } = require('playwright');15(async () => {16 const browser = await chromium.launch();17 const page = await browser.newPage();18 const app = await mountIndeterminateComponent(page, 'test.js');19 await app.evaluate(() => {20 console.log('hello');21 });22 await browser.close();23})();
Using AI Code Generation
1const { mountIndeterminateComponent } = require('playwright/lib/server/webkit/wkPage');2const { Page } = require('playwright/lib/server/webkit/wkPage');3const { WKSession } = require('playwright/lib/server/webkit/wkConnection');4const { WKConnection } = require('playwright/lib/server/webkit/wkConnection');5const { WKTransport } = require('playwright/lib/server/webkit/wkTransport');6const { WKBrowser } = require('playwright/lib/server/webkit/wkBrowser');7const { WKBrowserContext } = require('playwright/lib/server/webkit/wkBrowser');8const { WKPage } = require('playwright/lib/server/webkit/wkPage');9const { WKElementHandle } = require('playwright/lib/server/webkit/wkElementHandle');10const { WKFrame } = require('playwright/lib/server/webkit/wkFrame');11const { WKExecutionContext } = require('playwright/lib/server/webkit/wkExecutionContext');12const { WKWorker } = require('playwright/lib/server/webkit/wkWorker');13const { WKBindingCall } = require('playwright/lib/server/webkit/wkBindingCall');14const { WKFileChooser } = require('playwright/lib/server/webkit/wkFileChooser');15const { WKDownload } = require('playwright/lib/server/webkit/wkDownload');16const { WKWebSocket } = require('playwright/lib/server/webkit/wkWebSocket');17const { WKWebSocketTransport } = require('playwright/lib/server/webkit/wkWebSocketTransport');18const { WKSessionPool } = require('playwright/lib/server/webkit/wkBrowser');19const { WKBrowserServer } = require('playwright/lib/server/webkit/wkBrowserServer');20const { WebKit } = require('playwright/lib/server/webkit/webkit');21const { BrowserType } = require('playwright/lib/server/browserType');22const { BrowserContext } = require('playwright/lib/server/browserContext');23const { BrowserServer } = require('playwright/lib/server/browserServer');24const { Browser } = require('playwright/lib/server/browser');25const { Page } = require('playwright/lib/server/page');26const { Frame } = require('playwright/lib/server/frame');27const { Dialog } = require('playwright/lib/server/dialog');28const { Worker } = require('playwright/lib/server/worker');29const { JSHandle } = require('playwright/lib/server/jsHandle');30const {
Using AI Code Generation
1const { mountIndeterminateComponent } = require('playwright/lib/server/webkit/wkPage.js');2const { Page } = require('playwright');3const path = require('path');4async function main() {5 const page = await Page.create();6 const componentPath = path.resolve(__dirname, './component.js');7 const component = await mountIndeterminateComponent(page, componentPath);8 console.log(await component.evaluate((component) => component.test));9}10main();11const component = {12};13module.exports = component;14const { chromium } = require('playwright');15(async () => {16 const browser = await chromium.launch();17 const page = await browser.newPage();18 await page.screenshot({ path: 'example.png' });19 await browser.close();20})();21const { chromium } = require('playwright');22(async () => {23 const browser = await chromium.launch({ headless: false });24 const page = await browser.newPage();25 await page.screenshot({ path: 'example.png' });26 await browser.close();27})();28const { chromium } = require('playwright');29(async () => {30 const browser = await chromium.launch({ headless: false, slowMo: 1000 });31 const page = await browser.newPage();32 await page.screenshot({ path: 'example.png' });33 await browser.close();34})();35const { chromium } = require('playwright');36(async () => {37 const browser = await chromium.launch({38 proxy: {
Using AI Code Generation
1const { mountIndeterminateComponent } = require('playwright/lib/server/inspector/inspector.js');2const { default: React } = require('react');3const { render } = require('react-dom');4const { default: App } = require('./App.js');5const app = mountIndeterminateComponent(render, React.createElement(App));6app.waitForSelector('text=Hello');7const { default: React } = require('react');8const { default: ReactDOM } = require('react-dom');9const { default: Child } = require('./Child.js');10const App = () => {11 const [text, setText] = React.useState('Hello');12 return (13 <Child text={text} />14 <button onClick={() => setText('World')}>Change Text</button>15 );16};17module.exports = App;18const { default: React } = require('react');19const Child = ({ text }) => {20 return <div>{text}</div>;21};22module.exports = Child;23 4 | app.waitForSelector('text=Hello');24> 6 | test('Hello World', async ({ page }) => {25 8 | await page.waitForSelector('text=Hello');26 9 | });27 at Object.<anonymous> (test.js:6:6)28const { mountIndeterminateComponent } = require('playwright/lib/server/inspector/inspector.js');29const { default: React } = require('react');30const { render } = require('react-dom');
Using AI Code Generation
1const { mountIndeterminateComponent } = require('@playwright/test/lib/server/kit');2const { test } = require('@playwright/test');3test('test', async ({ page }) => {4 const { component, waitForEvent } = await mountIndeterminateComponent(page, 'my-component');5 await waitForEvent('my-event');6 await component.evaluate(() => component.doSomething());7});8const { mountIndeterminateComponent } = require('@playwright/test/lib/server/kit');9const { test } = require('@playwright/test');10test('test', async ({ page }) => {11 const { component, waitForEvent } = await mountIndeterminateComponent(page, 'my-component');12 await waitForEvent('my-event');13 await component.evaluate(() => component.doSomething());14});15const { mountIndeterminateComponent } = require('@playwright/test/lib/server/kit');16const { test } = require('@playwright/test');17test('test', async ({ page }) => {18 const { component, waitForEvent } = await mountIndeterminateComponent(page, 'my-component');19 await waitForEvent('my-event');20 await component.evaluate(() => component.doSomething());21});22const { mountIndeterminateComponent } = require('@playwright/test/lib/server/kit');23const { test } = require('@playwright/test');24test('test', async ({ page }) => {25 const { component, waitForEvent } = await mountIndeterminateComponent(page, 'my-component');26 await waitForEvent('my-event');27 await component.evaluate(() => component.doSomething());28});29const { mountIndeterminateComponent } = require('@playwright/test/lib/server/kit');30const { test } = require('@playwright/test');31test('test', async ({ page }) => {32 const { component, waitForEvent } = await mountIndeterminateComponent(page, 'my-component');33 await waitForEvent('my-event');34 await component.evaluate(() => component.doSomething());35});
Using AI Code Generation
1const { mountIndeterminateComponent } = require('playwright/lib/server/webkit/wkPage');2const { Page } = require('playwright');3const { React } = require('playwright/lib/server/webkit/wkPage');4const { ReactTestRenderer } = require('playwright/lib/server/webkit/wkPage');5const { ReactTestComponent } = require('playwright/lib/server/webkit/wkPage');6const page = await browser.newPage();7const component = React.createElement('div', { id: 'test' }, 'Test');8const componentHandle = await mountIndeterminateComponent(page, component);9const element = await componentHandle.$('#test');10const text = await element.innerText();11expect(text).toBe('Test');12await componentHandle.unmount();13const componentHandle1 = await mountIndeterminateComponent(page, component);14expect(componentHandle1).toBeNull();15await componentHandle.unmount();16const componentHandle2 = await mountIndeterminateComponent(page, component);17expect(componentHandle2).toBeNull();
Using AI Code Generation
1import { mountIndeterminateComponent, unmountComponentAtNode, renderToString, renderToStaticMarkup } from '@playwright/test';2const wrapper = mountIndeterminateComponent(<MyComponent />);3unmountComponentAtNode(wrapper);4const html = renderToString(<MyComponent />);5const html = renderToStaticMarkup(<MyComponent />);6 ✓ should work (1s)7 ✓ should work for a second test (1s)8 ✓ should work for a third test (1s)9 ✓ should work for a fourth test (1s)10 ✓ should work for a fifth test (1s)11 5 passed (4s)12 ✓ should work for a fourth test (1s)13 1 passed (1s)
Using AI Code Generation
1const { mountIndeterminateComponent } = require('playwright/lib/server/dom');2const { React } = require('playwright/lib/server/dom/react');3const { createElement } = require('playwright/lib/server/dom/react');4const { render } = require('playwright/lib/server/dom/react');5const { Component } = require('playwright/lib/server/dom/react');6const { useState } = require('playwright/lib/server/dom/react');7class Test extends Component {8 constructor(props) {9 super(props);10 this.state = {11 };12 }13 render() {14 return createElement('div', {}, this.state.count);15 }16}17const component = render(createElement(Test), document.body);18mountIndeterminateComponent(component);19const { test } = require('@playwright/test');20const { expect } = require('@playwright/test');21test('should mount', async ({ page }) => {22 const text = await page.textContent('div');23 expect(text).toBe('0');24});25FAIL test.spec.js (9.1s)26 5: test('should mount', async ({ page }) => {27 7: const text = await page.textContent('div');28 Timeout of 5000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/username/Documents/Projects/Playwright/test.spec.js)29 at Object.<anonymous> (/Users/username/Documents/Projects/Playwright/test.spec.js:6:5)
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!