html2canvas-pro 2.0.4 → 2.1.1

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 (468) hide show
  1. package/README.md +8 -6
  2. package/dist/html2canvas-pro.esm.js +10103 -9993
  3. package/dist/html2canvas-pro.esm.js.map +1 -1
  4. package/dist/html2canvas-pro.js +10102 -9993
  5. package/dist/html2canvas-pro.js.map +1 -1
  6. package/dist/html2canvas-pro.min.js +5 -5
  7. package/dist/lib/config.js +3 -4
  8. package/dist/lib/core/bitwise.js +0 -1
  9. package/dist/lib/core/cache-storage.js +36 -50
  10. package/dist/lib/core/context.js +0 -1
  11. package/dist/lib/core/debugger.js +0 -1
  12. package/dist/lib/core/features.js +2 -3
  13. package/dist/lib/core/logger.js +0 -1
  14. package/dist/lib/core/origin-checker.js +0 -1
  15. package/dist/lib/core/performance-monitor.js +1 -24
  16. package/dist/lib/core/render-element.js +210 -0
  17. package/dist/lib/core/util.js +0 -1
  18. package/dist/lib/core/validator.js +0 -1
  19. package/dist/lib/css/index.js +149 -90
  20. package/dist/lib/css/layout/bounds.js +0 -1
  21. package/dist/lib/css/layout/text.js +0 -1
  22. package/dist/lib/css/{ITypeDescriptor.js → property-descriptor.js} +0 -1
  23. package/dist/lib/css/property-descriptors/background-clip.js +0 -1
  24. package/dist/lib/css/property-descriptors/background-color.js +0 -1
  25. package/dist/lib/css/property-descriptors/background-image.js +0 -1
  26. package/dist/lib/css/property-descriptors/background-origin.js +0 -1
  27. package/dist/lib/css/property-descriptors/background-position.js +0 -1
  28. package/dist/lib/css/property-descriptors/background-repeat.js +0 -1
  29. package/dist/lib/css/property-descriptors/background-size.js +0 -1
  30. package/dist/lib/css/property-descriptors/border-color.js +0 -1
  31. package/dist/lib/css/property-descriptors/border-radius.js +0 -1
  32. package/dist/lib/css/property-descriptors/border-style.js +0 -1
  33. package/dist/lib/css/property-descriptors/border-width.js +0 -1
  34. package/dist/lib/css/property-descriptors/box-shadow.js +0 -1
  35. package/dist/lib/css/property-descriptors/clip-path.js +0 -1
  36. package/dist/lib/css/property-descriptors/color.js +0 -1
  37. package/dist/lib/css/property-descriptors/content.js +0 -1
  38. package/dist/lib/css/property-descriptors/counter-increment.js +0 -1
  39. package/dist/lib/css/property-descriptors/counter-reset.js +0 -1
  40. package/dist/lib/css/property-descriptors/direction.js +0 -1
  41. package/dist/lib/css/property-descriptors/display.js +0 -1
  42. package/dist/lib/css/property-descriptors/duration.js +0 -1
  43. package/dist/lib/css/property-descriptors/float.js +0 -1
  44. package/dist/lib/css/property-descriptors/font-family.js +0 -1
  45. package/dist/lib/css/property-descriptors/font-size.js +0 -1
  46. package/dist/lib/css/property-descriptors/font-style.js +0 -1
  47. package/dist/lib/css/property-descriptors/font-variant.js +0 -1
  48. package/dist/lib/css/property-descriptors/font-weight.js +0 -1
  49. package/dist/lib/css/property-descriptors/image-rendering.js +0 -1
  50. package/dist/lib/css/property-descriptors/letter-spacing.js +0 -1
  51. package/dist/lib/css/property-descriptors/line-break.js +0 -1
  52. package/dist/lib/css/property-descriptors/line-height.js +0 -1
  53. package/dist/lib/css/property-descriptors/list-style-image.js +0 -1
  54. package/dist/lib/css/property-descriptors/list-style-position.js +0 -1
  55. package/dist/lib/css/property-descriptors/list-style-type.js +0 -1
  56. package/dist/lib/css/property-descriptors/margin.js +0 -1
  57. package/dist/lib/css/property-descriptors/mix-blend-mode.js +31 -0
  58. package/dist/lib/css/property-descriptors/object-fit.js +0 -1
  59. package/dist/lib/css/property-descriptors/opacity.js +0 -1
  60. package/dist/lib/css/property-descriptors/overflow-wrap.js +0 -1
  61. package/dist/lib/css/property-descriptors/overflow.js +0 -1
  62. package/dist/lib/css/property-descriptors/padding.js +0 -1
  63. package/dist/lib/css/property-descriptors/paint-order.js +0 -1
  64. package/dist/lib/css/property-descriptors/position.js +0 -1
  65. package/dist/lib/css/property-descriptors/quotes.js +0 -1
  66. package/dist/lib/css/property-descriptors/rotate.js +0 -1
  67. package/dist/lib/css/property-descriptors/text-align.js +0 -1
  68. package/dist/lib/css/property-descriptors/text-decoration-color.js +0 -1
  69. package/dist/lib/css/property-descriptors/text-decoration-line.js +0 -1
  70. package/dist/lib/css/property-descriptors/text-decoration-style.js +0 -1
  71. package/dist/lib/css/property-descriptors/text-decoration-thickness.js +0 -1
  72. package/dist/lib/css/property-descriptors/text-overflow.js +0 -1
  73. package/dist/lib/css/property-descriptors/text-shadow.js +0 -1
  74. package/dist/lib/css/property-descriptors/text-transform.js +0 -1
  75. package/dist/lib/css/property-descriptors/text-underline-offset.js +0 -1
  76. package/dist/lib/css/property-descriptors/transform-origin.js +0 -1
  77. package/dist/lib/css/property-descriptors/transform.js +0 -1
  78. package/dist/lib/css/property-descriptors/visibility.js +0 -1
  79. package/dist/lib/css/property-descriptors/webkit-line-clamp.js +0 -1
  80. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +0 -1
  81. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +0 -1
  82. package/dist/lib/css/property-descriptors/word-break.js +0 -1
  83. package/dist/lib/css/property-descriptors/writing-mode.js +0 -1
  84. package/dist/lib/css/property-descriptors/z-index.js +0 -1
  85. package/dist/lib/css/syntax/parser.js +0 -1
  86. package/dist/lib/css/syntax/tokenizer.js +14 -1
  87. package/dist/lib/css/{IPropertyDescriptor.js → type-descriptor.js} +0 -1
  88. package/dist/lib/css/types/angle.js +0 -1
  89. package/dist/lib/css/types/color-math.js +0 -1
  90. package/dist/lib/css/types/color-spaces/a98.js +0 -1
  91. package/dist/lib/css/types/color-spaces/p3.js +0 -1
  92. package/dist/lib/css/types/color-spaces/pro-photo.js +0 -1
  93. package/dist/lib/css/types/color-spaces/rec2020.js +0 -1
  94. package/dist/lib/css/types/color-spaces/srgb.js +0 -1
  95. package/dist/lib/css/types/color-utilities.js +0 -1
  96. package/dist/lib/css/types/color.js +0 -1
  97. package/dist/lib/css/types/functions/-prefix-linear-gradient.js +0 -1
  98. package/dist/lib/css/types/functions/-prefix-radial-gradient.js +0 -1
  99. package/dist/lib/css/types/functions/-webkit-gradient.js +0 -1
  100. package/dist/lib/css/types/functions/counter.js +0 -1
  101. package/dist/lib/css/types/functions/gradient.js +0 -1
  102. package/dist/lib/css/types/functions/linear-gradient.js +0 -1
  103. package/dist/lib/css/types/functions/radial-gradient.js +0 -1
  104. package/dist/lib/css/types/image.js +0 -1
  105. package/dist/lib/css/types/index.js +0 -1
  106. package/dist/lib/css/types/length-percentage.js +0 -1
  107. package/dist/lib/css/types/length.js +0 -1
  108. package/dist/lib/css/types/time.js +0 -1
  109. package/dist/lib/dom/document-cloner.js +27 -22
  110. package/dist/lib/dom/dom-normalizer.js +0 -1
  111. package/dist/lib/dom/element-container.js +7 -6
  112. package/dist/lib/dom/elements/li-element-container.js +0 -1
  113. package/dist/lib/dom/elements/ol-element-container.js +0 -1
  114. package/dist/lib/dom/elements/select-element-container.js +0 -1
  115. package/dist/lib/dom/elements/textarea-element-container.js +0 -1
  116. package/dist/lib/dom/node-parser.js +37 -53
  117. package/dist/lib/dom/node-type-guards.js +62 -25
  118. package/dist/lib/dom/replaced-elements/canvas-element-container.js +0 -1
  119. package/dist/lib/dom/replaced-elements/iframe-element-container.js +0 -1
  120. package/dist/lib/dom/replaced-elements/image-element-container.js +0 -1
  121. package/dist/lib/dom/replaced-elements/index.js +0 -1
  122. package/dist/lib/dom/replaced-elements/input-element-container.js +0 -1
  123. package/dist/lib/dom/replaced-elements/pseudo-elements.js +0 -1
  124. package/dist/lib/dom/replaced-elements/svg-element-container.js +0 -1
  125. package/dist/lib/dom/text-container.js +0 -1
  126. package/dist/lib/index.js +32 -210
  127. package/dist/lib/options.js +2 -0
  128. package/dist/lib/render/background.js +0 -1
  129. package/dist/lib/render/bezier-curve.js +0 -1
  130. package/dist/lib/render/border.js +0 -1
  131. package/dist/lib/render/bound-curves.js +0 -1
  132. package/dist/lib/render/box-sizing.js +0 -1
  133. package/dist/lib/render/canvas/background-renderer.js +8 -24
  134. package/dist/lib/render/canvas/border-renderer.js +0 -1
  135. package/dist/lib/render/canvas/canvas-path.js +25 -0
  136. package/dist/lib/render/canvas/canvas-renderer.js +28 -97
  137. package/dist/lib/render/canvas/effects-renderer.js +3 -1
  138. package/dist/lib/render/canvas/foreignobject-renderer.js +13 -17
  139. package/dist/lib/render/canvas/text-renderer.js +61 -117
  140. package/dist/lib/render/effects.js +11 -2
  141. package/dist/lib/render/font-metrics.js +0 -1
  142. package/dist/lib/render/object-fit.js +87 -0
  143. package/dist/lib/render/path.js +0 -1
  144. package/dist/lib/render/renderer-interface.js +0 -1
  145. package/dist/lib/render/stacking-context.js +16 -8
  146. package/dist/lib/render/vector.js +0 -1
  147. package/dist/types/core/cache-storage.d.ts +5 -6
  148. package/dist/types/core/performance-monitor.d.ts +0 -11
  149. package/dist/types/core/render-element.d.ts +3 -0
  150. package/dist/types/css/index.d.ts +3 -0
  151. package/dist/types/css/property-descriptors/background-clip.d.ts +1 -1
  152. package/dist/types/css/property-descriptors/background-color.d.ts +1 -1
  153. package/dist/types/css/property-descriptors/background-image.d.ts +1 -1
  154. package/dist/types/css/property-descriptors/background-origin.d.ts +1 -1
  155. package/dist/types/css/property-descriptors/background-position.d.ts +1 -1
  156. package/dist/types/css/property-descriptors/background-repeat.d.ts +1 -1
  157. package/dist/types/css/property-descriptors/background-size.d.ts +1 -1
  158. package/dist/types/css/property-descriptors/border-color.d.ts +1 -1
  159. package/dist/types/css/property-descriptors/border-radius.d.ts +1 -1
  160. package/dist/types/css/property-descriptors/border-style.d.ts +1 -1
  161. package/dist/types/css/property-descriptors/border-width.d.ts +1 -1
  162. package/dist/types/css/property-descriptors/box-shadow.d.ts +1 -1
  163. package/dist/types/css/property-descriptors/clip-path.d.ts +1 -1
  164. package/dist/types/css/property-descriptors/color.d.ts +1 -1
  165. package/dist/types/css/property-descriptors/content.d.ts +1 -1
  166. package/dist/types/css/property-descriptors/counter-increment.d.ts +1 -1
  167. package/dist/types/css/property-descriptors/counter-reset.d.ts +1 -1
  168. package/dist/types/css/property-descriptors/direction.d.ts +1 -1
  169. package/dist/types/css/property-descriptors/display.d.ts +1 -1
  170. package/dist/types/css/property-descriptors/duration.d.ts +1 -1
  171. package/dist/types/css/property-descriptors/float.d.ts +1 -1
  172. package/dist/types/css/property-descriptors/font-family.d.ts +1 -1
  173. package/dist/types/css/property-descriptors/font-size.d.ts +1 -1
  174. package/dist/types/css/property-descriptors/font-style.d.ts +1 -1
  175. package/dist/types/css/property-descriptors/font-variant.d.ts +1 -1
  176. package/dist/types/css/property-descriptors/font-weight.d.ts +1 -1
  177. package/dist/types/css/property-descriptors/image-rendering.d.ts +1 -1
  178. package/dist/types/css/property-descriptors/letter-spacing.d.ts +1 -1
  179. package/dist/types/css/property-descriptors/line-break.d.ts +1 -1
  180. package/dist/types/css/property-descriptors/line-height.d.ts +1 -1
  181. package/dist/types/css/property-descriptors/list-style-image.d.ts +1 -1
  182. package/dist/types/css/property-descriptors/list-style-position.d.ts +1 -1
  183. package/dist/types/css/property-descriptors/list-style-type.d.ts +1 -1
  184. package/dist/types/css/property-descriptors/margin.d.ts +1 -1
  185. package/dist/types/css/property-descriptors/mix-blend-mode.d.ts +21 -0
  186. package/dist/types/css/property-descriptors/object-fit.d.ts +1 -1
  187. package/dist/types/css/property-descriptors/opacity.d.ts +1 -1
  188. package/dist/types/css/property-descriptors/overflow-wrap.d.ts +1 -1
  189. package/dist/types/css/property-descriptors/overflow.d.ts +1 -1
  190. package/dist/types/css/property-descriptors/padding.d.ts +1 -1
  191. package/dist/types/css/property-descriptors/paint-order.d.ts +1 -1
  192. package/dist/types/css/property-descriptors/position.d.ts +1 -1
  193. package/dist/types/css/property-descriptors/quotes.d.ts +1 -1
  194. package/dist/types/css/property-descriptors/rotate.d.ts +1 -1
  195. package/dist/types/css/property-descriptors/text-align.d.ts +1 -1
  196. package/dist/types/css/property-descriptors/text-decoration-color.d.ts +1 -1
  197. package/dist/types/css/property-descriptors/text-decoration-line.d.ts +1 -1
  198. package/dist/types/css/property-descriptors/text-decoration-style.d.ts +1 -1
  199. package/dist/types/css/property-descriptors/text-decoration-thickness.d.ts +1 -1
  200. package/dist/types/css/property-descriptors/text-overflow.d.ts +1 -1
  201. package/dist/types/css/property-descriptors/text-shadow.d.ts +1 -1
  202. package/dist/types/css/property-descriptors/text-transform.d.ts +1 -1
  203. package/dist/types/css/property-descriptors/text-underline-offset.d.ts +1 -1
  204. package/dist/types/css/property-descriptors/transform-origin.d.ts +1 -1
  205. package/dist/types/css/property-descriptors/transform.d.ts +1 -1
  206. package/dist/types/css/property-descriptors/visibility.d.ts +1 -1
  207. package/dist/types/css/property-descriptors/webkit-line-clamp.d.ts +1 -1
  208. package/dist/types/css/property-descriptors/webkit-text-stroke-color.d.ts +1 -1
  209. package/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts +1 -1
  210. package/dist/types/css/property-descriptors/word-break.d.ts +1 -1
  211. package/dist/types/css/property-descriptors/writing-mode.d.ts +1 -1
  212. package/dist/types/css/property-descriptors/z-index.d.ts +1 -1
  213. package/dist/types/css/syntax/tokenizer.d.ts +5 -0
  214. package/dist/types/css/types/angle.d.ts +1 -1
  215. package/dist/types/css/types/color.d.ts +1 -1
  216. package/dist/types/css/types/image.d.ts +1 -1
  217. package/dist/types/css/types/time.d.ts +1 -1
  218. package/dist/types/dom/element-container.d.ts +4 -11
  219. package/dist/types/dom/node-parser.d.ts +2 -15
  220. package/dist/types/dom/node-type-guards.d.ts +21 -22
  221. package/dist/types/index.d.ts +28 -48
  222. package/dist/types/options.d.ts +51 -0
  223. package/dist/types/render/canvas/background-renderer.d.ts +0 -6
  224. package/dist/types/render/canvas/canvas-path.d.ts +3 -0
  225. package/dist/types/render/canvas/canvas-renderer.d.ts +4 -2
  226. package/dist/types/render/canvas/foreignobject-renderer.d.ts +2 -3
  227. package/dist/types/render/canvas/text-renderer.d.ts +5 -0
  228. package/dist/types/render/effects.d.ts +9 -1
  229. package/dist/types/render/object-fit.d.ts +18 -0
  230. package/package.json +44 -44
  231. package/demo/image-smoothing-demo.html +0 -256
  232. package/demo/refactoring-test.html +0 -602
  233. package/dist/lib/__tests__/index.js +0 -85
  234. package/dist/lib/__tests__/index.js.map +0 -1
  235. package/dist/lib/config.js.map +0 -1
  236. package/dist/lib/core/__mocks__/cache-storage.js +0 -7
  237. package/dist/lib/core/__mocks__/cache-storage.js.map +0 -1
  238. package/dist/lib/core/__mocks__/context.js +0 -19
  239. package/dist/lib/core/__mocks__/context.js.map +0 -1
  240. package/dist/lib/core/__mocks__/features.js +0 -12
  241. package/dist/lib/core/__mocks__/features.js.map +0 -1
  242. package/dist/lib/core/__mocks__/logger.js +0 -16
  243. package/dist/lib/core/__mocks__/logger.js.map +0 -1
  244. package/dist/lib/core/__tests__/cache-storage.js +0 -225
  245. package/dist/lib/core/__tests__/cache-storage.js.map +0 -1
  246. package/dist/lib/core/__tests__/cache-storage.test.js +0 -158
  247. package/dist/lib/core/__tests__/cache-storage.test.js.map +0 -1
  248. package/dist/lib/core/__tests__/logger.js +0 -27
  249. package/dist/lib/core/__tests__/logger.js.map +0 -1
  250. package/dist/lib/core/__tests__/validator.js +0 -296
  251. package/dist/lib/core/__tests__/validator.js.map +0 -1
  252. package/dist/lib/core/bitwise.js.map +0 -1
  253. package/dist/lib/core/cache-storage.js.map +0 -1
  254. package/dist/lib/core/context.js.map +0 -1
  255. package/dist/lib/core/debugger.js.map +0 -1
  256. package/dist/lib/core/features.js.map +0 -1
  257. package/dist/lib/core/logger.js.map +0 -1
  258. package/dist/lib/core/origin-checker.js.map +0 -1
  259. package/dist/lib/core/performance-monitor.js.map +0 -1
  260. package/dist/lib/core/util.js.map +0 -1
  261. package/dist/lib/core/validator.js.map +0 -1
  262. package/dist/lib/css/IPropertyDescriptor.js.map +0 -1
  263. package/dist/lib/css/ITypeDescriptor.js.map +0 -1
  264. package/dist/lib/css/index.js.map +0 -1
  265. package/dist/lib/css/layout/__mocks__/bounds.js +0 -9
  266. package/dist/lib/css/layout/__mocks__/bounds.js.map +0 -1
  267. package/dist/lib/css/layout/bounds.js.map +0 -1
  268. package/dist/lib/css/layout/text.js.map +0 -1
  269. package/dist/lib/css/property-descriptors/__tests__/background-tests.js +0 -49
  270. package/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +0 -1
  271. package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js +0 -273
  272. package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js.map +0 -1
  273. package/dist/lib/css/property-descriptors/__tests__/font-family.js +0 -19
  274. package/dist/lib/css/property-descriptors/__tests__/font-family.js.map +0 -1
  275. package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js +0 -143
  276. package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js.map +0 -1
  277. package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js +0 -167
  278. package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js.map +0 -1
  279. package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js +0 -61
  280. package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js.map +0 -1
  281. package/dist/lib/css/property-descriptors/__tests__/paint-order.js +0 -66
  282. package/dist/lib/css/property-descriptors/__tests__/paint-order.js.map +0 -1
  283. package/dist/lib/css/property-descriptors/__tests__/text-shadow.js +0 -82
  284. package/dist/lib/css/property-descriptors/__tests__/text-shadow.js.map +0 -1
  285. package/dist/lib/css/property-descriptors/__tests__/transform-tests.js +0 -14
  286. package/dist/lib/css/property-descriptors/__tests__/transform-tests.js.map +0 -1
  287. package/dist/lib/css/property-descriptors/background-clip.js.map +0 -1
  288. package/dist/lib/css/property-descriptors/background-color.js.map +0 -1
  289. package/dist/lib/css/property-descriptors/background-image.js.map +0 -1
  290. package/dist/lib/css/property-descriptors/background-origin.js.map +0 -1
  291. package/dist/lib/css/property-descriptors/background-position.js.map +0 -1
  292. package/dist/lib/css/property-descriptors/background-repeat.js.map +0 -1
  293. package/dist/lib/css/property-descriptors/background-size.js.map +0 -1
  294. package/dist/lib/css/property-descriptors/border-color.js.map +0 -1
  295. package/dist/lib/css/property-descriptors/border-radius.js.map +0 -1
  296. package/dist/lib/css/property-descriptors/border-style.js.map +0 -1
  297. package/dist/lib/css/property-descriptors/border-width.js.map +0 -1
  298. package/dist/lib/css/property-descriptors/box-shadow.js.map +0 -1
  299. package/dist/lib/css/property-descriptors/clip-path.js.map +0 -1
  300. package/dist/lib/css/property-descriptors/color.js.map +0 -1
  301. package/dist/lib/css/property-descriptors/content.js.map +0 -1
  302. package/dist/lib/css/property-descriptors/counter-increment.js.map +0 -1
  303. package/dist/lib/css/property-descriptors/counter-reset.js.map +0 -1
  304. package/dist/lib/css/property-descriptors/direction.js.map +0 -1
  305. package/dist/lib/css/property-descriptors/display.js.map +0 -1
  306. package/dist/lib/css/property-descriptors/duration.js.map +0 -1
  307. package/dist/lib/css/property-descriptors/float.js.map +0 -1
  308. package/dist/lib/css/property-descriptors/font-family.js.map +0 -1
  309. package/dist/lib/css/property-descriptors/font-size.js.map +0 -1
  310. package/dist/lib/css/property-descriptors/font-style.js.map +0 -1
  311. package/dist/lib/css/property-descriptors/font-variant.js.map +0 -1
  312. package/dist/lib/css/property-descriptors/font-weight.js.map +0 -1
  313. package/dist/lib/css/property-descriptors/image-rendering.js.map +0 -1
  314. package/dist/lib/css/property-descriptors/letter-spacing.js.map +0 -1
  315. package/dist/lib/css/property-descriptors/line-break.js.map +0 -1
  316. package/dist/lib/css/property-descriptors/line-height.js.map +0 -1
  317. package/dist/lib/css/property-descriptors/list-style-image.js.map +0 -1
  318. package/dist/lib/css/property-descriptors/list-style-position.js.map +0 -1
  319. package/dist/lib/css/property-descriptors/list-style-type.js.map +0 -1
  320. package/dist/lib/css/property-descriptors/margin.js.map +0 -1
  321. package/dist/lib/css/property-descriptors/object-fit.js.map +0 -1
  322. package/dist/lib/css/property-descriptors/opacity.js.map +0 -1
  323. package/dist/lib/css/property-descriptors/overflow-wrap.js.map +0 -1
  324. package/dist/lib/css/property-descriptors/overflow.js.map +0 -1
  325. package/dist/lib/css/property-descriptors/padding.js.map +0 -1
  326. package/dist/lib/css/property-descriptors/paint-order.js.map +0 -1
  327. package/dist/lib/css/property-descriptors/position.js.map +0 -1
  328. package/dist/lib/css/property-descriptors/quotes.js.map +0 -1
  329. package/dist/lib/css/property-descriptors/rotate.js.map +0 -1
  330. package/dist/lib/css/property-descriptors/text-align.js.map +0 -1
  331. package/dist/lib/css/property-descriptors/text-decoration-color.js.map +0 -1
  332. package/dist/lib/css/property-descriptors/text-decoration-line.js.map +0 -1
  333. package/dist/lib/css/property-descriptors/text-decoration-style.js.map +0 -1
  334. package/dist/lib/css/property-descriptors/text-decoration-thickness.js.map +0 -1
  335. package/dist/lib/css/property-descriptors/text-overflow.js.map +0 -1
  336. package/dist/lib/css/property-descriptors/text-shadow.js.map +0 -1
  337. package/dist/lib/css/property-descriptors/text-transform.js.map +0 -1
  338. package/dist/lib/css/property-descriptors/text-underline-offset.js.map +0 -1
  339. package/dist/lib/css/property-descriptors/transform-origin.js.map +0 -1
  340. package/dist/lib/css/property-descriptors/transform.js.map +0 -1
  341. package/dist/lib/css/property-descriptors/visibility.js.map +0 -1
  342. package/dist/lib/css/property-descriptors/webkit-line-clamp.js.map +0 -1
  343. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js.map +0 -1
  344. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js.map +0 -1
  345. package/dist/lib/css/property-descriptors/word-break.js.map +0 -1
  346. package/dist/lib/css/property-descriptors/writing-mode.js.map +0 -1
  347. package/dist/lib/css/property-descriptors/z-index.js.map +0 -1
  348. package/dist/lib/css/syntax/__tests__/tokernizer-tests.js +0 -26
  349. package/dist/lib/css/syntax/__tests__/tokernizer-tests.js.map +0 -1
  350. package/dist/lib/css/syntax/parser.js.map +0 -1
  351. package/dist/lib/css/syntax/tokenizer.js.map +0 -1
  352. package/dist/lib/css/types/__tests__/color-tests.js +0 -111
  353. package/dist/lib/css/types/__tests__/color-tests.js.map +0 -1
  354. package/dist/lib/css/types/__tests__/image-tests.js +0 -215
  355. package/dist/lib/css/types/__tests__/image-tests.js.map +0 -1
  356. package/dist/lib/css/types/angle.js.map +0 -1
  357. package/dist/lib/css/types/color-math.js.map +0 -1
  358. package/dist/lib/css/types/color-spaces/a98.js.map +0 -1
  359. package/dist/lib/css/types/color-spaces/p3.js.map +0 -1
  360. package/dist/lib/css/types/color-spaces/pro-photo.js.map +0 -1
  361. package/dist/lib/css/types/color-spaces/rec2020.js.map +0 -1
  362. package/dist/lib/css/types/color-spaces/srgb.js.map +0 -1
  363. package/dist/lib/css/types/color-utilities.js.map +0 -1
  364. package/dist/lib/css/types/color.js.map +0 -1
  365. package/dist/lib/css/types/functions/-prefix-linear-gradient.js.map +0 -1
  366. package/dist/lib/css/types/functions/-prefix-radial-gradient.js.map +0 -1
  367. package/dist/lib/css/types/functions/-webkit-gradient.js.map +0 -1
  368. package/dist/lib/css/types/functions/__tests__/radial-gradient.js +0 -63
  369. package/dist/lib/css/types/functions/__tests__/radial-gradient.js.map +0 -1
  370. package/dist/lib/css/types/functions/counter.js.map +0 -1
  371. package/dist/lib/css/types/functions/gradient.js.map +0 -1
  372. package/dist/lib/css/types/functions/linear-gradient.js.map +0 -1
  373. package/dist/lib/css/types/functions/radial-gradient.js.map +0 -1
  374. package/dist/lib/css/types/image.js.map +0 -1
  375. package/dist/lib/css/types/index.js.map +0 -1
  376. package/dist/lib/css/types/length-percentage.js.map +0 -1
  377. package/dist/lib/css/types/length.js.map +0 -1
  378. package/dist/lib/css/types/time.js.map +0 -1
  379. package/dist/lib/dom/__mocks__/document-cloner.js +0 -23
  380. package/dist/lib/dom/__mocks__/document-cloner.js.map +0 -1
  381. package/dist/lib/dom/__tests__/dom-normalizer.test.js +0 -113
  382. package/dist/lib/dom/__tests__/dom-normalizer.test.js.map +0 -1
  383. package/dist/lib/dom/__tests__/element-container.test.js +0 -109
  384. package/dist/lib/dom/__tests__/element-container.test.js.map +0 -1
  385. package/dist/lib/dom/document-cloner.js.map +0 -1
  386. package/dist/lib/dom/dom-normalizer.js.map +0 -1
  387. package/dist/lib/dom/element-container.js.map +0 -1
  388. package/dist/lib/dom/elements/li-element-container.js.map +0 -1
  389. package/dist/lib/dom/elements/ol-element-container.js.map +0 -1
  390. package/dist/lib/dom/elements/select-element-container.js.map +0 -1
  391. package/dist/lib/dom/elements/textarea-element-container.js.map +0 -1
  392. package/dist/lib/dom/node-parser.js.map +0 -1
  393. package/dist/lib/dom/node-type-guards.js.map +0 -1
  394. package/dist/lib/dom/replaced-elements/canvas-element-container.js.map +0 -1
  395. package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +0 -1
  396. package/dist/lib/dom/replaced-elements/image-element-container.js.map +0 -1
  397. package/dist/lib/dom/replaced-elements/index.js.map +0 -1
  398. package/dist/lib/dom/replaced-elements/input-element-container.js.map +0 -1
  399. package/dist/lib/dom/replaced-elements/pseudo-elements.js.map +0 -1
  400. package/dist/lib/dom/replaced-elements/svg-element-container.js.map +0 -1
  401. package/dist/lib/dom/text-container.js.map +0 -1
  402. package/dist/lib/index.js.map +0 -1
  403. package/dist/lib/invariant.js +0 -10
  404. package/dist/lib/invariant.js.map +0 -1
  405. package/dist/lib/render/background.js.map +0 -1
  406. package/dist/lib/render/bezier-curve.js.map +0 -1
  407. package/dist/lib/render/border.js.map +0 -1
  408. package/dist/lib/render/bound-curves.js.map +0 -1
  409. package/dist/lib/render/box-sizing.js.map +0 -1
  410. package/dist/lib/render/canvas/__tests__/background-renderer.test.js +0 -65
  411. package/dist/lib/render/canvas/__tests__/background-renderer.test.js.map +0 -1
  412. package/dist/lib/render/canvas/__tests__/border-renderer.test.js +0 -23
  413. package/dist/lib/render/canvas/__tests__/border-renderer.test.js.map +0 -1
  414. package/dist/lib/render/canvas/__tests__/effects-renderer.test.js +0 -30
  415. package/dist/lib/render/canvas/__tests__/effects-renderer.test.js.map +0 -1
  416. package/dist/lib/render/canvas/__tests__/text-renderer.test.js +0 -402
  417. package/dist/lib/render/canvas/__tests__/text-renderer.test.js.map +0 -1
  418. package/dist/lib/render/canvas/background-renderer.js.map +0 -1
  419. package/dist/lib/render/canvas/border-renderer.js.map +0 -1
  420. package/dist/lib/render/canvas/canvas-renderer.js.map +0 -1
  421. package/dist/lib/render/canvas/effects-renderer.js.map +0 -1
  422. package/dist/lib/render/canvas/foreignobject-renderer.js.map +0 -1
  423. package/dist/lib/render/canvas/text-renderer.js.map +0 -1
  424. package/dist/lib/render/effects.js.map +0 -1
  425. package/dist/lib/render/font-metrics.js.map +0 -1
  426. package/dist/lib/render/path.js.map +0 -1
  427. package/dist/lib/render/renderer-interface.js.map +0 -1
  428. package/dist/lib/render/renderer.js +0 -11
  429. package/dist/lib/render/renderer.js.map +0 -1
  430. package/dist/lib/render/stacking-context.js.map +0 -1
  431. package/dist/lib/render/vector.js.map +0 -1
  432. package/dist/types/__tests__/index.d.ts +0 -1
  433. package/dist/types/core/__mocks__/cache-storage.d.ts +0 -2
  434. package/dist/types/core/__mocks__/context.d.ts +0 -9
  435. package/dist/types/core/__mocks__/features.d.ts +0 -8
  436. package/dist/types/core/__mocks__/logger.d.ts +0 -9
  437. package/dist/types/core/__tests__/cache-storage.d.ts +0 -1
  438. package/dist/types/core/__tests__/cache-storage.test.d.ts +0 -1
  439. package/dist/types/core/__tests__/logger.d.ts +0 -1
  440. package/dist/types/core/__tests__/validator.d.ts +0 -1
  441. package/dist/types/css/layout/__mocks__/bounds.d.ts +0 -2
  442. package/dist/types/css/property-descriptors/__tests__/background-tests.d.ts +0 -1
  443. package/dist/types/css/property-descriptors/__tests__/clip-path.test.d.ts +0 -1
  444. package/dist/types/css/property-descriptors/__tests__/font-family.d.ts +0 -1
  445. package/dist/types/css/property-descriptors/__tests__/image-rendering-integration.test.d.ts +0 -1
  446. package/dist/types/css/property-descriptors/__tests__/image-rendering-performance.test.d.ts +0 -1
  447. package/dist/types/css/property-descriptors/__tests__/image-rendering.test.d.ts +0 -1
  448. package/dist/types/css/property-descriptors/__tests__/paint-order.d.ts +0 -1
  449. package/dist/types/css/property-descriptors/__tests__/text-shadow.d.ts +0 -1
  450. package/dist/types/css/property-descriptors/__tests__/transform-tests.d.ts +0 -1
  451. package/dist/types/css/syntax/__tests__/tokernizer-tests.d.ts +0 -1
  452. package/dist/types/css/types/__tests__/color-tests.d.ts +0 -1
  453. package/dist/types/css/types/__tests__/image-tests.d.ts +0 -1
  454. package/dist/types/css/types/functions/__tests__/radial-gradient.d.ts +0 -1
  455. package/dist/types/dom/__mocks__/document-cloner.d.ts +0 -6
  456. package/dist/types/dom/__tests__/dom-normalizer.test.d.ts +0 -1
  457. package/dist/types/dom/__tests__/element-container.test.d.ts +0 -1
  458. package/dist/types/invariant.d.ts +0 -1
  459. package/dist/types/render/canvas/__tests__/background-renderer.test.d.ts +0 -1
  460. package/dist/types/render/canvas/__tests__/border-renderer.test.d.ts +0 -1
  461. package/dist/types/render/canvas/__tests__/effects-renderer.test.d.ts +0 -1
  462. package/dist/types/render/canvas/__tests__/text-renderer.test.d.ts +0 -1
  463. package/dist/types/render/renderer.d.ts +0 -7
  464. package/eslint.config.js +0 -35
  465. package/jest.config.cjs +0 -5
  466. package/karma.conf.cjs +0 -300
  467. /package/dist/types/css/{IPropertyDescriptor.d.ts → property-descriptor.d.ts} +0 -0
  468. /package/dist/types/css/{ITypeDescriptor.d.ts → type-descriptor.d.ts} +0 -0
