@fboes/aerofly-custom-missions 1.2.0 → 1.2.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/CHANGELOG.md +15 -1
- package/README.md +2 -7
- package/dist/index.js +184 -111
- package/dist/index.test.js +99 -39
- package/docs/custom_missions_user.tmc +49 -1234
- package/package.json +1 -1
- package/src/index.test.ts +109 -34
- package/src/index.ts +244 -138
- package/types/index.d.ts +96 -108
- package/types/index.d.ts.map +1 -1
- package/types/index.test.d.ts +1 -1
package/package.json
CHANGED
package/src/index.test.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
AeroflyConfigFileSet,
|
|
2
3
|
AeroflyMissionsList,
|
|
3
4
|
AeroflyMission,
|
|
4
5
|
AeroflyMissionConditions,
|
|
@@ -9,7 +10,7 @@ import {
|
|
|
9
10
|
} from "./index.js";
|
|
10
11
|
import { strict as assert } from "node:assert";
|
|
11
12
|
|
|
12
|
-
const
|
|
13
|
+
const assertValidAeroflyStructure = (aeroflyString: string): void => {
|
|
13
14
|
const openingBrackets = aeroflyString.match(/</g);
|
|
14
15
|
const closingBrackets = aeroflyString.match(/>/g);
|
|
15
16
|
const openingBrackets2 = aeroflyString.match(/\[/g);
|
|
@@ -19,9 +20,51 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
19
20
|
assert.strictEqual(openingBrackets2?.length, closingBrackets2?.length, "Number of [] matches");
|
|
20
21
|
};
|
|
21
22
|
|
|
23
|
+
const assertIncludes = (string: string, includes: string): void => {
|
|
24
|
+
assert.ok(string.includes(includes), `Includes "${includes}"`);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
{
|
|
28
|
+
const file = new AeroflyConfigFileSet(0, "file", "");
|
|
29
|
+
file.pushRaw(
|
|
30
|
+
new AeroflyConfigFileSet(1, "tmmissions_list", "")
|
|
31
|
+
.pushRaw(
|
|
32
|
+
new AeroflyConfigFileSet(2, "list_tmmission_definition", "missions")
|
|
33
|
+
.pushRaw(
|
|
34
|
+
new AeroflyConfigFileSet(3, "tmmission_definition", "mission")
|
|
35
|
+
.push("string8", "title", "KCCR #1: Concord / Buchanan Field")
|
|
36
|
+
.push("float64", "origin_alt", 1066.799965862401, "3500 ft MSL")
|
|
37
|
+
.toString(),
|
|
38
|
+
)
|
|
39
|
+
.pushRaw(new AeroflyConfigFileSet(3, "tmmission_definition", "mission").toString())
|
|
40
|
+
.toString(),
|
|
41
|
+
)
|
|
42
|
+
.toString(),
|
|
43
|
+
);
|
|
44
|
+
assertValidAeroflyStructure(file.toString());
|
|
45
|
+
console.log("✅ AeroflyMission test successful");
|
|
46
|
+
}
|
|
47
|
+
|
|
22
48
|
{
|
|
23
|
-
const mission = new AeroflyMission("Title"
|
|
49
|
+
const mission = new AeroflyMission("Title", {
|
|
50
|
+
origin: {
|
|
51
|
+
icao: "XXXX",
|
|
52
|
+
longitude: 0,
|
|
53
|
+
latitude: 0,
|
|
54
|
+
dir: 0,
|
|
55
|
+
alt: 0,
|
|
56
|
+
},
|
|
57
|
+
destination: {
|
|
58
|
+
icao: "XXXX",
|
|
59
|
+
longitude: 0,
|
|
60
|
+
latitude: 0,
|
|
61
|
+
dir: 0,
|
|
62
|
+
alt: 0,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
24
65
|
assert.deepStrictEqual(mission.title, "Title");
|
|
66
|
+
assertValidAeroflyStructure(mission.toString());
|
|
67
|
+
//console.log(mission.toString());
|
|
25
68
|
console.log("✅ AeroflyMission test successful");
|
|
26
69
|
}
|
|
27
70
|
|
|
@@ -33,7 +76,7 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
33
76
|
conditions.visibility_sm = 10;
|
|
34
77
|
assert.notDeepStrictEqual(conditions.visibility, 10);
|
|
35
78
|
assert.deepStrictEqual(Math.round(conditions.visibility_sm), 10);
|
|
36
|
-
|
|
79
|
+
assertValidAeroflyStructure(conditions.toString());
|
|
37
80
|
console.log("✅ AeroflyMissionConditions test successful");
|
|
38
81
|
}
|
|
39
82
|
|
|
@@ -42,7 +85,7 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
42
85
|
visibility: 15_000,
|
|
43
86
|
});
|
|
44
87
|
assert.deepStrictEqual(conditions.visibility, 15_000);
|
|
45
|
-
|
|
88
|
+
assertValidAeroflyStructure(conditions.toString());
|
|
46
89
|
console.log("✅ AeroflyMissionConditions test successful");
|
|
47
90
|
}
|
|
48
91
|
|
|
@@ -52,7 +95,7 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
52
95
|
});
|
|
53
96
|
assert.notDeepStrictEqual(conditions.visibility, 10);
|
|
54
97
|
assert.deepStrictEqual(Math.round(conditions.visibility_sm), 10);
|
|
55
|
-
|
|
98
|
+
assertValidAeroflyStructure(conditions.toString());
|
|
56
99
|
console.log("✅ AeroflyMissionConditions test successful");
|
|
57
100
|
}
|
|
58
101
|
|
|
@@ -60,7 +103,12 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
60
103
|
const cloud = new AeroflyMissionConditionsCloud(0, 0);
|
|
61
104
|
assert.deepStrictEqual(cloud.cover, 0);
|
|
62
105
|
assert.deepStrictEqual(cloud.base, 0);
|
|
63
|
-
|
|
106
|
+
assertValidAeroflyStructure(cloud.toString());
|
|
107
|
+
assertValidAeroflyStructure(cloud.toString(0));
|
|
108
|
+
assertValidAeroflyStructure(cloud.toString(1));
|
|
109
|
+
assertValidAeroflyStructure(cloud.toString(2));
|
|
110
|
+
assertValidAeroflyStructure(cloud.toString(3));
|
|
111
|
+
|
|
64
112
|
console.log("✅ AeroflyMissionConditionsCloud test successful");
|
|
65
113
|
}
|
|
66
114
|
|
|
@@ -72,7 +120,7 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
72
120
|
cloud.base_feet = 1000;
|
|
73
121
|
assert.notDeepStrictEqual(cloud.base, 1000);
|
|
74
122
|
assert.deepStrictEqual(Math.round(cloud.base_feet), 1000);
|
|
75
|
-
|
|
123
|
+
assertValidAeroflyStructure(cloud.toString());
|
|
76
124
|
console.log("✅ AeroflyMissionConditionsCloud test successful");
|
|
77
125
|
}
|
|
78
126
|
|
|
@@ -81,7 +129,7 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
81
129
|
assert.deepStrictEqual(localizedText.language, "de");
|
|
82
130
|
assert.deepStrictEqual(localizedText.title, "Test");
|
|
83
131
|
assert.deepStrictEqual(localizedText.description, "Test2");
|
|
84
|
-
|
|
132
|
+
assertValidAeroflyStructure(localizedText.toString());
|
|
85
133
|
console.log("✅ AeroflyLocalizedText test successful");
|
|
86
134
|
}
|
|
87
135
|
|
|
@@ -91,10 +139,32 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
91
139
|
assert.deepStrictEqual(targetPlane.latitude, 1);
|
|
92
140
|
assert.deepStrictEqual(targetPlane.dir, 2);
|
|
93
141
|
assert.deepStrictEqual(targetPlane.name, "Test2");
|
|
94
|
-
|
|
142
|
+
assertValidAeroflyStructure(targetPlane.toString());
|
|
95
143
|
console.log("✅ AeroflyMissionTargetPlane test successful");
|
|
96
144
|
}
|
|
97
145
|
|
|
146
|
+
{
|
|
147
|
+
const checkpoint = new AeroflyMissionCheckpoint("TEST", "waypoint", 15, 20);
|
|
148
|
+
let checkpointString = checkpoint.toString();
|
|
149
|
+
|
|
150
|
+
assertIncludes(checkpointString, "[type]");
|
|
151
|
+
assertIncludes(checkpointString, "[name]");
|
|
152
|
+
assertIncludes(checkpointString, "[lon_lat]");
|
|
153
|
+
assertIncludes(checkpointString, "15 20");
|
|
154
|
+
assertIncludes(checkpointString, "[altitude]");
|
|
155
|
+
assert.ok(!checkpointString.includes("[fly_over]"));
|
|
156
|
+
assert.ok(!checkpointString.includes("[alt_cst]"));
|
|
157
|
+
|
|
158
|
+
checkpoint.altitudeConstraint = false;
|
|
159
|
+
checkpoint.flyOver = false;
|
|
160
|
+
checkpointString = checkpoint.toString();
|
|
161
|
+
|
|
162
|
+
assertIncludes(checkpointString, "[fly_over]");
|
|
163
|
+
assertIncludes(checkpointString, "[alt_cst]");
|
|
164
|
+
|
|
165
|
+
console.log("✅ AeroflyMissionCheckpoint test successful");
|
|
166
|
+
}
|
|
167
|
+
|
|
98
168
|
{
|
|
99
169
|
const conditions = new AeroflyMissionConditions({
|
|
100
170
|
time: new Date(Date.UTC(2024, 5, 14, 13, 15, 38)),
|
|
@@ -175,25 +245,26 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
175
245
|
|
|
176
246
|
let missionListString = missionList.toString();
|
|
177
247
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
248
|
+
assertIncludes(missionListString, "[origin]");
|
|
249
|
+
assertIncludes(missionListString, "[tmmission_definition]");
|
|
250
|
+
assertIncludes(missionListString, "[list_tmmission_checkpoint]");
|
|
251
|
+
assertIncludes(missionListString, "[tmmission_checkpoint]");
|
|
252
|
+
assertIncludes(missionListString, "[departure_runway]");
|
|
253
|
+
assertIncludes(missionListString, "[cloud_cover]");
|
|
254
|
+
assertIncludes(missionListString, "[cirrus_cover]");
|
|
255
|
+
assertIncludes(missionListString, "[tmmission_checkpoint][element][0]");
|
|
256
|
+
assertIncludes(missionListString, "[tmmission_checkpoint][element][1]");
|
|
257
|
+
assertIncludes(missionListString, "[tmmission_checkpoint][element][2]");
|
|
258
|
+
assertIncludes(missionListString, "[tmmission_checkpoint][element][3]");
|
|
259
|
+
assertIncludes(missionListString, "<[float64][length][844.2959729825288]>");
|
|
190
260
|
assert.ok(!missionListString.includes("[tags]"));
|
|
191
261
|
assert.ok(!missionListString.includes("[difficulty]"));
|
|
192
262
|
assert.ok(!missionListString.includes("[is_featured]"));
|
|
193
|
-
assert.ok(!missionListString.includes("[tmmission_definition_localized]")
|
|
263
|
+
assert.ok(!missionListString.includes("[tmmission_definition_localized]"));
|
|
194
264
|
assert.ok(!missionListString.includes("[distance]"));
|
|
195
265
|
assert.ok(!missionListString.includes("[duration]"));
|
|
196
|
-
|
|
266
|
+
assert.ok(!missionListString.includes("[alt_cst]"));
|
|
267
|
+
assertValidAeroflyStructure(missionListString);
|
|
197
268
|
|
|
198
269
|
//console.log(missionListString);
|
|
199
270
|
|
|
@@ -205,21 +276,25 @@ const validityCheck = (aeroflyString: string): void => {
|
|
|
205
276
|
mission.tags.push("approach");
|
|
206
277
|
mission.tags.push("pattern");
|
|
207
278
|
mission.finish = new AeroflyMissionTargetPlane(0, 1, 2);
|
|
279
|
+
mission.tutorialName = "c172";
|
|
280
|
+
mission.isScheduled = true;
|
|
208
281
|
missionListString = missionList.toString();
|
|
209
282
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
283
|
+
assertIncludes(missionListString, "[tags]");
|
|
284
|
+
assertIncludes(missionListString, "[difficulty]");
|
|
285
|
+
assertIncludes(missionListString, "[is_featured]");
|
|
286
|
+
assertIncludes(missionListString, "true");
|
|
287
|
+
assertIncludes(missionListString, "[tmmission_definition_localized]");
|
|
288
|
+
assertIncludes(missionListString, "Landeübung");
|
|
289
|
+
assertIncludes(missionListString, "[distance]");
|
|
290
|
+
assertIncludes(missionListString, "[duration]");
|
|
291
|
+
assertIncludes(missionListString, "[finish]");
|
|
292
|
+
assertIncludes(missionListString, "[tutorial_name]");
|
|
293
|
+
assertIncludes(missionListString, "[is_scheduled]");
|
|
294
|
+
assertValidAeroflyStructure(missionListString);
|
|
220
295
|
|
|
221
296
|
//console.dir(missionList.missions[0], { depth: null });
|
|
222
|
-
console.log(missionListString);
|
|
297
|
+
//console.log(missionListString);
|
|
223
298
|
|
|
224
299
|
console.log("✅ AeroflyMissionsList test successful");
|
|
225
300
|
}
|