firebase-tools 11.0.0 → 11.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.
Files changed (223) hide show
  1. package/lib/accountExporter.js +11 -4
  2. package/lib/accountImporter.js +93 -95
  3. package/lib/api.js +77 -218
  4. package/lib/apiv2.js +5 -4
  5. package/lib/appdistribution/client.js +23 -34
  6. package/lib/auth.js +72 -52
  7. package/lib/bin/firebase.js +42 -47
  8. package/lib/checkValidTargetFilters.js +36 -25
  9. package/lib/commands/appdistribution-distribute.js +2 -1
  10. package/lib/commands/appdistribution-testers-add.js +2 -1
  11. package/lib/commands/appdistribution-testers-remove.js +2 -1
  12. package/lib/commands/apps-android-sha-create.js +2 -1
  13. package/lib/commands/apps-android-sha-delete.js +2 -1
  14. package/lib/commands/apps-android-sha-list.js +2 -1
  15. package/lib/commands/apps-create.js +2 -1
  16. package/lib/commands/apps-list.js +2 -1
  17. package/lib/commands/apps-sdkconfig.js +2 -1
  18. package/lib/commands/auth-export.js +2 -1
  19. package/lib/commands/auth-import.js +7 -10
  20. package/lib/commands/crashlytics-symbols-upload.js +2 -1
  21. package/lib/commands/database-get.js +4 -3
  22. package/lib/commands/database-instances-create.js +2 -1
  23. package/lib/commands/database-instances-list.js +3 -3
  24. package/lib/commands/database-profile.js +4 -4
  25. package/lib/commands/database-push.js +4 -4
  26. package/lib/commands/database-remove.js +3 -3
  27. package/lib/commands/database-rules-canary.js +2 -1
  28. package/lib/commands/database-rules-get.js +2 -1
  29. package/lib/commands/database-rules-list.js +2 -1
  30. package/lib/commands/database-rules-release.js +2 -1
  31. package/lib/commands/database-rules-stage.js +2 -1
  32. package/lib/commands/database-set.js +3 -3
  33. package/lib/commands/database-settings-get.js +2 -1
  34. package/lib/commands/database-settings-set.js +2 -1
  35. package/lib/commands/database-update.js +2 -1
  36. package/lib/commands/deploy.js +26 -25
  37. package/lib/commands/emulators-exec.js +2 -1
  38. package/lib/commands/emulators-export.js +2 -1
  39. package/lib/commands/emulators-start.js +2 -1
  40. package/lib/commands/experimental-functions-shell.js +10 -8
  41. package/lib/commands/ext-configure.js +6 -1
  42. package/lib/commands/ext-dev-deprecate.js +2 -1
  43. package/lib/commands/ext-dev-emulators-exec.js +3 -2
  44. package/lib/commands/ext-dev-emulators-start.js +3 -2
  45. package/lib/commands/ext-dev-extension-delete.js +2 -1
  46. package/lib/commands/ext-dev-init.js +2 -1
  47. package/lib/commands/ext-dev-list.js +8 -8
  48. package/lib/commands/ext-dev-publish.js +2 -1
  49. package/lib/commands/ext-dev-register.js +2 -1
  50. package/lib/commands/ext-dev-undeprecate.js +2 -1
  51. package/lib/commands/ext-dev-unpublish.js +2 -1
  52. package/lib/commands/ext-dev-usage.js +2 -1
  53. package/lib/commands/ext-export.js +2 -1
  54. package/lib/commands/ext-info.js +14 -14
  55. package/lib/commands/ext-install.js +6 -1
  56. package/lib/commands/ext-list.js +2 -1
  57. package/lib/commands/ext-sources-create.js +2 -1
  58. package/lib/commands/ext-uninstall.js +7 -1
  59. package/lib/commands/ext-update.js +6 -1
  60. package/lib/commands/ext.js +4 -4
  61. package/lib/commands/firestore-delete.js +2 -1
  62. package/lib/commands/firestore-indexes-list.js +2 -1
  63. package/lib/commands/functions-config-clone.js +4 -3
  64. package/lib/commands/functions-config-export.js +2 -1
  65. package/lib/commands/functions-config-get.js +2 -1
  66. package/lib/commands/functions-config-set.js +2 -1
  67. package/lib/commands/functions-config-unset.js +2 -1
  68. package/lib/commands/functions-delete.js +3 -8
  69. package/lib/commands/functions-deletegcfartifacts.js +2 -1
  70. package/lib/commands/functions-list.js +2 -1
  71. package/lib/commands/functions-log.js +2 -1
  72. package/lib/commands/functions-secrets-access.js +2 -1
  73. package/lib/commands/functions-secrets-destroy.js +2 -1
  74. package/lib/commands/functions-secrets-get.js +2 -1
  75. package/lib/commands/functions-secrets-prune.js +2 -1
  76. package/lib/commands/functions-secrets-set.js +2 -1
  77. package/lib/commands/functions-shell.js +12 -10
  78. package/lib/commands/help.js +2 -1
  79. package/lib/commands/hosting-channel-create.js +2 -1
  80. package/lib/commands/hosting-channel-delete.js +2 -1
  81. package/lib/commands/hosting-channel-deploy.js +2 -1
  82. package/lib/commands/hosting-channel-list.js +2 -1
  83. package/lib/commands/hosting-channel-open.js +2 -1
  84. package/lib/commands/hosting-clone.js +2 -1
  85. package/lib/commands/hosting-disable.js +2 -1
  86. package/lib/commands/hosting-sites-create.js +2 -1
  87. package/lib/commands/hosting-sites-delete.js +2 -1
  88. package/lib/commands/hosting-sites-get.js +2 -1
  89. package/lib/commands/hosting-sites-list.js +2 -1
  90. package/lib/commands/index.js +23 -13
  91. package/lib/commands/init.js +47 -43
  92. package/lib/commands/login-add.js +2 -1
  93. package/lib/commands/login-ci.js +2 -1
  94. package/lib/commands/login-list.js +2 -1
  95. package/lib/commands/login-use.js +2 -1
  96. package/lib/commands/login.js +2 -1
  97. package/lib/commands/logout.js +2 -1
  98. package/lib/commands/open.js +7 -7
  99. package/lib/commands/projects-addfirebase.js +2 -1
  100. package/lib/commands/projects-create.js +2 -1
  101. package/lib/commands/projects-list.js +2 -1
  102. package/lib/commands/remoteconfig-get.js +2 -1
  103. package/lib/commands/remoteconfig-rollback.js +2 -1
  104. package/lib/commands/remoteconfig-versions-list.js +2 -1
  105. package/lib/commands/serve.js +30 -30
  106. package/lib/commands/setup-emulators-database.js +2 -1
  107. package/lib/commands/setup-emulators-firestore.js +2 -1
  108. package/lib/commands/setup-emulators-pubsub.js +2 -1
  109. package/lib/commands/setup-emulators-storage.js +2 -1
  110. package/lib/commands/setup-emulators-ui.js +2 -1
  111. package/lib/commands/target-apply.js +2 -1
  112. package/lib/commands/target-clear.js +2 -1
  113. package/lib/commands/target-remove.js +2 -1
  114. package/lib/commands/target.js +2 -1
  115. package/lib/commands/use.js +54 -53
  116. package/lib/config.js +7 -6
  117. package/lib/deploy/database/deploy.js +3 -2
  118. package/lib/deploy/database/index.js +8 -5
  119. package/lib/deploy/database/prepare.js +22 -20
  120. package/lib/deploy/database/release.js +12 -9
  121. package/lib/deploy/extensions/secrets.js +3 -3
  122. package/lib/deploy/firestore/prepare.js +2 -2
  123. package/lib/deploy/functions/build.js +33 -20
  124. package/lib/deploy/functions/ensure.js +1 -11
  125. package/lib/deploy/functions/prepare.js +3 -13
  126. package/lib/deploy/functions/prepareFunctionsUpload.js +2 -3
  127. package/lib/deploy/functions/release/fabricator.js +0 -1
  128. package/lib/deploy/functions/release/index.js +1 -5
  129. package/lib/deploy/functions/runtimes/discovery/index.js +18 -3
  130. package/lib/deploy/functions/runtimes/discovery/v1alpha1.js +188 -54
  131. package/lib/deploy/functions/runtimes/golang/index.js +2 -22
  132. package/lib/deploy/functions/runtimes/node/index.js +3 -7
  133. package/lib/deploy/functions/runtimes/node/parseTriggers.js +15 -3
  134. package/lib/deploy/functions/services/database.js +14 -0
  135. package/lib/deploy/functions/services/index.js +14 -0
  136. package/lib/deploy/index.js +3 -3
  137. package/lib/deploy/lifecycleHooks.js +27 -27
  138. package/lib/deploy/remoteconfig/functions.js +18 -14
  139. package/lib/deploy/remoteconfig/prepare.js +2 -2
  140. package/lib/deploy/storage/prepare.js +1 -1
  141. package/lib/emulator/auth/apiSpec.js +14 -46
  142. package/lib/emulator/auth/index.js +1 -1
  143. package/lib/emulator/auth/operations.js +342 -93
  144. package/lib/emulator/auth/server.js +2 -2
  145. package/lib/emulator/auth/state.js +34 -32
  146. package/lib/emulator/commandUtils.js +1 -1
  147. package/lib/emulator/constants.js +1 -1
  148. package/lib/emulator/controller.js +7 -6
  149. package/lib/emulator/databaseEmulator.js +11 -9
  150. package/lib/emulator/download.js +1 -1
  151. package/lib/emulator/events/types.js +2 -3
  152. package/lib/emulator/firestoreEmulator.js +12 -14
  153. package/lib/emulator/functionsEmulator.js +65 -77
  154. package/lib/emulator/functionsEmulatorRuntime.js +7 -7
  155. package/lib/emulator/hostingEmulator.js +1 -1
  156. package/lib/emulator/hub.js +1 -1
  157. package/lib/emulator/hubClient.js +11 -22
  158. package/lib/emulator/hubExport.js +26 -16
  159. package/lib/emulator/loggingEmulator.js +1 -1
  160. package/lib/emulator/pubsubEmulator.js +1 -1
  161. package/lib/emulator/storage/crc.js +4 -4
  162. package/lib/emulator/storage/index.js +1 -1
  163. package/lib/emulator/types.js +1 -1
  164. package/lib/errorOut.js +2 -2
  165. package/lib/extensions/askUserForConsent.js +1 -2
  166. package/lib/extensions/askUserForParam.js +15 -18
  167. package/lib/extensions/emulator/optionsHelper.js +4 -4
  168. package/lib/extensions/extensionsApi.js +1 -22
  169. package/lib/extensions/extensionsHelper.js +6 -6
  170. package/lib/extensions/listExtensions.js +9 -10
  171. package/lib/extensions/manifest.js +2 -2
  172. package/lib/extensions/resolveSource.js +11 -7
  173. package/lib/extensions/secretsUtils.js +3 -3
  174. package/lib/extensions/types.js +24 -0
  175. package/lib/extensions/updateHelper.js +1 -1
  176. package/lib/extensions/utils.js +1 -2
  177. package/lib/extensions/warnings.js +3 -3
  178. package/lib/firestore/checkDatabaseType.js +4 -5
  179. package/lib/firestore/encodeFirestoreValue.js +11 -8
  180. package/lib/firestore/indexes.js +17 -34
  181. package/lib/fsAsync.js +3 -3
  182. package/lib/functions/events/v2.js +7 -1
  183. package/lib/functionsConfig.js +17 -14
  184. package/lib/functionsConfigClone.js +46 -46
  185. package/lib/gcp/cloudfunctions.js +2 -15
  186. package/lib/gcp/cloudfunctionsv2.js +17 -2
  187. package/lib/gcp/iam.js +1 -1
  188. package/lib/gcp/index.js +10 -10
  189. package/lib/gcp/rules.js +1 -1
  190. package/lib/gcp/runtimeconfig.js +45 -47
  191. package/lib/gcp/storage.js +2 -4
  192. package/lib/hosting/cloudRunProxy.js +19 -15
  193. package/lib/hosting/proxy.js +1 -1
  194. package/lib/index.js +29 -28
  195. package/lib/init/features/database.js +11 -5
  196. package/lib/init/features/functions/index.js +1 -1
  197. package/lib/init/features/functions/javascript.js +23 -20
  198. package/lib/init/features/functions/npm-dependencies.js +17 -14
  199. package/lib/init/features/functions/typescript.js +27 -24
  200. package/lib/init/features/hosting/github.js +6 -5
  201. package/lib/init/features/hosting/index.js +2 -2
  202. package/lib/loadCJSON.js +9 -6
  203. package/lib/localFunction.js +4 -4
  204. package/lib/logError.js +15 -12
  205. package/lib/management/apps.js +47 -43
  206. package/lib/management/database.js +33 -31
  207. package/lib/management/projects.js +13 -7
  208. package/lib/parseBoltRules.js +15 -14
  209. package/lib/previews.js +1 -1
  210. package/lib/profileReport.js +504 -512
  211. package/lib/profiler.js +4 -4
  212. package/lib/prompt.js +1 -2
  213. package/lib/rc.js +1 -1
  214. package/lib/requireAuth.js +0 -1
  215. package/lib/responseToError.js +8 -5
  216. package/lib/rtdb.js +31 -29
  217. package/lib/rulesDeploy.js +2 -2
  218. package/lib/scopes.js +9 -9
  219. package/lib/serve/index.js +4 -5
  220. package/lib/utils.js +30 -6
  221. package/npm-shrinkwrap.json +877 -279
  222. package/package.json +19 -16
  223. package/standalone/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const clc = require("cli-color");
