Skip to content

Commit e26c0d7

Browse files
committed
Provide default param values to extensions emulator when reading resources (#8415)
1 parent 846ae72 commit e26c0d7

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Fixed an issue in the extensions emulator where parameter default values would not be substitued into resource definitions.

src/emulator/extensionsEmulator.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { EmulatorRegistry } from "./registry";
2121
import { EmulatorInfo, EmulatorInstance, Emulators } from "./types";
2222
import { Build } from "../deploy/functions/build";
2323
import { extractExtensionsFromBuilds } from "../extensions/runtimes/common";
24+
import { populateDefaultParams } from "../extensions/paramHelper";
2425

2526
export interface ExtensionEmulatorArgs {
2627
options: Options;
@@ -267,7 +268,8 @@ export class ExtensionsEmulator implements EmulatorInstance {
267268
// TODO: This should find package.json, then use that as functionsDir.
268269
const functionsDir = path.join(extensionDir, "functions");
269270
// TODO(b/213335255): For local extensions, this should include extensionSpec instead of extensionVersion
270-
const env = Object.assign(this.autoPopulatedParams(instance), instance.params);
271+
const params = populateDefaultParams(instance.params, await planner.getExtensionSpec(instance));
272+
const env = Object.assign(this.autoPopulatedParams(instance), params);
271273

272274
const { extensionTriggers, runtime, nonSecretEnv, secretEnvVariables } =
273275
await getExtensionFunctionInfo(instance, env);

src/extensions/paramHelper.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,16 @@ export function isSystemParam(paramName: string): boolean {
225225
const regex = /^firebaseextensions\.[a-zA-Z0-9\.]*\//;
226226
return regex.test(paramName);
227227
}
228+
229+
// Populate default values for missing params.
230+
// This is only needed when emulating extensions - when deploying, this is handled in the back end.
231+
export function populateDefaultParams(
232+
params: Record<string, string>,
233+
spec: ExtensionSpec,
234+
): Record<string, string> {
235+
const ret = { ...params };
236+
for (const p of spec.params) {
237+
ret[p.param] = ret[p.param] ?? p.default;
238+
}
239+
return ret;
240+
}

src/responseToError.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ export function responseToError(response: any, body: any, url?: string): Firebas
66
if (response.statusCode < 400) {
77
return;
88
}
9-
109
if (typeof body === "string") {
1110
if (response.statusCode === 404) {
1211
body = {

0 commit comments

Comments
 (0)