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
@@ -1,317 +0,0 @@
1
- /**
2
- * Builder for document metadata configuration
3
- *
4
- * Configures document information like title, author, subject, keywords,
5
- * creation date, and custom properties.
6
- *
7
- * @example
8
- * ```typescript
9
- * import { MetadataBuilder } from 'pdf_oxide';
10
- *
11
- * const metadata = MetadataBuilder.create()
12
- * .title('My Document')
13
- * .author('John Doe')
14
- * .subject('Important Information')
15
- * .keywords(['document', 'important', 'example'])
16
- * .creator('MyApp v1.0')
17
- * .build();
18
- *
19
- * pdf.setMetadata(metadata);
20
- * ```
21
- */
22
-
23
- export interface Metadata {
24
- title?: string;
25
- author?: string;
26
- subject?: string;
27
- keywords: string[];
28
- creator?: string;
29
- producer: string;
30
- creationDate: Date;
31
- modificationDate: Date;
32
- customProperties: Record<string, string>;
33
- }
34
-
35
- export class MetadataBuilder {
36
- private _title?: string;
37
- private _author?: string;
38
- private _subject?: string;
39
- private _keywords: string[] = [];
40
- private _creator?: string;
41
- private _producer: string = 'PDF Oxide';
42
- private _creationDate: Date = new Date();
43
- private _modificationDate: Date = new Date();
44
- private _customProperties: Record<string, string> = {};
45
-
46
- /**
47
- * Creates a new MetadataBuilder instance
48
- * @private
49
- */
50
- private constructor() {}
51
-
52
- /**
53
- * Creates a new MetadataBuilder instance
54
- * @returns New builder instance
55
- */
56
- static create(): MetadataBuilder {
57
- return new MetadataBuilder();
58
- }
59
-
60
- /**
61
- * Sets the document title
62
- * @param title - The document title
63
- * @returns This builder for chaining
64
- *
65
- * @example
66
- * ```typescript
67
- * builder.title('Project Report 2024');
68
- * ```
69
- */
70
- title(title: string): this {
71
- if (typeof title !== 'string') {
72
- throw new Error('Title must be a string');
73
- }
74
- this._title = title.length > 0 ? title : undefined;
75
- return this;
76
- }
77
-
78
- /**
79
- * Sets the document author
80
- * @param author - The author name
81
- * @returns This builder for chaining
82
- *
83
- * @example
84
- * ```typescript
85
- * builder.author('Jane Doe');
86
- * ```
87
- */
88
- author(author: string): this {
89
- if (typeof author !== 'string') {
90
- throw new Error('Author must be a string');
91
- }
92
- this._author = author.length > 0 ? author : undefined;
93
- return this;
94
- }
95
-
96
- /**
97
- * Sets the document subject
98
- * @param subject - The document subject
99
- * @returns This builder for chaining
100
- *
101
- * @example
102
- * ```typescript
103
- * builder.subject('Annual Report');
104
- * ```
105
- */
106
- subject(subject: string): this {
107
- if (typeof subject !== 'string') {
108
- throw new Error('Subject must be a string');
109
- }
110
- this._subject = subject.length > 0 ? subject : undefined;
111
- return this;
112
- }
113
-
114
- /**
115
- * Sets document keywords
116
- * @param keywords - Array of keywords
117
- * @returns This builder for chaining
118
- *
119
- * @example
120
- * ```typescript
121
- * builder.keywords(['report', 'annual', 'financial']);
122
- * ```
123
- */
124
- keywords(keywords: string[]): this {
125
- if (!Array.isArray(keywords)) {
126
- throw new Error('Keywords must be an array');
127
- }
128
- if (!keywords.every((k) => typeof k === 'string')) {
129
- throw new Error('All keywords must be strings');
130
- }
131
- this._keywords = [...keywords];
132
- return this;
133
- }
134
-
135
- /**
136
- * Adds a single keyword
137
- * @param keyword - A keyword to add
138
- * @returns This builder for chaining
139
- *
140
- * @example
141
- * ```typescript
142
- * builder.addKeyword('Important').addKeyword('Urgent');
143
- * ```
144
- */
145
- addKeyword(keyword: string): this {
146
- if (typeof keyword !== 'string' || keyword.length === 0) {
147
- throw new Error('Keyword must be a non-empty string');
148
- }
149
- if (!this._keywords.includes(keyword)) {
150
- this._keywords.push(keyword);
151
- }
152
- return this;
153
- }
154
-
155
- /**
156
- * Sets the creator application name
157
- * @param creator - Name of the application that created the document
158
- * @returns This builder for chaining
159
- *
160
- * @example
161
- * ```typescript
162
- * builder.creator('MyApp v2.1.0');
163
- * ```
164
- */
165
- creator(creator: string): this {
166
- if (typeof creator !== 'string') {
167
- throw new Error('Creator must be a string');
168
- }
169
- this._creator = creator.length > 0 ? creator : undefined;
170
- return this;
171
- }
172
-
173
- /**
174
- * Sets the PDF producer (usually the library/tool that saved it)
175
- * @param producer - Name of the PDF producer
176
- * @returns This builder for chaining
177
- *
178
- * @example
179
- * ```typescript
180
- * builder.producer('PDF Oxide v0.3.2');
181
- * ```
182
- */
183
- producer(producer: string): this {
184
- if (typeof producer !== 'string') {
185
- throw new Error('Producer must be a string');
186
- }
187
- this._producer = producer.length > 0 ? producer : 'PDF Oxide';
188
- return this;
189
- }
190
-
191
- /**
192
- * Sets the document creation date
193
- * @param date - The creation date
194
- * @returns This builder for chaining
195
- *
196
- * @example
197
- * ```typescript
198
- * builder.creationDate(new Date('2024-01-15'));
199
- * ```
200
- */
201
- creationDate(date: Date): this {
202
- if (!(date instanceof Date)) {
203
- throw new Error('creationDate must be a Date object');
204
- }
205
- this._creationDate = new Date(date);
206
- return this;
207
- }
208
-
209
- /**
210
- * Sets the document modification date
211
- * @param date - The modification date
212
- * @returns This builder for chaining
213
- *
214
- * @example
215
- * ```typescript
216
- * builder.modificationDate(new Date());
217
- * ```
218
- */
219
- modificationDate(date: Date): this {
220
- if (!(date instanceof Date)) {
221
- throw new Error('modificationDate must be a Date object');
222
- }
223
- this._modificationDate = new Date(date);
224
- return this;
225
- }
226
-
227
- /**
228
- * Sets a custom metadata property
229
- * @param key - Property key
230
- * @param value - Property value
231
- * @returns This builder for chaining
232
- *
233
- * @example
234
- * ```typescript
235
- * builder.customProperty('Department', 'Engineering');
236
- * builder.customProperty('Classification', 'Confidential');
237
- * ```
238
- */
239
- customProperty(key: string, value: string): this {
240
- if (typeof key !== 'string' || key.length === 0) {
241
- throw new Error('Property key must be a non-empty string');
242
- }
243
- if (typeof value !== 'string') {
244
- throw new Error('Property value must be a string');
245
- }
246
- this._customProperties[key] = value;
247
- return this;
248
- }
249
-
250
- /**
251
- * Sets multiple custom metadata properties
252
- * @param properties - Object with key-value pairs
253
- * @returns This builder for chaining
254
- *
255
- * @example
256
- * ```typescript
257
- * builder.customProperties({
258
- * Department: 'Engineering',
259
- * Classification: 'Confidential',
260
- * ProjectCode: 'PROJ-2024-001'
261
- * });
262
- * ```
263
- */
264
- customProperties(properties: Record<string, string>): this {
265
- if (typeof properties !== 'object' || properties === null) {
266
- throw new Error('customProperties must be an object');
267
- }
268
- for (const [key, value] of Object.entries(properties)) {
269
- if (typeof value !== 'string') {
270
- throw new Error(`Custom property "${key}" value must be a string`);
271
- }
272
- this._customProperties[key] = value;
273
- }
274
- return this;
275
- }
276
-
277
- /**
278
- * Builds and returns the metadata object
279
- * @returns Immutable metadata object
280
- *
281
- * @example
282
- * ```typescript
283
- * const metadata = builder.build();
284
- * ```
285
- */
286
- build(): Metadata {
287
- return {
288
- title: this._title,
289
- author: this._author,
290
- subject: this._subject,
291
- keywords: [...this._keywords],
292
- creator: this._creator,
293
- producer: this._producer,
294
- creationDate: new Date(this._creationDate),
295
- modificationDate: new Date(this._modificationDate),
296
- customProperties: { ...this._customProperties },
297
- };
298
- }
299
-
300
- /**
301
- * Creates metadata with current timestamp
302
- * @returns This builder with current modification date
303
- */
304
- withCurrentDate(): this {
305
- this._modificationDate = new Date();
306
- return this;
307
- }
308
- }
309
-
310
- /**
311
- * Create a new MetadataBuilder with static factory
312
- * @deprecated Use MetadataBuilder.create() instead
313
- * @returns New builder instance
314
- */
315
- export function createMetadataBuilder(): MetadataBuilder {
316
- return MetadataBuilder.create();
317
- }
@@ -1,386 +0,0 @@
1
- /**
2
- * Fluent builder for creating PDF documents with configuration
3
- *
4
- * Provides a fluent API for configuring PDF document metadata and options
5
- * before document creation.
6
- *
7
- * @example
8
- * ```typescript
9
- * import { PdfBuilder } from 'pdf_oxide';
10
- *
11
- * const pdf = PdfBuilder.create()
12
- * .title('My Document')
13
- * .author('John Doe')
14
- * .subject('PDF Creation')
15
- * .keywords(['pdf', 'document', 'example'])
16
- * .fromMarkdown('# Content\n\nMarkdown text here');
17
- *
18
- * pdf.save('output.pdf');
19
- * ```
20
- */
21
-
22
- interface PdfBuilderConfig {
23
- title?: string;
24
- author?: string;
25
- subject?: string;
26
- keywords: string[];
27
- pageSize?: string;
28
- margins: {
29
- top: number;
30
- right: number;
31
- bottom: number;
32
- left: number;
33
- };
34
- }
35
-
36
- export class PdfBuilder {
37
- private _title?: string;
38
- private _author?: string;
39
- private _subject?: string;
40
- private _keywords: string[] = [];
41
- private _pageSize?: string;
42
- private _margins: { top: number; right: number; bottom: number; left: number } = {
43
- top: 36,
44
- bottom: 36,
45
- left: 36,
46
- right: 36,
47
- };
48
-
49
- /**
50
- * Creates a new PdfBuilder instance
51
- * @private
52
- */
53
- private constructor() {}
54
-
55
- /**
56
- * Creates a new PdfBuilder instance
57
- * @returns New builder instance
58
- *
59
- * @example
60
- * ```typescript
61
- * const builder = PdfBuilder.create();
62
- * ```
63
- */
64
- static create(): PdfBuilder {
65
- return new PdfBuilder();
66
- }
67
-
68
- /**
69
- * Sets the document title
70
- * @param title - The document title
71
- * @returns This builder for chaining
72
- *
73
- * @example
74
- * ```typescript
75
- * builder.title('My Document Title');
76
- * ```
77
- */
78
- title(title: string): this {
79
- if (typeof title !== 'string' || title.length === 0) {
80
- throw new Error('Title must be a non-empty string');
81
- }
82
- this._title = title;
83
- return this;
84
- }
85
-
86
- /**
87
- * Sets the document author
88
- * @param author - The author name
89
- * @returns This builder for chaining
90
- *
91
- * @example
92
- * ```typescript
93
- * builder.author('Jane Doe');
94
- * ```
95
- */
96
- author(author: string): this {
97
- if (typeof author !== 'string' || author.length === 0) {
98
- throw new Error('Author must be a non-empty string');
99
- }
100
- this._author = author;
101
- return this;
102
- }
103
-
104
- /**
105
- * Sets the document subject
106
- * @param subject - The document subject
107
- * @returns This builder for chaining
108
- *
109
- * @example
110
- * ```typescript
111
- * builder.subject('Technical Documentation');
112
- * ```
113
- */
114
- subject(subject: string): this {
115
- if (typeof subject !== 'string' || subject.length === 0) {
116
- throw new Error('Subject must be a non-empty string');
117
- }
118
- this._subject = subject;
119
- return this;
120
- }
121
-
122
- /**
123
- * Sets the document keywords
124
- * @param keywords - Array of keywords
125
- * @returns This builder for chaining
126
- *
127
- * @example
128
- * ```typescript
129
- * builder.keywords(['PDF', 'Document', 'Generation']);
130
- * ```
131
- */
132
- keywords(keywords: string[]): this {
133
- if (!Array.isArray(keywords)) {
134
- throw new Error('Keywords must be an array');
135
- }
136
- if (!keywords.every((k) => typeof k === 'string')) {
137
- throw new Error('All keywords must be strings');
138
- }
139
- this._keywords = keywords;
140
- return this;
141
- }
142
-
143
- /**
144
- * Adds a single keyword to the document
145
- * @param keyword - A keyword to add
146
- * @returns This builder for chaining
147
- *
148
- * @example
149
- * ```typescript
150
- * builder.addKeyword('Important').addKeyword('Urgent');
151
- * ```
152
- */
153
- addKeyword(keyword: string): this {
154
- if (typeof keyword !== 'string' || keyword.length === 0) {
155
- throw new Error('Keyword must be a non-empty string');
156
- }
157
- this._keywords.push(keyword);
158
- return this;
159
- }
160
-
161
- /**
162
- * Sets the default page size
163
- * @param pageSize - Page size name (e.g., 'Letter', 'A4', 'Legal')
164
- * @returns This builder for chaining
165
- *
166
- * @example
167
- * ```typescript
168
- * builder.pageSize('A4');
169
- * ```
170
- */
171
- pageSize(pageSize: string): this {
172
- const validSizes = ['Letter', 'Legal', 'A4', 'A3', 'A5', 'B4', 'B5'];
173
- if (!validSizes.includes(pageSize)) {
174
- throw new Error(`Invalid page size. Must be one of: ${validSizes.join(', ')}`);
175
- }
176
- this._pageSize = pageSize;
177
- return this;
178
- }
179
-
180
- /**
181
- * Sets page margins
182
- * @param top - Top margin in points
183
- * @param right - Right margin in points
184
- * @param bottom - Bottom margin in points
185
- * @param left - Left margin in points
186
- * @returns This builder for chaining
187
- *
188
- * @example
189
- * ```typescript
190
- * builder.margins(36, 36, 36, 36); // 0.5 inches on all sides
191
- * ```
192
- */
193
- margins(top: number, right: number, bottom: number, left: number): this {
194
- if (![top, right, bottom, left].every((m) => typeof m === 'number' && m >= 0)) {
195
- throw new Error('All margins must be non-negative numbers');
196
- }
197
- this._margins = { top, right, bottom, left };
198
- return this;
199
- }
200
-
201
- /**
202
- * Creates a PDF document from Markdown content
203
- * @param markdown - Markdown formatted content
204
- * @returns The created PDF document
205
- * @throws PdfError if PDF creation fails
206
- *
207
- * @example
208
- * ```typescript
209
- * const pdf = builder.fromMarkdown('# Title\n\nContent here');
210
- * ```
211
- */
212
- fromMarkdown(markdown: string): any {
213
- // Note: Using any for Pdf type to avoid circular dependency
214
- const { Pdf } = require('../index.js');
215
-
216
- if (typeof markdown !== 'string') {
217
- throw new Error('Markdown must be a string');
218
- }
219
-
220
- const pdf = Pdf.fromMarkdown(markdown);
221
- this._applyConfiguration(pdf);
222
- return pdf;
223
- }
224
-
225
- /**
226
- * Creates a PDF document from HTML content
227
- * @param html - HTML formatted content
228
- * @returns The created PDF document
229
- * @throws PdfError if PDF creation fails
230
- *
231
- * @example
232
- * ```typescript
233
- * const pdf = builder.fromHtml('<h1>Title</h1><p>Content</p>');
234
- * ```
235
- */
236
- fromHtml(html: string): any {
237
- const { Pdf } = require('../index.js');
238
-
239
- if (typeof html !== 'string') {
240
- throw new Error('HTML must be a string');
241
- }
242
-
243
- const pdf = Pdf.fromHtml(html);
244
- this._applyConfiguration(pdf);
245
- return pdf;
246
- }
247
-
248
- /**
249
- * Creates a PDF document from plain text content
250
- * @param text - Plain text content
251
- * @returns The created PDF document
252
- * @throws PdfError if PDF creation fails
253
- *
254
- * @example
255
- * ```typescript
256
- * const pdf = builder.fromText('Plain text content');
257
- * ```
258
- */
259
- fromText(text: string): any {
260
- const { Pdf } = require('../index.js');
261
-
262
- if (typeof text !== 'string') {
263
- throw new Error('Text must be a string');
264
- }
265
-
266
- const pdf = Pdf.fromText(text);
267
- this._applyConfiguration(pdf);
268
- return pdf;
269
- }
270
-
271
- /**
272
- * Asynchronously creates a PDF document from Markdown content
273
- * @param markdown - Markdown formatted content
274
- * @returns Promise that resolves to the created PDF document
275
- * @throws PdfError if PDF creation fails
276
- *
277
- * @example
278
- * ```typescript
279
- * const pdf = await builder.fromMarkdownAsync('# Title\n\nContent');
280
- * ```
281
- */
282
- async fromMarkdownAsync(markdown: string): Promise<any> {
283
- const { Pdf } = require('../index.js');
284
-
285
- if (typeof markdown !== 'string') {
286
- throw new Error('Markdown must be a string');
287
- }
288
-
289
- const pdf = await Pdf.fromMarkdownAsync(markdown);
290
- this._applyConfiguration(pdf);
291
- return pdf;
292
- }
293
-
294
- /**
295
- * Asynchronously creates a PDF document from HTML content
296
- * @param html - HTML formatted content
297
- * @returns Promise that resolves to the created PDF document
298
- * @throws PdfError if PDF creation fails
299
- *
300
- * @example
301
- * ```typescript
302
- * const pdf = await builder.fromHtmlAsync('<h1>Title</h1>');
303
- * ```
304
- */
305
- async fromHtmlAsync(html: string): Promise<any> {
306
- const { Pdf } = require('../index.js');
307
-
308
- if (typeof html !== 'string') {
309
- throw new Error('HTML must be a string');
310
- }
311
-
312
- const pdf = await Pdf.fromHtmlAsync(html);
313
- this._applyConfiguration(pdf);
314
- return pdf;
315
- }
316
-
317
- /**
318
- * Asynchronously creates a PDF document from plain text content
319
- * @param text - Plain text content
320
- * @returns Promise that resolves to the created PDF document
321
- * @throws PdfError if PDF creation fails
322
- *
323
- * @example
324
- * ```typescript
325
- * const pdf = await builder.fromTextAsync('Plain text');
326
- * ```
327
- */
328
- async fromTextAsync(text: string): Promise<any> {
329
- const { Pdf } = require('../index.js');
330
-
331
- if (typeof text !== 'string') {
332
- throw new Error('Text must be a string');
333
- }
334
-
335
- const pdf = await Pdf.fromTextAsync(text);
336
- this._applyConfiguration(pdf);
337
- return pdf;
338
- }
339
-
340
- /**
341
- * Gets the current configuration as a plain object
342
- * @returns Configuration object with title, author, subject, keywords
343
- *
344
- * @private
345
- */
346
- private _getConfiguration(): PdfBuilderConfig {
347
- return {
348
- title: this._title,
349
- author: this._author,
350
- subject: this._subject,
351
- keywords: this._keywords,
352
- pageSize: this._pageSize,
353
- margins: this._margins,
354
- };
355
- }
356
-
357
- /**
358
- * Applies builder configuration to a PDF document
359
- * @param pdf - The PDF document to configure
360
- * @private
361
- */
362
- private _applyConfiguration(pdf: any): void {
363
- // Apply metadata properties if set
364
- if (this._title !== undefined) {
365
- pdf.title = this._title;
366
- }
367
- if (this._author !== undefined) {
368
- pdf.author = this._author;
369
- }
370
- if (this._subject !== undefined) {
371
- pdf.subject = this._subject;
372
- }
373
- if (this._keywords.length > 0) {
374
- pdf.keywords = [...this._keywords];
375
- }
376
- }
377
- }
378
-
379
- /**
380
- * Create a new PdfBuilder with static factory
381
- * @deprecated Use PdfBuilder.create() instead
382
- * @returns New builder instance
383
- */
384
- export function createPdfBuilder(): PdfBuilder {
385
- return PdfBuilder.create();
386
- }