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,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compose =
|
|
3
|
+
exports.compose = compose;
|
|
4
4
|
const driver_1 = require("./driver");
|
|
5
5
|
const discover_1 = require("./discover");
|
|
6
6
|
async function compose(mode, fs, allFrameworkSpecs) {
|
|
7
|
-
var _a, _b, _c, _d;
|
|
8
7
|
let bundle = { version: "v1alpha" };
|
|
9
8
|
const spec = await (0, discover_1.discover)(fs, allFrameworkSpecs);
|
|
10
9
|
const driver = (0, driver_1.getDriver)(mode, spec);
|
|
11
|
-
if (
|
|
10
|
+
if (spec.detectedCommands?.run) {
|
|
12
11
|
bundle.server = {
|
|
13
12
|
start: {
|
|
14
13
|
cmd: spec.detectedCommands.run.cmd.split(" "),
|
|
@@ -16,16 +15,15 @@ async function compose(mode, fs, allFrameworkSpecs) {
|
|
|
16
15
|
};
|
|
17
16
|
}
|
|
18
17
|
driver.install();
|
|
19
|
-
if (
|
|
18
|
+
if (spec.frameworkHooks?.afterInstall) {
|
|
20
19
|
bundle = driver.execHook(bundle, spec.frameworkHooks.afterInstall);
|
|
21
20
|
}
|
|
22
21
|
driver.build();
|
|
23
|
-
if (
|
|
24
|
-
bundle = driver.execHook(bundle,
|
|
22
|
+
if (spec.frameworkHooks?.afterBuild) {
|
|
23
|
+
bundle = driver.execHook(bundle, spec.frameworkHooks?.afterBuild);
|
|
25
24
|
}
|
|
26
25
|
if (bundle.server) {
|
|
27
26
|
driver.export(bundle);
|
|
28
27
|
}
|
|
29
28
|
return bundle;
|
|
30
29
|
}
|
|
31
|
-
exports.compose = compose;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.I18N_ROOT = exports.ALLOWED_SSR_REGIONS = exports.DEFAULT_REGION = exports.VALID_LOCALE_FORMATS = exports.VALID_ENGINES = exports.NODE_VERSION = exports.SHARP_VERSION = exports.FIREBASE_ADMIN_VERSION = exports.FIREBASE_FUNCTIONS_VERSION = exports.FIREBASE_FRAMEWORKS_VERSION = exports.MAILING_LIST_URL = exports.FEATURE_REQUEST_URL = exports.FILE_BUG_URL = exports.DEFAULT_DOCS_URL = exports.SupportLevelWarnings = exports.NPM_COMMAND_TIMEOUT_MILLIES = void 0;
|
|
4
|
+
exports.GET_DEFAULT_BUILD_TARGETS = GET_DEFAULT_BUILD_TARGETS;
|
|
5
|
+
exports.DEFAULT_SHOULD_USE_DEV_MODE_HANDLE = DEFAULT_SHOULD_USE_DEV_MODE_HANDLE;
|
|
4
6
|
const clc = require("colorette");
|
|
5
7
|
const experiments = require("../experiments");
|
|
6
8
|
exports.NPM_COMMAND_TIMEOUT_MILLIES = 60000;
|
|
@@ -60,8 +62,6 @@ exports.I18N_ROOT = "/";
|
|
|
60
62
|
function GET_DEFAULT_BUILD_TARGETS() {
|
|
61
63
|
return Promise.resolve(["production", "development"]);
|
|
62
64
|
}
|
|
63
|
-
exports.GET_DEFAULT_BUILD_TARGETS = GET_DEFAULT_BUILD_TARGETS;
|
|
64
65
|
function DEFAULT_SHOULD_USE_DEV_MODE_HANDLE(target) {
|
|
65
66
|
return Promise.resolve(target === "development");
|
|
66
67
|
}
|
|
67
|
-
exports.DEFAULT_SHOULD_USE_DEV_MODE_HANDLE = DEFAULT_SHOULD_USE_DEV_MODE_HANDLE;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports
|
|
3
|
+
exports.docsUrl = exports.type = exports.support = exports.name = void 0;
|
|
4
|
+
exports.discover = discover;
|
|
5
|
+
exports.build = build;
|
|
6
|
+
exports.ɵcodegenPublicDirectory = ɵcodegenPublicDirectory;
|
|
7
|
+
exports.ɵcodegenFunctionsDirectory = ɵcodegenFunctionsDirectory;
|
|
4
8
|
const child_process_1 = require("child_process");
|
|
5
9
|
const fs_extra_1 = require("fs-extra");
|
|
6
10
|
const promises_1 = require("fs/promises");
|
|
@@ -11,11 +15,10 @@ exports.support = "preview";
|
|
|
11
15
|
exports.type = 0;
|
|
12
16
|
exports.docsUrl = "https://firebase.google.com/docs/hosting/frameworks/express";
|
|
13
17
|
async function getConfig(root) {
|
|
14
|
-
var _a, _b;
|
|
15
18
|
const packageJsonBuffer = await (0, promises_1.readFile)((0, path_1.join)(root, "package.json"));
|
|
16
19
|
const packageJson = JSON.parse(packageJsonBuffer.toString());
|
|
17
|
-
const serve =
|
|
18
|
-
const serveDir = serve && (0, path_1.join)(root,
|
|
20
|
+
const serve = packageJson.directories?.serve;
|
|
21
|
+
const serveDir = serve && (0, path_1.join)(root, packageJson.directories?.serve);
|
|
19
22
|
return { serveDir, packageJson };
|
|
20
23
|
}
|
|
21
24
|
async function discover(dir) {
|
|
@@ -26,18 +29,15 @@ async function discover(dir) {
|
|
|
26
29
|
return;
|
|
27
30
|
return { mayWantBackend: true, publicDirectory };
|
|
28
31
|
}
|
|
29
|
-
exports.discover = discover;
|
|
30
32
|
async function build(cwd) {
|
|
31
33
|
(0, child_process_1.execSync)(`npm run build`, { stdio: "inherit", cwd });
|
|
32
34
|
const wantsBackend = !!(await getBootstrapScript(cwd));
|
|
33
35
|
return { wantsBackend };
|
|
34
36
|
}
|
|
35
|
-
exports.build = build;
|
|
36
37
|
async function ɵcodegenPublicDirectory(root, dest) {
|
|
37
38
|
const { serveDir } = await getConfig(root);
|
|
38
39
|
await (0, fs_extra_1.copy)(serveDir, dest);
|
|
39
40
|
}
|
|
40
|
-
exports.ɵcodegenPublicDirectory = ɵcodegenPublicDirectory;
|
|
41
41
|
async function getBootstrapScript(root, _bootstrapScript = "", _entry) {
|
|
42
42
|
let entry = _entry;
|
|
43
43
|
let bootstrapScript = _bootstrapScript;
|
|
@@ -99,4 +99,3 @@ async function ɵcodegenFunctionsDirectory(root, dest) {
|
|
|
99
99
|
packageJson.dependencies[packageJson.name] = `file:${filename}`;
|
|
100
100
|
return { bootstrapScript, packageJson };
|
|
101
101
|
}
|
|
102
|
-
exports.ɵcodegenFunctionsDirectory = ɵcodegenFunctionsDirectory;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports
|
|
3
|
+
exports.support = exports.type = exports.name = void 0;
|
|
4
|
+
exports.discover = discover;
|
|
5
|
+
exports.init = init;
|
|
6
|
+
exports.build = build;
|
|
7
|
+
exports.ɵcodegenPublicDirectory = ɵcodegenPublicDirectory;
|
|
4
8
|
const cross_spawn_1 = require("cross-spawn");
|
|
5
9
|
const fs_extra_1 = require("fs-extra");
|
|
6
10
|
const path_1 = require("path");
|
|
@@ -11,18 +15,16 @@ exports.name = "Flutter Web";
|
|
|
11
15
|
exports.type = 3;
|
|
12
16
|
exports.support = "experimental";
|
|
13
17
|
async function discover(dir) {
|
|
14
|
-
var _a;
|
|
15
18
|
if (!(await (0, fs_extra_1.pathExists)((0, path_1.join)(dir, "pubspec.yaml"))))
|
|
16
19
|
return;
|
|
17
20
|
if (!(await (0, fs_extra_1.pathExists)((0, path_1.join)(dir, "web"))))
|
|
18
21
|
return;
|
|
19
22
|
const pubSpec = await (0, utils_1.getPubSpec)(dir);
|
|
20
|
-
const usingFlutter =
|
|
23
|
+
const usingFlutter = pubSpec.dependencies?.flutter;
|
|
21
24
|
if (!usingFlutter)
|
|
22
25
|
return;
|
|
23
26
|
return { mayWantBackend: false };
|
|
24
27
|
}
|
|
25
|
-
exports.discover = discover;
|
|
26
28
|
function init(setup, config) {
|
|
27
29
|
(0, utils_1.assertFlutterCliExists)();
|
|
28
30
|
const projectName = constants_1.DART_RESERVED_WORDS.includes(setup.projectId)
|
|
@@ -40,7 +42,6 @@ function init(setup, config) {
|
|
|
40
42
|
throw new error_1.FirebaseError("We were not able to create your flutter app, create the application yourself https://docs.flutter.dev/get-started/test-drive?tab=terminal before trying again.");
|
|
41
43
|
return Promise.resolve();
|
|
42
44
|
}
|
|
43
|
-
exports.init = init;
|
|
44
45
|
async function build(cwd) {
|
|
45
46
|
(0, utils_1.assertFlutterCliExists)();
|
|
46
47
|
const pubSpec = await (0, utils_1.getPubSpec)(cwd);
|
|
@@ -51,8 +52,6 @@ async function build(cwd) {
|
|
|
51
52
|
throw new error_1.FirebaseError("Unable to build your Flutter app");
|
|
52
53
|
return Promise.resolve({ wantsBackend: false });
|
|
53
54
|
}
|
|
54
|
-
exports.build = build;
|
|
55
55
|
async function ɵcodegenPublicDirectory(sourceDir, destDir) {
|
|
56
56
|
await (0, fs_extra_1.copy)((0, path_1.join)(sourceDir, "build", "web"), destDir);
|
|
57
57
|
}
|
|
58
|
-
exports.ɵcodegenPublicDirectory = ɵcodegenPublicDirectory;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.assertFlutterCliExists = assertFlutterCliExists;
|
|
4
|
+
exports.getAdditionalBuildArgs = getAdditionalBuildArgs;
|
|
5
|
+
exports.getPubSpec = getPubSpec;
|
|
4
6
|
const cross_spawn_1 = require("cross-spawn");
|
|
5
7
|
const error_1 = require("../../error");
|
|
6
8
|
const promises_1 = require("fs/promises");
|
|
@@ -12,7 +14,6 @@ function assertFlutterCliExists() {
|
|
|
12
14
|
if (process.status !== 0)
|
|
13
15
|
throw new error_1.FirebaseError("Flutter CLI not found, follow the instructions here https://docs.flutter.dev/get-started/install before trying again.");
|
|
14
16
|
}
|
|
15
|
-
exports.assertFlutterCliExists = assertFlutterCliExists;
|
|
16
17
|
function getAdditionalBuildArgs(pubSpec) {
|
|
17
18
|
const treeShakePackages = [
|
|
18
19
|
"material_icons_named",
|
|
@@ -22,11 +23,10 @@ function getAdditionalBuildArgs(pubSpec) {
|
|
|
22
23
|
"font_awesome_flutter",
|
|
23
24
|
"ionicons_named",
|
|
24
25
|
];
|
|
25
|
-
const hasTreeShakePackage = treeShakePackages.some((pkg) =>
|
|
26
|
+
const hasTreeShakePackage = treeShakePackages.some((pkg) => pubSpec.dependencies?.[pkg]);
|
|
26
27
|
const treeShakeFlags = hasTreeShakePackage ? ["--no-tree-shake-icons"] : [];
|
|
27
28
|
return [...treeShakeFlags];
|
|
28
29
|
}
|
|
29
|
-
exports.getAdditionalBuildArgs = getAdditionalBuildArgs;
|
|
30
30
|
async function getPubSpec(dir) {
|
|
31
31
|
if (!(await (0, fs_extra_1.pathExists)((0, path_1.join)(dir, "pubspec.yaml"))))
|
|
32
32
|
return {};
|
|
@@ -41,4 +41,3 @@ async function getPubSpec(dir) {
|
|
|
41
41
|
return {};
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
-
exports.getPubSpec = getPubSpec;
|
package/lib/frameworks/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.WebFrameworks = void 0;
|
|
4
|
+
exports.discover = discover;
|
|
5
|
+
exports.generateSSRCodebaseId = generateSSRCodebaseId;
|
|
6
|
+
exports.prepareFrameworks = prepareFrameworks;
|
|
4
7
|
const path_1 = require("path");
|
|
5
8
|
const process_1 = require("process");
|
|
6
9
|
const child_process_1 = require("child_process");
|
|
@@ -46,7 +49,7 @@ async function discover(dir, warn = true) {
|
|
|
46
49
|
continue;
|
|
47
50
|
const result = await discover(dir);
|
|
48
51
|
if (result)
|
|
49
|
-
frameworksDiscovered.push(
|
|
52
|
+
frameworksDiscovered.push({ framework, ...result });
|
|
50
53
|
}
|
|
51
54
|
}
|
|
52
55
|
if (frameworksDiscovered.length > 1) {
|
|
@@ -61,7 +64,6 @@ async function discover(dir, warn = true) {
|
|
|
61
64
|
console.warn("Could not determine the web framework in use.");
|
|
62
65
|
return;
|
|
63
66
|
}
|
|
64
|
-
exports.discover = discover;
|
|
65
67
|
const BUILD_MEMO = new Map();
|
|
66
68
|
function memoizeBuild(dir, build, deps, target, context) {
|
|
67
69
|
const key = [dir, ...deps];
|
|
@@ -77,10 +79,8 @@ function memoizeBuild(dir, build, deps, target, context) {
|
|
|
77
79
|
function generateSSRCodebaseId(site) {
|
|
78
80
|
return `firebase-frameworks-${site}`;
|
|
79
81
|
}
|
|
80
|
-
exports.generateSSRCodebaseId = generateSSRCodebaseId;
|
|
81
82
|
async function prepareFrameworks(purpose, targetNames, context, options, emulators = []) {
|
|
82
|
-
var _a, _b, _c, _d, _e
|
|
83
|
-
var _g, _h, _j, _k, _l;
|
|
83
|
+
var _a, _b, _c, _d, _e;
|
|
84
84
|
const project = (0, projectUtils_1.needProjectId)(context || options);
|
|
85
85
|
const isDemoProject = constants_1.Constants.isDemoProject(project);
|
|
86
86
|
const projectRoot = (0, projectPath_1.resolveProjectPath)(options, ".");
|
|
@@ -92,7 +92,7 @@ async function prepareFrameworks(purpose, targetNames, context, options, emulato
|
|
|
92
92
|
try {
|
|
93
93
|
await (0, requireHostingSite_1.requireHostingSite)(options);
|
|
94
94
|
}
|
|
95
|
-
catch
|
|
95
|
+
catch {
|
|
96
96
|
options.site = project;
|
|
97
97
|
}
|
|
98
98
|
}
|
|
@@ -110,15 +110,15 @@ async function prepareFrameworks(purpose, targetNames, context, options, emulato
|
|
|
110
110
|
config.rewrites || (config.rewrites = []);
|
|
111
111
|
config.redirects || (config.redirects = []);
|
|
112
112
|
config.headers || (config.headers = []);
|
|
113
|
-
|
|
113
|
+
config.cleanUrls ?? (config.cleanUrls = true);
|
|
114
114
|
const dist = (0, path_1.join)(projectRoot, ".firebase", site);
|
|
115
115
|
const hostingDist = (0, path_1.join)(dist, "hosting");
|
|
116
116
|
const functionsDist = (0, path_1.join)(dist, "functions");
|
|
117
117
|
if (publicDir) {
|
|
118
118
|
throw new Error(`hosting.public and hosting.source cannot both be set in firebase.json`);
|
|
119
119
|
}
|
|
120
|
-
const ssrRegion =
|
|
121
|
-
const omitCloudFunction =
|
|
120
|
+
const ssrRegion = frameworksBackend?.region ?? constants_2.DEFAULT_REGION;
|
|
121
|
+
const omitCloudFunction = frameworksBackend?.omit ?? false;
|
|
122
122
|
if (!allowedRegionsValues.includes(ssrRegion)) {
|
|
123
123
|
const validRegions = (0, utils_1.conjoinOptions)(allowedRegionsValues);
|
|
124
124
|
throw new error_1.FirebaseError(`Hosting config for site ${site} places server-side content in region ${ssrRegion} which is not known. Valid regions are ${validRegions}`);
|
|
@@ -206,7 +206,7 @@ async function prepareFrameworks(purpose, targetNames, context, options, emulato
|
|
|
206
206
|
const frameworkContext = {
|
|
207
207
|
projectId: project,
|
|
208
208
|
site: options.site,
|
|
209
|
-
hostingChannel: context
|
|
209
|
+
hostingChannel: context?.hostingChannel,
|
|
210
210
|
};
|
|
211
211
|
let codegenFunctionsDirectory;
|
|
212
212
|
let baseUrl = "";
|
|
@@ -226,7 +226,7 @@ async function prepareFrameworks(purpose, targetNames, context, options, emulato
|
|
|
226
226
|
const buildResult = await memoizeBuild(getProjectPath(), build, [firebaseDefaults, frameworksBuildTarget], frameworksBuildTarget, frameworkContext);
|
|
227
227
|
const { wantsBackend = false, trailingSlash, i18n = false } = buildResult || {};
|
|
228
228
|
if (buildResult) {
|
|
229
|
-
baseUrl =
|
|
229
|
+
baseUrl = buildResult.baseUrl ?? baseUrl;
|
|
230
230
|
if (buildResult.headers)
|
|
231
231
|
headers.push(...buildResult.headers);
|
|
232
232
|
if (buildResult.rewrites)
|
|
@@ -234,9 +234,9 @@ async function prepareFrameworks(purpose, targetNames, context, options, emulato
|
|
|
234
234
|
if (buildResult.redirects)
|
|
235
235
|
redirects.push(...buildResult.redirects);
|
|
236
236
|
}
|
|
237
|
-
|
|
237
|
+
config.trailingSlash ?? (config.trailingSlash = trailingSlash);
|
|
238
238
|
if (i18n)
|
|
239
|
-
|
|
239
|
+
config.i18n ?? (config.i18n = { root: constants_2.I18N_ROOT });
|
|
240
240
|
if (await (0, fs_extra_1.pathExists)(hostingDist))
|
|
241
241
|
await (0, promises_1.rm)(hostingDist, { recursive: true });
|
|
242
242
|
await (0, fs_extra_1.mkdirp)(hostingDist);
|
|
@@ -254,7 +254,7 @@ async function prepareFrameworks(purpose, targetNames, context, options, emulato
|
|
|
254
254
|
firebaseDefaults._authTokenSyncURL = "/__session";
|
|
255
255
|
process.env.__FIREBASE_DEFAULTS__ = JSON.stringify(firebaseDefaults);
|
|
256
256
|
}
|
|
257
|
-
if (context
|
|
257
|
+
if (context?.hostingChannel) {
|
|
258
258
|
experiments.assertEnabled("pintags", "deploy an app that requires a backend to a preview channel");
|
|
259
259
|
}
|
|
260
260
|
const codebase = generateSSRCodebaseId(site);
|
|
@@ -278,7 +278,7 @@ async function prepareFrameworks(purpose, targetNames, context, options, emulato
|
|
|
278
278
|
}
|
|
279
279
|
if (await (0, fs_extra_1.pathExists)(functionsDist)) {
|
|
280
280
|
const functionsDistStat = await (0, fs_extra_1.stat)(functionsDist);
|
|
281
|
-
if (functionsDistStat
|
|
281
|
+
if (functionsDistStat?.isDirectory()) {
|
|
282
282
|
const files = await (0, promises_1.readdir)(functionsDist);
|
|
283
283
|
for (const file of files) {
|
|
284
284
|
if (file !== "node_modules" && file !== "package-lock.json")
|
|
@@ -310,23 +310,23 @@ async function prepareFrameworks(purpose, targetNames, context, options, emulato
|
|
|
310
310
|
process.env.__FIREBASE_FRAMEWORKS_ENTRY__ = frameworksEntry;
|
|
311
311
|
packageJson.main = "server.js";
|
|
312
312
|
packageJson.dependencies || (packageJson.dependencies = {});
|
|
313
|
-
(
|
|
314
|
-
(
|
|
315
|
-
(
|
|
313
|
+
(_a = packageJson.dependencies)["firebase-frameworks"] || (_a["firebase-frameworks"] = constants_2.FIREBASE_FRAMEWORKS_VERSION);
|
|
314
|
+
(_b = packageJson.dependencies)["firebase-functions"] || (_b["firebase-functions"] = constants_2.FIREBASE_FUNCTIONS_VERSION);
|
|
315
|
+
(_c = packageJson.dependencies)["firebase-admin"] || (_c["firebase-admin"] = constants_2.FIREBASE_ADMIN_VERSION);
|
|
316
316
|
packageJson.engines || (packageJson.engines = {});
|
|
317
317
|
const validEngines = constants_2.VALID_ENGINES.node.filter((it) => it <= constants_2.NODE_VERSION);
|
|
318
318
|
const engine = validEngines[validEngines.length - 1] || constants_2.VALID_ENGINES.node[0];
|
|
319
319
|
if (engine !== constants_2.NODE_VERSION) {
|
|
320
320
|
(0, utils_2.logWarning)(`This integration expects Node version ${(0, utils_1.conjoinOptions)(constants_2.VALID_ENGINES.node, "or")}. You're running version ${constants_2.NODE_VERSION}, problems may be encountered.`);
|
|
321
321
|
}
|
|
322
|
-
(
|
|
322
|
+
(_d = packageJson.engines).node || (_d.node = engine.toString());
|
|
323
323
|
delete packageJson.scripts;
|
|
324
324
|
delete packageJson.devDependencies;
|
|
325
325
|
const bundledDependencies = packageJson.bundledDependencies || {};
|
|
326
326
|
if (Object.keys(bundledDependencies).length) {
|
|
327
327
|
(0, utils_2.logWarning)("Bundled dependencies aren't supported in Cloud Functions, converting to dependencies.");
|
|
328
328
|
for (const [dep, version] of Object.entries(bundledDependencies)) {
|
|
329
|
-
(
|
|
329
|
+
(_e = packageJson.dependencies)[dep] || (_e[dep] = version);
|
|
330
330
|
}
|
|
331
331
|
delete packageJson.bundledDependencies;
|
|
332
332
|
}
|
|
@@ -420,7 +420,6 @@ ${firebaseDefaults ? `__FIREBASE_DEFAULTS__=${JSON.stringify(firebaseDefaults)}\
|
|
|
420
420
|
delete process.env.__FIREBASE_DEFAULTS__;
|
|
421
421
|
delete process.env.__FIREBASE_FRAMEWORKS_ENTRY__;
|
|
422
422
|
}
|
|
423
|
-
exports.prepareFrameworks = prepareFrameworks;
|
|
424
423
|
function codegenDevModeFunctionsDirectory() {
|
|
425
424
|
const packageJson = {};
|
|
426
425
|
return Promise.resolve({ packageJson, frameworksEntry: "_devMode" });
|
|
@@ -24,7 +24,9 @@ const WEBPACK_LAYERS_NAMES = {
|
|
|
24
24
|
appMetadataRoute: "app-metadata-route",
|
|
25
25
|
appRouteHandler: "app-route-handler",
|
|
26
26
|
};
|
|
27
|
-
exports.WEBPACK_LAYERS =
|
|
27
|
+
exports.WEBPACK_LAYERS = {
|
|
28
|
+
...WEBPACK_LAYERS_NAMES,
|
|
29
|
+
GROUP: {
|
|
28
30
|
server: [
|
|
29
31
|
WEBPACK_LAYERS_NAMES.reactServerComponents,
|
|
30
32
|
WEBPACK_LAYERS_NAMES.actionBrowser,
|
|
@@ -44,4 +46,5 @@ exports.WEBPACK_LAYERS = Object.assign(Object.assign({}, WEBPACK_LAYERS_NAMES),
|
|
|
44
46
|
WEBPACK_LAYERS_NAMES.appPagesBrowser,
|
|
45
47
|
WEBPACK_LAYERS_NAMES.shared,
|
|
46
48
|
],
|
|
47
|
-
}
|
|
49
|
+
},
|
|
50
|
+
};
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.docsUrl = exports.type = exports.support = exports.name = exports.supportedRange = void 0;
|
|
4
|
+
exports.discover = discover;
|
|
5
|
+
exports.build = build;
|
|
6
|
+
exports.init = init;
|
|
7
|
+
exports.ɵcodegenPublicDirectory = ɵcodegenPublicDirectory;
|
|
8
|
+
exports.ɵcodegenFunctionsDirectory = ɵcodegenFunctionsDirectory;
|
|
9
|
+
exports.getDevModeHandle = getDevModeHandle;
|
|
4
10
|
const child_process_1 = require("child_process");
|
|
5
11
|
const cross_spawn_1 = require("cross-spawn");
|
|
6
12
|
const promises_1 = require("fs/promises");
|
|
@@ -32,8 +38,7 @@ exports.type = 2;
|
|
|
32
38
|
exports.docsUrl = "https://firebase.google.com/docs/hosting/frameworks/nextjs";
|
|
33
39
|
const DEFAULT_NUMBER_OF_REASONS_TO_LIST = 5;
|
|
34
40
|
function getReactVersion(cwd) {
|
|
35
|
-
|
|
36
|
-
return (_a = (0, utils_1.findDependency)("react-dom", { cwd, omitDev: false })) === null || _a === void 0 ? void 0 : _a.version;
|
|
41
|
+
return (0, utils_1.findDependency)("react-dom", { cwd, omitDev: false })?.version;
|
|
37
42
|
}
|
|
38
43
|
async function discover(dir) {
|
|
39
44
|
if (!(await (0, fs_extra_1.pathExists)((0, path_1.join)(dir, "package.json"))))
|
|
@@ -43,23 +48,21 @@ async function discover(dir) {
|
|
|
43
48
|
return;
|
|
44
49
|
return { mayWantBackend: true, publicDirectory: (0, path_1.join)(dir, PUBLIC_DIR), version };
|
|
45
50
|
}
|
|
46
|
-
exports.discover = discover;
|
|
47
51
|
async function build(dir, target, context) {
|
|
48
|
-
var _a, _b;
|
|
49
52
|
await (0, utils_1.warnIfCustomBuildScript)(dir, exports.name, DEFAULT_BUILD_SCRIPT);
|
|
50
53
|
const reactVersion = getReactVersion(dir);
|
|
51
54
|
if (reactVersion && (0, semver_1.gte)(reactVersion, "18.0.0")) {
|
|
52
55
|
process.env.__NEXT_REACT_ROOT = "true";
|
|
53
56
|
}
|
|
54
|
-
let env =
|
|
55
|
-
if (context
|
|
57
|
+
let env = { ...process.env };
|
|
58
|
+
if (context?.projectId) {
|
|
56
59
|
const projectEnvPath = (0, path_1.join)(dir, `.env.${context.projectId}`);
|
|
57
60
|
if (await (0, fs_extra_1.pathExists)(projectEnvPath)) {
|
|
58
61
|
const projectEnvVars = (0, env_1.parseStrict)((await (0, fs_extra_1.readFile)(projectEnvPath)).toString());
|
|
59
|
-
env =
|
|
62
|
+
env = { ...projectEnvVars, ...env };
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
|
-
if (
|
|
65
|
+
if (context?.projectId && context?.site) {
|
|
63
66
|
const deploymentDomain = await (0, api_1.getDeploymentDomain)(context.projectId, context.site, context.hostingChannel);
|
|
64
67
|
if (deploymentDomain) {
|
|
65
68
|
env["VERCEL_URL"] = deploymentDomain;
|
|
@@ -67,10 +70,9 @@ async function build(dir, target, context) {
|
|
|
67
70
|
}
|
|
68
71
|
const cli = (0, utils_1.getNodeModuleBin)("next", dir);
|
|
69
72
|
const nextBuild = new Promise((resolve, reject) => {
|
|
70
|
-
var _a, _b;
|
|
71
73
|
const buildProcess = (0, cross_spawn_1.spawn)(cli, ["build"], { cwd: dir, env });
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
buildProcess.stdout?.on("data", (data) => logger_1.logger.info(data.toString()));
|
|
75
|
+
buildProcess.stderr?.on("data", (data) => logger_1.logger.info(data.toString()));
|
|
74
76
|
buildProcess.on("error", (err) => {
|
|
75
77
|
reject(new error_1.FirebaseError(`Unable to build your Next.js app: ${err}`));
|
|
76
78
|
});
|
|
@@ -164,7 +166,7 @@ async function build(dir, target, context) {
|
|
|
164
166
|
}));
|
|
165
167
|
const nextJsRewritesToUse = (0, utils_2.getNextjsRewritesToUse)(nextJsRewrites);
|
|
166
168
|
if (!Array.isArray(nextJsRewrites) &&
|
|
167
|
-
(
|
|
169
|
+
(nextJsRewrites.afterFiles?.length || nextJsRewrites.fallback?.length)) {
|
|
168
170
|
reasonsForBackend.add("advanced rewrites");
|
|
169
171
|
}
|
|
170
172
|
const isEveryRewriteSupported = nextJsRewritesToUse.every(utils_2.isRewriteSupportedByHosting);
|
|
@@ -227,7 +229,6 @@ async function build(dir, target, context) {
|
|
|
227
229
|
baseUrl,
|
|
228
230
|
};
|
|
229
231
|
}
|
|
230
|
-
exports.build = build;
|
|
231
232
|
async function init(setup, config) {
|
|
232
233
|
const language = await (0, prompt_1.select)({
|
|
233
234
|
default: "TypeScript",
|
|
@@ -240,11 +241,10 @@ async function init(setup, config) {
|
|
|
240
241
|
(0, child_process_1.execSync)(`npx --yes create-next-app@"${exports.supportedRange}" -e hello-world ` +
|
|
241
242
|
`${setup.featureInfo.hosting.source} --use-npm --${language}`, { stdio: "inherit", cwd: config.projectDir });
|
|
242
243
|
}
|
|
243
|
-
exports.init = init;
|
|
244
244
|
async function ɵcodegenPublicDirectory(sourceDir, destDir, _, context) {
|
|
245
245
|
const { distDir, i18n, basePath } = await getConfig(sourceDir);
|
|
246
246
|
let matchingI18nDomain = undefined;
|
|
247
|
-
if (i18n
|
|
247
|
+
if (i18n?.domains) {
|
|
248
248
|
const siteDomains = await (0, api_1.getAllSiteDomains)(context.project, context.site);
|
|
249
249
|
matchingI18nDomain = i18n.domains.find(({ domain }) => siteDomains.includes(domain));
|
|
250
250
|
}
|
|
@@ -299,10 +299,12 @@ async function ɵcodegenPublicDirectory(sourceDir, destDir, _, context) {
|
|
|
299
299
|
},
|
|
300
300
|
];
|
|
301
301
|
}));
|
|
302
|
-
const routesToCopy =
|
|
302
|
+
const routesToCopy = {
|
|
303
|
+
...prerenderManifest.routes,
|
|
304
|
+
...pagesManifestLikePrerender,
|
|
305
|
+
};
|
|
303
306
|
const { pprRoutes } = await (0, utils_2.getAppMetadataFromMetaFiles)(sourceDir, distDir, basePath, appPathRoutesManifest);
|
|
304
307
|
await Promise.all(Object.entries(routesToCopy).map(async ([path, route]) => {
|
|
305
|
-
var _a, _b;
|
|
306
308
|
if (route.initialRevalidateSeconds) {
|
|
307
309
|
logger_1.logger.debug(`skipping ${path} due to revalidate`);
|
|
308
310
|
return;
|
|
@@ -315,10 +317,10 @@ async function ɵcodegenPublicDirectory(sourceDir, destDir, _, context) {
|
|
|
315
317
|
logger_1.logger.debug(`skipping ${path} due to server action`);
|
|
316
318
|
return;
|
|
317
319
|
}
|
|
318
|
-
const appPathRoute = route.srcRoute &&
|
|
320
|
+
const appPathRoute = route.srcRoute && appPathRoutesEntries.find(([, it]) => it === route.srcRoute)?.[0];
|
|
319
321
|
const contentDist = (0, path_1.join)(sourceDir, distDir, "server", appPathRoute ? "app" : "pages");
|
|
320
322
|
const sourceParts = path.split("/").filter((it) => !!it);
|
|
321
|
-
const locale =
|
|
323
|
+
const locale = i18n?.locales.includes(sourceParts[0]) ? sourceParts[0] : undefined;
|
|
322
324
|
const includeOnThisDomain = !locale ||
|
|
323
325
|
!matchingI18nDomain ||
|
|
324
326
|
matchingI18nDomain.defaultLocale === locale ||
|
|
@@ -331,7 +333,7 @@ async function ɵcodegenPublicDirectory(sourceDir, destDir, _, context) {
|
|
|
331
333
|
const sourcePartsOrIndex = sourceParts.length > 0 ? sourceParts : ["index"];
|
|
332
334
|
const destParts = sourceParts.slice(locale ? 1 : 0);
|
|
333
335
|
const destPartsOrIndex = destParts.length > 0 ? destParts : ["index"];
|
|
334
|
-
const isDefaultLocale = !locale || (
|
|
336
|
+
const isDefaultLocale = !locale || (matchingI18nDomain || i18n)?.defaultLocale === locale;
|
|
335
337
|
let sourcePath = (0, path_1.join)(contentDist, ...sourcePartsOrIndex);
|
|
336
338
|
let localizedDestPath = !singleLocaleDomain &&
|
|
337
339
|
locale &&
|
|
@@ -373,7 +375,6 @@ async function ɵcodegenPublicDirectory(sourceDir, destDir, _, context) {
|
|
|
373
375
|
}
|
|
374
376
|
}));
|
|
375
377
|
}
|
|
376
|
-
exports.ɵcodegenPublicDirectory = ɵcodegenPublicDirectory;
|
|
377
378
|
async function ɵcodegenFunctionsDirectory(sourceDir, destDir, target, context) {
|
|
378
379
|
const { distDir } = await getConfig(sourceDir);
|
|
379
380
|
const packageJson = await (0, utils_1.readJSON)((0, path_1.join)(sourceDir, "package.json"));
|
|
@@ -445,7 +446,7 @@ async function ɵcodegenFunctionsDirectory(sourceDir, destDir, target, context)
|
|
|
445
446
|
packageJson.dependencies["sharp"] = constants_1.SHARP_VERSION;
|
|
446
447
|
}
|
|
447
448
|
const dotEnv = {};
|
|
448
|
-
if (
|
|
449
|
+
if (context?.projectId && context?.site) {
|
|
449
450
|
const deploymentDomain = await (0, api_1.getDeploymentDomain)(context.projectId, context.site, context.hostingChannel);
|
|
450
451
|
if (deploymentDomain) {
|
|
451
452
|
dotEnv["VERCEL_URL"] = deploymentDomain;
|
|
@@ -460,7 +461,6 @@ async function ɵcodegenFunctionsDirectory(sourceDir, destDir, target, context)
|
|
|
460
461
|
})));
|
|
461
462
|
return { packageJson, frameworksEntry: "next.js", dotEnv };
|
|
462
463
|
}
|
|
463
|
-
exports.ɵcodegenFunctionsDirectory = ɵcodegenFunctionsDirectory;
|
|
464
464
|
async function getDevModeHandle(dir, _, hostingEmulatorInfo) {
|
|
465
465
|
if (!hostingEmulatorInfo) {
|
|
466
466
|
if (await (0, utils_2.isUsingMiddleware)(dir, true)) {
|
|
@@ -473,8 +473,8 @@ async function getDevModeHandle(dir, _, hostingEmulatorInfo) {
|
|
|
473
473
|
const nextApp = next({
|
|
474
474
|
dev: true,
|
|
475
475
|
dir,
|
|
476
|
-
hostname: hostingEmulatorInfo
|
|
477
|
-
port: hostingEmulatorInfo
|
|
476
|
+
hostname: hostingEmulatorInfo?.host,
|
|
477
|
+
port: hostingEmulatorInfo?.port,
|
|
478
478
|
});
|
|
479
479
|
const handler = nextApp.getRequestHandler();
|
|
480
480
|
await nextApp.prepare();
|
|
@@ -483,10 +483,7 @@ async function getDevModeHandle(dir, _, hostingEmulatorInfo) {
|
|
|
483
483
|
await handler(req, res, parsedUrl);
|
|
484
484
|
});
|
|
485
485
|
}
|
|
486
|
-
exports.getDevModeHandle = getDevModeHandle;
|
|
487
486
|
async function getConfig(dir) {
|
|
488
|
-
var _a;
|
|
489
|
-
var _b;
|
|
490
487
|
let config = {};
|
|
491
488
|
const configFile = await (0, utils_2.whichNextConfigFile)(dir);
|
|
492
489
|
if (configFile) {
|
|
@@ -502,13 +499,18 @@ async function getConfig(dir) {
|
|
|
502
499
|
}
|
|
503
500
|
else {
|
|
504
501
|
try {
|
|
505
|
-
config = await (
|
|
502
|
+
config = await Promise.resolve(`${(0, url_1.pathToFileURL)((0, path_1.join)(dir, configFile)).toString()}`).then(s => require(s));
|
|
506
503
|
}
|
|
507
504
|
catch (e) {
|
|
508
505
|
throw new Error(`Unable to load ${configFile}.`);
|
|
509
506
|
}
|
|
510
507
|
}
|
|
511
508
|
}
|
|
512
|
-
(0, utils_1.validateLocales)(
|
|
513
|
-
return
|
|
509
|
+
(0, utils_1.validateLocales)(config.i18n?.locales);
|
|
510
|
+
return {
|
|
511
|
+
distDir: ".next",
|
|
512
|
+
trailingSlash: false,
|
|
513
|
+
basePath: "/",
|
|
514
|
+
...config,
|
|
515
|
+
};
|
|
514
516
|
}
|