firebase-tools 11.4.1 → 11.6.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.
Files changed (203) hide show
  1. package/lib/accountImporter.js +1 -1
  2. package/lib/auth.js +3 -4
  3. package/lib/bin/firebase.js +4 -4
  4. package/lib/command.js +35 -10
  5. package/lib/commands/apps-android-sha-create.js +1 -1
  6. package/lib/commands/apps-android-sha-delete.js +1 -1
  7. package/lib/commands/apps-create.js +1 -1
  8. package/lib/commands/apps-list.js +1 -1
  9. package/lib/commands/auth-export.js +1 -1
  10. package/lib/commands/auth-import.js +1 -1
  11. package/lib/commands/database-instances-list.js +1 -1
  12. package/lib/commands/database-push.js +1 -1
  13. package/lib/commands/database-remove.js +1 -1
  14. package/lib/commands/database-set.js +1 -1
  15. package/lib/commands/database-update.js +1 -1
  16. package/lib/commands/emulators-exec.js +4 -1
  17. package/lib/commands/emulators-export.js +5 -2
  18. package/lib/commands/emulators-start.js +24 -18
  19. package/lib/commands/ext-dev-deprecate.js +1 -1
  20. package/lib/commands/ext-dev-emulators-exec.js +1 -1
  21. package/lib/commands/ext-dev-emulators-start.js +1 -1
  22. package/lib/commands/ext-dev-extension-delete.js +1 -1
  23. package/lib/commands/ext-dev-list.js +1 -1
  24. package/lib/commands/ext-dev-publish.js +4 -1
  25. package/lib/commands/ext-dev-register.js +1 -1
  26. package/lib/commands/ext-dev-undeprecate.js +1 -1
  27. package/lib/commands/ext-dev-unpublish.js +1 -1
  28. package/lib/commands/ext-dev-usage.js +1 -1
  29. package/lib/commands/ext-info.js +1 -1
  30. package/lib/commands/ext-install.js +2 -2
  31. package/lib/commands/ext-update.js +1 -1
  32. package/lib/commands/ext.js +1 -1
  33. package/lib/commands/firestore-delete.js +2 -2
  34. package/lib/commands/firestore-indexes-list.js +3 -3
  35. package/lib/commands/functions-config-clone.js +1 -1
  36. package/lib/commands/functions-config-export.js +1 -1
  37. package/lib/commands/functions-config-set.js +1 -1
  38. package/lib/commands/functions-config-unset.js +1 -1
  39. package/lib/commands/functions-delete.js +1 -1
  40. package/lib/commands/functions-secrets-set.js +1 -1
  41. package/lib/commands/help.js +1 -1
  42. package/lib/commands/hosting-channel-create.js +5 -5
  43. package/lib/commands/hosting-channel-delete.js +3 -3
  44. package/lib/commands/hosting-channel-deploy.js +6 -6
  45. package/lib/commands/hosting-channel-list.js +2 -2
  46. package/lib/commands/hosting-channel-open.js +2 -2
  47. package/lib/commands/hosting-clone.js +8 -8
  48. package/lib/commands/hosting-disable.js +1 -1
  49. package/lib/commands/hosting-sites-create.js +4 -4
  50. package/lib/commands/hosting-sites-delete.js +4 -4
  51. package/lib/commands/hosting-sites-list.js +2 -2
  52. package/lib/commands/init.js +5 -5
  53. package/lib/commands/login-add.js +1 -1
  54. package/lib/commands/login-ci.js +2 -2
  55. package/lib/commands/login-list.js +1 -1
  56. package/lib/commands/login-use.js +1 -1
  57. package/lib/commands/login.js +3 -3
  58. package/lib/commands/logout.js +1 -1
  59. package/lib/commands/open.js +3 -3
  60. package/lib/commands/projects-list.js +2 -2
  61. package/lib/commands/serve.js +1 -1
  62. package/lib/commands/target-apply.js +1 -1
  63. package/lib/commands/target-clear.js +1 -1
  64. package/lib/commands/target-remove.js +1 -1
  65. package/lib/commands/target.js +1 -1
  66. package/lib/commands/use.js +7 -7
  67. package/lib/config.js +1 -1
  68. package/lib/deploy/database/prepare.js +3 -3
  69. package/lib/deploy/database/release.js +3 -3
  70. package/lib/deploy/extensions/deploymentSummary.js +1 -1
  71. package/lib/deploy/extensions/errors.js +1 -1
  72. package/lib/deploy/extensions/secrets.js +1 -1
  73. package/lib/deploy/extensions/tasks.js +2 -2
  74. package/lib/deploy/firestore/deploy.js +2 -2
  75. package/lib/deploy/firestore/prepare.js +2 -2
  76. package/lib/deploy/functions/backend.js +7 -5
  77. package/lib/deploy/functions/build.js +110 -95
  78. package/lib/deploy/functions/checkIam.js +3 -3
  79. package/lib/deploy/functions/containerCleaner.js +2 -2
  80. package/lib/deploy/functions/deploy.js +2 -2
  81. package/lib/deploy/functions/ensure.js +2 -2
  82. package/lib/deploy/functions/params.js +5 -2
  83. package/lib/deploy/functions/prepare.js +4 -4
  84. package/lib/deploy/functions/prepareFunctionsUpload.js +2 -2
  85. package/lib/deploy/functions/pricing.js +3 -2
  86. package/lib/deploy/functions/prompts.js +2 -2
  87. package/lib/deploy/functions/release/fabricator.js +10 -9
  88. package/lib/deploy/functions/release/index.js +1 -1
  89. package/lib/deploy/functions/release/reporter.js +1 -1
  90. package/lib/deploy/functions/runtimes/discovery/parsing.js +19 -8
  91. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +112 -107
  92. package/lib/deploy/functions/runtimes/node/parseRuntimeAndValidateSDK.js +1 -1
  93. package/lib/deploy/functions/runtimes/node/parseTriggers.js +54 -26
  94. package/lib/deploy/functions/runtimes/node/versioning.js +4 -4
  95. package/lib/deploy/functions/services/storage.js +6 -0
  96. package/lib/deploy/functions/validate.js +1 -1
  97. package/lib/deploy/hosting/convertConfig.js +8 -1
  98. package/lib/deploy/hosting/deploy.js +10 -9
  99. package/lib/deploy/hosting/uploader.js +2 -2
  100. package/lib/deploy/hosting/validate.js +2 -2
  101. package/lib/deploy/index.js +7 -7
  102. package/lib/deploy/lifecycleHooks.js +5 -2
  103. package/lib/deploy/storage/prepare.js +5 -3
  104. package/lib/deploy/storage/release.js +7 -6
  105. package/lib/emulator/auth/index.js +7 -2
  106. package/lib/emulator/auth/operations.js +10 -10
  107. package/lib/emulator/commandUtils.js +33 -16
  108. package/lib/emulator/constants.js +14 -6
  109. package/lib/emulator/controller.js +55 -18
  110. package/lib/emulator/databaseEmulator.js +1 -1
  111. package/lib/emulator/downloadableEmulators.js +8 -8
  112. package/lib/emulator/emulatorLogger.js +1 -1
  113. package/lib/emulator/eventarcEmulator.js +148 -0
  114. package/lib/emulator/extensionsEmulator.js +5 -3
  115. package/lib/emulator/firestoreEmulator.js +1 -1
  116. package/lib/emulator/functionsEmulator.js +66 -14
  117. package/lib/emulator/functionsEmulatorShared.js +12 -12
  118. package/lib/emulator/hub.js +7 -3
  119. package/lib/emulator/hubClient.js +2 -2
  120. package/lib/emulator/hubExport.js +22 -2
  121. package/lib/emulator/loggingEmulator.js +2 -2
  122. package/lib/emulator/registry.js +1 -0
  123. package/lib/emulator/storage/apis/firebase.js +13 -1
  124. package/lib/emulator/storage/apis/gcloud.js +15 -8
  125. package/lib/emulator/storage/files.js +25 -4
  126. package/lib/emulator/storage/metadata.js +6 -6
  127. package/lib/emulator/storage/multipart.js +4 -3
  128. package/lib/emulator/storage/rules/runtime.js +3 -3
  129. package/lib/emulator/storage/rules/utils.js +4 -2
  130. package/lib/emulator/storage/server.js +2 -1
  131. package/lib/emulator/storage/upload.js +1 -0
  132. package/lib/emulator/types.js +4 -0
  133. package/lib/emulator/ui.js +7 -2
  134. package/lib/ensureApiEnabled.js +7 -7
  135. package/lib/extensions/askUserForConsent.js +1 -1
  136. package/lib/extensions/askUserForEventsConfig.js +1 -1
  137. package/lib/extensions/askUserForParam.js +1 -1
  138. package/lib/extensions/changelog.js +2 -2
  139. package/lib/extensions/checkProjectBilling.js +2 -2
  140. package/lib/extensions/displayExtensionInfo.js +2 -102
  141. package/lib/extensions/emulator/triggerHelper.js +2 -2
  142. package/lib/extensions/extensionsApi.js +3 -2
  143. package/lib/extensions/extensionsHelper.js +30 -2
  144. package/lib/extensions/listExtensions.js +1 -1
  145. package/lib/extensions/manifest.js +1 -1
  146. package/lib/extensions/metricsUtils.js +1 -1
  147. package/lib/extensions/paramHelper.js +1 -1
  148. package/lib/extensions/updateHelper.js +3 -9
  149. package/lib/extensions/warnings.js +2 -2
  150. package/lib/fetchMOTD.js +1 -1
  151. package/lib/firestore/delete.js +1 -1
  152. package/lib/firestore/indexes.js +2 -2
  153. package/lib/firestore/validator.js +1 -1
  154. package/lib/functional.js +16 -1
  155. package/lib/functions/env.js +3 -3
  156. package/lib/functions/runtimeConfigExport.js +1 -1
  157. package/lib/functionsConfig.js +1 -1
  158. package/lib/functionsConfigClone.js +1 -1
  159. package/lib/functionsShellCommandAction.js +1 -1
  160. package/lib/gcp/cloudfunctions.js +24 -11
  161. package/lib/gcp/cloudfunctionsv2.js +48 -24
  162. package/lib/gcp/cloudscheduler.js +58 -22
  163. package/lib/gcp/cloudtasks.js +21 -4
  164. package/lib/gcp/proto.js +18 -6
  165. package/lib/gcp/resourceManager.js +25 -3
  166. package/lib/gcp/serviceusage.js +2 -2
  167. package/lib/handlePreviewToggles.js +4 -4
  168. package/lib/hosting/implicitInit.js +1 -1
  169. package/lib/hosting/normalizedHostingConfigs.js +3 -3
  170. package/lib/index.js +2 -2
  171. package/lib/init/features/database.js +1 -1
  172. package/lib/init/features/emulators.js +1 -1
  173. package/lib/init/features/firestore/index.js +2 -2
  174. package/lib/init/features/firestore/indexes.js +1 -1
  175. package/lib/init/features/firestore/rules.js +1 -1
  176. package/lib/init/features/functions/golang.js +1 -1
  177. package/lib/init/features/functions/index.js +8 -1
  178. package/lib/init/features/hosting/github.js +9 -9
  179. package/lib/init/features/hosting/index.js +1 -1
  180. package/lib/init/features/project.js +1 -1
  181. package/lib/init/features/remoteconfig.js +1 -1
  182. package/lib/init/features/storage.js +1 -1
  183. package/lib/init/index.js +1 -1
  184. package/lib/logError.js +3 -3
  185. package/lib/management/projects.js +1 -1
  186. package/lib/parseBoltRules.js +1 -1
  187. package/lib/previews.js +1 -1
  188. package/lib/profileReport.js +2 -2
  189. package/lib/projectUtils.js +1 -1
  190. package/lib/rc.js +1 -1
  191. package/lib/requireAuth.js +1 -1
  192. package/lib/requireDatabaseInstance.js +2 -2
  193. package/lib/requirePermissions.js +2 -2
  194. package/lib/rulesDeploy.js +49 -13
  195. package/lib/serve/hosting.js +2 -1
  196. package/lib/serve/index.js +15 -0
  197. package/lib/track.js +119 -3
  198. package/lib/utils.js +24 -11
  199. package/npm-shrinkwrap.json +14 -294
  200. package/package.json +5 -4
  201. package/schema/firebase-config.json +12 -0
  202. package/templates/extensions/CHANGELOG.md +1 -7
  203. package/templates/hosting/init.js +6 -2
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.serialImportUsers = exports.validateUserJson = exports.validateOptions = exports.transArrayToUser = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const apiv2_1 = require("./apiv2");
6
6
  const api_1 = require("./api");
