Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 2x 2x 2x 2x 1292x 2x 2881x 12x 12x 1x 12x 12x 2881x 2881x 2x 2965x 2965x 2965x 2965x 2965x 2965x 2x 14692x 14677x 14677x 15x 15x 1x 15x 15x 14692x 2x | import { transformSendDeserializeType, transformSendRecursive } from './utils/changeType.js';
import { v4 as uuid } from 'uuid';
import { NetworkEventListener } from '../../utils/NetworkEventListener.js';
export class TransformAbortSignal {
constructor(private _events: NetworkEventListener, private _maxDepth: number = 100) {
}
deserialize(data: any) {
return transformSendDeserializeType(data, 'abortSignal', found => {
const abortController = new AbortController();
this._events.once(`___abortSignal.aborted.${found.signalId}`, (source, { reason }) => {
if (source === 'local') return;
abortController.abort(reason);
});
return abortController.signal;
}, this._maxDepth);
}
serialize(obj: any) {
return transformSendRecursive(obj, {
maxDepth: this._maxDepth,
processingDataType: (data) => typeof data === 'object' && data !== null,
transformData: (data) => this._serializeAbortSignal(data)
});
}
private _serializeAbortSignal(signal: any) {
if (!(signal instanceof AbortSignal)) {
return null;
}
const signalId = uuid();
signal.addEventListener('abort', () => {
this._events.emit(`___abortSignal.aborted.${signalId}`, { reason: signal.reason });
});
return { ___type: 'abortSignal', signalId };
}
}
|