lt-public-transport-sdk 1.0.0
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/LICENSE +21 -0
- package/README.md +283 -0
- package/assets/architecture.png +0 -0
- package/dist/config.d.ts +221 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +200 -0
- package/dist/config.js.map +1 -0
- package/dist/enrichment/index.d.ts +6 -0
- package/dist/enrichment/index.d.ts.map +1 -0
- package/dist/enrichment/index.js +6 -0
- package/dist/enrichment/index.js.map +1 -0
- package/dist/enrichment/route-matcher.d.ts +64 -0
- package/dist/enrichment/route-matcher.d.ts.map +1 -0
- package/dist/enrichment/route-matcher.js +121 -0
- package/dist/enrichment/route-matcher.js.map +1 -0
- package/dist/errors.d.ts +70 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +104 -0
- package/dist/errors.js.map +1 -0
- package/dist/gtfs/index.d.ts +7 -0
- package/dist/gtfs/index.d.ts.map +1 -0
- package/dist/gtfs/index.js +7 -0
- package/dist/gtfs/index.js.map +1 -0
- package/dist/gtfs/parser.d.ts +39 -0
- package/dist/gtfs/parser.d.ts.map +1 -0
- package/dist/gtfs/parser.js +189 -0
- package/dist/gtfs/parser.js.map +1 -0
- package/dist/gtfs/sync.d.ts +72 -0
- package/dist/gtfs/sync.d.ts.map +1 -0
- package/dist/gtfs/sync.js +271 -0
- package/dist/gtfs/sync.js.map +1 -0
- package/dist/index.d.ts +203 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +342 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/gps-full.d.ts +39 -0
- package/dist/parsers/gps-full.d.ts.map +1 -0
- package/dist/parsers/gps-full.js +212 -0
- package/dist/parsers/gps-full.js.map +1 -0
- package/dist/parsers/gps-lite.d.ts +60 -0
- package/dist/parsers/gps-lite.d.ts.map +1 -0
- package/dist/parsers/gps-lite.js +141 -0
- package/dist/parsers/gps-lite.js.map +1 -0
- package/dist/parsers/index.d.ts +7 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +7 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/schemas.d.ts +129 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +200 -0
- package/dist/schemas.js.map +1 -0
- package/dist/scripts/test-city-specific.d.ts +2 -0
- package/dist/scripts/test-city-specific.d.ts.map +1 -0
- package/dist/scripts/test-city-specific.js +264 -0
- package/dist/scripts/test-city-specific.js.map +1 -0
- package/dist/scripts/test-config-options.d.ts +2 -0
- package/dist/scripts/test-config-options.d.ts.map +1 -0
- package/dist/scripts/test-config-options.js +166 -0
- package/dist/scripts/test-config-options.js.map +1 -0
- package/dist/scripts/test-data-quality.d.ts +2 -0
- package/dist/scripts/test-data-quality.d.ts.map +1 -0
- package/dist/scripts/test-data-quality.js +204 -0
- package/dist/scripts/test-data-quality.js.map +1 -0
- package/dist/scripts/test-error-handling.d.ts +2 -0
- package/dist/scripts/test-error-handling.d.ts.map +1 -0
- package/dist/scripts/test-error-handling.js +146 -0
- package/dist/scripts/test-error-handling.js.map +1 -0
- package/dist/scripts/test-live.d.ts +2 -0
- package/dist/scripts/test-live.d.ts.map +1 -0
- package/dist/scripts/test-live.js +121 -0
- package/dist/scripts/test-live.js.map +1 -0
- package/dist/types.d.ts +120 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/coordinates.d.ts +68 -0
- package/dist/utils/coordinates.d.ts.map +1 -0
- package/dist/utils/coordinates.js +98 -0
- package/dist/utils/coordinates.js.map +1 -0
- package/dist/utils/encoding.d.ts +47 -0
- package/dist/utils/encoding.d.ts.map +1 -0
- package/dist/utils/encoding.js +153 -0
- package/dist/utils/encoding.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/time.d.ts +50 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +94 -0
- package/dist/utils/time.js.map +1 -0
- package/package.json +84 -0
package/dist/schemas.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for runtime validation of external data
|
|
3
|
+
* @module schemas
|
|
4
|
+
*
|
|
5
|
+
* These schemas validate data from stops.lt GPS streams and GTFS files.
|
|
6
|
+
* They provide:
|
|
7
|
+
* - Type coercion (string → number)
|
|
8
|
+
* - Clear error messages when format changes
|
|
9
|
+
* - Documentation of expected data structure
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Coordinate Validation
|
|
14
|
+
// =============================================================================
|
|
15
|
+
/** Lithuania bounding box for coordinate validation */
|
|
16
|
+
const LITHUANIA_LAT_MIN = 53.5;
|
|
17
|
+
const LITHUANIA_LAT_MAX = 56.5;
|
|
18
|
+
const LITHUANIA_LON_MIN = 20.5;
|
|
19
|
+
const LITHUANIA_LON_MAX = 27.0;
|
|
20
|
+
/**
|
|
21
|
+
* Validates a raw integer coordinate (needs division by 1,000,000).
|
|
22
|
+
*/
|
|
23
|
+
const rawCoordinateSchema = z.coerce.number().int();
|
|
24
|
+
/**
|
|
25
|
+
* Validates a WGS84 latitude within Lithuania bounds.
|
|
26
|
+
*/
|
|
27
|
+
const latitudeSchema = z.coerce.number()
|
|
28
|
+
.refine((val) => val >= LITHUANIA_LAT_MIN && val <= LITHUANIA_LAT_MAX, { message: 'Latitude outside Lithuania bounds' });
|
|
29
|
+
/**
|
|
30
|
+
* Validates a WGS84 longitude within Lithuania bounds.
|
|
31
|
+
*/
|
|
32
|
+
const longitudeSchema = z.coerce.number()
|
|
33
|
+
.refine((val) => val >= LITHUANIA_LON_MIN && val <= LITHUANIA_LON_MAX, { message: 'Longitude outside Lithuania bounds' });
|
|
34
|
+
// =============================================================================
|
|
35
|
+
// GPS Full Format Schema
|
|
36
|
+
// =============================================================================
|
|
37
|
+
/**
|
|
38
|
+
* Schema for a GPS full format row.
|
|
39
|
+
* Columns vary by city but these are the core fields present in all cities.
|
|
40
|
+
*/
|
|
41
|
+
export const gpsFullRowSchema = z.object({
|
|
42
|
+
// Required fields (all cities)
|
|
43
|
+
Transportas: z.string().min(1, 'Transport type required'),
|
|
44
|
+
Marsrutas: z.string(), // Can be empty for some vehicles
|
|
45
|
+
MasinosNumeris: z.string().min(1, 'Vehicle number required'),
|
|
46
|
+
Ilguma: rawCoordinateSchema,
|
|
47
|
+
Platuma: rawCoordinateSchema,
|
|
48
|
+
Greitis: z.coerce.number().nonnegative().default(0),
|
|
49
|
+
Azimutas: z.coerce.number().min(0).max(360).default(0),
|
|
50
|
+
// Optional fields (city-specific)
|
|
51
|
+
ReisoID: z.string().optional(),
|
|
52
|
+
Grafikas: z.string().optional(), // Kaunas only
|
|
53
|
+
ReisoPradziaMinutemis: z.coerce.number().optional(),
|
|
54
|
+
NuokrypisSekundemis: z.coerce.number().optional(),
|
|
55
|
+
MatavimoLaikas: z.coerce.number().optional(), // Vilnius, Alytus, Druskininkai
|
|
56
|
+
SekanciosStotelesNum: z.coerce.number().optional(), // Kaunas only
|
|
57
|
+
AtvykimoLaikasSekundemis: z.coerce.number().optional(), // Kaunas only
|
|
58
|
+
MasinosTipas: z.string().optional(),
|
|
59
|
+
KryptiesTipas: z.string().optional(), // Vilnius only
|
|
60
|
+
KryptiesPavadinimas: z.string().optional(),
|
|
61
|
+
ReisoIdGTFS: z.string().optional(), // Vilnius only
|
|
62
|
+
IntervalasPries: z.coerce.number().optional(), // Vilnius only
|
|
63
|
+
IntervalasPaskui: z.coerce.number().optional(), // Vilnius only
|
|
64
|
+
}).loose(); // Allow unknown columns from different cities
|
|
65
|
+
// =============================================================================
|
|
66
|
+
// GPS Lite Format Schemas
|
|
67
|
+
// =============================================================================
|
|
68
|
+
/**
|
|
69
|
+
* Schema for Panevėžys GPS lite format (9 columns, no header).
|
|
70
|
+
* Columns: type, route, lon, lat, speed, azimuth, ?, vehicleId, ?
|
|
71
|
+
*/
|
|
72
|
+
export const gpsLitePanevezysSchema = z.tuple([
|
|
73
|
+
z.string(), // [0] type
|
|
74
|
+
z.string(), // [1] route (can be empty)
|
|
75
|
+
z.coerce.number(), // [2] longitude (raw int)
|
|
76
|
+
z.coerce.number(), // [3] latitude (raw int)
|
|
77
|
+
z.coerce.number(), // [4] speed
|
|
78
|
+
z.coerce.number(), // [5] azimuth
|
|
79
|
+
z.string(), // [6] unknown
|
|
80
|
+
z.string().min(1), // [7] vehicleId
|
|
81
|
+
z.string(), // [8] unknown
|
|
82
|
+
]);
|
|
83
|
+
/**
|
|
84
|
+
* Schema for Tauragė GPS lite format (8 columns, no header).
|
|
85
|
+
* Columns: type, route, lon, lat, speed, azimuth, vehicleId, ?
|
|
86
|
+
*/
|
|
87
|
+
export const gpsLiteTaurageSchema = z.tuple([
|
|
88
|
+
z.string(), // [0] type
|
|
89
|
+
z.string(), // [1] route (can be alphanumeric like S11)
|
|
90
|
+
z.coerce.number(), // [2] longitude (raw int)
|
|
91
|
+
z.coerce.number(), // [3] latitude (raw int)
|
|
92
|
+
z.coerce.number(), // [4] speed
|
|
93
|
+
z.coerce.number(), // [5] azimuth
|
|
94
|
+
z.string().min(1), // [6] vehicleId
|
|
95
|
+
z.string(), // [7] unknown
|
|
96
|
+
]);
|
|
97
|
+
// =============================================================================
|
|
98
|
+
// GTFS Routes Schema
|
|
99
|
+
// =============================================================================
|
|
100
|
+
/**
|
|
101
|
+
* Schema for a GTFS routes.txt row.
|
|
102
|
+
*/
|
|
103
|
+
export const gtfsRouteSchema = z.object({
|
|
104
|
+
route_id: z.string().min(1, 'Route ID required'),
|
|
105
|
+
route_short_name: z.string().min(1, 'Route short name required'),
|
|
106
|
+
route_long_name: z.string().default(''),
|
|
107
|
+
route_type: z.coerce.number().int(),
|
|
108
|
+
route_color: z.string().default('FFFFFF'),
|
|
109
|
+
route_text_color: z.string().default('000000'),
|
|
110
|
+
// Optional fields
|
|
111
|
+
agency_id: z.string().optional(),
|
|
112
|
+
route_desc: z.string().optional(),
|
|
113
|
+
route_url: z.string().optional(),
|
|
114
|
+
}).loose();
|
|
115
|
+
// =============================================================================
|
|
116
|
+
// GTFS Stops Schema
|
|
117
|
+
// =============================================================================
|
|
118
|
+
/**
|
|
119
|
+
* Schema for a GTFS stops.txt row.
|
|
120
|
+
*/
|
|
121
|
+
export const gtfsStopSchema = z.object({
|
|
122
|
+
stop_id: z.string().min(1, 'Stop ID required'),
|
|
123
|
+
stop_name: z.string().min(1, 'Stop name required'),
|
|
124
|
+
stop_lat: latitudeSchema,
|
|
125
|
+
stop_lon: longitudeSchema,
|
|
126
|
+
// Optional fields
|
|
127
|
+
stop_code: z.string().optional(),
|
|
128
|
+
stop_desc: z.string().optional(),
|
|
129
|
+
location_type: z.coerce.number().optional(),
|
|
130
|
+
parent_station: z.string().optional(),
|
|
131
|
+
}).loose();
|
|
132
|
+
// =============================================================================
|
|
133
|
+
// Client Config Schema
|
|
134
|
+
// =============================================================================
|
|
135
|
+
/**
|
|
136
|
+
* Schema for LtTransport client configuration.
|
|
137
|
+
*/
|
|
138
|
+
export const clientConfigSchema = z.object({
|
|
139
|
+
/** Directory for caching GTFS data */
|
|
140
|
+
cacheDir: z.string().optional(),
|
|
141
|
+
/** Request timeout in milliseconds (must be positive) */
|
|
142
|
+
requestTimeout: z.number().int().positive().default(10000),
|
|
143
|
+
/** User-Agent header for HTTP requests */
|
|
144
|
+
userAgent: z.string().default('lt-public-transport-sdk/1.0.0'),
|
|
145
|
+
/** Threshold in milliseconds for marking data as stale (must be positive) */
|
|
146
|
+
staleThresholdMs: z.number().int().positive().default(300000),
|
|
147
|
+
/** Whether to automatically enrich silver-tier cities with GTFS data */
|
|
148
|
+
autoEnrich: z.boolean().default(true),
|
|
149
|
+
/** Whether to filter out vehicles with invalid coordinates */
|
|
150
|
+
filterInvalidCoords: z.boolean().default(true),
|
|
151
|
+
/** Whether to filter out stale data */
|
|
152
|
+
filterStale: z.boolean().default(false),
|
|
153
|
+
}).strict();
|
|
154
|
+
// =============================================================================
|
|
155
|
+
// Parsed Vehicle Schema
|
|
156
|
+
// =============================================================================
|
|
157
|
+
/**
|
|
158
|
+
* Schema for a fully parsed and normalized Vehicle object.
|
|
159
|
+
* Used to validate output before returning to user.
|
|
160
|
+
*/
|
|
161
|
+
export const vehicleSchema = z.object({
|
|
162
|
+
id: z.string().min(1),
|
|
163
|
+
vehicleNumber: z.string().min(1),
|
|
164
|
+
route: z.string(),
|
|
165
|
+
type: z.enum(['bus', 'trolleybus', 'ferry', 'unknown']),
|
|
166
|
+
latitude: latitudeSchema,
|
|
167
|
+
longitude: longitudeSchema,
|
|
168
|
+
bearing: z.number().min(0).max(360),
|
|
169
|
+
speed: z.number().nonnegative(),
|
|
170
|
+
destination: z.string().nullable(),
|
|
171
|
+
delaySeconds: z.number().nullable(),
|
|
172
|
+
tripId: z.string().nullable(),
|
|
173
|
+
gtfsTripId: z.string().nullable(),
|
|
174
|
+
nextStopId: z.string().nullable(),
|
|
175
|
+
arrivalTimeSeconds: z.number().nullable(),
|
|
176
|
+
isStale: z.boolean(),
|
|
177
|
+
measuredAt: z.date(),
|
|
178
|
+
});
|
|
179
|
+
// =============================================================================
|
|
180
|
+
// Helper Functions
|
|
181
|
+
// =============================================================================
|
|
182
|
+
/**
|
|
183
|
+
* Safely parse a value with a Zod schema, returning null on failure.
|
|
184
|
+
*/
|
|
185
|
+
export function safeParse(schema, data) {
|
|
186
|
+
const result = schema.safeParse(data);
|
|
187
|
+
return result.success ? result.data : null;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Parse a value with a Zod schema, throwing a detailed error on failure.
|
|
191
|
+
*/
|
|
192
|
+
export function parseOrThrow(schema, data, context) {
|
|
193
|
+
const result = schema.safeParse(data);
|
|
194
|
+
if (result.success) {
|
|
195
|
+
return result.data;
|
|
196
|
+
}
|
|
197
|
+
const errors = result.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`).join(', ');
|
|
198
|
+
throw new Error(`${context ?? 'Validation failed'}: ${errors}`);
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,uDAAuD;AACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B;;GAEG;AACH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;AAEpD;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;KACrC,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,iBAAiB,IAAI,GAAG,IAAI,iBAAiB,EAC7D,EAAE,OAAO,EAAE,mCAAmC,EAAE,CACjD,CAAC;AAEJ;;GAEG;AACH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;KACtC,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,iBAAiB,IAAI,GAAG,IAAI,iBAAiB,EAC7D,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAClD,CAAC;AAEJ,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,+BAA+B;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC;IACzD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,iCAAiC;IACxD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC;IAC5D,MAAM,EAAE,mBAAmB;IAC3B,OAAO,EAAE,mBAAmB;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtD,kCAAkC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,cAAc;IAC/C,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnD,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,gCAAgC;IAC9E,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,cAAc;IAClE,wBAAwB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,cAAc;IACtE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,eAAe;IACrD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,eAAe;IACnD,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,eAAe;IAC9D,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,eAAe;CAChE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,8CAA8C;AAI1D,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC5C,CAAC,CAAC,MAAM,EAAE,EAAE,WAAW;IACvB,CAAC,CAAC,MAAM,EAAE,EAAE,2BAA2B;IACvC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,0BAA0B;IAC7C,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,yBAAyB;IAC5C,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,YAAY;IAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,cAAc;IACjC,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc;IAC1B,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB;IACnC,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc;CAC3B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC1C,CAAC,CAAC,MAAM,EAAE,EAAE,WAAW;IACvB,CAAC,CAAC,MAAM,EAAE,EAAE,2CAA2C;IACvD,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,0BAA0B;IAC7C,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,yBAAyB;IAC5C,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,YAAY;IAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,cAAc;IACjC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB;IACnC,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc;CAC3B,CAAC,CAAC;AAKH,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC;IAChD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,2BAA2B,CAAC;IAChE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9C,kBAAkB;IAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC,KAAK,EAAE,CAAC;AAIX,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC;IAClD,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,eAAe;IACzB,kBAAkB;IAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC,KAAK,EAAE,CAAC;AAIX,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,sCAAsC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE/B,yDAAyD;IACzD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAE1D,0CAA0C;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC;IAE9D,6EAA6E;IAC7E,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAE7D,wEAAwE;IACxE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAErC,8DAA8D;IAC9D,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAE9C,uCAAuC;IACvC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACxC,CAAC,CAAC,MAAM,EAAE,CAAC;AAIZ,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACvD,QAAQ,EAAE,cAAc;IACxB,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE;CACrB,CAAC,CAAC;AAIH,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,SAAS,CAAI,MAAoB,EAAE,IAAa;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAI,MAAoB,EAAE,IAAa,EAAE,OAAgB;IACnF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1G,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,IAAI,mBAAmB,KAAK,MAAM,EAAE,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-city-specific.d.ts","sourceRoot":"","sources":["../../src/scripts/test-city-specific.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { LtTransport } from '../index.js';
|
|
2
|
+
const results = [];
|
|
3
|
+
function pass(name, message) {
|
|
4
|
+
results.push({ name, passed: true, message });
|
|
5
|
+
console.log(` ✅ ${name}: ${message}`);
|
|
6
|
+
}
|
|
7
|
+
function fail(name, message) {
|
|
8
|
+
results.push({ name, passed: false, message });
|
|
9
|
+
console.log(` ❌ ${name}: ${message}`);
|
|
10
|
+
}
|
|
11
|
+
function warn(name, message) {
|
|
12
|
+
results.push({ name, passed: true, message: `⚠️ ${message}` });
|
|
13
|
+
console.log(` ⚠️ ${name}: ${message}`);
|
|
14
|
+
}
|
|
15
|
+
async function testVilniusFields() {
|
|
16
|
+
console.log('\n📍 Testing VILNIUS-specific fields...');
|
|
17
|
+
const client = new LtTransport();
|
|
18
|
+
const vehicles = await client.getVehicles('vilnius');
|
|
19
|
+
if (vehicles.length === 0) {
|
|
20
|
+
warn('vilnius-empty', 'No vehicles returned');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// Vilnius should have gtfsTripId (ReisoIdGTFS) for most vehicles
|
|
24
|
+
const withGtfsTripId = vehicles.filter(v => v.gtfsTripId !== null);
|
|
25
|
+
if (withGtfsTripId.length > 0) {
|
|
26
|
+
pass('vilnius-gtfs-trip', `${String(withGtfsTripId.length)}/${String(vehicles.length)} have gtfsTripId`);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
warn('vilnius-gtfs-trip', 'No vehicles have gtfsTripId - field may not be in current data');
|
|
30
|
+
}
|
|
31
|
+
// Vilnius should have tripId (ReisoID)
|
|
32
|
+
const withTripId = vehicles.filter(v => v.tripId !== null && v.tripId !== '');
|
|
33
|
+
if (withTripId.length > 0) {
|
|
34
|
+
pass('vilnius-trip-id', `${String(withTripId.length)}/${String(vehicles.length)} have tripId`);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
fail('vilnius-trip-id', 'No vehicles have tripId');
|
|
38
|
+
}
|
|
39
|
+
// Vilnius should have destinations from GTFS enrichment
|
|
40
|
+
const withDestination = vehicles.filter(v => v.destination !== null);
|
|
41
|
+
if (withDestination.length > vehicles.length * 0.5) {
|
|
42
|
+
pass('vilnius-destination', `${String(withDestination.length)}/${String(vehicles.length)} have destinations`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
warn('vilnius-destination', `Only ${String(withDestination.length)}/${String(vehicles.length)} have destinations`);
|
|
46
|
+
}
|
|
47
|
+
// Check vehicle types - Vilnius has buses and trolleybuses
|
|
48
|
+
const buses = vehicles.filter(v => v.type === 'bus');
|
|
49
|
+
const trolleys = vehicles.filter(v => v.type === 'trolleybus');
|
|
50
|
+
if (buses.length > 0 && trolleys.length > 0) {
|
|
51
|
+
pass('vilnius-types', `Has ${String(buses.length)} buses and ${String(trolleys.length)} trolleybuses`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
warn('vilnius-types', `Only one type: ${String(buses.length)} buses, ${String(trolleys.length)} trolleys`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function testKaunasFields() {
|
|
58
|
+
console.log('\n📍 Testing KAUNAS-specific fields...');
|
|
59
|
+
const client = new LtTransport();
|
|
60
|
+
const vehicles = await client.getVehicles('kaunas');
|
|
61
|
+
if (vehicles.length === 0) {
|
|
62
|
+
warn('kaunas-empty', 'No vehicles returned');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Kaunas uses Grafikas instead of ReisoID - should map to tripId
|
|
66
|
+
const withTripId = vehicles.filter(v => v.tripId !== null && v.tripId !== '');
|
|
67
|
+
if (withTripId.length > 0) {
|
|
68
|
+
pass('kaunas-grafikas', `${String(withTripId.length)}/${String(vehicles.length)} have tripId (from Grafikas)`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
warn('kaunas-grafikas', 'No vehicles have tripId from Grafikas');
|
|
72
|
+
}
|
|
73
|
+
// Kaunas should have nextStopId (SekanciosStotelesNum)
|
|
74
|
+
const withNextStop = vehicles.filter(v => v.nextStopId !== null);
|
|
75
|
+
if (withNextStop.length > 0) {
|
|
76
|
+
pass('kaunas-next-stop', `${String(withNextStop.length)}/${String(vehicles.length)} have nextStopId`);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
warn('kaunas-next-stop', 'No vehicles have nextStopId - field may not be in current data');
|
|
80
|
+
}
|
|
81
|
+
// Kaunas should have arrivalTimeSeconds (AtvykimoLaikasSekundemis) - this is FUTURE prediction
|
|
82
|
+
const withArrival = vehicles.filter(v => v.arrivalTimeSeconds !== null);
|
|
83
|
+
if (withArrival.length > 0) {
|
|
84
|
+
pass('kaunas-arrival', `${String(withArrival.length)}/${String(vehicles.length)} have arrivalTimeSeconds`);
|
|
85
|
+
// Validate that arrival times are reasonable (0-86400+ seconds from midnight)
|
|
86
|
+
const firstWithArrival = withArrival[0];
|
|
87
|
+
if (firstWithArrival !== undefined) {
|
|
88
|
+
const arrTime = firstWithArrival.arrivalTimeSeconds;
|
|
89
|
+
if (arrTime !== null && arrTime >= 0 && arrTime < 200000) { // Up to ~55 hours (service day)
|
|
90
|
+
pass('kaunas-arrival-range', `Arrival time in valid range: ${String(arrTime)} seconds`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
fail('kaunas-arrival-range', `Invalid arrival time: ${String(arrTime)}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
warn('kaunas-arrival', 'No vehicles have arrivalTimeSeconds');
|
|
99
|
+
}
|
|
100
|
+
// Kaunas has trolleybuses
|
|
101
|
+
const trolleys = vehicles.filter(v => v.type === 'trolleybus');
|
|
102
|
+
if (trolleys.length > 0) {
|
|
103
|
+
pass('kaunas-trolley', `Has ${String(trolleys.length)} trolleybuses`);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
warn('kaunas-trolley', 'No trolleybuses found');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function testKlaipedaFields() {
|
|
110
|
+
console.log('\n📍 Testing KLAIPĖDA-specific fields...');
|
|
111
|
+
const client = new LtTransport();
|
|
112
|
+
const vehicles = await client.getVehicles('klaipeda');
|
|
113
|
+
if (vehicles.length === 0) {
|
|
114
|
+
warn('klaipeda-empty', 'No vehicles returned');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// Klaipėda uses minimal format - basic fields should exist
|
|
118
|
+
const validVehicles = vehicles.filter(v => v.id !== '' &&
|
|
119
|
+
v.vehicleNumber !== '' &&
|
|
120
|
+
v.latitude !== 0 &&
|
|
121
|
+
v.longitude !== 0);
|
|
122
|
+
if (validVehicles.length === vehicles.length) {
|
|
123
|
+
pass('klaipeda-basic', `All ${String(vehicles.length)} vehicles have valid basic fields`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
fail('klaipeda-basic', `${String(vehicles.length - validVehicles.length)} vehicles missing basic fields`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async function testPanevezysLiteFormat() {
|
|
130
|
+
console.log('\n📍 Testing PANEVĖŽYS (Lite 9-col format)...');
|
|
131
|
+
const client = new LtTransport();
|
|
132
|
+
await client.sync('panevezys'); // Need GTFS for enrichment
|
|
133
|
+
const vehicles = await client.getVehicles('panevezys');
|
|
134
|
+
if (vehicles.length === 0) {
|
|
135
|
+
warn('panevezys-empty', 'No vehicles returned');
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// Panevėžys lite format should parse correctly
|
|
139
|
+
const validVehicles = vehicles.filter(v => v.id !== '' &&
|
|
140
|
+
v.vehicleNumber !== '' &&
|
|
141
|
+
v.latitude !== 0 &&
|
|
142
|
+
v.longitude !== 0);
|
|
143
|
+
if (validVehicles.length === vehicles.length) {
|
|
144
|
+
pass('panevezys-parse', `All ${String(vehicles.length)} vehicles parsed correctly`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
fail('panevezys-parse', `${String(vehicles.length - validVehicles.length)} vehicles failed parsing`);
|
|
148
|
+
}
|
|
149
|
+
// All lite format vehicles should be type 'bus' (no type info in stream)
|
|
150
|
+
const allBus = vehicles.every(v => v.type === 'bus');
|
|
151
|
+
if (allBus) {
|
|
152
|
+
pass('panevezys-type', 'All vehicles correctly typed as bus (lite format default)');
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
fail('panevezys-type', 'Some vehicles have incorrect type');
|
|
156
|
+
}
|
|
157
|
+
// Enrichment should add destinations
|
|
158
|
+
const withDestination = vehicles.filter(v => v.destination !== null);
|
|
159
|
+
if (withDestination.length > 0) {
|
|
160
|
+
pass('panevezys-enrich', `${String(withDestination.length)}/${String(vehicles.length)} enriched with destinations`);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
warn('panevezys-enrich', 'No enrichment - check GTFS sync');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function testTaurageLiteFormat() {
|
|
167
|
+
console.log('\n📍 Testing TAURAGĖ (Lite 8-col format)...');
|
|
168
|
+
const client = new LtTransport();
|
|
169
|
+
await client.sync('taurage');
|
|
170
|
+
const vehicles = await client.getVehicles('taurage');
|
|
171
|
+
if (vehicles.length === 0) {
|
|
172
|
+
warn('taurage-empty', 'No vehicles returned (may be off-hours)');
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
// Tauragė has alphanumeric routes like S11, S19
|
|
176
|
+
const alphanumericRoutes = vehicles.filter(v => /^[A-Za-z]/.test(v.route));
|
|
177
|
+
if (alphanumericRoutes.length > 0) {
|
|
178
|
+
const routes = [...new Set(alphanumericRoutes.map(v => v.route))];
|
|
179
|
+
pass('taurage-routes', `Has alphanumeric routes: ${routes.slice(0, 5).join(', ')}`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// Numeric routes are also valid
|
|
183
|
+
const numericRoutes = vehicles.filter(v => /^\d+$/.test(v.route));
|
|
184
|
+
if (numericRoutes.length > 0) {
|
|
185
|
+
pass('taurage-routes', 'Has numeric routes (alphanumeric format may have changed)');
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
warn('taurage-routes', 'No valid routes found');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Tauragė lite format - 8 columns, vehicleId at col[6]
|
|
192
|
+
const validVehicles = vehicles.filter(v => v.id !== '' &&
|
|
193
|
+
v.vehicleNumber !== '');
|
|
194
|
+
if (validVehicles.length === vehicles.length) {
|
|
195
|
+
pass('taurage-parse', `All ${String(vehicles.length)} vehicles parsed correctly`);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
fail('taurage-parse', `${String(vehicles.length - validVehicles.length)} vehicles failed parsing`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async function testAlytusFields() {
|
|
202
|
+
console.log('\n📍 Testing ALYTUS...');
|
|
203
|
+
const client = new LtTransport();
|
|
204
|
+
const vehicles = await client.getVehicles('alytus');
|
|
205
|
+
if (vehicles.length === 0) {
|
|
206
|
+
warn('alytus-empty', 'No vehicles returned');
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
pass('alytus-count', `${String(vehicles.length)} vehicles retrieved`);
|
|
210
|
+
// Alytus has measuredAt from MatavimoLaikas
|
|
211
|
+
const withValidTime = vehicles.filter(v => {
|
|
212
|
+
const age = Date.now() - v.measuredAt.getTime();
|
|
213
|
+
return age >= 0 && age < 3600000; // Less than 1 hour old
|
|
214
|
+
});
|
|
215
|
+
if (withValidTime.length > vehicles.length * 0.5) {
|
|
216
|
+
pass('alytus-time', `${String(withValidTime.length)}/${String(vehicles.length)} have recent measurement times`);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
warn('alytus-time', `Only ${String(withValidTime.length)}/${String(vehicles.length)} have recent times`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async function testDruskininkaiFields() {
|
|
223
|
+
console.log('\n📍 Testing DRUSKININKAI...');
|
|
224
|
+
const client = new LtTransport();
|
|
225
|
+
const vehicles = await client.getVehicles('druskininkai');
|
|
226
|
+
if (vehicles.length === 0) {
|
|
227
|
+
warn('druskininkai-empty', 'No vehicles returned (small city, may be off-hours)');
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
pass('druskininkai-count', `${String(vehicles.length)} vehicles retrieved`);
|
|
231
|
+
}
|
|
232
|
+
async function runAllTests() {
|
|
233
|
+
console.log('🏙️ CITY-SPECIFIC FIELD VALIDATION');
|
|
234
|
+
console.log('==================================\n');
|
|
235
|
+
// Gold tier full format cities
|
|
236
|
+
await testVilniusFields();
|
|
237
|
+
await testKaunasFields();
|
|
238
|
+
await testKlaipedaFields();
|
|
239
|
+
await testAlytusFields();
|
|
240
|
+
await testDruskininkaiFields();
|
|
241
|
+
// Silver tier lite format cities
|
|
242
|
+
await testPanevezysLiteFormat();
|
|
243
|
+
await testTaurageLiteFormat();
|
|
244
|
+
console.log('\n==================================');
|
|
245
|
+
console.log('RESULTS SUMMARY');
|
|
246
|
+
console.log('==================================');
|
|
247
|
+
const passed = results.filter(r => r.passed).length;
|
|
248
|
+
const failed = results.filter(r => !r.passed).length;
|
|
249
|
+
console.log(`\nPassed: ${String(passed)}/${String(results.length)}`);
|
|
250
|
+
console.log(`Failed: ${String(failed)}/${String(results.length)}`);
|
|
251
|
+
if (failed > 0) {
|
|
252
|
+
console.log('\nFailed tests:');
|
|
253
|
+
results.filter(r => !r.passed).forEach(r => { console.log(` - ${r.name}: ${r.message}`); });
|
|
254
|
+
process.exit(1);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
console.log('\n✅ All city-specific tests passed!');
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
runAllTests().catch((err) => {
|
|
261
|
+
console.error('Test runner failed:', err);
|
|
262
|
+
process.exit(1);
|
|
263
|
+
});
|
|
264
|
+
//# sourceMappingURL=test-city-specific.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-city-specific.js","sourceRoot":"","sources":["../../src/scripts/test-city-specific.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwB1C,MAAM,OAAO,GAAiB,EAAE,CAAC;AAEjC,SAAS,IAAI,CAAC,IAAY,EAAE,OAAe;IACzC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,OAAe;IACzC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,OAAe;IACzC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,iEAAiE;IACjE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;IACnE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3G,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,mBAAmB,EAAE,gEAAgE,CAAC,CAAC;IAC9F,CAAC;IAED,uCAAuC;IACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;IAC9E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACjG,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC;IACrD,CAAC;IAED,wDAAwD;IACxD,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;IACrE,IAAI,eAAe,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACnD,IAAI,CAAC,qBAAqB,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,qBAAqB,EAAE,QAAQ,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACrH,CAAC;IAED,2DAA2D;IAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,eAAe,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACzG,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,eAAe,EAAE,kBAAkB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,iEAAiE;IACjE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;IAC9E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACjH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;IACnE,CAAC;IAED,uDAAuD;IACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;IACjE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,kBAAkB,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACxG,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,kBAAkB,EAAE,gEAAgE,CAAC,CAAC;IAC7F,CAAC;IAED,+FAA+F;IAC/F,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC;IACxE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAE3G,8EAA8E;QAC9E,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,gBAAgB,CAAC,kBAAkB,CAAC;YACpD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,gCAAgC;gBAC1F,IAAI,CAAC,sBAAsB,EAAE,gCAAgC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC1F,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,sBAAsB,EAAE,yBAAyB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,CAAC;IAChE,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,2DAA2D;IAC3D,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxC,CAAC,CAAC,EAAE,KAAK,EAAE;QACX,CAAC,CAAC,aAAa,KAAK,EAAE;QACtB,CAAC,CAAC,QAAQ,KAAK,CAAC;QAChB,CAAC,CAAC,SAAS,KAAK,CAAC,CAClB,CAAC;IAEF,IAAI,aAAa,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7C,IAAI,CAAC,gBAAgB,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,gBAAgB,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC5G,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,2BAA2B;IAC3D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAEvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,+CAA+C;IAC/C,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxC,CAAC,CAAC,EAAE,KAAK,EAAE;QACX,CAAC,CAAC,aAAa,KAAK,EAAE;QACtB,CAAC,CAAC,QAAQ,KAAK,CAAC;QAChB,CAAC,CAAC,SAAS,KAAK,CAAC,CAClB,CAAC;IAEF,IAAI,aAAa,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7C,IAAI,CAAC,iBAAiB,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IACtF,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,iBAAiB,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACvG,CAAC;IAED,yEAAyE;IACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,gBAAgB,EAAE,2DAA2D,CAAC,CAAC;IACtF,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAC;IAC9D,CAAC;IAED,qCAAqC;IACrC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;IACrE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC;IACtH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,kBAAkB,EAAE,iCAAiC,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB;IAClC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,eAAe,EAAE,yCAAyC,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,gDAAgD;IAChD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,gBAAgB,EAAE,4BAA4B,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,gBAAgB,EAAE,2DAA2D,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxC,CAAC,CAAC,EAAE,KAAK,EAAE;QACX,CAAC,CAAC,aAAa,KAAK,EAAE,CACvB,CAAC;IAEF,IAAI,aAAa,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7C,IAAI,CAAC,eAAe,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACrG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEpD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEtE,4CAA4C;IAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAChD,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,uBAAuB;IAC3D,CAAC,CAAC,CAAC;IAEH,IAAI,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACjD,IAAI,CAAC,aAAa,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAClH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,aAAa,EAAE,QAAQ,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC3G,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAE1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,oBAAoB,EAAE,qDAAqD,CAAC,CAAC;QAClF,OAAO;IACT,CAAC;IAED,IAAI,CAAC,oBAAoB,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,+BAA+B;IAC/B,MAAM,iBAAiB,EAAE,CAAC;IAC1B,MAAM,gBAAgB,EAAE,CAAC;IACzB,MAAM,kBAAkB,EAAE,CAAC;IAC3B,MAAM,gBAAgB,EAAE,CAAC;IACzB,MAAM,sBAAsB,EAAE,CAAC;IAE/B,iCAAiC;IACjC,MAAM,uBAAuB,EAAE,CAAC;IAChC,MAAM,qBAAqB,EAAE,CAAC;IAE9B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEnE,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACnC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-config-options.d.ts","sourceRoot":"","sources":["../../src/scripts/test-config-options.ts"],"names":[],"mappings":""}
|