minotor 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.
Files changed (131) hide show
  1. package/.cspell.json +43 -0
  2. package/.czrc +3 -0
  3. package/.editorconfig +10 -0
  4. package/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  5. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. package/.github/ISSUE_TEMPLATE/feature_request.md +29 -0
  7. package/.github/PULL_REQUEST_TEMPLATE.md +4 -0
  8. package/.github/workflows/minotor.yml +85 -0
  9. package/.prettierrc +7 -0
  10. package/.releaserc.json +27 -0
  11. package/CHANGELOG.md +6 -0
  12. package/LICENSE +21 -0
  13. package/README.md +166 -0
  14. package/dist/bundle.cjs.js +16507 -0
  15. package/dist/bundle.cjs.js.map +1 -0
  16. package/dist/bundle.esm.js +16496 -0
  17. package/dist/bundle.esm.js.map +1 -0
  18. package/dist/bundle.umd.js +2 -0
  19. package/dist/bundle.umd.js.map +1 -0
  20. package/dist/cli/__tests__/minotor.test.d.ts +1 -0
  21. package/dist/cli/minotor.d.ts +5 -0
  22. package/dist/cli/repl.d.ts +1 -0
  23. package/dist/cli/utils.d.ts +3 -0
  24. package/dist/cli.mjs +20504 -0
  25. package/dist/cli.mjs.map +1 -0
  26. package/dist/gtfs/__tests__/parser.test.d.ts +1 -0
  27. package/dist/gtfs/__tests__/routes.test.d.ts +1 -0
  28. package/dist/gtfs/__tests__/services.test.d.ts +1 -0
  29. package/dist/gtfs/__tests__/stops.test.d.ts +1 -0
  30. package/dist/gtfs/__tests__/time.test.d.ts +1 -0
  31. package/dist/gtfs/__tests__/transfers.test.d.ts +1 -0
  32. package/dist/gtfs/__tests__/trips.test.d.ts +1 -0
  33. package/dist/gtfs/__tests__/utils.test.d.ts +1 -0
  34. package/dist/gtfs/parser.d.ts +34 -0
  35. package/dist/gtfs/profiles/__tests__/ch.test.d.ts +1 -0
  36. package/dist/gtfs/profiles/ch.d.ts +2 -0
  37. package/dist/gtfs/profiles/standard.d.ts +2 -0
  38. package/dist/gtfs/routes.d.ts +11 -0
  39. package/dist/gtfs/services.d.ts +19 -0
  40. package/dist/gtfs/stops.d.ts +20 -0
  41. package/dist/gtfs/time.d.ts +17 -0
  42. package/dist/gtfs/transfers.d.ts +22 -0
  43. package/dist/gtfs/trips.d.ts +26 -0
  44. package/dist/gtfs/utils.d.ts +21 -0
  45. package/dist/index.d.ts +11 -0
  46. package/dist/routing/__tests__/router.test.d.ts +1 -0
  47. package/dist/routing/plotter.d.ts +11 -0
  48. package/dist/routing/query.d.ts +35 -0
  49. package/dist/routing/result.d.ts +28 -0
  50. package/dist/routing/route.d.ts +25 -0
  51. package/dist/routing/router.d.ts +33 -0
  52. package/dist/stops/__tests__/io.test.d.ts +1 -0
  53. package/dist/stops/__tests__/stopFinder.test.d.ts +1 -0
  54. package/dist/stops/i18n.d.ts +10 -0
  55. package/dist/stops/io.d.ts +4 -0
  56. package/dist/stops/proto/stops.d.ts +53 -0
  57. package/dist/stops/stops.d.ts +16 -0
  58. package/dist/stops/stopsIndex.d.ts +52 -0
  59. package/dist/timetable/__tests__/io.test.d.ts +1 -0
  60. package/dist/timetable/__tests__/timetable.test.d.ts +1 -0
  61. package/dist/timetable/duration.d.ts +51 -0
  62. package/dist/timetable/io.d.ts +8 -0
  63. package/dist/timetable/proto/timetable.d.ts +122 -0
  64. package/dist/timetable/time.d.ts +98 -0
  65. package/dist/timetable/timetable.d.ts +82 -0
  66. package/dist/umdIndex.d.ts +9 -0
  67. package/eslint.config.mjs +52 -0
  68. package/package.json +109 -0
  69. package/rollup.config.js +44 -0
  70. package/src/cli/__tests__/minotor.test.ts +23 -0
  71. package/src/cli/minotor.ts +112 -0
  72. package/src/cli/repl.ts +200 -0
  73. package/src/cli/utils.ts +36 -0
  74. package/src/gtfs/__tests__/parser.test.ts +591 -0
  75. package/src/gtfs/__tests__/resources/sample-feed/agency.txt +2 -0
  76. package/src/gtfs/__tests__/resources/sample-feed/calendar.txt +3 -0
  77. package/src/gtfs/__tests__/resources/sample-feed/calendar_dates.txt +2 -0
  78. package/src/gtfs/__tests__/resources/sample-feed/fare_attributes.txt +3 -0
  79. package/src/gtfs/__tests__/resources/sample-feed/fare_rules.txt +5 -0
  80. package/src/gtfs/__tests__/resources/sample-feed/frequencies.txt +12 -0
  81. package/src/gtfs/__tests__/resources/sample-feed/routes.txt +6 -0
  82. package/src/gtfs/__tests__/resources/sample-feed/sample-feed.zip +0 -0
  83. package/src/gtfs/__tests__/resources/sample-feed/shapes.txt +1 -0
  84. package/src/gtfs/__tests__/resources/sample-feed/stop_times.txt +34 -0
  85. package/src/gtfs/__tests__/resources/sample-feed/stops.txt +10 -0
  86. package/src/gtfs/__tests__/resources/sample-feed/trips.txt +13 -0
  87. package/src/gtfs/__tests__/resources/sample-feed.zip +0 -0
  88. package/src/gtfs/__tests__/routes.test.ts +63 -0
  89. package/src/gtfs/__tests__/services.test.ts +209 -0
  90. package/src/gtfs/__tests__/stops.test.ts +177 -0
  91. package/src/gtfs/__tests__/time.test.ts +27 -0
  92. package/src/gtfs/__tests__/transfers.test.ts +117 -0
  93. package/src/gtfs/__tests__/trips.test.ts +463 -0
  94. package/src/gtfs/__tests__/utils.test.ts +13 -0
  95. package/src/gtfs/parser.ts +154 -0
  96. package/src/gtfs/profiles/__tests__/ch.test.ts +43 -0
  97. package/src/gtfs/profiles/ch.ts +70 -0
  98. package/src/gtfs/profiles/standard.ts +39 -0
  99. package/src/gtfs/routes.ts +48 -0
  100. package/src/gtfs/services.ts +98 -0
  101. package/src/gtfs/stops.ts +112 -0
  102. package/src/gtfs/time.ts +33 -0
  103. package/src/gtfs/transfers.ts +102 -0
  104. package/src/gtfs/trips.ts +228 -0
  105. package/src/gtfs/utils.ts +42 -0
  106. package/src/index.ts +28 -0
  107. package/src/routing/__tests__/router.test.ts +760 -0
  108. package/src/routing/plotter.ts +70 -0
  109. package/src/routing/query.ts +74 -0
  110. package/src/routing/result.ts +108 -0
  111. package/src/routing/route.ts +94 -0
  112. package/src/routing/router.ts +262 -0
  113. package/src/stops/__tests__/io.test.ts +43 -0
  114. package/src/stops/__tests__/stopFinder.test.ts +185 -0
  115. package/src/stops/i18n.ts +40 -0
  116. package/src/stops/io.ts +94 -0
  117. package/src/stops/proto/stops.proto +26 -0
  118. package/src/stops/proto/stops.ts +445 -0
  119. package/src/stops/stops.ts +24 -0
  120. package/src/stops/stopsIndex.ts +151 -0
  121. package/src/timetable/__tests__/io.test.ts +175 -0
  122. package/src/timetable/__tests__/timetable.test.ts +180 -0
  123. package/src/timetable/duration.ts +85 -0
  124. package/src/timetable/io.ts +265 -0
  125. package/src/timetable/proto/timetable.proto +76 -0
  126. package/src/timetable/proto/timetable.ts +1304 -0
  127. package/src/timetable/time.ts +192 -0
  128. package/src/timetable/timetable.ts +286 -0
  129. package/src/umdIndex.ts +14 -0
  130. package/tsconfig.build.json +4 -0
  131. package/tsconfig.json +21 -0
