diff --git a/packages/core/src/integration.ts b/packages/core/src/integration.ts index cdf38626559..1a0df1e0f47 100644 --- a/packages/core/src/integration.ts +++ b/packages/core/src/integration.ts @@ -385,6 +385,16 @@ const layer = Layer.effect( ), }) + const sorted = new WeakMap, Entry[]>() + const sortedEntries = () => { + const integrations = state.get().integrations + const cached = sorted.get(integrations) + if (cached) return cached + const entries = Array.from(integrations.values()).toSorted((a, b) => a.ref.name.localeCompare(b.ref.name)) + sorted.set(integrations, entries) + return entries + } + const createCredential = Effect.fnUntraced(function* (input: Parameters[0]) { if (input.label !== undefined) return yield* credentials.create(input) const name = state.get().integrations.get(input.integrationID)?.ref.name ?? input.integrationID @@ -715,9 +725,7 @@ const layer = Layer.effect( }), list: Effect.fn("Integration.list")(function* () { const saved = Map.groupBy(yield* credentials.all(), (credential) => credential.integrationID) - return Array.from(state.get().integrations.values(), (entry) => - project(entry, resolveConnections(entry, saved.get(entry.ref.id) ?? [])), - ).toSorted((a, b) => a.name.localeCompare(b.name)) + return sortedEntries().map((entry) => project(entry, resolveConnections(entry, saved.get(entry.ref.id) ?? []))) }), connection: { active: Effect.fn("Integration.connection.active")(function* (id) {