pdf-oxide 0.3.24 → 0.3.29

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 (271) hide show
  1. package/lib/builders/annotation-builder.d.ts +199 -0
  2. package/lib/builders/annotation-builder.d.ts.map +1 -0
  3. package/lib/builders/annotation-builder.js +318 -0
  4. package/lib/builders/annotation-builder.js.map +1 -0
  5. package/lib/builders/conversion-options-builder.d.ts +107 -0
  6. package/lib/builders/conversion-options-builder.d.ts.map +1 -0
  7. package/lib/builders/conversion-options-builder.js +215 -0
  8. package/lib/builders/conversion-options-builder.js.map +1 -0
  9. package/{src/builders/index.ts → lib/builders/index.d.ts} +1 -1
  10. package/lib/builders/index.d.ts.map +1 -0
  11. package/lib/builders/index.js +12 -0
  12. package/lib/builders/index.js.map +1 -0
  13. package/lib/builders/metadata-builder.d.ts +202 -0
  14. package/lib/builders/metadata-builder.d.ts.map +1 -0
  15. package/lib/builders/metadata-builder.js +286 -0
  16. package/lib/builders/metadata-builder.js.map +1 -0
  17. package/lib/builders/pdf-builder.d.ts +215 -0
  18. package/lib/builders/pdf-builder.d.ts.map +1 -0
  19. package/lib/builders/pdf-builder.js +339 -0
  20. package/lib/builders/pdf-builder.js.map +1 -0
  21. package/lib/builders/search-options-builder.d.ts +74 -0
  22. package/lib/builders/search-options-builder.d.ts.map +1 -0
  23. package/lib/builders/search-options-builder.js +130 -0
  24. package/lib/builders/search-options-builder.js.map +1 -0
  25. package/lib/document-editor-manager.d.ts +140 -0
  26. package/lib/document-editor-manager.d.ts.map +1 -0
  27. package/lib/document-editor-manager.js +257 -0
  28. package/lib/document-editor-manager.js.map +1 -0
  29. package/lib/errors.d.ts +383 -0
  30. package/lib/errors.d.ts.map +1 -0
  31. package/lib/errors.js +1117 -0
  32. package/lib/errors.js.map +1 -0
  33. package/lib/form-field-manager.d.ts +300 -0
  34. package/lib/form-field-manager.d.ts.map +1 -0
  35. package/lib/form-field-manager.js +567 -0
  36. package/lib/form-field-manager.js.map +1 -0
  37. package/lib/hybrid-ml-manager.d.ts +143 -0
  38. package/lib/hybrid-ml-manager.d.ts.map +1 -0
  39. package/lib/hybrid-ml-manager.js +209 -0
  40. package/lib/hybrid-ml-manager.js.map +1 -0
  41. package/lib/index.d.ts +23 -0
  42. package/lib/index.d.ts.map +1 -0
  43. package/lib/index.js +280 -0
  44. package/lib/index.js.map +1 -0
  45. package/lib/managers/accessibility-manager.d.ts +149 -0
  46. package/lib/managers/accessibility-manager.d.ts.map +1 -0
  47. package/lib/managers/accessibility-manager.js +224 -0
  48. package/lib/managers/accessibility-manager.js.map +1 -0
  49. package/lib/managers/annotation-manager.d.ts +220 -0
  50. package/lib/managers/annotation-manager.d.ts.map +1 -0
  51. package/lib/managers/annotation-manager.js +360 -0
  52. package/lib/managers/annotation-manager.js.map +1 -0
  53. package/lib/managers/barcode-manager.d.ts +80 -0
  54. package/lib/managers/barcode-manager.d.ts.map +1 -0
  55. package/lib/managers/barcode-manager.js +226 -0
  56. package/lib/managers/barcode-manager.js.map +1 -0
  57. package/lib/managers/batch-manager.d.ts +186 -0
  58. package/lib/managers/batch-manager.d.ts.map +1 -0
  59. package/lib/managers/batch-manager.js +389 -0
  60. package/lib/managers/batch-manager.js.map +1 -0
  61. package/lib/managers/cache-manager.d.ts +182 -0
  62. package/lib/managers/cache-manager.d.ts.map +1 -0
  63. package/lib/managers/cache-manager.js +387 -0
  64. package/lib/managers/cache-manager.js.map +1 -0
  65. package/lib/managers/compliance-manager.d.ts +104 -0
  66. package/lib/managers/compliance-manager.d.ts.map +1 -0
  67. package/lib/managers/compliance-manager.js +415 -0
  68. package/lib/managers/compliance-manager.js.map +1 -0
  69. package/lib/managers/content-manager.d.ts +121 -0
  70. package/lib/managers/content-manager.d.ts.map +1 -0
  71. package/lib/managers/content-manager.js +295 -0
  72. package/lib/managers/content-manager.js.map +1 -0
  73. package/lib/managers/document-utility-manager.d.ts +370 -0
  74. package/lib/managers/document-utility-manager.d.ts.map +1 -0
  75. package/lib/managers/document-utility-manager.js +731 -0
  76. package/lib/managers/document-utility-manager.js.map +1 -0
  77. package/lib/managers/dom-pdf-creator.d.ts +105 -0
  78. package/lib/managers/dom-pdf-creator.d.ts.map +1 -0
  79. package/lib/managers/dom-pdf-creator.js +300 -0
  80. package/lib/managers/dom-pdf-creator.js.map +1 -0
  81. package/lib/managers/editing-manager.d.ts +249 -0
  82. package/lib/managers/editing-manager.d.ts.map +1 -0
  83. package/lib/managers/editing-manager.js +388 -0
  84. package/lib/managers/editing-manager.js.map +1 -0
  85. package/lib/managers/enterprise-manager.d.ts +193 -0
  86. package/lib/managers/enterprise-manager.d.ts.map +1 -0
  87. package/lib/managers/enterprise-manager.js +305 -0
  88. package/lib/managers/enterprise-manager.js.map +1 -0
  89. package/lib/managers/extended-managers.d.ts +123 -0
  90. package/lib/managers/extended-managers.d.ts.map +1 -0
  91. package/lib/managers/extended-managers.js +658 -0
  92. package/lib/managers/extended-managers.js.map +1 -0
  93. package/lib/managers/extraction-manager.d.ts +247 -0
  94. package/lib/managers/extraction-manager.d.ts.map +1 -0
  95. package/lib/managers/extraction-manager.js +478 -0
  96. package/lib/managers/extraction-manager.js.map +1 -0
  97. package/lib/managers/final-utilities.d.ts +128 -0
  98. package/lib/managers/final-utilities.d.ts.map +1 -0
  99. package/lib/managers/final-utilities.js +653 -0
  100. package/lib/managers/final-utilities.js.map +1 -0
  101. package/lib/managers/hybrid-ml-advanced.d.ts +137 -0
  102. package/lib/managers/hybrid-ml-advanced.d.ts.map +1 -0
  103. package/lib/managers/hybrid-ml-advanced.js +707 -0
  104. package/lib/managers/hybrid-ml-advanced.js.map +1 -0
  105. package/lib/managers/index.d.ts +65 -0
  106. package/lib/managers/index.d.ts.map +1 -0
  107. package/lib/managers/index.js +70 -0
  108. package/lib/managers/index.js.map +1 -0
  109. package/lib/managers/layer-manager.d.ts +204 -0
  110. package/lib/managers/layer-manager.d.ts.map +1 -0
  111. package/lib/managers/layer-manager.js +403 -0
  112. package/lib/managers/layer-manager.js.map +1 -0
  113. package/lib/managers/metadata-manager.d.ts +149 -0
  114. package/lib/managers/metadata-manager.d.ts.map +1 -0
  115. package/lib/managers/metadata-manager.js +281 -0
  116. package/lib/managers/metadata-manager.js.map +1 -0
  117. package/lib/managers/ocr-manager.d.ts +195 -0
  118. package/lib/managers/ocr-manager.d.ts.map +1 -0
  119. package/lib/managers/ocr-manager.js +583 -0
  120. package/lib/managers/ocr-manager.js.map +1 -0
  121. package/lib/managers/optimization-manager.d.ts +103 -0
  122. package/lib/managers/optimization-manager.d.ts.map +1 -0
  123. package/lib/managers/optimization-manager.js +194 -0
  124. package/lib/managers/optimization-manager.js.map +1 -0
  125. package/lib/managers/outline-manager.d.ts +102 -0
  126. package/lib/managers/outline-manager.d.ts.map +1 -0
  127. package/lib/managers/outline-manager.js +170 -0
  128. package/lib/managers/outline-manager.js.map +1 -0
  129. package/lib/managers/page-manager.d.ts +143 -0
  130. package/lib/managers/page-manager.d.ts.map +1 -0
  131. package/lib/managers/page-manager.js +237 -0
  132. package/lib/managers/page-manager.js.map +1 -0
  133. package/lib/managers/pattern-detection.d.ts +170 -0
  134. package/lib/managers/pattern-detection.d.ts.map +1 -0
  135. package/lib/managers/pattern-detection.js +325 -0
  136. package/lib/managers/pattern-detection.js.map +1 -0
  137. package/lib/managers/rendering-manager.d.ts +354 -0
  138. package/lib/managers/rendering-manager.d.ts.map +1 -0
  139. package/lib/managers/rendering-manager.js +680 -0
  140. package/lib/managers/rendering-manager.js.map +1 -0
  141. package/lib/managers/search-manager.d.ts +236 -0
  142. package/lib/managers/search-manager.d.ts.map +1 -0
  143. package/lib/managers/search-manager.js +330 -0
  144. package/lib/managers/search-manager.js.map +1 -0
  145. package/lib/managers/security-manager.d.ts +162 -0
  146. package/lib/managers/security-manager.d.ts.map +1 -0
  147. package/lib/managers/security-manager.js +293 -0
  148. package/lib/managers/security-manager.js.map +1 -0
  149. package/lib/managers/signature-manager.d.ts +725 -0
  150. package/lib/managers/signature-manager.d.ts.map +1 -0
  151. package/lib/managers/signature-manager.js +1365 -0
  152. package/lib/managers/signature-manager.js.map +1 -0
  153. package/lib/managers/streams.d.ts +263 -0
  154. package/lib/managers/streams.d.ts.map +1 -0
  155. package/lib/managers/streams.js +472 -0
  156. package/lib/managers/streams.js.map +1 -0
  157. package/lib/managers/xfa-manager.d.ts +228 -0
  158. package/lib/managers/xfa-manager.d.ts.map +1 -0
  159. package/lib/managers/xfa-manager.js +490 -0
  160. package/lib/managers/xfa-manager.js.map +1 -0
  161. package/lib/pdf-creator-manager.d.ts +201 -0
  162. package/lib/pdf-creator-manager.d.ts.map +1 -0
  163. package/lib/pdf-creator-manager.js +379 -0
  164. package/lib/pdf-creator-manager.js.map +1 -0
  165. package/lib/properties.d.ts +80 -0
  166. package/lib/properties.d.ts.map +1 -0
  167. package/lib/properties.js +455 -0
  168. package/lib/properties.js.map +1 -0
  169. package/lib/result-accessors-manager.d.ts +347 -0
  170. package/lib/result-accessors-manager.d.ts.map +1 -0
  171. package/lib/result-accessors-manager.js +705 -0
  172. package/lib/result-accessors-manager.js.map +1 -0
  173. package/lib/thumbnail-manager.d.ts +122 -0
  174. package/lib/thumbnail-manager.d.ts.map +1 -0
  175. package/lib/thumbnail-manager.js +206 -0
  176. package/lib/thumbnail-manager.js.map +1 -0
  177. package/lib/types/common.d.ts +93 -0
  178. package/lib/types/common.d.ts.map +1 -0
  179. package/lib/types/common.js +5 -0
  180. package/lib/types/common.js.map +1 -0
  181. package/lib/types/document-types.d.ts +353 -0
  182. package/lib/types/document-types.d.ts.map +1 -0
  183. package/lib/types/document-types.js +83 -0
  184. package/lib/types/document-types.js.map +1 -0
  185. package/{src/types/index.ts → lib/types/index.d.ts} +1 -1
  186. package/lib/types/index.d.ts.map +1 -0
  187. package/lib/types/index.js +6 -0
  188. package/lib/types/index.js.map +1 -0
  189. package/lib/types/manager-types.d.ts +180 -0
  190. package/lib/types/manager-types.d.ts.map +1 -0
  191. package/lib/types/manager-types.js +99 -0
  192. package/lib/types/manager-types.js.map +1 -0
  193. package/lib/types/native-bindings.d.ts +440 -0
  194. package/lib/types/native-bindings.d.ts.map +1 -0
  195. package/lib/types/native-bindings.js +8 -0
  196. package/lib/types/native-bindings.js.map +1 -0
  197. package/{src/workers/index.ts → lib/workers/index.d.ts} +1 -1
  198. package/lib/workers/index.d.ts.map +1 -0
  199. package/lib/workers/index.js +6 -0
  200. package/lib/workers/index.js.map +1 -0
  201. package/lib/workers/pool.d.ts +65 -0
  202. package/lib/workers/pool.d.ts.map +1 -0
  203. package/lib/workers/pool.js +195 -0
  204. package/lib/workers/pool.js.map +1 -0
  205. package/lib/workers/worker.d.ts +6 -0
  206. package/lib/workers/worker.d.ts.map +1 -0
  207. package/lib/workers/worker.js +100 -0
  208. package/lib/workers/worker.js.map +1 -0
  209. package/package.json +12 -22
  210. package/prebuilds/darwin-arm64/pdf_oxide.node +0 -0
  211. package/prebuilds/darwin-x64/pdf_oxide.node +0 -0
  212. package/prebuilds/linux-arm64/pdf_oxide.node +0 -0
  213. package/prebuilds/linux-x64/pdf_oxide.node +0 -0
  214. package/prebuilds/win32-x64/pdf_oxide.node +0 -0
  215. package/binding.gyp +0 -35
  216. package/src/builders/annotation-builder.ts +0 -367
  217. package/src/builders/conversion-options-builder.ts +0 -257
  218. package/src/builders/metadata-builder.ts +0 -317
  219. package/src/builders/pdf-builder.ts +0 -386
  220. package/src/builders/search-options-builder.ts +0 -151
  221. package/src/document-editor-manager.ts +0 -318
  222. package/src/errors.ts +0 -1629
  223. package/src/form-field-manager.ts +0 -666
  224. package/src/hybrid-ml-manager.ts +0 -283
  225. package/src/index.ts +0 -453
  226. package/src/managers/accessibility-manager.ts +0 -338
  227. package/src/managers/annotation-manager.ts +0 -439
  228. package/src/managers/barcode-manager.ts +0 -235
  229. package/src/managers/batch-manager.ts +0 -533
  230. package/src/managers/cache-manager.ts +0 -486
  231. package/src/managers/compliance-manager.ts +0 -375
  232. package/src/managers/content-manager.ts +0 -339
  233. package/src/managers/document-utility-manager.ts +0 -922
  234. package/src/managers/dom-pdf-creator.ts +0 -365
  235. package/src/managers/editing-manager.ts +0 -514
  236. package/src/managers/enterprise-manager.ts +0 -478
  237. package/src/managers/extended-managers.ts +0 -437
  238. package/src/managers/extraction-manager.ts +0 -583
  239. package/src/managers/final-utilities.ts +0 -429
  240. package/src/managers/hybrid-ml-advanced.ts +0 -479
  241. package/src/managers/index.ts +0 -239
  242. package/src/managers/layer-manager.ts +0 -500
  243. package/src/managers/metadata-manager.ts +0 -303
  244. package/src/managers/ocr-manager.ts +0 -756
  245. package/src/managers/optimization-manager.ts +0 -262
  246. package/src/managers/outline-manager.ts +0 -196
  247. package/src/managers/page-manager.ts +0 -289
  248. package/src/managers/pattern-detection.ts +0 -440
  249. package/src/managers/rendering-manager.ts +0 -863
  250. package/src/managers/search-manager.ts +0 -385
  251. package/src/managers/security-manager.ts +0 -345
  252. package/src/managers/signature-manager.ts +0 -1664
  253. package/src/managers/streams.ts +0 -618
  254. package/src/managers/xfa-manager.ts +0 -500
  255. package/src/pdf-creator-manager.ts +0 -494
  256. package/src/properties.ts +0 -522
  257. package/src/result-accessors-manager.ts +0 -867
  258. package/src/tests/advanced-features.test.ts +0 -414
  259. package/src/tests/advanced.test.ts +0 -266
  260. package/src/tests/extended-managers.test.ts +0 -316
  261. package/src/tests/final-utilities.test.ts +0 -455
  262. package/src/tests/foundation.test.ts +0 -315
  263. package/src/tests/high-demand.test.ts +0 -257
  264. package/src/tests/specialized.test.ts +0 -97
  265. package/src/thumbnail-manager.ts +0 -272
  266. package/src/types/common.ts +0 -142
  267. package/src/types/document-types.ts +0 -457
  268. package/src/types/manager-types.ts +0 -284
  269. package/src/types/native-bindings.ts +0 -517
  270. package/src/workers/pool.ts +0 -274
  271. package/src/workers/worker.ts +0 -131
