@cloud-copilot/iam-data
Version:
61 lines • 2.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.readDataFile = readDataFile;
exports.readActionData = readActionData;
exports.readConditionKeys = readConditionKeys;
exports.readResourceTypes = readResourceTypes;
const readRelativeFile_js_1 = require("./readRelativeFile.js");
const dataCache = {};
const requestCache = {};
async function readDataFile(...pathParts) {
pathParts.unshift('data');
const file = pathParts.join('/');
// If the data is already cached, return it immediately.
if (dataCache[file]) {
return dataCache[file];
}
// If there's an ongoing request, return the existing Promise.
if (requestCache[file] !== undefined) {
return requestCache[file];
}
// Create a new Promise and store it in dataQueues synchronously.
requestCache[file] = (async () => {
try {
const data = await (0, readRelativeFile_js_1.readRelativeFile)(pathParts);
dataCache[file] = data; // Cache the fetched data.
return data;
}
finally {
delete requestCache[file]; // Clean up the queue regardless of success or failure.
}
})();
return requestCache[file];
}
/**
* Read the action data for a service
*
* @param serviceKey the service key to read the action data for
* @returns the action data for the service
*/
async function readActionData(serviceKey) {
return readDataFile('actions', `${serviceKey}.json`);
}
/**
* Read the condition key data for a service
*
* @param serviceKey the service key to read the condition key data for
* @returns the condition key data
*/
async function readConditionKeys(serviceKey) {
return readDataFile('conditionKeys', `${serviceKey}.json`);
}
/**
* Read the resource type data for a service
*
* @param serviceKey the service key to read the resource type data for
* @returns the resource type data
*/
async function readResourceTypes(serviceKey) {
return readDataFile('resourceTypes', `${serviceKey}.json`);
}
//# sourceMappingURL=data.js.map