diff --git a/src/lib/functions/registry.js b/src/lib/functions/registry.js index d4332a16ed2..7a55c0576d4 100644 --- a/src/lib/functions/registry.js +++ b/src/lib/functions/registry.js @@ -1,17 +1,19 @@ // @ts-check const { mkdir } = require('fs').promises -const { isAbsolute, join } = require('path') +const { extname, isAbsolute, join } = require('path') const { env } = require('process') const terminalLink = require('terminal-link') -const { NETLIFYDEVERR, NETLIFYDEVLOG, chalk, log, warn } = require('../../utils') +const { NETLIFYDEVERR, NETLIFYDEVLOG, NETLIFYDEVWARN, chalk, log, warn } = require('../../utils') const { getLogMessage } = require('../log') const { NetlifyFunction } = require('./netlify-function') const runtimes = require('./runtimes') const { watchDebounced } = require('./watcher') +const ZIP_EXTENSION = '.zip' + class FunctionsRegistry { constructor({ capabilities, config, isConnected = false, projectRoot, settings, timeouts }) { this.capabilities = capabilities @@ -141,6 +143,13 @@ class FunctionsRegistry { ) } + // This fixes the bug described here https://github.com/netlify/zip-it-and-ship-it/issues/637 + // If the current function's file is a zip bundle, we ignore it and log a helpful message. + if (extname(func.mainFile) === ZIP_EXTENSION) { + log(`${NETLIFYDEVWARN} Skipped bundled function ${chalk.yellow(name)}. Unzip the archive to load it from source.`) + return + } + this.functions.set(name, func) this.buildFunctionAndWatchFiles(func)