@@ -11,11 +11,11 @@ exports.getDefaultConfig = getDefaultConfig;
11
11
  */
12
12
  class Html2CanvasConfig {
13
13
  constructor(options = {}) {
14
- // Try to get window from options first, then fall back to global window
15
- this.window = options.window || (typeof window !== 'undefined' ? window : null);
16
- if (!this.window) {
14
+ const resolvedWindow = options.window || (typeof window !== 'undefined' ? window : undefined);
15
+ if (!resolvedWindow) {
17
16
  throw new Error('Window object is required but not available');
18
17
  }
18
+ this.window = resolvedWindow;
19
19
  this.cspNonce = options.cspNonce;
20
20
  this.cache = options.cache;
21
21
  }
@@ -69,4 +69,3 @@ function setDefaultConfig(config) {
69
69
  function getDefaultConfig() {
70
70
  return _defaultConfig;
71
71
  }
72
- //# sourceMappingURL=config.js.map
@@ -3,4 +3,3 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.contains = void 0;
4
4
  const contains = (bit, value) => (bit & value) !== 0;
5
5
  exports.contains = contains;
6
- //# sourceMappingURL=bitwise.js.map
@@ -62,11 +62,10 @@ class Cache {
62
62
  return pending;
63
63
  }
64
64
  if (this.has(src)) {
65
- // Update last accessed time
65
+ // Move to end for LRU ordering
66
66
  const entry = this._cache.get(src);
67
- if (entry) {
68
- entry.lastAccessed = Date.now();
69
- }
67
+ this._cache.delete(src);
68
+ this._cache.set(src, entry);
70
69
  return Promise.resolve();
71
70
  }
72
71
  if (isBlobImage(src) || isRenderable(src)) {
@@ -81,15 +80,8 @@ class Cache {
81
80
  return Promise.resolve();
82
81
  }
83
82
  async _addImageInternal(src) {
84
- // Create image load promise with timeout protection
85
83
  const timeoutMs = this._options.imageTimeout ?? 15000;
86
- const timeoutPromise = new Promise((_, reject) => {
87
- setTimeout(() => {
88
- reject(new Error(`Image load timeout after ${timeoutMs}ms: ${src}`));
89
- }, timeoutMs);
90
- });
91
- // Race between image load and timeout
92
- const imageWithTimeout = Promise.race([this.loadImage(src), timeoutPromise]);
84
+ const imageWithTimeout = this.withTimeout(this.loadImage(src), timeoutMs, `Timed out (${timeoutMs}ms) loading image`);
93
85
  // Handle errors to prevent unhandled rejections
94
86
  imageWithTimeout.catch((error) => {
95
87
  this.context.logger.error(`Failed to load image ${src}: ${error instanceof Error ? error.message : 'Unknown error'}`);
@@ -97,51 +89,49 @@ class Cache {
97
89
  // Store the promise with timeout in cache
98
90
  this.set(src, imageWithTimeout);
99
91
  }
92
+ withTimeout(promise, timeoutMs, message) {
93
+ if (timeoutMs <= 0) {
94
+ return promise;
95
+ }
96
+ let timeoutId;
97
+ const timeout = new Promise((_, reject) => {
98
+ timeoutId = setTimeout(() => reject(new Error(message)), timeoutMs);
99
+ });
100
+ return Promise.race([promise, timeout]).finally(() => {
101
+ if (timeoutId !== undefined) {
102
+ clearTimeout(timeoutId);
103
+ }
104
+ });
105
+ }
100
106
  match(src) {
101
107
  const entry = this._cache.get(src);
102
108
  if (entry) {
103
- // Update last accessed time on access
104
- entry.lastAccessed = Date.now();
109
+ // Move to end for LRU ordering (O(1))
110
+ this._cache.delete(src);
111
+ this._cache.set(src, entry);
105
112
  return entry.value;
106
113
  }
107
114
  return undefined;
108
115
  }
109
116
  /**
110
- * Set a value in cache with LRU eviction
117
+ * Set a value in cache with LRU eviction (O(1) via Map insertion order).
118
+ * Map preserves insertion order; delete+set on access moves items to the end.
119
+ * The first key in Map.keys() is always the least recently used.
111
120
  */
112
121
  set(key, value) {
113
- // If key already exists, update it without eviction
114
122
  if (this._cache.has(key)) {
115
- const entry = this._cache.get(key);
116
- entry.value = value;
117
- entry.lastAccessed = Date.now();
118
- return;
123
+ // Update existing entry: move to end of Map
124
+ this._cache.delete(key);
119
125
  }
120
- // For new keys, check if we need to evict
121
- if (this._cache.size >= this.maxSize) {
122
- this.evictLRU();
123
- }
124
- this._cache.set(key, {
125
- value,
126
- lastAccessed: Date.now()
127
- });
128
- }
129
- /**
130
- * Evict least recently used entry
131
- */
132
- evictLRU() {
133
- let oldestKey = null;
134
- let oldestTime = Infinity;
135
- for (const [key, entry] of this._cache.entries()) {
136
- if (entry.lastAccessed < oldestTime) {
137
- oldestTime = entry.lastAccessed;
138
- oldestKey = key;
126
+ else if (this._cache.size >= this.maxSize) {
127
+ // Evict LRU (first key = least recently used) — O(1)
128
+ const lruKey = this._cache.keys().next().value;
129
+ if (lruKey !== undefined) {
130
+ this._cache.delete(lruKey);
131
+ this.context.logger.debug(`Cache: Evicted LRU entry: ${lruKey}`);
139
132
  }
140
133
  }
141
- if (oldestKey) {
142
- this._cache.delete(oldestKey);
143
- this.context.logger.debug(`Cache: Evicted LRU entry: ${oldestKey}`);
144
- }
134
+ this._cache.set(key, { value });
145
135
  }
146
136
  /**
147
137
  * Get cache size
@@ -200,16 +190,13 @@ class Cache {
200
190
  // Inline XML images may fail to parse, throwing an Error later on
201
191
  setTimeout(() => resolve(img), 500);
202
192
  }
203
- if (this._options.imageTimeout > 0) {
204
- setTimeout(() => reject(`Timed out (${this._options.imageTimeout}ms) loading image`), this._options.imageTimeout);
205
- }
206
193
  });
207
194
  }
208
195
  has(key) {
209
196
  return this._cache.has(key);
210
197
  }
211
198
  keys() {
212
- return Promise.resolve(Object.keys(this._cache));
199
+ return Promise.resolve(Array.from(this._cache.keys()));
213
200
  }
214
201
  proxy(src) {
215
202
  const proxy = this._options.proxy;
@@ -258,6 +245,5 @@ const INLINE_IMG = /^data:image\/.*/i;
258
245
  const isRenderable = (src) => features_1.FEATURES.SUPPORT_SVG_DRAWING || !isSVG(src);
259
246
  const isInlineImage = (src) => INLINE_IMG.test(src);
260
247
  const isInlineBase64Image = (src) => INLINE_BASE64.test(src);
261
- const isBlobImage = (src) => src.substr(0, 4) === 'blob';
262
- const isSVG = (src) => src.substr(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src);
263
- //# sourceMappingURL=cache-storage.js.map
248
+ const isBlobImage = (src) => src.substring(0, 4) === 'blob';
249
+ const isSVG = (src) => src.slice(-3).toLowerCase() === 'svg' || INLINE_SVG.test(src);
@@ -16,4 +16,3 @@ class Context {
16
16
  }
17
17
  exports.Context = Context;
18
18
  Context.instanceCount = 1;
19
- //# sourceMappingURL=context.js.map
@@ -25,4 +25,3 @@ const isDebugging = (element, type) => {
25
25
  return elementType === 1 /* DebuggerType.ALL */ || type === elementType;
26
26
  };
27
27
  exports.isDebugging = isDebugging;
28
- //# sourceMappingURL=debugger.js.map
@@ -79,7 +79,7 @@ const testForeignObject = (document) => {
79
79
  canvas.height = size;
80
80
  const ctx = canvas.getContext('2d');
81
81
  if (!ctx) {
82
- return Promise.reject(false);
82
+ return Promise.reject(new Error('Failed to get 2D rendering context'));
83
83
  }
84
84
  ctx.fillStyle = 'rgb(0, 255, 0)';
85
85
  ctx.fillRect(0, 0, size, size);
@@ -101,7 +101,7 @@ const testForeignObject = (document) => {
101
101
  // Firefox 55 does not render inline <img /> tags
102
102
  return isGreenPixel(data)
103
103
  ? (0, exports.loadSerializedSVG)((0, exports.createForeignObjectSVG)(size, size, 0, 0, node))
104
- : Promise.reject(false);
104
+ : Promise.reject(new Error('ForeignObject rendering not supported'));
105
105
  })
106
106
  .then((img) => {
107
107
  ctx.drawImage(img, 0, 0);
@@ -187,4 +187,3 @@ exports.FEATURES = {
187
187
  return value;
188
188
  }
189
189
  };
190
- //# sourceMappingURL=features.js.map
@@ -54,4 +54,3 @@ class Logger {
54
54
  }
55
55
  exports.Logger = Logger;
56
56
  Logger.instances = {};
57
- //# sourceMappingURL=logger.js.map
@@ -51,4 +51,3 @@ class OriginChecker {
51
51
  }
52
52
  }
53
53
  exports.OriginChecker = OriginChecker;
54
- //# sourceMappingURL=origin-checker.js.map
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NoOpPerformanceMonitor = exports.PerformanceMonitor = void 0;
3
+ exports.PerformanceMonitor = void 0;
4
4
  /**
5
5
  * Performance Monitor
6
6
  *
@@ -183,26 +183,3 @@ class PerformanceMonitor {
183
183
  }
184
184
  }
185
185
  exports.PerformanceMonitor = PerformanceMonitor;
186
- /**
187
- * Create a no-op performance monitor for production
188
- * Has minimal overhead when disabled
189
- */
190
- class NoOpPerformanceMonitor extends PerformanceMonitor {
191
- constructor() {
192
- super(null, false);
193
- }
194
- start() {
195
- // No-op
196
- }
197
- end() {
198
- return undefined;
199
- }
200
- measure(_name, fn) {
201
- return fn();
202
- }
203
- async measureAsync(_name, fn) {
204
- return await fn();
205
- }
206
- }
207
- exports.NoOpPerformanceMonitor = NoOpPerformanceMonitor;
208
- //# sourceMappingURL=performance-monitor.js.map
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderElement = void 0;
4
+ const bounds_1 = require("../css/layout/bounds");
5
+ const color_1 = require("../css/types/color");
6
+ const color_utilities_1 = require("../css/types/color-utilities");
7
+ const document_cloner_1 = require("../dom/document-cloner");
8
+ const node_parser_1 = require("../dom/node-parser");
9
+ const canvas_renderer_1 = require("../render/canvas/canvas-renderer");
10
+ const foreignobject_renderer_1 = require("../render/canvas/foreignobject-renderer");
11
+ const context_1 = require("./context");
12
+ const validator_1 = require("./validator");
13
+ const performance_monitor_1 = require("./performance-monitor");
14
+ const coerceNumberOptions = (opts) => {
15
+ const numKeys = [
16
+ 'scale',
17
+ 'width',
18
+ 'height',
19
+ 'imageTimeout',
20
+ 'x',
21
+ 'y',
22
+ 'windowWidth',
23
+ 'windowHeight',
24
+ 'scrollX',
25
+ 'scrollY'
26
+ ];
27
+ numKeys.forEach((key) => {
28
+ const v = opts[key];
29
+ if (v !== undefined && v !== null && typeof v !== 'number') {
30
+ const n = Number(v);
31
+ if (!Number.isNaN(n)) {
32
+ opts[key] = n;
33
+ }
34
+ }
35
+ });
36
+ };
37
+ const renderElement = async (element, opts, config) => {
38
+ coerceNumberOptions(opts);
39
+ // Input validation (unless explicitly skipped)
40
+ if (!opts.skipValidation) {
41
+ const validator = opts.validator || (0, validator_1.createDefaultValidator)();
42
+ const elementValidation = validator.validateElement(element);
43
+ if (!elementValidation.valid) {
44
+ throw new Error(elementValidation.error);
45
+ }
46
+ const optionsValidation = validator.validateOptions(opts);
47
+ if (!optionsValidation.valid) {
48
+ throw new Error(`Invalid options: ${optionsValidation.error}`);
49
+ }
50
+ }
51
+ if (!element || typeof element !== 'object') {
52
+ throw new Error('Invalid element provided as first argument');
53
+ }
54
+ const ownerDocument = element.ownerDocument;
55
+ if (!ownerDocument) {
56
+ throw new Error(`Element is not attached to a Document`);
57
+ }
58
+ const defaultView = ownerDocument.defaultView;
59
+ if (!defaultView) {
60
+ throw new Error(`Document is not attached to a Window`);
61
+ }
62
+ const resourceOptions = {
63
+ allowTaint: opts.allowTaint ?? false,
64
+ imageTimeout: opts.imageTimeout ?? 15000,
65
+ proxy: opts.proxy,
66
+ useCORS: opts.useCORS ?? false,
67
+ customIsSameOrigin: opts.customIsSameOrigin
68
+ };
69
+ const contextOptions = {
70
+ logging: opts.logging ?? true,
71
+ cache: opts.cache ?? config.cache,
72
+ ...resourceOptions
73
+ };
74
+ const DEFAULT_WINDOW_WIDTH = 800;
75
+ const DEFAULT_WINDOW_HEIGHT = 600;
76
+ const DEFAULT_SCROLL = 0;
77
+ const win = defaultView;
78
+ const windowOptions = {
79
+ windowWidth: opts.windowWidth ?? win.innerWidth ?? DEFAULT_WINDOW_WIDTH,
80
+ windowHeight: opts.windowHeight ?? win.innerHeight ?? DEFAULT_WINDOW_HEIGHT,
81
+ scrollX: opts.scrollX ?? win.pageXOffset ?? DEFAULT_SCROLL,
82
+ scrollY: opts.scrollY ?? win.pageYOffset ?? DEFAULT_SCROLL
83
+ };
84
+ const windowBounds = new bounds_1.Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight);
85
+ const context = new context_1.Context(contextOptions, windowBounds, config);
86
+ const performanceMonitoring = opts.enablePerformanceMonitoring ?? opts.logging ?? false;
87
+ const perfMonitor = new performance_monitor_1.PerformanceMonitor(context, performanceMonitoring);
88
+ perfMonitor.start('total', {
89
+ width: windowOptions.windowWidth,
90
+ height: windowOptions.windowHeight
91
+ });
92
+ const signal = opts.signal;
93
+ if (signal?.aborted) {
94
+ throw new DOMException('The operation was aborted.', 'AbortError');
95
+ }
96
+ const foreignObjectRendering = opts.foreignObjectRendering ?? false;
97
+ const cloneOptions = {
98
+ allowTaint: opts.allowTaint ?? false,
99
+ onclone: opts.onclone,
100
+ ignoreElements: opts.ignoreElements,
101
+ iframeContainer: opts.iframeContainer,
102
+ inlineImages: foreignObjectRendering,
103
+ copyStyles: foreignObjectRendering,
104
+ cspNonce: opts.cspNonce ?? config.cspNonce
105
+ };
106
+ context.logger.debug(`Starting document clone with size ${windowBounds.width}x${windowBounds.height} scrolled to ${-windowBounds.left},${-windowBounds.top}`);
107
+ perfMonitor.start('clone');
108
+ const documentCloner = new document_cloner_1.DocumentCloner(context, element, cloneOptions);
109
+ const clonedElement = documentCloner.clonedReferenceElement;
110
+ if (!clonedElement) {
111
+ throw new Error('Unable to find element in cloned iframe');
112
+ }
113
+ const container = await documentCloner.toIFrame(ownerDocument, windowBounds);
114
+ perfMonitor.end('clone');
115
+ if (signal?.aborted) {
116
+ if (opts.removeContainer ?? true) {
117
+ document_cloner_1.DocumentCloner.destroy(container);
118
+ }
119
+ throw new DOMException('The operation was aborted.', 'AbortError');
120
+ }
121
+ const { width, height, left, top } = (0, node_parser_1.isBodyElement)(clonedElement) || (0, node_parser_1.isHTMLElement)(clonedElement)
122
+ ? (0, bounds_1.parseDocumentSize)(clonedElement.ownerDocument)
123
+ : (0, bounds_1.parseBounds)(context, clonedElement);
124
+ const backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);
125
+ const renderOptions = {
126
+ canvas: opts.canvas,
127
+ backgroundColor,
128
+ signal,
129
+ scale: opts.scale ?? defaultView.devicePixelRatio ?? 1,
130
+ x: (opts.x ?? 0) + left,
131
+ y: (opts.y ?? 0) + top,
132
+ width: opts.width ?? Math.ceil(width),
133
+ height: opts.height ?? Math.ceil(height),
134
+ imageSmoothing: opts.imageSmoothing,
135
+ imageSmoothingQuality: opts.imageSmoothingQuality
136
+ };
137
+ let canvas;
138
+ let root;
139
+ try {
140
+ if (foreignObjectRendering) {
141
+ context.logger.debug(`Document cloned, using foreign object rendering`);
142
+ perfMonitor.start('render-foreignobject');
143
+ const renderer = new foreignobject_renderer_1.ForeignObjectRenderer(context, renderOptions);
144
+ canvas = await renderer.render(clonedElement);
145
+ perfMonitor.end('render-foreignobject');
146
+ }
147
+ else {
148
+ context.logger.debug(`Document cloned, element located at ${left},${top} with size ${width}x${height} using computed rendering`);
149
+ context.logger.debug(`Starting DOM parsing`);
150
+ perfMonitor.start('parse');
151
+ if (signal?.aborted) {
152
+ throw new DOMException('The operation was aborted.', 'AbortError');
153
+ }
154
+ root = (0, node_parser_1.parseTree)(context, clonedElement);
155
+ perfMonitor.end('parse');
156
+ if (backgroundColor === root.styles.backgroundColor) {
157
+ root.styles.backgroundColor = color_1.COLORS.TRANSPARENT;
158
+ }
159
+ context.logger.debug(`Starting renderer for element at ${renderOptions.x},${renderOptions.y} with size ${renderOptions.width}x${renderOptions.height}`);
160
+ perfMonitor.start('render');
161
+ if (signal?.aborted) {
162
+ throw new DOMException('The operation was aborted.', 'AbortError');
163
+ }
164
+ const renderer = new canvas_renderer_1.CanvasRenderer(context, renderOptions);
165
+ canvas = await renderer.render(root);
166
+ perfMonitor.end('render');
167
+ }
168
+ perfMonitor.start('cleanup');
169
+ if (opts.removeContainer ?? true) {
170
+ if (!document_cloner_1.DocumentCloner.destroy(container)) {
171
+ context.logger.error(`Cannot detach cloned iframe as it is not in the DOM anymore`);
172
+ }
173
+ }
174
+ perfMonitor.end('cleanup');
175
+ perfMonitor.end('total');
176
+ context.logger.debug(`Finished rendering`);
177
+ if (performanceMonitoring) {
178
+ perfMonitor.logSummary();
179
+ }
180
+ return canvas;
181
+ }
182
+ finally {
183
+ if (root) {
184
+ root.restoreTree();
185
+ }
186
+ }
187
+ };
188
+ exports.renderElement = renderElement;
189
+ const parseBackgroundColor = (context, element, backgroundColorOverride) => {
190
+ const ownerDocument = element.ownerDocument;
191
+ // http://www.w3.org/TR/css3-background/#special-backgrounds
192
+ const documentBackgroundColor = ownerDocument.documentElement
193
+ ? (0, color_1.parseColor)(context, getComputedStyle(ownerDocument.documentElement).backgroundColor)
194
+ : color_1.COLORS.TRANSPARENT;
195
+ const bodyBackgroundColor = ownerDocument.body
196
+ ? (0, color_1.parseColor)(context, getComputedStyle(ownerDocument.body).backgroundColor)
197
+ : color_1.COLORS.TRANSPARENT;
198
+ const defaultBackgroundColor = typeof backgroundColorOverride === 'string'
199
+ ? (0, color_1.parseColor)(context, backgroundColorOverride)
200
+ : backgroundColorOverride === null
201
+ ? color_1.COLORS.TRANSPARENT
202
+ : 0xffffffff;
203
+ return element === ownerDocument.documentElement
204
+ ? (0, color_utilities_1.isTransparent)(documentBackgroundColor)
205
+ ? (0, color_utilities_1.isTransparent)(bodyBackgroundColor)
206
+ ? defaultBackgroundColor
207
+ : bodyBackgroundColor
208
+ : documentBackgroundColor
209
+ : defaultBackgroundColor;
210
+ };
@@ -2,4 +2,3 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SMALL_IMAGE = void 0;
4
4
  exports.SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
5
- //# sourceMappingURL=util.js.map
@@ -498,4 +498,3 @@ function createStrictValidator(allowedProxyDomains) {
498
498
  maxImageTimeout: 60000 // 1 minute
499
499
  });
500
500
  }
501
- //# sourceMappingURL=validator.js.map