firebase-tools
Version:
Command-Line Interface for Firebase
73 lines (72 loc) • 2.44 kB
JavaScript
var url = require("url");
var extractTriggers = require("./extractTriggers");
var EXIT = function () {
process.exit(0);
};
const dynamicImport = new Function("modulePath", "return import(modulePath)");
async function loadModule(packageDir) {
try {
return require(packageDir);
}
catch (e) {
if (e.code === "ERR_REQUIRE_ESM") {
const modulePath = require.resolve(packageDir);
const moduleURL = url.pathToFileURL(modulePath).href;
return await dynamicImport(moduleURL);
}
throw e;
}
}
(async function () {
if (!process.send) {
console.warn("Could not parse function triggers (process.send === undefined).");
process.exit(1);
}
var packageDir = process.argv[2];
if (!packageDir) {
process.send({ error: "Must supply package directory for functions trigger parsing." }, EXIT);
return;
}
var mod;
var triggers = [];
try {
mod = await loadModule(packageDir);
}
catch (e) {
if (e.code === "MODULE_NOT_FOUND") {
process.send({
error: "Error parsing triggers: " +
e.message +
'\n\nTry running "npm install" in your functions directory before deploying.',
}, EXIT);
return;
}
if (/Firebase config variables are not available/.test(e.message)) {
process.send({
error: "Error occurred while parsing your function triggers. " +
'Please ensure you have the latest firebase-functions SDK by running "npm i --save firebase-functions@latest" inside your functions folder.\n\n' +
e.stack,
}, EXIT);
return;
}
process.send({
error: "Error occurred while parsing your function triggers.\n\n" + e.stack,
}, EXIT);
return;
}
try {
extractTriggers(mod, triggers);
}
catch (err) {
if (/Maximum call stack size exceeded/.test(err.message)) {
process.send({
error: "Error occurred while parsing your function triggers. Please ensure that index.js only " +
"exports cloud functions.\n\n",
}, EXIT);
return;
}
process.send({ error: err.message }, EXIT);
}
process.send({ triggers: triggers }, EXIT);
})();
;