4
5
  const fs = require("fs");
5
6
  const os = require("os");
@@ -9,7 +10,7 @@ const projectUtils_1 = require("../projectUtils");
9
10
  const requirePermissions_1 = require("../requirePermissions");
10
11
  const accountExporter_1 = require("../accountExporter");
11
12
  const MAX_BATCH_SIZE = 1000;
12
- exports.default = new command_1.Command("auth:export [dataFile]")
13
+ exports.command = new command_1.Command("auth:export [dataFile]")
13
14
  .description("Export accounts from your Firebase project into a data file")
14
15
  .option("--format <format>", "Format of exported data (csv, json). Ignored if <dataFile> has format extension.")
15
16
  .before(requirePermissions_1.requirePermissions, ["firebaseauth.users.get"])
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const csv_parse_1 = require("csv-parse");
4
5
  const Chain = require("stream-chain");
5
6
  const clc = require("cli-color");
@@ -11,13 +12,9 @@ const error_1 = require("../error");
11
12
  const logger_1 = require("../logger");
12
13
  const projectUtils_1 = require("../projectUtils");
13
14
  const requirePermissions_1 = require("../requirePermissions");
14
- const accountImporter = require("../accountImporter");
15
+ const accountImporter_1 = require("../accountImporter");
15
16
  const MAX_BATCH_SIZE = 1000;
