in modules/core/src/passes/layers-pass.js [218:255]
export function layerIndexResolver(startIndex = 0, layerIndices = {}) {
const resolvers = {};
const resolveLayerIndex = (layer, isDrawn) => {
const indexOverride = layer.props._offset;
const layerId = layer.id;
const parentId = layer.parent && layer.parent.id;
let index;
if (parentId && !(parentId in layerIndices)) {
// Populate layerIndices with the parent layer's index
resolveLayerIndex(layer.parent, false);
}
if (parentId in resolvers) {
const resolver = (resolvers[parentId] =
resolvers[parentId] || layerIndexResolver(layerIndices[parentId], layerIndices));
index = resolver(layer, isDrawn);
resolvers[layerId] = resolver;
} else if (Number.isFinite(indexOverride)) {
index = indexOverride + (layerIndices[parentId] || 0);
// Mark layer as needing its own resolver
// We don't actually create it until it's used for the first time
resolvers[layerId] = null;
} else {
index = startIndex;
}
if (isDrawn && index >= startIndex) {
startIndex = index + 1;
}
layerIndices[layerId] = index;
return index;
};
return resolveLayerIndex;
}