@laminapdf/sdk 0.2.0-alpha.2 → 0.2.0-alpha.4

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 (454) hide show
  1. package/README.md +63 -8
  2. package/dist/api.d.ts +8 -3
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +4 -2
  5. package/dist/api.js.map +1 -1
  6. package/dist/builder.d.ts +43 -22
  7. package/dist/builder.d.ts.map +1 -1
  8. package/dist/builder.js +122 -83
  9. package/dist/builder.js.map +1 -1
  10. package/dist/document.d.ts +89 -22
  11. package/dist/document.d.ts.map +1 -1
  12. package/dist/document.js +177 -67
  13. package/dist/document.js.map +1 -1
  14. package/dist/errors.d.ts +5 -5
  15. package/dist/errors.d.ts.map +1 -1
  16. package/dist/errors.js +10 -16
  17. package/dist/errors.js.map +1 -1
  18. package/dist/extract-job.d.ts +100 -0
  19. package/dist/extract-job.d.ts.map +1 -0
  20. package/dist/extract-job.js +177 -0
  21. package/dist/extract-job.js.map +1 -0
  22. package/dist/extract.d.ts +57 -0
  23. package/dist/extract.d.ts.map +1 -0
  24. package/dist/extract.js +5 -0
  25. package/dist/extract.js.map +1 -0
  26. package/dist/font.d.ts +13 -6
  27. package/dist/font.d.ts.map +1 -1
  28. package/dist/font.js +50 -20
  29. package/dist/font.js.map +1 -1
  30. package/dist/generated/builder-enums.d.ts +3 -3
  31. package/dist/generated/builder-enums.d.ts.map +1 -1
  32. package/dist/generated/builder-enums.js +10 -0
  33. package/dist/generated/builder-enums.js.map +1 -1
  34. package/dist/generated/codes.d.ts +18 -6
  35. package/dist/generated/codes.d.ts.map +1 -1
  36. package/dist/generated/codes.js +114 -5
  37. package/dist/generated/codes.js.map +1 -1
  38. package/dist/generated/explain.d.ts.map +1 -1
  39. package/dist/generated/explain.js +45 -11
  40. package/dist/generated/explain.js.map +1 -1
  41. package/dist/generated/extract.d.ts +282 -0
  42. package/dist/generated/extract.d.ts.map +1 -0
  43. package/dist/generated/extract.js +4 -0
  44. package/dist/generated/extract.js.map +1 -0
  45. package/dist/init.d.ts +13 -5
  46. package/dist/init.d.ts.map +1 -1
  47. package/dist/init.js +23 -11
  48. package/dist/init.js.map +1 -1
  49. package/dist/internal/handle.d.ts +58 -0
  50. package/dist/internal/handle.d.ts.map +1 -0
  51. package/dist/internal/handle.js +113 -0
  52. package/dist/internal/handle.js.map +1 -0
  53. package/dist/internal/instance.d.ts +56 -0
  54. package/dist/internal/instance.d.ts.map +1 -0
  55. package/dist/internal/instance.js +125 -0
  56. package/dist/internal/instance.js.map +1 -0
  57. package/dist/source/http.d.ts +1 -1
  58. package/dist/source/http.js +2 -2
  59. package/dist/source/http.js.map +1 -1
  60. package/dist/source/range.d.ts +6 -1
  61. package/dist/source/range.d.ts.map +1 -1
  62. package/dist/source/range.js +10 -6
  63. package/dist/source/range.js.map +1 -1
  64. package/dist/text.d.ts +3 -3
  65. package/dist/text.d.ts.map +1 -1
  66. package/dist/text.js +3 -3
  67. package/dist/text.js.map +1 -1
  68. package/dist/types.d.ts +19 -1
  69. package/dist/types.d.ts.map +1 -1
  70. package/dist/version.d.ts +1 -1
  71. package/dist/version.js +2 -2
  72. package/dist/version.js.map +1 -1
  73. package/dist/worker/client.d.ts +3 -2
  74. package/dist/worker/client.d.ts.map +1 -1
  75. package/dist/worker/client.js +6 -4
  76. package/dist/worker/client.js.map +1 -1
  77. package/dist/worker/entry.js +1 -1
  78. package/dist/worker/entry.js.map +1 -1
  79. package/dist/worker/server.d.ts.map +1 -1
  80. package/dist/worker/server.js +42 -9
  81. package/dist/worker/server.js.map +1 -1
  82. package/dist/worker/support.d.ts +13 -3
  83. package/dist/worker/support.d.ts.map +1 -1
  84. package/dist/worker/support.js +5 -0
  85. package/dist/worker/support.js.map +1 -1
  86. package/dist/worker/types.d.ts +8 -1
  87. package/dist/worker/types.d.ts.map +1 -1
  88. package/docs/AGENTS.md +14 -0
  89. package/docs/api/README.md +166 -0
  90. package/docs/api/classes/Builder.md +467 -0
  91. package/docs/api/classes/Document.md +854 -0
  92. package/docs/api/classes/ExtractJob.md +236 -0
  93. package/docs/api/classes/Font.md +74 -0
  94. package/docs/api/classes/Image.md +140 -0
  95. package/docs/api/classes/LaminaPdfError.md +189 -0
  96. package/docs/api/classes/Page.md +178 -0
  97. package/docs/api/classes/PageRef.md +253 -0
  98. package/docs/api/classes/PageText.md +129 -0
  99. package/docs/api/classes/PageTextRun.md +167 -0
  100. package/docs/api/classes/PendingPath.md +97 -0
  101. package/docs/api/classes/SaveJob.md +205 -0
  102. package/docs/api/classes/Surface.md +331 -0
  103. package/docs/api/classes/Transaction.md +111 -0
  104. package/docs/api/functions/callbackSource.md +33 -0
  105. package/docs/api/functions/extractWithModels.md +70 -0
  106. package/docs/api/functions/httpRangeSource.md +48 -0
  107. package/docs/api/functions/init.md +36 -0
  108. package/docs/api/functions/isExtractLoaded.md +21 -0
  109. package/docs/api/functions/isInitialized.md +19 -0
  110. package/docs/api/functions/isLaminaPdfError.md +41 -0
  111. package/docs/api/functions/isTextLoaded.md +19 -0
  112. package/docs/api/functions/loadExtract.md +28 -0
  113. package/docs/api/functions/loadText.md +28 -0
  114. package/docs/api/functions/onLeak.md +29 -0
  115. package/docs/api/functions/reset.md +22 -0
  116. package/docs/api/functions/wasmMemory.md +22 -0
  117. package/docs/api/interfaces/BuilderOptions.md +108 -0
  118. package/docs/api/interfaces/ByteRange.md +29 -0
  119. package/docs/api/interfaces/ChunkOptions.md +37 -0
  120. package/docs/api/interfaces/Diagnostic.md +67 -0
  121. package/docs/api/interfaces/ExtractOptions.md +92 -0
  122. package/docs/api/interfaces/ExtractResult.md +37 -0
  123. package/docs/api/interfaces/FontInfo.md +37 -0
  124. package/docs/api/interfaces/HostModels.md +57 -0
  125. package/docs/api/interfaces/HttpRangeOptions.md +78 -0
  126. package/docs/api/interfaces/InitOptions.md +40 -0
  127. package/docs/api/interfaces/LayoutRegion.md +38 -0
  128. package/docs/api/interfaces/Leak.md +21 -0
  129. package/docs/api/interfaces/Location.md +53 -0
  130. package/docs/api/interfaces/ModelInfo.md +45 -0
  131. package/docs/api/interfaces/ModelRequest.md +45 -0
  132. package/docs/api/interfaces/Models.md +45 -0
  133. package/docs/api/interfaces/OcrWord.md +37 -0
  134. package/docs/api/interfaces/OpLog.md +25 -0
  135. package/docs/api/interfaces/OpenOptions.md +37 -0
  136. package/docs/api/interfaces/PageTextOptions.md +21 -0
  137. package/docs/api/interfaces/PathBuilder.md +195 -0
  138. package/docs/api/interfaces/QuadPoint.md +25 -0
  139. package/docs/api/interfaces/RangeOptions.md +54 -0
  140. package/docs/api/interfaces/RangeSource.md +59 -0
  141. package/docs/api/interfaces/StrokeStyle.md +61 -0
  142. package/docs/api/interfaces/TagSpec.md +69 -0
  143. package/docs/api/interfaces/TextBoxOptions.md +93 -0
  144. package/docs/api/interfaces/TextGlyph.md +29 -0
  145. package/docs/api/interfaces/TextOptions.md +101 -0
  146. package/docs/api/interfaces/WasmMemory.md +37 -0
  147. package/docs/api/type-aliases/AfRelationship.md +15 -0
  148. package/docs/api/type-aliases/Align.md +15 -0
  149. package/docs/api/type-aliases/ArtifactKind.md +15 -0
  150. package/docs/api/type-aliases/AttachmentOptions.md +15 -0
  151. package/docs/api/type-aliases/BlendMode.md +15 -0
  152. package/docs/api/type-aliases/BoxRect.md +15 -0
  153. package/docs/api/type-aliases/BuildOptions.md +15 -0
  154. package/docs/api/type-aliases/Cell.md +71 -0
  155. package/docs/api/type-aliases/Chunk.md +79 -0
  156. package/docs/api/type-aliases/Color.md +16 -0
  157. package/docs/api/type-aliases/Coordinates.md +55 -0
  158. package/docs/api/type-aliases/Direction.md +15 -0
  159. package/docs/api/type-aliases/DocumentInfo.md +15 -0
  160. package/docs/api/type-aliases/DropReason.md +15 -0
  161. package/docs/api/type-aliases/Dropped.md +59 -0
  162. package/docs/api/type-aliases/Edited.md +15 -0
  163. package/docs/api/type-aliases/ErrorCode.md +15 -0
  164. package/docs/api/type-aliases/ErrorKind.md +15 -0
  165. package/docs/api/type-aliases/ExtractFormat.md +15 -0
  166. package/docs/api/type-aliases/ExtractJobOptions.md +31 -0
  167. package/docs/api/type-aliases/ExtractStep.md +61 -0
  168. package/docs/api/type-aliases/ExtractedBlock.md +94 -0
  169. package/docs/api/type-aliases/ExtractedPage.md +73 -0
  170. package/docs/api/type-aliases/ExtractedSource.md +48 -0
  171. package/docs/api/type-aliases/Extraction.md +22 -0
  172. package/docs/api/type-aliases/FillRule.md +15 -0
  173. package/docs/api/type-aliases/Fit.md +15 -0
  174. package/docs/api/type-aliases/Flags.md +15 -0
  175. package/docs/api/type-aliases/Generator.md +43 -0
  176. package/docs/api/type-aliases/GlyphQuad.md +15 -0
  177. package/docs/api/type-aliases/InfoPatch.md +15 -0
  178. package/docs/api/type-aliases/LaminaPdfWarning.md +16 -0
  179. package/docs/api/type-aliases/LimitName.md +15 -0
  180. package/docs/api/type-aliases/Limits.md +15 -0
  181. package/docs/api/type-aliases/LineBox.md +15 -0
  182. package/docs/api/type-aliases/LineCap.md +15 -0
  183. package/docs/api/type-aliases/LineJoin.md +15 -0
  184. package/docs/api/type-aliases/LinkTarget.md +15 -0
  185. package/docs/api/type-aliases/Metadata.md +15 -0
  186. package/docs/api/type-aliases/ModelResult.md +15 -0
  187. package/docs/api/type-aliases/Op.md +15 -0
  188. package/docs/api/type-aliases/OutlineEntry.md +15 -0
  189. package/docs/api/type-aliases/OutlineNode.md +15 -0
  190. package/docs/api/type-aliases/Overflow.md +15 -0
  191. package/docs/api/type-aliases/PageInfo.md +15 -0
  192. package/docs/api/type-aliases/PageLabel.md +15 -0
  193. package/docs/api/type-aliases/PageSizeName.md +15 -0
  194. package/docs/api/type-aliases/Point.md +15 -0
  195. package/docs/api/type-aliases/Profile.md +15 -0
  196. package/docs/api/type-aliases/Progress.md +15 -0
  197. package/docs/api/type-aliases/ReadingOrder.md +15 -0
  198. package/docs/api/type-aliases/Rect.md +15 -0
  199. package/docs/api/type-aliases/Region.md +31 -0
  200. package/docs/api/type-aliases/RegionLabel.md +15 -0
  201. package/docs/api/type-aliases/RenderMode.md +15 -0
  202. package/docs/api/type-aliases/Rotation.md +15 -0
  203. package/docs/api/type-aliases/SaveOptions.md +15 -0
  204. package/docs/api/type-aliases/SaveReport.md +15 -0
  205. package/docs/api/type-aliases/Span.md +74 -0
  206. package/docs/api/type-aliases/SplitOn.md +15 -0
  207. package/docs/api/type-aliases/Standard14.md +15 -0
  208. package/docs/api/type-aliases/StructRef.md +41 -0
  209. package/docs/api/type-aliases/StructSource.md +17 -0
  210. package/docs/api/type-aliases/StructureKid.md +15 -0
  211. package/docs/api/type-aliases/StructureNode.md +16 -0
  212. package/docs/api/type-aliases/TableDetector.md +15 -0
  213. package/docs/api/type-aliases/TableMode.md +15 -0
  214. package/docs/api/type-aliases/TableScope.md +15 -0
  215. package/docs/api/type-aliases/Tag.md +15 -0
  216. package/docs/api/type-aliases/TagName.md +15 -0
  217. package/docs/api/type-aliases/Target.md +15 -0
  218. package/docs/api/type-aliases/TargetView.md +18 -0
  219. package/docs/api/type-aliases/TextLayer.md +72 -0
  220. package/docs/api/type-aliases/TextLayerStatus.md +15 -0
  221. package/docs/api/type-aliases/TextLayout.md +15 -0
  222. package/docs/api/type-aliases/TextRange.md +33 -0
  223. package/docs/api/type-aliases/TextRunInfo.md +15 -0
  224. package/docs/api/type-aliases/Transform.md +15 -0
  225. package/docs/api/type-aliases/UndoOutcome.md +15 -0
  226. package/docs/api/type-aliases/ViewerPreferences.md +15 -0
  227. package/docs/api/type-aliases/WarningCode.md +15 -0
  228. package/docs/api/type-aliases/WasmSource.md +16 -0
  229. package/docs/api/variables/Matrix.md +99 -0
  230. package/docs/api/variables/PAGE_SIZES.md +15 -0
  231. package/docs/api/variables/TAG_NAMES.md +15 -0
  232. package/docs/errors/README.md +173 -0
  233. package/docs/errors/aes-padding-invalid.md +34 -0
  234. package/docs/errors/already-initialized.md +34 -0
  235. package/docs/errors/binary-output-to-terminal.md +35 -0
  236. package/docs/errors/builder-finished.md +35 -0
  237. package/docs/errors/cancelled.md +35 -0
  238. package/docs/errors/cmap-invalid.md +42 -0
  239. package/docs/errors/collection-index.md +33 -0
  240. package/docs/errors/color-components.md +33 -0
  241. package/docs/errors/content-bad-operands.md +36 -0
  242. package/docs/errors/content-path-unpainted.md +36 -0
  243. package/docs/errors/content-resource-missing.md +37 -0
  244. package/docs/errors/content-syntax.md +36 -0
  245. package/docs/errors/content-unbalanced-bt.md +36 -0
  246. package/docs/errors/content-unbalanced-marked.md +36 -0
  247. package/docs/errors/content-unbalanced-q.md +36 -0
  248. package/docs/errors/content-unknown-operator.md +37 -0
  249. package/docs/errors/covered-text.md +33 -0
  250. package/docs/errors/data-pending.md +34 -0
  251. package/docs/errors/decompress.md +34 -0
  252. package/docs/errors/device-color-without-output-intent.md +33 -0
  253. package/docs/errors/direct-page.md +34 -0
  254. package/docs/errors/disposed.md +34 -0
  255. package/docs/errors/document-changed.md +34 -0
  256. package/docs/errors/embedded-file-forbidden.md +35 -0
  257. package/docs/errors/embedded-file-without-mime-type.md +36 -0
  258. package/docs/errors/encoding-full.md +34 -0
  259. package/docs/errors/encrypted-base.md +33 -0
  260. package/docs/errors/extract-column-order-uncertain.md +38 -0
  261. package/docs/errors/extract-limit-blocks.md +35 -0
  262. package/docs/errors/extract-module-not-loaded.md +37 -0
  263. package/docs/errors/extract-needs-ocr.md +37 -0
  264. package/docs/errors/extract-reading-order-ambiguous.md +32 -0
  265. package/docs/errors/extract-struct-tree-ignored.md +32 -0
  266. package/docs/errors/extract-table-ambiguous.md +32 -0
  267. package/docs/errors/extract-table-limit.md +35 -0
  268. package/docs/errors/extract-untagged-content.md +32 -0
  269. package/docs/errors/fetch-failed.md +34 -0
  270. package/docs/errors/flate-truncated.md +34 -0
  271. package/docs/errors/flow-content-too-large.md +34 -0
  272. package/docs/errors/flow-keep-broken.md +34 -0
  273. package/docs/errors/flow-layout-unstable.md +38 -0
  274. package/docs/errors/font-invalid.md +36 -0
  275. package/docs/errors/font-mismatch.md +34 -0
  276. package/docs/errors/font-not-embeddable.md +34 -0
  277. package/docs/errors/font-not-embedded.md +35 -0
  278. package/docs/errors/font-not-shapable.md +33 -0
  279. package/docs/errors/glyph-out-of-range.md +34 -0
  280. package/docs/errors/glyph-without-unicode.md +37 -0
  281. package/docs/errors/heading-level-skipped.md +36 -0
  282. package/docs/errors/image-data-length.md +33 -0
  283. package/docs/errors/image-too-large.md +32 -0
  284. package/docs/errors/inline-image-unterminated.md +36 -0
  285. package/docs/errors/input-unreadable.md +37 -0
  286. package/docs/errors/instance-reset.md +34 -0
  287. package/docs/errors/invalid-argument.md +33 -0
  288. package/docs/errors/invalid-axis-value.md +32 -0
  289. package/docs/errors/invalid-box.md +34 -0
  290. package/docs/errors/invalid-color.md +32 -0
  291. package/docs/errors/invalid-command-line.md +44 -0
  292. package/docs/errors/invalid-date.md +34 -0
  293. package/docs/errors/invalid-entry.md +34 -0
  294. package/docs/errors/invalid-feature.md +32 -0
  295. package/docs/errors/invalid-font.md +32 -0
  296. package/docs/errors/invalid-geometry.md +32 -0
  297. package/docs/errors/invalid-icc-profile.md +32 -0
  298. package/docs/errors/invalid-image.md +33 -0
  299. package/docs/errors/invalid-op-log.md +33 -0
  300. package/docs/errors/invalid-page-label.md +34 -0
  301. package/docs/errors/invalid-page-labels.md +32 -0
  302. package/docs/errors/invalid-page-range.md +37 -0
  303. package/docs/errors/invalid-rotate.md +34 -0
  304. package/docs/errors/invalid-spans.md +39 -0
  305. package/docs/errors/invalid-structure-nesting.md +38 -0
  306. package/docs/errors/invalid-structure.md +34 -0
  307. package/docs/errors/invalid-text-range.md +33 -0
  308. package/docs/errors/job-finished.md +34 -0
  309. package/docs/errors/limit-exceeded.md +38 -0
  310. package/docs/errors/link-without-contents.md +33 -0
  311. package/docs/errors/link-without-structure.md +37 -0
  312. package/docs/errors/markdown-html-ignored.md +33 -0
  313. package/docs/errors/markdown-image-missing.md +34 -0
  314. package/docs/errors/missing-alt-text.md +33 -0
  315. package/docs/errors/missing-glyph.md +33 -0
  316. package/docs/errors/missing-header.md +37 -0
  317. package/docs/errors/missing-lang.md +32 -0
  318. package/docs/errors/missing-root.md +34 -0
  319. package/docs/errors/missing-title.md +32 -0
  320. package/docs/errors/model-failed.md +33 -0
  321. package/docs/errors/model-needs-host.md +40 -0
  322. package/docs/errors/model-result-unexpected.md +36 -0
  323. package/docs/errors/name-tree-node-skipped.md +34 -0
  324. package/docs/errors/nested-transaction.md +34 -0
  325. package/docs/errors/no-pending-save.md +32 -0
  326. package/docs/errors/no-transaction.md +33 -0
  327. package/docs/errors/not-initialized.md +35 -0
  328. package/docs/errors/not-pdf.md +33 -0
  329. package/docs/errors/not-rebased.md +35 -0
  330. package/docs/errors/object-number-out-of-range.md +38 -0
  331. package/docs/errors/objstm-index-mismatch.md +36 -0
  332. package/docs/errors/out-of-memory.md +38 -0
  333. package/docs/errors/outline-cycle.md +34 -0
  334. package/docs/errors/outline-item-skipped.md +34 -0
  335. package/docs/errors/output-unwritable.md +37 -0
  336. package/docs/errors/overwrite-refused.md +36 -0
  337. package/docs/errors/page-count-mismatch.md +34 -0
  338. package/docs/errors/page-index-out-of-range.md +34 -0
  339. package/docs/errors/page-tree-node-skipped.md +35 -0
  340. package/docs/errors/password-required.md +36 -0
  341. package/docs/errors/path-outside-roots.md +32 -0
  342. package/docs/errors/perms-mismatch.md +34 -0
  343. package/docs/errors/profile-version-conflict.md +35 -0
  344. package/docs/errors/redaction-not-applied.md +32 -0
  345. package/docs/errors/reference-cycle.md +35 -0
  346. package/docs/errors/render-backend-unavailable.md +32 -0
  347. package/docs/errors/render-failed.md +33 -0
  348. package/docs/errors/render-too-large.md +36 -0
  349. package/docs/errors/repaired-base.md +34 -0
  350. package/docs/errors/requires-rewrite.md +38 -0
  351. package/docs/errors/revision-index-out-of-range.md +34 -0
  352. package/docs/errors/saved-not-rebased.md +34 -0
  353. package/docs/errors/sink-not-empty.md +33 -0
  354. package/docs/errors/sink.md +31 -0
  355. package/docs/errors/source-budget-exceeded.md +34 -0
  356. package/docs/errors/source-changed.md +33 -0
  357. package/docs/errors/source.md +30 -0
  358. package/docs/errors/stale-generation.md +34 -0
  359. package/docs/errors/stream-length-recovered.md +37 -0
  360. package/docs/errors/strict.md +34 -0
  361. package/docs/errors/subset-failed.md +31 -0
  362. package/docs/errors/syntax.md +34 -0
  363. package/docs/errors/tag-element-not-open.md +41 -0
  364. package/docs/errors/tag-element-unclosed.md +34 -0
  365. package/docs/errors/text-in-earlier-revision.md +36 -0
  366. package/docs/errors/text-module-not-loaded.md +36 -0
  367. package/docs/errors/text-overflow.md +34 -0
  368. package/docs/errors/tounicode-conflict.md +32 -0
  369. package/docs/errors/type.md +34 -0
  370. package/docs/errors/unexpected-eof.md +34 -0
  371. package/docs/errors/unknown-axis.md +33 -0
  372. package/docs/errors/unknown-code.md +36 -0
  373. package/docs/errors/unknown-destination.md +33 -0
  374. package/docs/errors/unknown-font.md +33 -0
  375. package/docs/errors/unknown-option.md +33 -0
  376. package/docs/errors/unknown-page.md +34 -0
  377. package/docs/errors/unmapped-glyph.md +36 -0
  378. package/docs/errors/unnumbered-heading-misused.md +34 -0
  379. package/docs/errors/unset-object.md +30 -0
  380. package/docs/errors/unsupported-filter.md +34 -0
  381. package/docs/errors/unsupported-image.md +33 -0
  382. package/docs/errors/unsupported-layout-option.md +33 -0
  383. package/docs/errors/unsupported-security-handler.md +34 -0
  384. package/docs/errors/unsupported-version.md +32 -0
  385. package/docs/errors/untagged-content.md +35 -0
  386. package/docs/errors/warnings-truncated.md +35 -0
  387. package/docs/errors/wasm-trap.md +37 -0
  388. package/docs/errors/whole-font-rebuilt.md +30 -0
  389. package/docs/errors/worker-crashed.md +33 -0
  390. package/docs/errors/worker-failed.md +32 -0
  391. package/docs/errors/worker-version-mismatch.md +34 -0
  392. package/docs/errors/would-invalidate-signatures.md +38 -0
  393. package/docs/errors/wrong-document.md +33 -0
  394. package/docs/errors/wrong-password.md +34 -0
  395. package/docs/errors/xobject-cycle.md +36 -0
  396. package/docs/errors/xref-repaired.md +36 -0
  397. package/docs/errors/xrefstm-ignored.md +34 -0
  398. package/docs/llms.txt +94 -0
  399. package/docs/pages/concepts/dependencies.md +44 -0
  400. package/docs/pages/concepts/drawing-pages.md +76 -0
  401. package/docs/pages/concepts/errors-and-warnings.md +68 -0
  402. package/docs/pages/concepts/how-lamina-thinks.md +98 -0
  403. package/docs/pages/concepts/pages-and-coordinates.md +75 -0
  404. package/docs/pages/guides/accessible-pdfs.md +262 -0
  405. package/docs/pages/guides/archival-pdfs.md +433 -0
  406. package/docs/pages/guides/edit-a-pdf.md +143 -0
  407. package/docs/pages/guides/flowing-pages.md +379 -0
  408. package/docs/pages/guides/fonts-and-text.md +204 -0
  409. package/docs/pages/guides/images-and-vectors.md +221 -0
  410. package/docs/pages/guides/keep-the-page-responsive.md +85 -0
  411. package/docs/pages/guides/links-outlines-and-metadata.md +224 -0
  412. package/docs/pages/guides/open-large-files.md +69 -0
  413. package/docs/pages/guides/password-protected-files.md +70 -0
  414. package/docs/pages/guides/save-a-pdf.md +154 -0
  415. package/docs/pages/guides/test-generated-pdfs.md +324 -0
  416. package/docs/pages/guides/untrusted-files.md +82 -0
  417. package/docs/pages/index.md +33 -0
  418. package/docs/pages/install.md +79 -0
  419. package/docs/pages/quick-start/browser.md +71 -0
  420. package/docs/pages/quick-start/bun.md +64 -0
  421. package/docs/pages/quick-start/deno.md +62 -0
  422. package/docs/pages/quick-start/node.md +65 -0
  423. package/docs/pages/quick-start/rust.md +62 -0
  424. package/docs/pages/quick-start/workers.md +139 -0
  425. package/docs/pages/recipes/cloudflare-worker.md +115 -0
  426. package/docs/pages/recipes/element-flow.md +248 -0
  427. package/docs/pages/recipes/extract-markdown.md +152 -0
  428. package/docs/pages/recipes/generate-then-edit.md +142 -0
  429. package/docs/pages/recipes/hello.md +101 -0
  430. package/docs/pages/recipes/images-and-vectors.md +216 -0
  431. package/docs/pages/recipes/invoice.md +233 -0
  432. package/docs/pages/recipes/links-and-outlines.md +222 -0
  433. package/docs/pages/recipes/multilingual.md +196 -0
  434. package/docs/pages/recipes/open-untrusted.md +65 -0
  435. package/docs/pages/recipes/pdf-a-archive.md +212 -0
  436. package/docs/pages/recipes/pdf-a3-invoice-with-xml.md +229 -0
  437. package/docs/pages/recipes/pdf-ua-report.md +244 -0
  438. package/docs/pages/recipes/report.md +125 -0
  439. package/docs/pages/recipes/web-worker-client.md +64 -0
  440. package/docs/pages/recipes.md +48 -0
  441. package/docs/pages/reference/benchmarks.md +93 -0
  442. package/docs/pages/reference/changelog.md +134 -0
  443. package/docs/pages/reference/codes.md +14 -0
  444. package/docs/pages/reference/glossary.md +108 -0
  445. package/docs/pages/reference/rust.md +36 -0
  446. package/docs/pages/reference/stability.md +59 -0
  447. package/docs/pages/start/coding-agents.md +45 -0
  448. package/docs/pages/start/first-pdf.md +81 -0
  449. package/docs/pages/troubleshooting.md +74 -0
  450. package/docs/renames.json +86 -0
  451. package/docs/schemas/error.schema.json +322 -0
  452. package/docs/schemas/renames.schema.json +29 -0
  453. package/package.json +7 -3
  454. package/schemas/error.schema.json +37 -3
