{"version":3,"file":"worker.cjs","names":[],"sources":["../src/worker.ts"],"sourcesContent":["/**\n * A handle returned by {@link createDebouncedAnalysisScheduler} that exposes\n * the `cancel` method for clearing a pending analysis run.\n */\nexport type AnalysisSchedulerHandle = {\n  /**\n   * Cancels any pending analysis that has not yet started executing.\n   * Safe to call even when no analysis is pending.\n   */\n  cancel: () => void\n}\n\n/**\n * The object returned by {@link createDebouncedAnalysisScheduler}.\n * Provides a `schedule` method to trigger a debounced analysis run\n * and a `cancel` method to abort any pending run.\n */\nexport type DebouncedAnalysisScheduler = AnalysisSchedulerHandle & {\n  /** Triggers a debounced analysis run, resetting any pending timer. */\n  schedule: () => void\n}\n\n/**\n * Creates a debounced analysis scheduler that delays executing the provided\n * async analysis function until the specified quiet period has elapsed without\n * another call to `schedule`. Subsequent calls within the quiet period reset\n * the timer, ensuring the analysis runs only once after a burst of rapid HMR updates.\n *\n * @param analysisFunction - The async function to invoke after the quiet period.\n * @param quietPeriodMs - Milliseconds to wait after the last `schedule` call before executing.\n * @returns An object with a `schedule` method to trigger the debounced run\n *          and a `cancel` method to abort a pending run.\n * @throws {RangeError} If `quietPeriodMs` is negative, `NaN`, or non-finite.\n *\n * @example\n * ```ts\n * const scheduler = createDebouncedAnalysisScheduler(runGraphAnalysis, 150)\n * // Call on every HMR update. Only the last one within 150 ms fires.\n * scheduler.schedule()\n * ```\n */\nexport function createDebouncedAnalysisScheduler(\n  analysisFunction: () => Promise<void>,\n  quietPeriodMs: number\n): DebouncedAnalysisScheduler {\n  if (!Number.isFinite(quietPeriodMs) || quietPeriodMs < 0) {\n    throw new RangeError(`quietPeriodMs must be a non-negative finite number, received ${quietPeriodMs}`)\n  }\n\n  let pendingTimeoutId: ReturnType<typeof setTimeout> | null = null\n\n  function schedule(): void {\n    if (pendingTimeoutId !== null) {\n      clearTimeout(pendingTimeoutId)\n    }\n\n    pendingTimeoutId = setTimeout(() => {\n      pendingTimeoutId = null\n      analysisFunction().catch((analysisError: unknown) => {\n        console.error('[vite-plugin-safe-env] Dev analysis error:', analysisError)\n      })\n    }, quietPeriodMs)\n  }\n\n  function cancel(): void {\n    if (pendingTimeoutId !== null) {\n      clearTimeout(pendingTimeoutId)\n      pendingTimeoutId = null\n    }\n  }\n\n  return { schedule, cancel }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAyCA,SAAgB,iCACd,kBACA,eAC4B;AAC5B,KAAI,CAAC,OAAO,SAAS,cAAc,IAAI,gBAAgB,EACrD,OAAM,IAAI,WAAW,gEAAgE,gBAAgB;CAGvG,IAAI,mBAAyD;CAE7D,SAAS,WAAiB;AACxB,MAAI,qBAAqB,KACvB,cAAa,iBAAiB;AAGhC,qBAAmB,iBAAiB;AAClC,sBAAmB;AACnB,qBAAkB,CAAC,OAAO,kBAA2B;AACnD,YAAQ,MAAM,8CAA8C,cAAc;KAC1E;KACD,cAAc;;CAGnB,SAAS,SAAe;AACtB,MAAI,qBAAqB,MAAM;AAC7B,gBAAa,iBAAiB;AAC9B,sBAAmB;;;AAIvB,QAAO;EAAE;EAAU;EAAQ"}