UNPKG

ui-router-core

Version:

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

126 lines 5.53 kB
"use strict"; /** * @internalapi * @module url */ /** for typedoc */ var common_1 = require("../common/common"); var predicates_1 = require("../common/predicates"); var urlMatcher_1 = require("./urlMatcher"); var param_1 = require("../params/param"); var paramTypes_1 = require("../params/paramTypes"); /** * Factory for [[UrlMatcher]] instances. * * The factory is available to ng1 services as * `$urlMatcherFactor` or ng1 providers as `$urlMatcherFactoryProvider`. */ var UrlMatcherFactory = (function () { function UrlMatcherFactory() { var _this = this; /** @hidden */ this.paramTypes = new paramTypes_1.ParamTypes(); /** @hidden */ this._isCaseInsensitive = false; /** @hidden */ this._isStrictMode = true; /** @hidden */ this._defaultSquashPolicy = false; /** @hidden */ this._getConfig = function (config) { return common_1.extend({ strict: _this._isStrictMode, caseInsensitive: _this._isCaseInsensitive }, config); }; /** @internalapi Creates a new [[Param]] for a given location (DefType) */ this.paramFactory = { /** Creates a new [[Param]] from a CONFIG block */ fromConfig: function (id, type, config) { return new param_1.Param(id, type, config, param_1.DefType.CONFIG, _this); }, /** Creates a new [[Param]] from a url PATH */ fromPath: function (id, type, config) { return new param_1.Param(id, type, config, param_1.DefType.PATH, _this); }, /** Creates a new [[Param]] from a url SEARCH */ fromSearch: function (id, type, config) { return new param_1.Param(id, type, config, param_1.DefType.SEARCH, _this); }, }; common_1.extend(this, { UrlMatcher: urlMatcher_1.UrlMatcher, Param: param_1.Param }); } /** @inheritdoc */ UrlMatcherFactory.prototype.caseInsensitive = function (value) { return this._isCaseInsensitive = predicates_1.isDefined(value) ? value : this._isCaseInsensitive; }; /** @inheritdoc */ UrlMatcherFactory.prototype.strictMode = function (value) { return this._isStrictMode = predicates_1.isDefined(value) ? value : this._isStrictMode; }; /** @inheritdoc */ UrlMatcherFactory.prototype.defaultSquashPolicy = function (value) { if (predicates_1.isDefined(value) && value !== true && value !== false && !predicates_1.isString(value)) throw new Error("Invalid squash policy: " + value + ". Valid policies: false, true, arbitrary-string"); return this._defaultSquashPolicy = predicates_1.isDefined(value) ? value : this._defaultSquashPolicy; }; /** * Creates a [[UrlMatcher]] for the specified pattern. * * @param pattern The URL pattern. * @param config The config object hash. * @returns The UrlMatcher. */ UrlMatcherFactory.prototype.compile = function (pattern, config) { return new urlMatcher_1.UrlMatcher(pattern, this.paramTypes, this.paramFactory, this._getConfig(config)); }; /** * Returns true if the specified object is a [[UrlMatcher]], or false otherwise. * * @param object The object to perform the type check against. * @returns `true` if the object matches the `UrlMatcher` interface, by * implementing all the same methods. */ UrlMatcherFactory.prototype.isMatcher = function (object) { // TODO: typeof? if (!predicates_1.isObject(object)) return false; var result = true; common_1.forEach(urlMatcher_1.UrlMatcher.prototype, function (val, name) { if (predicates_1.isFunction(val)) result = result && (predicates_1.isDefined(object[name]) && predicates_1.isFunction(object[name])); }); return result; }; ; /** * Creates and registers a custom [[ParamType]] object * * A [[ParamType]] can be used to generate URLs with typed parameters. * * @param name The type name. * @param definition The type definition. See [[ParamTypeDefinition]] for information on the values accepted. * @param definitionFn A function that is injected before the app runtime starts. * The result of this function should be a [[ParamTypeDefinition]]. * The result is merged into the existing `definition`. * See [[ParamType]] for information on the values accepted. * * @returns - if a type was registered: the [[UrlMatcherFactory]] * - if only the `name` parameter was specified: the currently registered [[ParamType]] object, or undefined * * Note: Register custom types *before using them* in a state definition. * * See [[ParamTypeDefinition]] for examples */ UrlMatcherFactory.prototype.type = function (name, definition, definitionFn) { var type = this.paramTypes.type(name, definition, definitionFn); return !predicates_1.isDefined(definition) ? type : this; }; ; /** @hidden */ UrlMatcherFactory.prototype.$get = function () { this.paramTypes.enqueue = false; this.paramTypes._flushTypeQueue(); return this; }; ; /** @internalapi */ UrlMatcherFactory.prototype.dispose = function () { this.paramTypes.dispose(); }; return UrlMatcherFactory; }()); exports.UrlMatcherFactory = UrlMatcherFactory; //# sourceMappingURL=urlMatcherFactory.js.map