<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">define(["require", "exports", "esri/layers/effects/jsonUtils"], function (require, exports, jsonUtils_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    exports.getMergedEffect = void 0;
    function getMergedEffect(presetLayerEffect, featureLayerView, type) {
        const layer = featureLayerView?.layer;
        if (!presetLayerEffect) {
            if (layer?.effect) {
                return layer.effect;
            }
            else if (layer?.featureEffect) {
                return type === "includedEffect"
                    ? layer.featureEffect.includedEffect
                    : layer.featureEffect.excludedEffect;
            }
            else {
                return null;
            }
        }
        // CONVERT EXISTING EFFECT AND PRESET LAYER EFFECT TO JSON
        const presetLayerEffectJSON = (0, jsonUtils_1.toJSON)(presetLayerEffect);
        const layerEffect = layer.effect;
        const layerFeatureEffect = layer.featureEffect;
        let existingEffect = null;
        if (layerFeatureEffect) {
            existingEffect =
                type === "includedEffect"
                    ? layer.featureEffect.includedEffect
                    : layer.featureEffect.excludedEffect;
        }
        else {
            existingEffect = layerEffect;
        }
        const existingEffectJSON = existingEffect ? (0, jsonUtils_1.toJSON)(existingEffect) : null;
        // RETURN PRESET LAYER EFFECT IF THERE ARE NO EXISTING EFFECTS
        if (!existingEffectJSON) {
            return (0, jsonUtils_1.fromJSON)(presetLayerEffectJSON);
        }
        let effectToUse = [...existingEffectJSON];
        if (presetLayerEffectJSON) {
            // ITERATE THROUGH PRESET LAYER EFFECT JSON
            presetLayerEffectJSON.forEach(presetLayerEffectItem =&gt; {
                // ITERATE THROUGH EXISTING EFFECT JSON
                effectToUse.forEach(existingEffectToUseItem =&gt; {
                    const { value } = existingEffectToUseItem;
                    if (value) {
                        // ITERATE THROUGH EXISTING EFFECT JSON VALUES
                        value.forEach((effectValue, effectIndex) =&gt; {
                            // REPLACE EXISTING EFFECT VALUE IF SAME TYPE IS PRESENT IN PRESET LAYER EFFECT
                            if (effectValue.type === presetLayerEffectItem.type) {
                                value[effectIndex] = presetLayerEffectItem;
                            }
                            // OTHERWISE MODIFY EXISTING EFFECT
                            else {
                                const notMerged = !existingEffectToUseItem.value.find(existingEffectItemToMerge =&gt; existingEffectItemToMerge.type === presetLayerEffectJSON[0].type);
                                // CHECK IF PRESET LAYER EFFECT HAS BEEN MERGED, IF NOT YET MERGED APPEND PRESET LAYER EFFECT TO EXISTING EFFECT
                                if (notMerged) {
                                    existingEffectToUseItem.value = [
                                        ...existingEffectToUseItem.value,
                                        ...presetLayerEffectJSON
                                    ];
                                }
                            }
                        });
                    }
                    else {
                        // HANDLE NON SCALE EFFECTS
                        const notMerged = !effectToUse.find(nonScaleEffectToUseItem =&gt; nonScaleEffectToUseItem.type === existingEffectToUseItem.type);
                        const presetNotMerged = !effectToUse.find(nonScaleEffectToUseItem =&gt; nonScaleEffectToUseItem.type === presetLayerEffectItem.type);
                        if (presetNotMerged) {
                            effectToUse = [...effectToUse, presetLayerEffectItem];
                        }
                        if (notMerged) {
                            effectToUse = [...effectToUse, existingEffectToUseItem];
                        }
                    }
                });
            });
        }
        const mergedEffect = (0, jsonUtils_1.fromJSON)(effectToUse);
        return mergedEffect;
    }
    exports.getMergedEffect = getMergedEffect;
});
</pre></body></html>