pretext-pdf 1.1.1 → 1.7.0

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 (342) hide show
  1. package/CHANGELOG.md +689 -0
  2. package/README.md +82 -7
  3. package/dist/allowed-props.d.ts +76 -0
  4. package/dist/allowed-props.d.ts.map +1 -1
  5. package/dist/allowed-props.js.map +1 -1
  6. package/dist/assets/generators/barcode.d.ts +9 -0
  7. package/dist/assets/generators/barcode.d.ts.map +1 -0
  8. package/dist/assets/generators/barcode.js +24 -0
  9. package/dist/assets/generators/barcode.js.map +1 -0
  10. package/dist/assets/generators/chart.d.ts +13 -0
  11. package/dist/assets/generators/chart.d.ts.map +1 -0
  12. package/dist/assets/generators/chart.js +32 -0
  13. package/dist/assets/generators/chart.js.map +1 -0
  14. package/dist/assets/generators/qr.d.ts +9 -0
  15. package/dist/assets/generators/qr.d.ts.map +1 -0
  16. package/dist/assets/generators/qr.js +25 -0
  17. package/dist/assets/generators/qr.js.map +1 -0
  18. package/dist/assets/index.d.ts +19 -0
  19. package/dist/assets/index.d.ts.map +1 -0
  20. package/dist/assets/index.js +19 -0
  21. package/dist/assets/index.js.map +1 -0
  22. package/dist/assets/loaders/images.d.ts +20 -0
  23. package/dist/assets/loaders/images.d.ts.map +1 -0
  24. package/dist/assets/loaders/images.js +69 -0
  25. package/dist/assets/loaders/images.js.map +1 -0
  26. package/dist/assets/loaders/orchestrator.d.ts +24 -0
  27. package/dist/assets/loaders/orchestrator.d.ts.map +1 -0
  28. package/dist/assets/loaders/orchestrator.js +109 -0
  29. package/dist/assets/loaders/orchestrator.js.map +1 -0
  30. package/dist/assets/loaders/vectors.d.ts +25 -0
  31. package/dist/assets/loaders/vectors.d.ts.map +1 -0
  32. package/dist/assets/loaders/vectors.js +118 -0
  33. package/dist/assets/loaders/vectors.js.map +1 -0
  34. package/dist/assets/loaders/watermark.d.ts +12 -0
  35. package/dist/assets/loaders/watermark.d.ts.map +1 -0
  36. package/dist/assets/loaders/watermark.js +40 -0
  37. package/dist/assets/loaders/watermark.js.map +1 -0
  38. package/dist/assets/security/fetch.d.ts +14 -0
  39. package/dist/assets/security/fetch.d.ts.map +1 -0
  40. package/dist/assets/security/fetch.js +112 -0
  41. package/dist/assets/security/fetch.js.map +1 -0
  42. package/dist/assets/security/ipv4-normalize.d.ts +28 -0
  43. package/dist/assets/security/ipv4-normalize.d.ts.map +1 -0
  44. package/dist/assets/security/ipv4-normalize.js +116 -0
  45. package/dist/assets/security/ipv4-normalize.js.map +1 -0
  46. package/dist/assets/security/path-allowlist.d.ts +12 -0
  47. package/dist/assets/security/path-allowlist.d.ts.map +1 -0
  48. package/dist/assets/security/path-allowlist.js +26 -0
  49. package/dist/assets/security/path-allowlist.js.map +1 -0
  50. package/dist/assets/security/url-validation.d.ts +22 -0
  51. package/dist/assets/security/url-validation.d.ts.map +1 -0
  52. package/dist/assets/security/url-validation.js +164 -0
  53. package/dist/assets/security/url-validation.js.map +1 -0
  54. package/dist/assets/svg/dimensions.d.ts +19 -0
  55. package/dist/assets/svg/dimensions.d.ts.map +1 -0
  56. package/dist/assets/svg/dimensions.js +43 -0
  57. package/dist/assets/svg/dimensions.js.map +1 -0
  58. package/dist/assets/svg/rasterize.d.ts +6 -0
  59. package/dist/assets/svg/rasterize.d.ts.map +1 -0
  60. package/dist/assets/svg/rasterize.js +38 -0
  61. package/dist/assets/svg/rasterize.js.map +1 -0
  62. package/dist/assets/svg/resolve-content.d.ts +16 -0
  63. package/dist/assets/svg/resolve-content.d.ts.map +1 -0
  64. package/dist/assets/svg/resolve-content.js +38 -0
  65. package/dist/assets/svg/resolve-content.js.map +1 -0
  66. package/dist/assets/svg/sanitize.d.ts +22 -0
  67. package/dist/assets/svg/sanitize.d.ts.map +1 -0
  68. package/dist/assets/svg/sanitize.js +46 -0
  69. package/dist/assets/svg/sanitize.js.map +1 -0
  70. package/dist/assets/util/redact-path.d.ts +14 -0
  71. package/dist/assets/util/redact-path.d.ts.map +1 -0
  72. package/dist/assets/util/redact-path.js +16 -0
  73. package/dist/assets/util/redact-path.js.map +1 -0
  74. package/dist/assets.d.ts +10 -27
  75. package/dist/assets.d.ts.map +1 -1
  76. package/dist/assets.js +10 -549
  77. package/dist/assets.js.map +1 -1
  78. package/dist/builder.d.ts.map +1 -1
  79. package/dist/builder.js +2 -1
  80. package/dist/builder.js.map +1 -1
  81. package/dist/cli.js +11 -1
  82. package/dist/cli.js.map +1 -1
  83. package/dist/compat.d.ts +63 -1
  84. package/dist/compat.d.ts.map +1 -1
  85. package/dist/compat.js +42 -5
  86. package/dist/compat.js.map +1 -1
  87. package/dist/errors.d.ts +2 -2
  88. package/dist/errors.d.ts.map +1 -1
  89. package/dist/errors.js +2 -2
  90. package/dist/errors.js.map +1 -1
  91. package/dist/fonts.d.ts.map +1 -1
  92. package/dist/fonts.js +8 -10
  93. package/dist/fonts.js.map +1 -1
  94. package/dist/index.d.ts +1 -1
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +7 -5
  97. package/dist/index.js.map +1 -1
  98. package/dist/layout-state.d.ts +1 -1
  99. package/dist/layout-state.d.ts.map +1 -1
  100. package/dist/layout-state.js +5 -0
  101. package/dist/layout-state.js.map +1 -1
  102. package/dist/measure-blocks/float-group.d.ts +9 -0
  103. package/dist/measure-blocks/float-group.d.ts.map +1 -0
  104. package/dist/measure-blocks/float-group.js +103 -0
  105. package/dist/measure-blocks/float-group.js.map +1 -0
  106. package/dist/measure-blocks/helpers.d.ts +44 -0
  107. package/dist/measure-blocks/helpers.d.ts.map +1 -0
  108. package/dist/measure-blocks/helpers.js +43 -0
  109. package/dist/measure-blocks/helpers.js.map +1 -0
  110. package/dist/measure-blocks/highlight.d.ts +26 -0
  111. package/dist/measure-blocks/highlight.d.ts.map +1 -0
  112. package/dist/measure-blocks/highlight.js +169 -0
  113. package/dist/measure-blocks/highlight.js.map +1 -0
  114. package/dist/measure-blocks/image.d.ts +9 -0
  115. package/dist/measure-blocks/image.d.ts.map +1 -0
  116. package/dist/measure-blocks/image.js +136 -0
  117. package/dist/measure-blocks/image.js.map +1 -0
  118. package/dist/measure-blocks/index.d.ts +24 -0
  119. package/dist/measure-blocks/index.d.ts.map +1 -0
  120. package/dist/measure-blocks/index.js +179 -0
  121. package/dist/measure-blocks/index.js.map +1 -0
  122. package/dist/measure-blocks/list.d.ts +8 -0
  123. package/dist/measure-blocks/list.d.ts.map +1 -0
  124. package/dist/measure-blocks/list.js +108 -0
  125. package/dist/measure-blocks/list.js.map +1 -0
  126. package/dist/measure-blocks/simple-blocks.d.ts +18 -0
  127. package/dist/measure-blocks/simple-blocks.d.ts.map +1 -0
  128. package/dist/measure-blocks/simple-blocks.js +121 -0
  129. package/dist/measure-blocks/simple-blocks.js.map +1 -0
  130. package/dist/measure-blocks/table/columns.d.ts +17 -0
  131. package/dist/measure-blocks/table/columns.d.ts.map +1 -0
  132. package/dist/measure-blocks/table/columns.js +83 -0
  133. package/dist/measure-blocks/table/columns.js.map +1 -0
  134. package/dist/measure-blocks/table/measure.d.ts +8 -0
  135. package/dist/measure-blocks/table/measure.d.ts.map +1 -0
  136. package/dist/measure-blocks/table/measure.js +231 -0
  137. package/dist/measure-blocks/table/measure.js.map +1 -0
  138. package/dist/measure-blocks/table/spans.d.ts +25 -0
  139. package/dist/measure-blocks/table/spans.d.ts.map +1 -0
  140. package/dist/measure-blocks/table/spans.js +55 -0
  141. package/dist/measure-blocks/table/spans.js.map +1 -0
  142. package/dist/measure-blocks/text-blocks.d.ts +17 -0
  143. package/dist/measure-blocks/text-blocks.d.ts.map +1 -0
  144. package/dist/measure-blocks/text-blocks.js +242 -0
  145. package/dist/measure-blocks/text-blocks.js.map +1 -0
  146. package/dist/measure-text.d.ts +21 -3
  147. package/dist/measure-text.d.ts.map +1 -1
  148. package/dist/measure-text.js +87 -36
  149. package/dist/measure-text.js.map +1 -1
  150. package/dist/measure.d.ts +1 -1
  151. package/dist/measure.d.ts.map +1 -1
  152. package/dist/measure.js +8 -6
  153. package/dist/measure.js.map +1 -1
  154. package/dist/node-polyfill.d.ts.map +1 -1
  155. package/dist/node-polyfill.js +9 -0
  156. package/dist/node-polyfill.js.map +1 -1
  157. package/dist/pipeline-footnotes.d.ts +1 -1
  158. package/dist/pipeline-footnotes.d.ts.map +1 -1
  159. package/dist/pipeline-toc.d.ts +1 -1
  160. package/dist/pipeline-toc.d.ts.map +1 -1
  161. package/dist/pipeline.d.ts +3 -3
  162. package/dist/pipeline.d.ts.map +1 -1
  163. package/dist/pipeline.js +4 -5
  164. package/dist/pipeline.js.map +1 -1
  165. package/dist/plugin-types.d.ts +1 -1
  166. package/dist/plugin-types.d.ts.map +1 -1
  167. package/dist/post-process.d.ts +2 -2
  168. package/dist/post-process.d.ts.map +1 -1
  169. package/dist/post-process.js +47 -10
  170. package/dist/post-process.js.map +1 -1
  171. package/dist/render-blocks/blockquote.d.ts +7 -0
  172. package/dist/render-blocks/blockquote.d.ts.map +1 -0
  173. package/dist/render-blocks/blockquote.js +87 -0
  174. package/dist/render-blocks/blockquote.js.map +1 -0
  175. package/dist/render-blocks/callout.d.ts +7 -0
  176. package/dist/render-blocks/callout.d.ts.map +1 -0
  177. package/dist/render-blocks/callout.js +84 -0
  178. package/dist/render-blocks/callout.js.map +1 -0
  179. package/dist/render-blocks/code.d.ts +7 -0
  180. package/dist/render-blocks/code.d.ts.map +1 -0
  181. package/dist/render-blocks/code.js +84 -0
  182. package/dist/render-blocks/code.js.map +1 -0
  183. package/dist/render-blocks/footnote.d.ts +11 -0
  184. package/dist/render-blocks/footnote.d.ts.map +1 -0
  185. package/dist/render-blocks/footnote.js +45 -0
  186. package/dist/render-blocks/footnote.js.map +1 -0
  187. package/dist/render-blocks/header-footer.d.ts +11 -0
  188. package/dist/render-blocks/header-footer.d.ts.map +1 -0
  189. package/dist/render-blocks/header-footer.js +56 -0
  190. package/dist/render-blocks/header-footer.js.map +1 -0
  191. package/dist/render-blocks/hr.d.ts +7 -0
  192. package/dist/render-blocks/hr.d.ts.map +1 -0
  193. package/dist/render-blocks/hr.js +24 -0
  194. package/dist/render-blocks/hr.js.map +1 -0
  195. package/dist/render-blocks/image.d.ts +9 -0
  196. package/dist/render-blocks/image.d.ts.map +1 -0
  197. package/dist/render-blocks/image.js +135 -0
  198. package/dist/render-blocks/image.js.map +1 -0
  199. package/dist/render-blocks/index.d.ts +17 -0
  200. package/dist/render-blocks/index.d.ts.map +1 -0
  201. package/dist/render-blocks/index.js +17 -0
  202. package/dist/render-blocks/index.js.map +1 -0
  203. package/dist/render-blocks/list-item.d.ts +7 -0
  204. package/dist/render-blocks/list-item.d.ts.map +1 -0
  205. package/dist/render-blocks/list-item.js +80 -0
  206. package/dist/render-blocks/list-item.js.map +1 -0
  207. package/dist/render-blocks/rich.d.ts +7 -0
  208. package/dist/render-blocks/rich.d.ts.map +1 -0
  209. package/dist/render-blocks/rich.js +160 -0
  210. package/dist/render-blocks/rich.js.map +1 -0
  211. package/dist/render-blocks/table.d.ts +7 -0
  212. package/dist/render-blocks/table.d.ts.map +1 -0
  213. package/dist/render-blocks/table.js +139 -0
  214. package/dist/render-blocks/table.js.map +1 -0
  215. package/dist/render-blocks/text.d.ts +7 -0
  216. package/dist/render-blocks/text.d.ts.map +1 -0
  217. package/dist/render-blocks/text.js +183 -0
  218. package/dist/render-blocks/text.js.map +1 -0
  219. package/dist/render-blocks/watermark.d.ts +8 -0
  220. package/dist/render-blocks/watermark.d.ts.map +1 -0
  221. package/dist/render-blocks/watermark.js +52 -0
  222. package/dist/render-blocks/watermark.js.map +1 -0
  223. package/dist/render-extras.d.ts.map +1 -1
  224. package/dist/render-extras.js +1 -2
  225. package/dist/render-extras.js.map +1 -1
  226. package/dist/render-utils.d.ts.map +1 -1
  227. package/dist/render-utils.js +10 -6
  228. package/dist/render-utils.js.map +1 -1
  229. package/dist/render.d.ts.map +1 -1
  230. package/dist/render.js +9 -3
  231. package/dist/render.js.map +1 -1
  232. package/dist/rich-text.d.ts +2 -1
  233. package/dist/rich-text.d.ts.map +1 -1
  234. package/dist/rich-text.js +0 -1
  235. package/dist/rich-text.js.map +1 -1
  236. package/dist/types-internal.d.ts +19 -3
  237. package/dist/types-internal.d.ts.map +1 -1
  238. package/dist/types-public/document.d.ts +261 -0
  239. package/dist/types-public/document.d.ts.map +1 -0
  240. package/dist/types-public/document.js +2 -0
  241. package/dist/types-public/document.js.map +1 -0
  242. package/dist/types-public/elements-block.d.ts +246 -0
  243. package/dist/types-public/elements-block.d.ts.map +1 -0
  244. package/dist/types-public/elements-block.js +8 -0
  245. package/dist/types-public/elements-block.js.map +1 -0
  246. package/dist/types-public/elements-media.d.ts +199 -0
  247. package/dist/types-public/elements-media.d.ts.map +1 -0
  248. package/dist/types-public/elements-media.js +2 -0
  249. package/dist/types-public/elements-media.js.map +1 -0
  250. package/dist/types-public/elements-text.d.ts +327 -0
  251. package/dist/types-public/elements-text.d.ts.map +1 -0
  252. package/dist/types-public/elements-text.js +2 -0
  253. package/dist/types-public/elements-text.js.map +1 -0
  254. package/dist/types-public/index.d.ts +14 -0
  255. package/dist/types-public/index.d.ts.map +1 -0
  256. package/dist/types-public/index.js +2 -0
  257. package/dist/types-public/index.js.map +1 -0
  258. package/dist/types-public/render-options.d.ts +38 -0
  259. package/dist/types-public/render-options.d.ts.map +1 -0
  260. package/dist/types-public/render-options.js +2 -0
  261. package/dist/types-public/render-options.js.map +1 -0
  262. package/dist/types-public/union.d.ts +13 -0
  263. package/dist/types-public/union.d.ts.map +1 -0
  264. package/dist/types-public/union.js +2 -0
  265. package/dist/types-public/union.js.map +1 -0
  266. package/dist/types-public/validation.d.ts +64 -0
  267. package/dist/types-public/validation.d.ts.map +1 -0
  268. package/dist/types-public/validation.js +2 -0
  269. package/dist/types-public/validation.js.map +1 -0
  270. package/dist/types-public.d.ts +5 -1081
  271. package/dist/types-public.d.ts.map +1 -1
  272. package/dist/types.d.ts +1 -1
  273. package/dist/types.d.ts.map +1 -1
  274. package/dist/validate/document.d.ts +28 -0
  275. package/dist/validate/document.d.ts.map +1 -0
  276. package/dist/validate/document.js +295 -0
  277. package/dist/validate/document.js.map +1 -0
  278. package/dist/validate/elements/forms-floats.d.ts +19 -0
  279. package/dist/validate/elements/forms-floats.d.ts.map +1 -0
  280. package/dist/validate/elements/forms-floats.js +96 -0
  281. package/dist/validate/elements/forms-floats.js.map +1 -0
  282. package/dist/validate/elements/list.d.ts +10 -0
  283. package/dist/validate/elements/list.d.ts.map +1 -0
  284. package/dist/validate/elements/list.js +66 -0
  285. package/dist/validate/elements/list.js.map +1 -0
  286. package/dist/validate/elements/media.d.ts +23 -0
  287. package/dist/validate/elements/media.d.ts.map +1 -0
  288. package/dist/validate/elements/media.js +179 -0
  289. package/dist/validate/elements/media.js.map +1 -0
  290. package/dist/validate/elements/structural-simple.d.ts +21 -0
  291. package/dist/validate/elements/structural-simple.d.ts.map +1 -0
  292. package/dist/validate/elements/structural-simple.js +63 -0
  293. package/dist/validate/elements/structural-simple.js.map +1 -0
  294. package/dist/validate/elements/structural.d.ts +12 -0
  295. package/dist/validate/elements/structural.d.ts.map +1 -0
  296. package/dist/validate/elements/structural.js +12 -0
  297. package/dist/validate/elements/structural.js.map +1 -0
  298. package/dist/validate/elements/table.d.ts +10 -0
  299. package/dist/validate/elements/table.d.ts.map +1 -0
  300. package/dist/validate/elements/table.js +165 -0
  301. package/dist/validate/elements/table.js.map +1 -0
  302. package/dist/validate/elements/text.d.ts +26 -0
  303. package/dist/validate/elements/text.d.ts.map +1 -0
  304. package/dist/validate/elements/text.js +331 -0
  305. package/dist/validate/elements/text.js.map +1 -0
  306. package/dist/validate/errors.d.ts +9 -0
  307. package/dist/validate/errors.d.ts.map +1 -0
  308. package/dist/validate/errors.js +43 -0
  309. package/dist/validate/errors.js.map +1 -0
  310. package/dist/validate/fonts.d.ts +11 -0
  311. package/dist/validate/fonts.d.ts.map +1 -0
  312. package/dist/validate/fonts.js +118 -0
  313. package/dist/validate/fonts.js.map +1 -0
  314. package/dist/validate/helpers.d.ts +76 -0
  315. package/dist/validate/helpers.d.ts.map +1 -0
  316. package/dist/validate/helpers.js +169 -0
  317. package/dist/validate/helpers.js.map +1 -0
  318. package/dist/validate/index.d.ts +37 -0
  319. package/dist/validate/index.d.ts.map +1 -0
  320. package/dist/validate/index.js +279 -0
  321. package/dist/validate/index.js.map +1 -0
  322. package/dist/validate.d.ts +6 -18
  323. package/dist/validate.d.ts.map +1 -1
  324. package/dist/validate.js +6 -1585
  325. package/dist/validate.js.map +1 -1
  326. package/dist/vendor/pretext/VERSION.d.ts +3 -0
  327. package/dist/vendor/pretext/VERSION.d.ts.map +1 -0
  328. package/dist/vendor/pretext/VERSION.js +12 -0
  329. package/dist/vendor/pretext/VERSION.js.map +1 -0
  330. package/dist/version-check.d.ts +47 -0
  331. package/dist/version-check.d.ts.map +1 -0
  332. package/dist/version-check.js +75 -0
  333. package/dist/version-check.js.map +1 -0
  334. package/package.json +30 -7
  335. package/dist/measure-blocks.d.ts +0 -26
  336. package/dist/measure-blocks.d.ts.map +0 -1
  337. package/dist/measure-blocks.js +0 -1317
  338. package/dist/measure-blocks.js.map +0 -1
  339. package/dist/render-blocks.d.ts +0 -28
  340. package/dist/render-blocks.d.ts.map +0 -1
  341. package/dist/render-blocks.js +0 -1059
  342. package/dist/render-blocks.js.map +0 -1
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  [![npm downloads](https://img.shields.io/npm/dw/pretext-pdf)](https://www.npmjs.com/package/pretext-pdf)
10
10
  [![CI](https://github.com/Himaan1998Y/pretext-pdf/actions/workflows/ci.yml/badge.svg)](https://github.com/Himaan1998Y/pretext-pdf/actions)
11
11
  [![TypeScript](https://img.shields.io/badge/typescript-strict-blue)](https://www.typescriptlang.org/)
12
- [![Tests](https://img.shields.io/badge/tests-743-brightgreen)](#tests)
12
+ [![Tests](https://img.shields.io/badge/tests-passing-brightgreen)](#tests)
13
13
  [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
14
14
  [![Bundle](https://img.shields.io/badge/runtime%20deps-7-informational)](#runtime-footprint)
15
15
 
@@ -135,17 +135,53 @@ const pdf = await render({
135
135
  writeFileSync('invoice.pdf', pdf)
136
136
  ```
137
137
 
138
- > **Securityfile-path access**
139
- > By default, `render()` will read any absolute file path supplied in `image.src`, `svg.src`,
140
- > or watermark image fields. If your document JSON originates from user input, an LLM,
141
- > or any external source, set `allowedFileDirs` to restrict reads to a known directory:
138
+ > **Validationwhen documents come from external sources**
139
+ >
140
+ > If your document JSON originates from user input, an LLM agent, an API response, or any external source, call `validate()` or `validateDocument()` first:
141
+ >
142
+ > ```typescript
143
+ > import { validate, render } from 'pretext-pdf'
144
+ > // LLM-generated documents or user input: validate before rendering
145
+ > validate(untrustedDoc) // Throws if invalid
146
+ > const pdf = await render(untrustedDoc)
147
+ > // Or use validateDocument() for non-throwing validation:
148
+ > const result = validateDocument(untrustedDoc)
149
+ > if (!result.valid) {
150
+ > console.error('Invalid document:', result.errors)
151
+ > return
152
+ > }
153
+ > ```
154
+ >
155
+ > Validation prevents injection attacks, catches shape errors early, and gives better error messages than render() alone.
156
+
157
+ > **⚠️ Security — file-path access (READ BEFORE PRODUCTION DEPLOY)**
158
+ >
159
+ > **`allowedFileDirs` is opt-in, not on by default.** If you do not set it,
160
+ > `render()` will read ANY absolute file path supplied in `image.src`,
161
+ > `svg.src`, font `src`, watermark image, or P12 cert path — including
162
+ > sensitive system paths like `/etc/passwd`, `~/.ssh/id_rsa`,
163
+ > `/proc/self/environ`, or AWS credentials files.
164
+ >
165
+ > This default-open behavior is intentional for trusted in-process callers
166
+ > (your own backend constructing documents from internal data). It is
167
+ > **unsafe** for any deployment where document JSON crosses a trust
168
+ > boundary: API requests, webhooks, user uploads, LLM-generated documents,
169
+ > or any MCP-style tool call.
170
+ >
171
+ > **For untrusted input, you MUST set `allowedFileDirs`:**
142
172
  >
143
173
  > ```typescript
144
174
  > await render(doc, { allowedFileDirs: ['/srv/safe/assets/'] })
145
175
  > ```
146
176
  >
147
- > Paths outside the listed directories throw `PATH_TRAVERSAL`. HTTPS image URLs are
148
- > always validated against an SSRF blocklist regardless of this setting.
177
+ > Paths outside the listed directories throw `PATH_TRAVERSAL`. HTTPS image
178
+ > URLs are always validated against an SSRF blocklist (undici-pinned DNS,
179
+ > private-range blocking) regardless of this setting.
180
+ >
181
+ > **Reference deployments using untrusted input must also call
182
+ > `validateDocument(doc)` before `render(doc)`** (see the "Validation"
183
+ > section below) — `allowedFileDirs` is one of three layers; validation
184
+ > and SSRF defense are the other two.
149
185
 
150
186
  ### CLI
151
187
 
@@ -481,6 +517,42 @@ const schemaString = JSON.stringify(pdfDocumentSchema, null, 2)
481
517
 
482
518
  ---
483
519
 
520
+ ## Validation
521
+
522
+ When `document` comes from external sources (API requests, user input, MCP tools, LLM output), **ALWAYS** run `validateDocument(doc)` (or `validate(doc)`) before `render(doc)`:
523
+
524
+ ```typescript
525
+ import { validateDocument, render } from 'pretext-pdf'
526
+
527
+ const validation = validateDocument(untrustedDoc)
528
+ if (!validation.valid) {
529
+ return { error: validation.errors }
530
+ }
531
+ const bytes = await render(untrustedDoc)
532
+ ```
533
+
534
+ Skipping validation on untrusted input may cause:
535
+
536
+ - **Stack overflow on deeply nested malicious input** — Without the depth and
537
+ cycle guards in `validate()`, cyclic or pathologically nested documents can
538
+ exhaust the call stack inside the layout engine.
539
+ - **Prototype pollution** — Properties like `__proto__` smuggled through
540
+ `JSON.parse` can leak into the rendering pipeline if not filtered by the
541
+ validator's strict checks.
542
+ - **Unexpected runtime errors that surface as 500s** — Renderer assumes
543
+ well-typed input; passing malformed shapes through `render()` directly will
544
+ surface as opaque stack traces rather than structured `VALIDATION_ERROR`s.
545
+
546
+ The validator enforces:
547
+
548
+ - A nesting depth cap (`MAX_VALIDATION_DEPTH = 32`) at every container entry.
549
+ - Cycle detection on `ListItem.items`, `FloatGroup.content`, `RichParagraph.spans`,
550
+ and `TableElement.rows`.
551
+ - URL scheme allow-listing (no `javascript:`, `data:`, `vbscript:`).
552
+ - File-path safety for fonts and images (no UNC, no remote URLs).
553
+
554
+ ---
555
+
484
556
  ## Strict validation
485
557
 
486
558
  By default, `render()` uses permissive validation — unknown properties are silently ignored. Enable strict mode to catch typos and ensure property names match the schema exactly:
@@ -888,6 +960,9 @@ See [SECURITY.md](SECURITY.md) for disclosure policy.
888
960
  | **0.9.0** | **CLI, pdfmake compat shim, GFM tables + task lists** | ✅ |
889
961
  | **1.0.0** | **Plugin API (custom element types), strict validation, `PdfBuilder` fluent API** | ✅ |
890
962
  | **1.0.2–1.0.6** | **`validateDocument()`, JSON Schema export, full schema coverage, audit fixes** | ✅ |
963
+ | **1.1.0** | **Vendored pretext layout engine, removed `@chenglou/pretext` npm dep** | ✅ |
964
+ | **1.2.x** | **Discriminated union types, security hardening (SSRF, isError), benchmark corpora** | ✅ |
965
+ | **1.3.0–1.3.4** | **DNS dedup, parallel raster, word-width cache (~1.66x speedup); drift guards; toc-entry validation** | ✅ |
891
966
  | Future | Variable fonts, OpenType features, PDF/A, PDF/UA accessibility | 🔜 |
892
967
 
893
968
  See [docs/ROADMAP.md](docs/ROADMAP.md).
@@ -3,6 +3,81 @@
3
3
  * Enforced at runtime by strict: true validation.
4
4
  * Compile-time drift guards via Exact<T, Keys> ensure types stay synchronized.
5
5
  */
6
+ import type { PdfDocument, ParagraphElement, HeadingElement, SpacerElement, TableElement, TableCell, ColumnDef, ImageElement, SvgElement, QrCodeElement, BarcodeElement, ChartElement, ListElement, ListItem, HorizontalRuleElement, PageBreakElement, CodeBlockElement, RichParagraphElement, InlineSpan, BlockquoteElement, CalloutElement, CommentElement, FormFieldElement, FootnoteDefElement, TocElement, FloatGroupElement, AnnotationSpec, TableRow, DocumentMetadata, EncryptionSpec } from './types.js';
7
+ import type { TocEntryElement } from './types-internal.js';
8
+ /** Compile-time assertion that T has exactly the keys in Keys (no more, no less) */
9
+ type Exact<T, Keys extends readonly (keyof T)[]> = T & Record<Exclude<keyof T, Keys[number]>, never>;
10
+ declare const DOC_KEYS: readonly ["pageSize", "margins", "defaultFont", "defaultFontSize", "defaultLineHeight", "fonts", "header", "footer", "watermark", "encryption", "signature", "bookmarks", "hyphenation", "metadata", "defaultParagraphStyle", "sections", "content", "flattenForms", "onImageLoadError", "onFormFieldError", "renderDate", "allowedFileDirs"];
11
+ declare const METADATA_KEYS: readonly ["title", "author", "subject", "keywords", "creator", "language", "producer"];
12
+ declare const PARAGRAPH_KEYS: readonly ["type", "text", "dir", "fontSize", "lineHeight", "fontFamily", "fontWeight", "color", "align", "bgColor", "spaceAfter", "spaceBefore", "keepTogether", "underline", "strikethrough", "url", "columns", "columnGap", "hyphenate", "letterSpacing", "smallCaps", "tabularNumbers", "annotation"];
13
+ declare const HEADING_KEYS: readonly ["type", "level", "text", "dir", "fontFamily", "fontWeight", "fontSize", "lineHeight", "align", "color", "bgColor", "spaceBefore", "spaceAfter", "keepTogether", "underline", "strikethrough", "bookmark", "hyphenate", "url", "anchor", "letterSpacing", "smallCaps", "tabularNumbers", "annotation"];
14
+ declare const SPACER_KEYS: readonly ["type", "height"];
15
+ declare const TABLE_KEYS: readonly ["type", "columns", "rows", "dir", "headerRows", "borderColor", "borderWidth", "headerBgColor", "fontSize", "cellPaddingH", "cellPaddingV", "spaceAfter", "spaceBefore"];
16
+ declare const COLUMN_DEF_KEYS: readonly ["width", "align"];
17
+ declare const TABLE_ROW_KEYS: readonly ["cells", "isHeader"];
18
+ declare const TABLE_CELL_KEYS: readonly ["text", "dir", "align", "fontWeight", "fontFamily", "fontSize", "color", "bgColor", "colspan", "rowspan", "tabularNumbers"];
19
+ declare const IMAGE_KEYS: readonly ["type", "src", "format", "width", "height", "align", "spaceAfter", "spaceBefore", "float", "floatWidth", "floatGap", "floatText", "floatSpans", "floatFontSize", "floatFontFamily", "floatColor"];
20
+ declare const SVG_KEYS: readonly ["type", "svg", "src", "width", "height", "align", "spaceBefore", "spaceAfter"];
21
+ declare const QR_CODE_KEYS: readonly ["type", "data", "size", "errorCorrectionLevel", "foreground", "background", "margin", "align", "spaceBefore", "spaceAfter"];
22
+ declare const BARCODE_KEYS: readonly ["type", "symbology", "data", "width", "height", "includeText", "align", "spaceBefore", "spaceAfter"];
23
+ declare const CHART_KEYS: readonly ["type", "spec", "width", "height", "caption", "align", "spaceBefore", "spaceAfter"];
24
+ declare const LIST_KEYS: readonly ["type", "style", "items", "marker", "indent", "markerWidth", "fontSize", "lineHeight", "itemSpaceAfter", "spaceAfter", "spaceBefore", "color", "nestedNumberingStyle"];
25
+ declare const LIST_ITEM_KEYS: readonly ["text", "dir", "fontWeight", "items"];
26
+ declare const HR_KEYS: readonly ["type", "thickness", "color", "spaceAbove", "spaceBelow", "spaceBefore", "spaceAfter"];
27
+ declare const PAGE_BREAK_KEYS: readonly ["type"];
28
+ declare const CODE_KEYS: readonly ["type", "text", "dir", "fontFamily", "fontSize", "lineHeight", "bgColor", "color", "padding", "spaceAfter", "spaceBefore", "keepTogether", "language", "highlightTheme"];
29
+ declare const RICH_PARAGRAPH_KEYS: readonly ["type", "spans", "dir", "fontSize", "lineHeight", "align", "bgColor", "spaceBefore", "spaceAfter", "keepTogether", "columns", "columnGap", "letterSpacing", "smallCaps", "tabularNumbers"];
30
+ declare const INLINE_SPAN_KEYS: readonly ["text", "dir", "fontFamily", "fontWeight", "fontStyle", "color", "fontSize", "underline", "strikethrough", "url", "href", "verticalAlign", "smallCaps", "letterSpacing", "footnoteRef"];
31
+ declare const BLOCKQUOTE_KEYS: readonly ["type", "text", "dir", "borderColor", "borderWidth", "bgColor", "color", "fontFamily", "fontWeight", "fontStyle", "fontSize", "lineHeight", "padding", "paddingH", "paddingV", "align", "spaceBefore", "spaceAfter", "keepTogether", "underline", "strikethrough"];
32
+ declare const CALLOUT_KEYS: readonly ["type", "content", "style", "title", "backgroundColor", "borderColor", "color", "titleColor", "fontFamily", "fontWeight", "fontSize", "lineHeight", "padding", "paddingH", "paddingV", "spaceAfter", "spaceBefore", "keepTogether", "dir"];
33
+ declare const COMMENT_KEYS: readonly ["type", "contents", "author", "color", "open", "spaceAfter"];
34
+ declare const FORM_FIELD_KEYS: readonly ["type", "fieldType", "name", "label", "placeholder", "defaultValue", "multiline", "maxLength", "checked", "options", "defaultSelected", "width", "height", "fontSize", "borderColor", "backgroundColor", "spaceAfter", "spaceBefore", "keepTogether"];
35
+ declare const FOOTNOTE_DEF_KEYS: readonly ["type", "id", "text", "fontSize", "fontFamily", "spaceAfter"];
36
+ declare const TOC_KEYS: readonly ["type", "title", "showTitle", "minLevel", "maxLevel", "fontSize", "titleFontSize", "levelIndent", "leader", "entrySpacing", "fontFamily", "spaceBefore", "spaceAfter"];
37
+ declare const TOC_ENTRY_KEYS: readonly ["type", "text", "pageNumber", "level", "levelIndent", "leader", "fontFamily", "fontWeight"];
38
+ declare const FLOAT_GROUP_KEYS: readonly ["type", "image", "float", "floatWidth", "floatGap", "content", "spaceBefore", "spaceAfter"];
39
+ declare const ANNOTATION_KEYS: readonly ["contents", "author", "color", "open"];
40
+ declare const ENCRYPTION_KEYS: readonly ["userPassword", "ownerPassword", "permissions"];
41
+ /**
42
+ * Compile-time drift guard — fails the build if any element/sub-structure type
43
+ * gains or loses a property without the corresponding KEYS array being updated.
44
+ * Consolidated from per-type `type _X = Exact<...>` aliases in v1.5.1 (M5a) to
45
+ * keep noUnusedLocals enabled without 30 unused-type warnings. The tuple is
46
+ * referenced via `export type` so TypeScript counts it as used.
47
+ */
48
+ export type _AllowedPropsDriftGuard = [
49
+ Exact<PdfDocument, typeof DOC_KEYS>,
50
+ Exact<DocumentMetadata, typeof METADATA_KEYS>,
51
+ Exact<ParagraphElement, typeof PARAGRAPH_KEYS>,
52
+ Exact<HeadingElement, typeof HEADING_KEYS>,
53
+ Exact<SpacerElement, typeof SPACER_KEYS>,
54
+ Exact<TableElement, typeof TABLE_KEYS>,
55
+ Exact<ColumnDef, typeof COLUMN_DEF_KEYS>,
56
+ Exact<TableRow, typeof TABLE_ROW_KEYS>,
57
+ Exact<TableCell, typeof TABLE_CELL_KEYS>,
58
+ Exact<ImageElement, typeof IMAGE_KEYS>,
59
+ Exact<SvgElement, typeof SVG_KEYS>,
60
+ Exact<QrCodeElement, typeof QR_CODE_KEYS>,
61
+ Exact<BarcodeElement, typeof BARCODE_KEYS>,
62
+ Exact<ChartElement, typeof CHART_KEYS>,
63
+ Exact<ListElement, typeof LIST_KEYS>,
64
+ Exact<ListItem, typeof LIST_ITEM_KEYS>,
65
+ Exact<HorizontalRuleElement, typeof HR_KEYS>,
66
+ Exact<PageBreakElement, typeof PAGE_BREAK_KEYS>,
67
+ Exact<CodeBlockElement, typeof CODE_KEYS>,
68
+ Exact<RichParagraphElement, typeof RICH_PARAGRAPH_KEYS>,
69
+ Exact<InlineSpan, typeof INLINE_SPAN_KEYS>,
70
+ Exact<BlockquoteElement, typeof BLOCKQUOTE_KEYS>,
71
+ Exact<CalloutElement, typeof CALLOUT_KEYS>,
72
+ Exact<CommentElement, typeof COMMENT_KEYS>,
73
+ Exact<FormFieldElement, typeof FORM_FIELD_KEYS>,
74
+ Exact<FootnoteDefElement, typeof FOOTNOTE_DEF_KEYS>,
75
+ Exact<TocElement, typeof TOC_KEYS>,
76
+ Exact<TocEntryElement, typeof TOC_ENTRY_KEYS>,
77
+ Exact<FloatGroupElement, typeof FLOAT_GROUP_KEYS>,
78
+ Exact<AnnotationSpec, typeof ANNOTATION_KEYS>,
79
+ Exact<EncryptionSpec, typeof ENCRYPTION_KEYS>
80
+ ];
6
81
  export declare const ALLOWED_PROPS: {
7
82
  readonly paragraph: Set<"text" | "type" | "dir" | "fontSize" | "lineHeight" | "fontFamily" | "fontWeight" | "color" | "align" | "bgColor" | "spaceAfter" | "spaceBefore" | "keepTogether" | "underline" | "strikethrough" | "url" | "columns" | "columnGap" | "hyphenate" | "letterSpacing" | "smallCaps" | "tabularNumbers" | "annotation">;
8
83
  readonly heading: Set<"text" | "type" | "dir" | "fontSize" | "lineHeight" | "fontFamily" | "fontWeight" | "color" | "align" | "bgColor" | "spaceAfter" | "spaceBefore" | "keepTogether" | "underline" | "strikethrough" | "url" | "hyphenate" | "letterSpacing" | "smallCaps" | "tabularNumbers" | "annotation" | "level" | "bookmark" | "anchor">;
@@ -38,4 +113,5 @@ export declare const ALLOWED_PROPS_SUB: {
38
113
  readonly annotation: Set<"author" | "color" | "contents" | "open">;
39
114
  readonly encryption: Set<"userPassword" | "ownerPassword" | "permissions">;
40
115
  };
116
+ export {};
41
117
  //# sourceMappingURL=allowed-props.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"allowed-props.d.ts","sourceRoot":"","sources":["../src/allowed-props.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkMH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;CAuBhB,CAAA;AAEV,eAAO,MAAM,iBAAiB;;;;;;;;;;CAUpB,CAAA"}
1
+ {"version":3,"file":"allowed-props.d.ts","sourceRoot":"","sources":["../src/allowed-props.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"allowed-props.js","sourceRoot":"","sources":["../src/allowed-props.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"allowed-props.js","sourceRoot":"","sources":["../src/allowed-props.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Barcode SVG generator — extracted from src/assets.ts in v1.6.0 commit 12/16.
3
+ *
4
+ * `bwip-js` is loaded via dynamic import (optional peer dep). Lazy-load
5
+ * pattern preserved so cold-start cost stays equivalent.
6
+ */
7
+ import type { BarcodeElement } from '../../types.js';
8
+ export declare function generateBarcodeSvg(el: BarcodeElement): Promise<string>;
9
+ //# sourceMappingURL=barcode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barcode.d.ts","sourceRoot":"","sources":["../../../src/assets/generators/barcode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAGpD,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B5E"}
@@ -0,0 +1,24 @@
1
+ import { PretextPdfError } from '../../errors.js';
2
+ export async function generateBarcodeSvg(el) {
3
+ let bwip;
4
+ try {
5
+ bwip = await import('bwip-js');
6
+ }
7
+ catch {
8
+ throw new PretextPdfError('BARCODE_DEP_MISSING', 'barcode elements require the bwip-js package. Install it: npm install bwip-js');
9
+ }
10
+ try {
11
+ return bwip.toSVG({
12
+ bcid: el.symbology,
13
+ text: el.data,
14
+ scale: 3,
15
+ includetext: el.includeText !== false,
16
+ });
17
+ }
18
+ catch (err) {
19
+ const msg = err instanceof Error ? err.message : String(err);
20
+ const isSymbology = msg.toLowerCase().includes('unknown') || msg.toLowerCase().includes('bcid');
21
+ throw new PretextPdfError(isSymbology ? 'BARCODE_SYMBOLOGY_INVALID' : 'BARCODE_GENERATE_FAILED', `Barcode generation failed (symbology: '${el.symbology}'): ${msg}`);
22
+ }
23
+ }
24
+ //# sourceMappingURL=barcode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barcode.js","sourceRoot":"","sources":["../../../src/assets/generators/barcode.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAkB;IAEzD,IAAI,IAAgB,CAAA;IACpB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,MAAM,CAAC,SAAmB,CAAe,CAAA;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,eAAe,CACvB,qBAAqB,EACrB,+EAA+E,CAChF,CAAA;IACH,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC;YAChB,IAAI,EAAE,EAAE,CAAC,SAAS;YAClB,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,KAAK,EAAE,CAAC;YACR,WAAW,EAAE,EAAE,CAAC,WAAW,KAAK,KAAK;SACtC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC5D,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC/F,MAAM,IAAI,eAAe,CACvB,WAAW,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,yBAAyB,EACrE,0CAA0C,EAAE,CAAC,SAAS,OAAO,GAAG,EAAE,CACnE,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Chart SVG generator (vega-lite, optional) — extracted from src/assets.ts
3
+ * in v1.6.0 commit 12/16.
4
+ *
5
+ * `vega` + `vega-lite` are loaded via dynamic import (optional peer deps).
6
+ * Lazy-load pattern preserved so cold-start cost stays equivalent.
7
+ *
8
+ * Remote data loading is explicitly disabled inside the loader to block the
9
+ * SSRF vector through `spec.data.url`.
10
+ */
11
+ import type { ChartElement } from '../../types.js';
12
+ export declare function generateChartSvg(el: ChartElement, contentWidth: number): Promise<string>;
13
+ //# sourceMappingURL=chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../src/assets/generators/chart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuC9F"}
@@ -0,0 +1,32 @@
1
+ import { PretextPdfError } from '../../errors.js';
2
+ export async function generateChartSvg(el, contentWidth) {
3
+ let vegaLite;
4
+ let vega;
5
+ try {
6
+ vegaLite = await import('vega-lite');
7
+ vega = await import('vega');
8
+ }
9
+ catch {
10
+ throw new PretextPdfError('CHART_DEP_MISSING', 'chart elements require vega and vega-lite packages. Install them: npm install vega vega-lite');
11
+ }
12
+ let vegaSpec;
13
+ try {
14
+ const specWithSize = { ...el.spec, width: el.width ?? contentWidth, height: el.height ?? 300 };
15
+ vegaSpec = vegaLite.compile(specWithSize).spec;
16
+ }
17
+ catch (err) {
18
+ throw new PretextPdfError('CHART_SPEC_INVALID', `vega-lite spec compilation failed: ${err instanceof Error ? err.message : String(err)}`);
19
+ }
20
+ try {
21
+ // Block all remote data loading to prevent SSRF — vega's default loader
22
+ // follows any data.url in the spec, which could reach internal services
23
+ const blockedLoader = vega.loader();
24
+ blockedLoader.load = (_uri) => Promise.reject(new Error('Remote data loading is disabled in pretext-pdf'));
25
+ const view = new vega.View(vega.parse(vegaSpec), { renderer: 'none', loader: blockedLoader });
26
+ return await view.toSVG();
27
+ }
28
+ catch (err) {
29
+ throw new PretextPdfError('CHART_RENDER_FAILED', `Chart SVG rendering failed: ${err instanceof Error ? err.message : String(err)}`);
30
+ }
31
+ }
32
+ //# sourceMappingURL=chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../../src/assets/generators/chart.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAgB,EAAE,YAAoB;IAI3E,IAAI,QAAwB,CAAA;IAC5B,IAAI,IAAgB,CAAA;IACpB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAqB,CAAmB,CAAA;QAChE,IAAI,GAAO,MAAM,MAAM,CAAC,MAAgB,CAAe,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,eAAe,CACvB,mBAAmB,EACnB,8FAA8F,CAC/F,CAAA;IACH,CAAC;IACD,IAAI,QAAiC,CAAA;IACrC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,YAAY,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,GAAG,EAAE,CAAA;QAC9F,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAA;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,oBAAoB,EACpB,sCAAsC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACzF,CAAA;IACH,CAAC;IACD,IAAI,CAAC;QACH,wEAAwE;QACxE,wEAAwE;QACxE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QACnC,aAAa,CAAC,IAAI,GAAG,CAAC,IAAY,EAAmB,EAAE,CACrD,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAA;QAC7E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;QAC7F,OAAO,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,qBAAqB,EACrB,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAClF,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * QR code SVG generator — extracted from src/assets.ts in v1.6.0 commit 12/16.
3
+ *
4
+ * `qrcode` is loaded via dynamic import (optional peer dep). Lazy-load
5
+ * pattern preserved so cold-start cost stays equivalent.
6
+ */
7
+ import type { QrCodeElement } from '../../types.js';
8
+ export declare function generateQrSvg(el: QrCodeElement): Promise<string>;
9
+ //# sourceMappingURL=qr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.d.ts","sourceRoot":"","sources":["../../../src/assets/generators/qr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD,wBAAsB,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BtE"}
@@ -0,0 +1,25 @@
1
+ import { PretextPdfError } from '../../errors.js';
2
+ export async function generateQrSvg(el) {
3
+ let qrLib;
4
+ try {
5
+ qrLib = await import('qrcode');
6
+ }
7
+ catch {
8
+ throw new PretextPdfError('QR_DEP_MISSING', 'qr-code elements require the qrcode package. Install it: npm install qrcode');
9
+ }
10
+ try {
11
+ return await qrLib.toString(el.data, {
12
+ type: 'svg',
13
+ errorCorrectionLevel: el.errorCorrectionLevel ?? 'M',
14
+ margin: el.margin ?? 4,
15
+ color: {
16
+ dark: el.foreground ?? '#000000',
17
+ light: el.background ?? '#ffffff',
18
+ },
19
+ });
20
+ }
21
+ catch (err) {
22
+ throw new PretextPdfError('QR_GENERATE_FAILED', `QR code generation failed: ${err instanceof Error ? err.message : String(err)}`);
23
+ }
24
+ }
25
+ //# sourceMappingURL=qr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.js","sourceRoot":"","sources":["../../../src/assets/generators/qr.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAiB;IAEnD,IAAI,KAAmB,CAAA;IACvB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,MAAM,CAAC,QAAkB,CAAiB,CAAA;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,eAAe,CACvB,gBAAgB,EAChB,6EAA6E,CAC9E,CAAA;IACH,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;YACnC,IAAI,EAAE,KAAK;YACX,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,IAAI,GAAG;YACpD,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC;YACtB,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,SAAS;gBAChC,KAAK,EAAE,EAAE,CAAC,UAAU,IAAI,SAAS;aAClC;SACF,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,oBAAoB,EACpB,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACjF,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Internal barrel for the assets module — created in v1.6.0 commit 15/16.
3
+ *
4
+ * Aggregates every public symbol that was previously exported from
5
+ * src/assets.ts. src/assets.ts now re-exports this barrel as a one-line
6
+ * back-compat shim so the compiled dist/assets.js retains the same
7
+ * surface (fonts.ts, post-process.ts, pipeline.ts, plus direct test
8
+ * imports for security-ssrf, security-ipv4-bypass, assets-dns-dedup,
9
+ * svg-sanitizer all keep working unchanged).
10
+ */
11
+ export { redactPath } from './util/redact-path.js';
12
+ export { assertPathAllowed } from './security/path-allowlist.js';
13
+ export { normalizeIpv4Hostname } from './security/ipv4-normalize.js';
14
+ export { resolveAndValidateUrl, assertSafeUrl, type ResolvedSafeUrl, } from './security/url-validation.js';
15
+ export { fetchWithTimeout } from './security/fetch.js';
16
+ export { sanitizeSvg } from './svg/sanitize.js';
17
+ export { VECTOR_RASTER_CONCURRENCY } from './loaders/vectors.js';
18
+ export { loadImages } from './loaders/orchestrator.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,KAAK,eAAe,GACrB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Internal barrel for the assets module — created in v1.6.0 commit 15/16.
3
+ *
4
+ * Aggregates every public symbol that was previously exported from
5
+ * src/assets.ts. src/assets.ts now re-exports this barrel as a one-line
6
+ * back-compat shim so the compiled dist/assets.js retains the same
7
+ * surface (fonts.ts, post-process.ts, pipeline.ts, plus direct test
8
+ * imports for security-ssrf, security-ipv4-bypass, assets-dns-dedup,
9
+ * svg-sanitizer all keep working unchanged).
10
+ */
11
+ export { redactPath } from './util/redact-path.js';
12
+ export { assertPathAllowed } from './security/path-allowlist.js';
13
+ export { normalizeIpv4Hostname } from './security/ipv4-normalize.js';
14
+ export { resolveAndValidateUrl, assertSafeUrl, } from './security/url-validation.js';
15
+ export { fetchWithTimeout } from './security/fetch.js';
16
+ export { sanitizeSvg } from './svg/sanitize.js';
17
+ export { VECTOR_RASTER_CONCURRENCY } from './loaders/vectors.js';
18
+ export { loadImages } from './loaders/orchestrator.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EACL,qBAAqB,EACrB,aAAa,GAEd,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Image loaders — extracted from src/assets.ts in v1.6.0 commit 13/16.
3
+ *
4
+ * Two pieces:
5
+ * - loadImageBytes(): fetch/read raw bytes from URL, file path, or Uint8Array.
6
+ * Used by the loadImages() orchestrator (still in assets.ts for this commit).
7
+ * - resolveImageFormat(): pick 'png' vs 'jpg' from the element spec, magic
8
+ * bytes, or file extension. Pure compute.
9
+ *
10
+ * Dynamic fs/path imports preserved.
11
+ */
12
+ import type { ImageElement } from '../../types.js';
13
+ /**
14
+ * Resolve the image format from the element spec, magic bytes, or file extension.
15
+ * Priority: explicit 'png'/'jpg' → magic bytes → file extension → error.
16
+ */
17
+ export declare function resolveImageFormat(el: ImageElement, bytes: Uint8Array, key: string): 'png' | 'jpg';
18
+ /** Load image bytes from a URL, file path, or Uint8Array */
19
+ export declare function loadImageBytes(el: ImageElement, key: string, allowedDirs?: string[]): Promise<Uint8Array>;
20
+ //# sourceMappingURL=images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../../src/assets/loaders/images.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAMlD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAiBlG;AAED,4DAA4D;AAC5D,wBAAsB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAuD/G"}
@@ -0,0 +1,69 @@
1
+ import { PretextPdfError } from '../../errors.js';
2
+ import { redactPath } from '../util/redact-path.js';
3
+ import { assertPathAllowed } from '../security/path-allowlist.js';
4
+ import { fetchWithTimeout } from '../security/fetch.js';
5
+ /**
6
+ * Resolve the image format from the element spec, magic bytes, or file extension.
7
+ * Priority: explicit 'png'/'jpg' → magic bytes → file extension → error.
8
+ */
9
+ export function resolveImageFormat(el, bytes, key) {
10
+ if (el.format === 'png')
11
+ return 'png';
12
+ if (el.format === 'jpg')
13
+ return 'jpg';
14
+ if (bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4E && bytes[3] === 0x47)
15
+ return 'png';
16
+ if (bytes[0] === 0xFF && bytes[1] === 0xD8 && bytes[2] === 0xFF)
17
+ return 'jpg';
18
+ if (typeof el.src === 'string') {
19
+ const ext = el.src.toLowerCase().split('.').pop();
20
+ if (ext === 'png')
21
+ return 'png';
22
+ if (ext === 'jpg' || ext === 'jpeg')
23
+ return 'jpg';
24
+ }
25
+ throw new PretextPdfError('IMAGE_FORMAT_MISMATCH', `Image "${key}": format could not be auto-detected. Specify format: 'png' or 'jpg' explicitly.`);
26
+ }
27
+ /** Load image bytes from a URL, file path, or Uint8Array */
28
+ export async function loadImageBytes(el, key, allowedDirs) {
29
+ if (el.src instanceof Uint8Array) {
30
+ return el.src;
31
+ }
32
+ const src = el.src;
33
+ if (!src || typeof src !== 'string') {
34
+ throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": 'src' must be a non-empty string path, URL, or Uint8Array`);
35
+ }
36
+ if (src.startsWith('https://') || src.startsWith('http://')) {
37
+ // SSRF validation happens inside fetchWithTimeout — no need to pre-validate
38
+ let resp;
39
+ try {
40
+ resp = await fetchWithTimeout(src, 'IMAGE_LOAD_FAILED', `Image "${key}"`);
41
+ }
42
+ catch (err) {
43
+ throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": failed to fetch URL: ${err instanceof Error ? err.message : String(err)}`);
44
+ }
45
+ if (!resp.ok) {
46
+ throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": URL returned HTTP ${resp.status}`);
47
+ }
48
+ try {
49
+ return new Uint8Array(await resp.arrayBuffer());
50
+ }
51
+ catch (err) {
52
+ throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": failed to read response body: ${err instanceof Error ? err.message : String(err)}`);
53
+ }
54
+ }
55
+ const fs = await import('fs');
56
+ const pathMod = await import('path');
57
+ const filePath = pathMod.resolve(src);
58
+ assertPathAllowed(filePath, allowedDirs, `Image "${key}"`);
59
+ if (!fs.existsSync(filePath)) {
60
+ throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": file not found — "${redactPath(src)}". Check the path in the image element's 'src' field.`);
61
+ }
62
+ try {
63
+ return new Uint8Array(fs.readFileSync(filePath));
64
+ }
65
+ catch (err) {
66
+ throw new PretextPdfError('IMAGE_LOAD_FAILED', `Image "${key}": failed to read file "${redactPath(src)}": ${err instanceof Error ? err.message : String(err)}`);
67
+ }
68
+ }
69
+ //# sourceMappingURL=images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.js","sourceRoot":"","sources":["../../../src/assets/loaders/images.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAgB,EAAE,KAAiB,EAAE,GAAW;IACjF,IAAI,EAAE,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IACrC,IAAI,EAAE,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAErC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAClG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAE7E,IAAI,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;QACjD,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,KAAK,CAAA;QAC/B,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,KAAK,CAAA;IACnD,CAAC;IAED,MAAM,IAAI,eAAe,CACvB,uBAAuB,EACvB,UAAU,GAAG,kFAAkF,CAChG,CAAA;AACH,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAgB,EAAE,GAAW,EAAE,WAAsB;IACxF,IAAI,EAAE,CAAC,GAAG,YAAY,UAAU,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC,GAAG,CAAA;IACf,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;IAElB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,UAAU,GAAG,8DAA8D,CAAC,CAAA;IAC7H,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,4EAA4E;QAC5E,IAAI,IAAc,CAAA;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,EAAE,UAAU,GAAG,GAAG,CAAC,CAAA;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,eAAe,CACvB,mBAAmB,EACnB,UAAU,GAAG,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC3F,CAAA;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,eAAe,CAAC,mBAAmB,EAAE,UAAU,GAAG,wBAAwB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACpG,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,eAAe,CACvB,mBAAmB,EACnB,UAAU,GAAG,oCAAoC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACpG,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACrC,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,GAAG,GAAG,CAAC,CAAA;IAE1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,eAAe,CACvB,mBAAmB,EACnB,UAAU,GAAG,wBAAwB,UAAU,CAAC,GAAG,CAAC,uDAAuD,CAC5G,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,mBAAmB,EACnB,UAAU,GAAG,2BAA2B,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAChH,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Image-loading orchestrator — extracted from src/assets.ts in v1.6.0 commit 15/16.
3
+ *
4
+ * Stage 2b of the render pipeline: loads + embeds every ImageElement,
5
+ * float-group image, vector asset (SVG / QR / barcode / chart), plugin
6
+ * asset, and watermark image into a single ImageMap that the layout
7
+ * engine consumes.
8
+ *
9
+ * Image keys are 'img-N' / 'float-group-N' / 'watermark' / per-vector keys
10
+ * assigned inside loadVectorAssets / plugin-supplied keys.
11
+ *
12
+ * IMPORTANT: @cantoo/pdf-lib image embedding is NOT thread-safe. Raw bytes
13
+ * load in parallel; embed calls run sequentially.
14
+ *
15
+ * Images that fail to load (network error, file not found, unreachable URL)
16
+ * are routed through doc.onImageLoadError (default = warn-and-skip) so a
17
+ * single broken image does not crash the document.
18
+ */
19
+ import { PDFDocument } from '@cantoo/pdf-lib';
20
+ import type { PdfDocument, Logger } from '../../types.js';
21
+ import type { ImageMap } from '../../types-internal.js';
22
+ import type { PluginDefinition } from '../../plugin-types.js';
23
+ export declare function loadImages(doc: PdfDocument, pdfDoc: PDFDocument, contentWidth: number, plugins?: PluginDefinition[], logger?: Logger): Promise<ImageMap>;
24
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/assets/loaders/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAM7D,wBAAsB,UAAU,CAC9B,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,gBAAgB,EAAE,EAC5B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,CAAC,CAuFnB"}