@surfside/ads-core 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/README.md +15 -15
  2. package/lib/cjs/Api.js +195 -0
  3. package/lib/cjs/Api.js.map +1 -0
  4. package/lib/cjs/helpers/Generator.js +50 -0
  5. package/lib/cjs/helpers/Generator.js.map +1 -0
  6. package/lib/cjs/helpers/Handlebars.js +313 -0
  7. package/lib/cjs/helpers/Handlebars.js.map +1 -0
  8. package/lib/cjs/helpers/NativeRequestBuilder.js +174 -0
  9. package/lib/cjs/helpers/NativeRequestBuilder.js.map +1 -0
  10. package/lib/cjs/helpers/RequestBuilder.js +160 -0
  11. package/lib/cjs/helpers/RequestBuilder.js.map +1 -0
  12. package/lib/cjs/helpers/TryGet.js +14 -0
  13. package/lib/cjs/helpers/TryGet.js.map +1 -0
  14. package/lib/cjs/helpers/Window.js +24 -0
  15. package/lib/cjs/helpers/Window.js.map +1 -0
  16. package/lib/cjs/helpers/index.js +24 -0
  17. package/lib/cjs/helpers/index.js.map +1 -0
  18. package/lib/cjs/helpers/response/Banner.js +4 -0
  19. package/lib/cjs/helpers/response/Banner.js.map +1 -0
  20. package/lib/cjs/helpers/response/BuiltResponse.js +27 -0
  21. package/lib/cjs/helpers/response/BuiltResponse.js.map +1 -0
  22. package/lib/cjs/helpers/response/Carousel.js +282 -0
  23. package/lib/cjs/helpers/response/Carousel.js.map +1 -0
  24. package/lib/cjs/helpers/response/Clickthrough.js +24 -0
  25. package/lib/cjs/helpers/response/Clickthrough.js.map +1 -0
  26. package/lib/cjs/helpers/response/ProductCard.js +198 -0
  27. package/lib/cjs/helpers/response/ProductCard.js.map +1 -0
  28. package/lib/cjs/helpers/response/Video.js +4 -0
  29. package/lib/cjs/helpers/response/Video.js.map +1 -0
  30. package/lib/cjs/helpers/response/index.js +23 -0
  31. package/lib/cjs/helpers/response/index.js.map +1 -0
  32. package/lib/cjs/index.js +21 -3488
  33. package/lib/cjs/index.js.map +1 -54
  34. package/lib/cjs/models/dynamic/DynamicZone.js +12 -0
  35. package/lib/cjs/models/dynamic/DynamicZone.js.map +1 -0
  36. package/lib/cjs/models/dynamic/index.js +18 -0
  37. package/lib/cjs/models/dynamic/index.js.map +1 -0
  38. package/lib/cjs/models/index.js +22 -0
  39. package/lib/cjs/models/index.js.map +1 -0
  40. package/lib/cjs/models/retail/Configuration.js +10 -0
  41. package/lib/cjs/models/retail/Configuration.js.map +1 -0
  42. package/lib/cjs/models/retail/Product.js +4 -0
  43. package/lib/cjs/models/retail/Product.js.map +1 -0
  44. package/lib/cjs/models/retail/Recommended.js +3 -0
  45. package/lib/cjs/models/retail/Recommended.js.map +1 -0
  46. package/lib/cjs/models/retail/index.js +20 -0
  47. package/lib/cjs/models/retail/index.js.map +1 -0
  48. package/lib/cjs/models/rtb/BidRequest.js +20 -0
  49. package/lib/cjs/models/rtb/BidRequest.js.map +1 -0
  50. package/lib/cjs/models/rtb/BidResponse.js +3 -0
  51. package/lib/cjs/models/rtb/BidResponse.js.map +1 -0
  52. package/lib/cjs/models/rtb/NativeRequest.js +122 -0
  53. package/lib/cjs/models/rtb/NativeRequest.js.map +1 -0
  54. package/lib/cjs/models/rtb/NativeResponse.js +26 -0
  55. package/lib/cjs/models/rtb/NativeResponse.js.map +1 -0
  56. package/lib/cjs/models/rtb/index.js +21 -0
  57. package/lib/cjs/models/rtb/index.js.map +1 -0
  58. package/lib/cjs/models/tracking/Geo.js +3 -0
  59. package/lib/cjs/models/tracking/Geo.js.map +1 -0
  60. package/lib/cjs/models/tracking/index.js +18 -0
  61. package/lib/cjs/models/tracking/index.js.map +1 -0
  62. package/lib/cjs/models/vast/Vast.js +4 -0
  63. package/lib/cjs/models/vast/Vast.js.map +1 -0
  64. package/lib/cjs/models/vast/index.js +18 -0
  65. package/lib/cjs/models/vast/index.js.map +1 -0
  66. package/lib/cjs/services/Bidder.js +128 -0
  67. package/lib/cjs/services/Bidder.js.map +1 -0
  68. package/lib/cjs/services/Configuration.js +93 -0
  69. package/lib/cjs/services/Configuration.js.map +1 -0
  70. package/lib/cjs/services/Device.js +236 -0
  71. package/lib/cjs/services/Device.js.map +1 -0
  72. package/lib/cjs/services/Dynamic.js +129 -0
  73. package/lib/cjs/services/Dynamic.js.map +1 -0
  74. package/lib/cjs/services/Geo.js +35 -0
  75. package/lib/cjs/services/Geo.js.map +1 -0
  76. package/lib/cjs/services/Logger.js +57 -0
  77. package/lib/cjs/services/Logger.js.map +1 -0
  78. package/lib/cjs/services/Memoization.js +17 -0
  79. package/lib/cjs/services/Memoization.js.map +1 -0
  80. package/lib/cjs/services/Product.js +127 -0
  81. package/lib/cjs/services/Product.js.map +1 -0
  82. package/lib/cjs/services/Recommender.js +83 -0
  83. package/lib/cjs/services/Recommender.js.map +1 -0
  84. package/lib/cjs/services/Result.js +220 -0
  85. package/lib/cjs/services/Result.js.map +1 -0
  86. package/lib/cjs/services/Template.js +43 -0
  87. package/lib/cjs/services/Template.js.map +1 -0
  88. package/lib/cjs/services/index.js +28 -0
  89. package/lib/cjs/services/index.js.map +1 -0
  90. package/lib/cjs/services/mock/Bidder.js +3 -0
  91. package/lib/cjs/services/mock/Bidder.js.map +1 -0
  92. package/lib/cjs/services/mock/index.js +18 -0
  93. package/lib/cjs/services/mock/index.js.map +1 -0
  94. package/lib/esm/Api.js +183 -0
  95. package/lib/esm/Api.js.map +1 -0
  96. package/lib/esm/helpers/Generator.js +42 -0
  97. package/lib/esm/helpers/Generator.js.map +1 -0
  98. package/lib/esm/helpers/Handlebars.js +294 -0
  99. package/lib/esm/helpers/Handlebars.js.map +1 -0
  100. package/lib/esm/helpers/NativeRequestBuilder.js +169 -0
  101. package/lib/esm/helpers/NativeRequestBuilder.js.map +1 -0
  102. package/lib/esm/helpers/RequestBuilder.js +157 -0
  103. package/lib/esm/helpers/RequestBuilder.js.map +1 -0
  104. package/lib/esm/helpers/TryGet.js +10 -0
  105. package/lib/esm/helpers/TryGet.js.map +1 -0
  106. package/lib/esm/helpers/Window.js +20 -0
  107. package/lib/esm/helpers/Window.js.map +1 -0
  108. package/lib/esm/helpers/index.js +8 -0
  109. package/lib/esm/helpers/index.js.map +1 -0
  110. package/lib/esm/helpers/response/Banner.js +3 -0
  111. package/lib/esm/helpers/response/Banner.js.map +1 -0
  112. package/lib/esm/helpers/response/BuiltResponse.js +22 -0
  113. package/lib/esm/helpers/response/BuiltResponse.js.map +1 -0
  114. package/lib/esm/helpers/response/Carousel.js +273 -0
  115. package/lib/esm/helpers/response/Carousel.js.map +1 -0
  116. package/lib/esm/helpers/response/Clickthrough.js +20 -0
  117. package/lib/esm/helpers/response/Clickthrough.js.map +1 -0
  118. package/lib/esm/helpers/response/ProductCard.js +189 -0
  119. package/lib/esm/helpers/response/ProductCard.js.map +1 -0
  120. package/lib/esm/helpers/response/Video.js +3 -0
  121. package/lib/esm/helpers/response/Video.js.map +1 -0
  122. package/lib/esm/helpers/response/index.js +7 -0
  123. package/lib/esm/helpers/response/index.js.map +1 -0
  124. package/lib/esm/index.js +5 -3460
  125. package/lib/esm/index.js.map +1 -54
  126. package/lib/esm/models/dynamic/DynamicZone.js +11 -0
  127. package/lib/esm/models/dynamic/DynamicZone.js.map +1 -0
  128. package/lib/esm/models/dynamic/index.js +2 -0
  129. package/lib/esm/models/dynamic/index.js.map +1 -0
  130. package/lib/esm/models/index.js +6 -0
  131. package/lib/esm/models/index.js.map +1 -0
  132. package/lib/esm/models/retail/Configuration.js +9 -0
  133. package/lib/esm/models/retail/Configuration.js.map +1 -0
  134. package/lib/esm/models/retail/Product.js +3 -0
  135. package/lib/esm/models/retail/Product.js.map +1 -0
  136. package/lib/esm/models/retail/Recommended.js +2 -0
  137. package/lib/esm/models/retail/Recommended.js.map +1 -0
  138. package/lib/esm/models/retail/index.js +4 -0
  139. package/lib/esm/models/retail/index.js.map +1 -0
  140. package/lib/esm/models/rtb/BidRequest.js +17 -0
  141. package/lib/esm/models/rtb/BidRequest.js.map +1 -0
  142. package/lib/esm/models/rtb/BidResponse.js +2 -0
  143. package/lib/esm/models/rtb/BidResponse.js.map +1 -0
  144. package/lib/esm/models/rtb/NativeRequest.js +119 -0
  145. package/lib/esm/models/rtb/NativeRequest.js.map +1 -0
  146. package/lib/esm/models/rtb/NativeResponse.js +23 -0
  147. package/lib/esm/models/rtb/NativeResponse.js.map +1 -0
  148. package/lib/esm/models/rtb/index.js +5 -0
  149. package/lib/esm/models/rtb/index.js.map +1 -0
  150. package/lib/esm/models/tracking/Geo.js +2 -0
  151. package/lib/esm/models/tracking/Geo.js.map +1 -0
  152. package/lib/esm/models/tracking/index.js +2 -0
  153. package/lib/esm/models/tracking/index.js.map +1 -0
  154. package/lib/esm/models/vast/Vast.js +3 -0
  155. package/lib/esm/models/vast/Vast.js.map +1 -0
  156. package/lib/esm/models/vast/index.js +2 -0
  157. package/lib/esm/models/vast/index.js.map +1 -0
  158. package/lib/esm/services/Bidder.js +119 -0
  159. package/lib/esm/services/Bidder.js.map +1 -0
  160. package/lib/esm/services/Configuration.js +56 -0
  161. package/lib/esm/services/Configuration.js.map +1 -0
  162. package/lib/esm/services/Device.js +232 -0
  163. package/lib/esm/services/Device.js.map +1 -0
  164. package/lib/esm/services/Dynamic.js +120 -0
  165. package/lib/esm/services/Dynamic.js.map +1 -0
  166. package/lib/esm/services/Geo.js +30 -0
  167. package/lib/esm/services/Geo.js.map +1 -0
  168. package/lib/esm/services/Logger.js +52 -0
  169. package/lib/esm/services/Logger.js.map +1 -0
  170. package/lib/esm/services/Memoization.js +13 -0
  171. package/lib/esm/services/Memoization.js.map +1 -0
  172. package/lib/esm/services/Product.js +120 -0
  173. package/lib/esm/services/Product.js.map +1 -0
  174. package/lib/esm/services/Recommender.js +78 -0
  175. package/lib/esm/services/Recommender.js.map +1 -0
  176. package/lib/esm/services/Result.js +199 -0
  177. package/lib/esm/services/Result.js.map +1 -0
  178. package/lib/esm/services/Template.js +38 -0
  179. package/lib/esm/services/Template.js.map +1 -0
  180. package/lib/esm/services/index.js +12 -0
  181. package/lib/esm/services/index.js.map +1 -0
  182. package/lib/esm/services/mock/Bidder.js +2 -0
  183. package/lib/esm/services/mock/Bidder.js.map +1 -0
  184. package/lib/esm/services/mock/index.js +2 -0
  185. package/lib/esm/services/mock/index.js.map +1 -0
  186. package/lib/types/Api.d.ts +5 -5
  187. package/lib/types/helpers/Handlebars.d.ts +58 -15
  188. package/lib/types/helpers/NativeRequestBuilder.d.ts +1 -1
  189. package/lib/types/helpers/RequestBuilder.d.ts +1 -1
  190. package/lib/types/helpers/TryGet.d.ts +1 -1
  191. package/lib/types/helpers/Window.d.ts +2 -2
  192. package/lib/types/helpers/response/Banner.d.ts +1 -1
  193. package/lib/types/helpers/response/BuiltResponse.d.ts +1 -1
  194. package/lib/types/helpers/response/Carousel.d.ts +1 -1
  195. package/lib/types/helpers/response/Clickthrough.d.ts +1 -1
  196. package/lib/types/helpers/response/ProductCard.d.ts +3 -3
  197. package/lib/types/helpers/response/Video.d.ts +2 -2
  198. package/lib/types/services/Bidder.d.ts +3 -3
  199. package/lib/types/services/Configuration.d.ts +1 -1
  200. package/lib/types/services/Dynamic.d.ts +6 -6
  201. package/lib/types/services/Geo.d.ts +1 -1
  202. package/lib/types/services/Product.d.ts +1 -1
  203. package/lib/types/services/Template.d.ts +3 -3
  204. package/package.json +41 -33
  205. package/lib/index.js +0 -1
  206. package/lib/index.js.map +0 -1
  207. package/lib/types/constant-values/index.d.ts +0 -46
  208. package/lib/types/errors/index.d.ts +0 -3
  209. package/lib/types/helpers/generators/CollectN.d.ts +0 -2
  210. package/lib/types/helpers/generators/index.d.ts +0 -1
  211. package/lib/types/helpers/handlebars/index.d.ts +0 -119
  212. package/lib/types/helpers/requests/RequestBuilder.d.ts +0 -124
  213. package/lib/types/helpers/requests/SimpleBannerRequest.d.ts +0 -26
  214. package/lib/types/helpers/requests/index.d.ts +0 -2
  215. package/lib/types/helpers/responses/BuildBannerResponse.d.ts +0 -10
  216. package/lib/types/helpers/responses/BuildNativeResponse.d.ts +0 -21
  217. package/lib/types/helpers/responses/BuildVideoResponse.d.ts +0 -0
  218. package/lib/types/helpers/responses/ClickthroughHelpers.d.ts +0 -2
  219. package/lib/types/helpers/responses/VastHelpers.d.ts +0 -4
  220. package/lib/types/helpers/responses/index.d.ts +0 -4
  221. package/lib/types/middleware/DeviceMiddleware.d.ts +0 -3
  222. package/lib/types/middleware/GeoMiddleware.d.ts +0 -3
  223. package/lib/types/middleware/IdentityMiddleware.d.ts +0 -4
  224. package/lib/types/middleware/index.d.ts +0 -3
  225. package/lib/types/models/retail/IProductInformation.d.ts +0 -37
  226. package/lib/types/models/retail/IPublisherConfiguration.d.ts +0 -64
  227. package/lib/types/models/retail/IRecommenderResponse.d.ts +0 -10
  228. package/lib/types/models/rtb/IBidRequest.d.ts +0 -399
  229. package/lib/types/models/rtb/IBidResponse.d.ts +0 -47
  230. package/lib/types/models/rtb/native/Constants.d.ts +0 -60
  231. package/lib/types/models/rtb/native/INativeRequest.d.ts +0 -54
  232. package/lib/types/models/rtb/native/INativeResponse.d.ts +0 -60
  233. package/lib/types/models/rtb/native/NativeConstants.d.ts +0 -120
  234. package/lib/types/models/rtb/native/NativeRequestBuilder.d.ts +0 -158
  235. package/lib/types/models/rtb/native/index.d.ts +0 -4
  236. package/lib/types/models/tracking/IEvents.d.ts +0 -82
  237. package/lib/types/models/tracking/IGeoContext.d.ts +0 -14
  238. package/lib/types/models/tracking/IUserID.d.ts +0 -1
  239. package/lib/types/services/OverrideService.d.ts +0 -10
  240. package/lib/types/services/logger/ILoggerService.d.ts +0 -39
  241. package/lib/types/services/logger/LocalLoggerService.d.ts +0 -19
  242. package/lib/types/services/logger/index.d.ts +0 -2
  243. package/lib/types/services/product-feed/IProductFeedService.d.ts +0 -5
  244. package/lib/types/services/product-feed/SurfsideProductFeedService.d.ts +0 -11
  245. package/lib/types/services/product-feed/index.d.ts +0 -2
  246. package/lib/types/services/recommender/IRecommenderService.d.ts +0 -47
  247. package/lib/types/services/recommender/SurfsideRecommenderService.d.ts +0 -31
  248. package/lib/types/services/recommender/index.d.ts +0 -2
  249. package/lib/types/services/rtb/bidder/IBidderService.d.ts +0 -12
  250. package/lib/types/services/rtb/bidder/SurfsideBidderService.d.ts +0 -28
  251. package/lib/types/services/rtb/bidder/index.d.ts +0 -2
  252. package/lib/types/services/rtb/configuration/IConfigurationService.d.ts +0 -14
  253. package/lib/types/services/rtb/configuration/SurfsideConfigurationService.d.ts +0 -29
  254. package/lib/types/services/rtb/configuration/index.d.ts +0 -2
  255. package/lib/types/services/rtb/index.d.ts +0 -2
  256. package/lib/types/services/tracking/device/DeviceOverrideService.d.ts +0 -8
  257. package/lib/types/services/tracking/device/IDeviceService.d.ts +0 -4
  258. package/lib/types/services/tracking/device/SurfsideDeviceService.d.ts +0 -16
  259. package/lib/types/services/tracking/device/index.d.ts +0 -3
  260. package/lib/types/services/tracking/events/IEventService.d.ts +0 -5
  261. package/lib/types/services/tracking/events/SurfsideEventService.d.ts +0 -42
  262. package/lib/types/services/tracking/events/index.d.ts +0 -2
  263. package/lib/types/services/tracking/geo/GeoOverrideService.d.ts +0 -8
  264. package/lib/types/services/tracking/geo/IGeoService.d.ts +0 -12
  265. package/lib/types/services/tracking/geo/SurfsideGeoService.d.ts +0 -7
  266. package/lib/types/services/tracking/geo/index.d.ts +0 -3
  267. package/lib/types/services/tracking/index.d.ts +0 -4
  268. package/lib/types/services/tracking/user/IUserIDService.d.ts +0 -4
  269. package/lib/types/services/tracking/user/SurfsideUserIDService.d.ts +0 -7
  270. package/lib/types/services/tracking/user/UserOverrideService.d.ts +0 -8
  271. package/lib/types/services/tracking/user/index.d.ts +0 -3
  272. package/lib/types/utils/Protocol.d.ts +0 -1
  273. package/lib/types/utils/Rendering.d.ts +0 -44
  274. package/lib/types/utils/index.d.ts +0 -2
