{"version":3,"sources":["../../src/utils/timing.ts"],"sourcesContent":["interface Timer {\n  description?: string;\n  start: number;\n}\n\nexport interface Options {\n  enabled: boolean;\n  crossOrigin?: string;\n}\n\nexport function timing(options: Options = { enabled: true }) {\n  const { enabled = true, crossOrigin } = options;\n  let start = performance.now();\n  const headers: string[] = [];\n  const timers = new Map<string, Timer>();\n\n  return {\n    startTime: (name: Lowercase<string>, description?: string) => {\n      timers.set(name, { description, start: performance.now() });\n    },\n    endTime: (name: Lowercase<string>, precision?: number) => {\n      const timer = timers.get(name);\n      if (!timer) {\n        console.warn(`timing: ${name} not found`);\n        return;\n      }\n      const { start, description } = timer;\n      const dur = (performance.now() - start).toFixed(precision ?? 1);\n      timers.delete(name);\n      const metric = description\n        ? `${name};dur=${dur};desc=\"${description}\"`\n        : `${name};dur=${dur}`;\n      headers.push(metric);\n    },\n    mark: (name: Lowercase<string>, description?: string, precision?: number) => {\n      const dur = (performance.now() - start).toFixed(precision ?? 1);\n      const metric = description\n        ? `${name};dur=${dur};desc=\"${description}\"`\n        : `${name};dur=${dur}`;\n      headers.push(metric);\n      start = performance.now();\n    },\n    setMetric: (\n      name: Lowercase<string>,\n      value: number | string | undefined,\n      description?: string,\n      precision?: number\n    ) => {\n      if (typeof value === 'number') {\n        const dur = value.toFixed(precision ?? 1);\n        const metric = description\n          ? `${name};dur=${dur};desc=\"${description}\"`\n          : `${name};dur=${dur}`;\n        headers.push(metric);\n      } else {\n        const metric = value ? `${name};desc=\"${value}\"` : `${name}`;\n        headers.push(metric);\n      }\n    },\n    setTiming: (response: Response) => {\n      if (!enabled) return;\n      response.headers.append('Server-Timing', headers.join(','));\n      response.headers.append('Timing-Allow-Origin', crossOrigin ?? '*');\n    },\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,SAAS,OAAO,UAAmB,EAAE,SAAS,KAAK,GAAG;AAC3D,QAAM,EAAE,UAAU,MAAM,YAAY,IAAI;AACxC,MAAI,QAAQ,YAAY,IAAI;AAC5B,QAAM,UAAoB,CAAC;AAC3B,QAAM,SAAS,oBAAI,IAAmB;AAEtC,SAAO;AAAA,IACL,WAAW,CAAC,MAAyB,gBAAyB;AAC5D,aAAO,IAAI,MAAM,EAAE,aAAa,OAAO,YAAY,IAAI,EAAE,CAAC;AAAA,IAC5D;AAAA,IACA,SAAS,CAAC,MAAyB,cAAuB;AACxD,YAAM,QAAQ,OAAO,IAAI,IAAI;AAC7B,UAAI,CAAC,OAAO;AACV,gBAAQ,KAAK,WAAW,IAAI,YAAY;AACxC;AAAA,MACF;AACA,YAAM,EAAE,OAAAA,QAAO,YAAY,IAAI;AAC/B,YAAM,OAAO,YAAY,IAAI,IAAIA,QAAO,QAAQ,aAAa,CAAC;AAC9D,aAAO,OAAO,IAAI;AAClB,YAAM,SAAS,cACX,GAAG,IAAI,QAAQ,GAAG,UAAU,WAAW,MACvC,GAAG,IAAI,QAAQ,GAAG;AACtB,cAAQ,KAAK,MAAM;AAAA,IACrB;AAAA,IACA,MAAM,CAAC,MAAyB,aAAsB,cAAuB;AAC3E,YAAM,OAAO,YAAY,IAAI,IAAI,OAAO,QAAQ,aAAa,CAAC;AAC9D,YAAM,SAAS,cACX,GAAG,IAAI,QAAQ,GAAG,UAAU,WAAW,MACvC,GAAG,IAAI,QAAQ,GAAG;AACtB,cAAQ,KAAK,MAAM;AACnB,cAAQ,YAAY,IAAI;AAAA,IAC1B;AAAA,IACA,WAAW,CACT,MACA,OACA,aACA,cACG;AACH,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,MAAM,MAAM,QAAQ,aAAa,CAAC;AACxC,cAAM,SAAS,cACX,GAAG,IAAI,QAAQ,GAAG,UAAU,WAAW,MACvC,GAAG,IAAI,QAAQ,GAAG;AACtB,gBAAQ,KAAK,MAAM;AAAA,MACrB,OAAO;AACL,cAAM,SAAS,QAAQ,GAAG,IAAI,UAAU,KAAK,MAAM,GAAG,IAAI;AAC1D,gBAAQ,KAAK,MAAM;AAAA,MACrB;AAAA,IACF;AAAA,IACA,WAAW,CAAC,aAAuB;AACjC,UAAI,CAAC,QAAS;AACd,eAAS,QAAQ,OAAO,iBAAiB,QAAQ,KAAK,GAAG,CAAC;AAC1D,eAAS,QAAQ,OAAO,uBAAuB,eAAe,GAAG;AAAA,IACnE;AAAA,EACF;AACF;","names":["start"]}