{
  "version": 3,
  "file": "paramTypes.js",
  "sourceRoot": "",
  "sources": [
    "@uirouter/core/params/paramTypes.ts"
  ],
  "names": [],
  "mappings": ";;;AAAA,2CAAkG;AAClG,mDAAoE;AACpE,qCAAmC;AACnC,uDAAkD;AAClD,yCAAwC;AAGxC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IAiLE;QAfA,YAAO,GAAG,IAAI,CAAC;QACf,cAAS,GAAU,EAAE,CAAC;QAEd,iBAAY,GAAQ,aAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YACrD,MAAM;YACN,QAAQ;YACR,OAAO;YACP,MAAM;YACN,KAAK;YACL,MAAM;YACN,MAAM;YACN,MAAM;YACN,KAAK;SACN,CAAC,CAAC;QAGD,qEAAqE;QACrE,IAAM,QAAQ,GAAG,UAAC,UAA+B,EAAE,IAAY,IAAK,OAAA,IAAI,qBAAS,CAAC,eAAM,CAAC,EAAE,IAAI,MAAA,EAAE,EAAE,UAAU,CAAC,CAAC,EAA3C,CAA2C,CAAC;QAChH,IAAI,CAAC,KAAK,GAAG,gBAAO,CAAC,YAAG,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,4BAAO,GAAP;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,yBAAI,GAAJ,UAAK,IAAY,EAAE,UAAgC,EAAE,YAAwC;QAC3F,IAAI,CAAC,sBAAS,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAiB,IAAI,gCAA6B,CAAC,CAAC;QAEzG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,qBAAS,CAAC,eAAM,CAAC,EAAE,IAAI,MAAA,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QAE/D,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,MAAA,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,eAAe,EAAE,CAAC;SAC3C;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oCAAe,GAAf;QACE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YAC5B,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvF,eAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,uBAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACpE;IACH,CAAC;IACH,iBAAC;AAAD,CAAC,AArND,IAqNC;AArNY,gCAAU;AAuNvB,SAAS,gBAAgB;IACvB,IAAM,eAAe,GAAG,UAAC,GAAG;QAC1B,IAAM,WAAW,GAAG,UAAC,GAAQ,IAAK,OAAA,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAApC,CAAoC,CAAC;QAEvE,IAAM,eAAe,GAAG;YACtB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,WAAW;YACnB,EAAE,EAAE,QAAE,CAAC,MAAM,CAAC;YACd,OAAO,EAAE,IAAI;YACb,yCAAyC;YACzC,MAAM,EAAE,UAAC,CAAM,EAAE,CAAM,IAAK,OAAA,CAAC,IAAI,CAAC,EAAN,CAAM;SACnC,CAAC;QAEF,OAAO,eAAM,CAAC,EAAE,EAAE,eAAe,EAAE,GAAG,CAAwB,CAAC;IACjE,CAAC,CAAC;IAEF,qCAAqC;IACrC,eAAM,CAAC,UAAU,CAAC,SAAS,EAAE;QAC3B,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;QAE3B,IAAI,EAAE,eAAe,CAAC;YACpB,OAAO,EAAE,OAAO;SACjB,CAAC;QAEF,KAAK,EAAE,eAAe,CAAC,EAAE,CAAC;QAE1B,IAAI,EAAE,eAAe,CAAC;YACpB,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,GAAG,EAAE,eAAe,CAAC;YACnB,MAAM,EAAE,UAAC,GAAW,IAAK,OAAA,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAjB,CAAiB;YAC1C,EAAE,EAAE,UAAU,GAAQ;gBACpB,OAAO,CAAC,8BAAiB,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,GAAG,CAAC;YACxE,CAAC;YACD,OAAO,EAAE,OAAO;SACjB,CAAC;QAEF,IAAI,EAAE,eAAe,CAAC;YACpB,MAAM,EAAE,UAAC,GAAQ,IAAK,OAAA,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAf,CAAe;YACrC,MAAM,EAAE,UAAC,GAAW,IAAK,OAAA,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,EAAvB,CAAuB;YAChD,EAAE,EAAE,QAAE,CAAC,OAAO,CAAC;YACf,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,IAAI,EAAE,eAAe,CAAC;YACpB,MAAM,EAAE,UAAU,GAAQ;gBACxB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;oBAClB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7G,CAAC;YACD,MAAM,EAAE,UAAU,GAAW;gBAC3B,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;oBAAE,OAAa,GAAY,CAAC;gBAC5C,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,CAAC;YACD,EAAE,EAAE,UAAC,GAAQ,IAAK,OAAA,GAAG,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAA5C,CAA4C;YAC9D,MAAM,EAAN,UAAO,CAAM,EAAE,CAAM;gBACnB,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,EAAE,IAAK,OAAA,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAA1B,CAA0B,EAAE,IAAI,CAAC,CAAC;YACtG,CAAC;YACD,OAAO,EAAE,yDAAyD;YAClE,OAAO,EAAE,uDAAuD;SACjE,CAAC;QAEF,IAAI,EAAE,eAAe,CAAC;YACpB,MAAM,EAAE,eAAM;YACd,MAAM,EAAE,iBAAQ;YAChB,EAAE,EAAE,QAAE,CAAC,MAAM,CAAC;YACd,MAAM,EAAE,eAAM;YACd,OAAO,EAAE,OAAO;SACjB,CAAC;QAEF,yBAAyB;QACzB,GAAG,EAAE,eAAe,CAAC;YACnB,MAAM,EAAE,iBAAQ;YAChB,MAAM,EAAE,iBAAQ;YAChB,EAAE,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;YACd,MAAM,EAAE,eAAM;SACf,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB,EAAE,CAAC",
  "sourcesContent": [
    "import { fromJson, toJson, identity, equals, inherit, map, extend, pick } from '../common/common';\nimport { isDefined, isNullOrUndefined } from '../common/predicates';\nimport { is } from '../common/hof';\nimport { services } from '../common/coreservices';\nimport { ParamType } from './paramType';\nimport { ParamTypeDefinition } from './interface';\n\n/**\n * A registry for parameter types.\n *\n * This registry manages the built-in (and custom) parameter types.\n *\n * The built-in parameter types are:\n *\n * - [[string]]\n * - [[path]]\n * - [[query]]\n * - [[hash]]\n * - [[int]]\n * - [[bool]]\n * - [[date]]\n * - [[json]]\n * - [[any]]\n *\n * To register custom parameter types, use [[UrlConfig.type]], i.e.,\n *\n * ```js\n * router.urlService.config.type(customType)\n * ```\n */\nexport class ParamTypes {\n  /**\n   * Built-in parameter type: `string`\n   *\n   * This parameter type coerces values to strings.\n   * It matches anything (`new RegExp(\".*\")`) in the URL\n   */\n  static string: ParamTypeDefinition;\n\n  /**\n   * Built-in parameter type: `path`\n   *\n   * This parameter type is the default type for path parameters.\n   * A path parameter is any parameter declared in the path portion of a url\n   *\n   * - `/foo/:param1/:param2`: two path parameters\n   *\n   * This parameter type behaves exactly like the [[string]] type with one exception.\n   * When matching parameter values in the URL, the `path` type does not match forward slashes `/`.\n   *\n   * #### Angular 1 note:\n   * In ng1, this type is overridden with one that pre-encodes slashes as `~2F` instead of `%2F`.\n   * For more details about this angular 1 behavior, see: https://github.com/angular-ui/ui-router/issues/2598\n   */\n  static path: ParamTypeDefinition;\n\n  /**\n   * Built-in parameter type: `query`\n   *\n   * This parameter type is the default type for query/search parameters.\n   * It behaves the same as the [[string]] parameter type.\n   *\n   * A query parameter is any parameter declared in the query/search portion of a url\n   *\n   * - `/bar?param2`: a query parameter\n   */\n  static query: ParamTypeDefinition;\n\n  /**\n   * Built-in parameter type: `hash`\n   *\n   * This parameter type is used for the `#` parameter (the hash)\n   * It behaves the same as the [[string]] parameter type.\n   */\n  static hash: ParamTypeDefinition;\n\n  /**\n   * Built-in parameter type: `int`\n   *\n   * This parameter type serializes javascript integers (`number`s which represent an integer) to the URL.\n   *\n   * #### Example:\n   * ```js\n   * .state({\n   *   name: 'user',\n   *   url: '/user/{id:int}'\n   * });\n   * ```\n   * ```js\n   * $state.go('user', { id: 1298547 });\n   * ```\n   *\n   * The URL will serialize to: `/user/1298547`.\n   *\n   * When the parameter value is read, it will be the `number` `1298547`, not the string `\"1298547\"`.\n   */\n  static int: ParamTypeDefinition;\n\n  /**\n   * Built-in parameter type: `bool`\n   *\n   * This parameter type serializes `true`/`false` as `1`/`0`\n   *\n   * #### Example:\n   * ```js\n   * .state({\n   *   name: 'inbox',\n   *   url: '/inbox?{unread:bool}'\n   * });\n   * ```\n   * ```js\n   * $state.go('inbox', { unread: true });\n   * ```\n   *\n   * The URL will serialize to: `/inbox?unread=1`.\n   *\n   * Conversely, if the url is `/inbox?unread=0`, the value of the `unread` parameter will be a `false`.\n   */\n  static bool: ParamTypeDefinition;\n\n  /**\n   * Built-in parameter type: `date`\n   *\n   * This parameter type can be used to serialize Javascript dates as parameter values.\n   *\n   * #### Example:\n   * ```js\n   * .state({\n   *   name: 'search',\n   *   url: '/search?{start:date}'\n   * });\n   * ```\n   * ```js\n   * $state.go('search', { start: new Date(2000, 0, 1) });\n   * ```\n   *\n   * The URL will serialize to: `/search?start=2000-01-01`.\n   *\n   * Conversely, if the url is `/search?start=2016-12-25`, the value of the `start` parameter will be a `Date` object where:\n   *\n   * - `date.getFullYear() === 2016`\n   * - `date.getMonth() === 11` (month is 0-based)\n   * - `date.getDate() === 25`\n   */\n  static date: ParamTypeDefinition;\n\n  /**\n   * Built-in parameter type: `json`\n   *\n   * This parameter type can be used to serialize javascript objects into the URL using JSON serialization.\n   *\n   * #### Example:\n   * This example serializes an plain javascript object to the URL\n   * ```js\n   * .state({\n   *   name: 'map',\n   *   url: '/map/{coords:json}'\n   * });\n   * ```\n   * ```js\n   * $state.go('map', { coords: { x: 10399.2, y: 49071 });\n   * ```\n   *\n   * The URL will serialize to: `/map/%7B%22x%22%3A10399.2%2C%22y%22%3A49071%7D`\n   */\n  static json: ParamTypeDefinition;\n\n  /**\n   * Built-in parameter type: `any`\n   *\n   * This parameter type is used by default for url-less parameters (parameters that do not appear in the URL).\n   * This type does not encode or decode.\n   * It is compared using a deep `equals` comparison.\n   *\n   * #### Example:\n   * This example defines a non-url parameter on a [[StateDeclaration]].\n   * ```js\n   * .state({\n   *   name: 'new',\n   *   url: '/new',\n   *   params: {\n   *     inrepyto: null\n   *   }\n   * });\n   * ```\n   * ```js\n   * $state.go('new', { inreplyto: currentMessage });\n   * ```\n   */\n  static any: ParamTypeDefinition;\n\n  types: any;\n  enqueue = true;\n  typeQueue: any[] = [];\n\n  private defaultTypes: any = pick(ParamTypes.prototype, [\n    'hash',\n    'string',\n    'query',\n    'path',\n    'int',\n    'bool',\n    'date',\n    'json',\n    'any',\n  ]);\n\n  constructor() {\n    // Register default types. Store them in the prototype of this.types.\n    const makeType = (definition: ParamTypeDefinition, name: string) => new ParamType(extend({ name }, definition));\n    this.types = inherit(map(this.defaultTypes, makeType), {});\n  }\n\n  dispose() {\n    this.types = {};\n  }\n\n  /**\n   * Registers a parameter type\n   *\n   * End users should call [[UrlMatcherFactory.type]], which delegates to this method.\n   */\n  type(name: string, definition?: ParamTypeDefinition, definitionFn?: () => ParamTypeDefinition) {\n    if (!isDefined(definition)) return this.types[name];\n    if (this.types.hasOwnProperty(name)) throw new Error(`A type named '${name}' has already been defined.`);\n\n    this.types[name] = new ParamType(extend({ name }, definition));\n\n    if (definitionFn) {\n      this.typeQueue.push({ name, def: definitionFn });\n      if (!this.enqueue) this._flushTypeQueue();\n    }\n\n    return this;\n  }\n\n  _flushTypeQueue() {\n    while (this.typeQueue.length) {\n      const type = this.typeQueue.shift();\n      if (type.pattern) throw new Error(\"You cannot override a type's .pattern at runtime.\");\n      extend(this.types[type.name], services.$injector.invoke(type.def));\n    }\n  }\n}\n\nfunction initDefaultTypes() {\n  const makeDefaultType = (def) => {\n    const valToString = (val: any) => (val != null ? val.toString() : val);\n\n    const defaultTypeBase = {\n      encode: valToString,\n      decode: valToString,\n      is: is(String),\n      pattern: /.*/,\n      // tslint:disable-next-line:triple-equals\n      equals: (a: any, b: any) => a == b, // allow coersion for null/undefined/\"\"\n    };\n\n    return extend({}, defaultTypeBase, def) as ParamTypeDefinition;\n  };\n\n  // Default Parameter Type Definitions\n  extend(ParamTypes.prototype, {\n    string: makeDefaultType({}),\n\n    path: makeDefaultType({\n      pattern: /[^/]*/,\n    }),\n\n    query: makeDefaultType({}),\n\n    hash: makeDefaultType({\n      inherit: false,\n    }),\n\n    int: makeDefaultType({\n      decode: (val: string) => parseInt(val, 10),\n      is: function (val: any) {\n        return !isNullOrUndefined(val) && this.decode(val.toString()) === val;\n      },\n      pattern: /-?\\d+/,\n    }),\n\n    bool: makeDefaultType({\n      encode: (val: any) => (val && 1) || 0,\n      decode: (val: string) => parseInt(val, 10) !== 0,\n      is: is(Boolean),\n      pattern: /0|1/,\n    }),\n\n    date: makeDefaultType({\n      encode: function (val: any) {\n        return !this.is(val)\n          ? undefined\n          : [val.getFullYear(), ('0' + (val.getMonth() + 1)).slice(-2), ('0' + val.getDate()).slice(-2)].join('-');\n      },\n      decode: function (val: string) {\n        if (this.is(val)) return (<any>val) as Date;\n        const match = this.capture.exec(val);\n        return match ? new Date(match[1], match[2] - 1, match[3]) : undefined;\n      },\n      is: (val: any) => val instanceof Date && !isNaN(val.valueOf()),\n      equals(l: any, r: any) {\n        return ['getFullYear', 'getMonth', 'getDate'].reduce((acc, fn) => acc && l[fn]() === r[fn](), true);\n      },\n      pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,\n      capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/,\n    }),\n\n    json: makeDefaultType({\n      encode: toJson,\n      decode: fromJson,\n      is: is(Object),\n      equals: equals,\n      pattern: /[^/]*/,\n    }),\n\n    // does not encode/decode\n    any: makeDefaultType({\n      encode: identity,\n      decode: identity,\n      is: () => true,\n      equals: equals,\n    }),\n  });\n}\n\ninitDefaultTypes();\n"
  ]
}