@nestia/e2e 7.0.0 → 7.0.2

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.
@@ -1,33 +1,248 @@
1
1
  /**
2
- * Gaff comparator.
2
+ * Type-safe comparator functions for Array.sort() operations with advanced
3
+ * field access.
3
4
  *
4
- * `GaffComparator` is a set of comparator functions for `Array.sort()` function,
5
- * which can be used with {@link TestValidator.sort} function. If you want to see
6
- * how to use them, see the below example link.
5
+ * GaffComparator provides a collection of specialized comparator functions
6
+ * designed to work seamlessly with Array.sort() and testing frameworks like
7
+ * TestValidator.sort(). Each comparator supports both single values and arrays
8
+ * of values, enabling complex multi-field sorting scenarios with lexicographic
9
+ * ordering.
10
+ *
11
+ * Key features:
12
+ *
13
+ * - Generic type safety for any object structure
14
+ * - Support for single values or arrays of values per field
15
+ * - Lexicographic comparison for multi-value scenarios
16
+ * - Locale-aware string comparison
17
+ * - Automatic type conversion for dates and numbers
18
+ *
19
+ * The comparators follow the standard JavaScript sort contract:
20
+ *
21
+ * - Return < 0 if first element should come before second
22
+ * - Return > 0 if first element should come after second
23
+ * - Return 0 if elements are equal
7
24
  *
8
- * @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_sort.ts
9
25
  * @author Jeongho Nam - https://github.com/samchon
26
+ * @example
27
+ * ```typescript
28
+ * // Basic usage with single fields
29
+ * users.sort(GaffComparator.strings(user => user.name));
30
+ * posts.sort(GaffComparator.dates(post => post.createdAt));
31
+ * products.sort(GaffComparator.numbers(product => product.price));
32
+ *
33
+ * // Multi-field sorting with arrays
34
+ * users.sort(GaffComparator.strings(user => [user.lastName, user.firstName]));
35
+ * events.sort(GaffComparator.dates(event => [event.startDate, event.endDate]));
36
+ *
37
+ * // Integration with TestValidator
38
+ * await TestValidator.sort("user sorting")(
39
+ * (sortable) => api.getUsers({ sort: sortable })
40
+ * )("name", "email")(
41
+ * GaffComparator.strings(user => [user.name, user.email])
42
+ * )("+");
43
+ * ```;
10
44
  */
