trackswap 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/FIT/base.d.ts +91 -0
- package/dist/FIT/base.js +101 -0
- package/dist/FIT/crc.d.ts +1 -0
- package/dist/FIT/crc.js +16 -0
- package/dist/FIT/decoder.d.ts +83 -0
- package/dist/FIT/decoder.js +323 -0
- package/dist/FIT/encoder.d.ts +142 -0
- package/dist/FIT/encoder.js +445 -0
- package/dist/FIT/index.d.ts +12 -0
- package/dist/FIT/index.js +13 -0
- package/dist/FIT/mesg.d.ts +40 -0
- package/dist/FIT/mesg.js +208 -0
- package/dist/FIT/middleware.d.ts +48 -0
- package/dist/FIT/middleware.js +206 -0
- package/dist/FIT/plugins.d.ts +26 -0
- package/dist/FIT/plugins.js +104 -0
- package/dist/FIT/processor.d.ts +58 -0
- package/dist/FIT/processor.js +170 -0
- package/dist/FIT/types/course_point.d.ts +56 -0
- package/dist/FIT/types/course_point.js +58 -0
- package/dist/FIT/types/event.d.ts +49 -0
- package/dist/FIT/types/event.js +50 -0
- package/dist/FIT/types/event_type.d.ts +18 -0
- package/dist/FIT/types/event_type.js +19 -0
- package/dist/FIT/types/file.d.ts +23 -0
- package/dist/FIT/types/file.js +24 -0
- package/dist/FIT/types/index.d.ts +119 -0
- package/dist/FIT/types/index.js +297 -0
- package/dist/FIT/types/mesg_num.d.ts +105 -0
- package/dist/FIT/types/mesg_num.js +106 -0
- package/dist/FIT/types/sport.d.ts +47 -0
- package/dist/FIT/types/sport.js +48 -0
- package/dist/FIT/types.d.ts +231 -0
- package/dist/FIT/types.js +1 -0
- package/dist/FIT/util.d.ts +1 -0
- package/dist/FIT/util.js +7 -0
- package/dist/GPX/base.d.ts +43 -67
- package/dist/GPX/base.js +40 -67
- package/dist/GPX/converters.d.ts +12 -36
- package/dist/GPX/converters.js +11 -103
- package/dist/GPX/decoder.d.ts +5 -5
- package/dist/GPX/decoder.js +6 -0
- package/dist/GPX/encoder.d.ts +4 -0
- package/dist/GPX/encoder.js +3 -0
- package/dist/GPX/index.d.ts +1 -1
- package/dist/GPX/index.js +1 -1
- package/dist/GPX/middleware.d.ts +27 -0
- package/dist/GPX/middleware.js +93 -0
- package/dist/GPX/processor.d.ts +1 -1
- package/dist/GPX/processor.js +12 -11
- package/dist/GPX/types.d.ts +2 -3
- package/dist/TCX/base.d.ts +52 -0
- package/dist/TCX/base.js +62 -0
- package/dist/TCX/converters.d.ts +75 -0
- package/dist/TCX/converters.js +333 -0
- package/dist/TCX/decoder.d.ts +87 -0
- package/dist/TCX/decoder.js +350 -0
- package/dist/TCX/encoder.d.ts +150 -0
- package/dist/TCX/encoder.js +513 -0
- package/dist/TCX/index.d.ts +10 -0
- package/dist/TCX/index.js +9 -0
- package/dist/TCX/middleware.d.ts +27 -0
- package/dist/TCX/middleware.js +93 -0
- package/dist/TCX/processor.d.ts +48 -0
- package/dist/TCX/processor.js +197 -0
- package/dist/TCX/types.d.ts +203 -0
- package/dist/TCX/types.js +1 -0
- package/dist/core/base.d.ts +119 -0
- package/dist/core/base.js +138 -0
- package/dist/core/decoder.d.ts +66 -0
- package/dist/core/decoder.js +90 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +4 -0
- package/dist/core/processor.d.ts +69 -0
- package/dist/core/processor.js +265 -0
- package/dist/core/xml-utils.d.ts +41 -0
- package/dist/core/xml-utils.js +140 -0
- package/package.json +8 -5
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { BaseTCXConverter } from "./base.js";
|
|
2
|
+
// ============ 基础元素转换器 ============
|
|
3
|
+
/**
|
|
4
|
+
* 位置转换器
|
|
5
|
+
*/
|
|
6
|
+
export class PositionConverter extends BaseTCXConverter {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.name = "PositionConverter";
|
|
10
|
+
this.supportedTags = ["Position"];
|
|
11
|
+
}
|
|
12
|
+
convert(ast, context) {
|
|
13
|
+
const position = {};
|
|
14
|
+
this.processChildren(ast, position, {
|
|
15
|
+
LatitudeDegrees: (child, target) => (target.LatitudeDegrees = this.parseString(child.value)),
|
|
16
|
+
LongitudeDegrees: (child, target) => (target.LongitudeDegrees = this.parseString(child.value)),
|
|
17
|
+
});
|
|
18
|
+
return position;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 轨迹点转换器
|
|
23
|
+
*/
|
|
24
|
+
export class TrackpointConverter extends BaseTCXConverter {
|
|
25
|
+
constructor() {
|
|
26
|
+
super(...arguments);
|
|
27
|
+
this.name = "TrackpointConverter";
|
|
28
|
+
this.supportedTags = ["Trackpoint"];
|
|
29
|
+
}
|
|
30
|
+
convert(ast, context) {
|
|
31
|
+
const trackpoint = {};
|
|
32
|
+
this.processChildren(ast, trackpoint, {
|
|
33
|
+
Time: (child, target) => (target.Time = this.parseString(child.value)),
|
|
34
|
+
Position: (child, target) => {
|
|
35
|
+
const decoder = context.metadata.get("decoder");
|
|
36
|
+
target.Position = decoder
|
|
37
|
+
?.getConverter("Position")
|
|
38
|
+
?.convert(child, context);
|
|
39
|
+
},
|
|
40
|
+
AltitudeMeters: (child, target) => (target.AltitudeMeters = this.parseFloat(child.value)),
|
|
41
|
+
DistanceMeters: (child, target) => (target.DistanceMeters = this.parseFloat(child.value)),
|
|
42
|
+
HeartRateBpm: (child, target) => {
|
|
43
|
+
// 处理两种格式:<HeartRateBpm>123</HeartRateBpm> 或 <HeartRateBpm><Value>123</Value></HeartRateBpm>
|
|
44
|
+
if (child.value) {
|
|
45
|
+
target.HeartRateBpm = this.parseFloat(child.value);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const valueChild = this.getChildByTag(child, "Value");
|
|
49
|
+
if (valueChild?.value) {
|
|
50
|
+
target.HeartRateBpm = this.parseFloat(valueChild.value);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
Cadence: (child, target) => {
|
|
55
|
+
const cadence = { Low: 0, High: 0 };
|
|
56
|
+
this.processChildren(child, cadence, {
|
|
57
|
+
Low: (subChild, subTarget) => (subTarget.Low = this.parseFloat(subChild.value)),
|
|
58
|
+
High: (subChild, subTarget) => (subTarget.High = this.parseFloat(subChild.value)),
|
|
59
|
+
});
|
|
60
|
+
target.Cadence = cadence;
|
|
61
|
+
},
|
|
62
|
+
SensorState: (child, target) => (target.SensorState = child.value),
|
|
63
|
+
Extensions: (child, target) => (target.Extensions = this.convertExtensions(child)),
|
|
64
|
+
});
|
|
65
|
+
return trackpoint;
|
|
66
|
+
}
|
|
67
|
+
convertExtensions(extensionsAST) {
|
|
68
|
+
const extensions = {};
|
|
69
|
+
extensionsAST.children?.forEach((child) => {
|
|
70
|
+
extensions[child.tag] = this.convertExtensionContent(child);
|
|
71
|
+
});
|
|
72
|
+
return extensions;
|
|
73
|
+
}
|
|
74
|
+
convertExtensionContent(extension) {
|
|
75
|
+
if (extension.children?.length) {
|
|
76
|
+
const result = {};
|
|
77
|
+
extension.children.forEach((child) => {
|
|
78
|
+
result[child.tag] = this.convertExtensionContent(child);
|
|
79
|
+
});
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
return extension.value;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 轨迹转换器
|
|
89
|
+
*/
|
|
90
|
+
export class TrackConverter extends BaseTCXConverter {
|
|
91
|
+
constructor() {
|
|
92
|
+
super(...arguments);
|
|
93
|
+
this.name = "TrackConverter";
|
|
94
|
+
this.supportedTags = ["Track"];
|
|
95
|
+
}
|
|
96
|
+
convert(ast, context) {
|
|
97
|
+
const track = {
|
|
98
|
+
Trackpoint: [],
|
|
99
|
+
};
|
|
100
|
+
this.processChildren(ast, track, {
|
|
101
|
+
Trackpoint: (child, target) => {
|
|
102
|
+
const decoder = context.metadata.get("decoder");
|
|
103
|
+
const trackpoint = decoder
|
|
104
|
+
?.getConverter("Trackpoint")
|
|
105
|
+
?.convert(child, context);
|
|
106
|
+
if (trackpoint && target.Trackpoint) {
|
|
107
|
+
target.Trackpoint.push(trackpoint);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
return track;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 活动圈数转换器
|
|
116
|
+
*/
|
|
117
|
+
export class ActivityLapConverter extends BaseTCXConverter {
|
|
118
|
+
constructor() {
|
|
119
|
+
super(...arguments);
|
|
120
|
+
this.name = "ActivityLapConverter";
|
|
121
|
+
this.supportedTags = ["Lap"];
|
|
122
|
+
}
|
|
123
|
+
convert(ast, context) {
|
|
124
|
+
const lap = {};
|
|
125
|
+
// 提取属性
|
|
126
|
+
this.extractAttributes(ast, lap, {
|
|
127
|
+
StartTime: "Id",
|
|
128
|
+
});
|
|
129
|
+
this.processChildren(ast, lap, {
|
|
130
|
+
TotalTimeSeconds: (child, target) => (target.TotalTimeSeconds = this.parseFloat(child.value)),
|
|
131
|
+
DistanceMeters: (child, target) => (target.DistanceMeters = this.parseFloat(child.value)),
|
|
132
|
+
MaximumSpeed: (child, target) => (target.MaximumSpeed = this.parseFloat(child.value)),
|
|
133
|
+
Calories: (child, target) => (target.Calories = this.parseFloat(child.value)),
|
|
134
|
+
AverageHeartRateBpm: (child, target) => (target.AverageHeartRateBpm = this.parseFloat(child.value)),
|
|
135
|
+
MaximumHeartRateBpm: (child, target) => (target.MaximumHeartRateBpm = this.parseFloat(child.value)),
|
|
136
|
+
Intensity: (child, target) => (target.Intensity = child.value),
|
|
137
|
+
TriggerMethod: (child, target) => (target.TriggerMethod = child.value),
|
|
138
|
+
Track: (child, target) => {
|
|
139
|
+
if (!target.Track)
|
|
140
|
+
target.Track = [];
|
|
141
|
+
const decoder = context.metadata.get("decoder");
|
|
142
|
+
const track = decoder?.getConverter("Track")?.convert(child, context);
|
|
143
|
+
if (track)
|
|
144
|
+
target.Track.push(track);
|
|
145
|
+
},
|
|
146
|
+
Notes: (child, target) => (target.Notes = this.parseString(child.value)),
|
|
147
|
+
Extensions: (child, target) => (target.Extensions = this.convertExtensions(child)),
|
|
148
|
+
});
|
|
149
|
+
return lap;
|
|
150
|
+
}
|
|
151
|
+
convertExtensions(extensionsAST) {
|
|
152
|
+
const extensions = {};
|
|
153
|
+
extensionsAST.children?.forEach((child) => {
|
|
154
|
+
extensions[child.tag] = this.convertExtensionContent(child);
|
|
155
|
+
});
|
|
156
|
+
return extensions;
|
|
157
|
+
}
|
|
158
|
+
convertExtensionContent(extension) {
|
|
159
|
+
if (extension.children?.length) {
|
|
160
|
+
const result = {};
|
|
161
|
+
extension.children.forEach((child) => {
|
|
162
|
+
result[child.tag] = this.convertExtensionContent(child);
|
|
163
|
+
});
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
return extension.value;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 活动转换器
|
|
173
|
+
*/
|
|
174
|
+
export class ActivityConverter extends BaseTCXConverter {
|
|
175
|
+
constructor() {
|
|
176
|
+
super(...arguments);
|
|
177
|
+
this.name = "ActivityConverter";
|
|
178
|
+
this.supportedTags = ["Activity"];
|
|
179
|
+
}
|
|
180
|
+
convert(ast, context) {
|
|
181
|
+
const activity = {
|
|
182
|
+
Id: "",
|
|
183
|
+
Lap: [],
|
|
184
|
+
};
|
|
185
|
+
// 提取属性
|
|
186
|
+
this.extractAttributes(ast, activity, {
|
|
187
|
+
Sport: "Sport",
|
|
188
|
+
});
|
|
189
|
+
this.processChildren(ast, activity, {
|
|
190
|
+
Id: (child, target) => (target.Id = this.parseString(child.value)),
|
|
191
|
+
Lap: (child, target) => {
|
|
192
|
+
const decoder = context.metadata.get("decoder");
|
|
193
|
+
const lap = decoder?.getConverter("Lap")?.convert(child, context);
|
|
194
|
+
if (lap)
|
|
195
|
+
target.Lap.push(lap);
|
|
196
|
+
},
|
|
197
|
+
Notes: (child, target) => (target.Notes = this.parseString(child.value)),
|
|
198
|
+
Training: (child, target) => (target.Training = this.convertTraining(child)),
|
|
199
|
+
Creator: (child, target) => (target.Creator = this.convertCreator(child)),
|
|
200
|
+
Extensions: (child, target) => (target.Extensions = this.convertExtensions(child)),
|
|
201
|
+
});
|
|
202
|
+
return activity;
|
|
203
|
+
}
|
|
204
|
+
convertTraining(ast) {
|
|
205
|
+
const training = {};
|
|
206
|
+
// 处理属性
|
|
207
|
+
if (ast.attributes) {
|
|
208
|
+
Object.entries(ast.attributes).forEach(([key, value]) => {
|
|
209
|
+
training[key] = value;
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
// 处理子元素
|
|
213
|
+
ast.children?.forEach((child) => {
|
|
214
|
+
training[child.tag] = this.convertExtensionContent(child);
|
|
215
|
+
});
|
|
216
|
+
return training;
|
|
217
|
+
}
|
|
218
|
+
convertCreator(ast) {
|
|
219
|
+
const creator = {};
|
|
220
|
+
ast.children?.forEach((child) => {
|
|
221
|
+
creator[child.tag] = this.convertExtensionContent(child);
|
|
222
|
+
});
|
|
223
|
+
return creator;
|
|
224
|
+
}
|
|
225
|
+
convertExtensions(extensionsAST) {
|
|
226
|
+
const extensions = {};
|
|
227
|
+
extensionsAST.children?.forEach((child) => {
|
|
228
|
+
extensions[child.tag] = this.convertExtensionContent(child);
|
|
229
|
+
});
|
|
230
|
+
return extensions;
|
|
231
|
+
}
|
|
232
|
+
convertExtensionContent(extension) {
|
|
233
|
+
if (extension.children?.length) {
|
|
234
|
+
const result = {};
|
|
235
|
+
extension.children.forEach((child) => {
|
|
236
|
+
result[child.tag] = this.convertExtensionContent(child);
|
|
237
|
+
});
|
|
238
|
+
return result;
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
return extension.value;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* 活动列表转换器
|
|
247
|
+
*/
|
|
248
|
+
export class ActivityListConverter extends BaseTCXConverter {
|
|
249
|
+
constructor() {
|
|
250
|
+
super(...arguments);
|
|
251
|
+
this.name = "ActivityListConverter";
|
|
252
|
+
this.supportedTags = ["Activities"];
|
|
253
|
+
}
|
|
254
|
+
convert(ast, context) {
|
|
255
|
+
const activities = {
|
|
256
|
+
Activity: [],
|
|
257
|
+
MultiSportSession: [],
|
|
258
|
+
};
|
|
259
|
+
this.processChildren(ast, activities, {
|
|
260
|
+
Activity: (child, target) => {
|
|
261
|
+
const decoder = context.metadata.get("decoder");
|
|
262
|
+
const activity = decoder
|
|
263
|
+
?.getConverter("Activity")
|
|
264
|
+
?.convert(child, context);
|
|
265
|
+
if (activity && target.Activity) {
|
|
266
|
+
target.Activity.push(activity);
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
MultiSportSession: (child, target) => {
|
|
270
|
+
const decoder = context.metadata.get("decoder");
|
|
271
|
+
const session = decoder
|
|
272
|
+
?.getConverter("MultiSportSession")
|
|
273
|
+
?.convert(child, context);
|
|
274
|
+
if (session && target.MultiSportSession) {
|
|
275
|
+
target.MultiSportSession.push(session);
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
});
|
|
279
|
+
return activities;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* 多运动会话转换器
|
|
284
|
+
*/
|
|
285
|
+
export class MultiSportSessionConverter extends BaseTCXConverter {
|
|
286
|
+
constructor() {
|
|
287
|
+
super(...arguments);
|
|
288
|
+
this.name = "MultiSportSessionConverter";
|
|
289
|
+
this.supportedTags = ["MultiSportSession"];
|
|
290
|
+
}
|
|
291
|
+
convert(ast, context) {
|
|
292
|
+
const session = {};
|
|
293
|
+
this.processChildren(ast, session, {
|
|
294
|
+
Id: (child, target) => (target.Id = this.parseString(child.value)),
|
|
295
|
+
FirstSport: (child, target) => {
|
|
296
|
+
const decoder = context.metadata.get("decoder");
|
|
297
|
+
target.FirstSport = decoder
|
|
298
|
+
?.getConverter("FirstSport")
|
|
299
|
+
?.convert(child, context);
|
|
300
|
+
},
|
|
301
|
+
NextSport: (child, target) => {
|
|
302
|
+
if (!target.NextSport)
|
|
303
|
+
target.NextSport = [];
|
|
304
|
+
const decoder = context.metadata.get("decoder");
|
|
305
|
+
const nextSport = decoder
|
|
306
|
+
?.getConverter("NextSport")
|
|
307
|
+
?.convert(child, context);
|
|
308
|
+
if (nextSport)
|
|
309
|
+
target.NextSport.push(nextSport);
|
|
310
|
+
},
|
|
311
|
+
Notes: (child, target) => (target.Notes = this.parseString(child.value)),
|
|
312
|
+
});
|
|
313
|
+
return session;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// ============ 辅助转换器 ============
|
|
317
|
+
/**
|
|
318
|
+
* 抽象来源转换器
|
|
319
|
+
*/
|
|
320
|
+
export class AbstractSourceConverter extends BaseTCXConverter {
|
|
321
|
+
constructor() {
|
|
322
|
+
super(...arguments);
|
|
323
|
+
this.name = "AbstractSourceConverter";
|
|
324
|
+
this.supportedTags = ["Author", "Creator"];
|
|
325
|
+
}
|
|
326
|
+
convert(ast, context) {
|
|
327
|
+
const source = {};
|
|
328
|
+
this.processChildren(ast, source, {
|
|
329
|
+
Name: (child, target) => (target.Name = this.parseString(child.value)),
|
|
330
|
+
});
|
|
331
|
+
return source;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ExtensionsType, TokenAST } from "../types.js";
|
|
2
|
+
import { ITCXConverterPlugin, ITCXMiddlewarePlugin } from "./base.js";
|
|
3
|
+
import { TCXFileType } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* https://www8.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd
|
|
6
|
+
*/
|
|
7
|
+
export declare class TCXDecoder {
|
|
8
|
+
private converterPlugins;
|
|
9
|
+
private registeredPlugins;
|
|
10
|
+
private middlewarePlugins;
|
|
11
|
+
private processors;
|
|
12
|
+
private initialized;
|
|
13
|
+
private defaultConvertersRegistered;
|
|
14
|
+
constructor();
|
|
15
|
+
/**
|
|
16
|
+
* 初始化流水线 - 注册固定的核心处理器
|
|
17
|
+
*/
|
|
18
|
+
private initializePipeline;
|
|
19
|
+
/**
|
|
20
|
+
* 自动注册默认转换器 - 处理标准TCX标签
|
|
21
|
+
*/
|
|
22
|
+
private registerDefaultConverters;
|
|
23
|
+
/**
|
|
24
|
+
* 为指定标签添加转换器,按优先级排序
|
|
25
|
+
*/
|
|
26
|
+
private addConverterForTag;
|
|
27
|
+
/**
|
|
28
|
+
* 注册转换器插件
|
|
29
|
+
*/
|
|
30
|
+
registerConverter(plugin: ITCXConverterPlugin): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* 注册中间件插件 - 真正的扩展点
|
|
33
|
+
*/
|
|
34
|
+
registerMiddleware(plugin: ITCXMiddlewarePlugin): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* 获取转换器(返回优先级最高的)
|
|
37
|
+
*/
|
|
38
|
+
getConverter(tag: string): ITCXConverterPlugin | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* 获取指定标签的所有转换器(按优先级排序)
|
|
41
|
+
*/
|
|
42
|
+
getAllConverters(tag: string): ITCXConverterPlugin[];
|
|
43
|
+
/**
|
|
44
|
+
* 移除转换器
|
|
45
|
+
*/
|
|
46
|
+
unregisterConverter(pluginName: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* 移除中间件
|
|
49
|
+
*/
|
|
50
|
+
unregisterMiddleware(name: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* 初始化解码器
|
|
53
|
+
*/
|
|
54
|
+
initialize(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* 销毁解码器
|
|
57
|
+
*/
|
|
58
|
+
destroy(): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* 创建解码上下文
|
|
61
|
+
*/
|
|
62
|
+
private createContext;
|
|
63
|
+
/**
|
|
64
|
+
* 执行中间件钩子
|
|
65
|
+
*/
|
|
66
|
+
private executeMiddlewareHook;
|
|
67
|
+
/**
|
|
68
|
+
* 主解析方法 - 固定的流水线 + 灵活的中间件
|
|
69
|
+
*/
|
|
70
|
+
parseByBuffer(buffer: Buffer): Promise<TCXFileType | undefined>;
|
|
71
|
+
/**
|
|
72
|
+
* 转换Extensions(向后兼容)
|
|
73
|
+
*/
|
|
74
|
+
convertExtensions(extensionsAST: TokenAST): ExtensionsType;
|
|
75
|
+
/**
|
|
76
|
+
* @deprecated 使用 parseByBuffer 替代
|
|
77
|
+
*/
|
|
78
|
+
parserByBuffer(buffer: Buffer): Promise<TCXFileType | undefined>;
|
|
79
|
+
/**
|
|
80
|
+
* @deprecated 使用新的插件系统替代
|
|
81
|
+
*/
|
|
82
|
+
parseByString(xmlContent: string): Promise<TCXFileType | undefined>;
|
|
83
|
+
}
|
|
84
|
+
declare const _default: {
|
|
85
|
+
TCXDecoder: typeof TCXDecoder;
|
|
86
|
+
};
|
|
87
|
+
export default _default;
|