firebase-tools 13.4.0 → 13.4.1

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/apiv2.js CHANGED
@@ -15,7 +15,9 @@ const responseToError_1 = require("./responseToError");
15
15
  const FormData = require("form-data");
16
16
  const pkg = require("../package.json");
17
17
  const CLI_VERSION = pkg.version;
18
- const GOOG_QUOTA_USER = "x-goog-quota-user";
18
+ const GOOG_QUOTA_USER_HEADER = "x-goog-quota-user";
19
+ const GOOG_USER_PROJECT_HEADER = "x-goog-user-project";
20
+ const GOOGLE_CLOUD_QUOTA_PROJECT = process.env.GOOGLE_CLOUD_QUOTA_PROJECT;
19
21
  let accessToken = "";
20
22
  let refreshToken = "";
21
23
  function setRefreshToken(token = "") {
@@ -133,6 +135,9 @@ class Client {
133
135
  reqOptions.headers.set("Content-Type", "application/json");
134
136
  }
135
137
  }
138
+ if (GOOGLE_CLOUD_QUOTA_PROJECT && GOOGLE_CLOUD_QUOTA_PROJECT !== "") {
139
+ reqOptions.headers.set(GOOG_USER_PROJECT_HEADER, GOOGLE_CLOUD_QUOTA_PROJECT);
140
+ }
136
141
  return reqOptions;
137
142
  }
