@graphql-mesh/plugin-live-query
Version:
44 lines (43 loc) • 2.09 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = useMeshLiveQuery;
const live_query_1 = require("@envelop/live-query");
const cross_helpers_1 = require("@graphql-mesh/cross-helpers");
const string_interpolation_1 = require("@graphql-mesh/string-interpolation");
const utils_1 = require("@graphql-mesh/utils");
const in_memory_live_query_store_1 = require("@n1ru4l/in-memory-live-query-store");
const useInvalidateByResult_js_1 = require("./useInvalidateByResult.js");
function useMeshLiveQuery(options) {
options.logger ||= new utils_1.DefaultLogger();
options.pubsub ||= new utils_1.PubSub();
options.logger.debug(`Creating Live Query Store`);
const liveQueryStore = new in_memory_live_query_store_1.InMemoryLiveQueryStore({
buildResourceIdentifier: options.resourceIdentifier != null
? function resourceIdentifierFactory({ typename, id }) {
return string_interpolation_1.stringInterpolator.parse(options.resourceIdentifier, {
typename,
id,
env: cross_helpers_1.process.env,
});
}
: in_memory_live_query_store_1.defaultResourceIdentifierNormalizer,
includeIdentifierExtension: options.includeIdentifierExtension != null
? options.includeIdentifierExtension
: cross_helpers_1.process.env.DEBUG === '1',
idFieldName: options.idFieldName,
indexBy: options.indexBy,
});
options.pubsub.subscribe('live-query:invalidate', (identifiers) => liveQueryStore.invalidate(identifiers));
return {
onPluginInit({ addPlugin }) {
addPlugin((0, live_query_1.useLiveQuery)({ liveQueryStore }));
if (options.invalidations?.length) {
addPlugin((0, useInvalidateByResult_js_1.useInvalidateByResult)({
pubsub: options.pubsub,
invalidations: options.invalidations,
logger: options.logger,
}));
}
},
};
}
;