Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
while ((queued = queuedOperations.shift()) !== undefined)
nextOperation(queued);
isDispatching = false;
}
};
const exchanges =
opts.exchanges !== undefined ? opts.exchanges : defaultExchanges;
// All exchange are composed into a single one and are called using the constructed client
// and the fallback exchange stream
this.exchange = composeExchanges(exchanges);
// All operations run through the exchanges in a pipeline-like fashion
// and this observable then combines all their results
this.results$ = share(
this.exchange({
client: this,
forward: fallbackExchangeIO,
})(this.operations$)
);
}
const ssr: SSRExchange = ({ client, forward }) => ops$ => {
// params.isClient tells us whether we're on the client-side
// By default we assume that we're on the client if suspense-mode is disabled
const isClient =
params && typeof params.isClient === 'boolean'
? !!params.isClient
: !client.suspense;
const sharedOps$ = share(ops$);
let forwardedOps$ = pipe(
sharedOps$,
filter(op => !isCached(op)),
forward
);
// NOTE: Since below we might delete the cached entry after accessing
// it once, cachedOps$ needs to be merged after forwardedOps$
let cachedOps$ = pipe(
sharedOps$,
filter(op => isCached(op)),
map(op => {
const serialized = data[op.key];
return deserializeResult(op, serialized);
})
return ops$ => {
const sharedOps$ = share(ops$);
const fetchResults$ = pipe(
sharedOps$,
filter(isOperationFetchable),
mergeMap(operation => {
const { key } = operation;
const teardown$ = pipe(
sharedOps$,
filter(op => op.operationName === 'teardown' && op.key === key)
);
return pipe(
createFetchSource(operation),
takeUntil(teardown$)
);
})
);
return ops$ => {
const sharedOps$ = share(ops$);
const cachedOps$ = pipe(
sharedOps$,
filter(op => !shouldSkip(op) && isOperationCached(op)),
map(operation => {
const cachedResult = resultCache.get(operation.key);
const result: OperationResult = {
...cachedResult,
operation: addMetadata(operation, {
cacheOutcome: cachedResult ? 'hit' : 'miss',
}),
};
if (operation.context.requestPolicy === 'cache-and-network') {
result.fetching = true;
reexecuteOperation(client, operation);
return ops$ => {
const sharedOps$ = share(ops$);
const subscriptionResults$ = pipe(
sharedOps$,
filter(isSubscriptionOperation),
mergeMap(operation => {
const { key } = operation;
const teardown$ = pipe(
sharedOps$,
filter(op => op.operationName === 'teardown' && op.key === key)
);
return pipe(
createSubscriptionSource(operation),
takeUntil(teardown$)
);
})
);
return ops$ => {
const sharedOps$ = share(ops$);
const targetOperationTypes = ['query', 'mutation', 'subscription'];
const executedOps$ = pipe(
sharedOps$,
filter(f => targetOperationTypes.includes(f.operationName)),
map(async o => {
try {
const r = await execute(
schema,
o.query,
rootValue,
contextValue,
o.variables,
o.operationName,
fieldResolver,
typeResolver