7
7
  const logger_1 = require("./logger");
package/lib/auth.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.logout = exports.getAccessToken = exports.findAccountByEmail = exports.loginGithub = exports.loginGoogle = exports.setGlobalDefaultAccount = exports.setProjectAccount = exports.loginAdditionalAccount = exports.selectAccount = exports.setRefreshToken = exports.setActiveAccount = exports.getAllAccounts = exports.getAdditionalAccounts = exports.getProjectDefaultAccount = exports.getGlobalDefaultAccount = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const FormData = require("form-data");
6
6
  const fs = require("fs");
7
7
  const http = require("http");
@@ -21,7 +21,6 @@ const scopes = require("./scopes");
21
21
  const defaultCredentials_1 = require("./defaultCredentials");
22
22
  const uuid_1 = require("uuid");
23
23
  const crypto_1 = require("crypto");
24
- const cli_color_1 = require("cli-color");
25
24
  const track_1 = require("./track");
26
25
  const api_1 = require("./api");
27
26
  portfinder.basePort = 9005;
@@ -294,7 +293,7 @@ async function loginRemotely() {
294
293
  logger_1.logger.info();
295
294
  logger_1.logger.info("1. Take note of your session ID:");
296
295
  logger_1.logger.info();
297
- logger_1.logger.info(` ${(0, cli_color_1.bold)(sessionId.substring(0, 5).toUpperCase())}`);
296
+ logger_1.logger.info(` ${clc.bold(sessionId.substring(0, 5).toUpperCase())}`);
298
297
  logger_1.logger.info();
299
298
  logger_1.logger.info("2. Visit the URL below on any device and follow the instructions to get your code:");
300
299
  logger_1.logger.info();
@@ -366,7 +365,7 @@ async function loginWithLocalhost(port, callbackUrl, authUrl, successTemplate, g
366
365
  server.listen(port, () => {
367
366
  logger_1.logger.info();
368
367
  logger_1.logger.info("Visit this URL on this device to log in:");
369
- logger_1.logger.info(clc.bold.underline(authUrl));
368
+ logger_1.logger.info(clc.bold(clc.underline(authUrl)));
370
369
  logger_1.logger.info();
371
370
  logger_1.logger.info("Waiting for authentication...");
372
371
  open(authUrl);
@@ -9,20 +9,20 @@ if (!semver.satisfies(nodeVersion, pkg.engines.node)) {
9
9
  process.exit(1);
10
10
  }
11
11
  const updateNotifierPkg = require("update-notifier");
12
- const clc = require("cli-color");
12
+ const clc = require("colorette");
13
13
  const TerminalRenderer = require("marked-terminal");
14
14
  const updateNotifier = updateNotifierPkg({ pkg: pkg });
15
15
  const marked_1 = require("marked");
16
16
  marked_1.marked.setOptions({
17
17
  renderer: new TerminalRenderer(),
18
18
  });
19
- const updateMessage = `Update available ${clc.xterm(240)("{currentVersion}")} → ${clc.green("{latestVersion}")}\n` +
19
+ const updateMessage = `Update available ${clc.gray("{currentVersion}")} → ${clc.green("{latestVersion}")}\n` +
20
20
  `To update to the latest version using npm, run\n${clc.cyan("npm install -g firebase-tools")}\n` +
21
21
  `For other CLI management options, visit the ${(0, marked_1.marked)("[CLI documentation](https://firebase.google.com/docs/cli#update-cli)")}`;
22
22
  updateNotifier.notify({ defer: true, isGlobal: true, message: updateMessage });
23
23
  const node_path_1 = require("node:path");
24
24
  const triple_beam_1 = require("triple-beam");
25
- const cli_color_1 = require("cli-color");
25
+ const stripAnsi = require("strip-ansi");
26
26
  const fs = require("node:fs");
27
27
  const configstore_1 = require("../configstore");
28
28
  const errorOut_1 = require("../errorOut");
@@ -64,7 +64,7 @@ logger_1.logger.add(new winston.transports.File({
64
64
  filename: logFilename,
65
65
  format: winston.format.printf((info) => {
66
66
  const segments = [info.message, ...(info[triple_beam_1.SPLAT] || [])].map(utils.tryStringify);
67
- return `[${info.level}] ${(0, cli_color_1.strip)(segments.join(" "))}`;
67
+ return `[${info.level}] ${stripAnsi(segments.join(" "))}`;
68
68
  }),
69
69
  }));
70
70
  logger_1.logger.debug("-".repeat(70));
package/lib/command.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateProjectId = exports.Command = void 0;
4
- const cli_color_1 = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const lodash_1 = require("lodash");
6
6
  const error_1 = require("./error");
7
7
  const utils_1 = require("./utils");
@@ -10,7 +10,6 @@ const config_1 = require("./config");
10
10
  const configstore_1 = require("./configstore");
11
11
  const detectProjectRoot_1 = require("./detectProjectRoot");
12
12
  const track_1 = require("./track");
13
- const clc = require("cli-color");
14
13
  const auth_1 = require("./auth");
15
14
  const projects_1 = require("./management/projects");
16
15
  const requireAuth_1 = require("./requireAuth");
@@ -71,22 +70,39 @@ class Command {
71
70
  this.positionalArgs = cmd._args;
72
71
  cmd.action((...args) => {
73
72
  const runner = this.runner();
74
- const start = new Date().getTime();
73
+ const start = process.uptime();
75
74
  const options = (0, lodash_1.last)(args);
76
75
  if (args.length - 1 > cmd._args.length) {
77
- client.errorOut(new error_1.FirebaseError(`Too many arguments. Run ${(0, cli_color_1.bold)("firebase help " + this.name)} for usage instructions`, { exit: 1 }));
76
+ client.errorOut(new error_1.FirebaseError(`Too many arguments. Run ${clc.bold("firebase help " + this.name)} for usage instructions`, { exit: 1 }));
78
77
  return;
79
78
  }
79
+ const isEmulator = this.name.includes("emulator") || this.name === "serve";
80
+ if (isEmulator) {
81
+ void (0, track_1.trackEmulator)("command_start", { command_name: this.name });
82
+ }
80
83
  runner(...args)
81
- .then((result) => {
84
+ .then(async (result) => {
82
85
  if ((0, utils_1.getInheritedOption)(options, "json")) {
83
86
  console.log(JSON.stringify({
84
87
  status: "success",
85
88
  result: result,
86
89
  }, null, 2));
87
90
  }
88
- const duration = new Date().getTime() - start;
89
- void (0, track_1.track)(this.name, "success", duration).then(() => process.exit());
91
+ const duration = Math.floor((process.uptime() - start) * 1000);
92
+ const trackSuccess = (0, track_1.track)(this.name, "success", duration);
93
+ if (!isEmulator) {
94
+ await (0, utils_1.withTimeout)(5000, trackSuccess);
95
+ }
96
+ else {
97
+ await (0, utils_1.withTimeout)(5000, Promise.all([
98
+ trackSuccess,
99
+ (0, track_1.trackEmulator)("command_success", {
100
+ command_name: this.name,
101
+ duration,
102
+ }),
103
+ ]));
104
+ }
105
+ process.exit();
90
106
  })
91
107
  .catch(async (err) => {
92
108
  if ((0, utils_1.getInheritedOption)(options, "json")) {
@@ -95,9 +111,18 @@ class Command {
95
111
  error: err.message,
96
112
  }, null, 2));
97
113
  }
98
- const duration = Date.now() - start;
99
- const errorEvent = err.exit === 1 ? "Error (User)" : "Error (Unexpected)";
100
- await Promise.all([(0, track_1.track)(this.name, "error", duration), (0, track_1.track)(errorEvent, "", duration)]);
114
+ const duration = Math.floor((process.uptime() - start) * 1000);
115
+ await (0, utils_1.withTimeout)(5000, Promise.all([
116
+ (0, track_1.track)(this.name, "error", duration),
117
+ (0, track_1.track)(err.exit === 1 ? "Error (User)" : "Error (Unexpected)", "", duration),
118
+ isEmulator
119
+ ? (0, track_1.trackEmulator)("command_error", {
120
+ command_name: this.name,
121
+ duration,
122
+ error_type: err.exit === 1 ? "user" : "unexpected",
123
+ })
124
+ : Promise.resolve(),
125
+ ]));
101
126
  client.errorOut(err);
102
127
  });
103
128
  });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const command_1 = require("../command");
6
6
  const projectUtils_1 = require("../projectUtils");
7
7
  const apps_1 = require("../management/apps");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const command_1 = require("../command");
6
6
  const projectUtils_1 = require("../projectUtils");
7
7
  const apps_1 = require("../management/apps");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const ora = require("ora");
6
6
  const command_1 = require("../command");
7
7
  const projectUtils_1 = require("../projectUtils");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const ora = require("ora");
6
6
  const Table = require("cli-table");
7
7
  const command_1 = require("../command");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const fs = require("fs");
6
6
  const os = require("os");
7
7
  const command_1 = require("../command");
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
4
  const csv_parse_1 = require("csv-parse");
5
5
  const Chain = require("stream-chain");
6
- const clc = require("cli-color");
6
+ const clc = require("colorette");
7
7
  const fs = require("fs-extra");
8
8
  const Pick = require("stream-json/filters/Pick");
9
9
  const StreamArray = require("stream-json/streamers/StreamArray");
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
4
  const command_1 = require("../command");
5
5
  const Table = require("cli-table");
6
- const clc = require("cli-color");
6
+ const clc = require("colorette");
7
7
  const ora = require("ora");
8
8
  const logger_1 = require("../logger");
9
9
  const requirePermissions_1 = require("../requirePermissions");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const fs = require("fs");
6
6
  const apiv2_1 = require("../apiv2");
7
7
  const command_1 = require("../command");
@@ -11,7 +11,7 @@ const database_1 = require("../management/database");
11
11
  const api_1 = require("../database/api");
12
12
  const utils = require("../utils");
13
13
  const prompt_1 = require("../prompt");
14
- const clc = require("cli-color");
14
+ const clc = require("colorette");
15
15
  exports.command = new command_1.Command("database:remove <path>")
16
16
  .description("remove data from your Firebase at the specified path")
17
17
  .option("-f, --force", "pass this option to bypass confirmation prompt")
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const fs = require("fs");
6
6
  const apiv2_1 = require("../apiv2");
7
7
  const command_1 = require("../command");
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
4
  const url_1 = require("url");
5
- const clc = require("cli-color");
5
+ const clc = require("colorette");
6
6
  const fs = require("fs");
7
7
  const apiv2_1 = require("../apiv2");
8
8
  const command_1 = require("../command");
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
4
  const command_1 = require("../command");
5
5
  const commandUtils = require("../emulator/commandUtils");
6
+ const commandUtils_1 = require("../emulator/commandUtils");
6
7
  exports.command = new command_1.Command("emulators:exec <script>")
7
8
  .before(commandUtils.setExportOnExitOptions)
8
9
  .before(commandUtils.beforeEmulatorCommand)
@@ -12,4 +13,6 @@ exports.command = new command_1.Command("emulators:exec <script>")
12
13
  .option(commandUtils.FLAG_IMPORT, commandUtils.DESC_IMPORT)
13
14
  .option(commandUtils.FLAG_EXPORT_ON_EXIT, commandUtils.DESC_EXPORT_ON_EXIT)
14
15
  .option(commandUtils.FLAG_UI, commandUtils.DESC_UI)
15
- .action(commandUtils.emulatorExec);
16
+ .action((script, options) => {
17
+ return Promise.race([(0, commandUtils_1.shutdownWhenKilled)(options), (0, commandUtils_1.emulatorExec)(script, options)]);
18
+ });
@@ -4,8 +4,11 @@ exports.command = void 0;
4
4
  const command_1 = require("../command");
5
5
  const controller = require("../emulator/controller");
6
6
  const commandUtils = require("../emulator/commandUtils");
7
- exports.command = new command_1.Command("emulators:export <path>")
7
+ const COMMAND_NAME = "emulators:export";
8
+ exports.command = new command_1.Command(`${COMMAND_NAME} <path>`)
8
9
  .description("export data from running emulators")
9
10
  .withForce("overwrite any export data in the target directory")
10
11
  .option(commandUtils.FLAG_ONLY, commandUtils.DESC_ONLY)
11
- .action(controller.exportEmulatorData);
12
+ .action((exportPath, options) => {
13
+ return controller.exportEmulatorData(exportPath, options, COMMAND_NAME);
14
+ });
@@ -7,7 +7,7 @@ const commandUtils = require("../emulator/commandUtils");
7
7
  const logger_1 = require("../logger");
8
8
  const registry_1 = require("../emulator/registry");
9
9
  const types_1 = require("../emulator/types");
10
- const clc = require("cli-color");
10
+ const clc = require("colorette");
11
11
  const constants_1 = require("../emulator/constants");
12
12
  const utils_1 = require("../utils");
13
13
  const Table = require("cli-table");
@@ -22,16 +22,28 @@ exports.command = new command_1.Command("emulators:start")
22
22
  .option(commandUtils.FLAG_INSPECT_FUNCTIONS, commandUtils.DESC_INSPECT_FUNCTIONS)
23
23
  .option(commandUtils.FLAG_IMPORT, commandUtils.DESC_IMPORT)
24
24
  .option(commandUtils.FLAG_EXPORT_ON_EXIT, commandUtils.DESC_EXPORT_ON_EXIT)
25
- .action(async (options) => {
25
+ .action((options) => {
26
26
  const killSignalPromise = commandUtils.shutdownWhenKilled(options);
27
- let deprecationNotices;
28
- try {
29
- ({ deprecationNotices } = await controller.startAll(options));
30
- }
31
- catch (e) {
32
- await controller.cleanShutdown();
33
- throw e;
34
- }
27
+ return Promise.race([
28
+ killSignalPromise,
29
+ (async () => {
30
+ let deprecationNotices;
31
+ try {
32
+ ({ deprecationNotices } = await controller.startAll(options));
33
+ }
34
+ catch (e) {
35
+ await controller.cleanShutdown();
36
+ throw e;
37
+ }
38
+ printEmulatorOverview(options);
39
+ for (const notice of deprecationNotices) {
40
+ (0, utils_1.logLabeledWarning)("emulators", notice, "warn");
41
+ }
42
+ return killSignalPromise;
43
+ })(),
44
+ ]);
45
+ });
46
+ function printEmulatorOverview(options) {
35
47
  const reservedPorts = [];
36
48
  for (const internalEmulator of [types_1.Emulators.LOGGING]) {
37
49
  const info = registry_1.EmulatorRegistry.getInfo(internalEmulator);
@@ -71,9 +83,7 @@ exports.command = new command_1.Command("emulators:start")
71
83
  return [
72
84
  emulatorName,
73
85
  registry_1.EmulatorRegistry.getInfoHostString(info),
74
- isSupportedByUi && uiInfo
75
- ? stylizeLink(`${uiUrl}/${emulator}`)
76
- : clc.blackBright("n/a"),
86
+ isSupportedByUi && uiInfo ? stylizeLink(`${uiUrl}/${emulator}`) : clc.blackBright("n/a"),
77
87
  ];
78
88
  })
79
89
  .map((col) => col.slice(0, head.length))
@@ -93,8 +103,4 @@ ${clc.blackBright(" Other reserved ports:")} ${reservedPortsString}
93
103
  ${extensionsTable}
94
104
  Issues? Report them at ${stylizeLink("https://github.com/firebase/firebase-tools/issues")} and attach the *-debug.log files.
95
105
  `);
96
- for (const notice of deprecationNotices) {
97
- (0, utils_1.logLabeledWarning)("emulators", notice, "warn");
98
- }
99
- await killSignalPromise;
100
- });
106
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const semver = require("semver");
6
6
  const refs = require("../extensions/refs");
7
7
  const utils = require("../utils");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const checkMinRequiredVersion_1 = require("../checkMinRequiredVersion");
6
6
  const command_1 = require("../command");
7
7
  const error_1 = require("../error");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const command_1 = require("../command");
6
6
  const commandUtils = require("../emulator/commandUtils");
7
7
  const error_1 = require("../error");
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
4
  const utils = require("../utils");
5
- const clc = require("cli-color");
5
+ const clc = require("colorette");
6
6
  const command_1 = require("../command");
7
7
  const extensionsHelper_1 = require("../extensions/extensionsHelper");
8
8
  const extensionsApi_1 = require("../extensions/extensionsApi");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const Table = require("cli-table");
6
6
  const command_1 = require("../command");
7
7
  const error_1 = require("../error");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const { marked } = require("marked");
6
6
  const TerminalRenderer = require("marked-terminal");
7
7
  const command_1 = require("../command");
@@ -17,12 +17,14 @@ marked.setOptions({
17
17
  });
18
18
  exports.command = new command_1.Command("ext:dev:publish <extensionRef>")
19
19
  .description(`publish a new version of an extension`)
20
+ .option(`-s, --stage <stage>`, `release stage (supports "rc", "alpha", "beta", and "stable")`)
20
21
  .withForce()
21
22
  .help("if you have not previously published a version of this extension, this will " +
22
23
  "create the extension. If you have previously published a version of this extension, this version must " +
23
24
  "be greater than previous versions.")
24
25
  .before(requireAuth_1.requireAuth)
25
26
  .action(async (extensionRef, options) => {
27
+ var _a;
26
28
  const { publisherId, extensionId, version } = refs.parse(extensionRef);
27
29
  if (version) {
28
30
  throw new error_1.FirebaseError(`The input extension reference must be of the format ${clc.bold("<publisherId>/<extensionId>")}. Version should not be supplied and will be inferred directly from extension.yaml. Please increment the version in extension.yaml if you would like to bump/specify a version.`);
@@ -37,6 +39,7 @@ exports.command = new command_1.Command("ext:dev:publish <extensionRef>")
37
39
  rootDirectory: extensionYamlDirectory,
38
40
  nonInteractive: options.nonInteractive,
39
41
  force: options.force,
42
+ stage: (_a = options.stage) !== null && _a !== void 0 ? _a : "stable",
40
43
  });
41
44
  if (res) {
42
45
  utils.logLabeledBullet(extensionsHelper_1.logPrefix, marked(`[Install Link](${(0, publishHelpers_1.consoleInstallLink)(res.ref)})`));
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const { marked } = require("marked");
6
6
  const command_1 = require("../command");
7
7
  const extensionsApi_1 = require("../extensions/extensionsApi");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const semver = require("semver");
6
6
  const refs = require("../extensions/refs");
7
7
  const utils = require("../utils");
@@ -7,7 +7,7 @@ const extensionsApi_1 = require("../extensions/extensionsApi");
7
7
  const utils = require("../utils");
8
8
  const refs = require("../extensions/refs");
9
9
  const prompt_1 = require("../prompt");
10
- const clc = require("cli-color");
10
+ const clc = require("colorette");
11
11
  const requireAuth_1 = require("../requireAuth");
12
12
  const error_1 = require("../error");
13
13
  const checkMinRequiredVersion_1 = require("../checkMinRequiredVersion");
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
4
  const Table = require("cli-table");
5
- const clc = require("cli-color");
5
+ const clc = require("colorette");
6
6
  const utils = require("../utils");
7
7
  const command_1 = require("../command");
8
8
  const cloudmonitoring_1 = require("../gcp/cloudmonitoring");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const checkMinRequiredVersion_1 = require("../checkMinRequiredVersion");
6
6
  const command_1 = require("../command");
7
7
  const extensionsApi = require("../extensions/extensionsApi");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const { marked } = require("marked");
6
6
  const TerminalRenderer = require("marked-terminal");
7
7
  const displayExtensionInfo_1 = require("../extensions/displayExtensionInfo");
@@ -89,7 +89,7 @@ exports.command = new command_1.Command("ext:install [extensionName]")
89
89
  throw new error_1.FirebaseError(`Could not find the extension.yaml for extension '${clc.bold(extensionName)}'. Please make sure this is a valid extension and try again.`);
90
90
  }
91
91
  if (learnMore) {
92
- utils.logLabeledBullet(extensionsHelper_1.logPrefix, `You selected: ${clc.bold(spec.displayName)}.\n` +
92
+ utils.logLabeledBullet(extensionsHelper_1.logPrefix, `You selected: ${clc.bold(spec.displayName || "")}.\n` +
93
93
  `${spec.description}\n` +
94
94
  `View details: https://firebase.google.com/products/extensions/${spec.name}\n`);
95
95
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const { marked } = require("marked");
6
6
  const TerminalRenderer = require("marked-terminal");
7
7
  const checkMinRequiredVersion_1 = require("../checkMinRequiredVersion");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const checkMinRequiredVersion_1 = require("../checkMinRequiredVersion");
6
6
  const command_1 = require("../command");
7
7
  const projectUtils_1 = require("../projectUtils");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const command_1 = require("../command");
6
6
  const types_1 = require("../emulator/types");
7
7
  const commandUtils_1 = require("../emulator/commandUtils");
@@ -12,7 +12,7 @@ const utils = require("../utils");
12
12
  function getConfirmationMessage(deleteOp, options) {
13
13
  if (options.allCollections) {
14
14
  return ("You are about to delete " +
15
- clc.bold.yellow.underline("THE ENTIRE DATABASE") +
15
+ clc.bold(clc.yellow(clc.underline("THE ENTIRE DATABASE"))) +
16
16
  " for " +
17
17
  clc.cyan(options.project) +
18
18
  ". Are you sure?");
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
4
  const command_1 = require("../command");
5
- const clc = require("cli-color");
5
+ const clc = require("colorette");
6
6
  const fsi = require("../firestore/indexes");
7
7
  const logger_1 = require("../logger");
8
8
  const requirePermissions_1 = require("../requirePermissions");
@@ -20,11 +20,11 @@ exports.command = new command_1.Command("firestore:indexes")
20
20
  const fieldOverrides = await indexApi.listFieldOverrides(options.project);
21
21
  const indexSpec = indexApi.makeIndexSpec(indexes, fieldOverrides);
22
22
  if (options.pretty) {
23
- logger_1.logger.info(clc.bold.white("Compound Indexes"));
23
+ logger_1.logger.info(clc.bold(clc.white("Compound Indexes")));
24
24
  indexApi.prettyPrintIndexes(indexes);
25
25
  if (fieldOverrides) {
26
26
  logger_1.logger.info();
27
- logger_1.logger.info(clc.bold.white("Field Overrides"));
27
+ logger_1.logger.info(clc.bold(clc.white("Field Overrides")));
28
28
  indexApi.printFieldOverrides(fieldOverrides);
29
29
  }
30
30
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const command_1 = require("../command");
6
6
  const error_1 = require("../error");
7
7
  const logger_1 = require("../logger");
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
4
  const path = require("path");
5
- const clc = require("cli-color");
5
+ const clc = require("colorette");
6
6
  const requireInteractive_1 = require("../requireInteractive");
7
7
  const command_1 = require("../command");
8
8
  const error_1 = require("../error");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const command_1 = require("../command");
6
6
  const error_1 = require("../error");
7
7
  const logger_1 = require("../logger");
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.command = void 0;
4
- const clc = require("cli-color");
4
+ const clc = require("colorette");
5
5
  const command_1 = require("../command");
6
6
  const logger_1 = require("../logger");
7
7
  const requirePermissions_1 = require("../requirePermissions");