Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
async init() {
// We need this line to be a separate function because the
// constructor can't be async. We're okay even if pub is
// called before this happens.
const { options, query } = this;
let data = await options.resolve(query);
merge(data, this.earlyChange);
// TODO: Properly resolve, getKnown etc. after early changes are merged.
delete this.earlyChange;
this.data = data = getKnown(data, query) || {};
this.push(options.values ? graft(data, query) || {} : data);
}
async init() {
// We need this line to be a separate function because the
// constructor can't be async. We're okay even if pub is
// called before this happens.
const { options, query } = this;
let data = await options.resolve(query);
merge(data, this.earlyChange);
// TODO: Properly resolve, getKnown etc. after early changes are merged.
delete this.earlyChange;
this.data = data = getKnown(data, query) || {};
this.push(options.values ? graft(data, query) || {} : data);
}
export default async function subscribe(query, options) {
let earlyChange = {};
let push;
const [token, signal] = getToken();
let data = await options.resolve(query);
merge(data, earlyChange);
// TODO: Properly resolve, getKnown etc. after early changes are merged.
earlyChange = null;
data = getKnown(data, query) || {};
push(data);
// Pub is called by providers to publish a change.
const pub = async change => {
if (earlyChange) {
merge(earlyChange, change);
return;
}
// Returns early if the change does not have any overlap with the query.
// DO NOT getKnown the change to only those changes that overlap; when the
// overlapping portion includes a deletion in a range, the change set
// may contain additional items to make up.
if (!getKnown(change, linkKnown(data, query))) return;
merge(data, change);
// Returns early if the change does not have any overlap with the query.
// DO NOT getKnown the change to only those changes that overlap; when the
// overlapping portion includes a deletion in a range, the change set
// may contain additional items to make up.
if (!getKnown(change, linkKnown(data, query))) return;
merge(data, change);
const nextQuery = getUnknown(data, query);
if (nextQuery) {
const linked = await options.resolve(nextQuery);
merge(data, linked);
if (!options.values) merge(change, linked);
}
this.data = getKnown(data, query);
this.push(options.values ? graft(this.data, query) || {} : change);
}
}
// Returns early if the change does not have any overlap with the query.
// DO NOT getKnown the change to only those changes that overlap; when the
// overlapping portion includes a deletion in a range, the change set
// may contain additional items to make up.
if (!getKnown(change, linkKnown(data, query))) return;
merge(data, change);
const nextQuery = getUnknown(data, query);
if (nextQuery) {
const linked = await options.resolve(nextQuery);
merge(data, linked);
if (!options.values) merge(change, linked);
}
this.data = getKnown(data, query);
this.push(options.values ? graft(this.data, query) || {} : change);
}
}
if (nextQuery) {
const linked = await store.get(nextQuery, options);
merge(data, linked);
if (!options.values) merge(change, linked);
}
data = getKnown(data, query);
push(options.values ? graft(data, query) || {} : change);
};
data = await next(query, options);
merge(data, earlyChange);
// TODO: Properly resolve, getKnown etc. after early changes are merged.
earlyChange = null;
data = getKnown(data, query) || {};
push(data);
return stream;
});
console.error('Error getting fillData for', gaps);
console.error(e);
}
if (fillData) {
merge(this.data, fillData);
merge(value, fillData);
}
}
for (const id in this.listeners) {
const { lastQuery = {}, originalQuery, push } = this.listeners[id];
const nextQuery = linkKnown(this.data, originalQuery);
const query = addQueries(lastQuery, nextQuery);
this.listeners[id].lastQuery = nextQuery;
const payload = getKnown(value, query);
if (payload) push(payload);
}
}
}