@@ -0,0 +1,1304 @@
1
+ // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
2
+ // versions:
3
+ // protoc-gen-ts_proto v2.6.1
4
+ // protoc v4.23.4
5
+ // source: src/timetable/proto/timetable.proto
6
+
7
+ /* eslint-disable */
8
+ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
9
+
10
+ export const protobufPackage = "minotor.timetable";
11
+
12
+ export enum PickUpDropOffType {
13
+ NOT_AVAILABLE = 0,
14
+ MUST_PHONE_AGENCY = 1,
15
+ MUST_COORDINATE_WITH_DRIVER = 2,
16
+ UNRECOGNIZED = -1,
17
+ }
18
+
19
+ export function pickUpDropOffTypeFromJSON(object: any): PickUpDropOffType {
20
+ switch (object) {
21
+ case 0:
22
+ case "NOT_AVAILABLE":
23
+ return PickUpDropOffType.NOT_AVAILABLE;
24
+ case 1:
25
+ case "MUST_PHONE_AGENCY":
26
+ return PickUpDropOffType.MUST_PHONE_AGENCY;
27
+ case 2:
28
+ case "MUST_COORDINATE_WITH_DRIVER":
29
+ return PickUpDropOffType.MUST_COORDINATE_WITH_DRIVER;
30
+ case -1:
31
+ case "UNRECOGNIZED":
32
+ default:
33
+ return PickUpDropOffType.UNRECOGNIZED;
34
+ }
35
+ }
36
+
37
+ export function pickUpDropOffTypeToJSON(object: PickUpDropOffType): string {
38
+ switch (object) {
39
+ case PickUpDropOffType.NOT_AVAILABLE:
40
+ return "NOT_AVAILABLE";
41
+ case PickUpDropOffType.MUST_PHONE_AGENCY:
42
+ return "MUST_PHONE_AGENCY";
43
+ case PickUpDropOffType.MUST_COORDINATE_WITH_DRIVER:
44
+ return "MUST_COORDINATE_WITH_DRIVER";
45
+ case PickUpDropOffType.UNRECOGNIZED:
46
+ default:
47
+ return "UNRECOGNIZED";
48
+ }
49
+ }
50
+
51
+ export enum TransferType {
52
+ RECOMMENDED_TRANSFER_POINT = 0,
53
+ TIMED_TRANSFER = 1,
54
+ REQUIRES_MINIMAL_TIME = 2,
55
+ IN_SEAT_TRANSFER = 3,
56
+ UNRECOGNIZED = -1,
57
+ }
58
+
59
+ export function transferTypeFromJSON(object: any): TransferType {
60
+ switch (object) {
61
+ case 0:
62
+ case "RECOMMENDED_TRANSFER_POINT":
63
+ return TransferType.RECOMMENDED_TRANSFER_POINT;
64
+ case 1:
65
+ case "TIMED_TRANSFER":
66
+ return TransferType.TIMED_TRANSFER;
67
+ case 2:
68
+ case "REQUIRES_MINIMAL_TIME":
69
+ return TransferType.REQUIRES_MINIMAL_TIME;
70
+ case 3:
71
+ case "IN_SEAT_TRANSFER":
72
+ return TransferType.IN_SEAT_TRANSFER;
73
+ case -1:
74
+ case "UNRECOGNIZED":
75
+ default:
76
+ return TransferType.UNRECOGNIZED;
77
+ }
78
+ }
79
+
80
+ export function transferTypeToJSON(object: TransferType): string {
81
+ switch (object) {
82
+ case TransferType.RECOMMENDED_TRANSFER_POINT:
83
+ return "RECOMMENDED_TRANSFER_POINT";
84
+ case TransferType.TIMED_TRANSFER:
85
+ return "TIMED_TRANSFER";
86
+ case TransferType.REQUIRES_MINIMAL_TIME:
87
+ return "REQUIRES_MINIMAL_TIME";
88
+ case TransferType.IN_SEAT_TRANSFER:
89
+ return "IN_SEAT_TRANSFER";
90
+ case TransferType.UNRECOGNIZED:
91
+ default:
92
+ return "UNRECOGNIZED";
93
+ }
94
+ }
95
+
96
+ export enum RouteType {
97
+ TRAM = 0,
98
+ SUBWAY = 1,
99
+ RAIL = 2,
100
+ BUS = 3,
101
+ FERRY = 4,
102
+ CABLE_TRAM = 5,
103
+ AERIAL_LIFT = 6,
104
+ FUNICULAR = 7,
105
+ TROLLEYBUS = 8,
106
+ MONORAIL = 9,
107
+ UNRECOGNIZED = -1,
108
+ }
109
+
110
+ export function routeTypeFromJSON(object: any): RouteType {
111
+ switch (object) {
112
+ case 0:
113
+ case "TRAM":
114
+ return RouteType.TRAM;
115
+ case 1:
116
+ case "SUBWAY":
117
+ return RouteType.SUBWAY;
118
+ case 2:
119
+ case "RAIL":
120
+ return RouteType.RAIL;
121
+ case 3:
122
+ case "BUS":
123
+ return RouteType.BUS;
124
+ case 4:
125
+ case "FERRY":
126
+ return RouteType.FERRY;
127
+ case 5:
128
+ case "CABLE_TRAM":
129
+ return RouteType.CABLE_TRAM;
130
+ case 6:
131
+ case "AERIAL_LIFT":
132
+ return RouteType.AERIAL_LIFT;
133
+ case 7:
134
+ case "FUNICULAR":
135
+ return RouteType.FUNICULAR;
136
+ case 8:
137
+ case "TROLLEYBUS":
138
+ return RouteType.TROLLEYBUS;
139
+ case 9:
140
+ case "MONORAIL":
141
+ return RouteType.MONORAIL;
142
+ case -1:
143
+ case "UNRECOGNIZED":
144
+ default:
145
+ return RouteType.UNRECOGNIZED;
146
+ }
147
+ }
148
+
149
+ export function routeTypeToJSON(object: RouteType): string {
150
+ switch (object) {
151
+ case RouteType.TRAM:
152
+ return "TRAM";
153
+ case RouteType.SUBWAY:
154
+ return "SUBWAY";
155
+ case RouteType.RAIL:
156
+ return "RAIL";
157
+ case RouteType.BUS:
158
+ return "BUS";
159
+ case RouteType.FERRY:
160
+ return "FERRY";
161
+ case RouteType.CABLE_TRAM:
162
+ return "CABLE_TRAM";
163
+ case RouteType.AERIAL_LIFT:
164
+ return "AERIAL_LIFT";
165
+ case RouteType.FUNICULAR:
166
+ return "FUNICULAR";
167
+ case RouteType.TROLLEYBUS:
168
+ return "TROLLEYBUS";
169
+ case RouteType.MONORAIL:
170
+ return "MONORAIL";
171
+ case RouteType.UNRECOGNIZED:
172
+ default:
173
+ return "UNRECOGNIZED";
174
+ }
175
+ }
176
+
177
+ export interface StopTimes {
178
+ arrival: number;
179
+ departure: number;
180
+ pickUpType?: PickUpDropOffType | undefined;
181
+ dropOffType?: PickUpDropOffType | undefined;
182
+ }
183
+
184
+ export interface Route {
185
+ stopTimes: StopTimes[];
186
+ stops: string[];
187
+ serviceRouteId: string;
188
+ }
189
+
190
+ export interface RoutesAdjacency {
191
+ routes: { [key: string]: Route };
192
+ }
193
+
194
+ export interface RoutesAdjacency_RoutesEntry {
195
+ key: string;
196
+ value: Route | undefined;
197
+ }
198
+
199
+ export interface Transfer {
200
+ destination: string;
201
+ type: TransferType;
202
+ minTransferTime?: number | undefined;
203
+ }
204
+
205
+ export interface StopsAdjacency {
206
+ stops: { [key: string]: StopsAdjacency_StopAdjacency };
207
+ }
208
+
209
+ export interface StopsAdjacency_StopAdjacency {
210
+ transfers: Transfer[];
211
+ routes: string[];
212
+ }
213
+
214
+ export interface StopsAdjacency_StopsEntry {
215
+ key: string;
216
+ value: StopsAdjacency_StopAdjacency | undefined;
217
+ }
218
+
219
+ export interface ServiceRoute {
220
+ type: RouteType;
221
+ name: string;
222
+ }
223
+
224
+ export interface ServiceRoutesMap {
225
+ routes: { [key: string]: ServiceRoute };
226
+ }
227
+
228
+ export interface ServiceRoutesMap_RoutesEntry {
229
+ key: string;
230
+ value: ServiceRoute | undefined;
231
+ }
232
+
233
+ export interface Timetable {
234
+ version: string;
235
+ stopsAdjacency: StopsAdjacency | undefined;
236
+ routesAdjacency: RoutesAdjacency | undefined;
237
+ routes: ServiceRoutesMap | undefined;
238
+ }
239
+
240
+ function createBaseStopTimes(): StopTimes {
241
+ return { arrival: 0, departure: 0, pickUpType: undefined, dropOffType: undefined };
242
+ }
243
+
244
+ export const StopTimes: MessageFns<StopTimes> = {
245
+ encode(message: StopTimes, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
246
+ if (message.arrival !== 0) {
247
+ writer.uint32(8).int32(message.arrival);
248
+ }
249
+ if (message.departure !== 0) {
250
+ writer.uint32(16).int32(message.departure);
251
+ }
252
+ if (message.pickUpType !== undefined) {
253
+ writer.uint32(24).int32(message.pickUpType);
254
+ }
255
+ if (message.dropOffType !== undefined) {
256
+ writer.uint32(32).int32(message.dropOffType);
257
+ }
258
+ return writer;
259
+ },
260
+
261
+ decode(input: BinaryReader | Uint8Array, length?: number): StopTimes {
262
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
263
+ let end = length === undefined ? reader.len : reader.pos + length;
264
+ const message = createBaseStopTimes();
265
+ while (reader.pos < end) {
266
+ const tag = reader.uint32();
267
+ switch (tag >>> 3) {
268
+ case 1: {
269
+ if (tag !== 8) {
270
+ break;
271
+ }
272
+
273
+ message.arrival = reader.int32();
274
+ continue;
275
+ }
276
+ case 2: {
277
+ if (tag !== 16) {
278
+ break;
279
+ }
280
+
281
+ message.departure = reader.int32();
282
+ continue;
283
+ }
284
+ case 3: {
285
+ if (tag !== 24) {
286
+ break;
287
+ }
288
+
289
+ message.pickUpType = reader.int32() as any;
290
+ continue;
291
+ }
292
+ case 4: {
293
+ if (tag !== 32) {
294
+ break;
295
+ }
296
+
297
+ message.dropOffType = reader.int32() as any;
298
+ continue;
299
+ }
300
+ }
301
+ if ((tag & 7) === 4 || tag === 0) {
302
+ break;
303
+ }
304
+ reader.skip(tag & 7);
305
+ }
306
+ return message;
307
+ },
308
+
309
+ fromJSON(object: any): StopTimes {
310
+ return {
311
+ arrival: isSet(object.arrival) ? globalThis.Number(object.arrival) : 0,
312
+ departure: isSet(object.departure) ? globalThis.Number(object.departure) : 0,
313
+ pickUpType: isSet(object.pickUpType) ? pickUpDropOffTypeFromJSON(object.pickUpType) : undefined,
314
+ dropOffType: isSet(object.dropOffType) ? pickUpDropOffTypeFromJSON(object.dropOffType) : undefined,
315
+ };
316
+ },
317
+
318
+ toJSON(message: StopTimes): unknown {
319
+ const obj: any = {};
320
+ if (message.arrival !== 0) {
321
+ obj.arrival = Math.round(message.arrival);
322
+ }
323
+ if (message.departure !== 0) {
324
+ obj.departure = Math.round(message.departure);
325
+ }
326
+ if (message.pickUpType !== undefined) {
327
+ obj.pickUpType = pickUpDropOffTypeToJSON(message.pickUpType);
328
+ }
329
+ if (message.dropOffType !== undefined) {
330
+ obj.dropOffType = pickUpDropOffTypeToJSON(message.dropOffType);
331
+ }
332
+ return obj;
333
+ },
334
+
335
+ create<I extends Exact<DeepPartial<StopTimes>, I>>(base?: I): StopTimes {
336
+ return StopTimes.fromPartial(base ?? ({} as any));
337
+ },
338
+ fromPartial<I extends Exact<DeepPartial<StopTimes>, I>>(object: I): StopTimes {
339
+ const message = createBaseStopTimes();
340
+ message.arrival = object.arrival ?? 0;
341
+ message.departure = object.departure ?? 0;
342
+ message.pickUpType = object.pickUpType ?? undefined;
343
+ message.dropOffType = object.dropOffType ?? undefined;
344
+ return message;
345
+ },
346
+ };
347
+
348
+ function createBaseRoute(): Route {
349
+ return { stopTimes: [], stops: [], serviceRouteId: "" };
350
+ }
351
+
352
+ export const Route: MessageFns<Route> = {
353
+ encode(message: Route, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
354
+ for (const v of message.stopTimes) {
355
+ StopTimes.encode(v!, writer.uint32(10).fork()).join();
356
+ }
357
+ for (const v of message.stops) {
358
+ writer.uint32(18).string(v!);
359
+ }
360
+ if (message.serviceRouteId !== "") {
361
+ writer.uint32(26).string(message.serviceRouteId);
362
+ }
363
+ return writer;
364
+ },
365
+
366
+ decode(input: BinaryReader | Uint8Array, length?: number): Route {
367
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
368
+ let end = length === undefined ? reader.len : reader.pos + length;
369
+ const message = createBaseRoute();
370
+ while (reader.pos < end) {
371
+ const tag = reader.uint32();
372
+ switch (tag >>> 3) {
373
+ case 1: {
374
+ if (tag !== 10) {
375
+ break;
376
+ }
377
+
378
+ message.stopTimes.push(StopTimes.decode(reader, reader.uint32()));
379
+ continue;
380
+ }
381
+ case 2: {
382
+ if (tag !== 18) {
383
+ break;
384
+ }
385
+
386
+ message.stops.push(reader.string());
387
+ continue;
388
+ }
389
+ case 3: {
390
+ if (tag !== 26) {
391
+ break;
392
+ }
393
+
394
+ message.serviceRouteId = reader.string();
395
+ continue;
396
+ }
397
+ }
398
+ if ((tag & 7) === 4 || tag === 0) {
399
+ break;
400
+ }
401
+ reader.skip(tag & 7);
402
+ }
403
+ return message;
404
+ },
405
+
406
+ fromJSON(object: any): Route {
407
+ return {
408
+ stopTimes: globalThis.Array.isArray(object?.stopTimes)
409
+ ? object.stopTimes.map((e: any) => StopTimes.fromJSON(e))
410
+ : [],
411
+ stops: globalThis.Array.isArray(object?.stops) ? object.stops.map((e: any) => globalThis.String(e)) : [],
412
+ serviceRouteId: isSet(object.serviceRouteId) ? globalThis.String(object.serviceRouteId) : "",
413
+ };
414
+ },
415
+
416
+ toJSON(message: Route): unknown {
417
+ const obj: any = {};
418
+ if (message.stopTimes?.length) {
419
+ obj.stopTimes = message.stopTimes.map((e) => StopTimes.toJSON(e));
420
+ }
421
+ if (message.stops?.length) {
422
+ obj.stops = message.stops;
423
+ }
424
+ if (message.serviceRouteId !== "") {
425
+ obj.serviceRouteId = message.serviceRouteId;
426
+ }
427
+ return obj;
428
+ },
429
+
430
+ create<I extends Exact<DeepPartial<Route>, I>>(base?: I): Route {
431
+ return Route.fromPartial(base ?? ({} as any));
432
+ },
433
+ fromPartial<I extends Exact<DeepPartial<Route>, I>>(object: I): Route {
434
+ const message = createBaseRoute();
435
+ message.stopTimes = object.stopTimes?.map((e) => StopTimes.fromPartial(e)) || [];
436
+ message.stops = object.stops?.map((e) => e) || [];
437
+ message.serviceRouteId = object.serviceRouteId ?? "";
438
+ return message;
439
+ },
440
+ };
441
+
442
+ function createBaseRoutesAdjacency(): RoutesAdjacency {
443
+ return { routes: {} };
444
+ }
445
+
446
+ export const RoutesAdjacency: MessageFns<RoutesAdjacency> = {
447
+ encode(message: RoutesAdjacency, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
448
+ Object.entries(message.routes).forEach(([key, value]) => {
449
+ RoutesAdjacency_RoutesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
450
+ });
451
+ return writer;
452
+ },
453
+
454
+ decode(input: BinaryReader | Uint8Array, length?: number): RoutesAdjacency {
455
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
456
+ let end = length === undefined ? reader.len : reader.pos + length;
457
+ const message = createBaseRoutesAdjacency();
458
+ while (reader.pos < end) {
459
+ const tag = reader.uint32();
460
+ switch (tag >>> 3) {
461
+ case 1: {
462
+ if (tag !== 10) {
463
+ break;
464
+ }
465
+
466
+ const entry1 = RoutesAdjacency_RoutesEntry.decode(reader, reader.uint32());
467
+ if (entry1.value !== undefined) {
468
+ message.routes[entry1.key] = entry1.value;
469
+ }
470
+ continue;
471
+ }
472
+ }
473
+ if ((tag & 7) === 4 || tag === 0) {
474
+ break;
475
+ }
476
+ reader.skip(tag & 7);
477
+ }
478
+ return message;
479
+ },
480
+
481
+ fromJSON(object: any): RoutesAdjacency {
482
+ return {
483
+ routes: isObject(object.routes)
484
+ ? Object.entries(object.routes).reduce<{ [key: string]: Route }>((acc, [key, value]) => {
485
+ acc[key] = Route.fromJSON(value);
486
+ return acc;
487
+ }, {})
488
+ : {},
489
+ };
490
+ },
491
+
492
+ toJSON(message: RoutesAdjacency): unknown {
493
+ const obj: any = {};
494
+ if (message.routes) {
495
+ const entries = Object.entries(message.routes);
496
+ if (entries.length > 0) {
497
+ obj.routes = {};
498
+ entries.forEach(([k, v]) => {
499
+ obj.routes[k] = Route.toJSON(v);
500
+ });
501
+ }
502
+ }
503
+ return obj;
504
+ },
505
+
506
+ create<I extends Exact<DeepPartial<RoutesAdjacency>, I>>(base?: I): RoutesAdjacency {
507
+ return RoutesAdjacency.fromPartial(base ?? ({} as any));
508
+ },
509
+ fromPartial<I extends Exact<DeepPartial<RoutesAdjacency>, I>>(object: I): RoutesAdjacency {
510
+ const message = createBaseRoutesAdjacency();
511
+ message.routes = Object.entries(object.routes ?? {}).reduce<{ [key: string]: Route }>((acc, [key, value]) => {
512
+ if (value !== undefined) {
513
+ acc[key] = Route.fromPartial(value);
514
+ }
515
+ return acc;
516
+ }, {});
517
+ return message;
518
+ },
519
+ };
520
+
521
+ function createBaseRoutesAdjacency_RoutesEntry(): RoutesAdjacency_RoutesEntry {
522
+ return { key: "", value: undefined };
523
+ }
524
+
525
+ export const RoutesAdjacency_RoutesEntry: MessageFns<RoutesAdjacency_RoutesEntry> = {
526
+ encode(message: RoutesAdjacency_RoutesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
527
+ if (message.key !== "") {
528
+ writer.uint32(10).string(message.key);
529
+ }
530
+ if (message.value !== undefined) {
531
+ Route.encode(message.value, writer.uint32(18).fork()).join();
532
+ }
533
+ return writer;
534
+ },
535
+
536
+ decode(input: BinaryReader | Uint8Array, length?: number): RoutesAdjacency_RoutesEntry {
537
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
538
+ let end = length === undefined ? reader.len : reader.pos + length;
539
+ const message = createBaseRoutesAdjacency_RoutesEntry();
540
+ while (reader.pos < end) {
541
+ const tag = reader.uint32();
542
+ switch (tag >>> 3) {
543
+ case 1: {
544
+ if (tag !== 10) {
545
+ break;
546
+ }
547
+
548
+ message.key = reader.string();
549
+ continue;
550
+ }
551
+ case 2: {
552
+ if (tag !== 18) {
553
+ break;
554
+ }
555
+
556
+ message.value = Route.decode(reader, reader.uint32());
557
+ continue;
558
+ }
559
+ }
560
+ if ((tag & 7) === 4 || tag === 0) {
561
+ break;
562
+ }
563
+ reader.skip(tag & 7);
564
+ }
565
+ return message;
566
+ },
567
+
568
+ fromJSON(object: any): RoutesAdjacency_RoutesEntry {
569
+ return {
570
+ key: isSet(object.key) ? globalThis.String(object.key) : "",
571
+ value: isSet(object.value) ? Route.fromJSON(object.value) : undefined,
572
+ };
573
+ },
574
+
575
+ toJSON(message: RoutesAdjacency_RoutesEntry): unknown {
576
+ const obj: any = {};
577
+ if (message.key !== "") {
578
+ obj.key = message.key;
579
+ }
580
+ if (message.value !== undefined) {
581
+ obj.value = Route.toJSON(message.value);
582
+ }
583
+ return obj;
584
+ },
585
+
586
+ create<I extends Exact<DeepPartial<RoutesAdjacency_RoutesEntry>, I>>(base?: I): RoutesAdjacency_RoutesEntry {
587
+ return RoutesAdjacency_RoutesEntry.fromPartial(base ?? ({} as any));
588
+ },
589
+ fromPartial<I extends Exact<DeepPartial<RoutesAdjacency_RoutesEntry>, I>>(object: I): RoutesAdjacency_RoutesEntry {
590
+ const message = createBaseRoutesAdjacency_RoutesEntry();
591
+ message.key = object.key ?? "";
592
+ message.value = (object.value !== undefined && object.value !== null) ? Route.fromPartial(object.value) : undefined;
593
+ return message;
594
+ },
595
+ };
596
+
597
+ function createBaseTransfer(): Transfer {
598
+ return { destination: "", type: 0, minTransferTime: undefined };
599
+ }
600
+
601
+ export const Transfer: MessageFns<Transfer> = {
602
+ encode(message: Transfer, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
603
+ if (message.destination !== "") {
604
+ writer.uint32(10).string(message.destination);
605
+ }
606
+ if (message.type !== 0) {
607
+ writer.uint32(16).int32(message.type);
608
+ }
609
+ if (message.minTransferTime !== undefined) {
610
+ writer.uint32(24).int32(message.minTransferTime);
611
+ }
612
+ return writer;
613
+ },
614
+
615
+ decode(input: BinaryReader | Uint8Array, length?: number): Transfer {
616
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
617
+ let end = length === undefined ? reader.len : reader.pos + length;
618
+ const message = createBaseTransfer();
619
+ while (reader.pos < end) {
620
+ const tag = reader.uint32();
621
+ switch (tag >>> 3) {
622
+ case 1: {
623
+ if (tag !== 10) {
624
+ break;
625
+ }
626
+
627
+ message.destination = reader.string();
628
+ continue;
629
+ }
630
+ case 2: {
631
+ if (tag !== 16) {
632
+ break;
633
+ }
634
+
635
+ message.type = reader.int32() as any;
636
+ continue;
637
+ }
638
+ case 3: {
639
+ if (tag !== 24) {
640
+ break;
641
+ }
642
+
643
+ message.minTransferTime = reader.int32();
644
+ continue;
645
+ }
646
+ }
647
+ if ((tag & 7) === 4 || tag === 0) {
648
+ break;
649
+ }
650
+ reader.skip(tag & 7);
651
+ }
652
+ return message;
653
+ },
654
+
655
+ fromJSON(object: any): Transfer {
656
+ return {
657
+ destination: isSet(object.destination) ? globalThis.String(object.destination) : "",
658
+ type: isSet(object.type) ? transferTypeFromJSON(object.type) : 0,
659
+ minTransferTime: isSet(object.minTransferTime) ? globalThis.Number(object.minTransferTime) : undefined,
660
+ };
661
+ },
662
+
663
+ toJSON(message: Transfer): unknown {
664
+ const obj: any = {};
665
+ if (message.destination !== "") {
666
+ obj.destination = message.destination;
667
+ }
668
+ if (message.type !== 0) {
669
+ obj.type = transferTypeToJSON(message.type);
670
+ }
671
+ if (message.minTransferTime !== undefined) {
672
+ obj.minTransferTime = Math.round(message.minTransferTime);
673
+ }
674
+ return obj;
675
+ },
676
+
677
+ create<I extends Exact<DeepPartial<Transfer>, I>>(base?: I): Transfer {
678
+ return Transfer.fromPartial(base ?? ({} as any));
679
+ },
680
+ fromPartial<I extends Exact<DeepPartial<Transfer>, I>>(object: I): Transfer {
681
+ const message = createBaseTransfer();
682
+ message.destination = object.destination ?? "";
683
+ message.type = object.type ?? 0;
684
+ message.minTransferTime = object.minTransferTime ?? undefined;
685
+ return message;
686
+ },
687
+ };
688
+
689
+ function createBaseStopsAdjacency(): StopsAdjacency {
690
+ return { stops: {} };
691
+ }
692
+
693
+ export const StopsAdjacency: MessageFns<StopsAdjacency> = {
694
+ encode(message: StopsAdjacency, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
695
+ Object.entries(message.stops).forEach(([key, value]) => {
696
+ StopsAdjacency_StopsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
697
+ });
698
+ return writer;
699
+ },
700
+
701
+ decode(input: BinaryReader | Uint8Array, length?: number): StopsAdjacency {
702
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
703
+ let end = length === undefined ? reader.len : reader.pos + length;
704
+ const message = createBaseStopsAdjacency();
705
+ while (reader.pos < end) {
706
+ const tag = reader.uint32();
707
+ switch (tag >>> 3) {
708
+ case 1: {
709
+ if (tag !== 10) {
710
+ break;
711
+ }
712
+
713
+ const entry1 = StopsAdjacency_StopsEntry.decode(reader, reader.uint32());
714
+ if (entry1.value !== undefined) {
715
+ message.stops[entry1.key] = entry1.value;
716
+ }
717
+ continue;
718
+ }
719
+ }
720
+ if ((tag & 7) === 4 || tag === 0) {
721
+ break;
722
+ }
723
+ reader.skip(tag & 7);
724
+ }
725
+ return message;
726
+ },
727
+
728
+ fromJSON(object: any): StopsAdjacency {
729
+ return {
730
+ stops: isObject(object.stops)
731
+ ? Object.entries(object.stops).reduce<{ [key: string]: StopsAdjacency_StopAdjacency }>((acc, [key, value]) => {
732
+ acc[key] = StopsAdjacency_StopAdjacency.fromJSON(value);
733
+ return acc;
734
+ }, {})
735
+ : {},
736
+ };
737
+ },
738
+
739
+ toJSON(message: StopsAdjacency): unknown {
740
+ const obj: any = {};
741
+ if (message.stops) {
742
+ const entries = Object.entries(message.stops);
743
+ if (entries.length > 0) {
744
+ obj.stops = {};
745
+ entries.forEach(([k, v]) => {
746
+ obj.stops[k] = StopsAdjacency_StopAdjacency.toJSON(v);
747
+ });
748
+ }
749
+ }
750
+ return obj;
751
+ },
752
+
753
+ create<I extends Exact<DeepPartial<StopsAdjacency>, I>>(base?: I): StopsAdjacency {
754
+ return StopsAdjacency.fromPartial(base ?? ({} as any));
755
+ },
756
+ fromPartial<I extends Exact<DeepPartial<StopsAdjacency>, I>>(object: I): StopsAdjacency {
757
+ const message = createBaseStopsAdjacency();
758
+ message.stops = Object.entries(object.stops ?? {}).reduce<{ [key: string]: StopsAdjacency_StopAdjacency }>(
759
+ (acc, [key, value]) => {
760
+ if (value !== undefined) {
761
+ acc[key] = StopsAdjacency_StopAdjacency.fromPartial(value);
762
+ }
763
+ return acc;
764
+ },
765
+ {},
766
+ );
767
+ return message;
768
+ },
769
+ };
770
+
771
+ function createBaseStopsAdjacency_StopAdjacency(): StopsAdjacency_StopAdjacency {
772
+ return { transfers: [], routes: [] };
773
+ }
774
+
775
+ export const StopsAdjacency_StopAdjacency: MessageFns<StopsAdjacency_StopAdjacency> = {
776
+ encode(message: StopsAdjacency_StopAdjacency, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
777
+ for (const v of message.transfers) {
778
+ Transfer.encode(v!, writer.uint32(10).fork()).join();
779
+ }
780
+ for (const v of message.routes) {
781
+ writer.uint32(18).string(v!);
782
+ }
783
+ return writer;
784
+ },
785
+
786
+ decode(input: BinaryReader | Uint8Array, length?: number): StopsAdjacency_StopAdjacency {
787
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
788
+ let end = length === undefined ? reader.len : reader.pos + length;
789
+ const message = createBaseStopsAdjacency_StopAdjacency();
790
+ while (reader.pos < end) {
791
+ const tag = reader.uint32();
792
+ switch (tag >>> 3) {
793
+ case 1: {
794
+ if (tag !== 10) {
795
+ break;
796
+ }
797
+
798
+ message.transfers.push(Transfer.decode(reader, reader.uint32()));
799
+ continue;
800
+ }
801
+ case 2: {
802
+ if (tag !== 18) {
803
+ break;
804
+ }
805
+
806
+ message.routes.push(reader.string());
807
+ continue;
808
+ }
809
+ }
810
+ if ((tag & 7) === 4 || tag === 0) {
811
+ break;
812
+ }
813
+ reader.skip(tag & 7);
814
+ }
815
+ return message;
816
+ },
817
+
818
+ fromJSON(object: any): StopsAdjacency_StopAdjacency {
819
+ return {
820
+ transfers: globalThis.Array.isArray(object?.transfers)
821
+ ? object.transfers.map((e: any) => Transfer.fromJSON(e))
822
+ : [],
823
+ routes: globalThis.Array.isArray(object?.routes) ? object.routes.map((e: any) => globalThis.String(e)) : [],
824
+ };
825
+ },
826
+
827
+ toJSON(message: StopsAdjacency_StopAdjacency): unknown {
828
+ const obj: any = {};
829
+ if (message.transfers?.length) {
830
+ obj.transfers = message.transfers.map((e) => Transfer.toJSON(e));
831
+ }
832
+ if (message.routes?.length) {
833
+ obj.routes = message.routes;
834
+ }
835
+ return obj;
836
+ },
837
+
838
+ create<I extends Exact<DeepPartial<StopsAdjacency_StopAdjacency>, I>>(base?: I): StopsAdjacency_StopAdjacency {
839
+ return StopsAdjacency_StopAdjacency.fromPartial(base ?? ({} as any));
840
+ },
841
+ fromPartial<I extends Exact<DeepPartial<StopsAdjacency_StopAdjacency>, I>>(object: I): StopsAdjacency_StopAdjacency {
842
+ const message = createBaseStopsAdjacency_StopAdjacency();
843
+ message.transfers = object.transfers?.map((e) => Transfer.fromPartial(e)) || [];
844
+ message.routes = object.routes?.map((e) => e) || [];
845
+ return message;
846
+ },
847
+ };
848
+
849
+ function createBaseStopsAdjacency_StopsEntry(): StopsAdjacency_StopsEntry {
850
+ return { key: "", value: undefined };
851
+ }
852
+
853
+ export const StopsAdjacency_StopsEntry: MessageFns<StopsAdjacency_StopsEntry> = {
854
+ encode(message: StopsAdjacency_StopsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
855
+ if (message.key !== "") {
856
+ writer.uint32(10).string(message.key);
857
+ }
858
+ if (message.value !== undefined) {
859
+ StopsAdjacency_StopAdjacency.encode(message.value, writer.uint32(18).fork()).join();
860
+ }
861
+ return writer;
862
+ },
863
+
864
+ decode(input: BinaryReader | Uint8Array, length?: number): StopsAdjacency_StopsEntry {
865
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
866
+ let end = length === undefined ? reader.len : reader.pos + length;
867
+ const message = createBaseStopsAdjacency_StopsEntry();
868
+ while (reader.pos < end) {
869
+ const tag = reader.uint32();
870
+ switch (tag >>> 3) {
871
+ case 1: {
872
+ if (tag !== 10) {
873
+ break;
874
+ }
875
+
876
+ message.key = reader.string();
877
+ continue;
878
+ }
879
+ case 2: {
880
+ if (tag !== 18) {
881
+ break;
882
+ }
883
+
884
+ message.value = StopsAdjacency_StopAdjacency.decode(reader, reader.uint32());
885
+ continue;
886
+ }
887
+ }
888
+ if ((tag & 7) === 4 || tag === 0) {
889
+ break;
890
+ }
891
+ reader.skip(tag & 7);
892
+ }
893
+ return message;
894
+ },
895
+
896
+ fromJSON(object: any): StopsAdjacency_StopsEntry {
897
+ return {
898
+ key: isSet(object.key) ? globalThis.String(object.key) : "",
899
+ value: isSet(object.value) ? StopsAdjacency_StopAdjacency.fromJSON(object.value) : undefined,
900
+ };
901
+ },
902
+
903
+ toJSON(message: StopsAdjacency_StopsEntry): unknown {
904
+ const obj: any = {};
905
+ if (message.key !== "") {
906
+ obj.key = message.key;
907
+ }
908
+ if (message.value !== undefined) {
909
+ obj.value = StopsAdjacency_StopAdjacency.toJSON(message.value);
910
+ }
911
+ return obj;
912
+ },
913
+
914
+ create<I extends Exact<DeepPartial<StopsAdjacency_StopsEntry>, I>>(base?: I): StopsAdjacency_StopsEntry {
915
+ return StopsAdjacency_StopsEntry.fromPartial(base ?? ({} as any));
916
+ },
917
+ fromPartial<I extends Exact<DeepPartial<StopsAdjacency_StopsEntry>, I>>(object: I): StopsAdjacency_StopsEntry {
918
+ const message = createBaseStopsAdjacency_StopsEntry();
919
+ message.key = object.key ?? "";
920
+ message.value = (object.value !== undefined && object.value !== null)
921
+ ? StopsAdjacency_StopAdjacency.fromPartial(object.value)
922
+ : undefined;
923
+ return message;
924
+ },
925
+ };
926
+
927
+ function createBaseServiceRoute(): ServiceRoute {
928
+ return { type: 0, name: "" };
929
+ }
930
+
931
+ export const ServiceRoute: MessageFns<ServiceRoute> = {
932
+ encode(message: ServiceRoute, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
933
+ if (message.type !== 0) {
934
+ writer.uint32(8).int32(message.type);
935
+ }
936
+ if (message.name !== "") {
937
+ writer.uint32(18).string(message.name);
938
+ }
939
+ return writer;
940
+ },
941
+
942
+ decode(input: BinaryReader | Uint8Array, length?: number): ServiceRoute {
943
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
944
+ let end = length === undefined ? reader.len : reader.pos + length;
945
+ const message = createBaseServiceRoute();
946
+ while (reader.pos < end) {
947
+ const tag = reader.uint32();
948
+ switch (tag >>> 3) {
949
+ case 1: {
950
+ if (tag !== 8) {
951
+ break;
952
+ }
953
+
954
+ message.type = reader.int32() as any;
955
+ continue;
956
+ }
957
+ case 2: {
958
+ if (tag !== 18) {
959
+ break;
960
+ }
961
+
962
+ message.name = reader.string();
963
+ continue;
964
+ }
965
+ }
966
+ if ((tag & 7) === 4 || tag === 0) {
967
+ break;
968
+ }
969
+ reader.skip(tag & 7);
970
+ }
971
+ return message;
972
+ },
973
+
974
+ fromJSON(object: any): ServiceRoute {
975
+ return {
976
+ type: isSet(object.type) ? routeTypeFromJSON(object.type) : 0,
977
+ name: isSet(object.name) ? globalThis.String(object.name) : "",
978
+ };
979
+ },
980
+
981
+ toJSON(message: ServiceRoute): unknown {
982
+ const obj: any = {};
983
+ if (message.type !== 0) {
984
+ obj.type = routeTypeToJSON(message.type);
985
+ }
986
+ if (message.name !== "") {
987
+ obj.name = message.name;
988
+ }
989
+ return obj;
990
+ },
991
+
992
+ create<I extends Exact<DeepPartial<ServiceRoute>, I>>(base?: I): ServiceRoute {
993
+ return ServiceRoute.fromPartial(base ?? ({} as any));
994
+ },
995
+ fromPartial<I extends Exact<DeepPartial<ServiceRoute>, I>>(object: I): ServiceRoute {
996
+ const message = createBaseServiceRoute();
997
+ message.type = object.type ?? 0;
998
+ message.name = object.name ?? "";
999
+ return message;
1000
+ },
1001
+ };
1002
+
1003
+ function createBaseServiceRoutesMap(): ServiceRoutesMap {
1004
+ return { routes: {} };
1005
+ }
1006
+
1007
+ export const ServiceRoutesMap: MessageFns<ServiceRoutesMap> = {
1008
+ encode(message: ServiceRoutesMap, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
1009
+ Object.entries(message.routes).forEach(([key, value]) => {
1010
+ ServiceRoutesMap_RoutesEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join();
1011
+ });
1012
+ return writer;
1013
+ },
1014
+
1015
+ decode(input: BinaryReader | Uint8Array, length?: number): ServiceRoutesMap {
1016
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
1017
+ let end = length === undefined ? reader.len : reader.pos + length;
1018
+ const message = createBaseServiceRoutesMap();
1019
+ while (reader.pos < end) {
1020
+ const tag = reader.uint32();
1021
+ switch (tag >>> 3) {
1022
+ case 1: {
1023
+ if (tag !== 10) {
1024
+ break;
1025
+ }
1026
+
1027
+ const entry1 = ServiceRoutesMap_RoutesEntry.decode(reader, reader.uint32());
1028
+ if (entry1.value !== undefined) {
1029
+ message.routes[entry1.key] = entry1.value;
1030
+ }
1031
+ continue;
1032
+ }
1033
+ }
1034
+ if ((tag & 7) === 4 || tag === 0) {
1035
+ break;
1036
+ }
1037
+ reader.skip(tag & 7);
1038
+ }
1039
+ return message;
1040
+ },
1041
+
1042
+ fromJSON(object: any): ServiceRoutesMap {
1043
+ return {
1044
+ routes: isObject(object.routes)
1045
+ ? Object.entries(object.routes).reduce<{ [key: string]: ServiceRoute }>((acc, [key, value]) => {
1046
+ acc[key] = ServiceRoute.fromJSON(value);
1047
+ return acc;
1048
+ }, {})
1049
+ : {},
1050
+ };
1051
+ },
1052
+
1053
+ toJSON(message: ServiceRoutesMap): unknown {
1054
+ const obj: any = {};
1055
+ if (message.routes) {
1056
+ const entries = Object.entries(message.routes);
1057
+ if (entries.length > 0) {
1058
+ obj.routes = {};
1059
+ entries.forEach(([k, v]) => {
1060
+ obj.routes[k] = ServiceRoute.toJSON(v);
1061
+ });
1062
+ }
1063
+ }
1064
+ return obj;
1065
+ },
1066
+
1067
+ create<I extends Exact<DeepPartial<ServiceRoutesMap>, I>>(base?: I): ServiceRoutesMap {
1068
+ return ServiceRoutesMap.fromPartial(base ?? ({} as any));
1069
+ },
1070
+ fromPartial<I extends Exact<DeepPartial<ServiceRoutesMap>, I>>(object: I): ServiceRoutesMap {
1071
+ const message = createBaseServiceRoutesMap();
1072
+ message.routes = Object.entries(object.routes ?? {}).reduce<{ [key: string]: ServiceRoute }>(
1073
+ (acc, [key, value]) => {
1074
+ if (value !== undefined) {
1075
+ acc[key] = ServiceRoute.fromPartial(value);
1076
+ }
1077
+ return acc;
1078
+ },
1079
+ {},
1080
+ );
1081
+ return message;
1082
+ },
1083
+ };
1084
+
1085
+ function createBaseServiceRoutesMap_RoutesEntry(): ServiceRoutesMap_RoutesEntry {
1086
+ return { key: "", value: undefined };
1087
+ }
1088
+
1089
+ export const ServiceRoutesMap_RoutesEntry: MessageFns<ServiceRoutesMap_RoutesEntry> = {
1090
+ encode(message: ServiceRoutesMap_RoutesEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
1091
+ if (message.key !== "") {
1092
+ writer.uint32(10).string(message.key);
1093
+ }
1094
+ if (message.value !== undefined) {
1095
+ ServiceRoute.encode(message.value, writer.uint32(18).fork()).join();
1096
+ }
1097
+ return writer;
1098
+ },
1099
+
1100
+ decode(input: BinaryReader | Uint8Array, length?: number): ServiceRoutesMap_RoutesEntry {
1101
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
1102
+ let end = length === undefined ? reader.len : reader.pos + length;
1103
+ const message = createBaseServiceRoutesMap_RoutesEntry();
1104
+ while (reader.pos < end) {
1105
+ const tag = reader.uint32();
1106
+ switch (tag >>> 3) {
1107
+ case 1: {
1108
+ if (tag !== 10) {
1109
+ break;
1110
+ }
1111
+
1112
+ message.key = reader.string();
1113
+ continue;
1114
+ }
1115
+ case 2: {
1116
+ if (tag !== 18) {
1117
+ break;
1118
+ }
1119
+
1120
+ message.value = ServiceRoute.decode(reader, reader.uint32());
1121
+ continue;
1122
+ }
1123
+ }
1124
+ if ((tag & 7) === 4 || tag === 0) {
1125
+ break;
1126
+ }
1127
+ reader.skip(tag & 7);
1128
+ }
1129
+ return message;
1130
+ },
1131
+
1132
+ fromJSON(object: any): ServiceRoutesMap_RoutesEntry {
1133
+ return {
1134
+ key: isSet(object.key) ? globalThis.String(object.key) : "",
1135
+ value: isSet(object.value) ? ServiceRoute.fromJSON(object.value) : undefined,
1136
+ };
1137
+ },
1138
+
1139
+ toJSON(message: ServiceRoutesMap_RoutesEntry): unknown {
1140
+ const obj: any = {};
1141
+ if (message.key !== "") {
1142
+ obj.key = message.key;
1143
+ }
1144
+ if (message.value !== undefined) {
1145
+ obj.value = ServiceRoute.toJSON(message.value);
1146
+ }
1147
+ return obj;
1148
+ },
1149
+
1150
+ create<I extends Exact<DeepPartial<ServiceRoutesMap_RoutesEntry>, I>>(base?: I): ServiceRoutesMap_RoutesEntry {
1151
+ return ServiceRoutesMap_RoutesEntry.fromPartial(base ?? ({} as any));
1152
+ },
1153
+ fromPartial<I extends Exact<DeepPartial<ServiceRoutesMap_RoutesEntry>, I>>(object: I): ServiceRoutesMap_RoutesEntry {
1154
+ const message = createBaseServiceRoutesMap_RoutesEntry();
1155
+ message.key = object.key ?? "";
1156
+ message.value = (object.value !== undefined && object.value !== null)
1157
+ ? ServiceRoute.fromPartial(object.value)
1158
+ : undefined;
1159
+ return message;
1160
+ },
1161
+ };
1162
+
1163
+ function createBaseTimetable(): Timetable {
1164
+ return { version: "", stopsAdjacency: undefined, routesAdjacency: undefined, routes: undefined };
1165
+ }
1166
+
1167
+ export const Timetable: MessageFns<Timetable> = {
1168
+ encode(message: Timetable, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
1169
+ if (message.version !== "") {
1170
+ writer.uint32(10).string(message.version);
1171
+ }
1172
+ if (message.stopsAdjacency !== undefined) {
1173
+ StopsAdjacency.encode(message.stopsAdjacency, writer.uint32(18).fork()).join();
1174
+ }
1175
+ if (message.routesAdjacency !== undefined) {
1176
+ RoutesAdjacency.encode(message.routesAdjacency, writer.uint32(26).fork()).join();
1177
+ }
1178
+ if (message.routes !== undefined) {
1179
+ ServiceRoutesMap.encode(message.routes, writer.uint32(34).fork()).join();
1180
+ }
1181
+ return writer;
1182
+ },
1183
+
1184
+ decode(input: BinaryReader | Uint8Array, length?: number): Timetable {
1185
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
1186
+ let end = length === undefined ? reader.len : reader.pos + length;
1187
+ const message = createBaseTimetable();
1188
+ while (reader.pos < end) {
1189
+ const tag = reader.uint32();
1190
+ switch (tag >>> 3) {
1191
+ case 1: {
1192
+ if (tag !== 10) {
1193
+ break;
1194
+ }
1195
+
1196
+ message.version = reader.string();
1197
+ continue;
1198
+ }
1199
+ case 2: {
1200
+ if (tag !== 18) {
1201
+ break;
1202
+ }
1203
+
1204
+ message.stopsAdjacency = StopsAdjacency.decode(reader, reader.uint32());
1205
+ continue;
1206
+ }
1207
+ case 3: {
1208
+ if (tag !== 26) {
1209
+ break;
1210
+ }
1211
+
1212
+ message.routesAdjacency = RoutesAdjacency.decode(reader, reader.uint32());
1213
+ continue;
1214
+ }
1215
+ case 4: {
1216
+ if (tag !== 34) {
1217
+ break;
1218
+ }
1219
+
1220
+ message.routes = ServiceRoutesMap.decode(reader, reader.uint32());
1221
+ continue;
1222
+ }
1223
+ }
1224
+ if ((tag & 7) === 4 || tag === 0) {
1225
+ break;
1226
+ }
1227
+ reader.skip(tag & 7);
1228
+ }
1229
+ return message;
1230
+ },
1231
+
1232
+ fromJSON(object: any): Timetable {
1233
+ return {
1234
+ version: isSet(object.version) ? globalThis.String(object.version) : "",
1235
+ stopsAdjacency: isSet(object.stopsAdjacency) ? StopsAdjacency.fromJSON(object.stopsAdjacency) : undefined,
1236
+ routesAdjacency: isSet(object.routesAdjacency) ? RoutesAdjacency.fromJSON(object.routesAdjacency) : undefined,
1237
+ routes: isSet(object.routes) ? ServiceRoutesMap.fromJSON(object.routes) : undefined,
1238
+ };
1239
+ },
1240
+
1241
+ toJSON(message: Timetable): unknown {
1242
+ const obj: any = {};
1243
+ if (message.version !== "") {
1244
+ obj.version = message.version;
1245
+ }
1246
+ if (message.stopsAdjacency !== undefined) {
1247
+ obj.stopsAdjacency = StopsAdjacency.toJSON(message.stopsAdjacency);
1248
+ }
1249
+ if (message.routesAdjacency !== undefined) {
1250
+ obj.routesAdjacency = RoutesAdjacency.toJSON(message.routesAdjacency);
1251
+ }
1252
+ if (message.routes !== undefined) {
1253
+ obj.routes = ServiceRoutesMap.toJSON(message.routes);
1254
+ }
1255
+ return obj;
1256
+ },
1257
+
1258
+ create<I extends Exact<DeepPartial<Timetable>, I>>(base?: I): Timetable {
1259
+ return Timetable.fromPartial(base ?? ({} as any));
1260
+ },
1261
+ fromPartial<I extends Exact<DeepPartial<Timetable>, I>>(object: I): Timetable {
1262
+ const message = createBaseTimetable();
1263
+ message.version = object.version ?? "";
1264
+ message.stopsAdjacency = (object.stopsAdjacency !== undefined && object.stopsAdjacency !== null)
1265
+ ? StopsAdjacency.fromPartial(object.stopsAdjacency)
1266
+ : undefined;
1267
+ message.routesAdjacency = (object.routesAdjacency !== undefined && object.routesAdjacency !== null)
1268
+ ? RoutesAdjacency.fromPartial(object.routesAdjacency)
1269
+ : undefined;
1270
+ message.routes = (object.routes !== undefined && object.routes !== null)
1271
+ ? ServiceRoutesMap.fromPartial(object.routes)
1272
+ : undefined;
1273
+ return message;
1274
+ },
1275
+ };
1276
+
1277
+ type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
1278
+
1279
+ export type DeepPartial<T> = T extends Builtin ? T
1280
+ : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>>
1281
+ : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>>
1282
+ : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]> }
1283
+ : Partial<T>;
1284
+
1285
+ type KeysOfUnion<T> = T extends T ? keyof T : never;
1286
+ export type Exact<P, I extends P> = P extends Builtin ? P
1287
+ : P & { [K in keyof P]: Exact<P[K], I[K]> } & { [K in Exclude<keyof I, KeysOfUnion<P>>]: never };
1288
+
1289
+ function isObject(value: any): boolean {
1290
+ return typeof value === "object" && value !== null;
1291
+ }
1292
+
1293
+ function isSet(value: any): boolean {
1294
+ return value !== null && value !== undefined;
1295
+ }
1296
+
1297
+ export interface MessageFns<T> {
1298
+ encode(message: T, writer?: BinaryWriter): BinaryWriter;
1299
+ decode(input: BinaryReader | Uint8Array, length?: number): T;
1300
+ fromJSON(object: any): T;
1301
+ toJSON(message: T): unknown;
1302
+ create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;
1303
+ fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;
1304
+ }