8000 Expose mechanism to monitor render events (#2655) · JavaScriptExpert/next.js@6e44cde · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit 6e44cde

Browse files
kpdeckertimneutkens
authored andcommitted
Expose mechanism to monitor render events (vercel#2655)
* Allow custom clientBootstrap entrypoint This allows for customization of the client global bootstrap. * Expose render event emitter to client * Include client entry point in npm package
1 parent 1e15105 commit 6e44cde

File tree

4 files changed

+9
-10
lines changed

4 files changed

+9
-10
lines changed

client.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('./dist/client/index')

client/index.js

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ let ErrorDebugComponent
5656
let Component
5757
let stripAnsi = (s) => s
5858

59+
export const emitter = new EventEmitter()
60+
5961
export default async ({ ErrorDebugComponent: passedDebugComponent, stripAnsi: passedStripAnsi } = {}) => {
6062
// Wait for all the dynamic chunks to get loaded
6163
for (const chunkName of chunks) {
@@ -80,8 +82,6 @@ export default async ({ ErrorDebugComponent: passedDebugComponent, stripAnsi: pa
8082
err
8183
})
8284

83-
const emitter = new EventEmitter()
84-
8585
router.subscribe(({ Component, props, hash, err }) => {
8686
render({ Component, props, err, hash, emitter })
8787
})
@@ -132,7 +132,7 @@ export async function renderError (error) {
132132
}
133133
}
134134

135-
async function doRender ({ Component, props, hash, err, emitter }) {
135+
async function doRender ({ Component, props, hash, err, emitter: emitterProp = emitter }) {
136136
if (!props && Component &&
137137
Component !== ErrorComponent &&
138138
lastAppProps.Component === ErrorComponent) {
@@ -141,24 +141,20 @@ async function doRender ({ Component, props, hash, err, emitter }) {
141141
props = await loadGetInitialProps(Component, { err, pathname, query, asPath })
142142
}
143143

144-
if (emitter) {
145-
emitter. 10000 emit('before-reactdom-render', { Component, ErrorComponent })
146-
}
147-
148144
Component = Component || lastAppProps.Component
149145
props = props || lastAppProps.props
150146

151147
const appProps = { Component, props, hash, err, router, headManager }
152148
// lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.
153149
lastAppProps = appProps
154150

151+
emitterProp.emit('before-reactdom-render', { Component, ErrorComponent, appProps })
152+
155153
// We need to clear any existing runtime error messages
156154
ReactDOM.unmountComponentAtNode(errorContainer)
157155
renderReactElement(createElement(App, appProps), appContainer)
158156

159-
if (emitter) {
160-
emitter.emit('after-reactdom-render', { Component, ErrorComponent })
161-
}
157+
emitterProp.emit('after-reactdom-render', { Component, ErrorComponent, appProps })
162158
}
163159

164160
let isInitialRender = true

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"files": [
1111
"dist",
1212
"babel.js",
13+
"client.js",
1314
"link.js",
1415
"css.js",
1516
"head.js",

server/build/webpack.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export default async function createCompiler (dir, { buildId, dev = false, quiet
4343
const entries = {
4444
'main.js': [
4545
...defaultEntries,
46+
...config.clientBootstrap || [],
4647
mainJS
4748
]
4849
}

0 commit comments

Comments
 (0)
0