{"version":3,"file":"methods-COQbKdUK.mjs","names":[],"sources":["../src/modules/reports/methods.ts"],"sourcesContent":["import { formatISO, parseISO } from 'date-fns';\n\nimport { client } from '~/lib/fetch';\nimport { transformCreated } from '~/lib/transform';\nimport type { ApiResponse } from '~/lib/api';\n\nimport { assignPermission } from '~/helpers/permissions/decorator';\n\nimport type { Task } from '~/modules/tasks/types';\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 = (detail: RawReportDetails): ReportDetails => ({\n  ...transformCreated(detail),\n  destroyAt: parseISO(detail.destroyAt),\n  period: detail.period ? transformPeriod(detail.period) : undefined,\n});\n\nexport const transformReportResult = (report: RawReportResult): 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 {\n    content,\n  } = await client.fetch<ApiResponse<Record<string, ReportMap>>>(\n    '/reports',\n  );\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(taskOrId: Omit<Task, 'template'> | string): 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 {\n    content,\n  } = 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(getFileAsBlob, 'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext', true);\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(getFileAsArrayBuffer, 'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext', true);\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(getFileAsStream, 'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext', true);\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(getFileAsText, 'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext', true);\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(getFileAsJson, 'GET /reports/:taskId/:yearMonth/:reportName.:type.:ext', true);\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 {\n    content,\n  } = 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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"}