pdfdancer-client-typescript 2.0.6 → 2.0.7
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.
- package/README.md +10 -4
- package/dist/models.d.ts +9 -2
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +23 -1
- package/dist/models.js.map +1 -1
- package/dist/pdfdancer_v1.d.ts +5 -0
- package/dist/pdfdancer_v1.d.ts.map +1 -1
- package/dist/pdfdancer_v1.js +54 -1
- package/dist/pdfdancer_v1.js.map +1 -1
- package/dist/types.d.ts +38 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +158 -2
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/__tests__/assertions.d.ts +0 -2
- package/dist/__tests__/assertions.d.ts.map +0 -1
- package/dist/__tests__/assertions.js +0 -11
- package/dist/__tests__/assertions.js.map +0 -1
- package/dist/__tests__/e2e/pdf-assertions.d.ts +0 -36
- package/dist/__tests__/e2e/pdf-assertions.d.ts.map +0 -1
- package/dist/__tests__/e2e/pdf-assertions.js +0 -218
- package/dist/__tests__/e2e/pdf-assertions.js.map +0 -1
- package/dist/__tests__/e2e/test-drawing-helpers.d.ts +0 -148
- package/dist/__tests__/e2e/test-drawing-helpers.d.ts.map +0 -1
- package/dist/__tests__/e2e/test-drawing-helpers.js +0 -343
- package/dist/__tests__/e2e/test-drawing-helpers.js.map +0 -1
- package/dist/__tests__/e2e/test-helpers.d.ts +0 -44
- package/dist/__tests__/e2e/test-helpers.d.ts.map +0 -1
- package/dist/__tests__/e2e/test-helpers.js +0 -233
- package/dist/__tests__/e2e/test-helpers.js.map +0 -1
- package/dist/client-v1.d.ts +0 -157
- package/dist/client-v1.d.ts.map +0 -1
- package/dist/client-v1.js +0 -576
- package/dist/client-v1.js.map +0 -1
- package/dist/client-v2.d.ts +0 -129
- package/dist/client-v2.d.ts.map +0 -1
- package/dist/client-v2.js +0 -696
- package/dist/client-v2.js.map +0 -1
|
@@ -1,343 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Test Drawing Helpers
|
|
4
|
-
*
|
|
5
|
-
* Utilities for drawing coordinate grids and bounding boxes on PDFs
|
|
6
|
-
* to help with visual debugging and testing.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.drawCoordinateGrid = drawCoordinateGrid;
|
|
10
|
-
exports.drawBoundingBox = drawBoundingBox;
|
|
11
|
-
exports.drawBoundingBoxes = drawBoundingBoxes;
|
|
12
|
-
exports.drawCrosshair = drawCrosshair;
|
|
13
|
-
exports.highlightText = highlightText;
|
|
14
|
-
exports.drawArrow = drawArrow;
|
|
15
|
-
const index_1 = require("../../index");
|
|
16
|
-
/**
|
|
17
|
-
* Draws a coordinate grid on the specified page of a PDF.
|
|
18
|
-
* Useful for understanding coordinate systems and positioning.
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* await drawCoordinateGrid(pdf, {
|
|
23
|
-
* pageIndex: 0,
|
|
24
|
-
* spacing: 50,
|
|
25
|
-
* majorInterval: 100
|
|
26
|
-
* });
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
async function drawCoordinateGrid(pdf, options = {}) {
|
|
30
|
-
let { startX = 0, startY = 0, endX = 595, // A4 width in points
|
|
31
|
-
endY = 842, // A4 height in points
|
|
32
|
-
spacing = 50, majorInterval = 100, gridColor = new index_1.Color(220, 220, 220), majorGridColor = new index_1.Color(180, 180, 180), labelColor = new index_1.Color(100, 100, 100), fontSize = 8, pageIndex = 0, showLabels = true } = options;
|
|
33
|
-
// Get page size if available and not explicitly set
|
|
34
|
-
if (options.endX === undefined || options.endY === undefined) {
|
|
35
|
-
const pages = await pdf.pages();
|
|
36
|
-
if (pages.length > pageIndex) {
|
|
37
|
-
const pageSize = pages[pageIndex].pageSize;
|
|
38
|
-
if (pageSize) {
|
|
39
|
-
endX = options.endX ?? pageSize.width ?? endX;
|
|
40
|
-
endY = options.endY ?? pageSize.height ?? endY;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Draw vertical lines
|
|
45
|
-
for (let x = startX; x <= endX; x += spacing) {
|
|
46
|
-
const isMajor = x % majorInterval === 0;
|
|
47
|
-
const color = isMajor ? majorGridColor : gridColor;
|
|
48
|
-
const width = isMajor ? 0.5 : 0.25;
|
|
49
|
-
await pdf.newPath()
|
|
50
|
-
.moveTo(x, startY)
|
|
51
|
-
.lineTo(x, endY)
|
|
52
|
-
.strokeColor(color)
|
|
53
|
-
.strokeWidth(width)
|
|
54
|
-
.at(pageIndex, x, startY)
|
|
55
|
-
.add();
|
|
56
|
-
// Add labels for major lines
|
|
57
|
-
if (isMajor && showLabels) {
|
|
58
|
-
await pdf.newParagraph()
|
|
59
|
-
.text(`${x}`, labelColor)
|
|
60
|
-
.font(index_1.StandardFonts.HELVETICA, fontSize)
|
|
61
|
-
.at(pageIndex, x - 10, startY + 5)
|
|
62
|
-
.add();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
// Draw horizontal lines
|
|
66
|
-
for (let y = startY; y <= endY; y += spacing) {
|
|
67
|
-
const isMajor = y % majorInterval === 0;
|
|
68
|
-
const color = isMajor ? majorGridColor : gridColor;
|
|
69
|
-
const width = isMajor ? 0.5 : 0.25;
|
|
70
|
-
await pdf.newPath()
|
|
71
|
-
.moveTo(startX, y)
|
|
72
|
-
.lineTo(endX, y)
|
|
73
|
-
.strokeColor(color)
|
|
74
|
-
.strokeWidth(width)
|
|
75
|
-
.at(pageIndex, startX, y)
|
|
76
|
-
.add();
|
|
77
|
-
// Add labels for major lines
|
|
78
|
-
if (isMajor && showLabels) {
|
|
79
|
-
await pdf.newParagraph()
|
|
80
|
-
.text(`${y}`, labelColor)
|
|
81
|
-
.font(index_1.StandardFonts.HELVETICA, fontSize)
|
|
82
|
-
.at(pageIndex, startX + 5, y - 2)
|
|
83
|
-
.add();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
// Draw origin marker (0, 0) if it's within the grid bounds
|
|
87
|
-
if (startX <= 0 && endX >= 0 && startY <= 0 && endY >= 0) {
|
|
88
|
-
await pdf.newPath()
|
|
89
|
-
.moveTo(-5, 0)
|
|
90
|
-
.lineTo(5, 0)
|
|
91
|
-
.strokeColor(new index_1.Color(255, 0, 0))
|
|
92
|
-
.strokeWidth(2)
|
|
93
|
-
.at(pageIndex, -5, 0)
|
|
94
|
-
.add();
|
|
95
|
-
await pdf.newPath()
|
|
96
|
-
.moveTo(0, -5)
|
|
97
|
-
.lineTo(0, 5)
|
|
98
|
-
.strokeColor(new index_1.Color(255, 0, 0))
|
|
99
|
-
.strokeWidth(2)
|
|
100
|
-
.at(pageIndex, 0, -5)
|
|
101
|
-
.add();
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Draws a bounding box around a text element, paragraph, or any object with position information.
|
|
106
|
-
*
|
|
107
|
-
* @example
|
|
108
|
-
* ```typescript
|
|
109
|
-
* const paragraph = await pdf.selectParagraph();
|
|
110
|
-
* await drawBoundingBox(pdf, paragraph, {
|
|
111
|
-
* color: new Color(255, 0, 0),
|
|
112
|
-
* showDimensions: true
|
|
113
|
-
* });
|
|
114
|
-
* ```
|
|
115
|
-
*/
|
|
116
|
-
async function drawBoundingBox(pdf, objectRef, options = {}) {
|
|
117
|
-
const { color = new index_1.Color(255, 0, 0), lineWidth = 1, dashPattern, showCorners = true, cornerSize = 3, showDimensions = true } = options;
|
|
118
|
-
const position = objectRef.position;
|
|
119
|
-
if (!position || !position.boundingRect) {
|
|
120
|
-
console.warn('Object has no bounding rectangle, skipping bounding box');
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
const rect = position.boundingRect;
|
|
124
|
-
const pageIndex = position.pageIndex ?? 0;
|
|
125
|
-
const x = rect.x;
|
|
126
|
-
const y = rect.y;
|
|
127
|
-
const width = rect.width;
|
|
128
|
-
const height = rect.height;
|
|
129
|
-
// Draw the main bounding box rectangle
|
|
130
|
-
const pathBuilder = pdf.newPath()
|
|
131
|
-
.moveTo(x, y)
|
|
132
|
-
.lineTo(x + width, y)
|
|
133
|
-
.lineTo(x + width, y + height)
|
|
134
|
-
.lineTo(x, y + height)
|
|
135
|
-
.lineTo(x, y)
|
|
136
|
-
.strokeColor(color)
|
|
137
|
-
.strokeWidth(lineWidth)
|
|
138
|
-
.at(pageIndex, x, y);
|
|
139
|
-
if (dashPattern) {
|
|
140
|
-
pathBuilder.dashPattern(dashPattern);
|
|
141
|
-
}
|
|
142
|
-
await pathBuilder.add();
|
|
143
|
-
// Draw corner markers
|
|
144
|
-
if (showCorners) {
|
|
145
|
-
const corners = [
|
|
146
|
-
{ x, y }, // Bottom-left
|
|
147
|
-
{ x: x + width, y }, // Bottom-right
|
|
148
|
-
{ x: x + width, y: y + height }, // Top-right
|
|
149
|
-
{ x, y: y + height } // Top-left
|
|
150
|
-
];
|
|
151
|
-
for (const corner of corners) {
|
|
152
|
-
// Horizontal line
|
|
153
|
-
await pdf.newPath()
|
|
154
|
-
.moveTo(corner.x - cornerSize, corner.y)
|
|
155
|
-
.lineTo(corner.x + cornerSize, corner.y)
|
|
156
|
-
.strokeColor(color)
|
|
157
|
-
.strokeWidth(lineWidth + 0.5)
|
|
158
|
-
.at(pageIndex, corner.x - cornerSize, corner.y)
|
|
159
|
-
.add();
|
|
160
|
-
// Vertical line
|
|
161
|
-
await pdf.newPath()
|
|
162
|
-
.moveTo(corner.x, corner.y - cornerSize)
|
|
163
|
-
.lineTo(corner.x, corner.y + cornerSize)
|
|
164
|
-
.strokeColor(color)
|
|
165
|
-
.strokeWidth(lineWidth + 0.5)
|
|
166
|
-
.at(pageIndex, corner.x, corner.y - cornerSize)
|
|
167
|
-
.add();
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// Draw dimensions label
|
|
171
|
-
if (showDimensions) {
|
|
172
|
-
const dimensionText = `${width.toFixed(1)}×${height.toFixed(1)}`;
|
|
173
|
-
const labelX = x + width / 2 - 15;
|
|
174
|
-
const labelY = y - 10;
|
|
175
|
-
await pdf.newParagraph()
|
|
176
|
-
.text(dimensionText, color)
|
|
177
|
-
.font(index_1.StandardFonts.HELVETICA, 7)
|
|
178
|
-
.at(pageIndex, labelX, labelY)
|
|
179
|
-
.add();
|
|
180
|
-
// Position label
|
|
181
|
-
const positionText = `(${x.toFixed(1)}, ${y.toFixed(1)})`;
|
|
182
|
-
await pdf.newParagraph()
|
|
183
|
-
.text(positionText, color)
|
|
184
|
-
.font(index_1.StandardFonts.HELVETICA, 7)
|
|
185
|
-
.at(pageIndex, x, y + height + 2)
|
|
186
|
-
.add();
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Draws bounding boxes around all objects of a specific type on a page.
|
|
191
|
-
*
|
|
192
|
-
* @example
|
|
193
|
-
* ```typescript
|
|
194
|
-
* // Draw boxes around all paragraphs
|
|
195
|
-
* const paragraphs = await pdf.selectParagraphs();
|
|
196
|
-
* await drawBoundingBoxes(pdf, paragraphs, {
|
|
197
|
-
* color: new Color(0, 255, 0)
|
|
198
|
-
* });
|
|
199
|
-
* ```
|
|
200
|
-
*/
|
|
201
|
-
async function drawBoundingBoxes(pdf, objectRefs, options = {}) {
|
|
202
|
-
for (const objectRef of objectRefs) {
|
|
203
|
-
await drawBoundingBox(pdf, objectRef, options);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Draws a cross-hair marker at specific coordinates.
|
|
208
|
-
* Useful for marking test points.
|
|
209
|
-
*
|
|
210
|
-
* @example
|
|
211
|
-
* ```typescript
|
|
212
|
-
* await drawCrosshair(pdf, 100, 200, {
|
|
213
|
-
* color: new Color(0, 0, 255),
|
|
214
|
-
* size: 10
|
|
215
|
-
* });
|
|
216
|
-
* ```
|
|
217
|
-
*/
|
|
218
|
-
async function drawCrosshair(pdf, x, y, options = {}) {
|
|
219
|
-
const { color = new index_1.Color(255, 0, 0), size = 5, lineWidth = 1, pageIndex = 0, label } = options;
|
|
220
|
-
// Horizontal line
|
|
221
|
-
await pdf.newPath()
|
|
222
|
-
.moveTo(x - size, y)
|
|
223
|
-
.lineTo(x + size, y)
|
|
224
|
-
.strokeColor(color)
|
|
225
|
-
.strokeWidth(lineWidth)
|
|
226
|
-
.at(pageIndex, x - size, y)
|
|
227
|
-
.add();
|
|
228
|
-
// Vertical line
|
|
229
|
-
await pdf.newPath()
|
|
230
|
-
.moveTo(x, y - size)
|
|
231
|
-
.lineTo(x, y + size)
|
|
232
|
-
.strokeColor(color)
|
|
233
|
-
.strokeWidth(lineWidth)
|
|
234
|
-
.at(pageIndex, x, y - size)
|
|
235
|
-
.add();
|
|
236
|
-
// Circle
|
|
237
|
-
await pdf.newPath()
|
|
238
|
-
.moveTo(x + size, y)
|
|
239
|
-
.bezierTo(x + size, y + size * 0.55, x + size * 0.55, y + size, x, y + size)
|
|
240
|
-
.bezierTo(x - size * 0.55, y + size, x - size, y + size * 0.55, x - size, y)
|
|
241
|
-
.bezierTo(x - size, y - size * 0.55, x - size * 0.55, y - size, x, y - size)
|
|
242
|
-
.bezierTo(x + size * 0.55, y - size, x + size, y - size * 0.55, x + size, y)
|
|
243
|
-
.strokeColor(color)
|
|
244
|
-
.strokeWidth(lineWidth)
|
|
245
|
-
.at(pageIndex, x - size, y - size)
|
|
246
|
-
.add();
|
|
247
|
-
// Add label if provided
|
|
248
|
-
if (label) {
|
|
249
|
-
await pdf.newParagraph()
|
|
250
|
-
.text(label, color)
|
|
251
|
-
.font(index_1.StandardFonts.HELVETICA, 8)
|
|
252
|
-
.at(pageIndex, x + size + 2, y - 3)
|
|
253
|
-
.add();
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Highlights the text content of a text object with a semi-transparent background.
|
|
258
|
-
*
|
|
259
|
-
* @example
|
|
260
|
-
* ```typescript
|
|
261
|
-
* const textLine = await pdf.selectTextLine();
|
|
262
|
-
* await highlightText(pdf, textLine, {
|
|
263
|
-
* color: new Color(255, 255, 0, 128) // Yellow with 50% transparency
|
|
264
|
-
* });
|
|
265
|
-
* ```
|
|
266
|
-
*/
|
|
267
|
-
async function highlightText(pdf, textObjectRef, options = {}) {
|
|
268
|
-
const { color = new index_1.Color(255, 255, 0, 128), // Yellow with transparency
|
|
269
|
-
padding = 2 } = options;
|
|
270
|
-
const position = textObjectRef.position;
|
|
271
|
-
if (!position || !position.boundingRect) {
|
|
272
|
-
console.warn('Text object has no bounding rectangle, skipping highlight');
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
const rect = position.boundingRect;
|
|
276
|
-
const pageIndex = position.pageIndex ?? 0;
|
|
277
|
-
await pdf.newPath()
|
|
278
|
-
.moveTo(rect.x - padding, rect.y - padding)
|
|
279
|
-
.lineTo(rect.x + rect.width + padding, rect.y - padding)
|
|
280
|
-
.lineTo(rect.x + rect.width + padding, rect.y + rect.height + padding)
|
|
281
|
-
.lineTo(rect.x - padding, rect.y + rect.height + padding)
|
|
282
|
-
.lineTo(rect.x - padding, rect.y - padding)
|
|
283
|
-
.fillColor(color)
|
|
284
|
-
.at(pageIndex, rect.x - padding, rect.y - padding)
|
|
285
|
-
.add();
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Draws an arrow between two points.
|
|
289
|
-
* Useful for indicating relationships or directions in test visualizations.
|
|
290
|
-
*
|
|
291
|
-
* @example
|
|
292
|
-
* ```typescript
|
|
293
|
-
* await drawArrow(pdf, 100, 100, 200, 200, {
|
|
294
|
-
* color: new Color(0, 0, 255),
|
|
295
|
-
* label: "Move direction"
|
|
296
|
-
* });
|
|
297
|
-
* ```
|
|
298
|
-
*/
|
|
299
|
-
async function drawArrow(pdf, fromX, fromY, toX, toY, options = {}) {
|
|
300
|
-
const { color = new index_1.Color(0, 0, 255), lineWidth = 1.5, arrowSize = 8, pageIndex = 0, label } = options;
|
|
301
|
-
// Draw main line
|
|
302
|
-
await pdf.newPath()
|
|
303
|
-
.moveTo(fromX, fromY)
|
|
304
|
-
.lineTo(toX, toY)
|
|
305
|
-
.strokeColor(color)
|
|
306
|
-
.strokeWidth(lineWidth)
|
|
307
|
-
.at(pageIndex, Math.min(fromX, toX), Math.min(fromY, toY))
|
|
308
|
-
.add();
|
|
309
|
-
// Calculate arrow head angle
|
|
310
|
-
const angle = Math.atan2(toY - fromY, toX - fromX);
|
|
311
|
-
const arrowAngle = Math.PI / 6; // 30 degrees
|
|
312
|
-
// Left arrow line
|
|
313
|
-
const leftX = toX - arrowSize * Math.cos(angle - arrowAngle);
|
|
314
|
-
const leftY = toY - arrowSize * Math.sin(angle - arrowAngle);
|
|
315
|
-
await pdf.newPath()
|
|
316
|
-
.moveTo(toX, toY)
|
|
317
|
-
.lineTo(leftX, leftY)
|
|
318
|
-
.strokeColor(color)
|
|
319
|
-
.strokeWidth(lineWidth)
|
|
320
|
-
.at(pageIndex, Math.min(toX, leftX), Math.min(toY, leftY))
|
|
321
|
-
.add();
|
|
322
|
-
// Right arrow line
|
|
323
|
-
const rightX = toX - arrowSize * Math.cos(angle + arrowAngle);
|
|
324
|
-
const rightY = toY - arrowSize * Math.sin(angle + arrowAngle);
|
|
325
|
-
await pdf.newPath()
|
|
326
|
-
.moveTo(toX, toY)
|
|
327
|
-
.lineTo(rightX, rightY)
|
|
328
|
-
.strokeColor(color)
|
|
329
|
-
.strokeWidth(lineWidth)
|
|
330
|
-
.at(pageIndex, Math.min(toX, rightX), Math.min(toY, rightY))
|
|
331
|
-
.add();
|
|
332
|
-
// Add label if provided
|
|
333
|
-
if (label) {
|
|
334
|
-
const midX = (fromX + toX) / 2;
|
|
335
|
-
const midY = (fromY + toY) / 2;
|
|
336
|
-
await pdf.newParagraph()
|
|
337
|
-
.text(label, color)
|
|
338
|
-
.font(index_1.StandardFonts.HELVETICA, 8)
|
|
339
|
-
.at(pageIndex, midX + 5, midY + 5)
|
|
340
|
-
.add();
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
//# sourceMappingURL=test-drawing-helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-drawing-helpers.js","sourceRoot":"","sources":["../../../src/__tests__/e2e/test-drawing-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Helper functions for e2e tests
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Get the base URL from environment variable or default
|
|
6
|
-
*/
|
|
7
|
-
export declare function getBaseUrl(): string;
|
|
8
|
-
/**
|
|
9
|
-
* Read authentication token from environment or token files
|
|
10
|
-
*/
|
|
11
|
-
export declare function readToken(): string | null;
|
|
12
|
-
/**
|
|
13
|
-
* Check if server is up and running
|
|
14
|
-
*/
|
|
15
|
-
export declare function serverUp(baseUrl: string): Promise<boolean>;
|
|
16
|
-
/**
|
|
17
|
-
* Require environment variables and PDF fixture for testing
|
|
18
|
-
*/
|
|
19
|
-
export declare function requireEnvAndFixture(pdfFilename: string): Promise<[string, string, Uint8Array]>;
|
|
20
|
-
/**
|
|
21
|
-
* Helper to open temporary file path (for Node.js environment)
|
|
22
|
-
*/
|
|
23
|
-
export declare function createTempPath(filename: string): string;
|
|
24
|
-
/**
|
|
25
|
-
* Helper to read image file for tests
|
|
26
|
-
*/
|
|
27
|
-
export declare function readImageFixture(filename: string): Uint8Array;
|
|
28
|
-
export declare function getImagePath(filename: string): string;
|
|
29
|
-
export declare function getFontPath(filename: string): string;
|
|
30
|
-
/**
|
|
31
|
-
* Helper to read font file for tests
|
|
32
|
-
*/
|
|
33
|
-
export declare function readFontFixture(filename: string): Uint8Array;
|
|
34
|
-
/**
|
|
35
|
-
* Draw a coordinate grid on a PDF page for testing
|
|
36
|
-
* @param pdf - PDFDancer instance
|
|
37
|
-
* @param pageIndex - Page index (default: 0)
|
|
38
|
-
* @param gridSpacing - Spacing between grid lines in points (default: 50)
|
|
39
|
-
* @param showLabels - Whether to show coordinate labels (default: true)
|
|
40
|
-
* @param labelFont - Font name for labels (default: 'Helvetica')
|
|
41
|
-
* @param labelSize - Font size for labels (default: 8)
|
|
42
|
-
*/
|
|
43
|
-
export declare function drawCoordinateGrid(pdf: any, pageIndex?: number, gridSpacing?: number, showLabels?: boolean, labelFont?: string, labelSize?: number): Promise<void>;
|
|
44
|
-
//# sourceMappingURL=test-helpers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/e2e/test-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAmBzC;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAehE;AAiBD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAsBrG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAS7D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,UAI3C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAS5D;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACpC,GAAG,EAAE,GAAG,EACR,SAAS,GAAE,MAAU,EACrB,WAAW,GAAE,MAAW,EACxB,UAAU,GAAE,OAAc,EAC1B,SAAS,GAAE,MAAoB,EAC/B,SAAS,GAAE,MAAU,GACtB,OAAO,CAAC,IAAI,CAAC,CAiDf"}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Helper functions for e2e tests
|
|
4
|
-
*/
|
|
5
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
-
}
|
|
11
|
-
Object.defineProperty(o, k2, desc);
|
|
12
|
-
}) : (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
o[k2] = m[k];
|
|
15
|
-
}));
|
|
16
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
-
}) : function(o, v) {
|
|
19
|
-
o["default"] = v;
|
|
20
|
-
});
|
|
21
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
-
var ownKeys = function(o) {
|
|
23
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
-
var ar = [];
|
|
25
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
-
return ar;
|
|
27
|
-
};
|
|
28
|
-
return ownKeys(o);
|
|
29
|
-
};
|
|
30
|
-
return function (mod) {
|
|
31
|
-
if (mod && mod.__esModule) return mod;
|
|
32
|
-
var result = {};
|
|
33
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
-
__setModuleDefault(result, mod);
|
|
35
|
-
return result;
|
|
36
|
-
};
|
|
37
|
-
})();
|
|
38
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
-
};
|
|
41
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.getBaseUrl = getBaseUrl;
|
|
43
|
-
exports.readToken = readToken;
|
|
44
|
-
exports.serverUp = serverUp;
|
|
45
|
-
exports.requireEnvAndFixture = requireEnvAndFixture;
|
|
46
|
-
exports.createTempPath = createTempPath;
|
|
47
|
-
exports.readImageFixture = readImageFixture;
|
|
48
|
-
exports.getImagePath = getImagePath;
|
|
49
|
-
exports.getFontPath = getFontPath;
|
|
50
|
-
exports.readFontFixture = readFontFixture;
|
|
51
|
-
exports.drawCoordinateGrid = drawCoordinateGrid;
|
|
52
|
-
const fs = __importStar(require("fs"));
|
|
53
|
-
const path = __importStar(require("path"));
|
|
54
|
-
const os_1 = __importDefault(require("os"));
|
|
55
|
-
/**
|
|
56
|
-
* Get the base URL from environment variable or default
|
|
57
|
-
*/
|
|
58
|
-
function getBaseUrl() {
|
|
59
|
-
return (process.env.PDFDANCER_BASE_URL || 'http://localhost:8080').trim();
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Read authentication token from environment or token files
|
|
63
|
-
*/
|
|
64
|
-
function readToken() {
|
|
65
|
-
const token = process.env.PDFDANCER_TOKEN;
|
|
66
|
-
if (token) {
|
|
67
|
-
return token.trim();
|
|
68
|
-
}
|
|
69
|
-
// Try common token files in project root
|
|
70
|
-
const projectRoot = path.resolve(__dirname, '../../..');
|
|
71
|
-
const candidates = findFiles(projectRoot, 'jwt-token-*.txt');
|
|
72
|
-
for (const file of candidates) {
|
|
73
|
-
try {
|
|
74
|
-
return fs.readFileSync(file, 'utf-8').trim();
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Check if server is up and running
|
|
84
|
-
*/
|
|
85
|
-
async function serverUp(baseUrl) {
|
|
86
|
-
try {
|
|
87
|
-
const response = await fetch(`${baseUrl}/ping`, {
|
|
88
|
-
signal: AbortSignal.timeout(60000)
|
|
89
|
-
});
|
|
90
|
-
const text = await response.text();
|
|
91
|
-
let pongReceived = response.status === 200 && text.includes('Pong');
|
|
92
|
-
if (!pongReceived) {
|
|
93
|
-
console.error(`Server did not respond with Pong. Response: ${text}, status ${response.status}`);
|
|
94
|
-
}
|
|
95
|
-
return pongReceived;
|
|
96
|
-
}
|
|
97
|
-
catch (e) {
|
|
98
|
-
console.error("Server down", e);
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Helper to find files matching a pattern
|
|
104
|
-
*/
|
|
105
|
-
function findFiles(dir, pattern) {
|
|
106
|
-
try {
|
|
107
|
-
const files = fs.readdirSync(dir);
|
|
108
|
-
const regex = new RegExp(pattern.replace('*', '.*'));
|
|
109
|
-
return files
|
|
110
|
-
.filter(file => regex.test(file))
|
|
111
|
-
.map(file => path.join(dir, file));
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
return [];
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Require environment variables and PDF fixture for testing
|
|
119
|
-
*/
|
|
120
|
-
async function requireEnvAndFixture(pdfFilename) {
|
|
121
|
-
const baseUrl = getBaseUrl();
|
|
122
|
-
const token = readToken();
|
|
123
|
-
if (!await serverUp(baseUrl)) {
|
|
124
|
-
throw new Error(`PDFDancer server not reachable at ${baseUrl}; set PDFDANCER_BASE_URL or start server`);
|
|
125
|
-
}
|
|
126
|
-
if (!token) {
|
|
127
|
-
throw new Error('PDFDANCER_TOKEN not set and no token file found; set env or place jwt-token-*.txt in repo');
|
|
128
|
-
}
|
|
129
|
-
// Look for PDF fixture file
|
|
130
|
-
const fixturesDir = path.resolve(__dirname, '../../../fixtures');
|
|
131
|
-
const pdfPath = path.join(fixturesDir, pdfFilename);
|
|
132
|
-
if (!fs.existsSync(pdfPath)) {
|
|
133
|
-
throw new Error(`${pdfFilename} fixture not found at ${pdfPath}`);
|
|
134
|
-
}
|
|
135
|
-
const pdfData = fs.readFileSync(pdfPath);
|
|
136
|
-
return [baseUrl, token, new Uint8Array(pdfData)];
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Helper to open temporary file path (for Node.js environment)
|
|
140
|
-
*/
|
|
141
|
-
function createTempPath(filename) {
|
|
142
|
-
const tmpDir = process.env.TMPDIR ||
|
|
143
|
-
process.env.TEMP ||
|
|
144
|
-
process.env.TMP ||
|
|
145
|
-
os_1.default.tmpdir(); // reliable built-in fallback
|
|
146
|
-
return path.join(tmpDir, filename);
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Helper to read image file for tests
|
|
150
|
-
*/
|
|
151
|
-
function readImageFixture(filename) {
|
|
152
|
-
const imagePath = getImagePath(filename);
|
|
153
|
-
if (!fs.existsSync(imagePath)) {
|
|
154
|
-
throw new Error(`Image fixture not found: ${filename}`);
|
|
155
|
-
}
|
|
156
|
-
const imageData = fs.readFileSync(imagePath);
|
|
157
|
-
return new Uint8Array(imageData);
|
|
158
|
-
}
|
|
159
|
-
function getImagePath(filename) {
|
|
160
|
-
const fixturesDir = path.resolve(__dirname, '../../../fixtures');
|
|
161
|
-
return path.join(fixturesDir, filename);
|
|
162
|
-
}
|
|
163
|
-
function getFontPath(filename) {
|
|
164
|
-
const fixturesDir = path.resolve(__dirname, '../../../fixtures');
|
|
165
|
-
const fontPath = path.join(fixturesDir, filename);
|
|
166
|
-
return fontPath;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Helper to read font file for tests
|
|
170
|
-
*/
|
|
171
|
-
function readFontFixture(filename) {
|
|
172
|
-
const fontPath = getFontPath(filename);
|
|
173
|
-
if (!fs.existsSync(fontPath)) {
|
|
174
|
-
throw new Error(`Font fixture not found: ${filename}`);
|
|
175
|
-
}
|
|
176
|
-
const fontData = fs.readFileSync(fontPath);
|
|
177
|
-
return new Uint8Array(fontData);
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Draw a coordinate grid on a PDF page for testing
|
|
181
|
-
* @param pdf - PDFDancer instance
|
|
182
|
-
* @param pageIndex - Page index (default: 0)
|
|
183
|
-
* @param gridSpacing - Spacing between grid lines in points (default: 50)
|
|
184
|
-
* @param showLabels - Whether to show coordinate labels (default: true)
|
|
185
|
-
* @param labelFont - Font name for labels (default: 'Helvetica')
|
|
186
|
-
* @param labelSize - Font size for labels (default: 8)
|
|
187
|
-
*/
|
|
188
|
-
async function drawCoordinateGrid(pdf, pageIndex = 0, gridSpacing = 50, showLabels = true, labelFont = 'Helvetica', labelSize = 8) {
|
|
189
|
-
const pages = await pdf.pages();
|
|
190
|
-
const page = pages[pageIndex];
|
|
191
|
-
const width = page.pageSize?.width || 612;
|
|
192
|
-
const height = page.pageSize?.height || 792;
|
|
193
|
-
const Color = (await Promise.resolve().then(() => __importStar(require('../../index')))).Color;
|
|
194
|
-
const gridColor = new Color(200, 200, 200);
|
|
195
|
-
const labelColor = new Color(100, 100, 100);
|
|
196
|
-
for (let x = 0; x <= width; x += gridSpacing) {
|
|
197
|
-
await pdf.page(pageIndex)
|
|
198
|
-
.newPath()
|
|
199
|
-
.moveTo(x, 0)
|
|
200
|
-
.lineTo(x, height)
|
|
201
|
-
.strokeColor(gridColor)
|
|
202
|
-
.lineWidth(0.5)
|
|
203
|
-
.draw();
|
|
204
|
-
if (showLabels && x > 0) {
|
|
205
|
-
await pdf.page(pageIndex)
|
|
206
|
-
.newParagraph()
|
|
207
|
-
.text(x.toString())
|
|
208
|
-
.font(labelFont, labelSize)
|
|
209
|
-
.color(labelColor)
|
|
210
|
-
.at(x - 10, 5)
|
|
211
|
-
.build();
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
for (let y = 0; y <= height; y += gridSpacing) {
|
|
215
|
-
await pdf.page(pageIndex)
|
|
216
|
-
.newPath()
|
|
217
|
-
.moveTo(0, y)
|
|
218
|
-
.lineTo(width, y)
|
|
219
|
-
.strokeColor(gridColor)
|
|
220
|
-
.lineWidth(0.5)
|
|
221
|
-
.draw();
|
|
222
|
-
if (showLabels && y > 0) {
|
|
223
|
-
await pdf.page(pageIndex)
|
|
224
|
-
.newParagraph()
|
|
225
|
-
.text(y.toString())
|
|
226
|
-
.font(labelFont, labelSize)
|
|
227
|
-
.color(labelColor)
|
|
228
|
-
.at(5, y - 3)
|
|
229
|
-
.build();
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/__tests__/e2e/test-helpers.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASH,gCAEC;AAKD,8BAmBC;AAKD,4BAeC;AAoBD,oDAsBC;AAKD,wCAQC;AAKD,4CASC;AAED,oCAGC;AAED,kCAIC;AAKD,0CASC;AAWD,gDAwDC;AAtND,uCAAyB;AACzB,2CAA6B;AAC7B,4CAAoB;AAEpB;;GAEG;AACH,SAAgB,UAAU;IACtB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC1C,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,yCAAyC;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAE7D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC;YACD,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACL,SAAS;QACb,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,QAAQ,CAAC,OAAe;IAC1C,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,OAAO,EAAE;YAC5C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACrC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,YAAY,GAAG,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,+CAA+C,IAAI,YAAY,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;QAC/B,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,GAAW,EAAE,OAAe;IAC3C,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACrD,OAAO,KAAK;aACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAChC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC1D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAE1B,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,0CAA0C,CAAC,CAAC;IAC5G,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;IACjH,CAAC;IAED,4BAA4B;IAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAEpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,QAAgB;IAC3C,MAAM,MAAM,GACR,OAAO,CAAC,GAAG,CAAC,MAAM;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG;QACf,YAAE,CAAC,MAAM,EAAE,CAAC,CAAC,6BAA6B;IAE9C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,YAAY,CAAC,QAAgB;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,WAAW,CAAC,QAAgB;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,kBAAkB,CACpC,GAAQ,EACR,YAAoB,CAAC,EACrB,cAAsB,EAAE,EACxB,aAAsB,IAAI,EAC1B,YAAoB,WAAW,EAC/B,YAAoB,CAAC;IAErB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,GAAG,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,CAAC;IAE5C,MAAM,KAAK,GAAG,CAAC,wDAAa,aAAa,GAAC,CAAC,CAAC,KAAK,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;QAC3C,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;aACpB,OAAO,EAAE;aACT,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;aACZ,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC;aACjB,WAAW,CAAC,SAAS,CAAC;aACtB,SAAS,CAAC,GAAG,CAAC;aACd,IAAI,EAAE,CAAC;QAEZ,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;iBACpB,YAAY,EAAE;iBACd,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;iBAClB,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;iBAC1B,KAAK,CAAC,UAAU,CAAC;iBACjB,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;iBACb,KAAK,EAAE,CAAC;QACjB,CAAC;IACL,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5C,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;aACpB,OAAO,EAAE;aACT,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;aACZ,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;aAChB,WAAW,CAAC,SAAS,CAAC;aACtB,SAAS,CAAC,GAAG,CAAC;aACd,IAAI,EAAE,CAAC;QAEZ,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;iBACpB,YAAY,EAAE;iBACd,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;iBAClB,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;iBAC1B,KAAK,CAAC,UAAU,CAAC;iBACjB,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACZ,KAAK,EAAE,CAAC;QACjB,CAAC;IACL,CAAC;AACL,CAAC"}
|