{"version":3,"file":"methods-LDpgGj0A.mjs","names":[],"sources":["../src/modules/reports/methods.ts"],"sourcesContent":["import { formatISO, parseISO } from 'date-fns';\n\nimport type { ApiResponse } from '~/lib/api';\nimport { client } from '~/lib/fetch';\nimport { transformCreated } from '~/lib/transform';\n\nimport type { Task } from '~/modules/tasks/types';\nimport { assignPermission } from '~/helpers/permissions/decorator';\n\nimport type {\n  ReportFiles,\n  RawReportPeriod,\n  ReportPeriod,\n  ReportDetails,\n  RawReportDetails,\n  ReportResult,\n  RawReportResult,\n} from './types';\n\ntype ReportMap = Record<string, ReportFiles>;\n\nexport const transformPeriod = (period: RawReportPeriod): ReportPeriod => ({\n  start: parseISO(period.start),\n  end: parseISO(period.end),\n});\n\nexport const transformReportDetails = (\n  detail: RawReportDetails\n): ReportDetails => ({\n  ...transformCreated(detail),\n  destroyAt: parseISO(detail.destroyAt),\n  period: detail.period ? transformPeriod(detail.period) : undefined,\n});\n\nexport const transformReportResult = (\n  report: RawReportResult\n): ReportResult => ({\n  ...report,\n  detail: transformReportDetails(report.detail),\n});\n\n/**\n * Get all available reports\n *\n * @returns Object with keys being task IDs, values being report IDs\n */\nexport async function getAllReports(): Promise<Record<string, ReportMap>> {\n  const { content } =\n    await client.fetch<ApiResponse<Record<string, ReportMap>>>('/reports');\n\n  return content;\n}\nassignPermission(getAllReports, 'GET /reports');\n\n/**\n * Get all available reports of a task\n *\n * @param taskOrId Task or Task's id\n *\n * @returns Object with keys being report IDs, values being files\n */\nexport async function getReportsOfTask(\n  taskOrId: Omit<Task, 'template'> | string\n): Promise<ReportMap> {\n  const id = typeof taskOrId === 'string' ? taskOrId : taskOrId.id;\n  if (!id) {\n    throw new Error('Task id is required');\n  }\n\n  const { content } = await client.fetch<ApiResponse<ReportMap>>(\n    `/reports/${id}`\n  );\n\n  return content;\n}\nassignPermission(getReportsOfTask, 'GET /reports/:taskId', true);\n\n/**\n * Get a report file as a blob\n *\n * @param taskOrId Task or Task's id\n * @param path Path to the file\n *\n * @returns The blob\n */\nexport async function getFileAsBlob(\n  taskOrId: Omit<Task, 'template'> | string,\n  path: string\n): Promise<Blob> {\n  const id = typeof taskOrId === 'string' ? taskOrId : taskOrId.id;\n  if (!id) {\n    throw new Error('Task id is required');\n  }\n\n  return client.fetch(`/reports/${id}/${path}`, {\n    responseType: 'blob',\n  });\n}\nassignPermission(\n  getFileAsBlob,\n  'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext',\n  true\n);\n\n/**\n * Get a report file as an array buffer\n *\n * @param taskOrId Task or Task's id\n * @param path Path to the file\n *\n * @returns The array buffer\n */\nexport async function getFileAsArrayBuffer(\n  taskOrId: Omit<Task, 'template'> | string,\n  path: string\n): Promise<ArrayBuffer> {\n  const id = typeof taskOrId === 'string' ? taskOrId : taskOrId.id;\n  if (!id) {\n    throw new Error('Task id is required');\n  }\n\n  return client.fetch(`/reports/${id}/${path}`, {\n    responseType: 'arrayBuffer',\n  });\n}\nassignPermission(\n  getFileAsArrayBuffer,\n  'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext',\n  true\n);\n\n/**\n * Get a report file as a stream\n *\n * @param taskOrId Task or Task's id\n * @param path Path to the file\n *\n * @returns The stream\n */\nexport async function getFileAsStream(\n  taskOrId: Omit<Task, 'template'> | string,\n  path: string\n): Promise<ReadableStream<Uint8Array<ArrayBufferLike>>> {\n  const id = typeof taskOrId === 'string' ? taskOrId : taskOrId.id;\n  if (!id) {\n    throw new Error('Task id is required');\n  }\n\n  return client.fetch(`/reports/${id}/${path}`, {\n    responseType: 'stream',\n  });\n}\nassignPermission(\n  getFileAsStream,\n  'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext',\n  true\n);\n\n/**\n * Get a report file as a text\n *\n * @param taskOrId Task or Task's id\n * @param path Path to the file\n *\n * @returns The text\n */\nexport async function getFileAsText(\n  taskOrId: Omit<Task, 'template'> | string,\n  path: string\n): Promise<string> {\n  const id = typeof taskOrId === 'string' ? taskOrId : taskOrId.id;\n  if (!id) {\n    throw new Error('Task id is required');\n  }\n\n  return client.fetch(`/reports/${id}/${path}`, {\n    responseType: 'text',\n  });\n}\nassignPermission(\n  getFileAsText,\n  'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext',\n  true\n);\n\n/**\n * Get a report file as a JSON object\n * The file should end with `.det.json`\n *\n * @param taskOrId Task or Task's id\n * @param path Path to the file\n *\n * @returns The JSON object\n */\nexport async function getFileAsJson(\n  taskOrId: Omit<Task, 'template'> | string,\n  path: `${string}.det.json`\n): Promise<ReportResult> {\n  const id = typeof taskOrId === 'string' ? taskOrId : taskOrId.id;\n  if (!id) {\n    throw new Error('Task id is required');\n  }\n\n  const content = await client.fetch<RawReportResult>(`/reports/${id}/${path}`);\n  return transformReportResult(content);\n}\nassignPermission(\n  getFileAsJson,\n  'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext',\n  true\n);\n\n/**\n * Start a report generation\n *\n * @param taskOrId Task or Task's id\n * @param targets Override targets, also enable first level of debugging\n * @param period Override period, must match task's recurrence\n *\n * @returns Data to get job, and so the progress of the generation\n */\nexport async function generateReportOfTask(\n  taskOrId: Omit<Task, 'template'> | string,\n  period?: { start: Date; end: Date },\n  targets?: string[]\n): Promise<{ id: string }> {\n  const id = typeof taskOrId === 'string' ? taskOrId : taskOrId.id;\n  if (!id) {\n    throw new Error('Task id is required');\n  }\n\n  let periodDate;\n  if (period) {\n    periodDate = {\n      start: formatISO(period.start, { representation: 'date' }),\n      end: formatISO(period.end, { representation: 'date' }),\n    };\n  }\n\n  const { content } = await client.fetch<ApiResponse<{ id: string }>>(\n    `/reports/${id}`,\n    {\n      method: 'POST',\n      body: {\n        period: periodDate,\n        targets,\n      },\n    }\n  );\n\n  return content;\n}\nassignPermission(generateReportOfTask, 'POST /reports/:taskId', true);\n"],"mappings":"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"}