( obj: any, funcName: string, metaCreator: (self: any, args: any[]) => MicroTaskMeta, )
| 508 | } |
| 509 | |
| 510 | export function patchMicroTask( |
| 511 | obj: any, |
| 512 | funcName: string, |
| 513 | metaCreator: (self: any, args: any[]) => MicroTaskMeta, |
| 514 | ) { |
| 515 | let setNative: Function | null = null; |
| 516 | |
| 517 | function scheduleTask(task: Task) { |
| 518 | const data = <MacroTaskMeta>task.data; |
| 519 | data.args[data.cbIdx] = function () { |
| 520 | task.invoke.apply(this, arguments); |
| 521 | }; |
| 522 | setNative!.apply(data.target, data.args); |
| 523 | return task; |
| 524 | } |
| 525 | |
| 526 | setNative = patchMethod( |
| 527 | obj, |
| 528 | funcName, |
| 529 | (delegate: Function) => |
| 530 | function (self: any, args: any[]) { |
| 531 | const meta = metaCreator(self, args); |
| 532 | if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') { |
| 533 | return Zone.current.scheduleMicroTask(meta.name, args[meta.cbIdx], meta, scheduleTask); |
| 534 | } else { |
| 535 | // cause an error by calling it directly. |
| 536 | return delegate.apply(self, args); |
| 537 | } |
| 538 | }, |
| 539 | ); |
| 540 | } |
| 541 | |
| 542 | export function attachOriginToPatched(patched: Function, original: any) { |
| 543 | (patched as any)[zoneSymbol('OriginalDelegate')] = original; |
no test coverage detected
searching dependent graphs…