@@ -0,0 +1,282 @@
1
+ /** One cell of a table block. */
2
+ export type Cell = {
3
+ /** Its box in page space. */
4
+ bbox: [number, number, number, number];
5
+ /** The first column it covers, 0 at the left. */
6
+ col: number;
7
+ /** How many columns it covers. */
8
+ colSpan: number;
9
+ /** Whether it is in a header row. */
10
+ header: boolean;
11
+ /** The first row it covers, 0 at the top. */
12
+ row: number;
13
+ /** How many rows it covers. */
14
+ rowSpan: number;
15
+ /** Its visible text, lines joined by a space. */
16
+ text: string;
17
+ };
18
+ /** One chunk. */
19
+ export type Chunk = {
20
+ /** The blocks it holds, in order. */
21
+ blockIds: string[];
22
+ /** The headings above its first block, outermost first. */
23
+ headingPath: string[];
24
+ /** `c<n>`, from 0, in order. */
25
+ id: string;
26
+ /** The pages its blocks are on, ascending. */
27
+ pages: number[];
28
+ /** Its area on each of those pages. */
29
+ regions: Region[];
30
+ /** The Markdown from the first block's start to the last block's end. */
31
+ text: string;
32
+ /** Where `text` sits in the Markdown. */
33
+ textRange: TextRange;
34
+ /** [`tokens_approx`] of `text`. */
35
+ tokensApprox: number;
36
+ };
37
+ /** ADR 0027 §4's `coordinates` block: top-left points of the displayed box. */
38
+ export type Coordinates = {
39
+ /** `"CropBox"`, or `"default"` when the page had no usable box and US Letter was used. */
40
+ box: string;
41
+ /** Always `"top-left"`. */
42
+ origin: string;
43
+ /** The `/Rotate` applied, in degrees clockwise. */
44
+ rotate: number;
45
+ /** Always `"pt"`. */
46
+ unit: string;
47
+ /** The `/UserUnit` applied. */
48
+ userUnit: number;
49
+ };
50
+ /** Why text was left out. */
51
+ export type DropReason = "invisible" | "off-page" | "tiny" | "clipped" | "low-contrast" | "covered" | "artifact" | "running-header" | "running-footer" | "page-number";
52
+ /**
53
+ * Text left out of the output ([ADR 0030] §4). It records a count, never the text, so a log of
54
+ * the output can't leak what was hidden.
55
+ *
56
+ * [ADR 0030]: https://github.com/laudebugs/laminapdf/blob/main/docs/decisions/0030-extraction-output-and-model-plugins.md
57
+ */
58
+ export type Dropped = {
59
+ /** Where it was, in page space. */
60
+ bbox: [number, number, number, number];
61
+ /** How many characters were left out. */
62
+ chars: number;
63
+ /** The page index. */
64
+ page: number;
65
+ /** Why it was left out (the first reason when there are several). */
66
+ reason: DropReason;
67
+ /**
68
+ * The run itself, only when [`DropOptions::keep_spans`](crate::DropOptions::keep_spans)
69
+ * asked for it.
70
+ */
71
+ spans?: Span[];
72
+ };
73
+ /**
74
+ * One extracted page ([ADR 0027] §4).
75
+ *
76
+ * [ADR 0027]: https://github.com/laudebugs/laminapdf/blob/main/docs/decisions/0027-coordinates-units-and-page-indexing.md
77
+ */
78
+ export type ExtractedPage = {
79
+ /** The frame the boxes are in. */
80
+ coordinates: Coordinates;
81
+ /** The displayed height in points. */
82
+ height: number;
83
+ /** 0-based. */
84
+ index: number;
85
+ /** The page label (`/PageLabels`), when there is one. */
86
+ label?: string | null;
87
+ /** 1-based, as people count. */
88
+ number: number;
89
+ /** Whether the page's text is the page's text, and the measures that decided it. */
90
+ textLayer: TextLayer;
91
+ /** The displayed width in points (after `/Rotate` and `/UserUnit`). */
92
+ width: number;
93
+ };
94
+ /** The input, as ADR 0030 §1's `source` describes it. */
95
+ export type ExtractedSource = {
96
+ /** The document's page count. */
97
+ pageCount: number;
98
+ /**
99
+ * The input's SHA-256 in hex: filled by the caller that holds the bytes (the façade), since
100
+ * a windowed source can't be hashed without reading it whole.
101
+ */
102
+ sha256?: string | null;
103
+ /** Where the reading order came from. */
104
+ structSource: StructSource;
105
+ /** Whether the catalog's `/MarkInfo` says `/Marked true`. */
106
+ tagged: boolean;
107
+ };
108
+ /** Why a run would be hidden from a reader; empty for visible text. */
109
+ export type Flags = DropReason[];
110
+ /** Who made the extraction (ADR 0030 §1's `generator`). */
111
+ export type Generator = {
112
+ /** `"rules"`, or `"rules+models"` when a model plug-in was used. */
113
+ mode: string;
114
+ /** Each model used: name, version, weights' SHA-256 and licence. */
115
+ models: ModelInfo[];
116
+ name: string;
117
+ version: string;
118
+ };
119
+ /** A block and where its text sits in the Markdown. */
120
+ export type JsonBlock = {
121
+ /** The block's box in page space. */
122
+ bbox: [number, number, number, number];
123
+ /**
124
+ * The box divided by the page's width and height, clamped to [0, 1]; `None` when the
125
+ * block lies wholly outside the page.
126
+ */
127
+ bboxNorm?: [number, number, number, number] | null;
128
+ /** A table's cells, row by row; empty for every other block. */
129
+ cells?: Cell[];
130
+ /** In [0, 1]: 1 for structure from the tree, lower for structure inferred from layout. */
131
+ confidence: number;
132
+ /** For a table that goes on over the page break: the ID of the part on the next page. */
133
+ continuedBy?: string | null;
134
+ /** For a table that goes on from the page before: the ID of the part it continues. */
135
+ continues?: string | null;
136
+ /** `p<page index>-b<position in the page's reading order>`. */
137
+ id: string;
138
+ /** The page index. */
139
+ page: number;
140
+ /** The runs of text, in reading order. */
141
+ spans: Span[];
142
+ /** The structure types from the root down to the block; empty when untagged. */
143
+ structPath: string[];
144
+ /** The structure element the block comes from, when it comes from one. */
145
+ structRef?: StructRef | null;
146
+ /** The visible text, lines joined by a space after the text fixes (ADR 0030 §5). */
147
+ text: string;
148
+ textRange: TextRange;
149
+ } & ({
150
+ /** 1–6. */
151
+ level: number;
152
+ type: "heading";
153
+ } | {
154
+ type: "paragraph";
155
+ } | {
156
+ /** 0 for the outermost list. */
157
+ depth: number;
158
+ /** The bullet or number that starts it. */
159
+ marker: string;
160
+ type: "list-item";
161
+ } | {
162
+ type: "caption";
163
+ } | {
164
+ type: "footnote";
165
+ } | {
166
+ type: "other";
167
+ } | {
168
+ /** The grid's columns. */
169
+ cols: number;
170
+ /** What found it. */
171
+ detector: TableDetector;
172
+ /** The grid's rows. */
173
+ rows: number;
174
+ type: "table";
175
+ });
176
+ /** Which model made a result, as the output's `generator.models` records it. */
177
+ export type ModelInfo = {
178
+ /** The SPDX licence of its weights. */
179
+ licence: string;
180
+ /** Its name, e.g. `docling-layout-heron`. */
181
+ name: string;
182
+ /** The SHA-256 of its weights, in lowercase hex. */
183
+ sha256: string;
184
+ /** Its version or revision. */
185
+ version: string;
186
+ };
187
+ /** A chunk's area on one page. */
188
+ export type Region = {
189
+ /** The union of the chunk's blocks' boxes on that page, in page space. */
190
+ bbox: [number, number, number, number];
191
+ /** The page index. */
192
+ page: number;
193
+ };
194
+ /** One run of text in a block or a dropped entry. */
195
+ export type Span = {
196
+ /** The baseline's y in page space (ADR 0027 §5). */
197
+ baseline: number;
198
+ /** Its box in page space. */
199
+ bbox: [number, number, number, number];
200
+ /** Why the run would be hidden; empty for visible text. */
201
+ flags: Flags;
202
+ /** The font's `/BaseFont`. */
203
+ font: string;
204
+ /**
205
+ * The OCR engine's confidence, 0 to 1, when an engine read this text from the page image
206
+ * rather than the file's text layer ([ADR 0030] §6); absent for the text layer's runs.
207
+ *
208
+ * [ADR 0030]: https://github.com/laudebugs/laminapdf/blob/main/docs/decisions/0030-extraction-output-and-model-plugins.md
209
+ */
210
+ ocr?: number | null;
211
+ /** The glyph size in points. */
212
+ size: number;
213
+ /** The run's text. */
214
+ text: string;
215
+ };
216
+ /**
217
+ * A structure element ([ADR 0030] §1's `structRef`).
218
+ *
219
+ * [ADR 0030]: https://github.com/laudebugs/laminapdf/blob/main/docs/decisions/0030-extraction-output-and-model-plugins.md
220
+ */
221
+ export type StructRef = {
222
+ /** Its generation. */
223
+ gen: number;
224
+ /** The marked-content identifiers it covers on the page. */
225
+ mcids: number[];
226
+ /** The element's object number. */
227
+ obj: number;
228
+ };
229
+ /**
230
+ * Where the reading order came from ([ADR 0030] §2).
231
+ *
232
+ * [ADR 0030]: https://github.com/laudebugs/laminapdf/blob/main/docs/decisions/0030-extraction-output-and-model-plugins.md
233
+ */
234
+ export type StructSource = "tagged" | "xycut" | "content";
235
+ /** What found a table. */
236
+ export type TableDetector = "lattice" | "stream" | "tagged";
237
+ /**
238
+ * What a page's text layer is: whether its extracted text is the page's text, or the page
239
+ * needs OCR. The measures let a pipeline apply its own cut-offs.
240
+ */
241
+ export type TextLayer = {
242
+ /** Visible characters (spaces left out) in runs that aren't invisible, off the page or tiny. */
243
+ chars: number;
244
+ /** The share of the page the images cover, measured on a 32 × 32 grid. */
245
+ imageShare: number;
246
+ /** How many images the page draws, in its forms too. */
247
+ images: number;
248
+ /** Characters drawn invisibly (text rendering mode 3 or 7), such as an OCR layer. */
249
+ invisibleChars: number;
250
+ /** How many paths the page paints (fills and strokes). */
251
+ paths: number;
252
+ /** The verdict. */
253
+ status: TextLayerStatus;
254
+ /** The share of the visible runs' glyphs that map to no Unicode; 0 with no visible glyphs. */
255
+ unmappedShare: number;
256
+ };
257
+ /** A page's text-layer status, the first that applies. */
258
+ export type TextLayerStatus = "empty" | "ocr-layer" | "needs-ocr" | "mixed" | "native";
259
+ /**
260
+ * Where a piece of text sits in a rendering, in Unicode scalar values (`char`s), `start`
261
+ * inclusive and `end` exclusive. Code points, not bytes or UTF-16 units, so Python slices a
262
+ * rendering with them as they are; [`Rendered::slice`] does it in Rust.
263
+ */
264
+ export type TextRange = {
265
+ /** One past the last character. */
266
+ end: number;
267
+ /** The first character. */
268
+ start: number;
269
+ };
270
+ /** The whole document. */
271
+ export type Extraction = {
272
+ blocks: JsonBlock[];
273
+ chunks?: Chunk[] | null;
274
+ dropped: Dropped[];
275
+ generator: Generator;
276
+ pages: ExtractedPage[];
277
+ /** Always `"laminapdf.extract/1"`. */
278
+ schema: string;
279
+ source: ExtractedSource;
280
+ warnings: unknown[];
281
+ };
282
+ //# sourceMappingURL=extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/generated/extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ // @generated by cargo xtask gen boundary. DO NOT EDIT.
2
+ // From crates/laminapdf-extract/schemas/extract.schema.json.
3
+ export {};
4
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/generated/extract.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,6DAA6D"}
package/dist/init.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as baseGlue from "@laminapdf/wasm/base";
2
+ import { Instance } from "./internal/instance.js";
2
3
  /** The base module's wasm-bindgen glue. */
