@pebula/metap
Version:
meta-programming tools
67 lines • 5.23 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* Same as angular's `forwardRef`, different name to prevent confusion / collusion.
*/
/**
* @license
* Copyright Google Inc. 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 { isFunction, stringify } from '@pebula/utils';
/** @type {?} */
var lazyRefKey = Symbol('lazyRef');
/** @type {?} */
var toString = (/**
* @return {?}
*/
function () {
return stringify(this());
});
var ɵ0 = toString;
/**
* Allows to refer to references which are not yet defined.
*
* For instance, `lazyRef` is used when the `token` which we need to refer to for the purposes of
* DI is declared,
* but not yet defined. It is also used when the `token` which we use when creating a query is not
* yet defined.
*
* ### Example
* {\@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}
* \@experimental
* @template T
* @param {?} lazyRefFn
* @return {?}
*/
export function lazyRef(lazyRefFn) {
lazyRefFn[lazyRefKey] = lazyRef;
lazyRefFn.toString = toString;
return (/** @type {?} */ (lazyRefFn));
}
(function (lazyRef) {
/**
* Lazily retrieves the reference value from a lazyRef.
*
* Acts as the identity function when given a non-forward-ref value.
*
* ### Example ([live demo](http://plnkr.co/edit/GU72mJrk1fiodChcmiDR?p=preview))
*
* {\@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}
*
* See: {\@link lazyRef}
* \@experimental
* @param {?} type
* @return {?}
*/
function resolve(type) {
return isFunction(type) && type[lazyRefKey] === lazyRef ? type() : type;
}
lazyRef.resolve = resolve;
})(lazyRef || (lazyRef = {}));
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1yZWYuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AcGVidWxhL21ldGFwL2ludGVybmFsLyIsInNvdXJjZXMiOlsibGliL2Z3L2xhenktcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBWUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7O0lBRTdELFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDOztJQUM5QixRQUFROzs7QUFBRztJQUNmLE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWNELE1BQU0sVUFBVSxPQUFPLENBQTZCLFNBQWtCO0lBQ3BFLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDaEMsU0FBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDOUIsT0FBTyxtQkFBQSxTQUFTLEVBQU8sQ0FBQztBQUMxQixDQUFDO0FBRUQsV0FBaUIsT0FBTzs7Ozs7Ozs7Ozs7Ozs7O0lBYXRCLFNBQWdCLE9BQU8sQ0FBQyxJQUFTO1FBQy9CLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUUsQ0FBQztJQUZlLGVBQU8sVUFFdEIsQ0FBQTtBQUNILENBQUMsRUFoQmdCLE9BQU8sS0FBUCxPQUFPLFFBZ0J2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2FtZSBhcyBhbmd1bGFyJ3MgYGZvcndhcmRSZWZgLCBkaWZmZXJlbnQgbmFtZSB0byBwcmV2ZW50IGNvbmZ1c2lvbiAvIGNvbGx1c2lvbi5cbiAqL1xuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IGlzRnVuY3Rpb24sIHN0cmluZ2lmeSwgQ29uc3RydWN0b3IgfSBmcm9tICdAcGVidWxhL3V0aWxzJztcblxuY29uc3QgbGF6eVJlZktleSA9IFN5bWJvbCgnbGF6eVJlZicpO1xuY29uc3QgdG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHN0cmluZ2lmeSh0aGlzKCkpO1xufTtcblxuLyoqXG4gKiBBbGxvd3MgdG8gcmVmZXIgdG8gcmVmZXJlbmNlcyB3aGljaCBhcmUgbm90IHlldCBkZWZpbmVkLlxuICpcbiAqIEZvciBpbnN0YW5jZSwgYGxhenlSZWZgIGlzIHVzZWQgd2hlbiB0aGUgYHRva2VuYCB3aGljaCB3ZSBuZWVkIHRvIHJlZmVyIHRvIGZvciB0aGUgcHVycG9zZXMgb2ZcbiAqIERJIGlzIGRlY2xhcmVkLFxuICogYnV0IG5vdCB5ZXQgZGVmaW5lZC4gSXQgaXMgYWxzbyB1c2VkIHdoZW4gdGhlIGB0b2tlbmAgd2hpY2ggd2UgdXNlIHdoZW4gY3JlYXRpbmcgYSBxdWVyeSBpcyBub3RcbiAqIHlldCBkZWZpbmVkLlxuICpcbiAqICMjIyBFeGFtcGxlXG4gKiB7QGV4YW1wbGUgY29yZS9kaS90cy9mb3J3YXJkX3JlZi9mb3J3YXJkX3JlZl9zcGVjLnRzIHJlZ2lvbj0nZm9yd2FyZF9yZWYnfVxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF6eVJlZjxUIGV4dGVuZHMgQ29uc3RydWN0b3I8YW55Pj4obGF6eVJlZkZuOiAoKSA9PiBUKTogVCB7XG4gIGxhenlSZWZGbltsYXp5UmVmS2V5XSA9IGxhenlSZWY7XG4gIGxhenlSZWZGbi50b1N0cmluZyA9IHRvU3RyaW5nO1xuICByZXR1cm4gbGF6eVJlZkZuIGFzIGFueTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBsYXp5UmVmIHtcbiAgLyoqXG4gICAqIExhemlseSByZXRyaWV2ZXMgdGhlIHJlZmVyZW5jZSB2YWx1ZSBmcm9tIGEgbGF6eVJlZi5cbiAgICpcbiAgICogQWN0cyBhcyB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gd2hlbiBnaXZlbiBhIG5vbi1mb3J3YXJkLXJlZiB2YWx1ZS5cbiAgICpcbiAgICogIyMjIEV4YW1wbGUgKFtsaXZlIGRlbW9dKGh0dHA6Ly9wbG5rci5jby9lZGl0L0dVNzJtSnJrMWZpb2RDaGNtaURSP3A9cHJldmlldykpXG4gICAqXG4gICAqIHtAZXhhbXBsZSBjb3JlL2RpL3RzL2ZvcndhcmRfcmVmL2ZvcndhcmRfcmVmX3NwZWMudHMgcmVnaW9uPSdyZXNvbHZlX2ZvcndhcmRfcmVmJ31cbiAgICpcbiAgICogU2VlOiB7QGxpbmsgbGF6eVJlZn1cbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUodHlwZTogYW55KTogQ29uc3RydWN0b3I8YW55PiB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odHlwZSkgJiYgdHlwZVtsYXp5UmVmS2V5XSA9PT0gbGF6eVJlZiA/IHR5cGUoKSA6IHR5cGU7XG4gIH1cbn1cbiJdfQ==