16
- const validateOptions = accountImporter.validateOptions;
17
- const validateUserJson = accountImporter.validateUserJson;
18
- const transArrayToUser = accountImporter.transArrayToUser;
19
- const serialImportUsers = accountImporter.serialImportUsers;
20
- module.exports = new command_1.Command("auth:import [dataFile]")
17
+ exports.command = new command_1.Command("auth:import [dataFile]")
21
18
  .description("import users into your Firebase project from a data file(.csv or .json)")
22
19
  .option("--hash-algo <hashAlgo>", "specify the hash algorithm used in password for these accounts")
23
20
  .option("--hash-key <hashKey>", "specify the key used in hash algorithm")
@@ -32,7 +29,7 @@ module.exports = new command_1.Command("auth:import [dataFile]")
32
29
  .before(requirePermissions_1.requirePermissions, ["firebaseauth.users.create", "firebaseauth.users.update"])
33
30
  .action(async (dataFile, options) => {
34
31
  const projectId = (0, projectUtils_1.needProjectId)(options);
35
- const checkRes = validateOptions(options);
32
+ const checkRes = (0, accountImporter_1.validateOptions)(options);
36
33
  if (!checkRes.valid) {
37
34
  return checkRes;
38
35
  }
@@ -60,7 +57,7 @@ module.exports = new command_1.Command("auth:import [dataFile]")
60
57
  const str = s.trim().replace(/^["|'](.*)["|']$/, "$1");
61
58
  return str === "" ? undefined : str;
62
59
  });
63
- const user = transArrayToUser(trimmed);
60
+ const user = (0, accountImporter_1.transArrayToUser)(trimmed);
64
61
  const err = user.error;
65
62
  if (err) {
66
63
  return reject(new error_1.FirebaseError(`Line ${counter} (${record.join(",")}) has invalid data format: ${err}`));
@@ -88,7 +85,7 @@ module.exports = new command_1.Command("auth:import [dataFile]")
88
85
  StreamArray.streamArray(),
89
86
  ({ value }) => {
90
87
  counter++;
91
- const user = validateUserJson(value);
88
+ const user = (0, accountImporter_1.validateUserJson)(value);
92
89
  const err = user.error;
93
90
  if (err) {
94
91
  throw new error_1.FirebaseError(`Validation Error: ${err}`);
@@ -112,6 +109,6 @@ module.exports = new command_1.Command("auth:import [dataFile]")
112
109
  }
113
110
  logger_1.logger.debug(`Preparing to import ${counter} user records in ${userListArr.length} batches.`);
114
111
  if (userListArr.length) {
115
- return serialImportUsers(projectId, hashOptions, userListArr, 0);
112
+ return (0, accountImporter_1.serialImportUsers)(projectId, hashOptions, userListArr, 0);
116
113
  }
117
114
  });
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const fs = require("fs-extra");
4
5
  const os = require("os");
5
6
  const path = require("path");
@@ -21,7 +22,7 @@ const JAR_CACHE_DIR = process.env.FIREBASE_CRASHLYTICS_BUILDTOOLS_PATH ||
21
22
  path.join(os.homedir(), ".cache", "firebase", "crashlytics", "buildtools");
22
23
  const JAR_VERSION = "2.8.0";
23
24
  const JAR_URL = `https://dl.google.com/android/maven2/com/google/firebase/firebase-crashlytics-buildtools/${JAR_VERSION}/firebase-crashlytics-buildtools-${JAR_VERSION}.jar`;
24
- exports.default = new command_1.Command("crashlytics:symbols:upload <symbolFiles...>")
25
+ exports.command = new command_1.Command("crashlytics:symbols:upload <symbolFiles...>")
25
26
  .description("Upload symbols for native code, to symbolicate stack traces.")
26
27
  .option("--app <appID>", "the app id of your Firebase app")
27
28
  .option("--generator [breakpad|csym]", "the symbol generator being used, defaults to breakpad.")
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const fs = require("fs");
4
5
  const url = require("url");
5
6
  const apiv2_1 = require("../apiv2");
@@ -12,7 +13,7 @@ const api_1 = require("../database/api");
12
13
  const requirePermissions_1 = require("../requirePermissions");
13
14
  const logger_1 = require("../logger");
14
15
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
15
- const responseToError = require("../responseToError");
16
+ const responseToError_1 = require("../responseToError");
16
17
  const utils = require("../utils");
17
18
  function applyStringOpts(dest, src, keys, jsonKeys) {
18
19
  for (const key of keys) {
@@ -33,7 +34,7 @@ function applyStringOpts(dest, src, keys, jsonKeys) {
33
34
  }
34
35
  }
35
36
  }
36
- exports.default = new command_1.Command("database:get <path>")
37
+ exports.command = new command_1.Command("database:get <path>")
37
38
  .description("fetch and print JSON data at the specified path")
38
39
  .option("-o, --output <filename>", "save output to the specified file")
39
40
  .option("--pretty", "pretty print response")
@@ -98,7 +99,7 @@ exports.default = new command_1.Command("database:get <path>")
98
99
  catch (e) {
99
100
  throw new error_1.FirebaseError("Malformed JSON response", { original: e, exit: 2 });
100
101
  }
101
- throw responseToError({ statusCode: res.status }, d);
102
+ throw (0, responseToError_1.responseToError)({ statusCode: res.status }, d);
102
103
  }
103
104
  res.body.pipe(outStream, { end: false });
104
105
  return new Promise((resolve) => {
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const logger_1 = require("../logger");
5
6
  const requirePermissions_1 = require("../requirePermissions");
@@ -10,7 +11,7 @@ const projectUtils_1 = require("../projectUtils");
10
11
  const getDefaultDatabaseInstance_1 = require("../getDefaultDatabaseInstance");
11
12
  const error_1 = require("../error");
12
13
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
13
- exports.default = new command_1.Command("database:instances:create <instanceName>")
14
+ exports.command = new command_1.Command("database:instances:create <instanceName>")
14
15
  .description("create a realtime database instance")
15
16
  .option("-l, --location <location>", "(optional) location for the database instance, defaults to us-central1")
16
17
  .before(requirePermissions_1.requirePermissions, ["firebasedatabase.instances.create"])
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const Table = require("cli-table");
5
6
  const clc = require("cli-color");
@@ -32,7 +33,7 @@ function logInstancesCount(count = 0) {
32
33
  logger_1.logger.info("");
33
34
  logger_1.logger.info(`${count} database instance(s) total.`);
34
35
  }
35
- let cmd = new command_1.Command("database:instances:list")
36
+ exports.command = new command_1.Command("database:instances:list")
36
37
  .description("list realtime database instances, optionally filtered by a specified location")
37
38
  .before(requirePermissions_1.requirePermissions, ["firebasedatabase.instances.list"])
38
39
  .before(commandUtils_1.warnEmulatorNotSupported, types_1.Emulators.DATABASE)
@@ -71,6 +72,5 @@ let cmd = new command_1.Command("database:instances:list")
71
72
  return instances;
72
73
  });
73
74
  if (previews_1.previews.rtdbmanagement) {
74
- cmd = cmd.option("-l, --location <location>", "(optional) location for the database instance, defaults to us-central1");
75
+ exports.command = exports.command.option("-l, --location <location>", "(optional) location for the database instance, defaults to us-central1");
75
76
  }
76
- exports.default = cmd;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const _ = require("lodash");
3
+ exports.command = void 0;
4
4
  const command_1 = require("../command");
5
5
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
6
6
  const database_1 = require("../management/database");
@@ -10,7 +10,7 @@ const profiler_1 = require("../profiler");
10
10
  const types_1 = require("../emulator/types");
11
11
  const commandUtils_1 = require("../emulator/commandUtils");
12
12
  const description = "profile the Realtime Database and generate a usage report";
13
- module.exports = new command_1.Command("database:profile")
13
+ exports.command = new command_1.Command("database:profile")
14
14
  .description(description)
15
15
  .option("-o, --output <filename>", "save the output to the specified file")
16
16
  .option("-d, --duration <seconds>", "collect database usage information for the specified number of seconds")
@@ -32,12 +32,12 @@ module.exports = new command_1.Command("database:profile")
32
32
  else if (options.parent.json && options.raw) {
33
33
  return utils.reject("Cannot output raw data in json format", { exit: 1 });
34
34
  }
35
- else if (options.input && _.has(options, "duration")) {
35
+ else if (options.input && options.duration !== undefined) {
36
36
  return utils.reject("Cannot specify a duration for input files", {
37
37
  exit: 1,
38
38
  });
39
39
  }
40
- else if (_.has(options, "duration") && options.duration <= 0) {
40
+ else if (options.duration !== undefined && options.duration <= 0) {
41
41
  return utils.reject("Must specify a positive number of seconds", {
42
42
  exit: 1,
43
43
  });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const _ = require("lodash");
3
+ exports.command = void 0;
4
4
  const clc = require("cli-color");
5
5
  const fs = require("fs");
6
6
  const apiv2_1 = require("../apiv2");
@@ -15,7 +15,7 @@ const url_1 = require("url");
15
15
  const logger_1 = require("../logger");
16
16
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
17
17
  const utils = require("../utils");
18
- exports.default = new command_1.Command("database:push <path> [infile]")
18
+ exports.command = new command_1.Command("database:push <path> [infile]")
19
19
  .description("add a new JSON object to a list of data in your Firebase")
20
20
  .option("-d, --data <data>", "specify escaped JSON directly")
21
21
  .option("--instance <instance>", "use the database <instance>.firebaseio.com (if omitted, use default database instance)")
@@ -24,7 +24,7 @@ exports.default = new command_1.Command("database:push <path> [infile]")
24
24
  .before(database_1.populateInstanceDetails)
25
25
  .before(commandUtils_1.printNoticeIfEmulated, types_1.Emulators.DATABASE)
26
26
  .action(async (path, infile, options) => {
27
- if (!_.startsWith(path, "/")) {
27
+ if (!path.startsWith("/")) {
28
28
  throw new error_1.FirebaseError("Path must begin with /");
29
29
  }
30
30
  const inStream = utils.stringToStream(options.data) || (infile ? fs.createReadStream(infile) : process.stdin);
@@ -47,7 +47,7 @@ exports.default = new command_1.Command("database:push <path> [infile]")
47
47
  logger_1.logger.debug(err);
48
48
  throw new error_1.FirebaseError(`Unexpected error while pushing data: ${err}`, { exit: 2 });
49
49
  }
50
- if (!_.endsWith(path, "/")) {
50
+ if (!path.endsWith("/")) {
51
51
  path += "/";
52
52
  }
53
53
  const consoleUrl = utils.getDatabaseViewDataUrl(origin, options.project, options.instance, path + res.body.name);
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
5
6
  const requirePermissions_1 = require("../requirePermissions");
@@ -11,8 +12,7 @@ const api_1 = require("../database/api");
11
12
  const utils = require("../utils");
12
13
  const prompt_1 = require("../prompt");
13
14
  const clc = require("cli-color");
14
- const _ = require("lodash");
15
- module.exports = new command_1.Command("database:remove <path>")
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")
18
18
  .option("--instance <instance>", "use the database <instance>.firebaseio.com (if omitted, use default database instance)")
@@ -21,7 +21,7 @@ module.exports = new command_1.Command("database:remove <path>")
21
21
  .before(database_1.populateInstanceDetails)
22
22
  .before(commandUtils_1.warnEmulatorNotSupported, types_1.Emulators.DATABASE)
23
23
  .action(async (path, options) => {
24
- if (!_.startsWith(path, "/")) {
24
+ if (!path.startsWith("/")) {
25
25
  return utils.reject("Path must begin with /", { exit: 1 });
26
26
  }
27
27
  const origin = (0, api_1.realtimeOriginOrEmulatorOrCustomUrl)(options.instanceDetails.databaseUrl);
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const requirePermissions_1 = require("../requirePermissions");
5
6
  const metadata = require("../database/metadata");
6
7
  const types_1 = require("../emulator/types");
7
8
  const commandUtils_1 = require("../emulator/commandUtils");
8
9
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
9
- exports.default = new command_1.Command("database:rules:canary <rulesetId>")
10
+ exports.command = new command_1.Command("database:rules:canary <rulesetId>")
10
11
  .description("mark a staged ruleset as the canary ruleset")
11
12
  .option("--instance <instance>", "use the database <instance>.firebaseio.com (if omitted, uses default database instance)")
12
13
  .before(requirePermissions_1.requirePermissions, ["firebasedatabase.instances.update"])
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const logger_1 = require("../logger");
5
6
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
@@ -7,7 +8,7 @@ const requirePermissions_1 = require("../requirePermissions");
7
8
  const metadata = require("../database/metadata");
8
9
  const types_1 = require("../emulator/types");
9
10
  const commandUtils_1 = require("../emulator/commandUtils");
10
- exports.default = new command_1.Command("database:rules:get <rulesetId>")
11
+ exports.command = new command_1.Command("database:rules:get <rulesetId>")
11
12
  .description("get a realtime database ruleset by id")
12
13
  .option("--instance <instance>", "use the database <instance>.firebaseio.com (if omitted, uses default database instance)")
13
14
  .before(requirePermissions_1.requirePermissions, ["firebasedatabase.instances.get"])
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const logger_1 = require("../logger");
5
6
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
@@ -7,7 +8,7 @@ const requirePermissions_1 = require("../requirePermissions");
7
8
  const metadata = require("../database/metadata");
8
9
  const types_1 = require("../emulator/types");
9
10
  const commandUtils_1 = require("../emulator/commandUtils");
10
- exports.default = new command_1.Command("database:rules:list")
11
+ exports.command = new command_1.Command("database:rules:list")
11
12
  .description("list realtime database rulesets")
12
13
  .option("--instance <instance>", "use the database <instance>.firebaseio.com (if omitted, uses default database instance)")
13
14
  .before(requirePermissions_1.requirePermissions, ["firebasedatabase.instances.get"])
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
5
6
  const requirePermissions_1 = require("../requirePermissions");
6
7
  const metadata = require("../database/metadata");
7
8
  const types_1 = require("../emulator/types");
8
9
  const commandUtils_1 = require("../emulator/commandUtils");
9
- exports.default = new command_1.Command("database:rules:release <rulesetId>")
10
+ exports.command = new command_1.Command("database:rules:release <rulesetId>")
10
11
  .description("mark a staged ruleset as the stable ruleset")
11
12
  .option("--instance <instance>", "use the database <instance>.firebaseio.com (if omitted, uses default database instance)")
12
13
  .before(requirePermissions_1.requirePermissions, ["firebasedatabase.instances.update"])
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const logger_1 = require("../logger");
5
6
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
@@ -9,7 +10,7 @@ const fs = require("fs-extra");
9
10
  const path = require("path");
10
11
  const types_1 = require("../emulator/types");
11
12
  const commandUtils_1 = require("../emulator/commandUtils");
12
- exports.default = new command_1.Command("database:rules:stage")
13
+ exports.command = new command_1.Command("database:rules:stage")
13
14
  .description("create a new realtime database ruleset")
14
15
  .option("--instance <instance>", "use the database <instance>.firebaseio.com (if omitted, uses default database instance)")
15
16
  .before(requirePermissions_1.requirePermissions, ["firebasedatabase.instances.update"])
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const _ = require("lodash");
3
+ exports.command = void 0;
4
4
  const clc = require("cli-color");
5
5
  const fs = require("fs");
6
6
  const apiv2_1 = require("../apiv2");
@@ -16,7 +16,7 @@ const url_1 = require("url");
16
16
  const logger_1 = require("../logger");
17
17
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
18
18
  const utils = require("../utils");
19
- exports.default = new command_1.Command("database:set <path> [infile]")
19
+ exports.command = new command_1.Command("database:set <path> [infile]")
20
20
  .description("store JSON data at the specified path via STDIN, arg, or file")
21
21
  .option("-d, --data <data>", "specify escaped JSON directly")
22
22
  .option("-f, --force", "pass this option to bypass confirmation prompt")
@@ -26,7 +26,7 @@ exports.default = new command_1.Command("database:set <path> [infile]")
26
26
  .before(database_1.populateInstanceDetails)
27
27
  .before(commandUtils_1.printNoticeIfEmulated, types_1.Emulators.DATABASE)
28
28
  .action(async (path, infile, options) => {
29
- if (!_.startsWith(path, "/")) {
29
+ if (!path.startsWith("/")) {
30
30
  throw new error_1.FirebaseError("Path must begin with /");
31
31
  }
32
32
  const origin = (0, api_1.realtimeOriginOrEmulatorOrCustomUrl)(options.instanceDetails.databaseUrl);
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const url_1 = require("url");
4
5
  const apiv2_1 = require("../apiv2");
5
6
  const command_1 = require("../command");
@@ -12,7 +13,7 @@ const requirePermissions_1 = require("../requirePermissions");
12
13
  const commandUtils_1 = require("../emulator/commandUtils");
13
14
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
14
15
  const utils = require("../utils");
15
- exports.default = new command_1.Command("database:settings:get <path>")
16
+ exports.command = new command_1.Command("database:settings:get <path>")
16
17
  .description("read the realtime database setting at path")
17
18
  .option("--instance <instance>", "use the database <instance>.firebaseio.com (if omitted, uses default database instance)")
18
19
  .help(settings_1.HELP_TEXT)
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const url_1 = require("url");
4
5
  const apiv2_1 = require("../apiv2");
5
6
  const command_1 = require("../command");
@@ -12,7 +13,7 @@ const requirePermissions_1 = require("../requirePermissions");
12
13
  const commandUtils_1 = require("../emulator/commandUtils");
13
14
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
14
15
  const utils = require("../utils");
15
- exports.default = new command_1.Command("database:settings:set <path> <value>")
16
+ exports.command = new command_1.Command("database:settings:set <path> <value>")
16
17
  .description("set the realtime database setting at path.")
17
18
  .option("--instance <instance>", "use the database <instance>.firebaseio.com (if omitted, use default database instance)")
18
19
  .help(settings_1.HELP_TEXT)
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const url_1 = require("url");
4
5
  const clc = require("cli-color");
5
6
  const fs = require("fs");
@@ -15,7 +16,7 @@ const requirePermissions_1 = require("../requirePermissions");
15
16
  const logger_1 = require("../logger");
16
17
  const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
17
18
  const utils = require("../utils");
18
- exports.default = new command_1.Command("database:update <path> [infile]")
19
+ exports.command = new command_1.Command("database:update <path> [infile]")
19
20
  .description("update some of the keys for the defined path in your Firebase")
20
21
  .option("-d, --data <data>", "specify escaped JSON directly")
21
22
  .option("-f, --force", "pass this option to bypass confirmation prompt")
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
- const _ = require("lodash");
3
- const { requireDatabaseInstance } = require("../requireDatabaseInstance");
4
- const { requirePermissions } = require("../requirePermissions");
5
- const { checkServiceAccountIam } = require("../deploy/functions/checkIam");
6
- const checkValidTargetFilters = require("../checkValidTargetFilters");
7
- const { Command } = require("../command");
8
- const { deploy } = require("../deploy");
9
- const { requireConfig } = require("../requireConfig");
10
- const { filterTargets } = require("../filterTargets");
11
- const { requireHostingSite } = require("../requireHostingSite");
12
- const VALID_TARGETS = [
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = exports.VALID_DEPLOY_TARGETS = void 0;
4
+ const requireDatabaseInstance_1 = require("../requireDatabaseInstance");
5
+ const requirePermissions_1 = require("../requirePermissions");
6
+ const checkIam_1 = require("../deploy/functions/checkIam");
7
+ const checkValidTargetFilters_1 = require("../checkValidTargetFilters");
8
+ const command_1 = require("../command");
9
+ const deploy_1 = require("../deploy");
10
+ const requireConfig_1 = require("../requireConfig");
11
+ const filterTargets_1 = require("../filterTargets");
12
+ const requireHostingSite_1 = require("../requireHostingSite");
13
+ exports.VALID_DEPLOY_TARGETS = [
13
14
  "database",
14
15
  "storage",
15
16
  "firestore",
@@ -42,7 +43,7 @@ const TARGET_PERMISSIONS = {
42
43
  ],
43
44
  remoteconfig: ["cloudconfig.configs.get", "cloudconfig.configs.update"],
44
45
  };
45
- module.exports = new Command("deploy")
46
+ exports.command = new command_1.Command("deploy")
46
47
  .description("deploy code and assets to your Firebase project")
47
48
  .withForce("delete Cloud Functions missing from the current working directory without confirmation")
48
49
  .option("-p, --public <path>", "override the Hosting public directory specified in firebase.json")
@@ -52,28 +53,28 @@ module.exports = new Command("deploy")
52
53
  "When filtering based on export groups (the exported module object keys), use dots to specify group names " +
53
54
  '(e.g. "--only functions:group1.subgroup1,functions:group2)"')
54
55
  .option("--except <targets>", 'deploy to all targets except specified (e.g. "database")')
55
- .before(requireConfig)
56
- .before(function (options) {
57
- options.filteredTargets = filterTargets(options, VALID_TARGETS);
56
+ .before(requireConfig_1.requireConfig)
57
+ .before((options) => {
58
+ options.filteredTargets = (0, filterTargets_1.filterTargets)(options, exports.VALID_DEPLOY_TARGETS);
58
59
  const permissions = options.filteredTargets.reduce((perms, target) => {
59
60
  return perms.concat(TARGET_PERMISSIONS[target]);
60
61
  }, []);
61
- return requirePermissions(options, permissions);
62
+ return (0, requirePermissions_1.requirePermissions)(options, permissions);
62
63
  })
63
64
  .before((options) => {
64
65
  if (options.filteredTargets.includes("functions")) {
65
- return checkServiceAccountIam(options.project);
66
+ return (0, checkIam_1.checkServiceAccountIam)(options.project);
66
67
  }
67
68
  })
68
- .before(async function (options) {
69
- if (_.includes(options.filteredTargets, "database")) {
70
- await requireDatabaseInstance(options);
69
+ .before(async (options) => {
70
+ if (options.filteredTargets.includes("database")) {
71
+ await (0, requireDatabaseInstance_1.requireDatabaseInstance)(options);
71
72
  }
72
- if (_.includes(options.filteredTargets, "hosting")) {
73
- await requireHostingSite(options);
73
+ if (options.filteredTargets.includes("hosting")) {
74
+ await (0, requireHostingSite_1.requireHostingSite)(options);
74
75
  }
75
76
  })
76
- .before(checkValidTargetFilters)
77
- .action(function (options) {
78
- return deploy(options.filteredTargets, options);
77
+ .before(checkValidTargetFilters_1.checkValidTargetFilters)
78
+ .action((options) => {
79
+ return (0, deploy_1.deploy)(options.filteredTargets, options);
79
80
  });
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const commandUtils = require("../emulator/commandUtils");
5
- module.exports = new command_1.Command("emulators:exec <script>")
6
+ exports.command = new command_1.Command("emulators:exec <script>")
6
7
  .before(commandUtils.setExportOnExitOptions)
7
8
  .before(commandUtils.beforeEmulatorCommand)
8
9
  .description("start the local Firebase emulators, " + "run a test script, then shut down the emulators")
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const controller = require("../emulator/controller");
5
6
  const commandUtils = require("../emulator/commandUtils");
6
- module.exports = new command_1.Command("emulators:export <path>")
7
+ exports.command = new command_1.Command("emulators:export <path>")
7
8
  .description("export data from running emulators")
8
9
  .withForce("overwrite any export data in the target directory")
9
10
  .option(commandUtils.FLAG_ONLY, commandUtils.DESC_ONLY)
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const command_1 = require("../command");
4
5
  const controller = require("../emulator/controller");
5
6
  const commandUtils = require("../emulator/commandUtils");
@@ -13,7 +14,7 @@ const Table = require("cli-table");
13
14
  function stylizeLink(url) {
14
15
  return clc.underline(clc.bold(url));
15
16
  }
16
- module.exports = new command_1.Command("emulators:start")
17
+ exports.command = new command_1.Command("emulators:start")
17
18
  .before(commandUtils.setExportOnExitOptions)
18
19
  .before(commandUtils.beforeEmulatorCommand)
19
20
  .description("start the local Firebase emulators")
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
- var { Command } = require("../command");
3
- var { requirePermissions } = require("../requirePermissions");
4
- var { actionFunction } = require("../functionsShellCommandAction");
5
- var { requireConfig } = require("../requireConfig");
6
- module.exports = new Command("experimental:functions:shell")
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
4
+ const functionsShellCommandAction_1 = require("../functionsShellCommandAction");
5
+ const command_1 = require("../command");
6
+ const requireConfig_1 = require("../requireConfig");
7
+ const requirePermissions_1 = require("../requirePermissions");
8
+ exports.command = new command_1.Command("experimental:functions:shell")
7
9
  .description("launch full Node shell with emulated functions. (Alias for `firebase functions:shell.)")
8
10
  .option("-p, --port <port>", "the port on which to emulate functions (default: 5000)", 5000)
9
- .before(requireConfig)
10
- .before(requirePermissions)
11
- .action(actionFunction);
11
+ .before(requireConfig_1.requireConfig)
12
+ .before(requirePermissions_1.requirePermissions)
13
+ .action(functionsShellCommandAction_1.actionFunction);
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const { marked } = require("marked");
4
5
  const TerminalRenderer = require("marked-terminal");
5
6
  const checkMinRequiredVersion_1 = require("../checkMinRequiredVersion");
@@ -20,9 +21,10 @@ const askUserForEventsConfig = require("../extensions/askUserForEventsConfig");
20
21
  marked.setOptions({
21
22
  renderer: new TerminalRenderer(),
22
23
  });
23
- exports.default = new command_1.Command("ext:configure <extensionInstanceId>")
24
+ exports.command = new command_1.Command("ext:configure <extensionInstanceId>")
24
25
  .description("configure an existing extension instance")
25
26
  .withForce()
27
+ .option("--local", "deprecated")
26
28
  .before(requirePermissions_1.requirePermissions, [
27
29
  "firebaseextensions.instances.update",
28
30
  "firebaseextensions.instances.get",
@@ -35,6 +37,9 @@ exports.default = new command_1.Command("ext:configure <extensionInstanceId>")
35
37
  throw new error_1.FirebaseError(`Command not supported in non-interactive mode, edit ./extensions/${instanceId}.env directly instead. ` +
36
38
  `See https://firebase.google.com/docs/extensions/manifest for more details.`);
37
39
  }
40
+ if (options.local) {
41
+ utils.logLabeledWarning(extensionsHelper_1.logPrefix, "As of firebase-tools@11.0.0, the `--local` flag is no longer required, as it is the default behavior.");
42
+ }
38
43
  const config = manifest.loadConfig(options);
39
44
  const refOrPath = manifest.getInstanceTarget(instanceId, config);
40
45
  const isLocalSource = (0, extensionsHelper_1.isLocalPath)(refOrPath);
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.command = void 0;
3
4
  const clc = require("cli-color");
4
5
  const semver = require("semver");
5
6
  const refs = require("../extensions/refs");
@@ -11,7 +12,7 @@ const extensionsApi_1 = require("../extensions/extensionsApi");
11
12
  const versionHelper_1 = require("../extensions/versionHelper");
12
13
  const requireAuth_1 = require("../requireAuth");
13
14
  const error_1 = require("../error");
14
- exports.default = new command_1.Command("ext:dev:deprecate <extensionRef> <versionPredicate>")
15
+ exports.command = new command_1.Command("ext:dev:deprecate <extensionRef> <versionPredicate>")
15
16
  .description("deprecate extension versions that match the version predicate")
16
17
  .option("-m, --message <deprecationMessage>", "deprecation message")
17
18
  .option("-f, --force", "override deprecation message for existing deprecated extension versions that match")