mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
84 lines
2.5 KiB
TypeScript
84 lines
2.5 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
*/
|
|
|
|
import {
|
|
__symbol__,
|
|
EventTask as _EventTask,
|
|
HasTaskState as _HasTaskState,
|
|
initZone,
|
|
MacroTask as _MacroTask,
|
|
MicroTask as _MicroTask,
|
|
PatchFn,
|
|
Task as _Task,
|
|
TaskData as _TaskData,
|
|
TaskState as _TaskState,
|
|
TaskType as _TaskType,
|
|
UncaughtPromiseError as _UncaughtPromiseError,
|
|
Zone as _Zone,
|
|
ZoneDelegate as _ZoneDelegate,
|
|
ZoneFrame,
|
|
ZonePrivate,
|
|
ZoneSpec as _ZoneSpec,
|
|
ZoneType as _ZoneType,
|
|
} from './zone-impl';
|
|
|
|
declare global {
|
|
const Zone: ZoneType;
|
|
type Zone = _Zone;
|
|
type ZoneType = _ZoneType;
|
|
type _PatchFn = PatchFn;
|
|
type _ZonePrivate = ZonePrivate;
|
|
type _ZoneFrame = ZoneFrame;
|
|
type UncaughtPromiseError = _UncaughtPromiseError;
|
|
type ZoneSpec = _ZoneSpec;
|
|
type ZoneDelegate = _ZoneDelegate;
|
|
type HasTaskState = _HasTaskState;
|
|
type TaskType = _TaskType;
|
|
type TaskState = _TaskState;
|
|
type TaskData = _TaskData;
|
|
type Task = _Task;
|
|
type MicroTask = _MicroTask;
|
|
type MacroTask = _MacroTask;
|
|
type EventTask = _EventTask;
|
|
|
|
/**
|
|
* Extend the Error with additional fields for rewritten stack frames
|
|
*/
|
|
interface Error {
|
|
/**
|
|
* Stack trace where extra frames have been removed and zone names added.
|
|
*/
|
|
zoneAwareStack?: string;
|
|
|
|
/**
|
|
* Original stack trace with no modifications
|
|
*/
|
|
originalStack?: string;
|
|
}
|
|
}
|
|
|
|
export function loadZone(): ZoneType {
|
|
// if global['Zone'] already exists (maybe zone.js was already loaded or
|
|
// some other lib also registered a global object named Zone), we may need
|
|
// to throw an error, but sometimes user may not want this error.
|
|
// For example,
|
|
// we have two web pages, page1 includes zone.js, page2 doesn't.
|
|
// and the 1st time user load page1 and page2, everything work fine,
|
|
// but when user load page2 again, error occurs because global['Zone'] already exists.
|
|
// so we add a flag to let user choose whether to throw this error or not.
|
|
// By default, if existing Zone is from zone.js, we will not throw the error.
|
|
const global = globalThis as any;
|
|
const checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true;
|
|
if (global['Zone'] && (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function')) {
|
|
throw new Error('Zone already loaded.');
|
|
}
|
|
|
|
// Initialize global `Zone` constant.
|
|
global['Zone'] ??= initZone();
|
|
return global['Zone'];
|
|
}
|