From 0d6596f4e7db0d3d5fcd672d8969db6b9a28cdf1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 17 Mar 2026 11:41:27 +0100 Subject: [PATCH] frontend-app-api: apply review follow-up cleanup Tighten a few small follow-up details from review by improving stack traces in permission batching, simplifying synthetic child refs, and making predicate traversal narrowing more direct. Signed-off-by: Patrik Oldsberg Made-with: Cursor --- .../frontend-app-api/src/wiring/predicates.ts | 20 ++++++++----------- .../src/wiring/treeLifecycle.tsx | 2 +- .../src/apis/IdentityPermissionApi.ts | 2 +- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/packages/frontend-app-api/src/wiring/predicates.ts b/packages/frontend-app-api/src/wiring/predicates.ts index 819036fc17..4ae9c8f135 100644 --- a/packages/frontend-app-api/src/wiring/predicates.ts +++ b/packages/frontend-app-api/src/wiring/predicates.ts @@ -160,21 +160,17 @@ function extractPredicateKeyNames( if (typeof predicate !== 'object' || predicate === null) { return []; } - const obj = predicate as Record; - if (Array.isArray(obj.$all)) { - return (obj.$all as FilterPredicate[]).flatMap(p => - extractPredicateKeyNames(p, key), - ); + const typedPredicate = predicate as FilterPredicate & Record; + if ('$all' in typedPredicate && Array.isArray(typedPredicate.$all)) { + return typedPredicate.$all.flatMap(p => extractPredicateKeyNames(p, key)); } - if (Array.isArray(obj.$any)) { - return (obj.$any as FilterPredicate[]).flatMap(p => - extractPredicateKeyNames(p, key), - ); + if ('$any' in typedPredicate && Array.isArray(typedPredicate.$any)) { + return typedPredicate.$any.flatMap(p => extractPredicateKeyNames(p, key)); } - if (obj.$not !== undefined) { - return extractPredicateKeyNames(obj.$not as FilterPredicate, key); + if ('$not' in typedPredicate && typedPredicate.$not !== undefined) { + return extractPredicateKeyNames(typedPredicate.$not, key); } - const value = obj[key]; + const value = typedPredicate[key]; if (typeof value === 'object' && value !== null && !Array.isArray(value)) { const contains = (value as Record).$contains; if (typeof contains === 'string') { diff --git a/packages/frontend-app-api/src/wiring/treeLifecycle.tsx b/packages/frontend-app-api/src/wiring/treeLifecycle.tsx index e78d258949..671464359a 100644 --- a/packages/frontend-app-api/src/wiring/treeLifecycle.tsx +++ b/packages/frontend-app-api/src/wiring/treeLifecycle.tsx @@ -227,7 +227,7 @@ export function attachThrowingFinalizationChild(tree: AppTree, error: Error) { // bootstrap failures through the normal extension boundary stack. (bootstrapChildNode as AppNode & { instance?: AppNodeInstance }).instance = { getDataRefs() { - return [coreExtensionData.reactElement].values(); + return [coreExtensionData.reactElement]; }, getData(dataRef: ExtensionDataRef) { if (dataRef.id === coreExtensionData.reactElement.id) { diff --git a/plugins/permission-react/src/apis/IdentityPermissionApi.ts b/plugins/permission-react/src/apis/IdentityPermissionApi.ts index cee1355fd4..f7c3c95107 100644 --- a/plugins/permission-react/src/apis/IdentityPermissionApi.ts +++ b/plugins/permission-react/src/apis/IdentityPermissionApi.ts @@ -67,6 +67,6 @@ export class IdentityPermissionApi implements PermissionApi { async authorize( request: AuthorizePermissionRequest, ): Promise { - return this.loader.load(request); + return await this.loader.load(request); } }