| /** |
| * @license |
| * Copyright (C) 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| (function() { |
| 'use strict'; |
| |
| // Prevent redefinition. |
| if (window.GrRestApiHooks) { return; } |
| |
| // Stores a map of endpointNames and api instances to add parameters to |
| // REST API calls. |
| const _apiInstances = {}; |
| |
| function GrRestApiHooks(plugin) { |
| this.plugin = plugin; |
| // Stores a map of endpointNames and functions to add parameters to REST API |
| // calls. |
| this._addParameterFunctions = {}; |
| } |
| |
| /** |
| * Registers an api hook for a particular api endpoint. |
| * This is called by a plugin. |
| * |
| * @param {string} endpointName the name of the endpoint. |
| * @param {Function} addParameterFunction the function that returns params |
| * for the plugin. Takes in current params. |
| */ |
| GrRestApiHooks.prototype.registerRestApiParams = function(endpointName, |
| addParameterFunction) { |
| if (this._addParameterFunctions[endpointName]) { |
| console.warn(`Rewriting rest api parameter function for |
| ${this.plugin.getPluginName()}`); |
| } |
| this._addParameterFunctions[endpointName] = addParameterFunction; |
| if (!_apiInstances[endpointName]) { |
| _apiInstances[endpointName] = []; |
| } |
| _apiInstances[endpointName].push(this); |
| }; |
| |
| /** |
| * Returns params for a registered api hook for a particular api endpoint or |
| * null. |
| * This is called by the application, not the plugin. |
| * It will either return params or null if there are no params. |
| * @param {string} endpointName the name of the endpoint. |
| * @param {!Object} initialParams the params of the rest api call. |
| */ |
| GrRestApiHooks.prototype._getRestApiParams = function(endpointName, |
| initialParams) { |
| const addParameterFunction = this._addParameterFunctions[endpointName]; |
| if (!addParameterFunction) return null; |
| return addParameterFunction(initialParams); |
| }; |
| |
| /** |
| * Gets the params for a particular mutation endpoint. |
| * |
| * This is called by the application and should not be called by plugins. |
| * |
| * @param {string} endpointName the name of the endpoint. |
| * @param {!Object} initialParams the params of the rest api call. |
| * @return new parameters to add to a REST API call. |
| */ |
| GrRestApiHooks.pluginParams = function(endpointName, initialParams) { |
| return (_apiInstances[endpointName] || []).reduce((accum, apiInstance) => { |
| const pluginParams = apiInstance._getRestApiParams( |
| endpointName, initialParams); |
| if (pluginParams) { |
| accum[apiInstance.plugin.getPluginName()] = |
| JSON.stringify(pluginParams); |
| } |
| return accum; |
| }, {}); |
| }; |
| |
| window.GrRestApiHooks = GrRestApiHooks; |
| })(window); |