UNPKG

@angular/core

Version:

Angular - the core framework

86 lines 11.4 kB
/** * @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.io/license */ import { assertDefined } from '../../util/assert'; import { global } from '../../util/global'; import { setupFrameworkInjectorProfiler } from '../debug/framework_injector_profiler'; import { setProfiler } from '../profiler'; import { isSignal } from '../reactivity/api'; import { applyChanges } from './change_detection_utils'; import { getComponent, getContext, getDirectiveMetadata, getDirectives, getHostElement, getInjector, getListeners, getOwningComponent, getRootComponents } from './discovery_utils'; import { getDependenciesFromInjectable, getInjectorMetadata, getInjectorProviders, getInjectorResolutionPath } from './injector_discovery_utils'; /** * This file introduces series of globally accessible debug tools * to allow for the Angular debugging story to function. * * To see this in action run the following command: * * bazel run //packages/core/test/bundling/todo:devserver * * Then load `localhost:5432` and start using the console tools. */ /** * This value reflects the property on the window where the dev * tools are patched (window.ng). * */ export const GLOBAL_PUBLISH_EXPANDO_KEY = 'ng'; const globalUtilsFunctions = { /** * Warning: functions that start with `ɵ` are considered *INTERNAL* and should not be relied upon * in application's code. The contract of those functions might be changed in any release and/or a * function can be removed completely. */ 'ɵgetDependenciesFromInjectable': getDependenciesFromInjectable, 'ɵgetInjectorProviders': getInjectorProviders, 'ɵgetInjectorResolutionPath': getInjectorResolutionPath, 'ɵgetInjectorMetadata': getInjectorMetadata, 'ɵsetProfiler': setProfiler, 'getDirectiveMetadata': getDirectiveMetadata, 'getComponent': getComponent, 'getContext': getContext, 'getListeners': getListeners, 'getOwningComponent': getOwningComponent, 'getHostElement': getHostElement, 'getInjector': getInjector, 'getRootComponents': getRootComponents, 'getDirectives': getDirectives, 'applyChanges': applyChanges, 'isSignal': isSignal, }; let _published = false; /** * Publishes a collection of default debug tools onto`window.ng`. * * These functions are available globally when Angular is in development * mode and are automatically stripped away from prod mode is on. */ export function publishDefaultGlobalUtils() { if (!_published) { _published = true; setupFrameworkInjectorProfiler(); for (const [methodName, method] of Object.entries(globalUtilsFunctions)) { publishGlobalUtil(methodName, method); } } } /** * Publishes the given function to `window.ng` so that it can be * used from the browser console when an application is not in production. */ export function publishGlobalUtil(name, fn) { if (typeof COMPILED === 'undefined' || !COMPILED) { // Note: we can't export `ng` when using closure enhanced optimization as: // - closure declares globals itself for minified names, which sometimes clobber our `ng` global // - we can't declare a closure extern as the namespace `ng` is already used within Google // for typings for AngularJS (via `goog.provide('ng....')`). const w = global; ngDevMode && assertDefined(fn, 'function not defined'); w[GLOBAL_PUBLISH_EXPANDO_KEY] ??= {}; w[GLOBAL_PUBLISH_EXPANDO_KEY][name] = fn; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsX3V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcmVuZGVyMy91dGlsL2dsb2JhbF91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsTCxPQUFPLEVBQUMsNkJBQTZCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUkvSTs7Ozs7Ozs7O0dBU0c7QUFFSDs7O0tBR0s7QUFDTCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFFL0MsTUFBTSxvQkFBb0IsR0FBRztJQUMzQjs7OztPQUlHO0lBQ0gsZ0NBQWdDLEVBQUUsNkJBQTZCO0lBQy9ELHVCQUF1QixFQUFFLG9CQUFvQjtJQUM3Qyw0QkFBNEIsRUFBRSx5QkFBeUI7SUFDdkQsc0JBQXNCLEVBQUUsbUJBQW1CO0lBQzNDLGNBQWMsRUFBRSxXQUFXO0lBRTNCLHNCQUFzQixFQUFFLG9CQUFvQjtJQUM1QyxjQUFjLEVBQUUsWUFBWTtJQUM1QixZQUFZLEVBQUUsVUFBVTtJQUN4QixjQUFjLEVBQUUsWUFBWTtJQUM1QixvQkFBb0IsRUFBRSxrQkFBa0I7SUFDeEMsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxhQUFhLEVBQUUsV0FBVztJQUMxQixtQkFBbUIsRUFBRSxpQkFBaUI7SUFDdEMsZUFBZSxFQUFFLGFBQWE7SUFDOUIsY0FBYyxFQUFFLFlBQVk7SUFDNUIsVUFBVSxFQUFFLFFBQVE7Q0FDckIsQ0FBQztBQUdGLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN2Qjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx5QkFBeUI7SUFDdkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFbEIsOEJBQThCLEVBQUUsQ0FBQztRQUNqQyxLQUFLLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDeEUsaUJBQWlCLENBQUMsVUFBa0MsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFTRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQzdCLElBQU8sRUFBRSxFQUFrQztJQUM3QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pELDBFQUEwRTtRQUMxRSxnR0FBZ0c7UUFDaEcsMEZBQTBGO1FBQzFGLDhEQUE4RDtRQUM5RCxNQUFNLENBQUMsR0FBRyxNQUE0QixDQUFDO1FBQ3ZDLFNBQVMsSUFBSSxhQUFhLENBQUMsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFFdkQsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBUyxDQUFDO1FBQzVDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHthc3NlcnREZWZpbmVkfSBmcm9tICcuLi8uLi91dGlsL2Fzc2VydCc7XG5pbXBvcnQge2dsb2JhbH0gZnJvbSAnLi4vLi4vdXRpbC9nbG9iYWwnO1xuaW1wb3J0IHtzZXR1cEZyYW1ld29ya0luamVjdG9yUHJvZmlsZXJ9IGZyb20gJy4uL2RlYnVnL2ZyYW1ld29ya19pbmplY3Rvcl9wcm9maWxlcic7XG5pbXBvcnQge3NldFByb2ZpbGVyfSBmcm9tICcuLi9wcm9maWxlcic7XG5pbXBvcnQge2lzU2lnbmFsfSBmcm9tICcuLi9yZWFjdGl2aXR5L2FwaSc7XG5cbmltcG9ydCB7YXBwbHlDaGFuZ2VzfSBmcm9tICcuL2NoYW5nZV9kZXRlY3Rpb25fdXRpbHMnO1xuaW1wb3J0IHtnZXRDb21wb25lbnQsIGdldENvbnRleHQsIGdldERpcmVjdGl2ZU1ldGFkYXRhLCBnZXREaXJlY3RpdmVzLCBnZXRIb3N0RWxlbWVudCwgZ2V0SW5qZWN0b3IsIGdldExpc3RlbmVycywgZ2V0T3duaW5nQ29tcG9uZW50LCBnZXRSb290Q29tcG9uZW50c30gZnJvbSAnLi9kaXNjb3ZlcnlfdXRpbHMnO1xuaW1wb3J0IHtnZXREZXBlbmRlbmNpZXNGcm9tSW5qZWN0YWJsZSwgZ2V0SW5qZWN0b3JNZXRhZGF0YSwgZ2V0SW5qZWN0b3JQcm92aWRlcnMsIGdldEluamVjdG9yUmVzb2x1dGlvblBhdGh9IGZyb20gJy4vaW5qZWN0b3JfZGlzY292ZXJ5X3V0aWxzJztcblxuXG5cbi8qKlxuICogVGhpcyBmaWxlIGludHJvZHVjZXMgc2VyaWVzIG9mIGdsb2JhbGx5IGFjY2Vzc2libGUgZGVidWcgdG9vbHNcbiAqIHRvIGFsbG93IGZvciB0aGUgQW5ndWxhciBkZWJ1Z2dpbmcgc3RvcnkgdG8gZnVuY3Rpb24uXG4gKlxuICogVG8gc2VlIHRoaXMgaW4gYWN0aW9uIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gKlxuICogICBiYXplbCBydW4gLy9wYWNrYWdlcy9jb3JlL3Rlc3QvYnVuZGxpbmcvdG9kbzpkZXZzZXJ2ZXJcbiAqXG4gKiAgVGhlbiBsb2FkIGBsb2NhbGhvc3Q6NTQzMmAgYW5kIHN0YXJ0IHVzaW5nIHRoZSBjb25zb2xlIHRvb2xzLlxuICovXG5cbi8qKlxuICogVGhpcyB2YWx1ZSByZWZsZWN0cyB0aGUgcHJvcGVydHkgb24gdGhlIHdpbmRvdyB3aGVyZSB0aGUgZGV2XG4gKiB0b29scyBhcmUgcGF0Y2hlZCAod2luZG93Lm5nKS5cbiAqICovXG5leHBvcnQgY29uc3QgR0xPQkFMX1BVQkxJU0hfRVhQQU5ET19LRVkgPSAnbmcnO1xuXG5jb25zdCBnbG9iYWxVdGlsc0Z1bmN0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFdhcm5pbmc6IGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGggYMm1YCBhcmUgY29uc2lkZXJlZCAqSU5URVJOQUwqIGFuZCBzaG91bGQgbm90IGJlIHJlbGllZCB1cG9uXG4gICAqIGluIGFwcGxpY2F0aW9uJ3MgY29kZS4gVGhlIGNvbnRyYWN0IG9mIHRob3NlIGZ1bmN0aW9ucyBtaWdodCBiZSBjaGFuZ2VkIGluIGFueSByZWxlYXNlIGFuZC9vciBhXG4gICAqIGZ1bmN0aW9uIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkuXG4gICAqL1xuICAnybVnZXREZXBlbmRlbmNpZXNGcm9tSW5qZWN0YWJsZSc6IGdldERlcGVuZGVuY2llc0Zyb21JbmplY3RhYmxlLFxuICAnybVnZXRJbmplY3RvclByb3ZpZGVycyc6IGdldEluamVjdG9yUHJvdmlkZXJzLFxuICAnybVnZXRJbmplY3RvclJlc29sdXRpb25QYXRoJzogZ2V0SW5qZWN0b3JSZXNvbHV0aW9uUGF0aCxcbiAgJ8m1Z2V0SW5qZWN0b3JNZXRhZGF0YSc6IGdldEluamVjdG9yTWV0YWRhdGEsXG4gICfJtXNldFByb2ZpbGVyJzogc2V0UHJvZmlsZXIsXG5cbiAgJ2dldERpcmVjdGl2ZU1ldGFkYXRhJzogZ2V0RGlyZWN0aXZlTWV0YWRhdGEsXG4gICdnZXRDb21wb25lbnQnOiBnZXRDb21wb25lbnQsXG4gICdnZXRDb250ZXh0JzogZ2V0Q29udGV4dCxcbiAgJ2dldExpc3RlbmVycyc6IGdldExpc3RlbmVycyxcbiAgJ2dldE93bmluZ0NvbXBvbmVudCc6IGdldE93bmluZ0NvbXBvbmVudCxcbiAgJ2dldEhvc3RFbGVtZW50JzogZ2V0SG9zdEVsZW1lbnQsXG4gICdnZXRJbmplY3Rvcic6IGdldEluamVjdG9yLFxuICAnZ2V0Um9vdENvbXBvbmVudHMnOiBnZXRSb290Q29tcG9uZW50cyxcbiAgJ2dldERpcmVjdGl2ZXMnOiBnZXREaXJlY3RpdmVzLFxuICAnYXBwbHlDaGFuZ2VzJzogYXBwbHlDaGFuZ2VzLFxuICAnaXNTaWduYWwnOiBpc1NpZ25hbCxcbn07XG50eXBlIEdsb2JhbFV0aWxzRnVuY3Rpb25zID0ga2V5b2YgdHlwZW9mIGdsb2JhbFV0aWxzRnVuY3Rpb25zO1xuXG5sZXQgX3B1Ymxpc2hlZCA9IGZhbHNlO1xuLyoqXG4gKiBQdWJsaXNoZXMgYSBjb2xsZWN0aW9uIG9mIGRlZmF1bHQgZGVidWcgdG9vbHMgb250b2B3aW5kb3cubmdgLlxuICpcbiAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGdsb2JhbGx5IHdoZW4gQW5ndWxhciBpcyBpbiBkZXZlbG9wbWVudFxuICogbW9kZSBhbmQgYXJlIGF1dG9tYXRpY2FsbHkgc3RyaXBwZWQgYXdheSBmcm9tIHByb2QgbW9kZSBpcyBvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hEZWZhdWx0R2xvYmFsVXRpbHMoKSB7XG4gIGlmICghX3B1Ymxpc2hlZCkge1xuICAgIF9wdWJsaXNoZWQgPSB0cnVlO1xuXG4gICAgc2V0dXBGcmFtZXdvcmtJbmplY3RvclByb2ZpbGVyKCk7XG4gICAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgbWV0aG9kXSBvZiBPYmplY3QuZW50cmllcyhnbG9iYWxVdGlsc0Z1bmN0aW9ucykpIHtcbiAgICAgIHB1Ymxpc2hHbG9iYWxVdGlsKG1ldGhvZE5hbWUgYXMgR2xvYmFsVXRpbHNGdW5jdGlvbnMsIG1ldGhvZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBkZWJ1ZyB0b29scyBhdmFpbGFibGUgdW5kZXIgYHdpbmRvdy5uZ2AuXG4gKi9cbmV4cG9ydCB0eXBlIEdsb2JhbERldk1vZGVVdGlscyA9IHtcbiAgW0dMT0JBTF9QVUJMSVNIX0VYUEFORE9fS0VZXTogdHlwZW9mIGdsb2JhbFV0aWxzRnVuY3Rpb25zO1xufTtcblxuLyoqXG4gKiBQdWJsaXNoZXMgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIGB3aW5kb3cubmdgIHNvIHRoYXQgaXQgY2FuIGJlXG4gKiB1c2VkIGZyb20gdGhlIGJyb3dzZXIgY29uc29sZSB3aGVuIGFuIGFwcGxpY2F0aW9uIGlzIG5vdCBpbiBwcm9kdWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaEdsb2JhbFV0aWw8SyBleHRlbmRzIEdsb2JhbFV0aWxzRnVuY3Rpb25zPihcbiAgICBuYW1lOiBLLCBmbjogdHlwZW9mIGdsb2JhbFV0aWxzRnVuY3Rpb25zW0tdKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgQ09NUElMRUQgPT09ICd1bmRlZmluZWQnIHx8ICFDT01QSUxFRCkge1xuICAgIC8vIE5vdGU6IHdlIGNhbid0IGV4cG9ydCBgbmdgIHdoZW4gdXNpbmcgY2xvc3VyZSBlbmhhbmNlZCBvcHRpbWl6YXRpb24gYXM6XG4gICAgLy8gLSBjbG9zdXJlIGRlY2xhcmVzIGdsb2JhbHMgaXRzZWxmIGZvciBtaW5pZmllZCBuYW1lcywgd2hpY2ggc29tZXRpbWVzIGNsb2JiZXIgb3VyIGBuZ2AgZ2xvYmFsXG4gICAgLy8gLSB3ZSBjYW4ndCBkZWNsYXJlIGEgY2xvc3VyZSBleHRlcm4gYXMgdGhlIG5hbWVzcGFjZSBgbmdgIGlzIGFscmVhZHkgdXNlZCB3aXRoaW4gR29vZ2xlXG4gICAgLy8gICBmb3IgdHlwaW5ncyBmb3IgQW5ndWxhckpTICh2aWEgYGdvb2cucHJvdmlkZSgnbmcuLi4uJylgKS5cbiAgICBjb25zdCB3ID0gZ2xvYmFsIGFzIEdsb2JhbERldk1vZGVVdGlscztcbiAgICBuZ0Rldk1vZGUgJiYgYXNzZXJ0RGVmaW5lZChmbiwgJ2Z1bmN0aW9uIG5vdCBkZWZpbmVkJyk7XG5cbiAgICB3W0dMT0JBTF9QVUJMSVNIX0VYUEFORE9fS0VZXSA/Pz0ge30gYXMgYW55O1xuICAgIHdbR0xPQkFMX1BVQkxJU0hfRVhQQU5ET19LRVldW25hbWVdID0gZm47XG4gIH1cbn1cbiJdfQ==