101 lines
3.5 KiB
JavaScript
101 lines
3.5 KiB
JavaScript
import { defineNitroPreset, writeFile } from "nitropack/kit";
|
|
import { version as nitroVersion } from "nitropack/meta";
|
|
import { basename, join, relative } from "pathe";
|
|
import { genSafeVariableName } from "knitwork";
|
|
import { stringifyYAML } from "confbox";
|
|
import { updatePackageJSON, writeFirebaseConfig } from "./utils.mjs";
|
|
const firebase = defineNitroPreset(
|
|
{
|
|
entry: `./runtime/firebase-gen-{{ firebase.gen }}`,
|
|
commands: {
|
|
deploy: "npx firebase-tools deploy"
|
|
},
|
|
firebase: {
|
|
// we need this defined here so it's picked up by the template in firebase's entry
|
|
gen: Number.parseInt(process.env.NITRO_FIREBASE_GEN || "") || "default"
|
|
},
|
|
hooks: {
|
|
async compiled(nitro) {
|
|
await writeFirebaseConfig(nitro);
|
|
await updatePackageJSON(nitro);
|
|
},
|
|
"rollup:before": (nitro, rollupConfig) => {
|
|
const _gen = nitro.options.firebase?.gen;
|
|
if (!_gen || _gen === "default") {
|
|
nitro.logger.warn(
|
|
"Neither `firebase.gen` or `NITRO_FIREBASE_GEN` is set. Nitro will default to Cloud Functions 1st generation. It is recommended to set this to the latest generation (currently `2`). Set the version to remove this warning. See https://nitro.build/deploy/providers/firebase for more information."
|
|
);
|
|
nitro.options.firebase = { gen: 1 };
|
|
}
|
|
nitro.options.appConfig.nitro = nitro.options.appConfig.nitro || {};
|
|
nitro.options.appConfig.nitro.firebase = nitro.options.firebase;
|
|
const { serverFunctionName } = nitro.options.firebase;
|
|
if (serverFunctionName && serverFunctionName !== genSafeVariableName(serverFunctionName)) {
|
|
throw new Error(
|
|
`\`firebase.serverFunctionName\` must be a valid JS variable name: \`${serverFunctionName}\``
|
|
);
|
|
}
|
|
rollupConfig.plugins.unshift({
|
|
name: "nitro:firebase",
|
|
transform: (code, id) => {
|
|
if (basename(id).startsWith("firebase-gen-")) {
|
|
return {
|
|
code: code.replace(
|
|
/__firebaseServerFunctionName__/g,
|
|
serverFunctionName || "server"
|
|
),
|
|
map: null
|
|
};
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
},
|
|
{
|
|
name: "firebase",
|
|
url: import.meta.url
|
|
}
|
|
);
|
|
const firebaseAppHosting = defineNitroPreset(
|
|
{
|
|
extends: "node-server",
|
|
serveStatic: true,
|
|
hooks: {
|
|
async compiled(nitro) {
|
|
const serverEntry = join(nitro.options.output.serverDir, "index.mjs");
|
|
await writeFile(
|
|
join(nitro.options.rootDir, ".apphosting/bundle.yaml"),
|
|
stringifyYAML({
|
|
version: "v1",
|
|
runConfig: {
|
|
runCommand: `node ${relative(nitro.options.rootDir, serverEntry)}`,
|
|
...nitro.options.firebase?.appHosting
|
|
},
|
|
metadata: {
|
|
framework: nitro.options.framework.name || "nitropack",
|
|
frameworkVersion: nitro.options.framework.version || "2.x",
|
|
adapterPackageName: "nitropack",
|
|
adapterVersion: nitroVersion
|
|
},
|
|
outputFiles: {
|
|
serverApp: {
|
|
include: [
|
|
relative(nitro.options.rootDir, nitro.options.output.dir)
|
|
]
|
|
}
|
|
}
|
|
}),
|
|
true
|
|
);
|
|
}
|
|
}
|
|
},
|
|
{
|
|
name: "firebase-app-hosting",
|
|
stdName: "firebase_app_hosting",
|
|
url: import.meta.url
|
|
}
|
|
);
|
|
export default [firebase, firebaseAppHosting];
|