@@ -1,54 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../node_modules/handlebars/dist/cjs/handlebars/utils.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/exception.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/each.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/if.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/log.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/with.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/decorators.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/logger.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/base.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/safe-string.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/runtime.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/no-conflict.js", "../../../../node_modules/handlebars/dist/cjs/handlebars.runtime.js", "../../../../node_modules/handlebars/runtime.js", "../../src/models/rtb/BidRequest.ts", "../../src/models/rtb/NativeRequest.ts", "../../src/models/rtb/NativeResponse.ts", "../../src/services/Logger.ts", "../../src/services/Result.ts", "../../src/services/Geo.ts", "../../src/services/Device.ts", "../../src/services/Configuration.ts", "../../src/services/Bidder.ts", "../../src/services/Product.ts", "../../src/services/Recommender.ts", "../../src/helpers/NativeRequestBuilder.ts", "../../src/helpers/RequestBuilder.ts", "../../src/helpers/response/BuiltResponse.ts", "../../src/helpers/response/Clickthrough.ts", "../../src/helpers/Generator.ts", "../../src/helpers/TryGet.ts", "../../src/helpers/response/ProductCard.ts", "../../src/helpers/Handlebars.ts", "../../src/Api.ts", "../../src/helpers/response/Carousel.ts", "../../src/helpers/Window.ts", "../../src/index.ts"],
4
- "sourcesContent": [
5
- "'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '`': '&#x60;',\n '=': '&#x3D;'\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n",
6
- "'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n",
7
- "'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n",
8
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (typeof Symbol === 'function' && context[Symbol.iterator]) {\n var newContext = [];\n var iterator = context[Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (key) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbkUsWUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFlBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb250ZXh0W1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGNvbnRleHRbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICBmb3IgKGxldCBpdCA9IGl0ZXJhdG9yLm5leHQoKTsgIWl0LmRvbmU7IGl0ID0gaXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgbmV3Q29udGV4dC5wdXNoKGl0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0ID0gbmV3Q29udGV4dDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRldGVjdFxuICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAvLyBhbiBpdGVybWVkaWF0ZSBrZXlzIGFycmF5LlxuICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIHJldCA9IGludmVyc2UodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n",
9
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n",
10
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n",
11
- "'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n",
12
- "'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n",
13
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n",
14
- "'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n",
15
- "'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n",
16
- "'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n",
17
- "'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n",
18
- "'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../utils');\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n",
19
- "'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMvQyxXQUFXOzs7O0FBRTlCLElBQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFdEMsU0FBUyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUU7QUFDdkQsTUFBSSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELHdCQUFzQixDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM5Qyx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFbkQsTUFBSSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVuRCwwQkFBd0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRTlDLFNBQU87QUFDTCxjQUFVLEVBQUU7QUFDVixlQUFTLEVBQUUsNkNBQ1Qsd0JBQXdCLEVBQ3hCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FDdEM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQyw2QkFBNkI7S0FDM0Q7QUFDRCxXQUFPLEVBQUU7QUFDUCxlQUFTLEVBQUUsNkNBQ1Qsc0JBQXNCLEVBQ3RCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FDbkM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQywwQkFBMEI7S0FDeEQ7R0FDRixDQUFDO0NBQ0g7O0FBRU0sU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUN4RSxNQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUNoQyxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDakUsTUFBTTtBQUNMLFdBQU8sY0FBYyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztHQUNwRTtDQUNGOztBQUVELFNBQVMsY0FBYyxDQUFDLHlCQUF5QixFQUFFLFlBQVksRUFBRTtBQUMvRCxNQUFJLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDbkUsV0FBTyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDO0dBQ25FO0FBQ0QsTUFBSSx5QkFBeUIsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO0FBQ3hELFdBQU8seUJBQXlCLENBQUMsWUFBWSxDQUFDO0dBQy9DO0FBQ0QsZ0NBQThCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0MsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFRCxTQUFTLDhCQUE4QixDQUFDLFlBQVksRUFBRTtBQUNwRCxNQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMzQyxvQkFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsd0JBQU8sR0FBRyxDQUNSLE9BQU8sRUFDUCxpRUFBK0QsWUFBWSxvSUFDSCxvSEFDMkMsQ0FDcEgsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxxQkFBcUIsR0FBRztBQUN0QyxRQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWSxFQUFJO0FBQ3BELFdBQU8sZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7R0FDdkMsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoicHJvdG8tYWNjZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTmV3TG9va3VwT2JqZWN0IH0gZnJvbSAnLi9jcmVhdGUtbmV3LWxvb2t1cC1vYmplY3QnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBsb2dnZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChydW50aW1lT3B0aW9ucykge1xuICBsZXQgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ2NvbnN0cnVjdG9yJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVHZXR0ZXJfXyddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lU2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2xvb2t1cEdldHRlcl9fJ10gPSBmYWxzZTtcblxuICBsZXQgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gIGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdFsnX19wcm90b19fJ10gPSBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHdoaXRlbGlzdDogY3JlYXRlTmV3TG9va3VwT2JqZWN0KFxuICAgICAgICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b1Byb3BlcnRpZXNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9Qcm9wZXJ0aWVzQnlEZWZhdWx0XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCxcbiAgICAgICAgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvTWV0aG9kc1xuICAgICAgKSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHRcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBwcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkge1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wubWV0aG9kcywgcHJvcGVydHlOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSwgcHJvcGVydHlOYW1lKSB7XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKSB7XG4gIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coXG4gICAgICAnZXJyb3InLFxuICAgICAgYEhhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCIke3Byb3BlcnR5TmFtZX1cIiBiZWNhdXNlIGl0IGlzIG5vdCBhbiBcIm93biBwcm9wZXJ0eVwiIG9mIGl0cyBwYXJlbnQuXFxuYCArXG4gICAgICAgIGBZb3UgY2FuIGFkZCBhIHJ1bnRpbWUgb3B0aW9uIHRvIGRpc2FibGUgdGhlIGNoZWNrIG9yIHRoaXMgd2FybmluZzpcXG5gICtcbiAgICAgICAgYFNlZSBodHRwczovL2hhbmRsZWJhcnNqcy5jb20vYXBpLXJlZmVyZW5jZS9ydW50aW1lLW9wdGlvbnMuaHRtbCNvcHRpb25zLXRvLWNvbnRyb2wtcHJvdG90eXBlLWFjY2VzcyBmb3IgZGV0YWlsc2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldExvZ2dlZFByb3BlcnRpZXMoKSB7XG4gIE9iamVjdC5rZXlzKGxvZ2dlZFByb3BlcnRpZXMpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICBkZWxldGUgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICB9KTtcbn1cbiJdfQ==\n",
20
- "'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.8';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy44JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n",
21
- "// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n",
22
- "'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n",
23
- "'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n",
24
- "/* global globalThis */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n // https://mathiasbynens.be/notes/globalthis\n (function () {\n if (typeof globalThis === 'object') return;\n Object.prototype.__defineGetter__('__magic__', function () {\n return this;\n });\n __magic__.globalThis = __magic__; // eslint-disable-line no-undef\n delete Object.prototype.__magic__;\n })();\n\n var $Handlebars = globalThis.Handlebars;\n\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (globalThis.Handlebars === Handlebars) {\n globalThis.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOzs7QUFHbEMsR0FBQyxZQUFXO0FBQ1YsUUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsT0FBTztBQUMzQyxVQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxZQUFXO0FBQ3hELGFBQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQyxDQUFDO0FBQ0gsYUFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDakMsV0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztHQUNuQyxDQUFBLEVBQUcsQ0FBQzs7QUFFTCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDOzs7QUFHMUMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDeEMsZ0JBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQ3JDO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGdsb2JhbFRoaXMgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKEhhbmRsZWJhcnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2dsb2JhbHRoaXNcbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oJ19fbWFnaWNfXycsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gICAgX19tYWdpY19fLmdsb2JhbFRoaXMgPSBfX21hZ2ljX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICBkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21hZ2ljX187XG4gIH0pKCk7XG5cbiAgY29uc3QgJEhhbmRsZWJhcnMgPSBnbG9iYWxUaGlzLkhhbmRsZWJhcnM7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGdsb2JhbFRoaXMuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgZ2xvYmFsVGhpcy5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19\n",
25
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n",
26
- "// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n",
27
- "export interface IBrandVersion {\n brand: string;\n version?: string[];\n ext?: any;\n}\n\nexport interface IUserAgent {\n browsers?: IBrandVersion[];\n platform?: IBrandVersion;\n mobile?: number;\n architecture?: string;\n bitness?: string;\n model?: string;\n source?: number;\n ext?: any;\n}\n\nexport const AgentTypes = {\n Session: 1,\n Device: 2,\n User: 3\n} as const;\n\nexport interface IUid {\n id: string;\n atype?: number;\n ext?: any;\n}\n\nexport interface IEid {\n source: string;\n uids: IUid[];\n ext?: any;\n}\n\nexport interface ISupplyChainNode {\n asi?: string;\n sid?: string;\n hp?: number;\n rid?: string;\n name?: string;\n domain?: string;\n ext?: any;\n}\n\nexport interface ISupplyChain {\n complete: number;\n nodes: ISupplyChainNode[];\n ver: string;\n ext?: any;\n}\n\nexport interface IChannel {\n id?: string;\n name?: string;\n domain?: string;\n ext?: any;\n}\n\nexport interface INetwork {\n id?: string;\n name?: string;\n domain?: string;\n ext?: any;\n}\n\nexport interface ISegment {\n id?: string;\n name?: string;\n value?: string;\n ext?: any;\n}\n\nexport interface IData {\n id?: string;\n name?: string;\n segment?: ISegment[];\n ext?: any;\n}\n\nexport interface IUser {\n id?: string;\n buyeruid?: string;\n yob?: number;\n gender?: string;\n keywords?: string;\n kwarray?: string[];\n customdata?: string;\n geo?: IGeo;\n data?: IData[];\n cconsent?: string;\n eids?: IEid[];\n ext?: any;\n}\n\nexport interface IGeo {\n lat?: number;\n lon?: number;\n type?: number;\n accuracy?: number;\n lastfix?: number;\n ipservice?: number;\n country?: string;\n region?: string;\n regionfips104?: string;\n metro?: string;\n city?: string;\n zip?: string;\n utcoffset?: number;\n ext?: any;\n}\n\nexport const AdCom10DeviceTypes = {\n Mobile: 1,\n PC: 2,\n CTV: 3,\n Phone: 4,\n Tablet: 5,\n Connected: 6,\n SetTop: 7,\n OOH: 8\n} as const;\n\nexport interface IDevice {\n ua?: string;\n geo?: IGeo;\n dnt?: number;\n lmt?: number;\n ip?: string;\n ipv6?: string;\n devicetype?: number;\n make?: string;\n model?: string;\n os?: string;\n osv?: string;\n hwv?: string;\n h?: number;\n w?: number;\n ppi?: number;\n pxratio?: number;\n js?: number;\n geofetch?: number;\n flashver?: string;\n language?: string;\n lanbg?: string;\n carrier?: string;\n mccmnc?: string;\n connectiontype?: number;\n ifa?: string;\n didsha1?: string;\n didmd5?: string;\n dpidsha1?: string;\n dpidmd5?: string;\n macsha1?: string;\n macmd5?: string;\n ext?: any;\n sua?: IUserAgent;\n}\n\nexport interface IProducer {\n id?: string;\n name?: string;\n cattax?: number[];\n cat?: string[];\n domain?: string;\n ext?: any;\n}\n\nexport interface IContent {\n id?: string;\n episode?: number;\n title?: string;\n series?: string;\n season?: string;\n artist?: string;\n genre?: string;\n album?: string;\n isrc?: string;\n producer?: IProducer;\n url?: string;\n cattax?: number[];\n cat?: string[];\n prodq?: number;\n videoquality?: number;\n context?: number;\n contentrating?: string;\n userrating?: string;\n qagmediarating?: number;\n keywords?: string;\n kwarray?: string[];\n livestream?: number;\n sourcerelationship?: number;\n len?: number;\n language?: string;\n langb?: string;\n embeddable?: number;\n data?: IData[];\n network?: INetwork;\n channel?: IChannel;\n ext?: any;\n}\n\nexport interface IPublisher {\n id?: string;\n name?: string;\n cattax?: number[];\n cat?: string[];\n domain?: string;\n ext?: any;\n}\n\nexport interface IApp {\n id?: string;\n name?: string;\n bundle?: string;\n domain?: string;\n storeurl?: string;\n cat?: string[];\n sectioncat?: string[];\n pagecat?: string[];\n ver?: string;\n privacypolicy?: number;\n paid?: number;\n publisher?: IPublisher;\n content?: IContent;\n keywords?: string;\n kwarray?: string[];\n ext?: any;\n}\n\nexport interface ISite {\n id?: string;\n name?: string;\n domain?: string;\n cat?: string[];\n sectioncat?: string[];\n pagecat?: string[];\n page?: string;\n ref?: string;\n search?: string;\n mobile?: number;\n privacypolicy?: number;\n publisher?: IPublisher;\n content?: IContent;\n keywords?: string;\n kwarray?: string[];\n ext?: any;\n}\n\nexport interface IDeal {\n id: string;\n bidfloor: number;\n bidfloorcur?: string;\n at?: number;\n wseat?: string[];\n wadomain?: string[];\n ext?: any;\n}\n\nexport interface IPmp {\n private_auction?: number;\n deals?: IDeal[];\n ext?: any;\n}\n\nexport interface IFormat {\n w?: number;\n h?: number;\n wratio?: number;\n hratio?: number;\n wmin?: number;\n ext?: any;\n}\n\nexport interface INative {\n request: string;\n ver?: string;\n api?: number[];\n battr?: number[];\n ext?: any;\n}\n\nexport interface IAudio {\n mimes: string[];\n minduration?: number;\n maxduration?: number;\n poddur?: number;\n protocols?: number[];\n startdelay?: number;\n rqddurs?: number[];\n podid?: string;\n podseq?: number;\n sequence?: number;\n slotinpod?: number;\n mincpmpersec?: number;\n battr?: number[];\n maxextended?: number;\n minbitrate?: number;\n maxbitrate?: number;\n delivery?: number[];\n companionad?: IBanner[];\n api?: number[];\n companiontype?: number[];\n maxseq?: number;\n feed?: number;\n stitched?: number;\n nvol?: number;\n ext?: any;\n}\n\nexport interface IVideo {\n mimes: string[];\n minduration?: number;\n maxduration?: number;\n startdelay?: number;\n maxseq?: number;\n poddur?: number;\n protocols?: number[];\n w?: number;\n h?: number;\n podid?: string;\n podseq?: number;\n rqddurs?: number[];\n placement?: number;\n linearity?: number;\n skip?: number;\n skipmin?: number;\n skipafter?: number;\n sequence?: number;\n slotinpod?: number;\n mincpmpersec?: number;\n battr?: number[];\n maxextended?: number;\n minbitrate?: number;\n maxbitrate?: number;\n boxingallowed?: number;\n playbackmethod?: number[];\n playbackend?: number;\n delivery?: number[];\n pos?: number;\n companionad?: IBanner[];\n api?: number[];\n companiontype?: number[];\n ext?: any;\n}\n\nexport interface IBanner {\n format?: IFormat[];\n w?: number;\n h?: number;\n btype?: number[];\n battr?: number[];\n pos?: number;\n mimes?: string[];\n topframe?: number;\n expdir?: number[];\n api?: number[];\n id?: string;\n ext?: any;\n}\n\nexport interface IMetric {\n type: string;\n value: number;\n vendor?: string;\n ext?: any;\n}\n\nexport interface IImp {\n id: string;\n metric?: IMetric[];\n banner?: IBanner;\n video?: IVideo;\n audio?: IAudio;\n native?: INative;\n pmp?: IPmp;\n displaymanager?: string;\n displaymanagerver?: string;\n instl?: number;\n tagid?: string;\n bidfloor?: number;\n bidfloorcur?: string;\n clickbrowser?: number;\n secure?: number;\n iframebuster?: string[];\n rwdd?: number;\n ssai?: number;\n exp?: number;\n ext?: ISurfExtension;\n}\n\nexport interface IRegs {\n coppa?: number;\n ext?: any;\n gdpr?: number;\n us_privacy?: string;\n}\n\nexport interface ISource {\n fd?: number;\n tid?: string;\n pchain?: string;\n schain?: ISupplyChain;\n ext?: any;\n}\n\nexport interface IBidRequest {\n id: string;\n imp: IImp[];\n site?: ISite;\n app?: IApp;\n device?: IDevice;\n user?: IUser;\n test?: number;\n at?: number;\n tmax?: number;\n wseat?: string[];\n bseat?: string[];\n allimps?: number;\n cur?: string[];\n wlang?: string[];\n wlangb?: string[];\n bcat?: string[];\n cattax?: number[];\n badv?: string[];\n bapp?: string[];\n source?: ISource;\n regs?: IRegs;\n ext?: ISurfExtension;\n}\n\nexport interface ISurfExtension {\n accountId: string;\n siteId: string;\n channelId: string;\n locationId: string;\n zoneId: string;\n storeId: string;\n placementId: string;\n keywords?: string[]\n};\n",
28
- "export const NativePosition = {\n Unknown: 0,\n AboveTheFold: 1,\n BelowTheFold: 3,\n Header: 4,\n Footer: 5,\n Sidebar: 6,\n FullScreen: 7\n} as const;\n\n/**\n * The type of the image within native ad (icon vs main image)\n */\nexport const NativeImageTypes = {\n Icon: 1,\n Main: 3\n} as const;\n\n/**\n * The type ID for each native asset type. IDs above 500 are surfside-specific fields, all\n * others are OpenRTB Native Ad Spec 1.2 fields.\n */\nexport const NativeDataTypes = {\n Sponsored: 1,\n Desc: 2,\n Rating: 3,\n Likes: 4,\n Downloads: 5,\n Price: 6,\n SalePrice: 7,\n Phone: 8,\n Address: 9,\n Desc2: 10,\n DisplayURL: 11,\n CTAText: 12,\n\n /* Surfside Specific codes */\n SurfStrain: 500,\n SurfTHC: 501,\n SurfCBD: 502,\n SurfCategory: 503,\n SurfMetaProduct: 599\n} as const;\n\n/**\n * The ID for each field within a surfside native ad request. The Asset ID matches the asset type, for simplicity.\n */\nexport const NativeAssetId = {\n Title: 0,\n Image: 1,\n Sponsored: 2,\n Desc: 3,\n Rating: 4,\n Price: 5,\n SalePrice: 6,\n DisplayURL: 7,\n CTAText: 8,\n Video: 9,\n\n SurfStrain: 500,\n SurfTHC: 501,\n SurfCBD: 502,\n SurfCategory: 503,\n SurfMetaProduct: 599\n} as const;\n\n/**\n * Event types which can be tracked by the native ad unit\n */\nexport const EventTypes = {\n Imp: 1,\n ViewableMRC50: 2,\n ViewableMRC100: 3,\n ViewableVIDEO50: 4\n} as const;\n\n/**\n * The context of the page for the native ad unit, i.e what type of content is being displayed\n */\nexport const ContextTypes = {\n Content: 1,\n Social: 2,\n Product: 3\n} as const;\n\n/**\n * The sub-type of the context\n */\nexport const ContextSubTypes = {\n General: 10,\n Article: 11,\n Video: 12,\n Audio: 13,\n Image: 14,\n UserGenerated: 15,\n GeneralSocial: 20,\n Email: 21,\n Chat: 22,\n Product: 30,\n Application: 31,\n ProductReviews: 32\n} as const;\n\n/**\n * The format of the ad unit, i.e: what type of ad is being displayed and where\n */\nexport const PlacementTypes = {\n InFeed: 1,\n Atomic: 2,\n OutsideCore: 3,\n Recommendation: 4\n} as const;\n\n/**\n * Presets for default video MIME types\n */\nexport const VideoMimes = {\n MP4: 'video/mp4',\n WEBM: 'video/webm'\n} as const;\n\n/**\n * The method used to track events, 1x1 pixel of Javascript tag\n */\nexport const EventTrackingMethods = {\n Img: 1,\n JS: 2\n} as const;\n\nexport interface INativeRequest {\n ver?: string;\n context?: number;\n contextsubtype?: number;\n plcmttype?: number;\n plcmtcnt?: number;\n seq?: number;\n assets: IAssetObject[];\n aurlsupport?: number;\n durlsupport?: number;\n eventtrackers?: IEventTrackerRequestObject[];\n privacy?: number;\n ext?: any;\n}\n\nexport interface IAssetObject {\n id: number;\n required?: number;\n title?: ITitleRequestObject;\n img?: IImageRequestObject;\n video?: IVideoRequestObject;\n data?: IDataRequestObject;\n ext?: any;\n}\n\nexport interface ITitleRequestObject {\n len: number;\n ext?: any;\n}\n\nexport interface IImageRequestObject {\n type?: number;\n w?: number;\n wmin?: number;\n h?: number;\n hmin?: number;\n mimes?: string[];\n ext?: any;\n}\n\nexport interface IVideoRequestObject {\n mimes: number[] | string[];\n minduration: number;\n maxduration: number;\n protocols: number[];\n ext?: any;\n}\n\nexport interface IDataRequestObject {\n type: number;\n len?: number;\n ext?: any;\n}\n\nexport interface IEventTrackerRequestObject {\n event: number;\n methods: number[];\n ext?: any;\n}\n",
29
- "import {\n type IProductInformation,\n NativeAssetId,\n NativeImageTypes,\n EventTypes\n} from '../../models';\n\nexport interface INativeResponse {\n native: INativeResponseDetails;\n}\n\nexport interface INativeResponseDetails {\n ver?: string;\n assets?: IAssetResponseObject[];\n assetsurl?: string;\n dcourl?: string;\n link: ILinkResponseObject;\n imptrackers?: string[];\n jstracker?: string;\n eventtrackers?: IEventTrackerResponseObject[];\n privacy?: string;\n ext?: any;\n}\n\nexport interface IAssetResponseObject {\n id?: number;\n required?: number;\n title?: ITitleResponseObject;\n img?: IImageResponseObject;\n data?: IDataResponseObject;\n video?: IVideoResponseObject;\n link?: ILinkResponseObject;\n ext?: any;\n}\n\nexport interface ITitleResponseObject {\n text: string;\n len?: number;\n ext?: any;\n}\n\nexport interface IImageResponseObject {\n type: number;\n url: string;\n w?: number;\n h?: number;\n ext?: any;\n}\n\nexport interface IDataResponseObject {\n type?: number;\n value: string;\n ext?: any;\n}\n\nexport interface IVideoResponseObject {\n vasttag: string;\n}\n\nexport interface ILinkResponseObject {\n url: string;\n clicktrackers?: string[];\n fallback?: string;\n ext?: any;\n}\n\nexport interface IEventTrackerResponseObject {\n event: number;\n method: number;\n url?: string;\n customdata?: any;\n ext?: any;\n}\n\nconst findDataAssetByType = (assets: IAssetResponseObject[] | undefined, id: number): string | undefined =>\n assets?.find((asset) => asset.id === id)?.data?.value;\n\nexport function NativeResponseToProductInformation(\n native: INativeResponse\n): IProductInformation {\n const brand = findDataAssetByType(native.native.assets, NativeAssetId.Sponsored);\n return {\n image: native.native.assets?.find((asset) => asset.img?.type === NativeImageTypes.Main)?.img?.url,\n name: native.native.assets?.find((asset) => asset.title !== undefined)?.title?.text,\n\n price: findDataAssetByType(native.native.assets, NativeAssetId.Price),\n salePrice: findDataAssetByType(native.native.assets, NativeAssetId.SalePrice),\n thc: findDataAssetByType(native.native.assets, NativeAssetId.SurfTHC),\n cbd: findDataAssetByType(native.native.assets, NativeAssetId.SurfCBD),\n strain: findDataAssetByType(native.native.assets, NativeAssetId.SurfStrain),\n brand_name: brand,\n brandName: brand,\n productType: findDataAssetByType(native.native.assets, NativeAssetId.SurfCategory),\n details: findDataAssetByType(native.native.assets, NativeAssetId.Desc),\n cta: findDataAssetByType(native.native.assets, NativeAssetId.CTAText),\n\n clickthroughUrl: native.native.link?.url ?? null,\n pixelUrl: native.native.eventtrackers?.find((event) => event.event === EventTypes.Imp)?.url\n };\n};\n",
30
- "export type LoggerFn = (...args: any[]) => void;\nexport type ContextFn = (...prefix: (string| undefined)[]) => IContextLogger;\n\nconst SURF_PREFIX: string = '%c[SURF]';\nconst SEPARATOR = ' ›';\nconst UNDEF = '[ undefined ]';\n\nconst LogColors = {\n /* Accents */\n Lavender: '#c0abff',\n UltraRed: '#f97585',\n SoftGold: '#f4bd5d',\n MagicMint: '#baf7db'\n} as const;\n\nexport interface ILogger {\n info: LoggerFn,\n debug: LoggerFn,\n warn: LoggerFn,\n error: LoggerFn,\n table: (data: any, properties?: string[]) => void;\n};\n\nexport interface IContextLogger extends ILogger {\n with: ContextFn,\n};\n\nconst log = (log: LoggerFn, args: any[], color: string): void => {\n args.unshift(\n `border-radius: 3px; margin-left: 10px; background: ${color}; font-size: 12px; font-weight: bold;`\n );\n args.unshift(SURF_PREFIX);\n log.apply(console, args);\n\n};\n\nconst info = (...args: any[]) => log(console.log, ['(Info)', ...args], LogColors.Lavender);\nconst warn = (...args: any[]) => log(console.warn, ['(Warning)', ...args], LogColors.SoftGold);\nconst debug = (...args: any[]) => log(console.debug, ['(Debug)', ...args], LogColors.MagicMint);\nconst error = (...args: any[]) => log(console.error, ['(Error)', ...args], LogColors.UltraRed);\n\nconst context = (logger: IContextLogger, ...prefix: (string| undefined)[]): IContextLogger => {\n const newPrefix = joinCtx(prefix) + SEPARATOR;\n const newLogger: IContextLogger = {\n info: logger.info.bind(undefined, newPrefix),\n warn: logger.warn.bind(undefined, newPrefix),\n debug: logger.debug.bind(undefined, newPrefix),\n error: logger.error.bind(undefined, newPrefix),\n table: console.table,\n with: logger.with\n };\n newLogger.with = context.bind(undefined, newLogger);\n return newLogger;\n};\n\nexport const InitLogger = (): IContextLogger => {\n const logger: Partial<IContextLogger> = {\n info,\n warn,\n debug,\n error,\n table: console.table\n };\n logger.with = context.bind(undefined, logger as IContextLogger);\n return logger as IContextLogger;\n};\n\nconst joinCtx = (ctx: (string | undefined)[]) => ctx.map(e => e === undefined ? UNDEF : e).join(SEPARATOR);\n\nexport const Ctx = (logger: ILogger | undefined): IContextLogger | undefined =>\n logger === undefined\n ? undefined\n : (logger as any)?.with === undefined\n ? { ...logger, with: () => Ctx(logger)! }\n : logger as IContextLogger;\n",
31
- "export type OkResult<T> = { ok: true, value: T };\nexport type ErrResult<E = Error> = { ok: false, error: E };\n\nexport type Result<T, E = Error> =\n | OkResult<T>\n | ErrResult<E>\n\nexport type AsyncResult<T, E = Error> = Promise<Result<T, E>>;\n\nexport const Ok = <T>(t: T): OkResult<T> => ({\n ok: true,\n value: t\n});\n\nexport const Err = <E = Error>(e: E): ErrResult<E> => ({\n ok: false,\n error: e\n});\n\nexport const TryDo = <T, E>(fn: () => T): Result<T, E> => {\n try {\n return Ok(fn());\n } catch (err) {\n return Err(err as E);\n }\n}\n\nexport const GetValue = <T, E = Error>(result: Result<T, E> | undefined): T | undefined =>\n result?.ok ? result.value : undefined;\n\nexport const ValueOr = <T, E = Error, U = T>(result: Result<T, E> | undefined, or: U): T | U =>\n result?.ok ? result.value : or;\n\nexport const GetValueOrThrow = <T>(result: Result<T, Error>): T => {\n if(result.ok) {\n return result.value;\n }\n throw result.error;\n};\n\nexport const AssertValue = GetValueOrThrow;\n\nexport const AllOrNone = <T>(results: Result<T, Error>[]): Result<T[]> => {\n const failed = results.filter(res => !res.ok).map(res => res.error);\n if(failed.length > 0) {\n return Err(new MultipleErrorsError(failed));\n }\n const success = results.filter(res => res.ok).map(res => res.value);\n return Ok(success);\n};\n\nexport const Some = <T>(results: Result<T, Error>[]): OkResult<T[]> => {\n const success = results.filter(res => res.ok).map(res => res.value);\n return Ok(success);\n};\n\nexport const Filter = <T>(...results: Result<T, Error>[]): [OkResult<T>[], ErrResult[]] => {\n const success = Some(results).value.map(val => Ok(val));\n const failed = results.filter(res => !res.ok);\n return [success, failed];\n};\n\nexport const AnyFailed = (...results: Result<any, Error>[]): [true, Error[]] | [false] => {\n const errors = results.filter(res => !res.ok).map(res => res.error);\n if(errors.length) {\n return [true, errors];\n }\n return [false];\n}\n\nexport class MultipleErrorsError extends Error {\n constructor(public readonly errors: Error[]) {\n super('Got multiple errors:\\n' +\n errors.map(err => '\\t' + err.message.substring(0, 32).padEnd(35, '.')).join('\\n')\n );\n }\n}\n\n\nexport interface IResultPipe<T, E = Error> {\n then: <U>(fn: (t: T) => U) => IResultPipe<U, E>;\n result: () => Result<T, E>;\n value: () => T | undefined;\n valueOr: <U>(or: U) => T | U;\n valueOrThrow: () => T;\n}\n\nexport const Pipe = <T, E = Error>(result: Result<T, E>): IResultPipe<T, E> => ({\n then: pipeThen(result),\n result: pipeResult(result),\n value: pipeValue(result),\n valueOr: pipeValueOr(result),\n valueOrThrow: pipeValueOrThrow(result)\n});\n\nconst pipeThen = <T, E>(result: Result<T, E>) => <U>(fn: (t: T) => U): IResultPipe<U, E> => {\n if(!result.ok) {\n return Pipe(result);\n }\n return Pipe(Ok(fn(result.value)));\n}\n\nconst pipeResult = <T, E>(result: Result<T, E>) => (): Result<T, E> => result;\nconst pipeValue = <T, E>(result: Result<T, E>) => (): T | undefined => GetValue(result);\nconst pipeValueOr = <T, E>(result: Result<T, E>) => <U>(or: U) => GetValue(result) ?? or;\nconst pipeValueOrThrow = <T, E>(result: Result<T, E>) => () => {\n if(result.ok) {\n return result.value;\n }\n throw result.error;\n}\n\nexport interface IAsyncResultPipe<T, E = Error> {\n then: <U>(fn: (t: T) => AsyncResult<U> | Result<U>) => IAsyncResultPipe<U, E>;\n result: () => AsyncResult<T, E>;\n value: () => Promise<T | undefined>;\n valueOr: <U>(or: U) => Promise<T | U>;\n valueOrThrow: () => Promise<T>;\n}\n\nexport const AsyncPipe = <T, E>(result: AsyncResult<T, E>): IAsyncResultPipe<T, E> => ({\n then: asyncPipeThen(result),\n result: asyncPipeResult(result),\n value: asyncPipeValue(result),\n valueOr: asyncPipeValueOr(result),\n valueOrThrow: asyncPipeValueOrThrow(result)\n})\n\nconst asyncPipeThen = <T, E>(result: AsyncResult<T, E>) =>\n <U>(fn: (t: T) => AsyncResult<U> | Result<U>): IAsyncResultPipe<U, E> => {\n const wrappedPromiseResult = result.then(unwrappedResult => {\n if(unwrappedResult.ok) {\n try {\n const fnRes = fn(unwrappedResult.value);\n return Promise.resolve(fnRes)\n .catch(Err)\n } catch (err) {\n return Err(err);\n }\n } else {\n return unwrappedResult;\n }\n })\n\n return AsyncPipe(wrappedPromiseResult);\n };\n\nconst asyncPipeResult = <T, E = Error>(result: AsyncResult<T, E>) => () => result;\nconst asyncPipeValue = <T, E>(result: AsyncResult<T, E>) => async () => {\n try {\n const res = await result;\n if(res.ok) {\n return res.value\n }\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nconst asyncPipeValueOr = <T, E>(result: AsyncResult<T, E>) => async <U>(or: U) => {\n try {\n const res = await result;\n if(res.ok) {\n return res.value;\n }\n return or;\n } catch {\n return or;\n }\n}\n\nconst asyncPipeValueOrThrow = <T, E>(result: AsyncResult<T, E>) => async () => {\n const res = await result;\n if(res.ok) {\n return res.value;\n }\n throw res.error;\n}\n \n\nexport type IResultStream<T, E = Error> = {\n map: <U>(fn: (t: T) => U) => IResultStream<U, E>,\n filter: (fn: (t: T) => boolean) => IResultStream<T, E>\n results: () => Result<T[], E>;\n value: () => T[] | undefined,\n valueOr: <U>(u: U) => T[] | U,\n valueOrThrow: () => T[],\n}\n\nexport const ResultStream = <T, E = Error>(results: Result<T[], E>): IResultStream<T, E> => ({\n map: streamMap(results),\n filter: streamFilter(results),\n results: streamResults(results),\n value: streamValue(results),\n valueOr: streamValueOr(results),\n valueOrThrow: streamValueOrThrow(results)\n})\n\nconst streamMap = <T, E>(results: Result<T[], E>) => <U>(fn: (t: T) => U): IResultStream<U, E> => {\n if(!results.ok) {\n return ResultStream(results);\n }\n return ResultStream(Ok(results.value.map(fn)));\n}\n\nconst streamFilter = <T, E>(results: Result<T[], E>) => (fn: (t: T) => boolean): IResultStream<T, E> => {\n if(!results.ok) {\n return ResultStream(results);\n }\n return ResultStream(Ok(results.value.filter(fn)));\n}\n\nconst streamResults = <T, E>(results: Result<T[], E>) => (): Result<T[], E> => results;\n\nconst streamValue = <T, E>(results: Result<T[], E>) => (): T[] | undefined => results.ok ? results.value : undefined;\n\nconst streamValueOr = <T, E>(results: Result<T[], E>,) => <U>(or: U): T[] | U => results.ok ? results.value : or;\n\nconst streamValueOrThrow = <T, E>(results: Result<T[], E>) => (): T[] => {\n if(results.ok){\n return results.value\n } else {\n throw results.error;\n }\n};",
32
- "import type { IGeo, IGeoContext } from '../models';\nimport { Ctx, type ILogger } from './Logger';\nimport { Err, Ok, type AsyncResult } from './Result';\n\nconst SURF_GEO_SERVICE_URL = 'https://g.surfside.io/enrich';\n\nexport type GetGeoFn = (ip?: string, geoProviderToken?: string) => AsyncResult<IGeoContext>;\n\nconst LOCATION_TYPE_IP = 2;\nconst IP_SERVICES_MAXMIND = 3;\n\nexport const GetGeo = async (logger?: ILogger, apiToken?: string, ip?: string): AsyncResult<IGeoContext> => {\n const log = Ctx(logger)?.with('GeoService');\n log?.info('Getting Geo info');\n try {\n const response = await fetch(SURF_GEO_SERVICE_URL);\n // const response = ip === undefined\n // ? await fetch(SURF_GEO_SERVICE_URL)\n // : await fetch(SURF_GEO_SERVICE_URL, {\n // method: 'POST',\n // headers: {\n // 'Authorization': `Bearer ${apiToken}`\n // },\n // body: JSON.stringify({ ip })\n // });\n log?.debug('Geo Response', response);\n return Ok(await response.json() as IGeoContext);\n } catch(err) {\n return Err(err as Error);\n }\n};\n\nexport const GeoContextToORTB = (logger: ILogger | undefined, geoContext: IGeoContext): IGeo => ({\n lat: geoContext.coords.latitude,\n lon: geoContext.coords.longitude,\n city: geoContext.city,\n region: geoContext.region,\n country: geoContext.country,\n zip: geoContext.zip,\n type: LOCATION_TYPE_IP,\n accuracy: geoContext.coords.accuracy,\n utcoffset: geoContext.utcoffset,\n ipservice: IP_SERVICES_MAXMIND\n});\n",
33
- "import { AdCom10DeviceTypes, type IBrandVersion, type IDevice, type IUserAgent } from '../models';\nimport { Ctx, Ok, type ILogger, type Result } from '.';\n\ninterface IDeviceContext {\n make?: string;\n model?: string;\n os?: string;\n osv?: string;\n browser?: IBrandVersion;\n}\n\nexport type GetDeviceFn = (screen: IScreen, navigator: INavigator, mobile: boolean) => Result<IDevice>;\n\nexport interface IScreen {\n width: number,\n height: number,\n}\n\nexport interface INavigator {\n userAgent: string,\n language: string\n}\n\nexport const GetDevice = (\n logger: ILogger | undefined,\n screen: IScreen,\n navigator: INavigator,\n mobile: boolean\n): Result<IDevice> => {\n const log = Ctx(logger)?.with('DeviceService');\n log?.info('Getting device info');\n\n const deviceInfo = getDeviceInfo(log, navigator.userAgent);\n\n const sua: IUserAgent = {\n model: deviceInfo?.model,\n mobile: mobile ? 1 : 0, // open RTB uses 1 for true and 0 for false\n browsers: deviceInfo?.browser !== undefined\n ? [deviceInfo.browser]\n : undefined,\n platform: (deviceInfo?.os !== undefined)\n ? {\n brand: deviceInfo?.os,\n version: deviceInfo?.osv?.split('.')\n }\n : undefined,\n architecture: getCPUArchitecture(log, navigator.userAgent, mobile),\n source: 3\n };\n\n return Ok({\n make: deviceInfo?.make,\n model: deviceInfo?.model,\n w: screen.width,\n h: screen.height,\n language: navigator.language,\n ua: navigator.userAgent,\n devicetype: getDeviceType(log, screen, mobile),\n os: deviceInfo?.os,\n osv: deviceInfo?.osv,\n sua\n });\n};\n\nconst getDeviceInfo = (logger: ILogger | undefined, userAgent: string): IDeviceContext => {\n const log = Ctx(logger)?.with('tryGetDeviceInfo');\n log?.debug('getting device info');\n const userAgentLower = userAgent.toLowerCase();\n\n const browser = getBrowserInfo(log, navigator.userAgent);\n if (userAgentLower.includes('android')) {\n return {\n ...getAndroidDeviceInfo(log, userAgent),\n browser\n };\n } else if (userAgentLower.includes('iphone') || userAgentLower.includes('ipad')) {\n return {\n ...getiPhoneDeviceInfo(log, userAgent),\n browser\n };\n } else if (userAgentLower.includes('windows nt')) {\n return {\n make: 'Microsoft',\n model: 'Windows',\n os: 'Windows',\n osv: /Windows NT (?<osv>[0-9.]+)/ig.exec(userAgent)?.groups?.osv,\n browser\n };\n } else if (userAgentLower.includes('macintosh')) {\n return {\n make: 'Apple',\n model: 'Macintosh',\n os: 'MacOS',\n osv: /Mac OS X (?<osv>[0-9_]+)/ig.exec(userAgent)?.groups?.osv?.replaceAll('_', '.'),\n browser\n };\n }\n return { browser };\n};\n\nconst getAndroidDeviceInfo = (logger: ILogger | undefined, userAgent: string): IDevice => {\n const log = Ctx(logger)?.with('getAndroidDeviceInfo');\n log?.debug('getting android info');\n const match = /^[^\\s]+\\s\\((?<Linux>.*);\\s*(?<osv>[^)]+);\\s*(?<Model>[^)]+)\\)/ig.exec(userAgent);\n const osv = match?.groups?.osv;\n const model = match?.groups?.Model;\n const partialDevice = {\n os: 'Android',\n osv,\n model,\n };\n if (model !== undefined) {\n if (model.includes('Pixel')) {\n return {\n ...partialDevice,\n make: 'Google'\n };\n } else if (model.includes('SM-')) {\n return {\n ...partialDevice,\n make: 'Samsung'\n };\n } else if (model.startsWith('LG-')) {\n return {\n ...partialDevice,\n make: 'LG'\n };\n } else if (model.startsWith('moto')) {\n return {\n ...partialDevice,\n make: 'Motorola'\n };\n } else if (model.startsWith('Redmi')) {\n return {\n ...partialDevice,\n make: 'Xiaomi'\n };\n } else {\n return {\n ...partialDevice,\n make: 'Android'\n };\n }\n }\n\n return {\n os: 'Android',\n osv\n };\n};\n\nconst getiPhoneDeviceInfo = (logger: ILogger | undefined, userAgent: string): IDevice => {\n const log = Ctx(logger)?.with('getIphoneDeviceInfo');\n log?.debug('getting iPhone info');\n const match = /^[^\\s]+\\s*\\((?<Device>[^;]+);\\s(?<Model>[^;)]+[;)])\\s(?<ModelExt>[^;)]+[;)])?/ig.exec(userAgent);\n const make = 'Apple';\n const device = match?.groups?.Device;\n const model = device?.toLowerCase().includes('ipad')\n ? 'iPad'\n : 'iPhone';\n\n const modelGroup = match?.groups?.Model;\n /* Newer Device */\n const os: string = 'iOS';\n\n const osvSearch = modelGroup === 'U'\n ? match?.groups?.ModelExt\n : modelGroup;\n\n const osv = osvSearch !== undefined\n ? /OS (?<ver>[0-9_]+)/ig.exec(osvSearch)?.groups?.ModelExt\n : undefined;\n\n return {\n make,\n model,\n os,\n osv\n };\n};\n\nconst getBrowserInfo = (logger: ILogger | undefined, userAgent: string): IBrandVersion | undefined => {\n const log = Ctx(logger)?.with('getBrowserInfo');\n log?.debug('getting browser info');\n try {\n if (userAgent.includes('Firefox/')) {\n return {\n version: userAgent.split('Firefox/')[1]?.split('.'),\n brand: 'Firefox'\n };\n } else if (userAgent.includes('Chrome/')) {\n return {\n version: userAgent.split('Chrome/')[1]?.split(' ')[0]?.split('.'),\n brand: 'Chrome'\n };\n } else if (userAgent.includes('CriOS')) {\n // Chrome on iOS uses \"CriOS/\" instead of \"Chrome/\", which was causing issues\n return {\n version: userAgent.split('CriOS/')[1]?.split(' ')[0]?.split('.'),\n brand: 'Chrome'\n };\n } else if (userAgent.includes('Safari/') && !userAgent.includes('Chrome')) {\n // Safari version is a bit trickier due to its UA string format\n return {\n version: userAgent.split('Version/')[1]?.split(' ')[0]?.split('.'),\n brand: 'Safari'\n };\n } else if (userAgent.includes('Edg/')) {\n return {\n version: userAgent.split('Edg/')[1]?.split('.'),\n brand: 'Edge'\n };\n }\n } catch (error) {\n log?.error(error);\n }\n};\n\nconst getCPUArchitecture = (logger: ILogger | undefined, userAgent: string, mobile: boolean): string | undefined => {\n const log = Ctx(logger)?.with('getCPUArchitecture');\n log?.debug('Getting CPU arch');\n // Common architecture patterns\n if (/Win64|x64|x86_64|WOW64/.test(userAgent)) {\n return 'x64';\n }\n if (/Win32|x86/.test(userAgent)) {\n return 'x86';\n }\n if (/aarch64|arm64/.test(userAgent)) {\n return 'ARM64';\n }\n if (/armv\\d+/.test(userAgent)) {\n return 'ARM';\n }\n\n /* Just naively assume all phones are arm */\n if (mobile) {\n return 'ARM';\n }\n\n log?.warn('Failed to get cpu architecture');\n return;\n};\n\nconst getDeviceType = (logger: ILogger | undefined, screen: IScreen, mobile: boolean): number => {\n const log = Ctx(logger)?.with('getDeviceType');\n log?.debug('getting device type');\n const MINIMUM_SHORT_TABLET = 600;\n const MAXIMUM_LONG_TABLET = 960;\n\n const hasTouch = mobile;\n if (!hasTouch) {\n return AdCom10DeviceTypes.PC;\n }\n\n const width = screen.width;\n const height = screen.height;\n const [shorterSide, longerSide] = [width, height].sort((a, b) => a - b) as [number, number];\n\n if (hasTouch && shorterSide >= MINIMUM_SHORT_TABLET && longerSide >= MAXIMUM_LONG_TABLET) {\n return AdCom10DeviceTypes.Tablet;\n }\n return AdCom10DeviceTypes.Mobile;\n};\n",
34
- "import type Handlebars from 'handlebars/runtime';\nimport type { ICompiledPublisherConfiguration, ICompiledPublisherConfigurationDTO, IProductContext } from '../models';\nimport { type AsyncResult, type ILogger, Ctx, Err, Ok } from '.';\n\nexport type GetConfigurationFn = () => AsyncResult<ICompiledPublisherConfiguration>;\n\nexport const GetConfiguration = async (\n logger: ILogger | undefined,\n url: string,\n handlebars: typeof Handlebars,\n accountId: string,\n siteId: string\n): AsyncResult<ICompiledPublisherConfiguration> => {\n const log = Ctx(logger)?.with('ConfigurationService').with(url).with(accountId).with(siteId);\n log?.info('Getting configuration');\n\n try {\n const response = await fetch(`${url}/${accountId}/${siteId}/config.json`);\n if(!response.ok) {\n log?.error('Failed to get configuration', url, accountId, siteId);\n return Err(new Error('Failed to get configuration'));\n }\n\n const config = await response.json() as ICompiledPublisherConfigurationDTO;\n if(config.settings === undefined || config.templates === undefined) {\n log?.error('configuration was an invalid format');\n return Err(new Error('configuration was an invalid format'));\n }\n\n log?.debug('configuration: ', config);\n return await mapConfig(log, handlebars, config);\n } catch (err) {\n return Err(err as Error);\n }\n};\n\nconst mapConfig = async (\n logger: ILogger | undefined,\n handlebars: typeof Handlebars,\n config: ICompiledPublisherConfigurationDTO\n): AsyncResult<ICompiledPublisherConfiguration> => {\n const log = Ctx(logger)?.with('mapConfig');\n log?.debug('mapping configuration');\n\n return Ok({\n settings: config.settings,\n templates: {\n clickThroughUrlTemplate: handlebars.template<IProductContext>((await importModule<any>(\n log,\n `export default ${config.templates?.clickThroughUrlTemplate ?? ''}`\n )).default as TemplateSpecification),\n productCardTemplate: handlebars.template<IProductContext>((await importModule<any>(\n log,\n `export default ${config.templates?.productCardTemplate ?? ''}`\n )).default as TemplateSpecification),\n javascriptCallbacks: await importModule(log, config.templates?.javascriptCallbacks ?? ''),\n productCardStylesheet: config.templates?.productCardStylesheet,\n carouselStylesheet: config.templates?.carouselStylesheet\n }\n });\n};\n\nconst importModule = async <T>(logger: ILogger | undefined, script: string): Promise<T> => {\n const log = Ctx(logger)?.with('importModule');\n log?.debug('importing', script);\n const blob = new Blob([script], { type: 'text/javascript' });\n const moduleUrl = URL.createObjectURL(blob);\n log?.debug('moduleUrl', moduleUrl);\n const module = await import(moduleUrl) as T;\n log?.debug('module:', module);\n return module;\n};\n",
35
- "import { IBidRequest, IBidResponse } from '../models';\nimport { Ctx, ILogger } from './Logger';\nimport { AsyncResult, Err, Ok } from './Result';\n\nconst AUCTION_PRICE_MACRO = /(?:\\$|%24)?(?:\\{|%7b)auction_price(?:\\}|%7d)/ig;\n\nexport type RequestBidsFn = (request: IBidRequest) => AsyncResult<IBidResponse>;\n\nexport const RequestBids = async (\n logger: ILogger | undefined,\n url: string,\n accountId: string,\n siteId: string,\n locationId: string,\n channelId: string,\n bidRequest: IBidRequest\n): AsyncResult<IBidResponse> => {\n const log = Ctx(logger)\n ?.with('RequestBids')\n .with(accountId)\n .with(siteId)\n .with(locationId)\n .with(channelId);\n log?.info('Requesting bids');\n log?.debug(bidRequest);\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n body: JSON.stringify(bidRequest)\n });\n log?.debug('Got response', response);\n if (response.status !== 200) {\n switch (response.status) {\n case 204:\n log?.warn('No bids', bidRequest, response);\n return Err(new NoBidsError(bidRequest, response));\n case 500:\n log?.error('Bidder failed serverside. Report this error.', bidRequest, response);\n return Err(new InternalServerError(bidRequest, response));\n case 503:\n log?.error('Bidder starting up. Try again in a few minutes', bidRequest, response);\n return Err(new BidderStartingUpError(bidRequest, response));\n default:\n log?.error('Unknown bidder error', bidRequest, response);\n return Err(new UnknownBidderError(bidRequest, response));\n }\n }\n\n log?.debug('Successfully got bids', bidRequest);\n const bidResponse = await response.json() as IBidResponse;\n if (bidResponse.seatbid === undefined || bidResponse.seatbid.length === 0) {\n log?.error('Bidder didn\\'t return any seatbids');\n return Err(new MalformedBidResponseError(bidRequest, response, bidResponse));\n }\n for (let i = 0; i < bidResponse.seatbid.length; i++) {\n const seatbid = bidResponse.seatbid[i];\n if (seatbid === undefined) {\n log?.warn(`Seatbid #${i} was undefined`, bidRequest, response, bidResponse);\n continue;\n }\n for (let j = 0; j < seatbid.bid.length; j++) {\n const bid = seatbid.bid[j];\n if (bid === undefined) {\n log?.warn(`Bid #${j} in seatbid #${i} was undefined`);\n continue;\n }\n /* Decode any potential URI encoding */\n try {\n bid.adm = decodeURIComponent(bid?.adm ?? '').replaceAll(/\\\\\"/ig, '\"');\n } catch {\n log?.debug('Adm is not encoded. This is not an issue. Moving on.');\n }\n /* Macro replacement is part of ORTB spec, so it belongs here */\n bid.nurl = bid.nurl?.replace(AUCTION_PRICE_MACRO, bid.price.toString());\n bid.adm = bid.adm?.replaceAll(AUCTION_PRICE_MACRO, bid.price.toString());\n\n }\n }\n log?.debug('Returning bid responses');\n return Ok(bidResponse);\n } catch (err) {\n return Err(err as Error);\n }\n};\n\nexport class NoBidsError extends Error {\n constructor(\n public readonly request: IBidRequest,\n public readonly response?: Response\n ) {\n super('204 - No bids available for request');\n }\n}\n\nexport class InternalServerError extends Error {\n constructor(\n public readonly request: IBidRequest,\n public readonly response: Response\n ) {\n super('500 - Bidder had an unknown serverside error');\n }\n}\n\nexport class BidderStartingUpError extends Error {\n constructor(\n public readonly request: IBidRequest,\n public readonly response: Response\n ) {\n super('503 - Bidder is starting up');\n }\n}\n\nexport class UnknownBidderError extends Error {\n constructor(\n public readonly request: IBidRequest,\n public readonly response: Response\n ) {\n super('Unknown bidder error');\n }\n}\n\nexport class MalformedBidResponseError extends Error {\n constructor(\n public readonly request: IBidRequest,\n public readonly response: Response,\n public readonly bidResponse: unknown\n ) {\n super('Malformed bid response error');\n }\n}\n",
36
- "import type { IProductInformation } from '../models';\nimport { Ctx, type ILogger } from './Logger';\nimport { Err, Ok, Result, type AsyncResult } from './Result';\n\nexport type GetSponsoredProductFromNativeIdFn = (nativeId: string) => AsyncGenerator<IProductInformation>;\nexport type GetAllSponsoredProductFromNativeIdFn = (nativeId: string) => Promise<Result<IProductInformation[]>>;\nexport type GetRecommendedProductFromProductIdFn = (productId: string) => AsyncResult<IProductInformation>\n\nexport async function *GetSponsoredProduct(\n logger: ILogger | undefined,\n url: string,\n accountId: string,\n locationId: string,\n nativeId: string\n): AsyncGenerator<IProductInformation> {\n const log = Ctx(logger)?.with('GetSponsoredProduct').with(accountId).with(locationId).with(nativeId);\n log?.info('Getting sponsored product', );\n try {\n const rawResponse = await fetch(`${url}/native/${accountId}/${locationId}/${nativeId}.json`);\n if(rawResponse.status !== 200)\n {\n log?.error('product feed service returned with non-200 response', rawResponse.status);\n return;\n }\n const products = rawResponse as (Record<string, any> | Record<string, any>[]);\n log?.debug('response', products);\n if(Array.isArray(products)) {\n log?.debug('Brand level creative');\n const productArr = products as Record<string, any>[];\n for(const product of productArr) {\n yield mapResponseToProductInfo(log, product);\n }\n } else {\n log?.debug('Individual product creative');\n const product = products as Record<string, any>;\n return mapResponseToProductInfo(log, product);\n }\n } catch(err) {\n log?.error(err);\n }\n}\n\nexport const GetAllSponsoredProducts = async (\n logger: ILogger | undefined,\n url: string,\n accountId: string,\n locationId: string,\n nativeId: string\n): Promise<Result<IProductInformation[]>> => {\n const log = Ctx(logger)?.with('GetSponsoredProduct').with(accountId).with(locationId).with(nativeId);\n log?.info('Getting sponsored product',);\n try {\n const rawResponse = await fetch(`${url}/native/${accountId}/${locationId}/${nativeId}.json`);\n if (rawResponse.status !== 200) {\n log?.error('product feed service returned with non-200 response', rawResponse.status);\n return Err(new NoNativeError(nativeId));\n }\n const products = rawResponse as (Record<string, any> | Record<string, any>[]);\n log?.debug('response', products);\n if (Array.isArray(products)) {\n log?.debug('Brand level creative');\n const productArr = products as Record<string, any>[];\n const mapResponseToProductInfoLogged = mapResponseToProductInfo.bind(undefined, log);\n return Ok(productArr.map(mapResponseToProductInfoLogged));\n } else {\n log?.debug('Individual product creative');\n const product = products as Record<string, any>;\n return Ok([mapResponseToProductInfo(log, product)]);\n }\n } catch (err) {\n log?.error(err);\n return Err(err as Error);\n }\n};\n\nexport const GetRecommendedProduct = async (\n logger: ILogger | undefined,\n url: string,\n accountId: string,\n locationId: string,\n productId: string\n): AsyncResult<IProductInformation> => {\n const log = Ctx(logger)?.with('GetRecommendedProduct').with(accountId).with(locationId).with(productId);\n log?.info('Getting recommended product');\n try {\n const rawResponse = await fetch(\n `${url}product/${accountId}/${locationId}/${productId}.json`\n );\n if (rawResponse.status !== 200) {\n log?.error('product feed service returned with non-200 response', rawResponse.status);\n return Err(new Error('product feed service returned with non-200 response'));\n }\n const rawProduct = await rawResponse.json() as Record<string, any>;\n log?.debug('response', rawProduct);\n const productInfo = mapResponseToProductInfo(log, rawProduct);\n log?.debug('mapped', productInfo);\n return Ok(productInfo);\n } catch(err) {\n log?.error(err);\n return Err(err as Error);\n }\n};\n\nconst mapResponseToProductInfo = (\n logger: ILogger | undefined,\n data: Record<string, any>\n): IProductInformation => {\n const log = Ctx(logger)?.with('mapResponseToProductInfo');\n log?.debug('Mapping product');\n const getField = fieldOrUndef.bind(undefined, data);\n return {\n image: getField('image_link'),\n price: getField('price'),\n salePrice: getField('sale_price'),\n thc: getField('thc'),\n cbd: getField('cbd'),\n strain: getField('strain'),\n name: getField('name'),\n brand_name: getField('brand'),\n brandName: getField('brand'),\n productType: getField('productType'),\n details: getField('details'),\n cta: getField('cta'),\n clickthroughUrl: getField('clickthroughUrl'),\n winUrl: getField('winUrl'),\n pixelUrl: getField('pixelUrl'),\n ext: data\n };\n};\n\nconst fieldOrUndef = (data: Record<string, any>, field: string): string | undefined => {\n if(field in data) {\n return String(data[field]);\n }\n return undefined;\n};\n\nexport class NoNativeError extends Error {\n constructor(public nativeId: string) {\n super('Native ID did not exist in product feed: ' + nativeId);\n }\n}\n",
37
- "import type { IProductInformation, IRecommendedProduct, IRecommenderResponse } from '../models';\nimport { Ctx, type ILogger } from './Logger';\nimport type { GetRecommendedProductFromProductIdFn } from './Product';\nimport { Err, Ok, type AsyncResult } from './Result';\n\nexport type NonPersonalRecommenderFn = () => AsyncGenerator<IProductInformation>;\nexport type PersonalRecommenderFn = (userId: string) => AsyncGenerator<IProductInformation>;\n\nexport async function *GenerateTopProducts(\n logger: ILogger | undefined,\n productFeed: GetRecommendedProductFromProductIdFn,\n url: string,\n accountId: string,\n siteId: string,\n locationId: string\n): AsyncGenerator<IProductInformation> {\n const log = Ctx(logger)?.with('GenerateTopProducts').with(accountId).with(siteId).with(locationId);\n log?.info('Generating top products');\n\n yield* generateProductRecommendation(\n logger,\n productFeed,\n url,\n accountId,\n siteId,\n locationId,\n undefined,\n 'top-products'\n );\n}\n\nexport async function *GenerateForYou(\n logger: ILogger | undefined,\n productFeed: GetRecommendedProductFromProductIdFn,\n url: string,\n accountId: string,\n siteId: string,\n locationId: string,\n userId: string\n): AsyncGenerator<IProductInformation> {\n const log = Ctx(logger)?.with('GenerateForYou').with(accountId).with(siteId).with(locationId).with(userId);\n log?.info('Generating for you');\n\n yield* generateProductRecommendation(\n logger,\n productFeed,\n url,\n accountId,\n siteId,\n locationId,\n userId,\n 'for-you'\n );\n}\n\nexport async function *GeneratePreviousPurchases(\n logger: ILogger | undefined,\n productFeed: GetRecommendedProductFromProductIdFn,\n url: string,\n accountId: string,\n siteId: string,\n locationId: string,\n userId: string\n): AsyncGenerator<IProductInformation> {\n const log = Ctx(logger)\n ?.with('GeneratePreviousPurchases')\n .with(accountId)\n .with(siteId)\n .with(locationId)\n .with(userId);\n log?.info('Generating previous purchases');\n\n yield* generateProductRecommendation(\n log,\n productFeed,\n url, accountId,\n siteId,\n locationId,\n userId,\n 'buy-again'\n );\n}\n\nasync function *generateProductRecommendation (\n logger: ILogger | undefined,\n productFeed: GetRecommendedProductFromProductIdFn,\n url: string,\n accountId: string,\n siteId: string,\n locationId: string,\n userId: string | undefined,\n type: string\n): AsyncGenerator<IProductInformation> {\n const log = Ctx(logger)?.with('generatreProductRecommendation');\n log?.debug('Generating product recommendation');\n const recommendations = await fetchRecommendations(\n log,\n url,\n accountId,\n siteId,\n locationId,\n userId,\n type\n );\n if(!recommendations.ok) {\n log?.error(recommendations.error);\n return;\n }\n\n yield* generateProduct(log, productFeed, accountId, locationId, recommendations.value);\n log?.debug('out of recommendations');\n}\n\nconst fetchRecommendations = async (\n logger: ILogger | undefined,\n url: string,\n accountId: string,\n siteId: string,\n locationId: string,\n userId: string | undefined,\n type: string\n): AsyncResult<IRecommendedProduct[]> => {\n const log = Ctx(logger)?.with('fetchRecommendations');\n log?.debug('Fetching recommendations');\n\n const key = `accountId=${accountId}&siteId=${siteId}&locationId=${locationId}&userId=${userId ?? 'null'}`;\n try {\n const results = await fetch(`${url}/r/${type}?${key}&limit=100`);\n if(!results.ok) {\n return Err(new Error('Failed to load recommendations. Service returned ' + results.status));\n }\n /* On error, the result will be IRecommenderResponse.\n * On success, it will just be a set of recommended products */\n const recommendations = await results.json() as (IRecommenderResponse | IRecommendedProduct[]);\n const error = (recommendations as IRecommenderResponse).error;\n if(error !== undefined) {\n return Err(new Error(error));\n }\n\n return Ok(recommendations as IRecommendedProduct[]);\n } catch(err) {\n return Err(err as Error);\n }\n};\n\nasync function* generateProduct(\n logger: ILogger | undefined,\n productFeed: GetRecommendedProductFromProductIdFn,\n accountId: string,\n locationId: string,\n results: IRecommendedProduct[]\n): AsyncGenerator<IProductInformation> {\n const log = Ctx(logger)?.with('generateProduct');\n log?.debug('generating product info');\n\n for (const item of results) {\n const itemId = item.item_id;\n try {\n log?.debug('itemId', itemId);\n const product = await productFeed(itemId);\n log?.debug('product', itemId, product);\n if (product.ok) {\n yield product.value;\n } else {\n log?.warn('item was missing from product feed', itemId);\n }\n } catch (err) {\n log?.warn('couldn\\'t get product', err);\n }\n }\n\n log?.info('no more products. Exiting');\n}\n",
38
- "import {\n ContextSubTypes,\n ContextTypes,\n EventTrackingMethods,\n EventTypes,\n type IAssetObject,\n type IEventTrackerRequestObject,\n type INativeRequest,\n NativeAssetId,\n NativeDataTypes,\n PlacementTypes,\n} from '../models';\nimport { Ctx, ILogger } from '../services';\n\nconst DEFAULT_LENGTH = 80;\nconst VAST_3_0 = 3;\n\nexport type NativeRequestBuilderFn = () => NativeRequestBuilder;\n\nexport type NativeRequestBuilder = {\n withVer: (ver: string) => NativeRequestBuilder,\n withContext: (context: number) => NativeRequestBuilder,\n withContextSubType: (contextSubType: number) => NativeRequestBuilder,\n withPlacementType: (placementType: number) => NativeRequestBuilder,\n withTitle: (length?: number, required?: boolean) => NativeRequestBuilder,\n withImage: (width: number, height: number, minWidth?: number, minHeight?: number, required?: boolean)\n => NativeRequestBuilder,\n withVideo: (mimes: number[] | string[], minDuration: number, maxDuration: number, required?: boolean)\n => NativeRequestBuilder,\n withData: (type: number, id: number, length?: number, required?: boolean) => NativeRequestBuilder,\n withSponsored: (length?: number, required?: boolean) => NativeRequestBuilder,\n withDescription: (length?: number, required?: boolean) => NativeRequestBuilder,\n withRating: (length?: number, required?: boolean) => NativeRequestBuilder,\n withPrice: (length?: number, required?: boolean) => NativeRequestBuilder,\n withSalePrice: (length?: number, required?: boolean) => NativeRequestBuilder,\n withDisplayURL: (length?: number, required?: boolean) => NativeRequestBuilder,\n withCTAText: (length?: number, required?: boolean) => NativeRequestBuilder,\n withCategory: (length?: number, required?: boolean) => NativeRequestBuilder,\n withTHC: (length?: number, required?: boolean) => NativeRequestBuilder,\n withCBD: (length?: number, required?: boolean) => NativeRequestBuilder,\n withStrain: (length?: number, required?: boolean) => NativeRequestBuilder,\n withMetaProduct: (length?: number, required?: boolean) => NativeRequestBuilder,\n withEventTracker: (event: number, methods: number[]) => NativeRequestBuilder,\n build: () => INativeRequest\n};\n\ninterface INativeRequestBuilderState {\n readonly ver?: string,\n readonly context?: number,\n readonly placementType?: number,\n readonly contextSubType?: number,\n readonly assets: IAssetObject[],\n readonly eventTrackers: IEventTrackerRequestObject[]\n};\n\nconst builderWithVer = (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n ver: string\n) => {\n logger?.debug('Adding version to native request', ver);\n return botsBuildBots(logger, {...state, ver });\n};\n\nconst builderWithContext = (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n context: number\n) => {\n logger?.debug('Adding context to native request', context);\n return botsBuildBots(logger, { ...state, context });\n};\n\nconst builderWithContextSubType = (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n contextSubType: number\n) => {\n logger?.debug('Adding context subtype to native request', contextSubType);\n return botsBuildBots(logger, { ...state, contextSubType });\n};\n\nconst builderWithPlacementType = (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n placementType: number\n) => {\n logger?.debug('Adding placement type to native request', placementType);\n return botsBuildBots(logger, { ...state, placementType });\n};\n\nconst builderWithTitle = (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n length: number = DEFAULT_LENGTH,\n required: boolean = true\n) => {\n logger?.debug('Adding title to native request', length, required);\n return botsBuildBots(logger,\n {\n ...state,\n assets: [\n ...state.assets,\n {\n id: NativeAssetId.Title,\n required: required ? 1 : 0,\n title: {\n len: length\n }\n }\n ]\n });\n};\n\nconst builderWithImage = (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n width: number,\n height: number,\n minWidth?: number,\n minHeight?: number,\n required: boolean = true\n) => {\n logger?.debug('Adding image to native request', width, height, minWidth, minHeight, required);\n return botsBuildBots(logger,\n {\n ...state,\n assets: [\n ...state.assets,\n {\n id: NativeAssetId.Image,\n required: required ? 1 : 0,\n img: {\n w: width,\n h: height,\n wmin: minWidth,\n hmin: minHeight\n }\n }\n ]\n });\n};\n\nconst builderWithVideo = (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n mimes: number[] | string[],\n minDuration: number,\n maxDuration: number,\n required: boolean = true\n) => {\n logger?.debug('Adding video to native request', mimes, minDuration, maxDuration, required);\n return botsBuildBots(\n logger,\n {\n ...state,\n assets: [\n ...state.assets,\n {\n id: NativeAssetId.Video,\n required: required ? 1 : 0,\n video: {\n mimes,\n minduration: minDuration,\n maxduration: maxDuration,\n protocols: [VAST_3_0]\n }\n }\n ]\n });\n};\n\nconst builderWithData = (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n type: number,\n id: number,\n length: number = DEFAULT_LENGTH,\n required: boolean = true\n) => {\n logger?.debug('Adding data to request', type, id, length, required);\n return botsBuildBots(\n logger,\n {\n ...state,\n assets: [\n ...state.assets,\n {\n id,\n required: required ? 1 : 0,\n data: {\n type,\n len: length\n }\n }\n ]\n });\n};\n\nconst passToData = (type: number, id: number) =>\n (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n length: number = DEFAULT_LENGTH,\n required: boolean = true\n ) =>\n builderWithData(logger, state, type, id, length, required);\n\nconst builderWithSponsored = passToData(NativeDataTypes.Sponsored, NativeAssetId.Sponsored);\n\nconst builderWithDescription = passToData(NativeDataTypes.Desc, NativeAssetId.Desc);\n\nconst builderWithRating = passToData(NativeDataTypes.Rating, NativeAssetId.Rating);\n\nconst builderWithPrice = passToData(NativeDataTypes.Price, NativeAssetId.Price);\n\nconst builderWithSalePrice = passToData(NativeDataTypes.SalePrice, NativeAssetId.SalePrice);\n\nconst builderWithDisplayURL = passToData(NativeDataTypes.DisplayURL, NativeAssetId.DisplayURL);\n\nconst builderWithCTAText = passToData(NativeDataTypes.CTAText, NativeAssetId.CTAText);\n\nconst builderWithCategory = passToData(NativeDataTypes.SurfCategory, NativeAssetId.SurfCategory);\n\nconst builderWithTHC = passToData(NativeDataTypes.SurfTHC, NativeAssetId.SurfTHC);\n\nconst builderWithCBD = passToData(NativeDataTypes.SurfCBD, NativeAssetId.SurfCBD);\n\nconst builderWithStrain = passToData(NativeDataTypes.SurfStrain, NativeAssetId.SurfStrain);\n\nconst builderWithMetaProduct = passToData(NativeDataTypes.SurfMetaProduct, NativeAssetId.SurfMetaProduct);\n\nconst builderWithEventTracker = (\n logger: ILogger | undefined,\n state: INativeRequestBuilderState,\n event: number,\n methods: number[]\n) => {\n logger?.debug('Adding event tracker to big request');\n return botsBuildBots(logger,\n {\n ...state,\n eventTrackers: [\n ...state.eventTrackers,\n {\n event,\n methods\n }\n ]\n });\n};\n\nconst builderBuild = (logger: ILogger | undefined, state: INativeRequestBuilderState): INativeRequest => {\n logger?.debug('Building bid request', state);\n return {\n ver: state.ver,\n context: state.context,\n contextsubtype: state.contextSubType,\n assets: state.assets,\n eventtrackers: state.eventTrackers\n };\n};\n\nconst botsBuildBots = (logger: ILogger | undefined, state: INativeRequestBuilderState): NativeRequestBuilder => ({\n withVer: builderWithVer.bind(undefined, logger, state),\n withContext: builderWithContext.bind(undefined, logger, state),\n withContextSubType: builderWithContextSubType.bind(undefined, logger, state),\n withPlacementType: builderWithPlacementType.bind(undefined, logger, state),\n withTitle: builderWithTitle.bind(undefined, logger, state),\n withImage: builderWithImage.bind(undefined, logger, state),\n withVideo: builderWithVideo.bind(undefined, logger, state),\n withData: builderWithData.bind(undefined, logger, state),\n withSponsored: builderWithSponsored.bind(undefined, logger, state),\n withDescription: builderWithDescription.bind(undefined, logger, state),\n withRating: builderWithRating.bind(undefined, logger, state),\n withPrice: builderWithPrice.bind(undefined, logger, state),\n withSalePrice: builderWithSalePrice.bind(undefined, logger, state),\n withDisplayURL: builderWithDisplayURL.bind(undefined, logger, state),\n withCTAText: builderWithCTAText.bind(undefined, logger, state),\n withCategory: builderWithCategory.bind(undefined, logger, state),\n withTHC: builderWithTHC.bind(undefined, logger, state),\n withCBD: builderWithCBD.bind(undefined, logger, state),\n withStrain: builderWithStrain.bind(undefined, logger, state),\n withMetaProduct: builderWithMetaProduct.bind(undefined, logger, state),\n withEventTracker: builderWithEventTracker.bind(undefined, logger, state),\n build: builderBuild.bind(undefined, logger, state)\n});\n\nexport const StartNative = (logger: ILogger | undefined) => {\n const log = Ctx(logger)?.with('StartNative');\n return botsBuildBots(log, {\n assets: [],\n eventTrackers: []\n });\n};\n\nexport const DefaultNative = (logger: ILogger | undefined) => {\n const log = Ctx(logger)?.with('DefaultNative');\n return StartNative(log)\n .withVer('1.2')\n .withContext(ContextTypes.Product)\n .withContextSubType(ContextSubTypes.Product)\n .withPlacementType(PlacementTypes.InFeed)\n .withEventTracker(EventTypes.Imp, [EventTrackingMethods.Img, EventTrackingMethods.Img]);\n};\n",
39
- "import {\n AgentTypes,\n type IApp,\n type IBanner,\n type IBidRequest,\n type IDevice,\n type IGeoContext,\n type IImp,\n type INative,\n type INativeRequest,\n type IRegs,\n type ISite,\n type ISurfExtension,\n type IUser,\n type IVideo\n} from '../models';\nimport { Ctx, GeoContextToORTB, ILogger } from '../services';\n\nconst SURF_EID_SOURCE = 'surf-domain-id';\n\nexport type RequestBuilderFn = (zoneId: string, id?: string) => RequestBuilder;\n\nexport type RequestWith<T> = (t: T) => RequestBuilder;\n\nexport type RequestBuilder = {\n withUser: RequestWith<IUser>,\n withRegulations: RequestWith<IRegs>,\n withApp: RequestWith<IApp>,\n withKeywords: RequestWith<string[]>,\n withBanner: (w: number, h: number, options?: Partial<IBanner>, impOptions?: Partial<IImp>) => RequestBuilder,\n withVideo: (w: number,\n h: number,\n minduration: number,\n maxduration: number,\n mimes?: string[],\n options?: Partial<IVideo>,\n impOptions?: Partial<IImp>\n ) => RequestBuilder,\n withNative: (\n request: string | INativeRequest,\n options?: Partial<INative>,\n impOptions?: Partial<IImp>\n ) => RequestBuilder,\n build: () => IBidRequest\n}\n\ninterface IRequestBuilderState {\n readonly id?: string,\n readonly context: ISurfExtension,\n readonly user?: IUser,\n readonly site?: ISite,\n readonly app?: IApp,\n readonly imp: IImp[],\n readonly regs?: IRegs,\n\n // These fields are partially applied at the StartRequest level.\n readonly device?: IDevice,\n readonly geo?: IGeoContext,\n}\n\nexport function StartRequest(\n logger: ILogger | undefined,\n accountId: string,\n siteId: string,\n channelId: string,\n locationId: string,\n device: IDevice | undefined,\n geo: IGeoContext | undefined,\n userId: string | undefined,\n zoneId: string,\n id?: string\n) {\n const log = Ctx(logger)\n ?.with('StartRequest')\n .with(accountId)\n .with(siteId)\n .with(channelId)\n .with(locationId)\n .with(id);\n log?.info('Starting request');\n return botsBuildBots(logger,\n {\n context: {\n accountId,\n siteId,\n channelId,\n locationId,\n zoneId,\n storeId: locationId,\n placementId: zoneId\n },\n geo,\n device,\n id,\n user: userId !== undefined\n ? {\n eids: [{\n source: SURF_EID_SOURCE,\n uids: [{\n id: userId,\n atype: AgentTypes.Session\n }]\n }]\n }\n : undefined,\n imp: []\n });\n}\n\nconst builderWithUser = (logger: ILogger | undefined, state: IRequestBuilderState, user: IUser) => {\n logger?.debug('Adding user to request', user);\n return botsBuildBots(logger,\n {\n ...state,\n user: {\n ...user,\n eids: [ // we can toss the rest of the user object, but we need to keep the eids\n ...(state.user?.eids !== undefined\n ? state.user.eids\n : []),\n ...(user.eids !== undefined\n ? user.eids\n : [])\n ]\n }\n });\n};\n\nconst builderWithRegulations = (logger: ILogger | undefined, state: IRequestBuilderState, regs: IRegs) => {\n logger?.debug('Added regulations to request', regs);\n return botsBuildBots(logger, { ...state, regs });\n};\n\nconst builderWithApp = (logger: ILogger | undefined, state: IRequestBuilderState, app: IApp) => {\n logger?.debug('Adding app to request');\n return botsBuildBots(logger, { ... state, app });\n};\n\nconst builderWithBanner = (logger: ILogger | undefined,\n state: IRequestBuilderState,\n w: number,\n h: number,\n options?: Partial<IBanner>,\n impOptions?: Partial<IImp>\n) => {\n logger?.debug('Addig banner to request', w, h, options, impOptions);\n return botsBuildImp(logger,\n state,\n {\n id: generateId(),\n banner: {\n w,\n h,\n ...options\n },\n ...impOptions\n }\n );\n};\n\nconst builderWithVideo = (logger: ILogger | undefined,\n state: IRequestBuilderState,\n w: number,\n h: number,\n minduration: number,\n maxduration: number,\n mimes?: string[],\n options?: Partial<IVideo>,\n impOptions?: Partial<IImp>\n) => {\n logger?.debug('Adding video to request', w, h, minduration, maxduration, mimes, options, impOptions);\n return botsBuildImp(logger,\n state,\n {\n id: generateId(),\n video: {\n w,\n h,\n mimes: (mimes ?? ['video/mp4', 'video/webm']),\n minduration,\n maxduration,\n ...options\n },\n ...impOptions\n }\n );\n};\n\nconst builderWithKeywords = (logger: ILogger | undefined,\n state: IRequestBuilderState,\n keywords: string[]\n) => {\n logger?.debug('Adding keyword to request', keywords);\n return botsBuildBots(logger,\n {\n ...state,\n context: {\n ...state.context,\n keywords\n }\n });\n};\n\nconst builderWithNative = (logger: ILogger | undefined,\n state: IRequestBuilderState,\n request: string | INativeRequest,\n options?: Partial<INative>,\n impOptions?: Partial<IImp>\n) => {\n logger?.debug('Adding native to request', request, options, impOptions);\n return typeof request === 'string'\n ? builderWithNativeStr(logger,\n state,\n request,\n options,\n impOptions\n )\n : builderWithNativeStr(logger,\n state,\n JSON.stringify(request),\n options,\n impOptions\n );\n};\n\nconst builderWithNativeStr = (logger: ILogger | undefined,\n state: IRequestBuilderState,\n request: string,\n options?: Partial<INative>,\n impOptions?: Partial<IImp>\n) => botsBuildImp(logger,\n state,\n {\n id: generateId(),\n native: {\n ver: '1.2',\n request,\n ...options\n },\n ...impOptions\n }\n);\n\nconst builderBuild = (logger: ILogger | undefined, state: IRequestBuilderState): IBidRequest => {\n logger?.debug('Building request', state);\n return {\n id: state.id ?? generateId(),\n imp: state.imp.map(imp => ({\n ...imp,\n ext: imp.ext === undefined\n ? undefined\n : { ...imp.ext, ...state.context }\n })),\n device: {\n ...state.device,\n geo: state.geo === undefined\n ? undefined\n : GeoContextToORTB(undefined,\n state.geo\n )\n },\n user: state.user,\n app: state.app,\n site: state.site,\n ext: state.context\n };\n};\n\nconst botsBuildBots = (logger: ILogger | undefined, state: IRequestBuilderState): RequestBuilder => ({\n withUser: builderWithUser.bind(undefined, logger, state),\n withRegulations: builderWithRegulations.bind(undefined, logger, state),\n withBanner: builderWithBanner.bind(undefined, logger, state),\n withVideo: builderWithVideo.bind(undefined, logger, state),\n withNative: builderWithNative.bind(undefined, logger, state),\n withApp: builderWithApp.bind(undefined, logger, state),\n withKeywords: builderWithKeywords.bind(undefined, logger, state),\n build: builderBuild.bind(undefined, logger, state)\n});\n\nconst botsBuildImp = (logger: ILogger | undefined, state: IRequestBuilderState, imp: IImp): RequestBuilder =>\n botsBuildBots(logger, { ...state, imp: [...state.imp, imp]});\n\nconst generateId = () => crypto.randomUUID();\n",
40
- "import { IBid } from '../../models';\n\nexport const CreativeType = {\n Banner: 0,\n Video: 1,\n ProductCard: 2,\n Carousel: 3\n} as const;\n\nexport interface IBuiltResponse {\n type: number;\n bid: IBid;\n};\n\nexport class MissingAdmError extends Error {\n constructor(public readonly bid: IBid | null) {\n super('Cannot build creative; missing adm field');\n }\n}\n\nexport class MissingProductError extends Error {\n constructor(public readonly bid?: IBid) {\n super('Could not find product data for creative while building clickthrough URL. Some data fields are missing');\n }\n}\n",
41
- "import type {\n ICompiledPublisherConfiguration,\n INativeTemplateDelegateWindow,\n IProductInformation\n} from '../../models';\nimport { Ctx, Err, ILogger, Ok, Result } from '../../services';\nimport { GetHelpers } from '../';\n\nexport const BuildClickthroughUrl = (\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n configuration: ICompiledPublisherConfiguration,\n product: IProductInformation,\n): Result<string> => {\n const log = Ctx(logger)?.with('BuildClickthroughUrl');\n log?.info('Building clickthrough URL');\n log?.debug(\n windowInfo,\n product,\n configuration\n );\n try {\n return Ok(configuration.templates.clickThroughUrlTemplate({\n product,\n catalog: product,\n window: windowInfo,\n publisher: configuration,\n ...product\n }, {\n helpers: GetHelpers()\n }));\n } catch (e) {\n log?.error('Failed to execute clickthrough URL template', product, configuration, windowInfo);\n return Err(e as Error);\n }\n};\n",
42
- "export const ConsumeN = <T>(generator: Generator<T>, n: number): T[] => {\n const consumed: T[] = [];\n for (let i = 0; i < n; i++) {\n const value = generator.next();\n if(value.done) {\n break;\n }\n consumed.push(value.value);\n }\n return consumed;\n}\n\nexport const ConsumeAll = <T>(generator: Generator<T>): T[] => {\n const consumed: T[] = [];\n for (const value of generator) {\n consumed.push(value);\n }\n return consumed;\n}\n\nexport const ConsumeNAsync = async <T>(generator: AsyncGenerator<T>, n: number): Promise<T[]> => {\n const consumed: T[] = [];\n while(consumed.length < n) {\n const result = await generator.next();\n if(result.done) {\n break;\n }\n consumed.push(result.value);\n }\n return consumed;\n}\n\nexport const ConsumeAllAsync = async <T>(generator: AsyncGenerator<T>): Promise<T[]> => {\n const consumed: T[] = [];\n for await (const value of generator) {\n consumed.push(value);\n }\n return consumed;\n}\n\nexport function* GenerateArray<T>(data: T[]): Generator<T> {\n for(const t of data) {\n yield t;\n }\n}",
43
- "import { Err, Ok, Result } from '../services';\n\nexport const TryGet = <T>(get: () => T): Result<T> => {\n try {\n return Ok(get());\n } catch (error) {\n return Err(error as Error);\n }\n};",
44
- "import {\n EventTrackingMethods,\n EventTypes,\n IBid,\n ICompiledPublisherConfiguration,\n INativeResponse,\n INativeTemplateDelegateWindow,\n IProductInformation,\n NativeAssetId\n} from '../../models';\nimport {\n AsyncResult,\n Ctx,\n Err,\n ErrResult,\n GetAllSponsoredProductFromNativeIdFn,\n GetSponsoredProductFromNativeIdFn,\n ILogger,\n Ok,\n OkResult,\n Result,\n TryDo\n} from '../../services';\nimport { ConsumeAll, ConsumeAllAsync, GenerateArray } from '../Generator';\nimport { TryGet } from '../TryGet';\nimport { IBuiltResponse, MissingAdmError } from './BuiltResponse';\nimport { BuildClickthroughUrl } from './Clickthrough';\n\nexport type BuildAllSponsoredProductCardResponsesFn = (bids: IBid[]) => AsyncResult<IBuiltProductCardBidResponse[]>;\nexport type GenerateSponsoredProductCardResponseFn = (bids: IBid[]) => AsyncGenerator<IBuiltProductCardBidResponse>;\n\nexport interface ITracker {\n type: number;\n url: string;\n}\n\nexport interface IPixelTracker extends ITracker {\n type: 1;\n};\n\nexport interface IScriptTracker extends ITracker {\n type: 2;\n};\n\nexport interface ITrackerObject {\n win: string,\n imp: string[],\n others: ITracker[]\n};\n\nexport type IBuiltProductCardBidResponse = IBuiltResponse\n & IBuiltProductCardResponse\n & {\n native: INativeResponse,\n sponsored: true\n };\n\nexport interface IBuiltProductCardResponse {\n type: 2,\n product: IProductInformation,\n trackers?: ITrackerObject,\n clickthrough: string,\n sponsored: boolean;\n};\n\nexport const BuildAllSponsoredProductCardResponses = async (\n logger: ILogger | undefined,\n getAllSponsoredProducts: GetAllSponsoredProductFromNativeIdFn,\n windowInfo: INativeTemplateDelegateWindow,\n configuration: ICompiledPublisherConfiguration,\n bids: IBid[]\n): AsyncResult<IBuiltProductCardBidResponse[]> => {\n const log = Ctx(logger)?.with('BuildProductCardResponse');\n log?.info('Building product card responses');\n if (bids === undefined || bids === null) {\n return Err(new MissingBidsError());\n }\n\n const bidPromises = bids.map(buildAllProductCardResponsesFromBid.bind(undefined, log,\n getAllSponsoredProducts,\n windowInfo,\n configuration\n ));\n\n const productCardResponseResults = await Promise.allSettled(bidPromises);\n productCardResponseResults\n .filter(res => res.status === 'rejected')\n .map(res => res.reason as ErrResult<Error>)\n .forEach(err => log?.warn(err));\n \n const fulfilled = productCardResponseResults\n .filter(res => res.status === 'fulfilled');\n\n fulfilled\n .filter(res => !res.value.ok)\n .map(res => res.value as ErrResult)\n .map(res => res.error)\n .forEach(err => log?.warn(err));\n \n return Ok(productCardResponseResults\n .filter(res => res.status === 'fulfilled')\n .filter(res => res.value.ok)\n .map(res => res.value as OkResult<IBuiltProductCardBidResponse[]>)\n .flatMap(res => res.value));\n};\n\nexport async function* GenerateSponsoredProductCardResponse(\n logger: ILogger | undefined,\n getAllSponsoredProducts: GetAllSponsoredProductFromNativeIdFn,\n windowInfo: INativeTemplateDelegateWindow,\n configuration: ICompiledPublisherConfiguration,\n bids: IBid[]\n): AsyncGenerator<IBuiltProductCardBidResponse> {\n const log = Ctx(logger)?.with('GenerateProductCardResponse');\n log?.info('Entering product card response generator', bids);\n for(const bid of bids) {\n log?.info('Generating product card response', bid);\n const result = await buildAllProductCardResponsesFromBid(\n log,\n getAllSponsoredProducts,\n windowInfo,\n configuration,\n bid\n );\n if(!result.ok) {\n log?.warn(result.error);\n continue;\n }\n yield* GenerateArray(result.value);\n }\n}\n\nconst getField = (native: INativeResponse) =>\n (id: number) =>\n native.native.assets\n ?.find(asset => asset.id === id)\n ?.data\n ?.value;\n\nconst getTrackers = (logger: ILogger | undefined, bid: IBid, native: INativeResponse): Result<ITrackerObject> => {\n const log = Ctx(logger)?.with('getTrackers');\n log?.info('Getting trackers');\n\n const win = bid.nurl;\n if (win === undefined) {\n return Err(new MissingWinUrlError(bid));\n }\n\n const imp = native.native.eventtrackers\n ?.filter(tracker => tracker.event === EventTypes.Imp && tracker.method === EventTrackingMethods.Img)\n .map(tracker => tracker.url)\n .filter(url => url !== undefined) ?? [];\n\n const others = native.native.eventtrackers\n ?.filter(tracker => tracker.url !== undefined)\n .map(tracker => ({\n type: tracker.method,\n url: tracker.url!\n })) ?? [];\n\n return Ok({ win, imp, others });\n};\n\nconst fetchProductsFromBid = async (\n logger: ILogger | undefined,\n getAllSponsoredProducts: GetAllSponsoredProductFromNativeIdFn,\n bid: IBid\n): AsyncResult<{\n products: IProductInformation[]\n native: INativeResponse\n}> => {\n try {\n const log = Ctx(logger)?.with('fetchProductsFromBid');\n log?.info('Fetching products from IBid');\n const productCardResponses: IBuiltProductCardBidResponse[] = [];\n if (bid.adm === undefined) {\n log?.warn('Bid is missing ADM', bid);\n return Err(new MissingAdmError(bid));\n }\n const adm = bid.adm; // save it here to make it effectively final;\n const nativeRes = TryGet(() => JSON.parse(adm) as INativeResponse);\n if (!nativeRes.ok) {\n log?.error('Bid adm failed to deserialize', bid, adm);\n return Err(new MalformedNativeResponseError(bid));\n }\n\n const native = nativeRes.value;\n const metaProductId = getField(native)(NativeAssetId.SurfMetaProduct);\n\n if (metaProductId === undefined) {\n return Err(new MissingProductIdError(bid, native));\n }\n\n const productRes = await getAllSponsoredProducts(metaProductId);\n if (!productRes.ok) {\n return productRes;\n }\n\n return Ok({\n products: productRes.value,\n native\n });\n } catch (err) {\n return Err(err as Error);\n }\n}\n\nfunction *buildProductCardResponseFromRecommendedProductInfo(\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n configuration: ICompiledPublisherConfiguration,\n products: IProductInformation[]\n): Generator<IBuiltProductCardResponse> {\n \n}\n\nfunction *buildProductCardResponseFromProductInfo(\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n configuration: ICompiledPublisherConfiguration,\n bid: IBid,\n native: INativeResponse,\n products: IProductInformation[],\n): Generator<IBuiltProductCardBidResponse> {\n const log = Ctx(logger)?.with('buildProductCardResponseFromProductInfo');\n for (const product of products) {\n const clickthrough = BuildClickthroughUrl(\n log,\n windowInfo,\n configuration,\n product\n );\n\n if (!clickthrough.ok) {\n return clickthrough;\n }\n\n const trackers = getTrackers(log, bid, native);\n\n if (!trackers.ok) {\n return trackers;\n }\n\n const finalClickthrough = TryDo(() => {\n const bidderClickthrough = new URL(native.native.link.url);\n bidderClickthrough.searchParams.set('url', clickthrough.value);\n return bidderClickthrough.toString();\n });\n if(!finalClickthrough.ok) {\n return finalClickthrough;\n }\n\n yield {\n type: 2,\n native,\n product,\n bid,\n clickthrough: finalClickthrough.value,\n trackers: trackers.value,\n sponsored: true\n };\n }\n}\n\nconst buildAllProductCardResponsesFromBid = async (\n logger: ILogger | undefined,\n getAllSponsoredProducts: GetAllSponsoredProductFromNativeIdFn,\n windowInfo: INativeTemplateDelegateWindow,\n configuration: ICompiledPublisherConfiguration,\n bid: IBid\n): AsyncResult<IBuiltProductCardBidResponse[]> => {\n const log = Ctx(logger)?.with('buildAllProductCardResponseBids');\n log?.info('Building all product card responses');\n try {\n return Ok(await ConsumeAllAsync(generateProductCardResponseFromBid(\n log,\n getAllSponsoredProducts,\n windowInfo,\n configuration,\n bid\n )));\n } catch (err) {\n return Err(err as Error);\n }\n}\n\nasync function* generateProductCardResponseFromBid (\n logger: ILogger | undefined,\n getAllSponsoredProducts: GetAllSponsoredProductFromNativeIdFn,\n windowInfo: INativeTemplateDelegateWindow,\n configuration: ICompiledPublisherConfiguration,\n bid: IBid\n): AsyncGenerator<IBuiltProductCardBidResponse> {\n const log = Ctx(logger)?.with('generateProductCardResponseFromBid');\n log?.info('generating product card response from bid');\n try {\n const productResult = await fetchProductsFromBid(log, getAllSponsoredProducts, bid);\n if(!productResult.ok) {\n log?.info('No products!');\n return productResult;\n }\n\n const { products, native } = productResult.value;\n\n const builtProductCardResponses: IBuiltProductCardBidResponse[] = [];\n yield* buildProductCardResponseFromProductInfo(log,\n windowInfo,\n configuration,\n bid,\n native,\n products\n );\n } catch (err) {\n return;\n }\n}\n\nexport class MissingBidsError extends Error {\n constructor() {\n super('Unable to build product cards - no bids were provided');\n }\n}\n\nexport class MalformedNativeResponseError extends Error {\n constructor(public readonly bid: IBid) {\n super('Unable to build product card - missing native response');\n }\n}\n\nexport class MissingWinUrlError extends Error {\n constructor(public readonly bid: IBid) {\n super('Unable to build product card - no win URL was provided');\n }\n}\n\nexport class MissingProductIdError extends Error {\n constructor(\n public readonly bid: IBid,\n public readonly native: INativeResponse\n ) {\n super('Unable to build product card - no product ID was provided');\n }\n}\n",
45
- "const DEFAULT_MAX_SLUG: number = 5;\n\n/**\n * Converts the passed string to a slug with the specified options. By default, the slug is hyphenated and only\n * contains alphanumeric characters. You can pass a different hyphenation regex and a different drop regex to\n * customize the slug. For example, {{slug \"My Product Name\"}} will return \"my-product-name\".\n *\n * To change which characters are converted to hyphens, you can pass a regular expression to the hyphenate option.\n * For example, {{slug \"My Product's Name\" hyphenate=\"[\\s']\"}} will return \"my-product-s-name\".\n * The default hyphenate regex is /[\\s_\\-,]/ig.\n *\n * To remove characters instead of hyphenate them, you can pass a regular expression to the drop option.\n * For example, {{slug \"My Product's Name\" drop=\"[^A-Za-z0-9\\s']\"}} will return \"my-product's-name\".\n * The default drop regex is /[^A-Za-z0-9\\-]/ig.\n *\n * To limit the max number of hyphenated slug components returned, you can pass a length option.\n * For example, {{slug \"My Product's Name\" length=2}} will return \"my-product\".\n * The default length is 5.\n *\n * @param name The string to be slugified\n * @param options The options object. Can take \"hypenate\", \"drop\", and \"length\" options.\n * @returns The slugified string\n */\nexport function slug(\n name: string,\n options: {\n hash: {\n hyphenate: string | undefined;\n drop: string | undefined;\n dropBefore: string | undefined,\n length: number | undefined;\n separator: string | undefined\n };\n }\n): string {\n if (name === undefined || name === null || typeof (name) !== 'string') {\n return '';\n }\n\n const hyphenate: RegExp = options.hash.hyphenate !== undefined\n ? new RegExp(options.hash.hyphenate, 'ig')\n : /[\\s_\\-,]/ig;\n\n const drop: RegExp = options.hash.drop !== undefined\n ? new RegExp(options.hash.drop, 'ig')\n : /[^A-Za-z0-9-]/ig;\n\n const dropBefore = options.hash.dropBefore !== undefined\n ? new RegExp(options.hash.dropBefore)\n : undefined;\n\n const maxSlug: number = options.hash.length ?? DEFAULT_MAX_SLUG;\n\n const separator = options.hash.separator ?? '-';\n if (dropBefore !== undefined) {\n name = name.replace(dropBefore, '');\n }\n return name\n .replace(hyphenate, separator)\n .replace(drop, '')\n .toLowerCase()\n .split(separator)\n .slice(0, maxSlug)\n .join(separator);\n}\n\n/**\n * Converts the passed string to lowercase. For example, {{lower \"My Product Name\"}} will return \"my product name\".\n *\n * @param name The string to be converted to lowercase\n * @returns A lowercase version of the passed string\n */\nexport function lower(name: string): string {\n if (name === undefined || name === null || typeof (name) !== 'string') {\n return '';\n }\n return name.toLowerCase();\n}\n\n/**\n * Returns the path component of the URL at the specified position, 1-indexed\n * For example, if the URL is \"https://example.com/foo/bar\", {{path 1}} will return \"foo\".\n *\n * @param position The position of the path component to return, 1-indexed\n * @returns The path component at the specified position\n */\nexport function path(position: number): string | undefined {\n if (position === 0 || position === undefined || position === null) {\n return '';\n }\n const paths = window.location.pathname.split('/');\n if (paths.length <= position) {\n return '';\n }\n return paths[position];\n}\n\nexport function sed(input: string, searchRegex: string, replacement: string): string {\n return input.replace(new RegExp(searchRegex), (...args) => {\n const END = -2;\n const groups = args.slice(1, END) as string[]; // Extract capture groups\n let result: string | undefined = replacement;\n\n // Replace backreferences (\\1, \\2, etc.)\n result = result.replace(/\\\\(\\d+)/g, (_, groupIndex) => groups[groupIndex - 1] ?? '');\n\n // Support for \\U (uppercase transformation)\n result = result.replace(/\\\\U(\\d+)/g, (_, groupIndex) =>\n (groups[groupIndex - 1] ?? '').toUpperCase()\n );\n\n result = sedCommand(result, 'U', groups, str => str?.toUpperCase());\n result = sedCommand(result, 'L', groups, str => str?.toLowerCase());\n result = sedCommand(result, 'I', groups, str => str?.[0]);\n\n return result ?? '';\n });\n}\n\nfunction sedCommand(\n input: string | undefined,\n char: string,\n groups: string[],\n transform: (input: string | undefined) => string | undefined\n): string | undefined {\n if (input === undefined) {\n return undefined;\n }\n return input.replace(new RegExp(`\\\\\\\\${char}(\\\\d+)`, 'g'), (_, groupIndex) =>\n transform(groups[groupIndex - 1] ?? '') ?? ''\n );\n}\n\n/**\n * Returns the value of the specified query parameter from the URL, specified by key.\n * For example, if the URL is \"https://example.com?foo=bar\", {{search \"foo\"}} will return \"bar\".\n *\n * @param name The name of the query parameter to return\n * @returns The value of the query parameter, or an empty string if the parameter is not found\n */\nexport function search(name: string): string {\n if (name?.length === undefined || name.length === 0) {\n return '';\n }\n const search = window.location.search;\n if (search.length === 0) {\n return '';\n }\n const params = new URLSearchParams(search);\n return params.get(name) ?? '';\n}\n\n/**\n * Returns the first truthy argument, or an empty string if all arguments are falsy. Returns false for empty strings\n * For example, {{coalesce false (eq \"b\" \"d\") c}} will return \"c\", because false is falsy, \"b\" is not equal to \"d\",\n * and c is truthy.\n *\n * @returns The first truthy argument, or an empty string if all arguments are falsy\n */\nexport function coalesce(): string {\n for (let i = 0; i < arguments.length - 1; i++) {\n const arg = arguments[i];\n if (arg !== null && arg !== undefined && arg !== '' && arg !== false) {\n return arg;\n }\n }\n return '';\n}\n\n/**\n * Joins the passed arguments with the specified separator.\n * For example, {{join \"foo\" \"bar\" \"baz\"}} will return \"foo/bar/baz\"..\n *\n * There is an optional \"separator\" argument that can be passed to change the separator. For example,\n * {{join \"foo\" \"bar\" \"baz\" separator=\",\"}} will return \"foo,bar,baz\".\n *\n * @returns The joined string\n */\nexport function join(): string {\n const args = [...arguments].slice(0, arguments.length - 1);\n const options = arguments[arguments.length - 1]; /* options is always the last argument */\n const separator = options.hash.separator as string ?? '/';\n return args\n .filter(arg => arg !== undefined && arg !== null && arg !== '') /* filter out nulls and empties */\n .join(separator);\n}\n\n/**\n * Encodes the passed string for use in a URI component.\n *\n * @param component The string to encode\n * @returns The encoded string, or an empty string if the component is falsy\n */\nexport function uri(component: string): string {\n if (component?.length === undefined || component.length === 0) {\n return '';\n }\n const encoded = encodeURIComponent(component);\n return encoded.replaceAll('\\'', '%27');\n}\n\n/**\n * Returns true if the two passed arguments are equal (using javascript ===), false otherwise.\n *\n * @param a The first argument\n * @param b The second argument\n * @returns True if the two arguments are equal, false otherwise\n */\nexport function eq(a: any, b: any): boolean {\n return a === b;\n}\n\n/**\n * Returns true if either of the passed arguments are truthy, false otherwise.\n *\n * @param a The first argument\n * @param b The second argument\n * @returns True if either of the arguments are truthy, false otherwise\n */\nexport function or(a: any, b: any): boolean {\n return Boolean(a) || Boolean(b);\n}\n\n/**\n * Returns true if both of the passed arguments are truthy, false otherwise.\n *\n * @param a The first argument\n * @param b The second argument\n * @returns True if both of the arguments are truthy, false otherwise\n */\nexport function and(a: any, b: any): boolean {\n return Boolean(a) && Boolean(b);\n}\n\n/**\n * Returns true if the first argument is in the second argument (an array). Otherwise, returns false.\n * If the second argument is not an array, or the array is empty, this will return false.\n *\n * The name of the helper is \"in\" but the name of the function is \"isIn\" because \"in\" is a reserved word in javascript.\n *\n * @param a The value to check\n * @param b The array to check against\n * @returns True if the value is in the array, false otherwise\n */\nexport function isIn(a: any, b: any[]): boolean {\n if (b?.length === undefined || b.length === 0) {\n return false;\n }\n return b.includes(a);\n}\n\n/**\n * Returns an array of the passed arguments. Useful with the \"in\" helper\n *\n * @returns An array of the passed arguments\n */\nexport function array(): any[] {\n return Array.from(arguments).slice(0, -1);\n}\n\n/* Need to disable this rule here to be compatbile with handlebars */\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const GetHelpers = (): Record<string, Function> => ({\n slug,\n lower,\n path,\n sed,\n replace: sed,\n search,\n coalesce,\n join,\n get_first: coalesce,\n uri,\n or,\n and,\n isIn,\n array\n});\n",
46
- "import type { INativeTemplateDelegateWindow, ICompiledPublisherConfiguration, IDevice, IGeoContext } from './models';\nimport {\n AsyncResult,\n Err,\n INavigator,\n type IScreen,\n GetValue,\n Ok,\n RequestBidsFn,\n ILogger,\n GetSponsoredProductFromNativeIdFn,\n PersonalRecommenderFn,\n NonPersonalRecommenderFn,\n GetConfigurationFn,\n GetGeoFn,\n GetDeviceFn,\n GetRecommendedProductFromProductIdFn,\n RequestBids,\n GetConfiguration,\n GetGeo,\n GetDevice,\n GetSponsoredProduct,\n GetRecommendedProduct,\n GenerateTopProducts,\n GenerateForYou,\n GeneratePreviousPurchases,\n GetAllSponsoredProductFromNativeIdFn,\n GetAllSponsoredProducts,\n} from './services';\nimport {\n BuildAllSponsoredProductCardResponses,\n BuildAllSponsoredProductCardResponsesFn,\n DefaultNative,\n GenerateSponsoredProductCardResponse,\n GenerateSponsoredProductCardResponseFn,\n NativeRequestBuilderFn,\n RequestBuilderFn,\n StartNative,\n StartRequest\n} from './helpers';\nimport Handlebars from 'handlebars/runtime';\nimport {\n BuildHybridCarousel,\n BuildHybridCarouselFn,\n BuildRecommendedCarousel,\n BuildRecommendedCarouselFn,\n BuildSponsoredCarousel,\n BuildSponsoredCarouselFn\n} from './helpers/response/Carousel';\nimport { GetWindowInfo } from './helpers/Window';\n\nexport const PROD_BIDDER = '//bid.surfside.io';\nexport const PROD_CONFIGURATION_SERVICE = '//r.surfside.io';\nexport const PROD_SPONSORED_PRODUCT_FEED = '//creative.surfside.io';\nexport const PROD_RECOMMENDED_PRODUCT_FEED = '//creative.surfside.io';\nexport const PROD_RECOMMENDER_SERVICE = '//t.surfside.io';\n\nconst TLS = (url: string) => 'https:' + url;\n\nexport interface ISurfsideApi {\n logger?: ILogger,\n\n /* Data */\n getDevice: GetDeviceFn,\n device: IDevice | undefined,\n\n getGeo: GetGeoFn,\n geo: IGeoContext | undefined,\n /* Config */\n configuration: ICompiledPublisherConfiguration,\n getConfiguration: GetConfigurationFn,\n handlebars: typeof Handlebars\n\n /* Bidder */\n requestBids: RequestBidsFn,\n startRequest: RequestBuilderFn,\n startNative: NativeRequestBuilderFn,\n defaultNative: NativeRequestBuilderFn,\n\n /* Product Feed */\n getSponsoredProduct: GetSponsoredProductFromNativeIdFn,\n getAllSponsoredProducts: GetAllSponsoredProductFromNativeIdFn,\n getRecommendedProduct: GetRecommendedProductFromProductIdFn,\n\n /* Recommender */\n generateTopProducts: NonPersonalRecommenderFn,\n generateForYou: PersonalRecommenderFn,\n generatePreviousPurchases: PersonalRecommenderFn,\n\n /* Product Card Response handlers */\n buildSponsoredCarousel: BuildSponsoredCarouselFn,\n buildRecommendedCarousel: BuildRecommendedCarouselFn,\n buildHybridCarousel: BuildHybridCarouselFn,\n buildAllSponsoredProductCardResponses: BuildAllSponsoredProductCardResponsesFn,\n generateSponsoredProductCardResponse: GenerateSponsoredProductCardResponseFn\n}\n\nexport async function InitSurfAdsCoreInternal(\n logger: ILogger | undefined,\n requestBids: RequestBidsFn,\n getConfiguration: GetConfigurationFn,\n getGeo: GetGeoFn,\n getDevice: GetDeviceFn,\n getSponsoredProduct: GetSponsoredProductFromNativeIdFn,\n getAllSponsoredProducts: GetAllSponsoredProductFromNativeIdFn,\n getRecommendedProduct: GetRecommendedProductFromProductIdFn,\n generateTopProducts: NonPersonalRecommenderFn,\n generateForYou: PersonalRecommenderFn,\n generatePreviousPurchases: PersonalRecommenderFn,\n buildAllSponsoredProductCardResponses: BuildAllSponsoredProductCardResponsesFn,\n generateSponsoredProductCardResponse: GenerateSponsoredProductCardResponseFn,\n handlebars: typeof Handlebars,\n windowInfo: INativeTemplateDelegateWindow,\n screen: IScreen,\n navigator: INavigator,\n mobile: boolean,\n ip: string | undefined,\n geoProviderToken: string | undefined,\n accountId: string,\n siteId: string,\n channelId: string,\n locationId: string,\n userId: string | undefined,\n): AsyncResult<ISurfsideApi> {\n\n const device = getDevice(screen, navigator, mobile);\n const geo = await getGeo(ip, geoProviderToken);\n\n const configuration = await getConfiguration();\n if (!configuration.ok) {\n return Err(new MissingConfigurationError(accountId, siteId));\n }\n\n const startRequest = StartRequest.bind(undefined,\n logger,\n accountId,\n siteId,\n channelId,\n locationId,\n GetValue(device),\n GetValue(geo),\n userId\n );\n\n const startNative = StartNative.bind(undefined, logger);\n const defaultNative = DefaultNative.bind(undefined, logger);\n\n return Ok({\n logger,\n getDevice,\n device: GetValue(device),\n getGeo,\n geo: GetValue(geo),\n configuration: configuration.value,\n getConfiguration,\n handlebars,\n requestBids,\n startRequest,\n startNative,\n defaultNative,\n getSponsoredProduct,\n getAllSponsoredProducts,\n getRecommendedProduct,\n generateTopProducts,\n generateForYou,\n generatePreviousPurchases,\n buildAllSponsoredProductCardResponses,\n generateSponsoredProductCardResponse,\n buildSponsoredCarousel: BuildSponsoredCarousel.bind(undefined, logger,\n requestBids,\n generateSponsoredProductCardResponse\n ),\n buildRecommendedCarousel: BuildRecommendedCarousel.bind(undefined, logger,\n windowInfo,\n configuration.value,\n generateTopProducts,\n generatePreviousPurchases,\n generateForYou,\n userId\n ),\n buildHybridCarousel: BuildHybridCarousel.bind(undefined, logger,\n windowInfo,\n configuration.value,\n requestBids,\n generateSponsoredProductCardResponse,\n generateTopProducts,\n generatePreviousPurchases,\n generateForYou,\n userId\n\n )\n });\n}\n\nexport const InitSurfAdsCoreServices = async (\n logger: ILogger | undefined,\n bidderServiceUrl: string,\n configurationServiceUrl: string,\n productFeedUrl: string,\n recommendedProductFeedUrl: string,\n recommenderServiceUrl: string,\n windowInfo: INativeTemplateDelegateWindow,\n screen: IScreen,\n navigator: INavigator,\n mobile: boolean,\n ip: string | undefined,\n geoProviderToken: string | undefined,\n accountId: string,\n siteId: string,\n channelId: string,\n locationId: string,\n userId: string | undefined,\n): AsyncResult<ISurfsideApi> => {\n //TODO: Add handlebars helpers back here\n const handlebars = Handlebars.create();\n const recommendedProductFeed = GetRecommendedProduct.bind(undefined, logger,\n recommendedProductFeedUrl,\n accountId,\n locationId\n );\n const configurationService = GetConfiguration.bind(undefined, logger,\n configurationServiceUrl,\n handlebars,\n accountId,\n siteId\n );\n const configuration = await configurationService();\n if (!configuration.ok) {\n return configuration;\n }\n\n const getAllSponsoredProducts = GetAllSponsoredProducts.bind(undefined, logger, productFeedUrl, accountId, locationId);\n const generateProductCardResponse = GenerateSponsoredProductCardResponse.bind(undefined, logger,\n getAllSponsoredProducts,\n windowInfo,\n configuration.value\n );\n return await InitSurfAdsCoreInternal(\n logger,\n RequestBids.bind(undefined, logger,\n bidderServiceUrl,\n accountId,\n siteId,\n locationId,\n channelId\n ),\n configurationService,\n GetGeo.bind(undefined, logger),\n GetDevice.bind(undefined, logger),\n GetSponsoredProduct.bind(undefined, logger, productFeedUrl, accountId, locationId),\n getAllSponsoredProducts,\n GetRecommendedProduct.bind(undefined, logger, recommendedProductFeedUrl, accountId, locationId),\n GenerateTopProducts.bind(undefined, logger,\n recommendedProductFeed,\n recommenderServiceUrl,\n accountId,\n siteId,\n locationId\n ),\n GenerateForYou.bind(undefined, logger,\n recommendedProductFeed,\n recommenderServiceUrl,\n accountId,\n siteId,\n locationId,\n userId ?? 'undefined'\n ),\n GeneratePreviousPurchases.bind(undefined, logger,\n recommendedProductFeed,\n recommenderServiceUrl,\n accountId,\n siteId,\n locationId,\n userId ?? 'undefined'\n ),\n BuildAllSponsoredProductCardResponses.bind(undefined,\n logger,\n getAllSponsoredProducts,\n windowInfo,\n configuration.value\n ),\n generateProductCardResponse,\n handlebars,\n windowInfo,\n screen,\n navigator,\n mobile,\n ip,\n geoProviderToken,\n accountId,\n siteId,\n channelId,\n locationId,\n userId\n );\n};\n\n/* For use in serverside rendering */\n// TODO: Rename this?\nexport const InitSurfAdsCoreSSR = async (\n windowInfo: INativeTemplateDelegateWindow,\n screen: IScreen,\n navigator: INavigator,\n mobile: boolean,\n ip: string,\n geoProviderToken: string,\n accountId: string,\n siteId: string,\n channelId: string,\n locationId: string,\n userId: string | undefined,\n logger?: ILogger,\n): AsyncResult<ISurfsideApi> => InitSurfAdsCoreServices(\n logger,\n TLS(PROD_BIDDER),\n TLS(PROD_CONFIGURATION_SERVICE),\n TLS(PROD_SPONSORED_PRODUCT_FEED),\n TLS(PROD_RECOMMENDED_PRODUCT_FEED),\n TLS(PROD_RECOMMENDER_SERVICE),\n windowInfo,\n screen,\n navigator,\n mobile,\n ip,\n geoProviderToken,\n accountId,\n siteId,\n channelId,\n locationId,\n userId\n);\n\n/* For use in web browsers */\nexport const InitSurfAdsCore = async (\n accountId: string,\n siteId: string,\n channelId: string,\n locationId: string,\n userId: string | undefined,\n logger?: ILogger\n): AsyncResult<ISurfsideApi> => {\n /* Not in a browser */\n const windowInfo = GetWindowInfo();\n if(!windowInfo.ok) {\n return windowInfo;\n }\n return InitSurfAdsCoreServices(\n logger,\n TLS(PROD_BIDDER),\n TLS(PROD_CONFIGURATION_SERVICE),\n TLS(PROD_SPONSORED_PRODUCT_FEED),\n TLS(PROD_RECOMMENDED_PRODUCT_FEED),\n TLS(PROD_RECOMMENDER_SERVICE),\n windowInfo.value,\n window.screen,\n window.navigator,\n isMobile(),\n undefined,\n undefined,\n accountId,\n siteId,\n channelId,\n locationId,\n userId\n );\n};\n\nexport class MissingConfigurationError extends Error {\n constructor(accountId: string, siteId: string) {\n super(\n 'Missing configuration for\\n' +\n ` accountId: ${accountId}\\n` +\n ` siteId: ${siteId}\\n` +\n '1. Check to make sure that these are the correct values for each field' +\n '2. Check your publisher configuration at ' +\n `https://app.surfside.io/inventory/sites/publisher/${accountId}/${siteId}`\n );\n }\n};\n\nexport class NotABrowserError extends Error {\n constructor() {\n super(\n 'You are not running Surfside Ads Core in a Web browser, so you cannot use \"InitSurfAdsCore\". ' +\n 'Instead, use InitSurfAdsCoreSSR, and pass the user\\'s screen, navigator, and IP address explicitly ' +\n 'so that Surfside Ads Core can initialize geo and device information services. e.g: \\n' +\n ' InitSurfAdsCoreSSR(\\n' +\n ' /* width and height of the user\\'s screen: */\\n' +\n ' { width: screenWidth, height: screenHeight },\\n' +\n ' /* userAgent string and language of the user: */\\n' +\n ' { userAgent: userAgent, language: userLanguage },\\n' +\n ' /* whether the user is on mobile or not: */\\n' +\n ' true,\\n' +\n ' /* the requesting User\\'s IP */\\n' +\n ' request.ipAddress,\\n' +\n ' /* Your API Token for the Surfside Geo Service: */\\n' +\n ' geoProviderToken,\\n' +\n ' accountId,\\n' +\n ' siteId,\\n' +\n ' channelId,\\n' +\n ' locationId,\\n' +\n ' userId,\\n' +\n ' /* Optional logger: */\\n' +\n ' logger\\n' +\n ' )'\n );\n }\n}\n\nconst isMobile = () => typeof window !== 'undefined' ? (window.ontouchstart !== undefined) : false;\n",
47
- "import { IBidRequest, ICompiledPublisherConfiguration, INativeTemplateDelegateWindow, IProductInformation } from '../../models';\nimport { AsyncResult, Ctx, Err, ILogger, NoBidsError, NonPersonalRecommenderFn, Ok, PersonalRecommenderFn, RequestBidsFn, Result } from '../../services';\nimport { BuildClickthroughUrl } from './Clickthrough';\nimport { GenerateSponsoredProductCardResponseFn, IBuiltProductCardBidResponse, IBuiltProductCardResponse } from './ProductCard';\n\nexport type BuildSponsoredCarouselFn = (request: IBidRequest) => Result<IBuiltCarousel>;\nexport type BuildRecommendedCarouselFn = (RecommenderType: PublicRecommenderType) => Result<IBuiltCarousel>;\nexport type BuildHybridCarouselFn = (request: IBidRequest, recommenderType: PublicRecommenderType)\n => Result<IBuiltCarousel>;\nexport type CarouselNextProductFn = () => AsyncGenerator<IBuiltProductCardResponse>;\n\nexport interface IBuiltCarousel {\n type: 3,\n getProduct: CarouselNextProductFn\n}\n\nexport type RecommenderType = 'top-products' | 'for-you' | 'past-purchases';\n\nexport interface PublicTopProductsRecommenderType {\n type: 'top-products'\n}\n\nexport interface PublicForYouRecommenderType {\n type: 'for-you',\n};\n\nexport interface PublicPastPurchasesRecommenderType {\n type: 'past-purchases',\n};\n\nexport type PublicRecommenderType = PublicTopProductsRecommenderType\n | PublicForYouRecommenderType\n | PublicPastPurchasesRecommenderType;\n\nexport interface ITopProductRecommender {\n recommenderType: 'top-products';\n topProductGenerator: NonPersonalRecommenderFn;\n};\n\nexport interface IForYouProductRecommender {\n recommenderType: 'for-you';\n forYouProductGenerator: PersonalRecommenderFn;\n topProductGenerator: NonPersonalRecommenderFn;\n userId?: string;\n}\n\nexport interface IPastPurchasesProductRecommender {\n recommenderType: 'past-purchases';\n pastPurchasesProductGenerator: PersonalRecommenderFn;\n topProductGenerator: NonPersonalRecommenderFn;\n userId?: string;\n};\n\nexport type ProductRecommender = ITopProductRecommender | IForYouProductRecommender | IPastPurchasesProductRecommender;\n\nexport const BuildSponsoredCarousel = (\n logger: ILogger | undefined,\n requestBids: RequestBidsFn,\n generateProductCardResponse: GenerateSponsoredProductCardResponseFn,\n request: IBidRequest\n): Result<IBuiltCarousel> => {\n const log = Ctx(logger)?.with('BuildSponsoredCarousel');\n log?.info('Building sponsored carousel');\n return Ok({\n type: 3,\n getProduct: getNextSponsoredCarouselProduct.bind(undefined, log,\n requestBids,\n generateProductCardResponse,\n request\n )\n });\n}\n\nexport const BuildRecommendedCarousel = (\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n topProductGenerator: NonPersonalRecommenderFn,\n forYouProductGenerator: PersonalRecommenderFn,\n pastPurchasesProductGenerator: PersonalRecommenderFn,\n userId: string | undefined,\n recommenderType: PublicRecommenderType\n): Result<IBuiltCarousel> => {\n switch(recommenderType.type) {\n case 'top-products': {\n return buildRecommendedCarouselInternal(logger,\n windowInfo,\n config,\n {\n recommenderType: 'top-products',\n topProductGenerator\n }\n );\n }\n case 'for-you': {\n return buildRecommendedCarouselInternal(logger,\n windowInfo,\n config,\n {\n recommenderType: 'for-you',\n forYouProductGenerator,\n topProductGenerator,\n userId\n }\n );\n }\n case 'past-purchases': {\n return buildRecommendedCarouselInternal(logger,\n windowInfo,\n config,\n {\n recommenderType: 'past-purchases',\n pastPurchasesProductGenerator,\n topProductGenerator,\n userId\n }\n );\n }\n }\n}\n\nconst buildRecommendedCarouselInternal = (\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n recommenderType: ProductRecommender\n): Result<IBuiltCarousel> => {\n const log = Ctx(logger)?.with('buildRecommendedCarouselInternal');\n log?.info('Building Recommended Carousel');\n\n return Ok({\n type: 3,\n getProduct: getNextRecommendedCarouselProduct.bind(undefined, log,\n windowInfo,\n config,\n recommenderType\n )\n });\n}\n\nexport const BuildHybridCarousel = (\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n requestBids: RequestBidsFn,\n generateProductCardResponse: GenerateSponsoredProductCardResponseFn,\n topProductGenerator: NonPersonalRecommenderFn,\n forYouProductGenerator: PersonalRecommenderFn,\n pastPurchasesProductGenerator: PersonalRecommenderFn,\n userId: string | undefined,\n request: IBidRequest,\n recommenderType: PublicRecommenderType\n): Result<IBuiltCarousel> => {\n switch (recommenderType.type) {\n case 'top-products': {\n return buildHybridCarouselInternal(logger,\n windowInfo,\n config,\n requestBids,\n generateProductCardResponse,\n request,\n {\n recommenderType: 'top-products',\n topProductGenerator\n }\n )\n }\n case 'for-you': {\n return buildHybridCarouselInternal(logger,\n windowInfo,\n config,\n requestBids,\n generateProductCardResponse,\n request,\n {\n recommenderType: 'for-you',\n forYouProductGenerator,\n topProductGenerator,\n userId\n }\n );\n }\n case 'past-purchases': {\n return buildHybridCarouselInternal(logger,\n windowInfo,\n config,\n requestBids,\n generateProductCardResponse,\n request,\n {\n recommenderType: 'past-purchases',\n pastPurchasesProductGenerator,\n topProductGenerator,\n userId\n }\n );\n }\n }\n}\n\nconst buildHybridCarouselInternal = (\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n requestBids: RequestBidsFn,\n generateProductCardResponse: GenerateSponsoredProductCardResponseFn,\n request: IBidRequest,\n recommenderType: ProductRecommender\n): Result<IBuiltCarousel> => {\n const log = Ctx(logger)?.with('BuildHybridCarousel');\n log?.info('Building hybrid carousel', request, recommenderType);\n return Ok({\n type: 3,\n getProduct: getNextHybridCarouselProduct.bind(undefined, log,\n windowInfo,\n config,\n requestBids,\n generateProductCardResponse,\n request,\n recommenderType\n )\n });\n}\n\nasync function* getNextHybridCarouselProduct(\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n requestBids: RequestBidsFn,\n generateProductCardResponse: GenerateSponsoredProductCardResponseFn,\n request: IBidRequest,\n recommenderType: ProductRecommender\n): AsyncGenerator<IBuiltProductCardResponse> {\n const log = Ctx(logger)?.with('getNextHybridCarouselProduct');\n log?.info('Entering hybrid carousel product generator');\n\n yield* getNextSponsoredCarouselProduct(log,\n requestBids,\n generateProductCardResponse,\n request\n );\n log?.info('Done getting next sponsoredCarouselProduct');\n\n yield* getNextRecommendedCarouselProduct(log,\n windowInfo,\n config,\n recommenderType\n );\n}\n\nasync function *getNextSponsoredCarouselProduct(\n logger: ILogger | undefined,\n requestBids: RequestBidsFn,\n generateProductCardResponse: GenerateSponsoredProductCardResponseFn,\n request: IBidRequest\n): AsyncGenerator<IBuiltProductCardBidResponse> {\n const log = Ctx(logger)?.with('getNextSponsoredCarouselProduct');\n try {\n log?.info('Entering sponsored carousel product generator');\n // while(true) {\n log?.info('Getting next sponsored carousel products', request);\n \n const response = await requestBids(request);\n if(!response.ok) {\n log?.info('No response from bidder', response.error);\n return;\n }\n\n const bids = response.value.seatbid?.[0]?.bid;\n if(bids === undefined) {\n log?.info('Got no bids in response!');\n return;\n }\n\n const generator = generateProductCardResponse(bids);\n for await(const product of generator) {\n log?.debug('Getting next product from existing bidder response', product);\n yield product;\n }\n log?.debug('Out of bids from previous response. Requesting new bid response');\n return;\n // }\n } catch(err) {\n log?.error('product carousel generator failed! Got', err);\n } finally {\n log?.warn('Exiting carousel product generator'); \n }\n}\n\nasync function *getNextRecommendedCarouselProduct(\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n recommenderType: ProductRecommender\n): AsyncGenerator<IBuiltProductCardResponse> {\n const log = Ctx(logger)?.with('getNextRecommendedCarouselProduct');\n log?.info('Entering recommended carousel product generator');\n log?.info('Getting next recommended carousel product');\n switch (recommenderType.recommenderType) {\n case 'top-products': {\n yield* getNextTopAllRecommendedCarouselProduct(log,\n windowInfo,\n config,\n recommenderType\n );\n return;\n }\n case 'for-you': {\n if (recommenderType.userId !== undefined) {\n yield* getNextForYouRecommendedCarouselProduct(log,\n windowInfo,\n config,\n recommenderType,\n recommenderType.userId\n );\n }\n break;\n }\n case 'past-purchases': {\n if (recommenderType.userId !== undefined) {\n yield* getNextPastPurchasesRecommendedCarouselProduct(log,\n windowInfo,\n config,\n recommenderType,\n recommenderType.userId\n );\n }\n break;\n }\n }\n /* fallback case if the other ones yield nothing, or if user ID is not set */\n yield* getNextTopAllRecommendedCarouselProduct(log,\n windowInfo,\n config,\n {\n recommenderType: 'top-products',\n topProductGenerator: recommenderType.topProductGenerator\n }\n );\n}\n\nasync function* getNextTopAllRecommendedCarouselProduct(\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n recommenderType: ITopProductRecommender\n): AsyncGenerator<IBuiltProductCardResponse> {\n const log = Ctx(logger)?.with('getNextTopAllRecommendedCarouselProduct');\n log?.info('Getting next top all product');\n for await (const product of recommenderType.topProductGenerator()) {\n const built = recommendedProductToBuiltProduct(log, windowInfo, config, product);\n if (!built.ok) {\n log?.warn('Failed to build product response from recommended product. Skipping this one', product);\n continue;\n }\n yield built.value;\n }\n}\n\nasync function* getNextForYouRecommendedCarouselProduct(\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n recommenderType: IForYouProductRecommender,\n userId: string\n): AsyncGenerator<IBuiltProductCardResponse> {\n const log = Ctx(logger)?.with('getNextForYouRecommendedCarouselProduct');\n log?.info('Getting next \"for-you\" recommended product');\n\n for await (const product of recommenderType.forYouProductGenerator(userId)) {\n const built = recommendedProductToBuiltProduct(log, windowInfo, config, product);\n if (!built.ok) {\n log?.warn('Failed to build product response from recommended product. Skipping this one', product);\n continue;\n }\n yield built.value;\n }\n /* Use top-all as fallback */\n yield* getNextTopAllRecommendedCarouselProduct(log,\n windowInfo,\n config,\n {\n recommenderType: 'top-products',\n topProductGenerator: recommenderType.topProductGenerator\n }\n );\n}\n\nasync function* getNextPastPurchasesRecommendedCarouselProduct(\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n recommenderType: IPastPurchasesProductRecommender,\n userId: string\n): AsyncGenerator<IBuiltProductCardResponse> {\n const log = Ctx(logger)?.with('getNextPastPurchasesRecommendedCarouselProduct');\n log?.info('Getting next \"buy-again\" recommended product');\n\n for await (const product of recommenderType.pastPurchasesProductGenerator(userId)) {\n const built = recommendedProductToBuiltProduct(log, windowInfo, config, product);\n if (!built.ok) {\n log?.warn('Failed to build product response from recommended product. Skipping this one', product);\n continue;\n }\n yield built.value;\n }\n\n yield* getNextTopAllRecommendedCarouselProduct(log,\n windowInfo,\n config,\n {\n recommenderType: 'top-products',\n topProductGenerator: recommenderType.topProductGenerator\n }\n );\n}\n\nconst recommendedProductToBuiltProduct = (\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n product: IProductInformation\n): Result<IBuiltProductCardResponse> => {\n const log = Ctx(logger)?.with('recommendedProductToBuiltProduct');\n log?.info('Converting recommended product to built product card response');\n\n const clickthrough = BuildClickthroughUrl(log,\n windowInfo,\n config,\n product\n );\n if (!clickthrough.ok) {\n return clickthrough;\n }\n return Ok({\n type: 2,\n clickthrough: clickthrough.value + '_recommended',\n product,\n sponsored: false\n // TODO: Add trackers here\n });\n}\n\nexport class InvalidRecommenderTypeError extends Error {\n constructor(public type: string) {\n super('Could not generate carousel; invalid recommender type \"' + type + '\"');\n }\n}",
48
- "import { NotABrowserError } from '../Api';\nimport { INativeTemplateDelegateWindow } from '../models';\nimport { Err, Ok, Result } from '../services';\n\nexport const GetWindowInfo = (): Result<INativeTemplateDelegateWindow> => {\n if((typeof window) === 'undefined') {\n return Err(new NotABrowserError());\n };\n return Ok({\n origin: window.location.origin,\n port: window.location.port,\n path: '/' + window.location.pathname.split('/').filter(part => part.length > 0).join('/'),\n host: window.location.host,\n host_name: window.location.hostname,\n search: window.location.search,\n hash: window.location.hash,\n protocol: window.location.protocol\n });\n}\n",
49
- "export * from './helpers';\nexport * from './models';\nexport * from './services';\nexport * from './Api';\nconsole.log('test?!1!');\n"
50
- ],
51
- "mappings": "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",
52
- "debugId": "6B1EA92C947FC63464756E2164756E21",
53
- "names": []
54
- }
1
+ {"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,OAAO,CAAC"}