Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Merge branch 'canary' of https://github.com/hanneslund/next.js into a…
…pi-switch-runtime
  • Loading branch information
Hannes Bornö
Hannes Bornö committed Aug 16, 2022
commit 799b1df118be4570a022c5f6e95eaff689b4f65d
56 changes: 16 additions & 40 deletions packages/next/build/webpack/plugins/middleware-plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,12 @@ function getCreateAssets(params: {
}) {
const { compilation, metadataByEntry } = params
return (assets: any) => {
const middlewareManifest: MiddlewareManifest = {
sortedMiddleware: [],
middleware: {},
functions: {},
version: 1,
}
for (const entrypoint of compilation.entrypoints.values()) {
if (!entrypoint.name) {
continue
Expand Down Expand Up @@ -703,46 +709,16 @@ export default class MiddlewarePlugin {
this.dev = dev
}

const exportsInfo = moduleGraph.getExportsInfo(entryModule)
for (const exportName of usingIndirectEval) {
if (exportsInfo.getUsed(exportName, runtime) !== wp.UsageState.Unused) {
return true
}
}

return false
}

function getCreateAssets(params: {
compilation: webpack5.Compilation
metadataByEntry: Map<string, EntryMetadata>
}) {
const { compilation, metadataByEntry } = params
return (assets: any) => {
const middlewareManifest: MiddlewareManifest = {
sortedMiddleware: [],
middleware: {},
functions: {},
version: 1,
}

for (const entrypoint of compilation.entrypoints.values()) {
if (!entrypoint.name) {
continue
}

// There should always be metadata for the entrypoint.
const metadata = metadataByEntry.get(entrypoint.name)
const page =
metadata?.edgeMiddleware?.page ||
metadata?.edgeSSR?.page ||
metadata?.edgeApiFunction?.page
if (!page) {
continue
}

const { namedRegex } = getNamedMiddlewareRegex(page, {
catchAll: !metadata.edgeSSR && !metadata.edgeApiFunction,
apply(compiler: webpack.Compiler) {
compiler.hooks.compilation.tap(NAME, (compilation, params) => {
const { hooks } = params.normalModuleFactory
/**
* This is the static code analysis phase.
*/
const codeAnalyzer = getCodeAnalyzer({
dev: this.dev,
compiler,
compilation,
})
hooks.parser.for('javascript/auto').tap(NAME, codeAnalyzer)
hooks.parser.for('javascript/dynamic').tap(NAME, codeAnalyzer)
Expand Down
65 changes: 19 additions & 46 deletions packages/next/server/dev/on-demand-entry-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -210,52 +210,9 @@ class Invalidator {
for (const key of COMPILER_KEYS) {
this.building.delete(key)

let entryAdded = false

const addPageEntry = (type: 'client' | 'server' | 'edge-server') => {
return new Promise<void>((resolve, reject) => {
if (type === 'server' && entries[`edge-server${page}`]) {
// Runtime switched from edge to server
delete entries[`edge-server${page}`]
} else if (type === 'edge-server' && entries[`server${page}`]) {
// Runtime switched from server to edge
delete entries[`server${page}`]
}
const isServerComponent = serverComponentRegex.test(
pagePathData.absolutePagePath
)
const isInsideAppDir =
appDir && pagePathData.absolutePagePath.startsWith(appDir)

const pageKey = `${type}${pagePathData.page}`

if (entries[pageKey]) {
entries[pageKey].dispose = false
entries[pageKey].lastActiveTime = Date.now()
if (entries[pageKey].status === BUILT) {
resolve()
return
}
} else {
if (type === 'client' && (isServerComponent || isInsideAppDir)) {
// Skip adding the client entry here.
} else {
entryAdded = true
entries[pageKey] = {
absolutePagePath: pagePathData.absolutePagePath,
bundlePath: pagePathData.bundlePath,
dispose: false,
lastActiveTime: Date.now(),
status: ADDED,
}
}
}

doneCallbacks!.once(pageKey, (err: Error) => {
if (err) return reject(err)
resolve()
})
})
if (this.rebuildAgain.has(key)) {
rebuild.push(key)
this.rebuildAgain.delete(key)
}
}
this.invalidate(rebuild)
Expand Down Expand Up @@ -580,6 +537,22 @@ export function onDemandEntryHandler({
} => {
const entryKey = `${compilerType}${pagePathData.page}`

if (
compilerType === 'server' &&
entries[`${COMPILER_NAMES.edgeServer}${pagePathData.page}`]
) {
// Runtime switched from edge to server
delete entries[`${COMPILER_NAMES.edgeServer}${page}`]
invalidator.invalidate(['edge-server', 'server'])
} else if (
compilerType === 'edge-server' &&
entries[`${COMPILER_NAMES.server}${pagePathData.page}`]
) {
// Runtime switched from server to edge
delete entries[`${COMPILER_NAMES.server}${page}`]
invalidator.invalidate(['edge-server', 'server'])
}

if (entries[entryKey]) {
entries[entryKey].dispose = false
entries[entryKey].lastActiveTime = Date.now()
Expand Down
You are viewing a condensed version of this merge commit. You can view the full changes here.