UNPKG

@uirouter/core

Version:

UI-Router Core: Framework agnostic, State-based routing for JavaScript Single Page Apps

116 lines 5.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StateObject = void 0; var common_1 = require("../common/common"); var hof_1 = require("../common/hof"); var glob_1 = require("../common/glob"); var predicates_1 = require("../common/predicates"); /** * Internal representation of a UI-Router state. * * Instances of this class are created when a [[StateDeclaration]] is registered with the [[StateRegistry]]. * * A registered [[StateDeclaration]] is augmented with a getter ([[StateDeclaration.$$state]]) which returns the corresponding [[StateObject]] object. * * This class prototypally inherits from the corresponding [[StateDeclaration]]. * Each of its own properties (i.e., `hasOwnProperty`) are built using builders from the [[StateBuilder]]. */ var StateObject = /** @class */ (function () { /** @deprecated use State.create() */ function StateObject(config) { return StateObject.create(config || {}); } /** * Create a state object to put the private/internal implementation details onto. * The object's prototype chain looks like: * (Internal State Object) -> (Copy of State.prototype) -> (State Declaration object) -> (State Declaration's prototype...) * * @param stateDecl the user-supplied State Declaration * @returns {StateObject} an internal State object */ StateObject.create = function (stateDecl) { stateDecl = StateObject.isStateClass(stateDecl) ? new stateDecl() : stateDecl; var state = common_1.inherit(common_1.inherit(stateDecl, StateObject.prototype)); stateDecl.$$state = function () { return state; }; state.self = stateDecl; state.__stateObjectCache = { nameGlob: glob_1.Glob.fromString(state.name), }; return state; }; /** * Returns true if the provided parameter is the same state. * * Compares the identity of the state against the passed value, which is either an object * reference to the actual `State` instance, the original definition object passed to * `$stateProvider.state()`, or the fully-qualified name. * * @param ref Can be one of (a) a `State` instance, (b) an object that was passed * into `$stateProvider.state()`, (c) the fully-qualified name of a state as a string. * @returns Returns `true` if `ref` matches the current `State` instance. */ StateObject.prototype.is = function (ref) { return this === ref || this.self === ref || this.fqn() === ref; }; /** * @deprecated this does not properly handle dot notation * @returns Returns a dot-separated name of the state. */ StateObject.prototype.fqn = function () { if (!this.parent || !(this.parent instanceof this.constructor)) return this.name; var name = this.parent.fqn(); return name ? name + '.' + this.name : this.name; }; /** * Returns the root node of this state's tree. * * @returns The root of this state's tree. */ StateObject.prototype.root = function () { return (this.parent && this.parent.root()) || this; }; /** * Gets the state's `Param` objects * * Gets the list of [[Param]] objects owned by the state. * If `opts.inherit` is true, it also includes the ancestor states' [[Param]] objects. * If `opts.matchingKeys` exists, returns only `Param`s whose `id` is a key on the `matchingKeys` object * * @param opts options */ StateObject.prototype.parameters = function (opts) { opts = common_1.defaults(opts, { inherit: true, matchingKeys: null }); var inherited = (opts.inherit && this.parent && this.parent.parameters()) || []; return inherited .concat(common_1.values(this.params)) .filter(function (param) { return !opts.matchingKeys || opts.matchingKeys.hasOwnProperty(param.id); }); }; /** * Returns a single [[Param]] that is owned by the state * * If `opts.inherit` is true, it also searches the ancestor states` [[Param]]s. * @param id the name of the [[Param]] to return * @param opts options */ StateObject.prototype.parameter = function (id, opts) { if (opts === void 0) { opts = {}; } return ((this.url && this.url.parameter(id, opts)) || common_1.find(common_1.values(this.params), hof_1.propEq('id', id)) || (opts.inherit && this.parent && this.parent.parameter(id))); }; StateObject.prototype.toString = function () { return this.fqn(); }; /** Predicate which returns true if the object is an class with @State() decorator */ StateObject.isStateClass = function (stateDecl) { return predicates_1.isFunction(stateDecl) && stateDecl['__uiRouterState'] === true; }; /** Predicate which returns true if the object is a [[StateDeclaration]] object */ StateObject.isStateDeclaration = function (obj) { return predicates_1.isFunction(obj['$$state']); }; /** Predicate which returns true if the object is an internal [[StateObject]] object */ StateObject.isState = function (obj) { return predicates_1.isObject(obj['__stateObjectCache']); }; return StateObject; }()); exports.StateObject = StateObject; //# sourceMappingURL=stateObject.js.map