3
4
  export type BaseGlue = typeof baseGlue;
4
5
  /** The text module's wasm-bindgen glue (a superset of the base module's API). */
@@ -39,14 +40,14 @@ export declare function loadTextWith(locate: Locate, source?: WasmSource): Promi
39
40
  export declare function loadExtractWith(locate: Locate, source?: WasmSource): Promise<void>;
40
41
  /** `init` for an export condition's `locate`. */
41
42
  export declare function initWith(locate: Locate, input?: WasmSource | InitOptions): Promise<void>;
42
- /** The base module's glue. @throws {@link LaminaPdfError} `not-initialized` before `init()`. */
43
- export declare function baseModule(): BaseGlue;
43
+ /** The base module. @throws {@link LaminaPdfError} `not-initialized` before `init()`. */
44
+ export declare function baseModule(): Instance<BaseGlue>;
44
45
  /**
45
46
  * The module documents are opened in: the text module when loaded, else the extract module, else
46
47
  * the base one (each a superset of the base module's reading API; the first two extract text).
47
48
  * @throws {@link LaminaPdfError} `not-initialized` before `init()`.
48
49
  */
49
- export declare function readingModule(): BaseGlue;
50
+ export declare function readingModule(): Instance<BaseGlue>;
50
51
  /**
51
52
  * Whether documents opened or built from now on can extract text: the extract or the text module
52
53
  * is loaded. A document opened earlier stays in the module it was opened in; ask it with
@@ -55,8 +56,8 @@ export declare function readingModule(): BaseGlue;
55
56
  export declare function isExtractLoaded(): boolean;
56
57
  /** Whether `doc` lives in a module that extracts text (the extract or the text module). */
