in src/v2/providers/https.ts [89:194]
export function onRequest(
opts: HttpsOptions,
handler: (
request: Request,
response: express.Response
) => void | Promise<void>
): HttpsFunction;
export function onRequest(
handler: (
request: Request,
response: express.Response
) => void | Promise<void>
): HttpsFunction;
export function onRequest(
optsOrHandler:
| HttpsOptions
| ((request: Request, response: express.Response) => void | Promise<void>),
handler?: (
request: Request,
response: express.Response
) => void | Promise<void>
): HttpsFunction {
let opts: HttpsOptions;
if (arguments.length === 1) {
opts = {};
handler = optsOrHandler as (
request: Request,
response: express.Response
) => void | Promise<void>;
} else {
opts = optsOrHandler as HttpsOptions;
}
if ('cors' in opts) {
const userProvidedHandler = handler;
handler = (req: Request, res: express.Response): void | Promise<void> => {
return new Promise((resolve) => {
res.on('finish', resolve);
cors({ origin: opts.cors })(req, res, () => {
resolve(userProvidedHandler(req, res));
});
});
};
}
Object.defineProperty(handler, '__trigger', {
get: () => {
const baseOpts = options.optionsToTriggerAnnotations(
options.getGlobalOptions()
);
// global options calls region a scalar and https allows it to be an array,
// but optionsToTriggerAnnotations handles both cases.
const specificOpts = options.optionsToTriggerAnnotations(
opts as options.GlobalOptions
);
const trigger: any = {
// TODO(inlined): Remove "apiVersion" once the latest version of the CLI
// has migrated to "platform".
apiVersion: 2,
platform: 'gcfv2',
...baseOpts,
...specificOpts,
labels: {
...baseOpts?.labels,
...specificOpts?.labels,
},
httpsTrigger: {
allowInsecure: false,
},
};
convertIfPresent(
trigger.httpsTrigger,
opts,
'invoker',
'invoker',
convertInvoker
);
return trigger;
},
});
const baseOpts = options.optionsToEndpoint(options.getGlobalOptions());
// global options calls region a scalar and https allows it to be an array,
// but optionsToTriggerAnnotations handles both cases.
const specificOpts = options.optionsToEndpoint(opts as options.GlobalOptions);
const endpoint: Partial<ManifestEndpoint> = {
platform: 'gcfv2',
...baseOpts,
...specificOpts,
labels: {
...baseOpts?.labels,
...specificOpts?.labels,
},
httpsTrigger: {},
};
convertIfPresent(
endpoint.httpsTrigger,
opts,
'invoker',
'invoker',
convertInvoker
);
(handler as HttpsFunction).__endpoint = endpoint;
return handler as HttpsFunction;
}