UNPKG

@tanstack/query-core

Version:

The framework agnostic core that powers TanStack Query

205 lines (204 loc) 12.2 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const require_classPrivateFieldSet2 = require("./classPrivateFieldSet2-Bo0ZyOIv.cjs"); const require_utils = require("./utils.cjs"); const require_subscribable = require("./subscribable.cjs"); const require_notifyManager = require("./notifyManager.cjs"); const require_classPrivateMethodInitSpec = require("./classPrivateMethodInitSpec-DVhcLejn.cjs"); const require_queryObserver = require("./queryObserver.cjs"); //#region src/queriesObserver.ts function difference(array1, array2) { const excludeSet = new Set(array2); return array1.filter((x) => !excludeSet.has(x)); } var _client = /* @__PURE__ */ new WeakMap(); var _result = /* @__PURE__ */ new WeakMap(); var _queries = /* @__PURE__ */ new WeakMap(); var _options = /* @__PURE__ */ new WeakMap(); var _observers = /* @__PURE__ */ new WeakMap(); var _combinedResult = /* @__PURE__ */ new WeakMap(); var _lastCombine = /* @__PURE__ */ new WeakMap(); var _lastResult = /* @__PURE__ */ new WeakMap(); var _lastQueryHashes = /* @__PURE__ */ new WeakMap(); var _observerMatches = /* @__PURE__ */ new WeakMap(); var _QueriesObserver_brand = /* @__PURE__ */ new WeakSet(); var QueriesObserver = class extends require_subscribable.Subscribable { constructor(client, queries, options) { super(); require_classPrivateMethodInitSpec._classPrivateMethodInitSpec(this, _QueriesObserver_brand); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _client, void 0); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _result, void 0); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _queries, void 0); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _options, void 0); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _observers, void 0); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _combinedResult, void 0); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _lastCombine, void 0); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _lastResult, void 0); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _lastQueryHashes, void 0); require_classPrivateFieldSet2._classPrivateFieldInitSpec(this, _observerMatches, []); require_classPrivateFieldSet2._classPrivateFieldSet2(_client, this, client); require_classPrivateFieldSet2._classPrivateFieldSet2(_options, this, options); require_classPrivateFieldSet2._classPrivateFieldSet2(_queries, this, []); require_classPrivateFieldSet2._classPrivateFieldSet2(_observers, this, []); require_classPrivateFieldSet2._classPrivateFieldSet2(_result, this, []); this.setQueries(queries); } onSubscribe() { if (this.listeners.size === 1) require_classPrivateFieldSet2._classPrivateFieldGet2(_observers, this).forEach((observer) => { observer.subscribe((result) => { require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _onUpdate).call(this, observer, result); }); }); } onUnsubscribe() { if (!this.listeners.size) this.destroy(); } destroy() { this.listeners = /* @__PURE__ */ new Set(); require_classPrivateFieldSet2._classPrivateFieldGet2(_observers, this).forEach((observer) => { observer.destroy(); }); } setQueries(queries, options) { require_classPrivateFieldSet2._classPrivateFieldSet2(_queries, this, queries); require_classPrivateFieldSet2._classPrivateFieldSet2(_options, this, options); if (process.env.NODE_ENV !== "production") { const queryHashes = queries.map((query) => require_classPrivateFieldSet2._classPrivateFieldGet2(_client, this).defaultQueryOptions(query).queryHash); if (new Set(queryHashes).size !== queryHashes.length) console.warn("[QueriesObserver]: Duplicate Queries found. This might result in unexpected behavior."); } require_notifyManager.notifyManager.batch(() => { const prevObservers = require_classPrivateFieldSet2._classPrivateFieldGet2(_observers, this); const newObserverMatches = require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _findMatchingObservers).call(this, require_classPrivateFieldSet2._classPrivateFieldGet2(_queries, this)); newObserverMatches.forEach((match) => match.observer.setOptions(match.defaultedQueryOptions)); const newObservers = newObserverMatches.map((match) => match.observer); const newResult = newObservers.map((observer) => observer.getCurrentResult()); const hasLengthChange = prevObservers.length !== newObservers.length; const hasIndexChange = newObservers.some((observer, index) => observer !== prevObservers[index]); const hasStructuralChange = hasLengthChange || hasIndexChange; const hasResultChange = hasStructuralChange ? true : newResult.some((result, index) => { const prev = require_classPrivateFieldSet2._classPrivateFieldGet2(_result, this)[index]; return !prev || !require_utils.shallowEqualObjects(result, prev); }); if (!hasStructuralChange && !hasResultChange) return; if (hasStructuralChange) { require_classPrivateFieldSet2._classPrivateFieldSet2(_observerMatches, this, newObserverMatches); require_classPrivateFieldSet2._classPrivateFieldSet2(_observers, this, newObservers); } require_classPrivateFieldSet2._classPrivateFieldSet2(_result, this, newResult); if (!this.hasListeners()) return; if (hasStructuralChange) { difference(prevObservers, newObservers).forEach((observer) => { observer.destroy(); }); difference(newObservers, prevObservers).forEach((observer) => { observer.subscribe((result) => { require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _onUpdate).call(this, observer, result); }); }); } require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _notify).call(this); }); } getCurrentResult() { return require_classPrivateFieldSet2._classPrivateFieldGet2(_result, this); } getQueries() { return require_classPrivateFieldSet2._classPrivateFieldGet2(_observers, this).map((observer) => observer.getCurrentQuery()); } getObservers() { return require_classPrivateFieldSet2._classPrivateFieldGet2(_observers, this); } getOptimisticResult(queries, combine) { const matches = require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _findMatchingObservers).call(this, queries); const result = matches.map((match) => match.observer.getOptimisticResult(match.defaultedQueryOptions)); const queryHashes = matches.map((match) => match.defaultedQueryOptions.queryHash); return [ result, (r) => { return require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _combineResult).call(this, r ?? result, combine, queryHashes); }, () => { return require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _trackResult).call(this, result, matches); } ]; } }; function _trackResult(result, matches) { const trackedProps = /* @__PURE__ */ new Set(); return matches.map((match, index) => { const observerResult = result[index]; return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult, (accessedProp) => { if (!trackedProps.has(accessedProp)) { trackedProps.add(accessedProp); matches.forEach((m) => { m.observer.trackProp(accessedProp); }); } }) : observerResult; }); } function _combineResult(input, combine, queryHashes) { if (combine) { const lastHashes = require_classPrivateFieldSet2._classPrivateFieldGet2(_lastQueryHashes, this); const queryHashesChanged = queryHashes !== void 0 && lastHashes !== void 0 && (lastHashes.length !== queryHashes.length || queryHashes.some((hash, i) => hash !== lastHashes[i])); if (require_classPrivateFieldSet2._classPrivateFieldGet2(_result, this) !== require_classPrivateFieldSet2._classPrivateFieldGet2(_lastResult, this) || queryHashesChanged || combine !== require_classPrivateFieldSet2._classPrivateFieldGet2(_lastCombine, this)) { require_classPrivateFieldSet2._classPrivateFieldSet2(_lastCombine, this, combine); require_classPrivateFieldSet2._classPrivateFieldSet2(_lastResult, this, require_classPrivateFieldSet2._classPrivateFieldGet2(_result, this)); if (queryHashes !== void 0) require_classPrivateFieldSet2._classPrivateFieldSet2(_lastQueryHashes, this, queryHashes); require_classPrivateFieldSet2._classPrivateFieldSet2(_combinedResult, this, require_utils.replaceEqualDeep(require_classPrivateFieldSet2._classPrivateFieldGet2(_combinedResult, this), combine(input))); } return require_classPrivateFieldSet2._classPrivateFieldGet2(_combinedResult, this); } return input; } function _shouldSkipCombine() { var _classPrivateFieldGet2$1; return !((_classPrivateFieldGet2$1 = require_classPrivateFieldSet2._classPrivateFieldGet2(_options, this)) === null || _classPrivateFieldGet2$1 === void 0 ? void 0 : _classPrivateFieldGet2$1.combine) || require_classPrivateFieldSet2._classPrivateFieldGet2(_observers, this).some((observer, index) => { var _classPrivateFieldGet3; return observer.options.suspense && ((_classPrivateFieldGet3 = require_classPrivateFieldSet2._classPrivateFieldGet2(_result, this)[index]) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.data) === void 0; }); } function _findMatchingObservers(queries) { const prevObserversMap = /* @__PURE__ */ new Map(); require_classPrivateFieldSet2._classPrivateFieldGet2(_observers, this).forEach((observer) => { const key = observer.options.queryHash; if (!key) return; const previousObservers = prevObserversMap.get(key); if (previousObservers) previousObservers.push(observer); else prevObserversMap.set(key, [observer]); }); const observers = []; queries.forEach((options) => { var _prevObserversMap$get; const defaultedOptions = require_classPrivateFieldSet2._classPrivateFieldGet2(_client, this).defaultQueryOptions(options); const observer = ((_prevObserversMap$get = prevObserversMap.get(defaultedOptions.queryHash)) === null || _prevObserversMap$get === void 0 ? void 0 : _prevObserversMap$get.shift()) ?? new require_queryObserver.QueryObserver(require_classPrivateFieldSet2._classPrivateFieldGet2(_client, this), defaultedOptions); observers.push({ defaultedQueryOptions: defaultedOptions, observer }); }); return observers; } function _onUpdate(observer, result) { const index = require_classPrivateFieldSet2._classPrivateFieldGet2(_observers, this).indexOf(observer); if (index !== -1) { require_classPrivateFieldSet2._classPrivateFieldSet2(_result, this, require_classPrivateFieldSet2._classPrivateFieldGet2(_result, this).slice()); require_classPrivateFieldSet2._classPrivateFieldGet2(_result, this)[index] = result; require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _notify).call(this); } } function _notify() { if (this.hasListeners()) { var _classPrivateFieldGet4; const shouldSkipCombine = require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _shouldSkipCombine).call(this); const previousResult = require_classPrivateFieldSet2._classPrivateFieldGet2(_combinedResult, this); const newResult = shouldSkipCombine ? previousResult : require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _combineResult).call(this, require_classPrivateFieldSet2._assertClassBrand(_QueriesObserver_brand, this, _trackResult).call(this, require_classPrivateFieldSet2._classPrivateFieldGet2(_result, this), require_classPrivateFieldSet2._classPrivateFieldGet2(_observerMatches, this)), (_classPrivateFieldGet4 = require_classPrivateFieldSet2._classPrivateFieldGet2(_options, this)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.combine); if (shouldSkipCombine || previousResult !== newResult) require_notifyManager.notifyManager.batch(() => { this.listeners.forEach((listener) => { listener(require_classPrivateFieldSet2._classPrivateFieldGet2(_result, this)); }); }); } } //#endregion exports.QueriesObserver = QueriesObserver; //# sourceMappingURL=queriesObserver.cjs.map