{"version":3,"file":"__federation_expose_Warmup.chunk.bundle","sources":["/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/ODS/src/Warmup.ts"],"sourcesContent":["import { getCostCentersByType, getOdsItemsByCostCenterAndType, getMacroActivitiesByOdsItem, getPartidas } from '@data-oil-front/core-ods';\n\n/**\n * Descarga datasets ODS necesarios para operar offline.\n * Ignora errores para no bloquear el warmup.\n */\nexport async function warmup(): Promise<void> {\n  try {\n    const types: Array<'opex' | 'capex'> = ['opex', 'capex'];\n    await Promise.all(types.map(type => prefetchByType(type)));\n  } catch {\n  }\n}\n\nconst COST_CENTER_CONCURRENCY = 3;\nconst ODS_ITEM_CONCURRENCY = 4;\nconst PARTIDAS_CONCURRENCY = 6;\n\nasync function prefetchByType(type: 'opex' | 'capex'): Promise<void> {\n  const costCenters = await safeCall(() => getCostCentersByType(type), []);\n  if (!costCenters.length) return;\n\n  const processedPartidas = new Set<string>();\n\n  await runWithConcurrency(costCenters, COST_CENTER_CONCURRENCY, async (cc) => {\n    const items = await safeCall(() => getOdsItemsByCostCenterAndType(cc.id, type), []);\n    if (!items.length) return;\n\n    await runWithConcurrency(items, ODS_ITEM_CONCURRENCY, async (item) => {\n      const groups = await safeCall(() => getMacroActivitiesByOdsItem(item.id), []);\n      if (!groups.length) return;\n\n      await runWithConcurrency(groups, PARTIDAS_CONCURRENCY, async (group) => {\n        const key = `${group.id}:${item.id}`;\n        if (processedPartidas.has(key)) return;\n        processedPartidas.add(key);\n        await safeCall(() => getPartidas(group.id, item.id), []);\n      });\n    });\n  });\n}\n\nasync function runWithConcurrency<T>(\n  items: T[],\n  limit: number,\n  worker: (item: T) => Promise<void>,\n): Promise<void> {\n  if (!items.length) return;\n\n  let index = 0;\n  const totalWorkers = Math.min(limit, items.length);\n  const runners = Array.from({ length: totalWorkers }, async () => {\n    while (true) {\n      const currentIndex = index;\n      index += 1;\n      if (currentIndex >= items.length) break;\n      await worker(items[currentIndex]);\n    }\n  });\n\n  await Promise.all(runners);\n}\n\nasync function safeCall<T>(fn: () => Promise<T>, fallback: T): Promise<T> {\n  try {\n    return await fn();\n  } catch {\n    return fallback;\n  }\n}\n"],"names":["Promise","all","map","type","costCenters","safeCall","getCostCentersByType","length","processedPartidas","Set","runWithConcurrency","COST_CENTER_CONCURRENCY","cc","items","getOdsItemsByCostCenterAndType","id","ODS_ITEM_CONCURRENCY","item","groups","getMacroActivitiesByOdsItem","PARTIDAS_CONCURRENCY","group","key","has","add","getPartidas","prefetchByType","limit","worker","index","totalWorkers","Math","min","runners","Array","from","currentIndex","fallback","fn"],"mappings":"2PAA+G,OAMxG,a,uBACL,UAEQA,QAAQC,IADyB,CAAC,OAAQ,SACxBC,IAAI,SAAAC,G,OAShC,SAA8BA,G,uBAC5B,IAAMC,QAAoBC,EAAS,W,SAAMC,EAAAA,sBAAqBH,E,EAAO,IACrE,GAAKC,EAAYG,OAAjB,CAEA,IAAMC,EAAoB,IAAIC,UAExBC,EAAmBN,EAAaO,EAAyB,SAAOC,G,uBACpE,IAAMC,QAAcR,EAAS,W,OAAMS,EAAAA,EAAAA,gCAA+BF,EAAGG,GAAIZ,E,EAAO,IAC3EU,EAAMN,eAELG,EAAmBG,EAAOG,EAAsB,SAAOC,G,uBAC3D,IAAMC,QAAeb,EAAS,W,SAAMc,EAAAA,6BAA4BF,EAAKF,G,EAAK,IACrEG,EAAOX,eAENG,EAAmBQ,EAAQE,EAAsB,SAAOC,G,uBAC5D,IAAMC,EAAM,GAAGD,EAAMN,MAAME,EAAKF,KAC5BP,EAAkBe,IAAID,KAC1Bd,EAAkBgB,IAAIF,SAChBjB,EAAS,W,SAAMoB,EAAAA,aAAYJ,EAAMN,GAAIE,EAAKF,G,EAAK,IACvD,E,KACF,E,KACF,E,IAnB+B,CAoBjC,E,GA/BwCW,CAAevB,E,GACrD,CAAE,SACF,CACF,E,GAEA,IAAMQ,EAA0B,EAC1BK,EAAuB,EACvBI,EAAuB,EA0B7B,SAAeV,EACbG,EACAc,EACAC,G,uBAEA,GAAKf,EAAMN,OAAX,CAEA,IAAIsB,EAAQ,EACNC,EAAeC,KAAKC,IAAIL,EAAOd,EAAMN,QACrC0B,EAAUC,MAAMC,KAAK,CAAE5B,OAAQuB,GAAgB,W,uBACnD,OAAa,CACX,IAAMM,EAAeP,EAErB,GADAA,GAAS,EACLO,GAAgBvB,EAAMN,OAAQ,YAC5BqB,EAAOf,EAAMuB,GACrB,CACF,E,WAEMpC,QAAQC,IAAIgC,EAbO,CAc3B,E,GAEA,SAAe5B,EAAS,EAAyBgC,G,uBAC/C,IACE,aAAaC,GACf,CAAE,SACA,OAAOD,CACT,CACF,E"}