{"version":3,"sources":["../../../src/server/app-render/app-render-render-utils.ts"],"sourcesContent":["import { InvariantError } from '../../shared/lib/invariant-error'\nimport { createAtomicTimerGroup } from './app-render-scheduling'\nimport {\n  DANGEROUSLY_runPendingImmediatesAfterCurrentTask,\n  expectNoPendingImmediates,\n} from '../node-environment-extensions/fast-set-immediate.external'\nimport { isThenable } from '../../shared/lib/is-thenable'\n\nfunction noop() {}\n\n/**\n * This is a utility function to make scheduling sequential tasks that run back to back easier.\n * We schedule on the same queue (setTimeout) at the same time to ensure no other events can sneak in between.\n *\n * The first function runs in the first task. Each subsequent function runs in its own task.\n * The returned promise resolves after the last task completes.\n */\nexport function runInSequentialTasks<R>(\n  first: () => R,\n  ...rest: Array<() => void>\n): Promise<Awaited<R>> {\n  if (process.env.NEXT_RUNTIME === 'edge') {\n    throw new InvariantError(\n      '`runInSequentialTasks` should not be called in edge runtime.'\n    )\n  } else {\n    return new Promise((resolve, reject) => {\n      const scheduleTimeout = createAtomicTimerGroup()\n      const ids: ReturnType<typeof scheduleTimeout>[] = []\n\n      let result: R\n      ids.push(\n        scheduleTimeout(() => {\n          try {\n            DANGEROUSLY_runPendingImmediatesAfterCurrentTask()\n            result = first()\n            // If the first function returns a thenable, suppress unhandled\n            // rejections. A later task in the sequence (e.g. an abort) may\n            // cause the promise to reject, and we don't want that to surface\n            // as an unhandled rejection — the caller will observe the\n            // rejection when they await the returned promise.\n            if (isThenable(result)) {\n              result.then(noop, noop)\n            }\n          } catch (err) {\n            for (let i = 1; i < ids.length; i++) {\n              clearTimeout(ids[i])\n            }\n            reject(err)\n          }\n        })\n      )\n\n      for (let i = 0; i < rest.length; i++) {\n        const fn = rest[i]\n        let index = ids.length\n\n        ids.push(\n          scheduleTimeout(() => {\n            try {\n              DANGEROUSLY_runPendingImmediatesAfterCurrentTask()\n              fn()\n            } catch (err) {\n              // clear remaining timeouts\n              while (++index < ids.length) {\n                clearTimeout(ids[index])\n              }\n              reject(err)\n            }\n          })\n        )\n      }\n\n      // We wait a task before resolving\n      ids.push(\n        scheduleTimeout(() => {\n          try {\n            expectNoPendingImmediates()\n            resolve(result as Awaited<R>)\n          } catch (err) {\n            reject(err)\n          }\n        })\n      )\n    })\n  }\n}\n"],"names":["runInSequentialTasks","noop","first","rest","process","env","NEXT_RUNTIME","InvariantError","Promise","resolve","reject","scheduleTimeout","createAtomicTimerGroup","ids","result","push","DANGEROUSLY_runPendingImmediatesAfterCurrentTask","isThenable","then","err","i","length","clearTimeout","fn","index","expectNoPendingImmediates"],"mappings":";;;;+BAiBgBA;;;eAAAA;;;gCAjBe;qCACQ;0CAIhC;4BACoB;AAE3B,SAASC,QAAQ;AASV,SAASD,qBACdE,KAAc,EACd,GAAGC,IAAuB;IAE1B,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;QACvC,MAAM,qBAEL,CAFK,IAAIC,8BAAc,CACtB,iEADI,qBAAA;mBAAA;wBAAA;0BAAA;QAEN;IACF,OAAO;QACL,OAAO,IAAIC,QAAQ,CAACC,SAASC;YAC3B,MAAMC,kBAAkBC,IAAAA,2CAAsB;YAC9C,MAAMC,MAA4C,EAAE;YAEpD,IAAIC;YACJD,IAAIE,IAAI,CACNJ,gBAAgB;gBACd,IAAI;oBACFK,IAAAA,0EAAgD;oBAChDF,SAASZ;oBACT,+DAA+D;oBAC/D,+DAA+D;oBAC/D,iEAAiE;oBACjE,0DAA0D;oBAC1D,kDAAkD;oBAClD,IAAIe,IAAAA,sBAAU,EAACH,SAAS;wBACtBA,OAAOI,IAAI,CAACjB,MAAMA;oBACpB;gBACF,EAAE,OAAOkB,KAAK;oBACZ,IAAK,IAAIC,IAAI,GAAGA,IAAIP,IAAIQ,MAAM,EAAED,IAAK;wBACnCE,aAAaT,GAAG,CAACO,EAAE;oBACrB;oBACAV,OAAOS;gBACT;YACF;YAGF,IAAK,IAAIC,IAAI,GAAGA,IAAIjB,KAAKkB,MAAM,EAAED,IAAK;gBACpC,MAAMG,KAAKpB,IAAI,CAACiB,EAAE;gBAClB,IAAII,QAAQX,IAAIQ,MAAM;gBAEtBR,IAAIE,IAAI,CACNJ,gBAAgB;oBACd,IAAI;wBACFK,IAAAA,0EAAgD;wBAChDO;oBACF,EAAE,OAAOJ,KAAK;wBACZ,2BAA2B;wBAC3B,MAAO,EAAEK,QAAQX,IAAIQ,MAAM,CAAE;4BAC3BC,aAAaT,GAAG,CAACW,MAAM;wBACzB;wBACAd,OAAOS;oBACT;gBACF;YAEJ;YAEA,kCAAkC;YAClCN,IAAIE,IAAI,CACNJ,gBAAgB;gBACd,IAAI;oBACFc,IAAAA,mDAAyB;oBACzBhB,QAAQK;gBACV,EAAE,OAAOK,KAAK;oBACZT,OAAOS;gBACT;YACF;QAEJ;IACF;AACF","ignoreList":[0]}