11
45
  export declare namespace GaffComparator {
12
46
  /**
13
- * String(s) comparator.
47
+ * Creates a comparator function for string-based sorting with locale-aware
48
+ * comparison.
49
+ *
50
+ * Generates a comparator that extracts string values from objects and
51
+ * performs lexicographic comparison using locale-sensitive string comparison.
52
+ * Supports both single strings and arrays of strings for multi-field sorting
53
+ * scenarios.
54
+ *
55
+ * When comparing arrays, performs lexicographic ordering: compares the first
56
+ * elements, then the second elements if the first are equal, and so on. This
57
+ * enables complex sorting like "sort by last name, then by first name".
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * interface User {
62
+ * id: string;
63
+ * firstName: string;
64
+ * lastName: string;
65
+ * email: string;
66
+ * status: 'active' | 'inactive';
67
+ * }
14
68
  *
15
- * @param getter Getter of string(s) from input
16
- * @returns Comparator function
69
+ * const users: User[] = [
70
+ * { id: '1', firstName: 'John', lastName: 'Doe', email: 'john@example.com', status: 'active' },
71
+ * { id: '2', firstName: 'Jane', lastName: 'Doe', email: 'jane@example.com', status: 'inactive' },
72
+ * { id: '3', firstName: 'Bob', lastName: 'Smith', email: 'bob@example.com', status: 'active' }
73
+ * ];
74
+ *
75
+ * // Single field sorting
76
+ * users.sort(GaffComparator.strings(user => user.lastName));
77
+ * // Result: Doe, Doe, Smith
78
+ *
79
+ * // Multi-field sorting: last name, then first name
80
+ * users.sort(GaffComparator.strings(user => [user.lastName, user.firstName]));
81
+ * // Result: Doe Jane, Doe John, Smith Bob
82
+ *
83
+ * // Status-based sorting
84
+ * users.sort(GaffComparator.strings(user => user.status));
85
+ * // Result: active users first, then inactive
86
+ *
87
+ * // Complex multi-field: status, then last name, then first name
88
+ * users.sort(GaffComparator.strings(user => [user.status, user.lastName, user.firstName]));
89
+ *
90
+ * // Integration with API sorting validation
91
+ * await TestValidator.sort("user name sorting")(
92
+ * (sortFields) => userApi.getUsers({ sort: sortFields })
93
+ * )("lastName", "firstName")(
94
+ * GaffComparator.strings(user => [user.lastName, user.firstName])
95
+ * )("+");
96
+ * ```;
97
+ *
98
+ * @template T - The type of objects being compared
99
+ * @param getter - Function that extracts string value(s) from input objects
100
+ * @returns A comparator function suitable for Array.sort()
17
101
  */
18
102
  const strings: <T>(getter: (input: T) => string | string[]) => (x: T, y: T) => number;
19
103
  /**
20
- * Date(s) comparator.
104
+ * Creates a comparator function for date-based sorting with automatic string
105
+ * parsing.
106
+ *
107
+ * Generates a comparator that extracts date values from objects,
108
+ * automatically converting string representations to Date objects for
109
+ * numerical comparison. Supports both single dates and arrays of dates for
110
+ * complex temporal sorting.
111
+ *
112
+ * Date strings are parsed using the standard Date constructor, which supports
113
+ * ISO 8601 format, RFC 2822 format, and other common date representations.
114
+ * The comparison is performed on millisecond timestamps for precise
115
+ * ordering.
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * interface Event {
120
+ * id: string;
121
+ * title: string;
122
+ * startDate: string;
123
+ * endDate: string;
124
+ * createdAt: string;
125
+ * updatedAt: string;
126
+ * }
21
127
  *
22
- * @param getter Getter of date(s) from input
23
- * @returns Comparator function
128
+ * const events: Event[] = [
129
+ * {
130
+ * id: '1',
131
+ * title: 'Conference',
132
+ * startDate: '2024-03-15T09:00:00Z',
133
+ * endDate: '2024-03-15T17:00:00Z',
134
+ * createdAt: '2024-01-10T10:00:00Z',
135
+ * updatedAt: '2024-02-01T15:30:00Z'
136
+ * },
137
+ * {
138
+ * id: '2',
139
+ * title: 'Workshop',
140
+ * startDate: '2024-03-10T14:00:00Z',
141
+ * endDate: '2024-03-10T16:00:00Z',
142
+ * createdAt: '2024-01-15T11:00:00Z',
143
+ * updatedAt: '2024-01-20T09:15:00Z'
144
+ * }
145
+ * ];
146
+ *
147
+ * // Sort by start date (chronological order)
148
+ * events.sort(GaffComparator.dates(event => event.startDate));
149
+ *
150
+ * // Sort by creation date (oldest first)
151
+ * events.sort(GaffComparator.dates(event => event.createdAt));
152
+ *
153
+ * // Multi-field: start date, then end date
154
+ * events.sort(GaffComparator.dates(event => [event.startDate, event.endDate]));
155
+ *
156
+ * // Sort by modification history: created date, then updated date
157
+ * events.sort(GaffComparator.dates(event => [event.createdAt, event.updatedAt]));
158
+ *
159
+ * // Validate API date sorting
160
+ * await TestValidator.sort("event chronological sorting")(
161
+ * (sortFields) => eventApi.getEvents({ sort: sortFields })
162
+ * )("startDate")(
163
+ * GaffComparator.dates(event => event.startDate)
164
+ * )("+");
165
+ *
166
+ * // Test complex date-based sorting
167
+ * const sortByEventSchedule = GaffComparator.dates(event => [
168
+ * event.startDate,
169
+ * event.endDate
170
+ * ]);
171
+ * ```;
172
+ *
173
+ * @template T - The type of objects being compared
174
+ * @param getter - Function that extracts date string(s) from input objects
175
+ * @returns A comparator function suitable for Array.sort()
24
176
  */
25
177
  const dates: <T>(getter: (input: T) => string | string[]) => (x: T, y: T) => number;
26
178
  /**
27
- * Number(s) comparator.
179
+ * Creates a comparator function for numerical sorting with multi-value
180
+ * support.
181
+ *
182
+ * Generates a comparator that extracts numerical values from objects and
183
+ * performs mathematical comparison. Supports both single numbers and arrays
184
+ * of numbers for complex numerical sorting scenarios like sorting by price
185
+ * then by rating.
186
+ *
187
+ * When comparing arrays, performs lexicographic numerical ordering: compares
188
+ * the first numbers, then the second numbers if the first are equal, and so
189
+ * on. This enables sophisticated sorting like "sort by price ascending, then
190
+ * by rating descending".
191
+ *
192
+ * @example
193
+ * ```typescript
194
+ * interface Product {
195
+ * id: string;
196
+ * name: string;
197
+ * price: number;
198
+ * rating: number;
199
+ * stock: number;
200
+ * categoryId: number;
201
+ * salesCount: number;
202
+ * }
203
+ *
204
+ * const products: Product[] = [
205
+ * { id: '1', name: 'Laptop', price: 999.99, rating: 4.5, stock: 15, categoryId: 1, salesCount: 150 },
206
+ * { id: '2', name: 'Mouse', price: 29.99, rating: 4.2, stock: 50, categoryId: 1, salesCount: 300 },
207
+ * { id: '3', name: 'Keyboard', price: 79.99, rating: 4.8, stock: 25, categoryId: 1, salesCount: 200 }
208
+ * ];
209
+ *
210
+ * // Sort by price (ascending)
211
+ * products.sort(GaffComparator.numbers(product => product.price));
212
+ * // Result: Mouse ($29.99), Keyboard ($79.99), Laptop ($999.99)
213
+ *
214
+ * // Sort by rating (descending requires negation)
215
+ * products.sort(GaffComparator.numbers(product => -product.rating));
216
+ * // Result: Keyboard (4.8), Laptop (4.5), Mouse (4.2)
217
+ *
218
+ * // Multi-field: category, then price
219
+ * products.sort(GaffComparator.numbers(product => [product.categoryId, product.price]));
220
+ *
221
+ * // Complex business logic: popularity (sales) then rating
222
+ * products.sort(GaffComparator.numbers(product => [-product.salesCount, -product.rating]));
223
+ * // Negative values for descending order
224
+ *
225
+ * // Sort by inventory priority: low stock first, then by sales
226
+ * products.sort(GaffComparator.numbers(product => [product.stock, -product.salesCount]));
227
+ *
228
+ * // Validate API numerical sorting
229
+ * await TestValidator.sort("product price sorting")(
230
+ * (sortFields) => productApi.getProducts({ sort: sortFields })
231
+ * )("price")(
232
+ * GaffComparator.numbers(product => product.price)
233
+ * )("+");
234
+ *
235
+ * // Test multi-criteria sorting
236
+ * const sortByBusinessValue = GaffComparator.numbers(product => [
237
+ * -product.salesCount, // High sales first
238
+ * -product.rating, // High rating first
239
+ * product.price // Low price first (for tie-breaking)
240
+ * ]);
241
+ * ```;
28
242
  *
29
- * @param closure Getter of number(s) from input
30
- * @returns Comparator function
243
+ * @template T - The type of objects being compared
244
+ * @param closure - Function that extracts number value(s) from input objects
245
+ * @returns A comparator function suitable for Array.sort()
31
246
  */
32
247
  const numbers: <T>(closure: (input: T) => number | number[]) => (x: T, y: T) => number;
33
248
  }
