blob: 4e9e21131600d887084c8837253c3766b486c697 [file] [log] [blame]
/**
* @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);