firebase-tools 15.1.0 → 15.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/accountExporter.js +3 -5
- package/lib/accountImporter.js +4 -5
- package/lib/api.js +3 -3
- package/lib/apiv2.js +9 -13
- package/lib/appUtils.js +19 -21
- package/lib/appdistribution/client.js +4 -8
- package/lib/appdistribution/distribution.js +4 -4
- package/lib/appdistribution/options-parser-util.js +8 -9
- package/lib/appdistribution/types.js +2 -2
- package/lib/appdistribution/yaml_helper.js +33 -17
- package/lib/apphosting/app.js +8 -13
- package/lib/apphosting/backend.js +34 -24
- package/lib/apphosting/config.js +14 -14
- package/lib/apphosting/githubConnections.js +38 -35
- package/lib/apphosting/localbuilds.js +4 -6
- package/lib/apphosting/repo.js +24 -20
- package/lib/apphosting/rollout.js +12 -5
- package/lib/apphosting/secrets/dialogs.js +9 -9
- package/lib/apphosting/secrets/index.js +9 -11
- package/lib/apphosting/utils.js +2 -3
- package/lib/apphosting/yaml.js +12 -11
- package/lib/apptesting/ensureProjectConfigured.js +1 -2
- package/lib/apptesting/invokeTests.js +2 -3
- package/lib/apptesting/parseTestFiles.js +5 -6
- package/lib/apptesting/types.js +2 -2
- package/lib/archiveDirectory.js +1 -2
- package/lib/auth.js +36 -40
- package/lib/bin/cli.js +2 -3
- package/lib/bin/mcp.js +1 -2
- package/lib/checkMinRequiredVersion.js +1 -2
- package/lib/checkValidTargetFilters.js +1 -2
- package/lib/command.js +6 -9
- package/lib/commands/appdistribution-testers-list.js +2 -3
- package/lib/commands/apphosting-backends-list.js +4 -6
- package/lib/commands/apphosting-builds-create.js +2 -3
- package/lib/commands/apphosting-builds-get.js +1 -2
- package/lib/commands/apphosting-rollouts-list.js +1 -2
- package/lib/commands/apps-init.js +1 -1
- package/lib/commands/{apptesting-execute.js → apptesting-wata.js} +3 -4
- package/lib/commands/crashlytics-symbols-upload.js +2 -2
- package/lib/commands/dataconnect-execute.js +4 -4
- package/lib/commands/dataconnect-sdk-generate.js +5 -6
- package/lib/commands/dataconnect-services-list.js +7 -8
- package/lib/commands/dataconnect-sql-diff.js +1 -2
- package/lib/commands/dataconnect-sql-migrate.js +4 -3
- package/lib/commands/dataconnect-sql-setup.js +2 -2
- package/lib/commands/dataconnect-sql-shell.js +5 -1
- package/lib/commands/emulators-start.js +1 -2
- package/lib/commands/ext-configure.js +6 -4
- package/lib/commands/ext-dev-list.js +2 -3
- package/lib/commands/ext-dev-upload.js +2 -2
- package/lib/commands/ext-export.js +1 -1
- package/lib/commands/ext-info.js +2 -3
- package/lib/commands/ext-install.js +5 -7
- package/lib/commands/firestore-backups-list.js +1 -2
- package/lib/commands/firestore-backups-schedules-list.js +1 -2
- package/lib/commands/firestore-indexes-list.js +1 -2
- package/lib/commands/firestore-utils.js +1 -2
- package/lib/commands/functions-artifacts-setpolicy.js +1 -2
- package/lib/commands/functions-config-export.js +2 -3
- package/lib/commands/hosting-channel-deploy.js +2 -2
- package/lib/commands/hosting-clone.js +2 -3
- package/lib/commands/hosting-sites-create.js +1 -1
- package/lib/commands/index.js +2 -3
- package/lib/commands/init.js +4 -5
- package/lib/commands/internaltesting-functions-discover.js +1 -1
- package/lib/commands/login.js +4 -5
- package/lib/commands/logout.js +3 -3
- package/lib/commands/projects-create.js +1 -1
- package/lib/commands/remoteconfig-experiments-list.js +2 -3
- package/lib/commands/remoteconfig-get.js +1 -1
- package/lib/commands/remoteconfig-rollback.js +1 -2
- package/lib/commands/remoteconfig-rollouts-list.js +2 -3
- package/lib/commands/remoteconfig-versions-list.js +3 -4
- package/lib/commands/use.js +3 -3
- package/lib/config.js +4 -5
- package/lib/crashlytics/buildToolsJarHelper.js +3 -5
- package/lib/crashlytics/events.js +4 -7
- package/lib/crashlytics/filters.js +10 -12
- package/lib/crashlytics/issues.js +2 -3
- package/lib/crashlytics/notes.js +3 -4
- package/lib/crashlytics/reports.js +21 -15
- package/lib/crashlytics/types.js +7 -7
- package/lib/crashlytics/utils.js +4 -4
- package/lib/database/api.js +2 -3
- package/lib/database/import.js +4 -4
- package/lib/database/metadata.js +5 -6
- package/lib/database/rulesConfig.js +2 -3
- package/lib/dataconnect/build.js +10 -13
- package/lib/dataconnect/checkIam.js +1 -2
- package/lib/dataconnect/client.js +15 -18
- package/lib/dataconnect/dataplaneClient.js +6 -6
- package/lib/dataconnect/ensureApis.js +2 -3
- package/lib/dataconnect/errors.js +8 -11
- package/lib/dataconnect/filters.js +2 -3
- package/lib/dataconnect/freeTrial.js +3 -4
- package/lib/dataconnect/graphqlError.js +5 -8
- package/lib/dataconnect/load.js +10 -11
- package/lib/dataconnect/names.js +14 -18
- package/lib/dataconnect/prompts.js +1 -2
- package/lib/dataconnect/provisionCloudSql.js +13 -17
- package/lib/dataconnect/schemaMigration.js +60 -27
- package/lib/dataconnect/types.js +10 -12
- package/lib/dataconnect/webhook.js +3 -3
- package/lib/defaultCredentials.js +3 -4
- package/lib/deploy/apphosting/deploy.js +2 -3
- package/lib/deploy/apphosting/prepare.js +3 -5
- package/lib/deploy/apphosting/release.js +1 -1
- package/lib/deploy/apphosting/util.js +1 -2
- package/lib/deploy/database/deploy.js +1 -2
- package/lib/deploy/database/prepare.js +1 -2
- package/lib/deploy/database/release.js +1 -2
- package/lib/deploy/dataconnect/context.js +15 -4
- package/lib/deploy/dataconnect/deploy.js +5 -6
- package/lib/deploy/dataconnect/prepare.js +7 -9
- package/lib/deploy/dataconnect/release.js +7 -10
- package/lib/deploy/extensions/deploy.js +7 -9
- package/lib/deploy/extensions/deploymentSummary.js +6 -7
- package/lib/deploy/extensions/planner.js +15 -18
- package/lib/deploy/extensions/prepare.js +9 -11
- package/lib/deploy/extensions/release.js +10 -12
- package/lib/deploy/extensions/secrets.js +8 -11
- package/lib/deploy/extensions/tasks.js +6 -8
- package/lib/deploy/extensions/v2FunctionHelper.js +2 -3
- package/lib/deploy/extensions/validate.js +1 -2
- package/lib/deploy/firestore/deploy.js +3 -5
- package/lib/deploy/firestore/prepare.js +2 -3
- package/lib/deploy/firestore/release.js +3 -4
- package/lib/deploy/functions/backend.js +52 -42
- package/lib/deploy/functions/build.js +41 -15
- package/lib/deploy/functions/cache/applyHash.js +3 -5
- package/lib/deploy/functions/cache/hash.js +4 -5
- package/lib/deploy/functions/cel.js +3 -3
- package/lib/deploy/functions/checkIam.js +8 -8
- package/lib/deploy/functions/containerCleaner.js +10 -6
- package/lib/deploy/functions/deploy.js +6 -8
- package/lib/deploy/functions/ensure.js +6 -9
- package/lib/deploy/functions/functionsDeployHelper.js +10 -11
- package/lib/deploy/functions/params.js +10 -10
- package/lib/deploy/functions/prepare.js +41 -36
- package/lib/deploy/functions/prepareFunctionsUpload.js +24 -10
- package/lib/deploy/functions/pricing.js +3 -3
- package/lib/deploy/functions/prompts.js +7 -10
- package/lib/deploy/functions/release/executor.js +5 -6
- package/lib/deploy/functions/release/fabricator.js +76 -29
- package/lib/deploy/functions/release/index.js +23 -14
- package/lib/deploy/functions/release/planner.js +15 -14
- package/lib/deploy/functions/release/reporter.js +20 -20
- package/lib/deploy/functions/release/sourceTokenScraper.js +4 -5
- package/lib/deploy/functions/remoteSource.js +3 -4
- package/lib/deploy/functions/runtimes/discovery/index.js +9 -12
- package/lib/deploy/functions/runtimes/discovery/parsing.js +2 -3
- package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +29 -10
- package/lib/deploy/functions/runtimes/index.js +1 -2
- package/lib/deploy/functions/runtimes/node/index.js +18 -9
- package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +2 -2
- package/lib/deploy/functions/runtimes/node/validate.js +1 -2
- package/lib/deploy/functions/runtimes/node/versioning.js +6 -7
- package/lib/deploy/functions/runtimes/python/index.js +12 -12
- package/lib/deploy/functions/runtimes/supported/index.js +5 -6
- package/lib/deploy/functions/services/auth.js +49 -36
- package/lib/deploy/functions/services/database.js +1 -2
- package/lib/deploy/functions/services/dataconnect.js +16 -2
- package/lib/deploy/functions/services/firebaseAlerts.js +1 -2
- package/lib/deploy/functions/services/firestore.js +3 -5
- package/lib/deploy/functions/services/index.js +2 -2
- package/lib/deploy/functions/services/remoteConfig.js +1 -2
- package/lib/deploy/functions/services/storage.js +3 -5
- package/lib/deploy/functions/services/testLab.js +1 -2
- package/lib/deploy/functions/triggerRegionHelper.js +1 -2
- package/lib/deploy/functions/validate.js +12 -11
- package/lib/deploy/hosting/convertConfig.js +38 -22
- package/lib/deploy/hosting/deploy.js +4 -7
- package/lib/deploy/hosting/hashcache.js +2 -3
- package/lib/deploy/hosting/prepare.js +14 -14
- package/lib/deploy/hosting/release.js +1 -2
- package/lib/deploy/index.js +7 -8
- package/lib/deploy/lifecycleHooks.js +3 -5
- package/lib/deploy/remoteconfig/deploy.js +1 -1
- package/lib/deploy/remoteconfig/functions.js +5 -6
- package/lib/deploy/remoteconfig/prepare.js +2 -3
- package/lib/deploy/remoteconfig/release.js +2 -2
- package/lib/deploy/storage/deploy.js +1 -1
- package/lib/deploy/storage/prepare.js +1 -1
- package/lib/deploy/storage/release.js +1 -1
- package/lib/deploymentTool.js +5 -6
- package/lib/detectProjectRoot.js +1 -2
- package/lib/downloadUtils.js +2 -3
- package/lib/emulator/adminSdkConfig.js +2 -3
- package/lib/emulator/apphosting/config.js +1 -2
- package/lib/emulator/apphosting/developmentServer.js +3 -3
- package/lib/emulator/apphosting/serve.js +20 -14
- package/lib/emulator/auth/cloudFunctions.js +2 -3
- package/lib/emulator/auth/errors.js +2 -2
- package/lib/emulator/auth/handlers.js +3 -4
- package/lib/emulator/auth/index.js +6 -6
- package/lib/emulator/auth/operations.js +171 -129
- package/lib/emulator/auth/server.js +30 -22
- package/lib/emulator/auth/state.js +26 -36
- package/lib/emulator/auth/utils.js +12 -13
- package/lib/emulator/commandUtils.js +20 -20
- package/lib/emulator/controller.js +32 -29
- package/lib/emulator/databaseEmulator.js +1 -2
- package/lib/emulator/dataconnect/pgliteServer.js +48 -104
- package/lib/emulator/dataconnectEmulator.js +6 -9
- package/lib/emulator/download.js +2 -3
- package/lib/emulator/downloadableEmulatorInfo.json +7 -7
- package/lib/emulator/downloadableEmulators.js +49 -24
- package/lib/emulator/emulatorLogger.js +19 -4
- package/lib/emulator/env.js +6 -8
- package/lib/emulator/eventarcEmulator.js +2 -3
- package/lib/emulator/eventarcEmulatorUtils.js +3 -6
- package/lib/emulator/extensions/postinstall.js +1 -2
- package/lib/emulator/extensions/validation.js +4 -7
- package/lib/emulator/extensionsEmulator.js +6 -9
- package/lib/emulator/functionsEmulator.js +89 -46
- package/lib/emulator/functionsEmulatorRuntime.js +1 -1
- package/lib/emulator/functionsEmulatorShared.js +30 -30
- package/lib/emulator/functionsEmulatorShell.js +4 -6
- package/lib/emulator/functionsEmulatorUtils.js +8 -9
- package/lib/emulator/functionsRuntimeWorker.js +18 -9
- package/lib/emulator/hub.js +41 -34
- package/lib/emulator/hubClient.js +1 -1
- package/lib/emulator/initEmulators.js +2 -3
- package/lib/emulator/loggingEmulator.js +2 -2
- package/lib/emulator/portUtils.js +4 -5
- package/lib/emulator/registry.js +10 -4
- package/lib/emulator/shared/request.js +1 -2
- package/lib/emulator/storage/apis/firebase.js +16 -20
- package/lib/emulator/storage/apis/gcloud.js +6 -9
- package/lib/emulator/storage/apis/shared.js +1 -2
- package/lib/emulator/storage/crc.js +2 -3
- package/lib/emulator/storage/files.js +18 -41
- package/lib/emulator/storage/metadata.js +10 -4
- package/lib/emulator/storage/multipart.js +1 -2
- package/lib/emulator/storage/rfc.js +1 -2
- package/lib/emulator/storage/rules/config.js +1 -2
- package/lib/emulator/storage/rules/manager.js +3 -5
- package/lib/emulator/storage/rules/runtime.js +15 -13
- package/lib/emulator/storage/rules/types.js +2 -2
- package/lib/emulator/storage/rules/utils.js +5 -6
- package/lib/emulator/storage/server.js +1 -2
- package/lib/emulator/storage/upload.js +3 -4
- package/lib/emulator/taskQueue.js +11 -4
- package/lib/emulator/tasksEmulator.js +11 -12
- package/lib/emulator/types.js +6 -6
- package/lib/emulator/ui.js +6 -1
- package/lib/ensureApiEnabled.js +7 -9
- package/lib/env.js +2 -3
- package/lib/error.js +11 -13
- package/lib/errorOut.js +1 -2
- package/lib/experiments.js +15 -18
- package/lib/extensions/askUserForEventsConfig.js +12 -13
- package/lib/extensions/askUserForParam.js +11 -12
- package/lib/extensions/change-log.js +4 -5
- package/lib/extensions/checkProjectBilling.js +1 -2
- package/lib/extensions/diagnose.js +1 -2
- package/lib/extensions/displayExtensionInfo.js +25 -32
- package/lib/extensions/emulator/optionsHelper.js +6 -8
- package/lib/extensions/emulator/specHelper.js +15 -16
- package/lib/extensions/emulator/triggerHelper.js +3 -5
- package/lib/extensions/etags.js +2 -3
- package/lib/extensions/export.js +7 -9
- package/lib/extensions/extensionsApi.js +23 -29
- package/lib/extensions/extensionsHelper.js +52 -80
- package/lib/extensions/listExtensions.js +3 -5
- package/lib/extensions/localHelper.js +5 -5
- package/lib/extensions/manifest.js +15 -16
- package/lib/extensions/metricsUtils.js +3 -4
- package/lib/extensions/paramHelper.js +21 -18
- package/lib/extensions/provisioningHelper.js +17 -21
- package/lib/extensions/publishHelpers.js +1 -2
- package/lib/extensions/publisherApi.js +11 -13
- package/lib/extensions/refs.js +6 -7
- package/lib/extensions/runtimes/common.js +18 -19
- package/lib/extensions/runtimes/node.js +5 -6
- package/lib/extensions/secretsUtils.js +8 -8
- package/lib/extensions/tos.js +7 -8
- package/lib/extensions/types.js +3 -3
- package/lib/extensions/updateHelper.js +6 -7
- package/lib/extensions/utils.js +6 -8
- package/lib/extensions/versionHelper.js +1 -2
- package/lib/extensions/warnings.js +6 -8
- package/lib/fetchMOTD.js +1 -2
- package/lib/fetchWebSetup.js +3 -4
- package/lib/filterTargets.js +1 -2
- package/lib/firebaseConfigValidate.js +2 -3
- package/lib/firestore/api-sort.js +8 -9
- package/lib/firestore/api-types.js +15 -15
- package/lib/firestore/api.js +15 -13
- package/lib/firestore/backupUtils.js +3 -3
- package/lib/firestore/checkDatabaseType.js +1 -2
- package/lib/firestore/delete.js +1 -2
- package/lib/firestore/encodeFirestoreValue.js +1 -2
- package/lib/firestore/fsConfig.js +1 -2
- package/lib/firestore/options.js +1 -1
- package/lib/firestore/util.js +5 -6
- package/lib/firestore/validator.js +4 -5
- package/lib/frameworks/angular/index.js +14 -15
- package/lib/frameworks/angular/utils.js +21 -23
- package/lib/frameworks/astro/index.js +7 -7
- package/lib/frameworks/astro/utils.js +4 -6
- package/lib/frameworks/compose/discover/filesystem.js +3 -3
- package/lib/frameworks/compose/discover/frameworkMatcher.js +4 -5
- package/lib/frameworks/compose/discover/index.js +1 -2
- package/lib/frameworks/compose/discover/runtime/node.js +8 -11
- package/lib/frameworks/compose/driver/docker.js +3 -5
- package/lib/frameworks/compose/driver/hooks.js +2 -2
- package/lib/frameworks/compose/driver/index.js +2 -2
- package/lib/frameworks/compose/driver/local.js +2 -3
- package/lib/frameworks/compose/index.js +5 -7
- package/lib/frameworks/constants.js +3 -3
- package/lib/frameworks/express/index.js +7 -8
- package/lib/frameworks/flutter/index.js +6 -7
- package/lib/frameworks/flutter/utils.js +4 -5
- package/lib/frameworks/index.js +21 -22
- package/lib/frameworks/next/constants.js +5 -2
- package/lib/frameworks/next/index.js +34 -32
- package/lib/frameworks/next/utils.js +40 -39
- package/lib/frameworks/nuxt/index.js +9 -9
- package/lib/frameworks/nuxt/utils.js +4 -6
- package/lib/frameworks/nuxt2/index.js +7 -7
- package/lib/frameworks/sveltekit/index.js +6 -8
- package/lib/frameworks/utils.js +26 -24
- package/lib/frameworks/vite/index.js +8 -9
- package/lib/fsAsync.js +1 -2
- package/lib/fsutils.js +5 -6
- package/lib/functional.js +11 -11
- package/lib/functions/artifacts.js +25 -22
- package/lib/functions/ensureTargeted.js +1 -2
- package/lib/functions/env.js +13 -14
- package/lib/functions/functionslog.js +2 -3
- package/lib/functions/projectConfig.js +29 -33
- package/lib/functions/python.js +10 -4
- package/lib/functions/secrets.js +32 -18
- package/lib/functionsConfig.js +14 -14
- package/lib/functionsConfigClone.js +1 -2
- package/lib/functionsShellCommandAction.js +2 -3
- package/lib/gcp/apphosting.js +43 -28
- package/lib/gcp/apptesting.js +2 -2
- package/lib/gcp/artifactregistry.js +5 -5
- package/lib/gcp/auth.js +11 -13
- package/lib/gcp/cloudbilling.js +4 -5
- package/lib/gcp/cloudbuild.js +10 -11
- package/lib/gcp/cloudfunctions.js +61 -45
- package/lib/gcp/cloudfunctionsv2.js +81 -43
- package/lib/gcp/cloudlogging.js +2 -4
- package/lib/gcp/cloudmonitoring.js +7 -7
- package/lib/gcp/cloudscheduler.js +12 -14
- package/lib/gcp/cloudsql/cloudsqladmin.js +18 -20
- package/lib/gcp/cloudsql/connect.js +14 -9
- package/lib/gcp/cloudsql/fbToolsAuthClient.js +5 -3
- package/lib/gcp/cloudsql/interactive.js +2 -3
- package/lib/gcp/cloudsql/permissions.js +8 -8
- package/lib/gcp/cloudsql/permissionsSetup.js +9 -9
- package/lib/gcp/cloudtasks.js +19 -18
- package/lib/gcp/computeEngine.js +1 -2
- package/lib/gcp/devConnect.js +32 -29
- package/lib/gcp/docker.js +2 -4
- package/lib/gcp/eventarc.js +5 -5
- package/lib/gcp/firedata.js +4 -4
- package/lib/gcp/firestore.js +16 -16
- package/lib/gcp/iam.js +11 -12
- package/lib/gcp/identityPlatform.js +4 -5
- package/lib/gcp/k8s.js +1 -2
- package/lib/gcp/location.js +2 -2
- package/lib/gcp/proto.js +10 -11
- package/lib/gcp/pubsub.js +4 -5
- package/lib/gcp/resourceManager.js +5 -5
- package/lib/gcp/rules.js +13 -14
- package/lib/gcp/run.js +24 -31
- package/lib/gcp/runv2.js +39 -27
- package/lib/gcp/secretManager.js +60 -39
- package/lib/gcp/serviceusage.js +8 -4
- package/lib/gcp/storage.js +22 -20
- package/lib/gemini/fdcExperience.js +5 -5
- package/lib/getDefaultDatabaseInstance.js +2 -4
- package/lib/getDefaultHostingSite.js +3 -4
- package/lib/getProjectNumber.js +1 -2
- package/lib/hosting/api.js +32 -36
- package/lib/hosting/cloudRunProxy.js +2 -3
- package/lib/hosting/config.js +17 -17
- package/lib/hosting/expireUtils.js +3 -3
- package/lib/hosting/functionsProxy.js +1 -2
- package/lib/hosting/implicitInit.js +1 -2
- package/lib/hosting/initMiddleware.js +1 -2
- package/lib/hosting/interactive.js +1 -2
- package/lib/hosting/proxy.js +3 -5
- package/lib/hosting/runTags.js +8 -11
- package/lib/init/features/account.js +1 -2
- package/lib/init/features/ailogic/index.js +3 -5
- package/lib/init/features/ailogic/utils.js +6 -8
- package/lib/init/features/aitools/claude.js +1 -2
- package/lib/init/features/aitools/cursor.js +1 -2
- package/lib/init/features/aitools/gemini.js +1 -1
- package/lib/init/features/aitools/promptUpdater.js +10 -12
- package/lib/init/features/aitools.js +1 -2
- package/lib/init/features/apphosting.js +3 -4
- package/lib/init/features/apptesting/index.js +9 -9
- package/lib/init/features/database.js +4 -5
- package/lib/init/features/dataconnect/create_app.js +3 -4
- package/lib/init/features/dataconnect/index.js +25 -22
- package/lib/init/features/dataconnect/resolver.js +6 -10
- package/lib/init/features/dataconnect/sdk.js +31 -24
- package/lib/init/features/emulators.js +7 -6
- package/lib/init/features/extensions/index.js +3 -5
- package/lib/init/features/firestore/index.js +7 -9
- package/lib/init/features/firestore/indexes.js +2 -2
- package/lib/init/features/firestore/rules.js +3 -3
- package/lib/init/features/functions/index.js +3 -5
- package/lib/init/features/functions/javascript.js +1 -2
- package/lib/init/features/functions/npm-dependencies.js +1 -2
- package/lib/init/features/functions/python.js +1 -2
- package/lib/init/features/functions/typescript.js +1 -2
- package/lib/init/features/genkit/index.js +44 -18
- package/lib/init/features/hosting/github.js +6 -8
- package/lib/init/features/hosting/index.js +10 -13
- package/lib/init/features/project.js +4 -7
- package/lib/init/features/remoteconfig.js +1 -2
- package/lib/init/features/storage.js +3 -5
- package/lib/init/index.js +4 -7
- package/lib/init/spawn.js +7 -9
- package/lib/listFiles.js +1 -2
- package/lib/loadCJSON.js +1 -2
- package/lib/localFunction.js +14 -15
- package/lib/logError.js +1 -2
- package/lib/logger.js +7 -7
- package/lib/management/apps.js +22 -22
- package/lib/management/database.js +11 -12
- package/lib/management/projects.js +57 -56
- package/lib/management/provisioning/errorHandler.js +3 -5
- package/lib/management/provisioning/provision.js +15 -9
- package/lib/management/studio.js +2 -3
- package/lib/mcp/errors.js +4 -4
- package/lib/mcp/index.js +16 -23
- package/lib/mcp/prompt.js +1 -2
- package/lib/mcp/prompts/core/consult.js +2 -3
- package/lib/mcp/prompts/crashlytics/connect.js +15 -122
- package/lib/mcp/prompts/dataconnect/schema.js +3 -3
- package/lib/mcp/prompts/index.js +8 -10
- package/lib/mcp/resource.js +3 -15
- package/lib/mcp/resources/guides/app_id.js +39 -0
- package/lib/mcp/resources/guides/crashlytics_connect.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_investigations.js +51 -0
- package/lib/mcp/resources/guides/crashlytics_issues.js +42 -0
- package/lib/mcp/resources/guides/crashlytics_reports.js +112 -0
- package/lib/mcp/resources/index.js +11 -3
- package/lib/mcp/tool.js +3 -15
- package/lib/mcp/tools/apphosting/fetch_logs.js +3 -4
- package/lib/mcp/tools/apphosting/list_backends.js +1 -1
- package/lib/mcp/tools/auth/get_users.js +5 -16
- package/lib/mcp/tools/core/create_android_sha.js +4 -1
- package/lib/mcp/tools/core/get_environment.js +3 -3
- package/lib/mcp/tools/core/get_sdk_config.js +4 -5
- package/lib/mcp/tools/core/get_security_rules.js +1 -2
- package/lib/mcp/tools/core/init.js +2 -2
- package/lib/mcp/tools/core/logout.js +1 -1
- package/lib/mcp/tools/core/read_resources.js +2 -2
- package/lib/mcp/tools/core/validate_security_rules.js +1 -2
- package/lib/mcp/tools/crashlytics/events.js +43 -19
- package/lib/mcp/tools/crashlytics/index.js +1 -6
- package/lib/mcp/tools/crashlytics/issues.js +33 -12
- package/lib/mcp/tools/crashlytics/reports.js +66 -117
- package/lib/mcp/tools/dataconnect/list_services.js +2 -3
- package/lib/mcp/tools/firestore/converter.js +3 -5
- package/lib/mcp/tools/firestore/delete_document.js +1 -1
- package/lib/mcp/tools/functions/get_logs.js +14 -12
- package/lib/mcp/tools/functions/list_functions.js +1 -1
- package/lib/mcp/tools/index.js +17 -9
- package/lib/mcp/util/apptesting/availability.js +1 -2
- package/lib/mcp/util/availability.js +1 -2
- package/lib/mcp/util/crashlytics/availability.js +1 -2
- package/lib/mcp/util/dataconnect/compile.js +7 -6
- package/lib/mcp/util/dataconnect/converter.js +7 -10
- package/lib/mcp/util/dataconnect/emulator.js +1 -2
- package/lib/mcp/util.js +9 -11
- package/lib/messaging/sendMessage.js +1 -2
- package/lib/metaprogramming.js +1 -2
- package/lib/operation-poller.js +2 -2
- package/lib/profileReport.js +6 -6
- package/lib/profiler.js +1 -2
- package/lib/projectPath.js +1 -2
- package/lib/projectUtils.js +5 -6
- package/lib/prompt.js +22 -13
- package/lib/rc.js +5 -7
- package/lib/remoteconfig/deleteExperiment.js +1 -2
- package/lib/remoteconfig/deleteRollout.js +1 -2
- package/lib/remoteconfig/get.js +2 -3
- package/lib/remoteconfig/getExperiment.js +2 -2
- package/lib/remoteconfig/getRollout.js +2 -2
- package/lib/remoteconfig/interfaces.js +1 -1
- package/lib/remoteconfig/listExperiments.js +2 -2
- package/lib/remoteconfig/listRollouts.js +2 -2
- package/lib/remoteconfig/publish.js +1 -2
- package/lib/remoteconfig/rollback.js +1 -2
- package/lib/remoteconfig/versionslist.js +1 -2
- package/lib/requireAuth.js +4 -6
- package/lib/requireConfig.js +5 -8
- package/lib/requireDatabaseInstance.js +2 -2
- package/lib/requireHostingSite.js +1 -2
- package/lib/requireInteractive.js +1 -1
- package/lib/requirePermissions.js +1 -2
- package/lib/requireTosAcceptance.js +1 -2
- package/lib/responseToError.js +1 -2
- package/lib/rtdb.js +2 -3
- package/lib/rulesDeploy.js +3 -4
- package/lib/serve/functions.js +9 -1
- package/lib/serve/hosting.js +4 -5
- package/lib/serve/index.js +1 -2
- package/lib/shortenUrl.js +1 -2
- package/lib/templates.js +3 -4
- package/lib/throttler/throttler.js +3 -3
- package/lib/timeout.js +2 -3
- package/lib/track.js +23 -14
- package/lib/tsconfig.publish.tsbuildinfo +1 -0
- package/lib/unzip.js +2 -3
- package/lib/utils.js +62 -63
- package/lib/vsCodeUtils.js +2 -3
- package/package.json +6 -6
- package/templates/extensions/typescript/index.ts +1 -1
- package/templates/extensions/typescript/package.lint.json +1 -1
- package/templates/extensions/typescript/package.nolint.json +1 -1
- package/templates/extensions/typescript/tsconfig.json +2 -1
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.isPackageJson = exports.isTsConfig = void 0;
|
|
4
|
+
exports.doSetup = doSetup;
|
|
5
|
+
exports.ensureVertexApiEnabled = ensureVertexApiEnabled;
|
|
6
|
+
exports.genkitSetup = genkitSetup;
|
|
7
|
+
exports.promptWriteMode = promptWriteMode;
|
|
4
8
|
const fs = require("fs");
|
|
5
9
|
const path = require("path");
|
|
6
10
|
const semver = require("semver");
|
|
@@ -94,14 +98,13 @@ function showStartMessage(setup, command) {
|
|
|
94
98
|
logger_1.logger.info(clc.bold(clc.green(` ${command}`)));
|
|
95
99
|
}
|
|
96
100
|
async function doSetup(initSetup, config, options) {
|
|
97
|
-
var _a;
|
|
98
101
|
const setup = initSetup;
|
|
99
102
|
const genkitInfo = await getGenkitInfo();
|
|
100
103
|
if (genkitInfo.stopInstall) {
|
|
101
104
|
(0, utils_1.logLabeledWarning)("genkit", "Stopped Genkit initialization");
|
|
102
105
|
return;
|
|
103
106
|
}
|
|
104
|
-
if (
|
|
107
|
+
if (setup.functions?.languageChoice !== "typescript") {
|
|
105
108
|
const continueFunctions = await (0, prompt_1.confirm)({
|
|
106
109
|
message: "Genkit's Firebase integration uses Cloud Functions for Firebase with TypeScript.\nInitialize Functions to continue?",
|
|
107
110
|
default: true,
|
|
@@ -144,7 +147,6 @@ async function doSetup(initSetup, config, options) {
|
|
|
144
147
|
return;
|
|
145
148
|
}
|
|
146
149
|
}
|
|
147
|
-
exports.doSetup = doSetup;
|
|
148
150
|
async function ensureVertexApiEnabled(options) {
|
|
149
151
|
const VERTEX_AI_URL = "https://aiplatform.googleapis.com";
|
|
150
152
|
const projectId = (0, projectUtils_1.getProjectId)(options);
|
|
@@ -154,7 +156,6 @@ async function ensureVertexApiEnabled(options) {
|
|
|
154
156
|
const silently = typeof options.markdown === "boolean" && options.markdown;
|
|
155
157
|
return await (0, ensureApiEnabled_1.ensure)(projectId, VERTEX_AI_URL, "aiplatform", silently);
|
|
156
158
|
}
|
|
157
|
-
exports.ensureVertexApiEnabled = ensureVertexApiEnabled;
|
|
158
159
|
function getModelOptions(genkitInfo) {
|
|
159
160
|
let modelOptions;
|
|
160
161
|
if (semver.gte(genkitInfo.templateVersion, UNIFIED_PLUGIN_VERSION)) {
|
|
@@ -255,10 +256,10 @@ const pluginToInfo = {
|
|
|
255
256
|
},
|
|
256
257
|
};
|
|
257
258
|
function getPluginInfo(option) {
|
|
258
|
-
if (
|
|
259
|
+
if (option?.provider && option.plugin) {
|
|
259
260
|
return pluginToInfo[`${option.plugin}(${option.provider})`];
|
|
260
261
|
}
|
|
261
|
-
if (option
|
|
262
|
+
if (option?.plugin) {
|
|
262
263
|
return pluginToInfo[option.plugin];
|
|
263
264
|
}
|
|
264
265
|
return {
|
|
@@ -273,7 +274,6 @@ function getBasePackages(genkitVersion) {
|
|
|
273
274
|
}
|
|
274
275
|
const externalDevPackages = ["typescript", "tsx"];
|
|
275
276
|
async function genkitSetup(options, genkitInfo, projectDir) {
|
|
276
|
-
var _a;
|
|
277
277
|
const modelOptions = getModelOptions(genkitInfo);
|
|
278
278
|
const supportedModels = Object.keys(modelOptions);
|
|
279
279
|
const model = await (0, prompt_1.select)({
|
|
@@ -288,7 +288,7 @@ async function genkitSetup(options, genkitInfo, projectDir) {
|
|
|
288
288
|
}
|
|
289
289
|
const pluginPackages = [];
|
|
290
290
|
pluginPackages.push(`@genkit-ai/firebase@${genkitInfo.genkitVersion}`);
|
|
291
|
-
if (
|
|
291
|
+
if (modelOptions[model]?.package) {
|
|
292
292
|
pluginPackages.push(modelOptions[model].package || "");
|
|
293
293
|
}
|
|
294
294
|
const packages = [...getBasePackages(genkitInfo.genkitVersion)];
|
|
@@ -313,7 +313,6 @@ async function genkitSetup(options, genkitInfo, projectDir) {
|
|
|
313
313
|
generateSampleFile(modelOptions[model], projectDir, genkitInfo.templateVersion, enableTelemetry);
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
|
-
exports.genkitSetup = genkitSetup;
|
|
317
316
|
const isTsConfig = (value) => {
|
|
318
317
|
if (!(0, error_1.isObject)(value) || (value.compilerOptions && !(0, error_1.isObject)(value.compilerOptions))) {
|
|
319
318
|
return false;
|
|
@@ -353,10 +352,24 @@ async function updateTsConfig(nonInteractive, projectDir) {
|
|
|
353
352
|
let newTsConfig = {};
|
|
354
353
|
switch (choice) {
|
|
355
354
|
case "overwrite":
|
|
356
|
-
newTsConfig =
|
|
355
|
+
newTsConfig = {
|
|
356
|
+
...existingTsConfig,
|
|
357
|
+
...tsConfig,
|
|
358
|
+
compilerOptions: {
|
|
359
|
+
...existingTsConfig?.compilerOptions,
|
|
360
|
+
...tsConfig.compilerOptions,
|
|
361
|
+
},
|
|
362
|
+
};
|
|
357
363
|
break;
|
|
358
364
|
case "merge":
|
|
359
|
-
newTsConfig =
|
|
365
|
+
newTsConfig = {
|
|
366
|
+
...tsConfig,
|
|
367
|
+
...existingTsConfig,
|
|
368
|
+
compilerOptions: {
|
|
369
|
+
...tsConfig.compilerOptions,
|
|
370
|
+
...existingTsConfig?.compilerOptions,
|
|
371
|
+
},
|
|
372
|
+
};
|
|
360
373
|
break;
|
|
361
374
|
case "keep":
|
|
362
375
|
(0, utils_1.logLabeledWarning)("genkit", "Skipped updating tsconfig.json");
|
|
@@ -377,7 +390,7 @@ async function installNpmPackages(projectDir, packages, devPackages) {
|
|
|
377
390
|
if (packages.length) {
|
|
378
391
|
await (0, spawn_1.wrapSpawn)("npm", ["install", ...packages, "--save"], projectDir);
|
|
379
392
|
}
|
|
380
|
-
if (devPackages
|
|
393
|
+
if (devPackages?.length) {
|
|
381
394
|
await (0, spawn_1.wrapSpawn)("npm", ["install", ...devPackages, "--save-dev"], projectDir);
|
|
382
395
|
}
|
|
383
396
|
(0, utils_1.logLabeledSuccess)("genkit", "Successfully installed NPM packages");
|
|
@@ -388,7 +401,6 @@ async function installNpmPackages(projectDir, packages, devPackages) {
|
|
|
388
401
|
}
|
|
389
402
|
}
|
|
390
403
|
function generateSampleFile(modelOption, projectDir, templateVersion, enableTelemetry) {
|
|
391
|
-
var _a;
|
|
392
404
|
let modelImport = "";
|
|
393
405
|
const pluginInfo = getPluginInfo(modelOption);
|
|
394
406
|
if (pluginInfo.imports) {
|
|
@@ -403,7 +415,7 @@ function generateSampleFile(modelOption, projectDir, templateVersion, enableTele
|
|
|
403
415
|
const template = fs.readFileSync(templatePath, "utf8");
|
|
404
416
|
const sample = renderConfig(pluginInfo, template
|
|
405
417
|
.replace("$GENKIT_MODEL_IMPORT\n", commentedModelImport)
|
|
406
|
-
.replace("$GENKIT_MODEL",
|
|
418
|
+
.replace("$GENKIT_MODEL", pluginInfo.model ?? "'' /* TODO: Set a model. */"), enableTelemetry);
|
|
407
419
|
(0, utils_1.logLabeledBullet)("genkit", "Generating sample file");
|
|
408
420
|
try {
|
|
409
421
|
const samplePath = "src/genkit-sample.ts";
|
|
@@ -444,10 +456,25 @@ async function updatePackageJson(nonInteractive, projectDir) {
|
|
|
444
456
|
let newPackageJson = {};
|
|
445
457
|
switch (choice) {
|
|
446
458
|
case "overwrite":
|
|
447
|
-
newPackageJson =
|
|
459
|
+
newPackageJson = {
|
|
460
|
+
...existingPackageJson,
|
|
461
|
+
...packageJson,
|
|
462
|
+
scripts: {
|
|
463
|
+
...existingPackageJson.scripts,
|
|
464
|
+
...packageJson.scripts,
|
|
465
|
+
},
|
|
466
|
+
};
|
|
448
467
|
break;
|
|
449
468
|
case "merge":
|
|
450
|
-
newPackageJson =
|
|
469
|
+
newPackageJson = {
|
|
470
|
+
...packageJson,
|
|
471
|
+
...existingPackageJson,
|
|
472
|
+
main: packageJson.main,
|
|
473
|
+
scripts: {
|
|
474
|
+
...packageJson.scripts,
|
|
475
|
+
...existingPackageJson.scripts,
|
|
476
|
+
},
|
|
477
|
+
};
|
|
451
478
|
break;
|
|
452
479
|
case "keep":
|
|
453
480
|
(0, utils_1.logLabeledWarning)("genkit", "Skipped updating package.json");
|
|
@@ -486,4 +513,3 @@ async function promptWriteMode(message, defaultOption = "merge") {
|
|
|
486
513
|
default: defaultOption,
|
|
487
514
|
});
|
|
488
515
|
}
|
|
489
|
-
exports.promptWriteMode = promptWriteMode;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.initGitHub =
|
|
3
|
+
exports.initGitHub = initGitHub;
|
|
4
4
|
const colorette_1 = require("colorette");
|
|
5
5
|
const fs = require("fs");
|
|
6
6
|
const yaml = require("yaml");
|
|
@@ -29,11 +29,10 @@ const HOSTING_GITHUB_ACTION_NAME = "FirebaseExtended/action-hosting-deploy@v0";
|
|
|
29
29
|
const SERVICE_ACCOUNT_MAX_KEY_NUMBER = 10;
|
|
30
30
|
const githubApiClient = new apiv2_1.Client({ urlPrefix: (0, api_1.githubApiOrigin)(), auth: false });
|
|
31
31
|
async function initGitHub(setup) {
|
|
32
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
33
32
|
if (!setup.projectId) {
|
|
34
33
|
return (0, utils_1.reject)("Could not determine Project ID, can't set up GitHub workflow.", { exit: 1 });
|
|
35
34
|
}
|
|
36
|
-
if (!setup.config.hosting && !
|
|
35
|
+
if (!setup.config.hosting && !setup.featureInfo?.hosting) {
|
|
37
36
|
return (0, utils_1.reject)(`Didn't find a Hosting config in firebase.json. Run ${(0, colorette_1.bold)("firebase init hosting")} instead.`);
|
|
38
37
|
}
|
|
39
38
|
logger_1.logger.info();
|
|
@@ -67,10 +66,10 @@ async function initGitHub(setup) {
|
|
|
67
66
|
(0, utils_1.logSuccess)(`Uploaded service account JSON to GitHub as secret ${(0, colorette_1.bold)(githubSecretName)}.`);
|
|
68
67
|
(0, utils_1.logBullet)(`You can manage your secrets at https://github.com/${repo}/settings/secrets.`);
|
|
69
68
|
logger_1.logger.info();
|
|
70
|
-
if (!Array.isArray(setup.config.hosting) &&
|
|
69
|
+
if (!Array.isArray(setup.config.hosting) && setup.config.hosting?.predeploy) {
|
|
71
70
|
(0, utils_1.logBullet)(`You have a predeploy script configured in firebase.json.`);
|
|
72
71
|
}
|
|
73
|
-
const { script } = await promptForBuildScript(
|
|
72
|
+
const { script } = await promptForBuildScript(setup?.hosting?.useWebFrameworks);
|
|
74
73
|
const ymlDeployDoc = loadYMLDeploy();
|
|
75
74
|
let shouldWriteYMLHostingFile = true;
|
|
76
75
|
let shouldWriteYMLDeployFile = false;
|
|
@@ -81,7 +80,7 @@ async function initGitHub(setup) {
|
|
|
81
80
|
shouldWriteYMLHostingFile = overwrite;
|
|
82
81
|
}
|
|
83
82
|
if (shouldWriteYMLHostingFile) {
|
|
84
|
-
writeChannelActionYMLFile(YML_FULL_PATH_PULL_REQUEST, githubSecretName, setup.projectId, script,
|
|
83
|
+
writeChannelActionYMLFile(YML_FULL_PATH_PULL_REQUEST, githubSecretName, setup.projectId, script, setup?.hosting?.useWebFrameworks, setup?.hosting?.source);
|
|
85
84
|
logger_1.logger.info();
|
|
86
85
|
(0, utils_1.logSuccess)(`Created workflow file ${(0, colorette_1.bold)(YML_FULL_PATH_PULL_REQUEST)}`);
|
|
87
86
|
}
|
|
@@ -101,7 +100,7 @@ async function initGitHub(setup) {
|
|
|
101
100
|
shouldWriteYMLDeployFile = true;
|
|
102
101
|
}
|
|
103
102
|
if (shouldWriteYMLDeployFile) {
|
|
104
|
-
writeDeployToProdActionYMLFile(YML_FULL_PATH_MERGE, branch, githubSecretName, setup.projectId, script,
|
|
103
|
+
writeDeployToProdActionYMLFile(YML_FULL_PATH_MERGE, branch, githubSecretName, setup.projectId, script, setup?.hosting?.useWebFrameworks, setup?.hosting?.source);
|
|
105
104
|
logger_1.logger.info();
|
|
106
105
|
(0, utils_1.logSuccess)(`Created workflow file ${(0, colorette_1.bold)(YML_FULL_PATH_MERGE)}`);
|
|
107
106
|
}
|
|
@@ -111,7 +110,6 @@ async function initGitHub(setup) {
|
|
|
111
110
|
logger_1.logger.info((0, colorette_1.bold)((0, colorette_1.underline)(`https://github.com/settings/connections/applications/${(0, api_1.githubClientId)()}`)));
|
|
112
111
|
(0, utils_1.logLabeledBullet)("Action required", `Push any new workflow file(s) to your repo`);
|
|
113
112
|
}
|
|
114
|
-
exports.initGitHub = initGitHub;
|
|
115
113
|
function getGitFolderPath() {
|
|
116
114
|
const commandDir = process.cwd();
|
|
117
115
|
let projectRootDir = commandDir;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.askQuestions = askQuestions;
|
|
4
|
+
exports.actuate = actuate;
|
|
4
5
|
const clc = require("colorette");
|
|
5
6
|
const node_fs_1 = require("node:fs");
|
|
6
7
|
const path_1 = require("path");
|
|
@@ -21,8 +22,7 @@ const INDEX_TEMPLATE = (0, templates_1.readTemplateSync)("init/hosting/index.htm
|
|
|
21
22
|
const MISSING_TEMPLATE = (0, templates_1.readTemplateSync)("init/hosting/404.html");
|
|
22
23
|
const DEFAULT_IGNORES = ["firebase.json", "**/.*", "**/node_modules/**"];
|
|
23
24
|
async function askQuestions(setup, config, options) {
|
|
24
|
-
var _a, _b, _c, _d, _e
|
|
25
|
-
var _g, _h, _j, _k, _l;
|
|
25
|
+
var _a, _b, _c, _d, _e;
|
|
26
26
|
setup.featureInfo = setup.featureInfo || {};
|
|
27
27
|
setup.featureInfo.hosting = {};
|
|
28
28
|
if (setup.projectId) {
|
|
@@ -67,14 +67,14 @@ async function askQuestions(setup, config, options) {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
if (setup.featureInfo.hosting.useWebFrameworks) {
|
|
70
|
-
(_a =
|
|
70
|
+
(_a = setup.featureInfo.hosting).source ?? (_a.source = await (0, prompt_1.input)({
|
|
71
71
|
message: "What folder would you like to use for your web application's root directory?",
|
|
72
72
|
default: "hosting",
|
|
73
73
|
}));
|
|
74
74
|
discoveredFramework = await (0, frameworks_1.discover)((0, path_1.join)(config.projectDir, setup.featureInfo.hosting.source));
|
|
75
75
|
if (discoveredFramework) {
|
|
76
76
|
const name = frameworks_1.WebFrameworks[discoveredFramework.framework].name;
|
|
77
|
-
(_b =
|
|
77
|
+
(_b = setup.featureInfo.hosting).useDiscoveredFramework ?? (_b.useDiscoveredFramework = await (0, prompt_1.confirm)({
|
|
78
78
|
message: `Detected an existing ${name} codebase in ${setup.featureInfo.hosting.source}, should we use this?`,
|
|
79
79
|
default: true,
|
|
80
80
|
}));
|
|
@@ -89,8 +89,8 @@ async function askQuestions(setup, config, options) {
|
|
|
89
89
|
choices.push({ name, value });
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
const defaultChoice =
|
|
93
|
-
(
|
|
92
|
+
const defaultChoice = choices.find(({ value }) => value === discoveredFramework?.framework)?.value;
|
|
93
|
+
(_c = setup.featureInfo.hosting).webFramework ?? (_c.webFramework = await (0, prompt_1.select)({
|
|
94
94
|
message: "Please choose the framework:",
|
|
95
95
|
default: defaultChoice,
|
|
96
96
|
choices,
|
|
@@ -109,20 +109,18 @@ async function askQuestions(setup, config, options) {
|
|
|
109
109
|
logger_1.logger.info(`will contain Hosting assets to be uploaded with ${clc.bold("firebase deploy")}. If you`);
|
|
110
110
|
logger_1.logger.info("have a build process for your assets, use your build's output directory.");
|
|
111
111
|
logger_1.logger.info();
|
|
112
|
-
(
|
|
112
|
+
(_d = setup.featureInfo.hosting).public ?? (_d.public = await (0, prompt_1.input)({
|
|
113
113
|
message: "What do you want to use as your public directory?",
|
|
114
114
|
default: "public",
|
|
115
115
|
}));
|
|
116
|
-
(
|
|
116
|
+
(_e = setup.featureInfo.hosting).spa ?? (_e.spa = await (0, prompt_1.confirm)("Configure as a single-page app (rewrite all urls to /index.html)?"));
|
|
117
117
|
}
|
|
118
118
|
if (await (0, prompt_1.confirm)("Set up automatic builds and deploys with GitHub?")) {
|
|
119
119
|
return (0, github_1.initGitHub)(setup);
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
|
-
exports.askQuestions = askQuestions;
|
|
123
122
|
async function actuate(setup, config, options) {
|
|
124
|
-
|
|
125
|
-
const hostingInfo = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.hosting;
|
|
123
|
+
const hostingInfo = setup.featureInfo?.hosting;
|
|
126
124
|
if (!hostingInfo) {
|
|
127
125
|
throw new error_1.FirebaseError("Could not find hosting info in setup.featureInfo.hosting. This should not happen.", { exit: 2 });
|
|
128
126
|
}
|
|
@@ -163,4 +161,3 @@ async function actuate(setup, config, options) {
|
|
|
163
161
|
await config.askWriteProjectFile(`${hostingInfo.public}/index.html`, INDEX_TEMPLATE.replace(/{{VERSION}}/g, response.body.current.version), !!options.force);
|
|
164
162
|
}
|
|
165
163
|
}
|
|
166
|
-
exports.actuate = actuate;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.doSetup =
|
|
3
|
+
exports.doSetup = doSetup;
|
|
4
4
|
const clc = require("colorette");
|
|
5
5
|
const _ = require("lodash");
|
|
6
6
|
const projects_1 = require("../../management/projects");
|
|
@@ -15,7 +15,6 @@ const OPTION_USE_PROJECT = "Use an existing project";
|
|
|
15
15
|
const OPTION_NEW_PROJECT = "Create a new project";
|
|
16
16
|
const OPTION_ADD_FIREBASE = "Add Firebase to an existing Google Cloud Platform project";
|
|
17
17
|
async function doSetup(setup, config, options) {
|
|
18
|
-
var _a, _b;
|
|
19
18
|
setup.project = {};
|
|
20
19
|
logger_1.logger.info();
|
|
21
20
|
logger_1.logger.info(`First, let's associate this project directory with a Firebase project.`);
|
|
@@ -30,7 +29,7 @@ async function doSetup(setup, config, options) {
|
|
|
30
29
|
await usingProject(setup, config, options.project);
|
|
31
30
|
return;
|
|
32
31
|
}
|
|
33
|
-
const projectFromRcFile =
|
|
32
|
+
const projectFromRcFile = setup.rcfile?.projects?.default;
|
|
34
33
|
if (projectFromRcFile) {
|
|
35
34
|
await (0, requireAuth_1.requireAuth)(options);
|
|
36
35
|
await usingProject(setup, config, projectFromRcFile, ".firebaserc");
|
|
@@ -74,7 +73,6 @@ async function doSetup(setup, config, options) {
|
|
|
74
73
|
return;
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
|
-
exports.doSetup = doSetup;
|
|
78
76
|
async function usingProject(setup, config, projectId, from = "") {
|
|
79
77
|
const pm = await (0, projects_1.getFirebaseProject)(projectId);
|
|
80
78
|
const label = `${pm.projectId}` + (pm.displayName ? ` (${pm.displayName})` : "");
|
|
@@ -82,14 +80,13 @@ async function usingProject(setup, config, projectId, from = "") {
|
|
|
82
80
|
await usingProjectMetadata(setup, config, pm);
|
|
83
81
|
}
|
|
84
82
|
async function usingProjectMetadata(setup, config, pm) {
|
|
85
|
-
var _a, _b;
|
|
86
83
|
if (!pm) {
|
|
87
84
|
throw new error_1.FirebaseError("null FirebaseProjectMetadata");
|
|
88
85
|
}
|
|
89
86
|
_.set(setup.rcfile, "projects.default", pm.projectId);
|
|
90
87
|
setup.projectId = pm.projectId;
|
|
91
88
|
setup.projectNumber = pm.projectNumber;
|
|
92
|
-
setup.instance =
|
|
93
|
-
setup.projectLocation =
|
|
89
|
+
setup.instance = pm.resources?.realtimeDatabaseInstance;
|
|
90
|
+
setup.projectLocation = pm.resources?.locationId;
|
|
94
91
|
utils.makeActiveProject(config.projectDir, pm.projectId);
|
|
95
92
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.doSetup =
|
|
3
|
+
exports.doSetup = doSetup;
|
|
4
4
|
const prompt_1 = require("../../prompt");
|
|
5
5
|
const fsutils = require("../../fsutils");
|
|
6
6
|
const clc = require("colorette");
|
|
@@ -24,4 +24,3 @@ async function doSetup(setup, config) {
|
|
|
24
24
|
};
|
|
25
25
|
config.writeProjectFile(setup.config.remoteconfig.template, "{}");
|
|
26
26
|
}
|
|
27
|
-
exports.doSetup = doSetup;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.askQuestions = askQuestions;
|
|
4
|
+
exports.actuate = actuate;
|
|
4
5
|
const clc = require("colorette");
|
|
5
6
|
const logger_1 = require("../../logger");
|
|
6
7
|
const prompt_1 = require("../../prompt");
|
|
@@ -27,10 +28,8 @@ async function askQuestions(setup, config) {
|
|
|
27
28
|
setup.featureInfo = setup.featureInfo || {};
|
|
28
29
|
setup.featureInfo.storage = info;
|
|
29
30
|
}
|
|
30
|
-
exports.askQuestions = askQuestions;
|
|
31
31
|
async function actuate(setup, config) {
|
|
32
|
-
|
|
33
|
-
const info = (_a = setup.featureInfo) === null || _a === void 0 ? void 0 : _a.storage;
|
|
32
|
+
const info = setup.featureInfo?.storage;
|
|
34
33
|
if (!info) {
|
|
35
34
|
throw new error_1.FirebaseError("storage featureInfo is not found");
|
|
36
35
|
}
|
|
@@ -43,4 +42,3 @@ async function actuate(setup, config) {
|
|
|
43
42
|
config.writeProjectFile(info.rulesFilename, info.rules);
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
|
-
exports.actuate = actuate;
|
package/lib/init/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.init = init;
|
|
4
|
+
exports.actuate = actuate;
|
|
4
5
|
const lodash_1 = require("lodash");
|
|
5
6
|
const clc = require("colorette");
|
|
6
7
|
const error_1 = require("../error");
|
|
@@ -66,8 +67,7 @@ const featuresList = [
|
|
|
66
67
|
];
|
|
67
68
|
const featureMap = new Map(featuresList.map((feature) => [feature.name, feature]));
|
|
68
69
|
async function init(setup, config, options) {
|
|
69
|
-
|
|
70
|
-
const nextFeature = (_a = setup.features) === null || _a === void 0 ? void 0 : _a.shift();
|
|
70
|
+
const nextFeature = setup.features?.shift();
|
|
71
71
|
if (nextFeature) {
|
|
72
72
|
const start = process.uptime();
|
|
73
73
|
const f = featureMap.get(nextFeature);
|
|
@@ -97,10 +97,8 @@ async function init(setup, config, options) {
|
|
|
97
97
|
return init(setup, config, options);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
-
exports.init = init;
|
|
101
100
|
async function actuate(setup, config, options) {
|
|
102
|
-
|
|
103
|
-
const nextFeature = (_a = setup.features) === null || _a === void 0 ? void 0 : _a.shift();
|
|
101
|
+
const nextFeature = setup.features?.shift();
|
|
104
102
|
if (nextFeature) {
|
|
105
103
|
const start = process.uptime();
|
|
106
104
|
const f = lookupFeature(nextFeature);
|
|
@@ -118,7 +116,6 @@ async function actuate(setup, config, options) {
|
|
|
118
116
|
return actuate(setup, config, options);
|
|
119
117
|
}
|
|
120
118
|
}
|
|
121
|
-
exports.actuate = actuate;
|
|
122
119
|
function lookupFeature(feature) {
|
|
123
120
|
const f = featureMap.get(feature);
|
|
124
121
|
if (!f) {
|
package/lib/init/spawn.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.wrapSpawn = wrapSpawn;
|
|
4
|
+
exports.spawnWithOutput = spawnWithOutput;
|
|
5
|
+
exports.spawnWithCommandString = spawnWithCommandString;
|
|
4
6
|
const spawn = require("cross-spawn");
|
|
5
7
|
const logger_1 = require("../logger");
|
|
6
8
|
const error_1 = require("../error");
|
|
@@ -9,7 +11,7 @@ function wrapSpawn(cmd, args, projectDir) {
|
|
|
9
11
|
const installer = spawn(cmd, args, {
|
|
10
12
|
cwd: projectDir,
|
|
11
13
|
stdio: "inherit",
|
|
12
|
-
env:
|
|
14
|
+
env: { ...process.env },
|
|
13
15
|
});
|
|
14
16
|
installer.on("error", (err) => {
|
|
15
17
|
logger_1.logger.debug((0, error_1.getErrStack)(err));
|
|
@@ -22,13 +24,11 @@ function wrapSpawn(cmd, args, projectDir) {
|
|
|
22
24
|
});
|
|
23
25
|
});
|
|
24
26
|
}
|
|
25
|
-
exports.wrapSpawn = wrapSpawn;
|
|
26
27
|
function spawnWithOutput(cmd, args) {
|
|
27
28
|
return new Promise((resolve, reject) => {
|
|
28
|
-
var _a, _b;
|
|
29
29
|
const child = spawn(cmd, args);
|
|
30
30
|
let output = "";
|
|
31
|
-
|
|
31
|
+
child.stdout?.on("data", (data) => {
|
|
32
32
|
if ((0, error_1.isObject)(data) && data.toString) {
|
|
33
33
|
output += data.toString();
|
|
34
34
|
}
|
|
@@ -36,7 +36,7 @@ function spawnWithOutput(cmd, args) {
|
|
|
36
36
|
output += JSON.stringify(data);
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
|
-
|
|
39
|
+
child.stderr?.on("data", (data) => {
|
|
40
40
|
logger_1.logger.debug(`Error: spawn(${cmd}, ${args.join(", ")})\n Stderr:\n${JSON.stringify(data)}\n`);
|
|
41
41
|
});
|
|
42
42
|
child.on("error", (err) => {
|
|
@@ -52,14 +52,13 @@ function spawnWithOutput(cmd, args) {
|
|
|
52
52
|
});
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
-
exports.spawnWithOutput = spawnWithOutput;
|
|
56
55
|
function spawnWithCommandString(cmd, projectDir, environmentVariables) {
|
|
57
56
|
return new Promise((resolve, reject) => {
|
|
58
57
|
const installer = spawn(cmd, {
|
|
59
58
|
cwd: projectDir,
|
|
60
59
|
stdio: "inherit",
|
|
61
60
|
shell: true,
|
|
62
|
-
env:
|
|
61
|
+
env: { ...process.env, ...environmentVariables },
|
|
63
62
|
});
|
|
64
63
|
installer.on("error", (err) => {
|
|
65
64
|
logger_1.logger.log("DEBUG", (0, error_1.getErrStack)(err));
|
|
@@ -72,4 +71,3 @@ function spawnWithCommandString(cmd, projectDir, environmentVariables) {
|
|
|
72
71
|
});
|
|
73
72
|
});
|
|
74
73
|
}
|
|
75
|
-
exports.spawnWithCommandString = spawnWithCommandString;
|
package/lib/listFiles.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.listFiles =
|
|
3
|
+
exports.listFiles = listFiles;
|
|
4
4
|
const glob_1 = require("glob");
|
|
5
5
|
function listFiles(cwd, ignore = []) {
|
|
6
6
|
return (0, glob_1.sync)("**/*", {
|
|
@@ -12,4 +12,3 @@ function listFiles(cwd, ignore = []) {
|
|
|
12
12
|
posix: true,
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
|
-
exports.listFiles = listFiles;
|
package/lib/loadCJSON.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadCJSON =
|
|
3
|
+
exports.loadCJSON = loadCJSON;
|
|
4
4
|
const error_1 = require("./error");
|
|
5
5
|
const cjson = require("cjson");
|
|
6
6
|
function loadCJSON(path) {
|
|
@@ -14,4 +14,3 @@ function loadCJSON(path) {
|
|
|
14
14
|
throw new error_1.FirebaseError(`Parse Error in ${path}:\n\n${e.message}`);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
exports.loadCJSON = loadCJSON;
|
package/lib/localFunction.js
CHANGED
|
@@ -19,7 +19,7 @@ class LocalFunction {
|
|
|
19
19
|
}
|
|
20
20
|
return resource.replace(this.paramWildcardRegex, (wildcard) => {
|
|
21
21
|
const wildcardNoBraces = wildcard.slice(1, -1);
|
|
22
|
-
const sub = params
|
|
22
|
+
const sub = params?.[wildcardNoBraces];
|
|
23
23
|
return sub || wildcardNoBraces + utils.randomInt(1, 9);
|
|
24
24
|
});
|
|
25
25
|
}
|
|
@@ -66,7 +66,7 @@ class LocalFunction {
|
|
|
66
66
|
const req = Object.assign(opts || {}, {
|
|
67
67
|
path: path,
|
|
68
68
|
body: json,
|
|
69
|
-
method:
|
|
69
|
+
method: opts?.method || "GET",
|
|
70
70
|
});
|
|
71
71
|
return callClient.request(req);
|
|
72
72
|
});
|
|
@@ -97,8 +97,7 @@ class LocalFunction {
|
|
|
97
97
|
return { path: "/", opts: {} };
|
|
98
98
|
}
|
|
99
99
|
constructAuth(auth, authType) {
|
|
100
|
-
|
|
101
|
-
if ((auth === null || auth === void 0 ? void 0 : auth.admin) || (auth === null || auth === void 0 ? void 0 : auth.variable)) {
|
|
100
|
+
if (auth?.admin || auth?.variable) {
|
|
102
101
|
return {
|
|
103
102
|
admin: auth.admin || false,
|
|
104
103
|
variable: auth.variable,
|
|
@@ -110,17 +109,17 @@ class LocalFunction {
|
|
|
110
109
|
return {
|
|
111
110
|
admin: false,
|
|
112
111
|
variable: {
|
|
113
|
-
uid:
|
|
114
|
-
token:
|
|
112
|
+
uid: auth?.uid ?? "",
|
|
113
|
+
token: auth?.token ?? {},
|
|
115
114
|
},
|
|
116
115
|
};
|
|
117
116
|
case "ADMIN":
|
|
118
|
-
if (
|
|
117
|
+
if (auth?.uid || auth?.token) {
|
|
119
118
|
throw new Error("authType and auth are incompatible.");
|
|
120
119
|
}
|
|
121
120
|
return { admin: true };
|
|
122
121
|
case "UNAUTHENTICATED":
|
|
123
|
-
if (
|
|
122
|
+
if (auth?.uid || auth?.token) {
|
|
124
123
|
throw new Error("authType and auth are incompatible.");
|
|
125
124
|
}
|
|
126
125
|
return { admin: false };
|
|
@@ -132,7 +131,7 @@ class LocalFunction {
|
|
|
132
131
|
return {
|
|
133
132
|
admin: false,
|
|
134
133
|
variable: {
|
|
135
|
-
uid:
|
|
134
|
+
uid: auth.uid ?? "",
|
|
136
135
|
token: auth.token || {},
|
|
137
136
|
},
|
|
138
137
|
};
|
|
@@ -183,7 +182,6 @@ class LocalFunction {
|
|
|
183
182
|
return utils.getFunctionsEventProvider(eventTrigger.eventType) === "PubSub";
|
|
184
183
|
}
|
|
185
184
|
triggerEvent(data, opts) {
|
|
186
|
-
var _a, _b, _c, _d;
|
|
187
185
|
opts = opts || {};
|
|
188
186
|
let operationType;
|
|
189
187
|
let dataPayload;
|
|
@@ -214,7 +212,8 @@ class LocalFunction {
|
|
|
214
212
|
delta: data.after,
|
|
215
213
|
};
|
|
216
214
|
}
|
|
217
|
-
const resource =
|
|
215
|
+
const resource = this.trigger.eventTrigger.resource ??
|
|
216
|
+
this.trigger.eventTrigger.eventFilterPathPatterns?.ref;
|
|
218
217
|
opts.resource = this.substituteParams(resource, opts.params);
|
|
219
218
|
opts.auth = this.constructAuth(opts.auth, opts.authType);
|
|
220
219
|
this.controller.call(this.trigger, dataPayload, opts);
|
|
@@ -242,14 +241,15 @@ class LocalFunction {
|
|
|
242
241
|
oldValue: this.makeFirestoreValue(data.before),
|
|
243
242
|
};
|
|
244
243
|
}
|
|
245
|
-
const resource =
|
|
244
|
+
const resource = this.trigger.eventTrigger.resource ??
|
|
245
|
+
this.trigger.eventTrigger.eventFilterPathPatterns?.document;
|
|
246
246
|
opts.resource = this.substituteParams(resource, opts.params);
|
|
247
247
|
this.controller.call(this.trigger, dataPayload, opts);
|
|
248
248
|
}
|
|
249
249
|
else if (this.isPubsubFunc(this.trigger.eventTrigger)) {
|
|
250
250
|
dataPayload = data;
|
|
251
251
|
if (this.trigger.platform === "gcfv2") {
|
|
252
|
-
dataPayload = { message:
|
|
252
|
+
dataPayload = { message: { ...data, messageId: uuid.v4() } };
|
|
253
253
|
}
|
|
254
254
|
this.controller.call(this.trigger, dataPayload || {}, opts);
|
|
255
255
|
}
|
|
@@ -260,9 +260,8 @@ class LocalFunction {
|
|
|
260
260
|
return "Successfully invoked function.";
|
|
261
261
|
}
|
|
262
262
|
makeFn() {
|
|
263
|
-
var _a;
|
|
264
263
|
if (this.trigger.httpsTrigger) {
|
|
265
|
-
const isCallable = !!
|
|
264
|
+
const isCallable = !!this.trigger.labels?.["deployment-callable"];
|
|
266
265
|
if (isCallable) {
|
|
267
266
|
return (data, opt) => this.constructCallableFunc(data, opt);
|
|
268
267
|
}
|
package/lib/logError.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.logError =
|
|
3
|
+
exports.logError = logError;
|
|
4
4
|
const logger_1 = require("./logger");
|
|
5
5
|
const clc = require("colorette");
|
|
6
6
|
function logError(error) {
|
|
@@ -26,4 +26,3 @@ function logError(error) {
|
|
|
26
26
|
logger_1.logger.debug("Error Context:", JSON.stringify(error.context, undefined, 2));
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
exports.logError = logError;
|