@@ -2,22 +2,106 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GaffComparator = void 0;
4
4
  /**
5
- * Gaff comparator.
5
+ * Type-safe comparator functions for Array.sort() operations with advanced
6
+ * field access.
6
7
  *
7
- * `GaffComparator` is a set of comparator functions for `Array.sort()` function,
8
- * which can be used with {@link TestValidator.sort} function. If you want to see
9
- * how to use them, see the below example link.
8
+ * GaffComparator provides a collection of specialized comparator functions
9
+ * designed to work seamlessly with Array.sort() and testing frameworks like
10
+ * TestValidator.sort(). Each comparator supports both single values and arrays
11
+ * of values, enabling complex multi-field sorting scenarios with lexicographic
12
+ * ordering.
13
+ *
14
+ * Key features:
15
+ *
16
+ * - Generic type safety for any object structure
17
+ * - Support for single values or arrays of values per field
18
+ * - Lexicographic comparison for multi-value scenarios
19
+ * - Locale-aware string comparison
20
+ * - Automatic type conversion for dates and numbers
21
+ *
22
+ * The comparators follow the standard JavaScript sort contract:
23
+ *
24
+ * - Return < 0 if first element should come before second
25
+ * - Return > 0 if first element should come after second
26
+ * - Return 0 if elements are equal
10
27
  *
11
- * @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_sort.ts
12
28
  * @author Jeongho Nam - https://github.com/samchon
29
+ * @example
30
+ * ```typescript
31
+ * // Basic usage with single fields
32
+ * users.sort(GaffComparator.strings(user => user.name));
33
+ * posts.sort(GaffComparator.dates(post => post.createdAt));
34
+ * products.sort(GaffComparator.numbers(product => product.price));
35
+ *
36
+ * // Multi-field sorting with arrays
37
+ * users.sort(GaffComparator.strings(user => [user.lastName, user.firstName]));
38
+ * events.sort(GaffComparator.dates(event => [event.startDate, event.endDate]));
39
+ *
40
+ * // Integration with TestValidator
41
+ * await TestValidator.sort("user sorting")(
42
+ * (sortable) => api.getUsers({ sort: sortable })
43
+ * )("name", "email")(
44
+ * GaffComparator.strings(user => [user.name, user.email])
45
+ * )("+");
46
+ * ```;
13
47
  */