@@ -0,0 +1,103 @@
1
+ /**
2
+ * OptimizationManager - PDF Optimization Operations
3
+ *
4
+ * Provides document optimization capabilities including:
5
+ * - Font subsetting
6
+ * - Image downsampling
7
+ * - Object deduplication
8
+ * - Full optimization pipeline
9
+ *
10
+ * @since 1.0.0
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ /**
14
+ * Result of an optimization operation.
15
+ */
16
+ export interface OptimizationResult {
17
+ /** Whether the optimization succeeded */
18
+ readonly success: boolean;
19
+ /** Number of bytes saved */
20
+ readonly bytesSaved: number;
21
+ /** Original document size in bytes */
22
+ readonly originalSize: number;
23
+ /** Optimized document size in bytes */
24
+ readonly optimizedSize: number;
25
+ /** Compression ratio (0.0 - 1.0) */
26
+ readonly compressionRatio: number;
27
+ }
28
+ /**
29
+ * Manager for PDF optimization operations.
30
+ *
31
+ * Provides methods for reducing PDF file size through font subsetting,
32
+ * image downsampling, object deduplication, and combined optimization.
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * const optimizer = new OptimizationManager(document);
37
+ *
38
+ * // Subset fonts to remove unused glyphs
39
+ * const fontResult = await optimizer.subsetFonts();
40
+ * console.log(`Font subsetting saved ${fontResult.bytesSaved} bytes`);
41
+ *
42
+ * // Downsample high-resolution images
43
+ * const imageResult = await optimizer.downsampleImages(150, 80);
44
+ *
45
+ * // Full optimization pipeline
46
+ * const fullResult = await optimizer.optimizeFull(150, 80);
47
+ * console.log(`Total savings: ${fullResult.bytesSaved} bytes`);
48
+ * ```
49
+ */
50
+ export declare class OptimizationManager extends EventEmitter {
51
+ private document;
52
+ private native;
53
+ constructor(document: any);
54
+ /**
55
+ * Subsets all embedded fonts in the document.
56
+ *
57
+ * Removes unused glyphs from embedded fonts, reducing file size
58
+ * while preserving visual fidelity for the characters actually used.
59
+ *
60
+ * @returns Optimization result with bytes saved
61
+ * @throws OptimizationException if the operation fails
62
+ */
63
+ subsetFonts(): Promise<OptimizationResult>;
64
+ /**
65
+ * Downsamples images in the document to reduce file size.
66
+ *
67
+ * @param dpi - Target resolution in dots per inch (default: 150)
68
+ * @param quality - JPEG quality for recompression (1-100, default: 80)
69
+ * @returns Optimization result with bytes saved
70
+ * @throws OptimizationException if the operation fails
71
+ */
72
+ downsampleImages(dpi?: number, quality?: number): Promise<OptimizationResult>;
73
+ /**
74
+ * Deduplicates identical objects in the document.
75
+ *
76
+ * Identifies and merges duplicate fonts, images, and other resources
77
+ * that appear multiple times in the document.
78
+ *
79
+ * @returns Optimization result with bytes saved
80
+ * @throws OptimizationException if the operation fails
81
+ */
82
+ deduplicate(): Promise<OptimizationResult>;
83
+ /**
84
+ * Runs the full optimization pipeline.
85
+ *
86
+ * Combines font subsetting, image downsampling, and object deduplication
87
+ * into a single operation for maximum file size reduction.
88
+ *
89
+ * @param dpi - Target image resolution in dots per inch (default: 150)
90
+ * @param quality - JPEG quality for recompression (1-100, default: 80)
91
+ * @returns Optimization result with total bytes saved
92
+ * @throws OptimizationException if the operation fails
93
+ */
94
+ optimizeFull(dpi?: number, quality?: number): Promise<OptimizationResult>;
95
+ private parseOptimizationResult;
96
+ private freeOptimizationResult;
97
+ /**
98
+ * Releases resources held by this manager.
99
+ */
100
+ destroy(): void;
101
+ }
102
+ export default OptimizationManager;
103
+ //# sourceMappingURL=optimization-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimization-manager.d.ts","sourceRoot":"","sources":["../../src/managers/optimization-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAOtC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sCAAsC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,uCAAuC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,MAAM,CAAM;gBAER,QAAQ,EAAE,GAAG;IAiBzB;;;;;;;;OAQG;IACG,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAuBhD;;;;;;;OAOG;IACG,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyBnF;;;;;;;;OAQG;IACG,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAuBhD;;;;;;;;;;OAUG;IACG,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA6B/E,OAAO,CAAC,uBAAuB;IAwB/B,OAAO,CAAC,sBAAsB;IAU9B;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * OptimizationManager - PDF Optimization Operations
3
+ *
4
+ * Provides document optimization capabilities including:
5
+ * - Font subsetting
6
+ * - Image downsampling
7
+ * - Object deduplication
8
+ * - Full optimization pipeline
9
+ *
10
+ * @since 1.0.0
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ import { mapFfiErrorCode, OptimizationException } from '../errors.js';
14
+ // =============================================================================
15
+ // OptimizationManager
16
+ // =============================================================================
17
+ /**
18
+ * Manager for PDF optimization operations.
19
+ *
20
+ * Provides methods for reducing PDF file size through font subsetting,
21
+ * image downsampling, object deduplication, and combined optimization.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const optimizer = new OptimizationManager(document);
26
+ *
27
+ * // Subset fonts to remove unused glyphs
28
+ * const fontResult = await optimizer.subsetFonts();
29
+ * console.log(`Font subsetting saved ${fontResult.bytesSaved} bytes`);
30
+ *
31
+ * // Downsample high-resolution images
32
+ * const imageResult = await optimizer.downsampleImages(150, 80);
33
+ *
34
+ * // Full optimization pipeline
35
+ * const fullResult = await optimizer.optimizeFull(150, 80);
36
+ * console.log(`Total savings: ${fullResult.bytesSaved} bytes`);
37
+ * ```
38
+ */
39
+ export class OptimizationManager extends EventEmitter {
40
+ constructor(document) {
41
+ super();
42
+ if (!document) {
43
+ throw new Error('Document cannot be null or undefined');
44
+ }
45
+ this.document = document;
46
+ try {
47
+ this.native = require('../../index.node');
48
+ }
49
+ catch {
50
+ this.native = null;
51
+ }
52
+ }
53
+ // ===========================================================================
54
+ // Optimization Operations
55
+ // ===========================================================================
56
+ /**
57
+ * Subsets all embedded fonts in the document.
58
+ *
59
+ * Removes unused glyphs from embedded fonts, reducing file size
60
+ * while preserving visual fidelity for the characters actually used.
61
+ *
62
+ * @returns Optimization result with bytes saved
63
+ * @throws OptimizationException if the operation fails
64
+ */
65
+ async subsetFonts() {
66
+ if (!this.native?.pdf_optimize_subset_fonts) {
67
+ throw new OptimizationException('Native optimization not available: pdf_optimize_subset_fonts not found');
68
+ }
69
+ const errorCode = Buffer.alloc(4);
70
+ const resultPtr = this.native.pdf_optimize_subset_fonts(this.document._handle ?? this.document, errorCode);
71
+ const code = errorCode.readInt32LE(0);
72
+ if (code !== 0) {
73
+ throw mapFfiErrorCode(code, 'Failed to subset fonts');
74
+ }
75
+ const result = this.parseOptimizationResult(resultPtr);
76
+ this.emit('fonts-subsetted', { bytesSaved: result.bytesSaved });
77
+ this.freeOptimizationResult(resultPtr);
78
+ return result;
79
+ }
80
+ /**
81
+ * Downsamples images in the document to reduce file size.
82
+ *
83
+ * @param dpi - Target resolution in dots per inch (default: 150)
84
+ * @param quality - JPEG quality for recompression (1-100, default: 80)
85
+ * @returns Optimization result with bytes saved
86
+ * @throws OptimizationException if the operation fails
87
+ */
88
+ async downsampleImages(dpi, quality) {
89
+ if (!this.native?.pdf_optimize_downsample_images) {
90
+ throw new OptimizationException('Native optimization not available: pdf_optimize_downsample_images not found');
91
+ }
92
+ const errorCode = Buffer.alloc(4);
93
+ const resultPtr = this.native.pdf_optimize_downsample_images(this.document._handle ?? this.document, dpi ?? 150, quality ?? 80, errorCode);
94
+ const code = errorCode.readInt32LE(0);
95
+ if (code !== 0) {
96
+ throw mapFfiErrorCode(code, 'Failed to downsample images');
97
+ }
98
+ const result = this.parseOptimizationResult(resultPtr);
99
+ this.emit('images-downsampled', { dpi: dpi ?? 150, quality: quality ?? 80, bytesSaved: result.bytesSaved });
100
+ this.freeOptimizationResult(resultPtr);
101
+ return result;
102
+ }
103
+ /**
104
+ * Deduplicates identical objects in the document.
105
+ *
106
+ * Identifies and merges duplicate fonts, images, and other resources
107
+ * that appear multiple times in the document.
108
+ *
109
+ * @returns Optimization result with bytes saved
110
+ * @throws OptimizationException if the operation fails
111
+ */
112
+ async deduplicate() {
113
+ if (!this.native?.pdf_optimize_deduplicate) {
114
+ throw new OptimizationException('Native optimization not available: pdf_optimize_deduplicate not found');
115
+ }
116
+ const errorCode = Buffer.alloc(4);
117
+ const resultPtr = this.native.pdf_optimize_deduplicate(this.document._handle ?? this.document, errorCode);
118
+ const code = errorCode.readInt32LE(0);
119
+ if (code !== 0) {
120
+ throw mapFfiErrorCode(code, 'Failed to deduplicate objects');
121
+ }
122
+ const result = this.parseOptimizationResult(resultPtr);
123
+ this.emit('deduplicated', { bytesSaved: result.bytesSaved });
124
+ this.freeOptimizationResult(resultPtr);
125
+ return result;
126
+ }
127
+ /**
128
+ * Runs the full optimization pipeline.
129
+ *
130
+ * Combines font subsetting, image downsampling, and object deduplication
131
+ * into a single operation for maximum file size reduction.
132
+ *
133
+ * @param dpi - Target image resolution in dots per inch (default: 150)
134
+ * @param quality - JPEG quality for recompression (1-100, default: 80)
135
+ * @returns Optimization result with total bytes saved
136
+ * @throws OptimizationException if the operation fails
137
+ */
138
+ async optimizeFull(dpi, quality) {
139
+ if (!this.native?.pdf_optimize_full) {
140
+ throw new OptimizationException('Native optimization not available: pdf_optimize_full not found');
141
+ }
142
+ const errorCode = Buffer.alloc(4);
143
+ const resultPtr = this.native.pdf_optimize_full(this.document._handle ?? this.document, dpi ?? 150, quality ?? 80, errorCode);
144
+ const code = errorCode.readInt32LE(0);
145
+ if (code !== 0) {
146
+ throw mapFfiErrorCode(code, 'Failed to run full optimization');
147
+ }
148
+ const result = this.parseOptimizationResult(resultPtr);
149
+ this.emit('optimized-full', { dpi: dpi ?? 150, quality: quality ?? 80, bytesSaved: result.bytesSaved });
150
+ this.freeOptimizationResult(resultPtr);
151
+ return result;
152
+ }
153
+ // ===========================================================================
154
+ // Private Helpers
155
+ // ===========================================================================
156
+ parseOptimizationResult(resultPtr) {
157
+ if (!resultPtr) {
158
+ return { success: true, bytesSaved: 0, originalSize: 0, optimizedSize: 0, compressionRatio: 0 };
159
+ }
160
+ if (typeof resultPtr === 'string') {
161
+ try {
162
+ return JSON.parse(resultPtr);
163
+ }
164
+ catch {
165
+ return { success: true, bytesSaved: 0, originalSize: 0, optimizedSize: 0, compressionRatio: 0 };
166
+ }
167
+ }
168
+ // Handle native result handle
169
+ const bytesSaved = this.native?.pdf_optimization_result_bytes_saved?.(resultPtr) ?? 0;
170
+ return {
171
+ success: true,
172
+ bytesSaved,
173
+ originalSize: 0,
174
+ optimizedSize: 0,
175
+ compressionRatio: 0,
176
+ };
177
+ }
178
+ freeOptimizationResult(resultPtr) {
179
+ if (resultPtr && typeof resultPtr !== 'string' && this.native?.pdf_optimization_result_free) {
180
+ this.native.pdf_optimization_result_free(resultPtr);
181
+ }
182
+ }
183
+ // ===========================================================================
184
+ // Cleanup
185
+ // ===========================================================================
186
+ /**
187
+ * Releases resources held by this manager.
188
+ */
189
+ destroy() {
190
+ this.removeAllListeners();
191
+ }
192
+ }
193
+ export default OptimizationManager;
194
+ //# sourceMappingURL=optimization-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimization-manager.js","sourceRoot":"","sources":["../../src/managers/optimization-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Manager for PDF document outlines (bookmarks)
3
+ *
4
+ * Provides functionality for reading and navigating the document's outline tree,
5
+ * which represents the hierarchical bookmark structure.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { OutlineManager } from 'pdf_oxide';
10
+ *
11
+ * const doc = PdfDocument.open('document.pdf');
12
+ * const outlineManager = new OutlineManager(doc);
13
+ *
14
+ * if (outlineManager.hasOutlines()) {
15
+ * const outlines = outlineManager.getOutlines();
16
+ * console.log(`Found ${outlines.length} outline items`);
17
+ * }
18
+ * ```
19
+ */
20
+ export interface OutlineItem {
21
+ title: string;
22
+ pageIndex: number;
23
+ pageNumber: number | null;
24
+ level: number;
25
+ }
26
+ export declare class OutlineManager {
27
+ private _document;
28
+ /**
29
+ * Creates a new OutlineManager for the given document
30
+ * @param document - The PDF document
31
+ * @throws Error if document is null or undefined
32
+ */
33
+ constructor(document: any);
34
+ /**
35
+ * Checks if the document has an outline (bookmarks)
36
+ * @returns True if the document has outlines
37
+ */
38
+ hasOutlines(): boolean;
39
+ /**
40
+ * Gets the number of top-level outline items
41
+ * @returns Number of outline items
42
+ */
43
+ getOutlineCount(): number;
44
+ /**
45
+ * Gets all outline items (flattened)
46
+ * @returns Array of outline items
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const outlines = manager.getOutlines();
51
+ * outlines.forEach(item => {
52
+ * console.log(`${item.title} -> Page ${item.pageNumber}`);
53
+ * });
54
+ * ```
55
+ */
56
+ getOutlines(): OutlineItem[];
57
+ /**
58
+ * Finds an outline item by title (case-insensitive substring match)
59
+ * @param titleFragment - Partial title to search for
60
+ * @returns Matching outline item or null
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const item = manager.findByTitle('Introduction');
65
+ * if (item) {
66
+ * console.log(`Found: ${item.title} on page ${item.pageNumber}`);
67
+ * }
68
+ * ```
69
+ */
70
+ findByTitle(titleFragment: string): OutlineItem | null;
71
+ /**
72
+ * Finds all outline items by title (case-insensitive substring match)
73
+ * @param titleFragment - Partial title to search for
74
+ * @returns Array of matching outline items
75
+ */
76
+ findAllByTitle(titleFragment: string): OutlineItem[];
77
+ /**
78
+ * Gets outline items for a specific page
79
+ * @param pageIndex - Zero-based page index
80
+ * @returns Outline items on that page
81
+ */
82
+ getOutlinesForPage(pageIndex: number): OutlineItem[];
83
+ /**
84
+ * Checks if a specific page has outline items
85
+ * @param pageIndex - Zero-based page index
86
+ * @returns True if page has outline items
87
+ */
88
+ pageHasOutlines(pageIndex: number): boolean;
89
+ /**
90
+ * Gets an outline item by index
91
+ * @param index - Item index
92
+ * @returns Outline item or null if not found
93
+ */
94
+ getOutlineAt(index: number): OutlineItem | null;
95
+ /**
96
+ * Checks if a page number exists in the outline
97
+ * @param pageNumber - One-based page number
98
+ * @returns True if page appears in outline
99
+ */
100
+ containsPageNumber(pageNumber: number): boolean;
101
+ }
102
+ //# sourceMappingURL=outline-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-manager.d.ts","sourceRoot":"","sources":["../../src/managers/outline-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAM;IAEvB;;;;OAIG;gBACS,QAAQ,EAAE,GAAG;IAOzB;;;OAGG;IACH,WAAW,IAAI,OAAO;IAQtB;;;OAGG;IACH,eAAe,IAAI,MAAM;IAQzB;;;;;;;;;;;OAWG;IACH,WAAW,IAAI,WAAW,EAAE;IAe5B;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAiBtD;;;;OAIG;IACH,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,EAAE;IAapD;;;;OAIG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IASpD;;;;OAIG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQ3C;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAS/C;;;;OAIG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAQhD"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Manager for PDF document outlines (bookmarks)
3
+ *
4
+ * Provides functionality for reading and navigating the document's outline tree,
5
+ * which represents the hierarchical bookmark structure.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { OutlineManager } from 'pdf_oxide';
10
+ *
11
+ * const doc = PdfDocument.open('document.pdf');
12
+ * const outlineManager = new OutlineManager(doc);
13
+ *
14
+ * if (outlineManager.hasOutlines()) {
15
+ * const outlines = outlineManager.getOutlines();
16
+ * console.log(`Found ${outlines.length} outline items`);
17
+ * }
18
+ * ```
19
+ */
20
+ export class OutlineManager {
21
+ /**
22
+ * Creates a new OutlineManager for the given document
23
+ * @param document - The PDF document
24
+ * @throws Error if document is null or undefined
25
+ */
26
+ constructor(document) {
27
+ if (!document) {
28
+ throw new Error('Document is required');
29
+ }
30
+ this._document = document;
31
+ }
32
+ /**
33
+ * Checks if the document has an outline (bookmarks)
34
+ * @returns True if the document has outlines
35
+ */
36
+ hasOutlines() {
37
+ try {
38
+ return this._document.hasOutlines();
39
+ }
40
+ catch (error) {
41
+ return false;
42
+ }
43
+ }
44
+ /**
45
+ * Gets the number of top-level outline items
46
+ * @returns Number of outline items
47
+ */
48
+ getOutlineCount() {
49
+ try {
50
+ return this._document.getOutlineCount();
51
+ }
52
+ catch (error) {
53
+ return 0;
54
+ }
55
+ }
56
+ /**
57
+ * Gets all outline items (flattened)
58
+ * @returns Array of outline items
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const outlines = manager.getOutlines();
63
+ * outlines.forEach(item => {
64
+ * console.log(`${item.title} -> Page ${item.pageNumber}`);
65
+ * });
66
+ * ```
67
+ */
68
+ getOutlines() {
69
+ try {
70
+ const rawOutlines = this._document.getOutlines();
71
+ // Convert native OutlineInfo to OutlineItem format expected by JS
72
+ return rawOutlines.map((item) => ({
73
+ title: item.title,
74
+ pageIndex: item.pageIndex,
75
+ pageNumber: item.pageIndex >= 0 ? item.pageIndex + 1 : null,
76
+ level: item.level,
77
+ }));
78
+ }
79
+ catch (error) {
80
+ return [];
81
+ }
82
+ }
83
+ /**
84
+ * Finds an outline item by title (case-insensitive substring match)
85
+ * @param titleFragment - Partial title to search for
86
+ * @returns Matching outline item or null
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * const item = manager.findByTitle('Introduction');
91
+ * if (item) {
92
+ * console.log(`Found: ${item.title} on page ${item.pageNumber}`);
93
+ * }
94
+ * ```
95
+ */
96
+ findByTitle(titleFragment) {
97
+ if (!titleFragment || typeof titleFragment !== 'string') {
98
+ throw new Error('Title fragment must be a non-empty string');
99
+ }
100
+ const outlines = this.getOutlines();
101
+ const fragment = titleFragment.toLowerCase();
102
+ for (const item of outlines) {
103
+ if (item.title && item.title.toLowerCase().includes(fragment)) {
104
+ return item;
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ /**
110
+ * Finds all outline items by title (case-insensitive substring match)
111
+ * @param titleFragment - Partial title to search for
112
+ * @returns Array of matching outline items
113
+ */
114
+ findAllByTitle(titleFragment) {
115
+ if (!titleFragment || typeof titleFragment !== 'string') {
116
+ throw new Error('Title fragment must be a non-empty string');
117
+ }
118
+ const outlines = this.getOutlines();
119
+ const fragment = titleFragment.toLowerCase();
120
+ return outlines.filter((item) => item.title && item.title.toLowerCase().includes(fragment));
121
+ }
122
+ /**
123
+ * Gets outline items for a specific page
124
+ * @param pageIndex - Zero-based page index
125
+ * @returns Outline items on that page
126
+ */
127
+ getOutlinesForPage(pageIndex) {
128
+ if (typeof pageIndex !== 'number' || pageIndex < 0) {
129
+ throw new Error('Page index must be a non-negative number');
130
+ }
131
+ const outlines = this.getOutlines();
132
+ return outlines.filter((item) => item.pageIndex === pageIndex);
133
+ }
134
+ /**
135
+ * Checks if a specific page has outline items
136
+ * @param pageIndex - Zero-based page index
137
+ * @returns True if page has outline items
138
+ */
139
+ pageHasOutlines(pageIndex) {
140
+ if (typeof pageIndex !== 'number' || pageIndex < 0) {
141
+ throw new Error('Page index must be a non-negative number');
142
+ }
143
+ return this.getOutlinesForPage(pageIndex).length > 0;
144
+ }
145
+ /**
146
+ * Gets an outline item by index
147
+ * @param index - Item index
148
+ * @returns Outline item or null if not found
149
+ */
150
+ getOutlineAt(index) {
151
+ if (typeof index !== 'number' || index < 0) {
152
+ throw new Error('Index must be a non-negative number');
153
+ }
154
+ const outlines = this.getOutlines();
155
+ return outlines[index] || null;
156
+ }
157
+ /**
158
+ * Checks if a page number exists in the outline
159
+ * @param pageNumber - One-based page number
160
+ * @returns True if page appears in outline
161
+ */
162
+ containsPageNumber(pageNumber) {
163
+ if (typeof pageNumber !== 'number' || pageNumber < 1) {
164
+ throw new Error('Page number must be a positive number');
165
+ }
166
+ const outlines = this.getOutlines();
167
+ return outlines.some((item) => item.pageNumber === pageNumber);
168
+ }
169
+ }
170
+ //# sourceMappingURL=outline-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-manager.js","sourceRoot":"","sources":["../../src/managers/outline-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,MAAM,OAAO,cAAc;IAGzB;;;;OAIG;IACH,YAAY,QAAa;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,WAAW;QACT,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YACjD,kEAAkE;YAClE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;gBACrC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC3D,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,aAAqB;QAC/B,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QAE7C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,aAAqB;QAClC,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QAE7C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC1D,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,SAAiB;QAClC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,SAAiB;QAC/B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,KAAa;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,UAAkB;QACnC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;IACjE,CAAC;CACF"}