{"version":3,"file":"azure-data-tables-MtZoiS66.mjs","names":["projectId: string","tableSuffix: TableSuffix","context: InvocationContext","tableClient: TableClient","queryOptions?: ListAzureTableEntitiesOptions<T>","entities: TableEntityResultPage<T>"],"sources":["../src/utils/azure-data-tables.ts"],"sourcesContent":["import {\n  TableClient,\n  TableEntityResult,\n  TableEntityResultPage,\n} from \"@azure/data-tables\";\nimport type { InvocationContext } from \"@azure/functions\";\nimport { DEFAULT_SERVICE_NAME } from \"./constants\";\n\ntype TableSuffix = \"Builds\" | \"Labels\";\n\nexport function generateProjectAzureTableName(\n  projectId: string,\n  tableSuffix: TableSuffix\n): string {\n  return `${DEFAULT_SERVICE_NAME}${projectId\n    .replace(/\\W+/g, \"\")\n    .toUpperCase()}${tableSuffix}`;\n}\n\nexport type ListAzureTableEntitiesOptions<T extends Record<string, unknown>> = {\n  limit?: number;\n  filter?: string | ((item: T) => boolean);\n  select?: string[];\n  sort?: \"latest\" | ((a: T, b: T) => number);\n};\n\nexport async function listAzureTableEntities<T extends Record<string, unknown>>(\n  context: InvocationContext,\n  tableClient: TableClient,\n  queryOptions?: ListAzureTableEntitiesOptions<T>\n): Promise<Array<TableEntityResult<T>>> {\n  const { limit, filter, select, sort = \"latest\" } = queryOptions || {};\n  try {\n    await tableClient.createTable();\n    const iterator = tableClient.listEntities<T>({\n      queryOptions: {\n        filter: typeof filter === \"string\" ? filter : undefined,\n        select: select as string[],\n      },\n    });\n\n    let entities: TableEntityResultPage<T> = [];\n    if (limit) {\n      for await (const page of iterator.byPage({ maxPageSize: limit })) {\n        entities = page; // Take the first page as the entities result\n        break;\n      }\n    } else {\n      for await (const page of iterator.byPage()) {\n        entities.push(...page);\n      }\n    }\n\n    if (typeof filter === \"function\") {\n      entities = entities.filter(filter);\n    }\n\n    if (sort) {\n      if (typeof sort === \"function\") {\n        entities.sort(sort);\n      } else {\n        switch (sort) {\n          case \"latest\":\n            entities.sort((a, b) => {\n              if (!a.timestamp || !b.timestamp) return 0;\n              const aDate = new Date(a.timestamp);\n              const bDate = new Date(b.timestamp);\n              return bDate.getTime() - aDate.getTime();\n            });\n            break;\n        }\n      }\n    }\n\n    return entities;\n  } catch (error) {\n    context.error(\n      `Error listing Azure Table '${tableClient.tableName}' entities:`,\n      error\n    );\n    return [];\n  }\n}\n"],"mappings":";;;AAUA,SAAgB,8BACdA,WACAC,aACQ;AACR,QAAO,GAAG,uBAAuB,UAC9B,QAAQ,QAAQ,GAAG,CACnB,aAAa,GAAG,aAAa;AACjC;AASD,eAAsB,uBACpBC,SACAC,aACAC,cACsC;CACtC,MAAM,EAAE,OAAO,QAAQ,QAAQ,OAAO,UAAU,GAAG,gBAAgB,CAAE;AACrE,KAAI;EACF,MAAM,YAAY,aAAa;EAC/B,MAAM,WAAW,YAAY,aAAgB,EAC3C,cAAc;GACZ,QAAQ,OAAO,WAAW,WAAW,SAAS;GACtC;EACT,EACF,EAAC;EAEF,IAAIC,WAAqC,CAAE;AAC3C,MAAI,MACF,YAAW,MAAM,QAAQ,SAAS,OAAO,EAAE,aAAa,MAAO,EAAC,EAAE;GAChE,WAAW;AACX;EACD;MAED,YAAW,MAAM,QAAQ,SAAS,QAAQ,EACxC,SAAS,KAAK,GAAG,KAAK;AAI1B,MAAI,OAAO,WAAW,YACpB,WAAW,SAAS,OAAO,OAAO;AAGpC,MAAI,KACF,KAAI,OAAO,SAAS,YAClB,SAAS,KAAK,KAAK;MAEnB,SAAQ,MAAR;GACE,KAAK;IACH,SAAS,KAAK,CAAC,GAAG,MAAM;AACtB,SAAI,CAAC,EAAE,aAAa,CAAC,EAAE,UAAW,QAAO;KACzC,MAAM,QAAQ,IAAI,KAAK,EAAE;KACzB,MAAM,QAAQ,IAAI,KAAK,EAAE;AACzB,YAAO,MAAM,SAAS,GAAG,MAAM,SAAS;IACzC,EAAC;AACF;EACH;AAIL,SAAO;CACR,SAAQ,OAAO;EACd,QAAQ,MACN,CAAC,2BAA2B,EAAE,YAAY,UAAU,WAAW,CAAC,EAChE,MACD;AACD,SAAO,CAAE;CACV;AACF"}