-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Labels
coreFeature requests related to core functionalityFeature requests related to core functionality
Description
π from the other side! We'd like to notify devs (at dev time) outside of the console where we'd normally see invariant warnings, etc. from Apollo Client. Would y'all be open to an option that allows us to provide a callback for when these issues occur?
There's a(n awful) path forward today using private API which I'll share for posterity but of course I'd rather not use it if it can be avoided. Thanks in advance!
import { ApolloErrorMessageHandler } from "@apollo/client/utilities/globals/invariantWrappers";
type ApolloErrorMessageHandlerType = NonNullable<
(typeof window)[typeof ApolloErrorMessageHandler]
>;
// Either resolve to the handler we intend to wrap or reject after 5s
async function getApolloErrorHandlerOnWindowOrThrow(): Promise<ApolloErrorMessageHandlerType> {
return Promise.race([
new Promise<never>((_resolve, reject) => {
setTimeout(() => {
reject();
}, 5000);
}),
new Promise<ApolloErrorMessageHandlerType>(resolve => {
const interval = setInterval(() => {
if (!!window[ApolloErrorMessageHandler]) {
clearInterval(interval);
resolve(window[ApolloErrorMessageHandler]);
}
}, 100);
}),
]);
}
export async function interceptApolloErrorsInDevOnly(): Promise<void> {
if (__DEV__) {
try {
const apolloErrorHandler = await getApolloErrorHandlerOnWindowOrThrow();
const wrapped = (message: number, args: string[]) => {
// notify!
return apolloErrorHandler(message, args);
};
window[ApolloErrorMessageHandler] = wrapped as typeof apolloErrorHandler;
} catch (error) {
console.error(error);
}
}
}
jerelmiller
Metadata
Metadata
Assignees
Labels
coreFeature requests related to core functionalityFeature requests related to core functionality