138
143
  async addAuthHeader(reqOptions) {
@@ -315,8 +320,8 @@ class Client {
315
320
  const logURL = this.requestURL(options);
316
321
  logger_1.logger.debug(`>>> [apiv2][query] ${options.method} ${logURL} ${queryParamsLog}`);
317
322
  const headers = options.headers;
318
- if (headers && headers.has(GOOG_QUOTA_USER)) {
319
- logger_1.logger.debug(`>>> [apiv2][(partial)header] ${options.method} ${logURL} x-goog-quota-user=${headers.get(GOOG_QUOTA_USER) || ""}`);
323
+ if (headers && headers.has(GOOG_QUOTA_USER_HEADER)) {
324
+ logger_1.logger.debug(`>>> [apiv2][(partial)header] ${options.method} ${logURL} x-goog-quota-user=${headers.get(GOOG_QUOTA_USER_HEADER) || ""}`);
320
325
  }
321
326
  if (options.body !== undefined) {
322
327
  let logBody = "[omitted]";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compareFunctions = exports.missingEndpoint = exports.hasEndpoint = exports.regionalEndpoints = exports.matchingBackend = exports.findEndpoint = exports.someEndpoint = exports.allEndpoints = exports.checkAvailability = exports.existingBackend = exports.scheduleIdForFunction = exports.functionName = exports.isEmptyBackend = exports.merge = exports.of = exports.empty = exports.isBlockingTriggered = exports.isTaskQueueTriggered = exports.isScheduleTriggered = exports.isEventTriggered = exports.isCallableTriggered = exports.isHttpsTriggered = exports.AllFunctionsPlatforms = exports.secretVersionName = exports.SCHEDULED_FUNCTION_LABEL = exports.MIN_CPU_FOR_CONCURRENCY = exports.DEFAULT_MEMORY = exports.DEFAULT_CONCURRENCY = exports.memoryToGen2Cpu = exports.memoryToGen1Cpu = exports.memoryOptionDisplayName = exports.isValidMemoryOption = exports.AllIngressSettings = exports.AllVpcEgressSettings = exports.endpointTriggerType = void 0;
3
+ exports.compareFunctions = exports.missingEndpoint = exports.hasEndpoint = exports.regionalEndpoints = exports.matchingBackend = exports.findEndpoint = exports.someEndpoint = exports.allEndpoints = exports.checkAvailability = exports.existingBackend = exports.scheduleIdForFunction = exports.functionName = exports.isEmptyBackend = exports.merge = exports.of = exports.empty = exports.isBlockingTriggered = exports.isTaskQueueTriggered = exports.isScheduleTriggered = exports.isEventTriggered = exports.isCallableTriggered = exports.isHttpsTriggered = exports.AllFunctionsPlatforms = exports.secretVersionName = exports.SCHEDULED_FUNCTION_LABEL = exports.MIN_CPU_FOR_CONCURRENCY = exports.DEFAULT_MEMORY = exports.DEFAULT_CONCURRENCY = exports.memoryToGen2Cpu = exports.memoryToGen1Cpu = exports.memoryOptionDisplayName = exports.isValidEgressSetting = exports.isValidMemoryOption = exports.AllIngressSettings = exports.AllVpcEgressSettings = exports.endpointTriggerType = void 0;
4
4
  const gcf = require("../../gcp/cloudfunctions");
5
5
  const gcfV2 = require("../../gcp/cloudfunctionsv2");
6
6
  const utils = require("../../utils");
@@ -41,6 +41,10 @@ function isValidMemoryOption(mem) {
41
41
  return allMemoryOptions.includes(mem);
42
42
  }
43
43
  exports.isValidMemoryOption = isValidMemoryOption;
44
+ function isValidEgressSetting(egress) {
45
+ return egress === "PRIVATE_RANGES_ONLY" || egress === "ALL_TRAFFIC";
46
+ }
47
+ exports.isValidEgressSetting = isValidEgressSetting;
44
48
  function memoryOptionDisplayName(option) {
45
49
  return {
46
50
  128: "128MB",
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toBackend = exports.resolveBackend = exports.AllIngressSettings = exports.AllVpcEgressSettings = exports.AllFunctionsPlatforms = exports.isValidMemoryOption = exports.isBlockingTriggered = exports.isTaskQueueTriggered = exports.isScheduleTriggered = exports.isEventTriggered = exports.isCallableTriggered = exports.isHttpsTriggered = exports.of = exports.empty = void 0;
3
+ exports.toBackend = exports.resolveBackend = exports.AllIngressSettings = exports.AllVpcEgressSettings = exports.AllFunctionsPlatforms = exports.isBlockingTriggered = exports.isTaskQueueTriggered = exports.isScheduleTriggered = exports.isEventTriggered = exports.isCallableTriggered = exports.isHttpsTriggered = exports.of = exports.empty = void 0;
4
4
  const backend = require("./backend");
5
5
  const proto = require("../../gcp/proto");
6
6
  const api = require("../../.../../api");
@@ -48,10 +48,6 @@ function isBlockingTriggered(triggered) {
48
48
  }
49
49
  exports.isBlockingTriggered = isBlockingTriggered;
50
50
  const allMemoryOptions = [128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768];
51
- function isValidMemoryOption(mem) {
52
- return allMemoryOptions.includes(mem);
53
- }
54
- exports.isValidMemoryOption = isValidMemoryOption;
55
51
  exports.AllFunctionsPlatforms = ["gcfv1", "gcfv2"];
56
52
  exports.AllVpcEgressSettings = ["PRIVATE_RANGES_ONLY", "ALL_TRAFFIC"];
57
53
  exports.AllIngressSettings = [
@@ -222,7 +218,14 @@ function toBackend(build, paramValues) {
222
218
  bdEndpoint.vpc.connector = `projects/${bdEndpoint.project}/locations/${region}/connectors/${bdEndpoint.vpc.connector}`;
223
219
  }
224
220
  bkEndpoint.vpc = { connector: bdEndpoint.vpc.connector };
225
- proto.copyIfPresent(bkEndpoint.vpc, bdEndpoint.vpc, "egressSettings");
221
+ if (bdEndpoint.vpc.egressSettings) {
222
+ const egressSettings = r.resolveString(bdEndpoint.vpc.egressSettings);
223
+ if (!backend.isValidEgressSetting(egressSettings)) {
224
+ throw new error_1.FirebaseError(`Value "${egressSettings}" is an invalid ` +
225
+ "egress setting. Valid values are PRIVATE_RANGES_ONLY and ALL_TRAFFIC");
226
+ }
227
+ bkEndpoint.vpc.egressSettings = egressSettings;
228
+ }
226
229
  }
227
230
  else if (bdEndpoint.vpc === null) {
228
231
  bkEndpoint.vpc = null;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildFromV1Alpha1 = void 0;
4
4
  const build = require("../../build");
5
+ const backend = require("../../backend");
5
6
  const proto_1 = require("../../../../gcp/proto");
6
7
  const parsing_1 = require("./parsing");
7
8
  const error_1 = require("../../../../error");
@@ -52,7 +53,7 @@ function assertBuildEndpoint(ep, id) {
52
53
  platform: (platform) => build.AllFunctionsPlatforms.includes(platform),
53
54
  entryPoint: "string",
54
55
  omit: "Field<boolean>?",
55
- availableMemoryMb: (mem) => mem === null || isCEL(mem) || build.isValidMemoryOption(mem),
56
+ availableMemoryMb: (mem) => mem === null || isCEL(mem) || backend.isValidMemoryOption(mem),
56
57
  maxInstances: "Field<number>?",
57
58
  minInstances: "Field<number>?",
58
59
  concurrency: "Field<number>?",
@@ -23,9 +23,9 @@ const EMULATOR_UPDATE_DETAILS = {
23
23
  expectedChecksum: "2fd771101c0e1f7898c04c9204f2ce63",
24
24
  },
25
25
  firestore: {
26
- version: "1.19.1",
27
- expectedSize: 67187672,
28
- expectedChecksum: "859b1ac2a6040cccddd993c43586347c",
26
+ version: "1.19.2",
27
+ expectedSize: 67203281,
28
+ expectedChecksum: "167205aea99351c08ef293f35009a63c",
29
29
  },
30
30
  storage: {
31
31
  version: "1.1.3",
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchWebSetup = exports.getCachedWebSetup = void 0;
3
+ exports.fetchWebSetup = exports.constructDefaultWebSetup = exports.getCachedWebSetup = void 0;
4
4
  const apiv2_1 = require("./apiv2");
5
5
  const configstore_1 = require("./configstore");
6
6
  const api_1 = require("./api");
@@ -46,6 +46,7 @@ function constructDefaultWebSetup(projectId) {
46
46
  authDomain: `${projectId}.firebaseapp.com`,
47
47
  };
48
48
  }
49
+ exports.constructDefaultWebSetup = constructDefaultWebSetup;
49
50
  async function fetchWebSetup(options) {
50
51
  const projectId = (0, projectUtils_1.needProjectId)(options);
51
52
  if (constants_1.Constants.isDemoProject(projectId)) {
@@ -32,6 +32,7 @@ const projectPath_1 = require("../projectPath");
32
32
  const logger_1 = require("../logger");
33
33
  const frameworks_1 = require("./frameworks");
34
34
  Object.defineProperty(exports, "WebFrameworks", { enumerable: true, get: function () { return frameworks_1.WebFrameworks; } });
35
+ const fetchWebSetup_1 = require("../fetchWebSetup");
35
36
  async function discover(dir, warn = true) {
36
37
  const allFrameworkTypes = [
37
38
  ...new Set(Object.values(frameworks_1.WebFrameworks).map(({ type }) => type)),
@@ -149,12 +150,15 @@ async function prepareFrameworks(purpose, targetNames, context, options, emulato
149
150
  });
150
151
  let firebaseConfig = null;
151
152
  if (usesFirebaseJsSdk) {
152
- const sites = await (0, api_1.listSites)(project);
153
+ const isDemoProject = constants_1.Constants.isDemoProject(project);
154
+ const sites = isDemoProject ? (0, api_1.listDemoSites)(project) : await (0, api_1.listSites)(project);
153
155
  const selectedSite = sites.find((it) => it.name && it.name.split("/").pop() === site);
154
156
  if (selectedSite) {
155
157
  const { appId } = selectedSite;
156
158
  if (appId) {
157
- firebaseConfig = await (0, apps_1.getAppConfig)(appId, apps_1.AppPlatform.WEB);
159
+ firebaseConfig = isDemoProject
160
+ ? (0, fetchWebSetup_1.constructDefaultWebSetup)(project)
161
+ : await (0, apps_1.getAppConfig)(appId, apps_1.AppPlatform.WEB);
158
162
  firebaseDefaults || (firebaseDefaults = {});
159
163
  firebaseDefaults.config = firebaseConfig;
160
164
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ESBUILD_VERSION = exports.APP_PATHS_MANIFEST = exports.ROUTES_MANIFEST = exports.PRERENDER_MANIFEST = exports.PAGES_MANIFEST = exports.MIDDLEWARE_MANIFEST = exports.IMAGES_MANIFEST = exports.EXPORT_MARKER = exports.APP_PATH_ROUTES_MANIFEST = void 0;
3
+ exports.WEBPACK_LAYERS = exports.ESBUILD_VERSION = exports.SERVER_REFERENCE_MANIFEST = exports.APP_PATHS_MANIFEST = exports.ROUTES_MANIFEST = exports.PRERENDER_MANIFEST = exports.PAGES_MANIFEST = exports.MIDDLEWARE_MANIFEST = exports.IMAGES_MANIFEST = exports.EXPORT_MARKER = exports.APP_PATH_ROUTES_MANIFEST = void 0;
4
4
  exports.APP_PATH_ROUTES_MANIFEST = "app-path-routes-manifest.json";
5
5
  exports.EXPORT_MARKER = "export-marker.json";
6
6
  exports.IMAGES_MANIFEST = "images-manifest.json";
@@ -9,4 +9,38 @@ exports.PAGES_MANIFEST = "pages-manifest.json";
9
9
  exports.PRERENDER_MANIFEST = "prerender-manifest.json";
10
10
  exports.ROUTES_MANIFEST = "routes-manifest.json";
11
11
  exports.APP_PATHS_MANIFEST = "app-paths-manifest.json";
12
+ exports.SERVER_REFERENCE_MANIFEST = "server-reference-manifest.json";
12
13
  exports.ESBUILD_VERSION = "0.19.2";
14
+ const WEBPACK_LAYERS_NAMES = {
15
+ shared: "shared",
16
+ reactServerComponents: "rsc",
17
+ serverSideRendering: "ssr",
18
+ actionBrowser: "action-browser",
19
+ api: "api",
20
+ middleware: "middleware",
21
+ edgeAsset: "edge-asset",
22
+ appPagesBrowser: "app-pages-browser",
23
+ appMetadataRoute: "app-metadata-route",
24
+ appRouteHandler: "app-route-handler",
25
+ };
26
+ exports.WEBPACK_LAYERS = Object.assign(Object.assign({}, WEBPACK_LAYERS_NAMES), { GROUP: {
27
+ server: [
28
+ WEBPACK_LAYERS_NAMES.reactServerComponents,
29
+ WEBPACK_LAYERS_NAMES.actionBrowser,
30
+ WEBPACK_LAYERS_NAMES.appMetadataRoute,
31
+ WEBPACK_LAYERS_NAMES.appRouteHandler,
32
+ ],
33
+ nonClientServerTarget: [
34
+ WEBPACK_LAYERS_NAMES.middleware,
35
+ WEBPACK_LAYERS_NAMES.api,
36
+ ],
37
+ app: [
38
+ WEBPACK_LAYERS_NAMES.reactServerComponents,
39
+ WEBPACK_LAYERS_NAMES.actionBrowser,
40
+ WEBPACK_LAYERS_NAMES.appMetadataRoute,
41
+ WEBPACK_LAYERS_NAMES.appRouteHandler,
42
+ WEBPACK_LAYERS_NAMES.serverSideRendering,
43
+ WEBPACK_LAYERS_NAMES.appPagesBrowser,
44
+ WEBPACK_LAYERS_NAMES.shared,
45
+ ],
46
+ } });
@@ -114,9 +114,10 @@ async function build(dir, target, context) {
114
114
  source: (0, utils_2.cleanEscapedChars)(source),
115
115
  headers,
116
116
  }));
117
- const [appPathsManifest, appPathRoutesManifest] = await Promise.all([
117
+ const [appPathsManifest, appPathRoutesManifest, serverReferenceManifest] = await Promise.all([
118
118
  (0, utils_1.readJSON)((0, path_1.join)(dir, distDir, "server", constants_2.APP_PATHS_MANIFEST)).catch(() => undefined),
119
119
  (0, utils_1.readJSON)((0, path_1.join)(dir, distDir, constants_2.APP_PATH_ROUTES_MANIFEST)).catch(() => undefined),
120
+ (0, utils_1.readJSON)((0, path_1.join)(dir, distDir, "server", constants_2.SERVER_REFERENCE_MANIFEST)).catch(() => undefined),
120
121
  ]);
121
122
  if (appPathRoutesManifest) {
122
123
  const headersFromMetaFiles = await (0, utils_2.getHeadersFromMetaFiles)(dir, distDir, baseUrl, appPathRoutesManifest);
@@ -131,6 +132,12 @@ async function build(dir, target, context) {
131
132
  reasonsForBackend.add(`non-static component ${key}`);
132
133
  }
133
134
  }
135
+ if (serverReferenceManifest) {
136
+ const routesWithServerAction = (0, utils_2.getRoutesWithServerAction)(serverReferenceManifest, appPathRoutesManifest);
137
+ for (const key of routesWithServerAction) {
138
+ reasonsForBackend.add(`route with server action ${key}`);
139
+ }
140
+ }
134
141
  }
135
142
  const isEveryRedirectSupported = nextJsRedirects
136
143
  .filter((it) => !it.internal)
@@ -212,12 +219,13 @@ async function ɵcodegenPublicDirectory(sourceDir, destDir, _, context) {
212
219
  await (0, fs_extra_1.copy)(publicPath, (0, path_1.join)(destDir, basePath));
213
220
  }
214
221
  await (0, fs_extra_1.copy)((0, path_1.join)(sourceDir, distDir, "static"), (0, path_1.join)(destDir, basePath, "_next", "static"));
215
- const [middlewareManifest, prerenderManifest, routesManifest, pagesManifest, appPathRoutesManifest,] = await Promise.all([
222
+ const [middlewareManifest, prerenderManifest, routesManifest, pagesManifest, appPathRoutesManifest, serverReferenceManifest,] = await Promise.all([
216
223
  (0, utils_1.readJSON)((0, path_1.join)(sourceDir, distDir, "server", constants_2.MIDDLEWARE_MANIFEST)),
217
224
  (0, utils_1.readJSON)((0, path_1.join)(sourceDir, distDir, constants_2.PRERENDER_MANIFEST)),
218
225
  (0, utils_1.readJSON)((0, path_1.join)(sourceDir, distDir, constants_2.ROUTES_MANIFEST)),
219
226
  (0, utils_1.readJSON)((0, path_1.join)(sourceDir, distDir, "server", constants_2.PAGES_MANIFEST)),
220
227
  (0, utils_1.readJSON)((0, path_1.join)(sourceDir, distDir, constants_2.APP_PATH_ROUTES_MANIFEST)).catch(() => ({})),
228
+ (0, utils_1.readJSON)((0, path_1.join)(sourceDir, distDir, "server", constants_2.SERVER_REFERENCE_MANIFEST)).catch(() => ({ node: {}, edge: {}, encryptionKey: "" })),
221
229
  ]);
222
230
  const appPathRoutesEntries = Object.entries(appPathRoutesManifest);
223
231
  const middlewareMatcherRegexes = (0, utils_2.getMiddlewareMatcherRegexes)(middlewareManifest);
@@ -240,10 +248,20 @@ async function ɵcodegenPublicDirectory(sourceDir, destDir, _, context) {
240
248
  ...redirectsRegexesNotSupportedByHosting,
241
249
  ...headersRegexesNotSupportedByHosting,
242
250
  ];
251
+ const staticRoutesUsingServerActions = (0, utils_2.getRoutesWithServerAction)(serverReferenceManifest, appPathRoutesManifest);
243
252
  const pagesManifestLikePrerender = Object.fromEntries(Object.entries(pagesManifest)
244
253
  .filter(([, srcRoute]) => srcRoute.endsWith(".html"))
245
254
  .map(([path]) => {
246
- return [path, { srcRoute: null, initialRevalidateSeconds: false, dataRoute: "" }];
255
+ return [
256
+ path,
257
+ {
258
+ srcRoute: null,
259
+ initialRevalidateSeconds: false,
260
+ dataRoute: "",
261
+ experimentalPPR: false,
262
+ prefetchDataRoute: "",
263
+ },
264
+ ];
247
265
  }));
248
266
  const routesToCopy = Object.assign(Object.assign({}, prerenderManifest.routes), pagesManifestLikePrerender);
249
267
  await Promise.all(Object.entries(routesToCopy).map(async ([path, route]) => {
@@ -256,6 +274,10 @@ async function ɵcodegenPublicDirectory(sourceDir, destDir, _, context) {
256
274
  logger_1.logger.debug(`skipping ${path} due to it matching an unsupported rewrite/redirect/header or middlware`);
257
275
  return;
258
276
  }
277
+ if (staticRoutesUsingServerActions.some((it) => path === it)) {
278
+ logger_1.logger.debug(`skipping ${path} due to server action`);
279
+ return;
280
+ }
259
281
  const appPathRoute = route.srcRoute && ((_a = appPathRoutesEntries.find(([, it]) => it === route.srcRoute)) === null || _a === void 0 ? void 0 : _a[0]);
260
282
  const contentDist = (0, path_1.join)(sourceDir, distDir, "server", appPathRoute ? "app" : "pages");
261
283
  const sourceParts = path.split("/").filter((it) => !!it);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasStaticAppNotFoundComponent = exports.getNextVersion = exports.getBuildId = exports.getHeadersFromMetaFiles = exports.getNonStaticServerComponents = exports.getNonStaticRoutes = exports.getMiddlewareMatcherRegexes = exports.allDependencyNames = exports.isUsingAppDirectory = exports.isUsingNextImageInAppDirectory = exports.isUsingImageOptimization = exports.isUsingMiddleware = exports.hasUnoptimizedImage = exports.usesNextImage = exports.usesAppDirRouter = exports.getNextjsRewritesToUse = exports.isHeaderSupportedByHosting = exports.isRedirectSupportedByHosting = exports.isRewriteSupportedByHosting = exports.cleanI18n = exports.cleanCustomRouteI18n = exports.cleanEscapedChars = exports.I18N_SOURCE = void 0;
3
+ exports.getRoutesWithServerAction = exports.hasStaticAppNotFoundComponent = exports.getNextVersion = exports.getBuildId = exports.getHeadersFromMetaFiles = exports.getNonStaticServerComponents = exports.getNonStaticRoutes = exports.getMiddlewareMatcherRegexes = exports.allDependencyNames = exports.isUsingAppDirectory = exports.isUsingNextImageInAppDirectory = exports.isUsingImageOptimization = exports.isUsingMiddleware = exports.hasUnoptimizedImage = exports.usesNextImage = exports.usesAppDirRouter = exports.getNextjsRewritesToUse = exports.isHeaderSupportedByHosting = exports.isRedirectSupportedByHosting = exports.isRewriteSupportedByHosting = exports.cleanI18n = exports.cleanCustomRouteI18n = exports.cleanEscapedChars = exports.I18N_SOURCE = void 0;
4
4
  const fs_1 = require("fs");
5
5
  const fs_extra_1 = require("fs-extra");
6
6
  const path_1 = require("path");
@@ -199,3 +199,22 @@ async function hasStaticAppNotFoundComponent(sourceDir, distDir) {
199
199
  return (0, fs_extra_1.pathExists)((0, path_1.join)(sourceDir, distDir, "server", "app", "_not-found.html"));
200
200
  }
201
201
  exports.hasStaticAppNotFoundComponent = hasStaticAppNotFoundComponent;
202
+ function getRoutesWithServerAction(serverReferenceManifest, appPathRoutesManifest) {
203
+ const routesWithServerAction = new Set();
204
+ for (const key of Object.keys(serverReferenceManifest)) {
205
+ if (key !== "edge" && key !== "node")
206
+ continue;
207
+ const edgeOrNode = serverReferenceManifest[key];
208
+ for (const actionId of Object.keys(edgeOrNode)) {
209
+ if (!edgeOrNode[actionId].layer)
210
+ continue;
211
+ for (const [route, type] of Object.entries(edgeOrNode[actionId].layer)) {
212
+ if (type === constants_1.WEBPACK_LAYERS.actionBrowser) {
213
+ routesWithServerAction.add(appPathRoutesManifest[route.replace("app", "")]);
214
+ }
215
+ }
216
+ }
217
+ }
218
+ return Array.from(routesWithServerAction);
219
+ }
220
+ exports.getRoutesWithServerAction = getRoutesWithServerAction;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDeploymentDomain = exports.getAllSiteDomains = exports.getSiteDomains = exports.cleanAuthState = exports.getCleanDomains = exports.removeAuthDomain = exports.addAuthDomains = exports.deleteSite = exports.updateSite = exports.createSite = exports.getSite = exports.listSites = exports.createRelease = exports.cloneVersion = exports.listVersions = exports.updateVersion = exports.createVersion = exports.deleteChannel = exports.updateChannelTtl = exports.createChannel = exports.listChannels = exports.getChannel = exports.normalizeName = exports.SiteType = void 0;
3
+ exports.getDeploymentDomain = exports.getAllSiteDomains = exports.getSiteDomains = exports.cleanAuthState = exports.getCleanDomains = exports.removeAuthDomain = exports.addAuthDomains = exports.deleteSite = exports.updateSite = exports.createSite = exports.getSite = exports.listDemoSites = exports.listSites = exports.createRelease = exports.cloneVersion = exports.listVersions = exports.updateVersion = exports.createVersion = exports.deleteChannel = exports.updateChannelTtl = exports.createChannel = exports.listChannels = exports.getChannel = exports.normalizeName = exports.SiteType = void 0;
4
4
  const error_1 = require("../error");
5
5
  const api_1 = require("../api");
6
6
  const apiv2_1 = require("../apiv2");
@@ -159,6 +159,17 @@ async function listSites(project) {
159
159
  }
160
160
  }
161
161
  exports.listSites = listSites;
162
+ function listDemoSites(projectId) {
163
+ return [
164
+ {
165
+ name: `projects/${projectId}/sites/${projectId}`,
166
+ defaultUrl: `https://${projectId}.firebaseapp.com`,
167
+ appId: "fake-app-id",
168
+ labels: {},
169
+ },
170
+ ];
171
+ }
172
+ exports.listDemoSites = listDemoSites;
162
173
  async function getSite(project, site) {
163
174
  try {
164
175
  const res = await apiClient.get(`/projects/${project}/sites/${site}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "firebase-tools",
3
- "version": "13.4.0",
3
+ "version": "13.4.1",
4
4
  "description": "Command-Line Interface for Firebase",
5
5
  "main": "./lib/index.js",
6
6
  "bin": {