57
58
  export declare function extractsText(doc: object): boolean;
58
- /** The text module's glue, when loaded. */
59
- export declare function textModule(): TextGlue | undefined;
59
+ /** The text module, when loaded. */
60
+ export declare function textModule(): Instance<TextGlue> | undefined;
60
61
  /** Whether `init()` has finished. */
61
62
  export declare function isInitialized(): boolean;
62
63
  /** Whether the text module is loaded (builders created now can draw text). */
@@ -77,4 +78,11 @@ export interface WasmMemory {
77
78
  * @returns the byte length of each loaded module's memory.
78
79
  */
79
80
  export declare function wasmMemory(): WasmMemory;
81
+ /**
82
+ * Replaces each loaded module's instance with a fresh one, so its memory returns to the size it
83
+ * had after `init()`: WebAssembly memory grows and never shrinks, and this gives it back. Every
84
+ * document, page, builder and save job made before throws `instance-reset` afterwards, so call it
85
+ * while none is in use, such as between jobs on a server. Images and fonts keep working.
86
+ */
87
+ export declare function reset(): void;
80
88
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAGjD,2CAA2C;AAC3C,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC;AACvC,iFAAiF;AACjF,MAAM,MAAM,QAAQ,GAAG,cAAc,sBAAsB,CAAC,CAAC;AAI7D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB,GAAG,GACH,MAAM,GACN,QAAQ,GACR,WAAW,CAAC,QAAQ,CAAC,GACrB,WAAW,GACX,eAAe,GACf,WAAW,CAAC,MAAM,CAAC;AAEvB,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,uGAAuG;IACvG,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;AAgEvH,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlF;AAED,iDAAiD;AACjD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAe9F;AAED,gGAAgG;AAChG,wBAAgB,UAAU,IAAI,QAAQ,CAKrC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,QAAQ,CAGxC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKjD;AAED,2CAA2C;AAC3C,wBAAgB,UAAU,IAAI,QAAQ,GAAG,SAAS,CAEjD;AAED,qCAAqC;AACrC,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,gEAAgE;AAChE,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAMvC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,2CAA2C;AAC3C,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC;AACvC,iFAAiF;AACjF,MAAM,MAAM,QAAQ,GAAG,cAAc,sBAAsB,CAAC,CAAC;AAI7D;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB,GAAG,GACH,MAAM,GACN,QAAQ,GACR,WAAW,CAAC,QAAQ,CAAC,GACrB,WAAW,GACX,eAAe,GACf,WAAW,CAAC,MAAM,CAAC;AAEvB,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,uGAAuG;IACvG,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;AA6DvH,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlF;AAED,iDAAiD;AACjD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAe9F;AAED,yFAAyF;AACzF,wBAAgB,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAK/C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAGlD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKjD;AAED,oCAAoC;AACpC,wBAAgB,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CAE3D;AAED,qCAAqC;AACrC,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,gEAAgE;AAChE,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAMvC;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,IAAI,IAAI,CAE5B"}
package/dist/init.js CHANGED
@@ -1,10 +1,12 @@
1
1
  // Loading the WebAssembly modules (ADR 0016 §2, §3): `init()` compiles and instantiates the base
2
2
  // module once; the text module is loaded by `init({ text: true })` or `loadText()`, the extract
3
- // module (base + text extraction, B9c) by `init({ extract: true })` or `loadExtract()`. After
4
- // that, every call is synchronous. Each export condition supplies its own `Locate` (src/loader/), so
3
+ // module (base + text extraction) by `init({ extract: true })` or `loadExtract()`. After
4
+ // that, every call is synchronous. `reset()` replaces each loaded module's instance
5
+ // (internal/instance.ts). Each export condition supplies its own `Locate` (src/loader/), so
5
6
  // this file has no environment detection and no runtime-specific API.
6
7
  import * as baseGlue from "@laminapdf/wasm/base";
7
8
  import { packageError } from "./errors.js";
9
+ import { Instance } from "./internal/instance.js";
8
10
  const base = {};
9
11
  const text = {};
10
12
  const extract = {};
@@ -30,7 +32,7 @@ function load(slot, name, glue, locate, source) {
30
32
  const g = await glue();
31
33
  const from = source ?? (await locate(name));
32
34
  const exports = (await g.default(from === undefined ? undefined : { module_or_path: from }));
33
- slot.loaded = { glue: g, exports };
35
+ slot.loaded = new Instance(name, g, exports);
34
36
  })().catch((e) => {
35
37
  slot.pending = undefined;
36
38
  slot.requested = undefined;
@@ -70,12 +72,12 @@ export async function initWith(locate, input) {
70
72
  }
71
73
  await Promise.all(loads);
72
74
  }
73
- /** The base module's glue. @throws {@link LaminaPdfError} `not-initialized` before `init()`. */
75
+ /** The base module. @throws {@link LaminaPdfError} `not-initialized` before `init()`. */
74
76
  export function baseModule() {
75
77
  if (base.loaded === undefined) {
76
78
  throw packageError("not-initialized", "init() has not finished loading the WebAssembly module");
77
79
  }
78
- return base.loaded.glue;
80
+ return base.loaded;
79
81
  }
80
82
  /**
81
83
  * The module documents are opened in: the text module when loaded, else the extract module, else
@@ -84,7 +86,7 @@ export function baseModule() {
84
86
  */
85
87
  export function readingModule() {
86
88
  const base = baseModule();
87
- return (text.loaded?.glue ?? extract.loaded?.glue ?? base);
89
+ return (text.loaded ?? extract.loaded ?? base);
88
90
  }
89
91
  /**
90
92
  * Whether documents opened or built from now on can extract text: the extract or the text module
@@ -99,9 +101,9 @@ export function extractsText(doc) {
99
101
  return ((text.loaded !== undefined && doc instanceof text.loaded.glue.WasmDocument) ||
100
102
  (extract.loaded !== undefined && doc instanceof extract.loaded.glue.WasmDocument));
101
103
  }
102
- /** The text module's glue, when loaded. */
104
+ /** The text module, when loaded. */
103
105
  export function textModule() {
104
- return text.loaded?.glue;
106
+ return text.loaded;
105
107
  }
106
108
  /** Whether `init()` has finished. */
107
109
  export function isInitialized() {
@@ -119,9 +121,19 @@ export function isTextLoaded() {
119
121
  */
120
122
  export function wasmMemory() {
121
123
  return {
122
- ...(base.loaded === undefined ? {} : { base: base.loaded.exports.memory.buffer.byteLength }),
123
- ...(text.loaded === undefined ? {} : { text: text.loaded.exports.memory.buffer.byteLength }),
124
- ...(extract.loaded === undefined ? {} : { extract: extract.loaded.exports.memory.buffer.byteLength }),
124
+ ...(base.loaded === undefined ? {} : { base: base.loaded.memoryBytes }),
125
+ ...(text.loaded === undefined ? {} : { text: text.loaded.memoryBytes }),
126
+ ...(extract.loaded === undefined ? {} : { extract: extract.loaded.memoryBytes }),
125
127
  };
126
128
  }
129
+ /**
130
+ * Replaces each loaded module's instance with a fresh one, so its memory returns to the size it
131
+ * had after `init()`: WebAssembly memory grows and never shrinks, and this gives it back. Every
132
+ * document, page, builder and save job made before throws `instance-reset` afterwards, so call it
133
+ * while none is in use, such as between jobs on a server. Images and fonts keep working.
134
+ */
135
+ export function reset() {
136
+ for (const slot of [base, text, extract])
137
+ slot.loaded?.replace();
138
+ }
127
139
  //# sourceMappingURL=init.js.map
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { Glue, Instance } from "./instance.js";
2
+ /** A handle the garbage collector reclaimed without a `free()`. */
3
+ export interface Leak {
4
+ /** The handle's class: `Document`, `Builder` or `Image`. */
5
+ readonly handle: string;
6
+ }
7
+ /**
8
+ * Reports every document, builder and image created from now on that the garbage collector
9
+ * reclaims without a `free()` or `using`: a debugging aid for code that should free what it
10
+ * makes. Reclaimed handles are freed anyway, only later. `onLeak()` turns the reports off.
11
+ *
12
+ * @param hook - called once per leaked handle, some time after the collection.
13
+ */
14
+ export declare function onLeak(hook?: (leak: Leak) => void): void;
15
+ /** Watches `handle` for a leak while a hook is set; {@link forget} once it is freed. */
16
+ export declare function watch(handle: object, name: string): void;
17
+ /** Stops watching `handle`. */
18
+ export declare function forget(handle: object): void;
19
+ /** A handle on memory in one WebAssembly instance. */
20
+ export declare abstract class Handle<G extends Glue = Glue> {
21
+ #private;
22
+ /**
23
+ * @param name - the class, as messages name it.
24
+ * @param instance - the instance the handle's memory lives in.
25
+ * @param parent - the handle it is freed with, if any.
26
+ */
27
+ protected constructor(name: string, instance: Instance<G>, parent?: Handle);
28
+ /** The instance this handle lives in (for the handles it makes). */
29
+ protected get instance(): Instance<G>;
30
+ /** Whether the handle's raw objects can be freed: its instance is current and hasn't trapped. */
31
+ protected get owned(): boolean;
32
+ /** Whether `free()` ran on this handle or its parent. */
33
+ protected get isFreed(): boolean;
34
+ /**
35
+ * @throws {@link LaminaPdfError} `disposed` after `free()` (here or on the parent);
36
+ * `instance-reset` when the instance was replaced (a trapped one is replaced first).
37
+ */
38
+ protected assertLive(): void;
39
+ /** Runs `f` (calls into the glue) on this live handle; see {@link Instance.call}. */
40
+ protected call<T>(f: (glue: G) => T): T;
41
+ /** Frees the WebAssembly side; called at most once, and only while {@link owned}. */
42
+ protected abstract release(): void;
43
+ /**
44
+ * Frees the handle's memory now; without it, the garbage collector frees it later. A second
45
+ * call does nothing, and any other call afterwards throws `disposed`. Prefer `using`, which
46
+ * calls this at the end of the block.
47
+ */
48
+ free(): void;
49
+ /** Frees the handle at the end of a `using` block (an alias of `free()`). */
50
+ [Symbol.dispose](): void;
51
+ }
52
+ /** Gives `target`'s prototype the dispose method under {@link DISPOSE} where it isn't `Symbol.dispose`. */
53
+ export declare function disposable(target: {
54
+ readonly prototype: {
55
+ free(): void;
56
+ };
57
+ }): void;
58
+ //# sourceMappingURL=handle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../src/internal/handle.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQpD,mEAAmE;AACnE,MAAM,WAAW,IAAI;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAQD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,CAExD;AAED,wFAAwF;AACxF,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,+BAA+B;AAC/B,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,sDAAsD;AACtD,8BAAsB,MAAM,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI;;IAQhD;;;;OAIG;IACH,SAAS,aAAa,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAKzE;IAED,oEAAoE;IACpE,SAAS,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAEpC;IAED,iGAAiG;IACjG,SAAS,KAAK,KAAK,IAAI,OAAO,CAE7B;IAED,yDAAyD;IACzD,SAAS,KAAK,OAAO,IAAI,OAAO,CAE/B;IAED;;;OAGG;IACH,SAAS,CAAC,UAAU,IAAI,IAAI,CAK3B;IAED,qFAAqF;IACrF,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAGtC;IAED,qFAAqF;IACrF,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC;IAEnC;;;;OAIG;IACH,IAAI,IAAI,IAAI,CAMX;IAED,6EAA6E;IAC7E,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAEvB;CACF;AAED,2GAA2G;AAC3G,wBAAgB,UAAU,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE;QAAE,IAAI,IAAI,IAAI,CAAA;KAAE,CAAA;CAAE,GAAG,IAAI,CASjF"}
@@ -0,0 +1,113 @@
1
+ // The base of every handle that owns memory in a WebAssembly instance: `free()` and
2
+ // `Symbol.dispose` (the same thing; a second call does nothing), `disposed` for any call after it,
3
+ // `instance-reset` for a handle whose instance was replaced, and a parent that frees it too (a
4
+ // page with its document or builder). A handle the garbage collector reclaims is still freed, by
5
+ // wasm-bindgen's own finalizer; `onLeak` reports those.
6
+ import { packageError } from "../errors.js";
7
+ /**
8
+ * `Symbol.dispose`, or, where a runtime lacks it (Safari), `Symbol.for("Symbol.dispose")`: the key
9
+ * the `using` helpers of esbuild and Babel fall back to.
10
+ */
11
+ const DISPOSE = typeof Symbol.dispose === "symbol" ? Symbol.dispose : Symbol.for("Symbol.dispose");
12
+ let leakHook;
13
+ const leaks = typeof FinalizationRegistry === "function"
14
+ ? new FinalizationRegistry((handle) => leakHook?.({ handle }))
15
+ : undefined;
16
+ /**
17
+ * Reports every document, builder and image created from now on that the garbage collector
18
+ * reclaims without a `free()` or `using`: a debugging aid for code that should free what it
19
+ * makes. Reclaimed handles are freed anyway, only later. `onLeak()` turns the reports off.
20
+ *
21
+ * @param hook - called once per leaked handle, some time after the collection.
22
+ */
23
+ export function onLeak(hook) {
24
+ leakHook = hook;
25
+ }
26
+ /** Watches `handle` for a leak while a hook is set; {@link forget} once it is freed. */
27
+ export function watch(handle, name) {
28
+ if (leakHook !== undefined)
29
+ leaks?.register(handle, name, handle);
30
+ }
31
+ /** Stops watching `handle`. */
32
+ export function forget(handle) {
33
+ leaks?.unregister(handle);
34
+ }
35
+ /** A handle on memory in one WebAssembly instance. */
36
+ export class Handle {
37
+ /** The class, for messages (minifiers rename classes). */
38
+ #name;
39
+ #instance;
40
+ #generation;
41
+ #parent;
42
+ #freed = false;
43
+ /**
44
+ * @param name - the class, as messages name it.
45
+ * @param instance - the instance the handle's memory lives in.
46
+ * @param parent - the handle it is freed with, if any.
47
+ */
48
+ constructor(name, instance, parent) {
49
+ this.#name = name;
50
+ this.#instance = instance;
51
+ this.#generation = instance.generation;
52
+ this.#parent = parent;
53
+ }
54
+ /** The instance this handle lives in (for the handles it makes). */
55
+ get instance() {
56
+ return this.#instance;
57
+ }
58
+ /** Whether the handle's raw objects can be freed: its instance is current and hasn't trapped. */
59
+ get owned() {
60
+ return this.#instance.owns(this.#generation);
61
+ }
62
+ /** Whether `free()` ran on this handle or its parent. */
63
+ get isFreed() {
64
+ return this.#freed || this.#parent?.isFreed === true;
65
+ }
66
+ /**
67
+ * @throws {@link LaminaPdfError} `disposed` after `free()` (here or on the parent);
68
+ * `instance-reset` when the instance was replaced (a trapped one is replaced first).
69
+ */
70
+ assertLive() {
71
+ if (this.isFreed) {
72
+ throw packageError("disposed", `the ${this.#name} was used after free() or its using block`);
73
+ }
74
+ this.#instance.check(this.#generation, this.#name);
75
+ }
76
+ /** Runs `f` (calls into the glue) on this live handle; see {@link Instance.call}. */
77
+ call(f) {
78
+ this.assertLive();
79
+ return this.#instance.call(f);
80
+ }
81
+ /**
82
+ * Frees the handle's memory now; without it, the garbage collector frees it later. A second
83
+ * call does nothing, and any other call afterwards throws `disposed`. Prefer `using`, which
84
+ * calls this at the end of the block.
85
+ */
86
+ free() {
87
+ if (this.#freed)
88
+ return;
89
+ this.#freed = true;
90
+ forget(this);
91
+ // A replaced instance's memory is gone already, and its objects must not reach the new one.
92
+ if (this.owned)
93
+ this.release();
94
+ }
95
+ /** Frees the handle at the end of a `using` block (an alias of `free()`). */
96
+ [Symbol.dispose]() {
97
+ this.free();
98
+ }
99
+ }
100
+ /** Gives `target`'s prototype the dispose method under {@link DISPOSE} where it isn't `Symbol.dispose`. */
101
+ export function disposable(target) {
102
+ if (DISPOSE === Symbol.dispose)
103
+ return;
104
+ Object.defineProperty(target.prototype, DISPOSE, {
105
+ value() {
106
+ this.free();
107
+ },
108
+ configurable: true,
109
+ writable: true,
110
+ });
111
+ }
112
+ disposable(Handle);
113
+ //# sourceMappingURL=handle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle.js","sourceRoot":"","sources":["../../src/internal/handle.ts"],"names":[],"mappings":"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"}