UNPKG

firebase-tools

Version:
154 lines (153 loc) 6.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = void 0; const zod_1 = require("zod"); const tool_js_1 = require("../../tool.js"); const util_js_1 = require("../../util.js"); const database_js_1 = require("../../../init/features/database.js"); const index_js_1 = require("../../../init/index.js"); exports.init = (0, tool_js_1.tool)({ name: "init", description: "Initializes selected Firebase features in the workspace (Firestore, Data Connect, Realtime Database). All features are optional; provide only the products you wish to set up. " + "You can initialize new features into an existing project directory, but re-initializing an existing feature may overwrite configuration. " + "To deploy the initialized features, run the `firebase deploy` command after `firebase_init` tool.", inputSchema: zod_1.z.object({ features: zod_1.z.object({ database: zod_1.z .object({ rules_filename: zod_1.z .string() .optional() .default("database.rules.json") .describe("The file to use for Realtime Database Security Rules."), rules: zod_1.z .string() .optional() .default(database_js_1.DEFAULT_RULES) .describe("The security rules to use for Realtime Database Security Rules."), }) .optional() .describe("Provide this object to initialize Firebase Realtime Database in this project directory."), firestore: zod_1.z .object({ database_id: zod_1.z .string() .optional() .default("(default)") .describe("The database ID to use for Firestore."), location_id: zod_1.z .string() .optional() .default("nam5") .describe("The GCP region ID to set up the Firestore database."), rules_filename: zod_1.z .string() .optional() .default("firestore.rules") .describe("The file to use for Firestore Security Rules."), rules: zod_1.z .string() .optional() .describe("The security rules to use for Firestore Security Rules. Default to open rules that expire in 30 days."), }) .optional() .describe("Provide this object to initialize Cloud Firestore in this project directory."), dataconnect: zod_1.z .object({ service_id: zod_1.z .string() .optional() .describe("The Firebase Data Connect service ID to initialize. Default to match the current folder name."), location_id: zod_1.z .string() .optional() .default("us-central1") .describe("The GCP region ID to set up the Firebase Data Connect service."), cloudsql_instance_id: zod_1.z .string() .optional() .describe("The GCP Cloud SQL instance ID to use in the Firebase Data Connect service. By default, use <serviceId>-fdc."), cloudsql_database: zod_1.z .string() .optional() .default("fdcdb") .describe("The Postgres database ID to use in the Firebase Data Connect service."), }) .optional() .describe("Provide this object to initialize Firebase Data Connect in this project directory."), storage: zod_1.z .object({ rules_filename: zod_1.z .string() .optional() .default("storage.rules") .describe("The file to use for Firebase Storage Security Rules."), rules: zod_1.z .string() .optional() .describe("The security rules to use for Firebase Storage Security Rules. Default to closed rules that deny all access."), }) .optional() .describe("Provide this object to initialize Firebase Storage in this project directory."), }), }), annotations: { title: "Initialize Firebase Products", readOnlyHint: false, idempotentHint: true, }, _meta: { requiresProject: false, requiresAuth: false, }, }, async ({ features }, { projectId, config, rc }) => { const featuresList = []; const featureInfo = {}; if (features.database) { featuresList.push("database"); featureInfo.database = { rulesFilename: features.database.rules_filename, rules: features.database.rules, writeRules: true, }; } if (features.firestore) { featuresList.push("firestore"); featureInfo.firestore = { databaseId: features.firestore.database_id, locationId: features.firestore.location_id, rulesFilename: features.firestore.rules_filename, rules: features.firestore.rules || "", writeRules: true, indexesFilename: "", indexes: "", writeIndexes: true, }; } if (features.dataconnect) { featuresList.push("dataconnect"); featureInfo.dataconnect = { serviceId: features.dataconnect.service_id || "", locationId: features.dataconnect.location_id || "", cloudSqlInstanceId: features.dataconnect.cloudsql_instance_id || "", cloudSqlDatabase: features.dataconnect.cloudsql_database || "", connectors: [], isNewInstance: false, isNewDatabase: false, schemaGql: [], shouldProvisionCSQL: false, }; } const setup = { config: config === null || config === void 0 ? void 0 : config.src, rcfile: rc === null || rc === void 0 ? void 0 : rc.data, projectId: projectId, features: [...featuresList], featureInfo: featureInfo, }; await (0, index_js_1.actuate)(setup, config, { force: true }); config.writeProjectFile("firebase.json", setup.config); config.writeProjectFile(".firebaserc", setup.rcfile); return (0, util_js_1.toContent)(`Successfully setup the project ${projectId} with those features: ${featuresList.join(", ")}` + " To deploy them, you can run `firebase deploy` in command line."); });