@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 1.97 kB
Source Map (JSON)
{"version":3,"file":"group-queue-payloads-by-tenant.mjs","names":[],"sources":["../../../../src/services/crons/helpers/group-queue-payloads-by-tenant.ts"],"sourcesContent":["type TenantScopedPayload = {\n\tpayload: Record<string, unknown>;\n\t/** Tenant scope for this payload. Empty or null means the queued job is global. */\n\ttenantKeys?: Array<string | null | undefined>;\n};\n\nconst normalizeTenantKeys = (\n\ttenantKeys: Array<string | null | undefined> | undefined,\n) =>\n\tArray.from(\n\t\tnew Set(\n\t\t\t(tenantKeys ?? []).filter(\n\t\t\t\t(tenantKey): tenantKey is string =>\n\t\t\t\t\ttenantKey !== null && tenantKey !== undefined,\n\t\t\t),\n\t\t),\n\t).sort();\n\n/**\n * Splits mixed tenant payloads into batches with one shared tenant scope.\n * Queue batch options apply to every payload, so mixed scopes need separate batches.\n */\nconst groupQueuePayloadsByTenant = (items: TenantScopedPayload[]) => {\n\tconst groups = new Map<\n\t\tstring,\n\t\t{\n\t\t\ttenantKeys: string[];\n\t\t\tpayloads: Record<string, unknown>[];\n\t\t}\n\t>();\n\n\tfor (const item of items) {\n\t\tconst tenantKeys = normalizeTenantKeys(item.tenantKeys);\n\t\tconst groupKey = JSON.stringify(tenantKeys);\n\t\tconst existing = groups.get(groupKey);\n\n\t\tif (existing) {\n\t\t\texisting.payloads.push(item.payload);\n\t\t\tcontinue;\n\t\t}\n\n\t\tgroups.set(groupKey, {\n\t\t\ttenantKeys,\n\t\t\tpayloads: [item.payload],\n\t\t});\n\t}\n\n\treturn Array.from(groups.values());\n};\n\nexport default groupQueuePayloadsByTenant;\n"],"mappings":"AAMA,MAAM,EACL,GAEA,MAAM,KACL,IAAI,KACF,GAAc,CAAC,EAAA,CAAG,OACjB,GACA,GAAc,IAChB,CACD,CACD,CAAC,CAAC,KAAK,EAMF,EAA8B,GAAiC,CACpE,IAAM,EAAS,IAAI,IAQnB,IAAK,IAAM,KAAQ,EAAO,CACzB,IAAM,EAAa,EAAoB,EAAK,UAAU,EAChD,EAAW,KAAK,UAAU,CAAU,EACpC,EAAW,EAAO,IAAI,CAAQ,EAEpC,GAAI,EAAU,CACb,EAAS,SAAS,KAAK,EAAK,OAAO,EACnC,QACD,CAEA,EAAO,IAAI,EAAU,CACpB,aACA,SAAU,CAAC,EAAK,OAAO,CACxB,CAAC,CACF,CAEA,OAAO,MAAM,KAAK,EAAO,OAAO,CAAC,CAClC"}