14
48
  var GaffComparator;
15
49
  (function (GaffComparator) {
16
50
  /**
17
- * String(s) comparator.
51
+ * Creates a comparator function for string-based sorting with locale-aware
52
+ * comparison.
53
+ *
54
+ * Generates a comparator that extracts string values from objects and
55
+ * performs lexicographic comparison using locale-sensitive string comparison.
56
+ * Supports both single strings and arrays of strings for multi-field sorting
57
+ * scenarios.
58
+ *
59
+ * When comparing arrays, performs lexicographic ordering: compares the first
60
+ * elements, then the second elements if the first are equal, and so on. This
61
+ * enables complex sorting like "sort by last name, then by first name".
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * interface User {
66
+ * id: string;
67
+ * firstName: string;
68
+ * lastName: string;
69
+ * email: string;
70
+ * status: 'active' | 'inactive';
71
+ * }
18
72
  *
19
- * @param getter Getter of string(s) from input
20
- * @returns Comparator function
73
+ * const users: User[] = [
74
+ * { id: '1', firstName: 'John', lastName: 'Doe', email: 'john@example.com', status: 'active' },
75
+ * { id: '2', firstName: 'Jane', lastName: 'Doe', email: 'jane@example.com', status: 'inactive' },
76
+ * { id: '3', firstName: 'Bob', lastName: 'Smith', email: 'bob@example.com', status: 'active' }
77
+ * ];
78
+ *
79
+ * // Single field sorting
80
+ * users.sort(GaffComparator.strings(user => user.lastName));
81
+ * // Result: Doe, Doe, Smith
82
+ *
83
+ * // Multi-field sorting: last name, then first name
84
+ * users.sort(GaffComparator.strings(user => [user.lastName, user.firstName]));
85
+ * // Result: Doe Jane, Doe John, Smith Bob
86
+ *
87
+ * // Status-based sorting
88
+ * users.sort(GaffComparator.strings(user => user.status));
89
+ * // Result: active users first, then inactive
90
+ *
91
+ * // Complex multi-field: status, then last name, then first name
92
+ * users.sort(GaffComparator.strings(user => [user.status, user.lastName, user.firstName]));
93
+ *
94
+ * // Integration with API sorting validation
95
+ * await TestValidator.sort("user name sorting")(
96
+ * (sortFields) => userApi.getUsers({ sort: sortFields })
97
+ * )("lastName", "firstName")(
98
+ * GaffComparator.strings(user => [user.lastName, user.firstName])
99
+ * )("+");
100
+ * ```;
101
+ *
102
+ * @template T - The type of objects being compared
103
+ * @param getter - Function that extracts string value(s) from input objects
104
+ * @returns A comparator function suitable for Array.sort()
21
105
  */
22
106
  GaffComparator.strings = function (getter) {
23
107
  return function (x, y) {
@@ -28,10 +112,78 @@ var GaffComparator;
28
112
  };
29
113
  };
30
114
  /**
31
- * Date(s) comparator.
115
+ * Creates a comparator function for date-based sorting with automatic string
116
+ * parsing.
117
+ *
118
+ * Generates a comparator that extracts date values from objects,
119
+ * automatically converting string representations to Date objects for
120
+ * numerical comparison. Supports both single dates and arrays of dates for
121
+ * complex temporal sorting.
122
+ *
123
+ * Date strings are parsed using the standard Date constructor, which supports
124
+ * ISO 8601 format, RFC 2822 format, and other common date representations.
125
+ * The comparison is performed on millisecond timestamps for precise
126
+ * ordering.
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * interface Event {
131
+ * id: string;
132
+ * title: string;
133
+ * startDate: string;
134
+ * endDate: string;
135
+ * createdAt: string;
136
+ * updatedAt: string;
137
+ * }
32
138
  *
33
- * @param getter Getter of date(s) from input
34
- * @returns Comparator function
139
+ * const events: Event[] = [
140
+ * {
141
+ * id: '1',
142
+ * title: 'Conference',
143
+ * startDate: '2024-03-15T09:00:00Z',
144
+ * endDate: '2024-03-15T17:00:00Z',
145
+ * createdAt: '2024-01-10T10:00:00Z',
146
+ * updatedAt: '2024-02-01T15:30:00Z'
147
+ * },
148
+ * {
149
+ * id: '2',
150
+ * title: 'Workshop',
151
+ * startDate: '2024-03-10T14:00:00Z',
152
+ * endDate: '2024-03-10T16:00:00Z',
153
+ * createdAt: '2024-01-15T11:00:00Z',
154
+ * updatedAt: '2024-01-20T09:15:00Z'
155
+ * }
156
+ * ];
157
+ *
158
+ * // Sort by start date (chronological order)
159
+ * events.sort(GaffComparator.dates(event => event.startDate));
160
+ *
161
+ * // Sort by creation date (oldest first)
162
+ * events.sort(GaffComparator.dates(event => event.createdAt));
163
+ *
164
+ * // Multi-field: start date, then end date
165
+ * events.sort(GaffComparator.dates(event => [event.startDate, event.endDate]));
166
+ *
167
+ * // Sort by modification history: created date, then updated date
168
+ * events.sort(GaffComparator.dates(event => [event.createdAt, event.updatedAt]));
169
+ *
170
+ * // Validate API date sorting
171
+ * await TestValidator.sort("event chronological sorting")(
172
+ * (sortFields) => eventApi.getEvents({ sort: sortFields })
173
+ * )("startDate")(
174
+ * GaffComparator.dates(event => event.startDate)
175
+ * )("+");
176
+ *
177
+ * // Test complex date-based sorting
178
+ * const sortByEventSchedule = GaffComparator.dates(event => [
179
+ * event.startDate,
180
+ * event.endDate
181
+ * ]);
182
+ * ```;
183
+ *
184
+ * @template T - The type of objects being compared
185
+ * @param getter - Function that extracts date string(s) from input objects
186
+ * @returns A comparator function suitable for Array.sort()
35
187
  */
36
188
  GaffComparator.dates = function (getter) {
37
189
  return function (x, y) {
@@ -45,10 +197,73 @@ var GaffComparator;
45
197
  };
46
198
  };
47
199
  /**
48
- * Number(s) comparator.
200
+ * Creates a comparator function for numerical sorting with multi-value
201
+ * support.
202
+ *
203
+ * Generates a comparator that extracts numerical values from objects and
204
+ * performs mathematical comparison. Supports both single numbers and arrays
205
+ * of numbers for complex numerical sorting scenarios like sorting by price
206
+ * then by rating.
207
+ *
208
+ * When comparing arrays, performs lexicographic numerical ordering: compares
209
+ * the first numbers, then the second numbers if the first are equal, and so
210
+ * on. This enables sophisticated sorting like "sort by price ascending, then
211
+ * by rating descending".
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * interface Product {
216
+ * id: string;
217
+ * name: string;
218
+ * price: number;
219
+ * rating: number;
220
+ * stock: number;
221
+ * categoryId: number;
222
+ * salesCount: number;
223
+ * }
224
+ *
225
+ * const products: Product[] = [
226
+ * { id: '1', name: 'Laptop', price: 999.99, rating: 4.5, stock: 15, categoryId: 1, salesCount: 150 },
227
+ * { id: '2', name: 'Mouse', price: 29.99, rating: 4.2, stock: 50, categoryId: 1, salesCount: 300 },
228
+ * { id: '3', name: 'Keyboard', price: 79.99, rating: 4.8, stock: 25, categoryId: 1, salesCount: 200 }
229
+ * ];
230
+ *
231
+ * // Sort by price (ascending)
232
+ * products.sort(GaffComparator.numbers(product => product.price));
233
+ * // Result: Mouse ($29.99), Keyboard ($79.99), Laptop ($999.99)
234
+ *
235
+ * // Sort by rating (descending requires negation)
236
+ * products.sort(GaffComparator.numbers(product => -product.rating));
237
+ * // Result: Keyboard (4.8), Laptop (4.5), Mouse (4.2)
238
+ *
239
+ * // Multi-field: category, then price
240
+ * products.sort(GaffComparator.numbers(product => [product.categoryId, product.price]));
241
+ *
242
+ * // Complex business logic: popularity (sales) then rating
243
+ * products.sort(GaffComparator.numbers(product => [-product.salesCount, -product.rating]));
244
+ * // Negative values for descending order
245
+ *
246
+ * // Sort by inventory priority: low stock first, then by sales
247
+ * products.sort(GaffComparator.numbers(product => [product.stock, -product.salesCount]));
248
+ *
249
+ * // Validate API numerical sorting
250
+ * await TestValidator.sort("product price sorting")(
251
+ * (sortFields) => productApi.getProducts({ sort: sortFields })
252
+ * )("price")(
253
+ * GaffComparator.numbers(product => product.price)
254
+ * )("+");
255
+ *
256
+ * // Test multi-criteria sorting
257
+ * const sortByBusinessValue = GaffComparator.numbers(product => [
258
+ * -product.salesCount, // High sales first
259
+ * -product.rating, // High rating first
260
+ * product.price // Low price first (for tie-breaking)
261
+ * ]);
262
+ * ```;
49
263
  *
50
- * @param closure Getter of number(s) from input
51
- * @returns Comparator function
264
+ * @template T - The type of objects being compared
265
+ * @param closure - Function that extracts number value(s) from input objects
266
+ * @returns A comparator function suitable for Array.sort()
52
267
  */
53
268
  GaffComparator.numbers = function (closure) {
54
269
  return function (x, y) {
@@ -1 +1 @@
1
- {"version":3,"file":"GaffComparator.js","sourceRoot":"","sources":["../src/GaffComparator.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;GASG;AACH,IAAiB,cAAc,CAqD9B;AArDD,WAAiB,cAAc;IAC7B;;;;;OAKG;IACU,sBAAO,GAClB,UAAI,MAAuC;QAC3C,OAAA,UAAC,CAAI,EAAE,CAAI;YACT,IAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;IAND,CAMC,CAAC;IAEJ;;;;;OAKG;IACU,oBAAK,GAChB,UAAI,MAAuC;QAC3C,OAAA,UAAC,CAAI,EAAE,CAAI;YACT,IAAM,IAAI,GAAG,UAAC,CAAI;gBAChB,OAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAvB,CAAuB,CAAC;YAArD,CAAqD,CAAC;YACxD,IAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;IARD,CAQC,CAAC;IAEJ;;;;;OAKG;IACU,sBAAO,GAClB,UAAI,OAAwC;QAC5C,OAAA,UAAC,CAAI,EAAE,CAAI;YACT,IAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAErC,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;IAND,CAMC,CAAC;IAEJ,IAAM,OAAO,GAAG,UAAC,CAAS,EAAE,CAAS,IAAK,OAAA,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAlB,CAAkB,CAAC;IAC7D,IAAM,IAAI,GAAG,UAAI,IAAa,IAAU,OAAA,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAArC,CAAqC,CAAC;AAChF,CAAC,EArDgB,cAAc,8BAAd,cAAc,QAqD9B"}
1
+ {"version":3,"file":"GaffComparator.js","sourceRoot":"","sources":["../src/GaffComparator.ts"],"names":[],"mappings":"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"}