UNPKG

@apistudio/apim-cli

Version:

CLI for API Management Products

119 lines (118 loc) 4.43 kB
/** * Copyright Super iPaaS Integration LLC, an IBM Company 2024 */ import { equalsIgnoreCase, isNullOrUndefined, } from "../helpers/common/data-helper.js"; import { getTargetModelAssetKind, hasNamespace, isValidAsset, isValidAssetRefValue, } from "../helpers/apim/asset-helper.js"; import { COLON } from "../constants/app-constants.js"; import { fromAssetRefValue, isSameAsset, } from "../helpers/apim/build-helper.js"; class AssetCache { constructor() { this.processedAssets = new Set(); this.toBeProcessedAssets = new Set(); } static getInstance() { if (isNullOrUndefined(AssetCache.INSTANCE)) { AssetCache.INSTANCE = new AssetCache(); } return this.INSTANCE; } markAsProcessed(asset) { if (!isValidAsset(asset)) { return; } const result = hasNamespace(asset) ? [asset.metadata.namespace] : []; result.push(asset.metadata.name); result.push(asset.metadata.version); const assetRefValue = result.join(COLON); this.processedAssets.add({ kind: getTargetModelAssetKind(asset.kind), ref: assetRefValue, isNewlyAdded: false, }); if (this.isToBeProcessed(asset.kind, assetRefValue)) { const unProcessedAsset = this.getUnProcessedAsset(asset.kind, assetRefValue); this.toBeProcessedAssets.delete(unProcessedAsset); } } isProcessed(targetKind, assetRefValue) { const found = this.getProcessedAsset(targetKind, assetRefValue); return found !== undefined; } isToBeProcessed(targetKind, assetRefValue) { const found = this.getUnProcessedAsset(targetKind, assetRefValue); return found !== undefined; } getNewlyAddedUnProcessedAssets() { const unProcessedAssets = this.getUnProcessedAssets(); const newlyAdded = new Set(); unProcessedAssets.forEach((unProcessedAsset) => { if (unProcessedAsset.isNewlyAdded) { newlyAdded.add({ ...unProcessedAsset, }); } }); return newlyAdded; } getCheckedUnProcessedAssets() { const unProcessedAssets = this.getUnProcessedAssets(); const checkedAssets = new Set(); unProcessedAssets.forEach((unProcessedAsset) => { if (!unProcessedAsset.isNewlyAdded) { checkedAssets.add({ ...unProcessedAsset, }); } }); return checkedAssets; } markUnProcessedAssetAsChecked(cacheModel) { const unProcessedAsset = this.getUnProcessedAsset(cacheModel.kind, cacheModel.ref); if (!isNullOrUndefined(unProcessedAsset) && unProcessedAsset?.isNewlyAdded) { unProcessedAsset.isNewlyAdded = false; } } markAllUnProcessedAssetAsUnchecked() { this.toBeProcessedAssets.forEach((toBeProcessed) => (toBeProcessed.isNewlyAdded = true)); } getProcessedAsset(targetKind, assetRefValue) { for (const value of this.processedAssets.values()) { if (isSameAsset(fromAssetRefValue(value.ref), fromAssetRefValue(assetRefValue)) && equalsIgnoreCase(value.kind, getTargetModelAssetKind(targetKind))) { return value; } } return undefined; } getUnProcessedAsset(targetKind, assetRefValue) { for (const value of this.toBeProcessedAssets.values()) { if (isSameAsset(fromAssetRefValue(value.ref), fromAssetRefValue(assetRefValue)) && equalsIgnoreCase(value.kind, getTargetModelAssetKind(targetKind))) { return value; } } return undefined; } getUnProcessedAssets() { return new Set(this.toBeProcessedAssets); } clear() { this.toBeProcessedAssets.clear(); this.processedAssets.clear(); } //assetRef: <namespace>:<name>:<version> or <name>:<version> checkAndMarkAsUnProcessed(targetAssetModel) { if (!isValidAssetRefValue(targetAssetModel.ref)) { return false; } if (this.isProcessed(targetAssetModel.kind, targetAssetModel.ref)) { return false; } this.toBeProcessedAssets.add(targetAssetModel); return true; } } export { AssetCache };