pdf-oxide 0.3.24 → 0.3.28

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,403 @@
1
+ /**
2
+ * Manager for PDF layers (Optional Content Groups - OCG)
3
+ *
4
+ * Provides methods to manage and interact with PDF layers which are used
5
+ * for optional content groups in PDF documents.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { LayerManager } from 'pdf_oxide';
10
+ *
11
+ * const doc = PdfDocument.open('document.pdf');
12
+ * const layerManager = new LayerManager(doc);
13
+ *
14
+ * // Check if document has layers
15
+ * if (layerManager.hasLayers()) {
16
+ * const layers = layerManager.getLayers();
17
+ * console.log(`Document has ${layers.length} layers`);
18
+ * }
19
+ * ```
20
+ */
21
+ export class LayerManager {
22
+ /**
23
+ * Creates a new LayerManager for the given document
24
+ * @param document - The PDF document
25
+ * @throws Error if document is null or undefined
26
+ */
27
+ constructor(document) {
28
+ if (!document) {
29
+ throw new Error('Document is required');
30
+ }
31
+ this._document = document;
32
+ // Performance optimization: cache layer data
33
+ this._layerCache = null;
34
+ this._hierarchyCache = null;
35
+ this._statisticsCache = null;
36
+ }
37
+ /**
38
+ * Clears the layer cache
39
+ * Useful when document content might have changed
40
+ */
41
+ clearCache() {
42
+ this._layerCache = null;
43
+ this._hierarchyCache = null;
44
+ this._statisticsCache = null;
45
+ }
46
+ /**
47
+ * Checks if document has layers
48
+ * @returns True if document contains layers
49
+ */
50
+ hasLayers() {
51
+ try {
52
+ return this.getLayerCount() > 0;
53
+ }
54
+ catch (error) {
55
+ return false;
56
+ }
57
+ }
58
+ /**
59
+ * Gets number of layers in document
60
+ * @returns Number of layers
61
+ */
62
+ getLayerCount() {
63
+ const layers = this.getLayers();
64
+ return layers.length;
65
+ }
66
+ /**
67
+ * Gets all layers in document
68
+ * @returns Array of layer objects with id, name, visible, etc.
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * const layers = manager.getLayers();
73
+ * layers.forEach(layer => {
74
+ * console.log(`Layer: ${layer.name} (visible: ${layer.visible})`);
75
+ * });
76
+ * ```
77
+ */
78
+ getLayers() {
79
+ // Performance optimization: cache layer data
80
+ if (this._layerCache !== null) {
81
+ return this._layerCache;
82
+ }
83
+ try {
84
+ const rawLayers = this._document.getLayers();
85
+ // Convert native LayerInfo to the expected JS format
86
+ const layers = rawLayers.map((layer) => ({
87
+ id: layer.id,
88
+ name: layer.name,
89
+ visible: layer.visible,
90
+ index: layer.index,
91
+ parentId: null, // OCGs don't have hierarchy in PDF spec
92
+ printable: true, // Default assumption
93
+ export: true, // Default assumption
94
+ }));
95
+ this._layerCache = layers;
96
+ return layers;
97
+ }
98
+ catch (error) {
99
+ return [];
100
+ }
101
+ }
102
+ /**
103
+ * Gets layer by name
104
+ * @param name - Layer name to find
105
+ * @returns Layer object or null if not found
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * const layer = manager.getLayerByName('Background');
110
+ * if (layer) {
111
+ * console.log(`Found layer: ${layer.name}`);
112
+ * }
113
+ * ```
114
+ */
115
+ getLayerByName(name) {
116
+ if (!name || typeof name !== 'string') {
117
+ throw new Error('Layer name must be a non-empty string');
118
+ }
119
+ const layers = this.getLayers();
120
+ return layers.find(layer => layer.name === name) || null;
121
+ }
122
+ /**
123
+ * Gets layer by ID
124
+ * @param id - Layer ID to find
125
+ * @returns Layer object or null if not found
126
+ */
127
+ getLayerById(id) {
128
+ if (!id || typeof id !== 'string') {
129
+ throw new Error('Layer ID must be a non-empty string');
130
+ }
131
+ const layers = this.getLayers();
132
+ return layers.find(layer => layer.id === id) || null;
133
+ }
134
+ /**
135
+ * Gets root-level layers (not nested under other layers)
136
+ * @returns Array of root-level layers
137
+ */
138
+ getRootLayers() {
139
+ const layers = this.getLayers();
140
+ return layers.filter(layer => !layer.parentId);
141
+ }
142
+ /**
143
+ * Gets the full layer hierarchy as a tree structure
144
+ * @returns Layer hierarchy tree
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * const hierarchy = manager.getLayerHierarchy();
149
+ * // { root: [{ name: 'Layer1', children: [...] }, ...] }
150
+ * ```
151
+ */
152
+ getLayerHierarchy() {
153
+ // Performance optimization: cache hierarchy
154
+ if (this._hierarchyCache !== null) {
155
+ return this._hierarchyCache;
156
+ }
157
+ const layers = this.getLayers();
158
+ const hierarchy = { root: [] };
159
+ // Build parent-child relationships
160
+ const layerMap = new Map(layers.map((l) => [l.id, { ...l, children: [] }]));
161
+ for (const layer of layerMap.values()) {
162
+ if (layer.parentId) {
163
+ const parent = layerMap.get(layer.parentId);
164
+ if (parent) {
165
+ parent.children.push(layer);
166
+ }
167
+ }
168
+ else {
169
+ hierarchy.root.push(layer);
170
+ }
171
+ }
172
+ this._hierarchyCache = hierarchy;
173
+ return hierarchy;
174
+ }
175
+ /**
176
+ * Gets child layers of a parent layer
177
+ * @param parentId - Parent layer ID
178
+ * @returns Array of child layers
179
+ */
180
+ getChildLayers(parentId) {
181
+ if (!parentId || typeof parentId !== 'string') {
182
+ throw new Error('Parent layer ID must be a non-empty string');
183
+ }
184
+ const layers = this.getLayers();
185
+ return layers.filter(layer => layer.parentId === parentId);
186
+ }
187
+ /**
188
+ * Gets parent layer of a layer
189
+ * @param layerId - Layer ID
190
+ * @returns Parent layer object or null if no parent
191
+ */
192
+ getParentLayer(layerId) {
193
+ if (!layerId || typeof layerId !== 'string') {
194
+ throw new Error('Layer ID must be a non-empty string');
195
+ }
196
+ const layer = this.getLayerById(layerId);
197
+ if (!layer || !layer.parentId) {
198
+ return null;
199
+ }
200
+ return this.getLayerById(layer.parentId);
201
+ }
202
+ /**
203
+ * Checks if a layer is visible
204
+ * @param layerId - Layer ID
205
+ * @returns True if layer is visible
206
+ */
207
+ isLayerVisible(layerId) {
208
+ const layer = this.getLayerById(layerId);
209
+ return layer ? layer.visible !== false : false;
210
+ }
211
+ /**
212
+ * Gets visibility chain from root to layer
213
+ * Shows visibility state of all parent layers
214
+ * @param layerId - Layer ID
215
+ * @returns Array of layers from root to target
216
+ */
217
+ getVisibilityChain(layerId) {
218
+ const chain = [];
219
+ let current = this.getLayerById(layerId);
220
+ while (current) {
221
+ chain.unshift(current);
222
+ current = current.parentId ? this.getLayerById(current.parentId) : null;
223
+ }
224
+ return chain;
225
+ }
226
+ /**
227
+ * Gets layer usage information
228
+ * @returns Layer usage { view, print, export }
229
+ */
230
+ getLayerUsages() {
231
+ const layers = this.getLayers();
232
+ return {
233
+ view: layers.filter(l => l.printable === false).length,
234
+ print: layers.filter(l => l.printable === true).length,
235
+ export: layers.filter(l => l.export !== false).length,
236
+ };
237
+ }
238
+ /**
239
+ * Gets statistics about layers
240
+ * @returns Layer statistics
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * const stats = manager.getLayerStatistics();
245
+ * console.log(`Total layers: ${stats.count}`);
246
+ * console.log(`Max depth: ${stats.maxDepth}`);
247
+ * ```
248
+ */
249
+ getLayerStatistics() {
250
+ // Performance optimization: cache statistics
251
+ if (this._statisticsCache !== null) {
252
+ return this._statisticsCache;
253
+ }
254
+ const layers = this.getLayers();
255
+ const hierarchy = this.getLayerHierarchy();
256
+ // Calculate max depth
257
+ const calculateDepth = (node, depth = 0) => {
258
+ if (!node.children || node.children.length === 0) {
259
+ return depth;
260
+ }
261
+ return Math.max(...node.children.map((child) => calculateDepth(child, depth + 1)));
262
+ };
263
+ let maxDepth = 0;
264
+ for (const rootLayer of hierarchy.root) {
265
+ maxDepth = Math.max(maxDepth, calculateDepth(rootLayer));
266
+ }
267
+ const stats = {
268
+ count: layers.length,
269
+ rootCount: hierarchy.root.length,
270
+ maxDepth,
271
+ visible: layers.filter(l => l.visible !== false).length,
272
+ hidden: layers.filter(l => l.visible === false).length,
273
+ printable: layers.filter(l => l.printable !== false).length,
274
+ exportable: layers.filter(l => l.export !== false).length,
275
+ hasConflicts: this._detectLayerConflicts().length > 0,
276
+ };
277
+ this._statisticsCache = stats;
278
+ return stats;
279
+ }
280
+ /**
281
+ * Gets layer dependencies
282
+ * @returns Layer dependencies map
283
+ * @private
284
+ */
285
+ getLayerDependencies() {
286
+ const layers = this.getLayers();
287
+ const dependencies = {};
288
+ layers.forEach(layer => {
289
+ dependencies[layer.id] = {
290
+ dependsOn: layer.dependsOn || [],
291
+ dependents: [],
292
+ };
293
+ });
294
+ // Build reverse dependencies
295
+ Object.entries(dependencies).forEach(([layerId, deps]) => {
296
+ deps.dependsOn.forEach((depId) => {
297
+ if (dependencies[depId]) {
298
+ dependencies[depId].dependents.push(layerId);
299
+ }
300
+ });
301
+ });
302
+ return dependencies;
303
+ }
304
+ /**
305
+ * Finds layers by pattern
306
+ * @param pattern - Pattern to match
307
+ * @returns Matching layers
308
+ *
309
+ * @example
310
+ * ```typescript
311
+ * const backgroundLayers = manager.findLayersByPattern(/background/i);
312
+ * ```
313
+ */
314
+ findLayersByPattern(pattern) {
315
+ if (!pattern) {
316
+ throw new Error('Pattern must be provided');
317
+ }
318
+ const regex = pattern instanceof RegExp ? pattern : new RegExp(pattern, 'i');
319
+ const layers = this.getLayers();
320
+ return layers.filter(layer => regex.test(layer.name) ||
321
+ (layer.description && regex.test(layer.description)));
322
+ }
323
+ /**
324
+ * Validates layer state for conflicts and issues
325
+ * @returns Validation result { isValid, issues }
326
+ */
327
+ validateLayerState() {
328
+ const issues = [];
329
+ const conflicts = this._detectLayerConflicts();
330
+ const cycles = this._detectLayerCycles();
331
+ if (conflicts.length > 0) {
332
+ issues.push(...conflicts.map(c => `Conflict: ${c}`));
333
+ }
334
+ if (cycles.length > 0) {
335
+ issues.push(...cycles.map(c => `Cycle detected: ${c}`));
336
+ }
337
+ return {
338
+ isValid: issues.length === 0,
339
+ issues,
340
+ };
341
+ }
342
+ /**
343
+ * Detects layer conflicts
344
+ * @returns Array of conflict descriptions
345
+ * @private
346
+ */
347
+ _detectLayerConflicts() {
348
+ const conflicts = [];
349
+ const layers = this.getLayers();
350
+ // Check for layers with same name
351
+ const nameMap = new Map();
352
+ layers.forEach(layer => {
353
+ if (nameMap.has(layer.name)) {
354
+ conflicts.push(`Duplicate layer name: ${layer.name}`);
355
+ }
356
+ nameMap.set(layer.name, layer.id);
357
+ });
358
+ // Check for orphaned layers
359
+ const parentIds = new Set(layers.map(l => l.parentId).filter(id => id));
360
+ const layerIds = new Set(layers.map(l => l.id));
361
+ parentIds.forEach(parentId => {
362
+ if (!layerIds.has(parentId)) {
363
+ conflicts.push(`Orphaned layer reference: ${parentId}`);
364
+ }
365
+ });
366
+ return conflicts;
367
+ }
368
+ /**
369
+ * Detects cycles in layer hierarchy
370
+ * @returns Array of cycle descriptions
371
+ * @private
372
+ */
373
+ _detectLayerCycles() {
374
+ const cycles = [];
375
+ const layers = this.getLayers();
376
+ const visited = new Set();
377
+ const stack = new Set();
378
+ const detectCycle = (layerId, path = []) => {
379
+ if (stack.has(layerId)) {
380
+ cycles.push(`Cycle detected: ${path.join(' -> ')} -> ${layerId}`);
381
+ return;
382
+ }
383
+ if (visited.has(layerId)) {
384
+ return;
385
+ }
386
+ visited.add(layerId);
387
+ stack.add(layerId);
388
+ path.push(layerId);
389
+ const layer = this.getLayerById(layerId);
390
+ if (layer && layer.parentId) {
391
+ detectCycle(layer.parentId, [...path]);
392
+ }
393
+ stack.delete(layerId);
394
+ };
395
+ layers.forEach(layer => {
396
+ if (!visited.has(layer.id)) {
397
+ detectCycle(layer.id);
398
+ }
399
+ });
400
+ return cycles;
401
+ }
402
+ }
403
+ //# sourceMappingURL=layer-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-manager.js","sourceRoot":"","sources":["../../src/managers/layer-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Manager for PDF document metadata
3
+ *
4
+ * Provides access to document metadata properties such as title, author,
5
+ * subject, keywords, creation and modification dates, and custom properties.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { MetadataManager } from 'pdf_oxide';
10
+ *
11
+ * const doc = PdfDocument.open('document.pdf');
12
+ * const metadataManager = new MetadataManager(doc);
13
+ *
14
+ * console.log(`Title: ${metadataManager.getTitle()}`);
15
+ * console.log(`Author: ${metadataManager.getAuthor()}`);
16
+ * console.log(`Created: ${metadataManager.getCreationDate()}`);
17
+ * ```
18
+ */
19
+ export interface MetadataComparison {
20
+ matching: Record<string, any>;
21
+ differing: Record<string, {
22
+ document1: any;
23
+ document2: any;
24
+ }>;
25
+ }
26
+ export interface ValidationResult {
27
+ isComplete: boolean;
28
+ issues: string[];
29
+ missingFieldCount: number;
30
+ }
31
+ export declare class MetadataManager {
32
+ private _document;
33
+ /**
34
+ * Creates a new MetadataManager for the given document
35
+ * @param document - The PDF document
36
+ * @throws Error if document is null or undefined
37
+ */
38
+ constructor(document: any);
39
+ /**
40
+ * Gets the document title
41
+ * @returns Document title or null if not set
42
+ */
43
+ getTitle(): string | null;
44
+ /**
45
+ * Gets the document author
46
+ * @returns Document author or null if not set
47
+ */
48
+ getAuthor(): string | null;
49
+ /**
50
+ * Gets the document subject
51
+ * @returns Document subject or null if not set
52
+ */
53
+ getSubject(): string | null;
54
+ /**
55
+ * Gets the document keywords
56
+ * @returns Array of document keywords (empty if none)
57
+ */
58
+ getKeywords(): string[];
59
+ /**
60
+ * Gets the document creator application
61
+ * @returns Creator application or null if not set
62
+ */
63
+ getCreator(): string | null;
64
+ /**
65
+ * Gets the document producer application
66
+ * @returns Producer application or null if not set
67
+ */
68
+ getProducer(): string | null;
69
+ /**
70
+ * Gets the document creation date
71
+ * @returns Creation date or null if not set
72
+ */
73
+ getCreationDate(): Date | null;
74
+ /**
75
+ * Gets the document modification date
76
+ * @returns Modification date or null if not set
77
+ */
78
+ getModificationDate(): Date | null;
79
+ /**
80
+ * Gets all metadata as a single object
81
+ * @returns Complete metadata object
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const metadata = manager.getAllMetadata();
86
+ * console.log(JSON.stringify(metadata, null, 2));
87
+ * ```
88
+ */
89
+ getAllMetadata(): Record<string, any>;
90
+ /**
91
+ * Checks if metadata has been set
92
+ * @returns True if any metadata is present
93
+ */
94
+ hasMetadata(): boolean;
95
+ /**
96
+ * Gets a summary of key metadata fields
97
+ * @returns Formatted metadata summary
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * console.log(manager.getMetadataSummary());
102
+ * // Output: Title: My Document, Author: John Doe, Pages: 42
103
+ * ```
104
+ */
105
+ getMetadataSummary(): string;
106
+ /**
107
+ * Checks if a specific keyword is present
108
+ * @param keyword - Keyword to search for
109
+ * @returns True if keyword is found
110
+ */
111
+ hasKeyword(keyword: string): boolean;
112
+ /**
113
+ * Gets the number of keywords
114
+ * @returns Keyword count
115
+ */
116
+ getKeywordCount(): number;
117
+ /**
118
+ * Gets metadata comparison with another document
119
+ * @param otherDocument - Document to compare with
120
+ * @returns Comparison object with matching and differing fields
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * const doc1 = PdfDocument.open('file1.pdf');
125
+ * const doc2 = PdfDocument.open('file2.pdf');
126
+ * const mgr1 = new MetadataManager(doc1);
127
+ * const comparison = mgr1.compareWith(doc2);
128
+ * console.log(comparison.matching); // Fields that match
129
+ * console.log(comparison.differing); // Fields that differ
130
+ * ```
131
+ */
132
+ compareWith(otherDocument: any): MetadataComparison;
133
+ /**
134
+ * Validates metadata completeness
135
+ * @returns Validation result with issues array
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * const validation = manager.validate();
140
+ * if (validation.isComplete) {
141
+ * console.log('Metadata is complete');
142
+ * } else {
143
+ * console.log('Issues:', validation.issues);
144
+ * }
145
+ * ```
146
+ */
147
+ validate(): ValidationResult;
148
+ }
149
+ //# sourceMappingURL=metadata-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-manager.d.ts","sourceRoot":"","sources":["../../src/managers/metadata-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,GAAG,CAAC;QAAC,SAAS,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAM;IAEvB;;;;OAIG;gBACS,QAAQ,EAAE,GAAG;IAOzB;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAQzB;;;OAGG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAQ1B;;;OAGG;IACH,UAAU,IAAI,MAAM,GAAG,IAAI;IAQ3B;;;OAGG;IACH,WAAW,IAAI,MAAM,EAAE;IAQvB;;;OAGG;IACH,UAAU,IAAI,MAAM,GAAG,IAAI;IAQ3B;;;OAGG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI;IAQ5B;;;OAGG;IACH,eAAe,IAAI,IAAI,GAAG,IAAI;IAQ9B;;;OAGG;IACH,mBAAmB,IAAI,IAAI,GAAG,IAAI;IAQlC;;;;;;;;;OASG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAQrC;;;OAGG;IACH,WAAW,IAAI,OAAO;IAKtB;;;;;;;;;OASG;IACH,kBAAkB,IAAI,MAAM;IA2B5B;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASpC;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,aAAa,EAAE,GAAG,GAAG,kBAAkB;IA+BnD;;;;;;;;;;;;;OAaG;IACH,QAAQ,IAAI,gBAAgB;CAe7B"}