@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/dist/index.test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AeroflyMissionsList, AeroflyMission, AeroflyMissionConditions, AeroflyMissionConditionsCloud, AeroflyMissionCheckpoint, AeroflyLocalizedText, AeroflyMissionTargetPlane, } from "./index.js";
|
|
1
|
+
import { AeroflyConfigFileSet, AeroflyMissionsList, AeroflyMission, AeroflyMissionConditions, AeroflyMissionConditionsCloud, AeroflyMissionCheckpoint, AeroflyLocalizedText, AeroflyMissionTargetPlane, } from "./index.js";
|
|
2
2
|
import { strict as assert } from "node:assert";
|
|
3
|
-
const
|
|
3
|
+
const assertValidAeroflyStructure = (aeroflyString) => {
|
|
4
4
|
const openingBrackets = aeroflyString.match(/</g);
|
|
5
5
|
const closingBrackets = aeroflyString.match(/>/g);
|
|
6
6
|
const openingBrackets2 = aeroflyString.match(/\[/g);
|
|
@@ -8,27 +8,61 @@ const validityCheck = (aeroflyString) => {
|
|
|
8
8
|
assert.strictEqual(openingBrackets?.length, closingBrackets?.length, "Number of <> matches");
|
|
9
9
|
assert.strictEqual(openingBrackets2?.length, closingBrackets2?.length, "Number of [] matches");
|
|
10
10
|
};
|
|
11
|
+
const assertIncludes = (string, includes) => {
|
|
12
|
+
assert.ok(string.includes(includes), `Includes "${includes}"`);
|
|
13
|
+
};
|
|
14
|
+
{
|
|
15
|
+
const file = new AeroflyConfigFileSet(0, "file", "");
|
|
16
|
+
file.pushRaw(new AeroflyConfigFileSet(1, "tmmissions_list", "")
|
|
17
|
+
.pushRaw(new AeroflyConfigFileSet(2, "list_tmmission_definition", "missions")
|
|
18
|
+
.pushRaw(new AeroflyConfigFileSet(3, "tmmission_definition", "mission")
|
|
19
|
+
.push("string8", "title", "KCCR #1: Concord / Buchanan Field")
|
|
20
|
+
.push("float64", "origin_alt", 1066.799965862401, "3500 ft MSL")
|
|
21
|
+
.toString())
|
|
22
|
+
.pushRaw(new AeroflyConfigFileSet(3, "tmmission_definition", "mission").toString())
|
|
23
|
+
.toString())
|
|
24
|
+
.toString());
|
|
25
|
+
assertValidAeroflyStructure(file.toString());
|
|
26
|
+
console.log("✅ AeroflyMission test successful");
|
|
27
|
+
}
|
|
11
28
|
{
|
|
12
|
-
const mission = new AeroflyMission("Title"
|
|
29
|
+
const mission = new AeroflyMission("Title", {
|
|
30
|
+
origin: {
|
|
31
|
+
icao: "XXXX",
|
|
32
|
+
longitude: 0,
|
|
33
|
+
latitude: 0,
|
|
34
|
+
dir: 0,
|
|
35
|
+
alt: 0,
|
|
36
|
+
},
|
|
37
|
+
destination: {
|
|
38
|
+
icao: "XXXX",
|
|
39
|
+
longitude: 0,
|
|
40
|
+
latitude: 0,
|
|
41
|
+
dir: 0,
|
|
42
|
+
alt: 0,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
13
45
|
assert.deepStrictEqual(mission.title, "Title");
|
|
46
|
+
assertValidAeroflyStructure(mission.toString());
|
|
47
|
+
//console.log(mission.toString());
|
|
14
48
|
console.log("✅ AeroflyMission test successful");
|
|
15
49
|
}
|
|
16
50
|
{
|
|
17
51
|
const conditions = new AeroflyMissionConditions();
|
|
18
|
-
conditions.visibility =
|
|
19
|
-
assert.deepStrictEqual(conditions.visibility,
|
|
52
|
+
conditions.visibility = 15000;
|
|
53
|
+
assert.deepStrictEqual(conditions.visibility, 15000);
|
|
20
54
|
conditions.visibility_sm = 10;
|
|
21
55
|
assert.notDeepStrictEqual(conditions.visibility, 10);
|
|
22
56
|
assert.deepStrictEqual(Math.round(conditions.visibility_sm), 10);
|
|
23
|
-
|
|
57
|
+
assertValidAeroflyStructure(conditions.toString());
|
|
24
58
|
console.log("✅ AeroflyMissionConditions test successful");
|
|
25
59
|
}
|
|
26
60
|
{
|
|
27
61
|
const conditions = new AeroflyMissionConditions({
|
|
28
|
-
visibility:
|
|
62
|
+
visibility: 15000,
|
|
29
63
|
});
|
|
30
|
-
assert.deepStrictEqual(conditions.visibility,
|
|
31
|
-
|
|
64
|
+
assert.deepStrictEqual(conditions.visibility, 15000);
|
|
65
|
+
assertValidAeroflyStructure(conditions.toString());
|
|
32
66
|
console.log("✅ AeroflyMissionConditions test successful");
|
|
33
67
|
}
|
|
34
68
|
{
|
|
@@ -37,14 +71,18 @@ const validityCheck = (aeroflyString) => {
|
|
|
37
71
|
});
|
|
38
72
|
assert.notDeepStrictEqual(conditions.visibility, 10);
|
|
39
73
|
assert.deepStrictEqual(Math.round(conditions.visibility_sm), 10);
|
|
40
|
-
|
|
74
|
+
assertValidAeroflyStructure(conditions.toString());
|
|
41
75
|
console.log("✅ AeroflyMissionConditions test successful");
|
|
42
76
|
}
|
|
43
77
|
{
|
|
44
78
|
const cloud = new AeroflyMissionConditionsCloud(0, 0);
|
|
45
79
|
assert.deepStrictEqual(cloud.cover, 0);
|
|
46
80
|
assert.deepStrictEqual(cloud.base, 0);
|
|
47
|
-
|
|
81
|
+
assertValidAeroflyStructure(cloud.toString());
|
|
82
|
+
assertValidAeroflyStructure(cloud.toString(0));
|
|
83
|
+
assertValidAeroflyStructure(cloud.toString(1));
|
|
84
|
+
assertValidAeroflyStructure(cloud.toString(2));
|
|
85
|
+
assertValidAeroflyStructure(cloud.toString(3));
|
|
48
86
|
console.log("✅ AeroflyMissionConditionsCloud test successful");
|
|
49
87
|
}
|
|
50
88
|
{
|
|
@@ -54,7 +92,7 @@ const validityCheck = (aeroflyString) => {
|
|
|
54
92
|
cloud.base_feet = 1000;
|
|
55
93
|
assert.notDeepStrictEqual(cloud.base, 1000);
|
|
56
94
|
assert.deepStrictEqual(Math.round(cloud.base_feet), 1000);
|
|
57
|
-
|
|
95
|
+
assertValidAeroflyStructure(cloud.toString());
|
|
58
96
|
console.log("✅ AeroflyMissionConditionsCloud test successful");
|
|
59
97
|
}
|
|
60
98
|
{
|
|
@@ -62,7 +100,7 @@ const validityCheck = (aeroflyString) => {
|
|
|
62
100
|
assert.deepStrictEqual(localizedText.language, "de");
|
|
63
101
|
assert.deepStrictEqual(localizedText.title, "Test");
|
|
64
102
|
assert.deepStrictEqual(localizedText.description, "Test2");
|
|
65
|
-
|
|
103
|
+
assertValidAeroflyStructure(localizedText.toString());
|
|
66
104
|
console.log("✅ AeroflyLocalizedText test successful");
|
|
67
105
|
}
|
|
68
106
|
{
|
|
@@ -71,9 +109,26 @@ const validityCheck = (aeroflyString) => {
|
|
|
71
109
|
assert.deepStrictEqual(targetPlane.latitude, 1);
|
|
72
110
|
assert.deepStrictEqual(targetPlane.dir, 2);
|
|
73
111
|
assert.deepStrictEqual(targetPlane.name, "Test2");
|
|
74
|
-
|
|
112
|
+
assertValidAeroflyStructure(targetPlane.toString());
|
|
75
113
|
console.log("✅ AeroflyMissionTargetPlane test successful");
|
|
76
114
|
}
|
|
115
|
+
{
|
|
116
|
+
const checkpoint = new AeroflyMissionCheckpoint("TEST", "waypoint", 15, 20);
|
|
117
|
+
let checkpointString = checkpoint.toString();
|
|
118
|
+
assertIncludes(checkpointString, "[type]");
|
|
119
|
+
assertIncludes(checkpointString, "[name]");
|
|
120
|
+
assertIncludes(checkpointString, "[lon_lat]");
|
|
121
|
+
assertIncludes(checkpointString, "15 20");
|
|
122
|
+
assertIncludes(checkpointString, "[altitude]");
|
|
123
|
+
assert.ok(!checkpointString.includes("[fly_over]"));
|
|
124
|
+
assert.ok(!checkpointString.includes("[alt_cst]"));
|
|
125
|
+
checkpoint.altitudeConstraint = false;
|
|
126
|
+
checkpoint.flyOver = false;
|
|
127
|
+
checkpointString = checkpoint.toString();
|
|
128
|
+
assertIncludes(checkpointString, "[fly_over]");
|
|
129
|
+
assertIncludes(checkpointString, "[alt_cst]");
|
|
130
|
+
console.log("✅ AeroflyMissionCheckpoint test successful");
|
|
131
|
+
}
|
|
77
132
|
{
|
|
78
133
|
const conditions = new AeroflyMissionConditions({
|
|
79
134
|
time: new Date(Date.UTC(2024, 5, 14, 13, 15, 38)),
|
|
@@ -147,25 +202,26 @@ const validityCheck = (aeroflyString) => {
|
|
|
147
202
|
assert.strictEqual(missionList.missions[0].aircraft.name, "c172");
|
|
148
203
|
assert.strictEqual(missionList.missions[0].aircraft.icao, "C172");
|
|
149
204
|
let missionListString = missionList.toString();
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
205
|
+
assertIncludes(missionListString, "[origin]");
|
|
206
|
+
assertIncludes(missionListString, "[tmmission_definition]");
|
|
207
|
+
assertIncludes(missionListString, "[list_tmmission_checkpoint]");
|
|
208
|
+
assertIncludes(missionListString, "[tmmission_checkpoint]");
|
|
209
|
+
assertIncludes(missionListString, "[departure_runway]");
|
|
210
|
+
assertIncludes(missionListString, "[cloud_cover]");
|
|
211
|
+
assertIncludes(missionListString, "[cirrus_cover]");
|
|
212
|
+
assertIncludes(missionListString, "[tmmission_checkpoint][element][0]");
|
|
213
|
+
assertIncludes(missionListString, "[tmmission_checkpoint][element][1]");
|
|
214
|
+
assertIncludes(missionListString, "[tmmission_checkpoint][element][2]");
|
|
215
|
+
assertIncludes(missionListString, "[tmmission_checkpoint][element][3]");
|
|
216
|
+
assertIncludes(missionListString, "<[float64][length][844.2959729825288]>");
|
|
162
217
|
assert.ok(!missionListString.includes("[tags]"));
|
|
163
218
|
assert.ok(!missionListString.includes("[difficulty]"));
|
|
164
219
|
assert.ok(!missionListString.includes("[is_featured]"));
|
|
165
|
-
assert.ok(!missionListString.includes("[tmmission_definition_localized]")
|
|
220
|
+
assert.ok(!missionListString.includes("[tmmission_definition_localized]"));
|
|
166
221
|
assert.ok(!missionListString.includes("[distance]"));
|
|
167
222
|
assert.ok(!missionListString.includes("[duration]"));
|
|
168
|
-
|
|
223
|
+
assert.ok(!missionListString.includes("[alt_cst]"));
|
|
224
|
+
assertValidAeroflyStructure(missionListString);
|
|
169
225
|
//console.log(missionListString);
|
|
170
226
|
mission.difficulty = 1.0;
|
|
171
227
|
mission.isFeatured = true;
|
|
@@ -175,18 +231,22 @@ const validityCheck = (aeroflyString) => {
|
|
|
175
231
|
mission.tags.push("approach");
|
|
176
232
|
mission.tags.push("pattern");
|
|
177
233
|
mission.finish = new AeroflyMissionTargetPlane(0, 1, 2);
|
|
234
|
+
mission.tutorialName = "c172";
|
|
235
|
+
mission.isScheduled = true;
|
|
178
236
|
missionListString = missionList.toString();
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
237
|
+
assertIncludes(missionListString, "[tags]");
|
|
238
|
+
assertIncludes(missionListString, "[difficulty]");
|
|
239
|
+
assertIncludes(missionListString, "[is_featured]");
|
|
240
|
+
assertIncludes(missionListString, "true");
|
|
241
|
+
assertIncludes(missionListString, "[tmmission_definition_localized]");
|
|
242
|
+
assertIncludes(missionListString, "Landeübung");
|
|
243
|
+
assertIncludes(missionListString, "[distance]");
|
|
244
|
+
assertIncludes(missionListString, "[duration]");
|
|
245
|
+
assertIncludes(missionListString, "[finish]");
|
|
246
|
+
assertIncludes(missionListString, "[tutorial_name]");
|
|
247
|
+
assertIncludes(missionListString, "[is_scheduled]");
|
|
248
|
+
assertValidAeroflyStructure(missionListString);
|
|
189
249
|
//console.dir(missionList.missions[0], { depth: null });
|
|
190
|
-
console.log(missionListString);
|
|
250
|
+
//console.log(missionListString);
|
|
191
251
|
console.log("✅ AeroflyMissionsList test successful");
|
|
192
252
|
}
|