@jtff/miztemplate-lib 3.0.0-rc1 → 3.0.0-rc10

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/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const MizTemplateCI = require("./lib/jtff-lib-ci.js");
2
- const mizlib = require("./lib/mizlib.js");
2
+ const Mizlib = require("./lib/mizlib.js");
3
3
  const build = require("./scripts/build.js");
4
4
  const clean = require("./scripts/clean.js");
5
5
  const ftpupload = require("./scripts/ftpupload.js");
@@ -13,6 +13,7 @@ const templateUpdate = require("./scripts/template-update.js");
13
13
 
14
14
  module.exports = {
15
15
  MizTemplateCI: MizTemplateCI,
16
+ Mizlib: Mizlib,
16
17
  build:build,
17
18
  clean:clean,
18
19
  ftpupload:ftpupload,
@@ -24,5 +25,4 @@ module.exports = {
24
25
  nextversionPrepare:nextversionPrepare,
25
26
  release:release,
26
27
  templateUpdate:templateUpdate,
27
- mizlib: mizlib,
28
28
  };
@@ -4,10 +4,12 @@ const fs = require("fs");
4
4
  const path = require("path");
5
5
  const { google } = require("googleapis");
6
6
  const ftpClient = require('ftp');
7
+ const Mizlib = require("./mizlib");
7
8
 
8
9
  class MizTemplateCI{
9
10
  constructor(config) {
10
- this.config = config
11
+ this.config = config;
12
+ this.mizlib = new Mizlib();
11
13
  }
12
14
 
13
15
  getVersion() {
package/lib/mizlib.js CHANGED
@@ -1,336 +1,321 @@
1
1
  "use strict";
2
2
 
3
3
  const jszip = require("jszip");
4
- const lstat = promisify(fs.lstat);
5
4
  const path = require("path");
6
5
  const {format, parse} = require("lua-json");
7
6
  const {promisify} = require("util");
7
+ const fs = require("fs");
8
+ const lstat = promisify(fs.lstat);
8
9
 
9
- function injectLuaScriptsInMissionObject(tObject, trObject, mrObject, strTitle, scriptFilesArray, timingInSeconds, hexColor) {
10
- let nextIndex = Object.keys(trObject).length + 1;
11
- if (nextIndex === 1) {
12
- tObject['actions'] = {};
13
- tObject['func'] = {};
14
- tObject['conditions'] = {};
15
- tObject['flag'] = {};
16
- trObject = {};
10
+ class Mizlib {
11
+ constructor() {
12
+ // no need for initialization
17
13
  }
18
- let actionSentence = "";
19
- let actionsObject = {};
20
- for (const [index, scriptFile] of scriptFilesArray.entries()) {
21
- actionSentence += "a_do_script_file(getValueResourceByKey(\"" + scriptFile + "\")); "
22
- actionsObject[index + 1] = {
23
- file: scriptFile,
24
- predicate: 'a_do_script_file',
14
+
15
+ injectLuaScriptsInMissionObject(tObject, trObject, mrObject, strTitle, scriptFilesArray, timingInSeconds, hexColor) {
16
+ let nextIndex = Object.keys(trObject).length + 1;
17
+ if (nextIndex === 1) {
18
+ tObject['actions'] = {};
19
+ tObject['func'] = {};
20
+ tObject['conditions'] = {};
21
+ tObject['flag'] = {};
22
+ trObject = {};
23
+ }
24
+ let actionSentence = "";
25
+ let actionsObject = {};
26
+ for (const [index, scriptFile] of scriptFilesArray.entries()) {
27
+ actionSentence += "a_do_script_file(getValueResourceByKey(\"" + scriptFile + "\")); "
28
+ actionsObject[index + 1] = {
29
+ file: scriptFile,
30
+ predicate: 'a_do_script_file',
31
+ };
32
+ mrObject[scriptFile] = scriptFile;
33
+ }
34
+ actionSentence += "mission.trig.func[" + nextIndex + "]=nil;"
35
+ tObject['actions'][nextIndex] = actionSentence;
36
+ tObject['func'][nextIndex] = "if mission.trig.conditions[" + nextIndex + "]() then mission.trig.actions[" + nextIndex + "]() end";
37
+ tObject['conditions'][nextIndex] = "return(c_time_after(" + timingInSeconds + ") )";
38
+ tObject['flag'][nextIndex] = true;
39
+ trObject[nextIndex] = {
40
+ rules: {
41
+ 1: {
42
+ coalitionlist: 'red',
43
+ seconds: timingInSeconds,
44
+ predicate: 'c_time_after',
45
+ zone: ''
46
+ }
47
+ },
48
+ eventlist: '',
49
+ comment: strTitle,
50
+ actions: actionsObject,
51
+ predicate: 'triggerOnce',
52
+ colorItem: hexColor
25
53
  };
26
- mrObject[scriptFile] = scriptFile;
54
+ return {tObject: tObject, trObject: trObject, mrObject: mrObject};
27
55
  }
28
- actionSentence += "mission.trig.func[" + nextIndex + "]=nil;"
29
- tObject['actions'][nextIndex] = actionSentence;
30
- tObject['func'][nextIndex] = "if mission.trig.conditions[" + nextIndex + "]() then mission.trig.actions[" + nextIndex + "]() end";
31
- tObject['conditions'][nextIndex] = "return(c_time_after(" + timingInSeconds + ") )";
32
- tObject['flag'][nextIndex] = true;
33
- trObject[nextIndex] = {
34
- rules: {
35
- 1: {
36
- coalitionlist: 'red',
37
- seconds: timingInSeconds,
38
- predicate: 'c_time_after',
39
- zone: ''
40
- }
41
- },
42
- eventlist: '',
43
- comment: strTitle,
44
- actions: actionsObject,
45
- predicate: 'triggerOnce',
46
- colorItem: hexColor
47
- };
48
- return { tObject: tObject, trObject: trObject, mrObject: mrObject };
49
- }
50
56
 
51
- async function getZipObjectFromMizPath(mizPath) {
52
- var MizFile = new jszip();
53
- const mizData = fs.readFileSync(mizPath);
54
- return MizFile.loadAsync(mizData);
55
- }
56
-
57
- async function mizUpdate(mizPath, copyPath, strTheatreSettings) {
58
- const zip = await getZipObjectFromMizPath(mizPath);
59
- injectLuaFilesFromFolderIntoZipObject(zip,'src');
60
- injectLuaFilesFromFolderIntoZipObject(zip,'lib');
61
- if (strTheatreSettings === null) {
62
- // TODO: Inject fake data
63
- console.log("NO THEATRE SPECIFIED. RADIO PRESETS WILL NOT BE AVAILABLE !");
64
- } else {
65
- await mizUpdateRadioPresets(zip, 'resources/radios/' + strTheatreSettings);
57
+ async getZipObjectFromMizPath(mizPath) {
58
+ var MizFile = new jszip();
59
+ const mizData = fs.readFileSync(mizPath);
60
+ return MizFile.loadAsync(mizData);
66
61
  }
67
- mizUpdateSettingsLuaFiles(zip, strTheatreSettings);
68
- await mizUpdateSoundFolders(zip);
69
- const inputZip = await zip.generateAsync({
70
- type: 'nodebuffer',
71
- streamFiles: true,
72
- compression: "DEFLATE",
73
- compressionOptions: {
74
- level: 9
75
- }
76
- });
77
- fs.writeFileSync(copyPath ? copyPath : mizPath, inputZip);
78
- }
79
-
80
- async function mizInjectMissionDataFile(mizPath, missionObject) {
81
- const zip = await getZipObjectFromMizPath(mizPath);
82
- mizUpdateMissionDataFile(zip, missionObject);
83
- const inputZip = await zip.generateAsync({
84
- type: 'nodebuffer',
85
- streamFiles: true,
86
- compression: "DEFLATE",
87
- compressionOptions: {
88
- level: 9
89
- }
90
- });
91
- fs.writeFileSync(mizPath, inputZip);
92
- }
93
62
 
94
- async function injectLuaSettingsFromFolderPathToMizPath(mizPath, settingsFolder) {
95
- const zip = await getZipObjectFromMizPath(mizPath);
96
- await injectLuaSettingsFromFolderPathToZipObject(zip,settingsFolder);
97
- const outputZip = await zip.generateAsync({
98
- type: 'nodebuffer',
99
- streamFiles: true,
100
- compression: "DEFLATE",
101
- compressionOptions: {
102
- level: 9
63
+ async mizUpdate(mizPath, copyPath, strTheatreSettings) {
64
+ const zip = await this.getZipObjectFromMizPath(mizPath);
65
+ this.injectLuaFilesFromFolderIntoZipObject(zip, 'src');
66
+ this.injectLuaFilesFromFolderIntoZipObject(zip, 'lib');
67
+ if (strTheatreSettings === null) {
68
+ // TODO: Inject fake data
69
+ console.log("NO THEATRE SPECIFIED. RADIO PRESETS WILL NOT BE AVAILABLE !");
70
+ } else {
71
+ await this.mizUpdateRadioPresets(zip, 'resources/radios/' + strTheatreSettings);
103
72
  }
104
- });
105
- fs.writeFileSync(mizPath, outputZip);
106
- }
73
+ this.mizUpdateSettingsLuaFiles(zip, strTheatreSettings);
74
+ await this.mizUpdateSoundFolders(zip);
75
+ const inputZip = await zip.generateAsync({
76
+ type: 'nodebuffer',
77
+ streamFiles: true,
78
+ compression: "DEFLATE",
79
+ compressionOptions: {
80
+ level: 9
81
+ }
82
+ });
83
+ fs.writeFileSync(copyPath ? copyPath : mizPath, inputZip);
84
+ }
107
85
 
108
- async function injectLuaSettingsFromFolderPathToZipObject(zip, settingsFolder) {
109
- for (let file of fs.readdirSync(settingsFolder).filter(file => file.endsWith(".lua"))) {
110
- injectFileIntoZipObject(zip, [
111
- settingsFolder,
112
- "/",
113
- file].join(""));
86
+ async mizInjectMissionDataFile(mizPath, missionObject) {
87
+ const zip = await this.getZipObjectFromMizPath(mizPath);
88
+ this.mizUpdateMissionDataFile(zip, missionObject);
89
+ const inputZip = await zip.generateAsync({
90
+ type: 'nodebuffer',
91
+ streamFiles: true,
92
+ compression: "DEFLATE",
93
+ compressionOptions: {
94
+ level: 9
95
+ }
96
+ });
97
+ fs.writeFileSync(mizPath, inputZip);
114
98
  }
115
- }
116
99
 
100
+ async injectLuaSettingsFromFolderPathToMizPath(mizPath, settingsFolder) {
101
+ const zip = await this.getZipObjectFromMizPath(mizPath);
102
+ await this.injectLuaSettingsFromFolderPathToZipObject(zip, settingsFolder);
103
+ const outputZip = await zip.generateAsync({
104
+ type: 'nodebuffer',
105
+ streamFiles: true,
106
+ compression: "DEFLATE",
107
+ compressionOptions: {
108
+ level: 9
109
+ }
110
+ });
111
+ fs.writeFileSync(mizPath, outputZip);
112
+ }
117
113
 
118
- async function mizInjectMapResourceFile(mizPath, mapResourceObject) {
119
- const zip = await getZipObjectFromMizPath(mizPath);
120
- mizUpdateMapResourceFile(zip, mapResourceObject);
121
- const inputZip = await zip.generateAsync({
122
- type: 'nodebuffer',
123
- streamFiles: true,
124
- compression: "DEFLATE",
125
- compressionOptions: {
126
- level: 9
114
+ async injectLuaSettingsFromFolderPathToZipObject(zip, settingsFolder) {
115
+ for (let file of fs.readdirSync(settingsFolder).filter(file => file.endsWith(".lua"))) {
116
+ this.injectFileIntoZipObject(zip, [
117
+ settingsFolder,
118
+ "/",
119
+ file].join(""));
127
120
  }
128
- });
129
- fs.writeFileSync(mizPath, inputZip);
130
- }
121
+ }
131
122
 
132
- function injectFileIntoZipObject(zip, filePath) {
133
- zip.remove("l10n/DEFAULT/" + path.basename(filePath));
134
- var stream = fs.createReadStream(filePath);
135
- zip.file("l10n/DEFAULT/" + path.basename(filePath), stream);
136
- }
137
123
 
138
- function mizUpdateMissionDataFile(zip, missionObject) {
139
- zip.remove("mission");
140
- let missionLuaT = format(missionObject, { singleQuote: false })
141
- missionLuaT = missionLuaT
142
- .split('\n')
143
- .slice(1, -1)
144
- .join('\n')
145
- .slice(0, -1)
146
- .replace(/\[\"(\d+)\"\] = /g, "[$1] = ");
147
- zip.file("mission", missionLuaT);
148
- }
124
+ async mizInjectMapResourceFile(mizPath, mapResourceObject) {
125
+ const zip = await this.getZipObjectFromMizPath(mizPath);
126
+ this.mizUpdateMapResourceFile(zip, mapResourceObject);
127
+ const inputZip = await zip.generateAsync({
128
+ type: 'nodebuffer',
129
+ streamFiles: true,
130
+ compression: "DEFLATE",
131
+ compressionOptions: {
132
+ level: 9
133
+ }
134
+ });
135
+ fs.writeFileSync(mizPath, inputZip);
136
+ }
149
137
 
150
- function mizUpdateMapResourceFile(zip, mapResourceObject) {
151
- zip.remove("l10n/DEFAULT/mapResource");
152
- let mapResourceLuaT = format(mapResourceObject, { singleQuote: false })
153
- mapResourceLuaT = mapResourceLuaT
154
- .split('\n')
155
- .slice(1, -1)
156
- .join('\n')
157
- .slice(0, -1)
158
- .replace(/\[\"(\d+)\"\] = /g, "[$1] = ");
159
- zip.file("l10n/DEFAULT/mapResource", mapResourceLuaT);
160
- }
138
+ injectFileIntoZipObject(zip, filePath) {
139
+ zip.remove("l10n/DEFAULT/" + path.basename(filePath));
140
+ var stream = fs.createReadStream(filePath);
141
+ zip.file("l10n/DEFAULT/" + path.basename(filePath), stream);
142
+ }
161
143
 
162
- function getMissionLuaStringFromZipObject(zipStream) {
163
- return zipStream.file("mission").async("string");
164
- }
144
+ mizUpdateMissionDataFile(zip, missionObject) {
145
+ zip.remove("mission");
146
+ let missionLuaT = format(missionObject, {singleQuote: false})
147
+ missionLuaT = missionLuaT
148
+ .split('\n')
149
+ .slice(1, -1)
150
+ .join('\n')
151
+ .slice(0, -1)
152
+ .replace(/\[\"(\d+)\"\] = /g, "[$1] = ");
153
+ zip.file("mission", missionLuaT);
154
+ }
165
155
 
166
- function getMapResourceLuaStringFromZipObject(zipStream) {
167
- return zipStream.file("l10n/DEFAULT/mapResource").async("string");
168
- }
156
+ mizUpdateMapResourceFile(zip, mapResourceObject) {
157
+ zip.remove("l10n/DEFAULT/mapResource");
158
+ let mapResourceLuaT = format(mapResourceObject, {singleQuote: false})
159
+ mapResourceLuaT = mapResourceLuaT
160
+ .split('\n')
161
+ .slice(1, -1)
162
+ .join('\n')
163
+ .slice(0, -1)
164
+ .replace(/\[\"(\d+)\"\] = /g, "[$1] = ");
165
+ zip.file("l10n/DEFAULT/mapResource", mapResourceLuaT);
166
+ }
169
167
 
170
- function injectLuaFilesFromFolderIntoZipObject(zip, folderPath) {
171
- for (let file of fs.readdirSync(folderPath).filter(file => file.endsWith(".lua"))) {
172
- console.log('injecting up2date ' + folderPath + '/' + file + ' file in archive');
173
- injectFileIntoZipObject(zip, folderPath + "/" + file);
174
- };
175
- }
168
+ getMissionLuaStringFromZipObject(zipStream) {
169
+ return zipStream.file("mission").async("string");
170
+ }
171
+
172
+ getMapResourceLuaStringFromZipObject(zipStream) {
173
+ return zipStream.file("l10n/DEFAULT/mapResource").async("string");
174
+ }
175
+
176
+ injectLuaFilesFromFolderIntoZipObject(zip, folderPath) {
177
+ for (let file of fs.readdirSync(folderPath).filter(file => file.endsWith(".lua"))) {
178
+ console.log('injecting up2date ' + folderPath + '/' + file + ' file in archive');
179
+ this.injectFileIntoZipObject(zip, folderPath + "/" + file);
180
+ }
181
+ ;
182
+ }
176
183
 
177
184
 
178
- async function mizUpdateRadioPresets(zip, preset_folder) {
179
- // Create folder Avionics to make sure it exists then delete it to remove any old preset in the template
180
- // Allows adding presets for A-10C
181
- zip.folder("Avionics");
182
- zip.remove("Avionics");
185
+ async mizUpdateRadioPresets(zip, preset_folder) {
186
+ // Create folder Avionics to make sure it exists then delete it to remove any old preset in the template
187
+ // Allows adding presets for A-10C
188
+ zip.folder("Avionics");
189
+ zip.remove("Avionics");
183
190
 
184
- const mission_object = await getMissionObjectFromZipObject(zip);
185
- for (let file of fs.readdirSync(preset_folder).filter(file => file.endsWith(".lua"))) {
186
- const file_data = fs.readFileSync(preset_folder + '/' + file).toString();
187
- const lua_string = file_data.substring(0, file_data.indexOf("radio_descriptor_table =") - 1);
188
- const radio_descriptor_table = parse("return {" + lua_string + "}").descriptor;
191
+ const mission_object = await this.getMissionObjectFromZipObject(zip);
192
+ for (let file of fs.readdirSync(preset_folder).filter(file => file.endsWith(".lua"))) {
193
+ const file_data = fs.readFileSync(preset_folder + '/' + file).toString();
194
+ const lua_string = file_data.substring(0, file_data.indexOf("radio_descriptor_table =") - 1);
195
+ const radio_descriptor_table = parse("return {" + lua_string + "}").descriptor;
189
196
 
190
- console.log('updating radio presets (aircraft: ' + radio_descriptor_table["aircraft"] + ', group_name: ' + radio_descriptor_table["group_name"] + ') with preset in ' + preset_folder + ' folder');
191
- const dcs_radio_presets = file_data.substring(file_data.indexOf("radio_descriptor_table =") + 24);
197
+ console.log('updating radio presets (aircraft: ' + radio_descriptor_table["aircraft"] + ', group_name: ' + radio_descriptor_table["group_name"] + ') with preset in ' + preset_folder + ' folder');
198
+ const dcs_radio_presets = file_data.substring(file_data.indexOf("radio_descriptor_table =") + 24);
192
199
 
193
- for (const coalition_key in mission_object.coalition) {
194
- const coalition = mission_object.coalition[coalition_key];
195
- for (const country_list_key in coalition) {
196
- if (country_list_key != "country") continue;
197
- const country_list = coalition[country_list_key];
198
- for (const country_key in country_list) {
199
- const country = country_list[country_key];
200
- for (const plane_key in country["plane"]) {
201
- const plane = country["plane"][plane_key];
202
- for (const group_key in plane) {
203
- const group = plane[group_key];
204
- if (group["name"].match(radio_descriptor_table["group_name"]) == null) continue;
205
- for (const unit_key in group) {
206
- if (unit_key != "units") continue;
207
- const unit = group[unit_key];
208
- for (const sub_unit_key in unit) {
209
- const sub_unit = unit[sub_unit_key];
210
- if (sub_unit["skill"] != "Client") continue;
211
- // Aircraft is an A10CII, use A10C mode by creating files in the root with the unit id
212
- // if (radio_descriptor_table["aircraft"] == 'A-10C_2') {
213
- // const unit_id = sub_unit["unitId"];
214
- // ["UHF_RADIO", "VHF_AM_RADIO", "VHF_FM_RADIO"].forEach(folder => {
215
- // var zip_folder = zip.folder("Avionics/A-10C_2/" + unit_id + "/" + folder);
216
- // var file = parse("return " + dcs_radio_presets)[folder];
217
- // file = format(file, { singleQuote: false });
218
- // file = file
219
- // .split('\n')
220
- // .slice(1, -1)
221
- // .join('\n')
222
- // .slice(0, -1)
223
- // .replace(/\[\"(\d+)\"\] = /g, "[$1] = ");
224
- // zip_folder.file("SETTINGS.lua", file);
225
- // });
226
- // continue;
227
- // }
228
- if (sub_unit["type"] != radio_descriptor_table["aircraft"]) continue;
229
- // GROUP FOUND, SET RADIOS
230
- sub_unit["Radio"] = parse("return " + dcs_radio_presets)
200
+ for (const coalition_key in mission_object.coalition) {
201
+ const coalition = mission_object.coalition[coalition_key];
202
+ for (const country_list_key in coalition) {
203
+ if (country_list_key != "country") continue;
204
+ const country_list = coalition[country_list_key];
205
+ for (const country_key in country_list) {
206
+ const country = country_list[country_key];
207
+ for (const plane_key in country["plane"]) {
208
+ const plane = country["plane"][plane_key];
209
+ for (const group_key in plane) {
210
+ const group = plane[group_key];
211
+ if (group["name"].match(radio_descriptor_table["group_name"]) == null) continue;
212
+ for (const unit_key in group) {
213
+ if (unit_key != "units") continue;
214
+ const unit = group[unit_key];
215
+ for (const sub_unit_key in unit) {
216
+ const sub_unit = unit[sub_unit_key];
217
+ if (sub_unit["skill"] != "Client") continue;
218
+ // Aircraft is an A10CII, use A10C mode by creating files in the root with the unit id
219
+ // if (radio_descriptor_table["aircraft"] == 'A-10C_2') {
220
+ // const unit_id = sub_unit["unitId"];
221
+ // ["UHF_RADIO", "VHF_AM_RADIO", "VHF_FM_RADIO"].forEach(folder => {
222
+ // var zip_folder = zip.folder("Avionics/A-10C_2/" + unit_id + "/" + folder);
223
+ // var file = parse("return " + dcs_radio_presets)[folder];
224
+ // file = format(file, { singleQuote: false });
225
+ // file = file
226
+ // .split('\n')
227
+ // .slice(1, -1)
228
+ // .join('\n')
229
+ // .slice(0, -1)
230
+ // .replace(/\[\"(\d+)\"\] = /g, "[$1] = ");
231
+ // zip_folder.file("SETTINGS.lua", file);
232
+ // });
233
+ // continue;
234
+ // }
235
+ if (sub_unit["type"] != radio_descriptor_table["aircraft"]) continue;
236
+ // GROUP FOUND, SET RADIOS
237
+ sub_unit["Radio"] = parse("return " + dcs_radio_presets)
238
+ }
231
239
  }
232
240
  }
233
241
  }
234
242
  }
235
243
  }
236
244
  }
237
- }
238
- };
239
- mizUpdateMissionDataFile(zip, {mission: mission_object});
240
- }
245
+ };
246
+ this.mizUpdateMissionDataFile(zip, {mission: mission_object});
247
+ }
241
248
 
242
- function mizUpdateSettingsLuaFiles(zip, strTheatre) {
243
- for (let file of fs.readdirSync('settings/' + strTheatre).filter(file => file.endsWith(".lua"))) {
244
- console.log('updating settings/' + strTheatre + '/' + file + ' file in miz file');
245
- injectFileIntoZipObject(zip, 'settings/' + strTheatre + '/' + file);
246
- };
247
- }
249
+ mizUpdateSettingsLuaFiles(zip, strTheatre) {
250
+ for (let file of fs.readdirSync('settings/' + strTheatre).filter(file => file.endsWith(".lua"))) {
251
+ console.log('updating settings/' + strTheatre + '/' + file + ' file in miz file');
252
+ this.injectFileIntoZipObject(zip, 'settings/' + strTheatre + '/' + file);
253
+ }
254
+ ;
255
+ }
248
256
 
249
- async function mizUpdateSoundFolders(zip) {
250
- if (fs.existsSync('resources/sounds') && fs.lstatSync('resources/sounds').isDirectory()) {
251
- const folderArray = fs.readdirSync('resources/sounds');
252
- for (const folder of folderArray) {
253
- await mizUpdateSingleSoundFolder(zip, folder);
257
+ async mizUpdateSoundFolders(zip) {
258
+ if (fs.existsSync('resources/sounds') && fs.lstatSync('resources/sounds').isDirectory()) {
259
+ const folderArray = fs.readdirSync('resources/sounds');
260
+ for (const folder of folderArray) {
261
+ await this.mizUpdateSingleSoundFolder(zip, folder);
262
+ }
254
263
  }
255
264
  }
256
- }
257
265
 
258
- async function mizUpdateSingleSoundFolder(zip, folder) {
259
- if (fs.existsSync('resources/sounds/' + folder) && fs.lstatSync('resources/sounds/' + folder).isDirectory()) {
260
- console.log('adding sound files from resources/sounds/' + folder + ' folder...');
261
- zip = zip.remove(folder).folder(folder);
262
- await addFilesToZip(zip, 'resources/sounds/' + folder, fs.readdirSync('resources/sounds/' + folder));
266
+ async mizUpdateSingleSoundFolder(zip, folder) {
267
+ if (fs.existsSync('resources/sounds/' + folder) && fs.lstatSync('resources/sounds/' + folder).isDirectory()) {
268
+ console.log('adding sound files from resources/sounds/' + folder + ' folder...');
269
+ zip = zip.remove(folder).folder(folder);
270
+ await this.addFilesToZip(zip, 'resources/sounds/' + folder, fs.readdirSync('resources/sounds/' + folder));
271
+ }
263
272
  }
264
- }
265
273
 
266
- async function addFilesToZip(zip, directoryPath, filesToInclude) {
267
- const promiseArr = await filesToInclude.map(async file => {
268
- const filePath = path.join(directoryPath, file)
269
- try {
270
- const fileStats = await lstat(filePath)
271
- const isDirectory = fileStats.isDirectory()
272
- if (isDirectory) {
273
- const directory = zip.remove(file).folder(file)
274
- const subFiles = fs.readdirSync(filePath)
275
- return addFilesToZip(directory, filePath, subFiles)
276
- } else {
277
- // console.log('added file : '+file);
278
- return zip.file(file, fs.createReadStream(filePath))
274
+ async addFilesToZip(zip, directoryPath, filesToInclude) {
275
+ const promiseArr = await filesToInclude.map(async file => {
276
+ const filePath = path.join(directoryPath, file)
277
+ try {
278
+ const fileStats = await lstat(filePath)
279
+ const isDirectory = fileStats.isDirectory()
280
+ if (isDirectory) {
281
+ const directory = zip.remove(file).folder(file)
282
+ const subFiles = fs.readdirSync(filePath)
283
+ return this.addFilesToZip(directory, filePath, subFiles)
284
+ } else {
285
+ // console.log('added file : '+file);
286
+ return zip.file(file, fs.createReadStream(filePath))
287
+ }
288
+ } catch (err) {
289
+ console.log(err)
290
+ return Promise.resolve()
279
291
  }
280
- } catch (err) {
281
- console.log(err)
282
- return Promise.resolve()
283
- }
284
- })
285
- return Promise.all(promiseArr)
286
- }
292
+ })
293
+ return Promise.all(promiseArr)
294
+ }
287
295
 
288
- async function copyMiz(srcMizPath, dstMizPath) {
289
- await fs.createReadStream(srcMizPath).pipe(fs.createWriteStream(dstMizPath));
290
- }
296
+ async copyMiz(srcMizPath, dstMizPath) {
297
+ await fs.createReadStream(srcMizPath).pipe(fs.createWriteStream(dstMizPath));
298
+ }
291
299
 
292
- async function getMissionObjectFromMizPath(MizPath) {
293
- let luaTable = 'return { \n' + await getMissionLuaStringFromZipObject(await getZipObjectFromMizPath(MizPath)) + ' }';
294
- return parse(luaTable).mission;
295
- }
300
+ async getMissionObjectFromMizPath(MizPath) {
301
+ let luaTable = 'return { \n' + await this.getMissionLuaStringFromZipObject(await this.getZipObjectFromMizPath(MizPath)) + ' }';
302
+ return parse(luaTable).mission;
303
+ }
296
304
 
297
- async function getMissionObjectFromZipObject(zip) {
298
- let luaTable = 'return { \n' + await getMissionLuaStringFromZipObject(zip) + ' }';
299
- return parse(luaTable).mission;
300
- }
305
+ async getMissionObjectFromZipObject(zip) {
306
+ let luaTable = 'return { \n' + await this.getMissionLuaStringFromZipObject(zip) + ' }';
307
+ return parse(luaTable).mission;
308
+ }
301
309
 
302
- async function getMapResourceObjectFromMizPath(MizPath) {
303
- let luaTable = 'return { \n' + await getMapResourceLuaStringFromZipObject(await getZipObjectFromMizPath(MizPath)) + ' }';
304
- return parse(luaTable).mapResource;
305
- }
310
+ async getMapResourceObjectFromMizPath(MizPath) {
311
+ let luaTable = 'return { \n' + await this.getMapResourceLuaStringFromZipObject(await this.getZipObjectFromMizPath(MizPath)) + ' }';
312
+ return parse(luaTable).mapResource;
313
+ }
306
314
 
307
- async function getMapResourceObjectFromZipObject(zip) {
308
- let luaTable = 'return { \n' + await getMapResourceLuaStringFromZipObject(zip) + ' }';
309
- return parse(luaTable).mapResource;
315
+ async getMapResourceObjectFromZipObject(zip) {
316
+ let luaTable = 'return { \n' + await this.getMapResourceLuaStringFromZipObject(zip) + ' }';
317
+ return parse(luaTable).mapResource;
318
+ }
310
319
  }
311
320
 
312
- module.exports = {
313
- injectLuaScriptsInMissionObject: injectLuaScriptsInMissionObject,
314
- getZipObjectFromMizPath: getZipObjectFromMizPath,
315
- mizUpdate: mizUpdate,
316
- mizInjectMissionDataFile: mizInjectMissionDataFile,
317
- injectLuaSettingsFromFolderPathToMizPath: injectLuaSettingsFromFolderPathToMizPath,
318
- injectLuaSettingsFromFolderPathToZipObject: injectLuaSettingsFromFolderPathToZipObject,
319
- mizInjectMapResourceFile: mizInjectMapResourceFile,
320
- injectFileIntoZipObject: injectFileIntoZipObject,
321
- mizUpdateMissionDataFile: mizUpdateMissionDataFile,
322
- mizUpdateMapResourceFile: mizUpdateMapResourceFile,
323
- getMissionLuaStringFromZipObject: getMissionLuaStringFromZipObject,
324
- getMapResourceLuaStringFromZipObject: getMapResourceLuaStringFromZipObject,
325
- mizUpdateRadioPresets: mizUpdateRadioPresets,
326
- mizUpdateSettingsLuaFiles: mizUpdateSettingsLuaFiles,
327
- mizUpdateSoundFolders: mizUpdateSoundFolders,
328
- mizUpdateSingleSoundFolder: mizUpdateSingleSoundFolder,
329
- addFilesToZip: addFilesToZip,
330
- copyMiz: copyMiz,
331
- getMissionObjectFromMizPath: getMissionObjectFromMizPath,
332
- getMissionObjectFromZipObject: getMissionObjectFromZipObject,
333
- getMapResourceObjectFromMizPath: getMapResourceObjectFromMizPath,
334
- getMapResourceObjectFromZipObject: getMapResourceObjectFromZipObject,
335
- injectLuaFilesFromFolderIntoZipObject: injectLuaFilesFromFolderIntoZipObject
336
- };
321
+ module.exports = Mizlib
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jtff/miztemplate-lib",
3
- "version": "3.0.0-rc1",
3
+ "version": "3.0.0-rc10",
4
4
  "description": "JTFF mission template library",
5
5
  "main": "index.js",
6
6
  "files": [
package/scripts/build.js CHANGED
@@ -1,10 +1,9 @@
1
1
  const fs = require("fs");
2
- const mizlib = require("./lib/mizlib.js");
3
2
 
4
3
  function build(jtffci) {
5
4
  fs.mkdirSync(jtffci.config.general.missionFolder, { recursive: true });
6
5
  jtffci.config.missionTemplates.forEach(async missionTemplate => {
7
- await mizlib.mizUpdate([
6
+ await this.mizlib.mizUpdate([
8
7
  missionTemplate.prefix,
9
8
  '_',
10
9
  missionTemplate.theatre,
@@ -1,7 +1,6 @@
1
1
  const fs = require('fs');
2
2
  const path = require("path");
3
3
  const prompt = require('prompt');
4
- const mizlib = require("./lib/mizlib.js");
5
4
 
6
5
  function injectScripts(jtffci, env_mission) {
7
6
  // create mission folder in dist (general) folder
@@ -121,13 +120,13 @@ function injectScripts(jtffci, env_mission) {
121
120
  console.log(' inject_radio_presets scripts: ' + (/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_radio_presets));
122
121
 
123
122
  // open the miz input file for reading
124
- const mizObject = await mizlib.getZipObjectFromMizPath(env_mission);
123
+ const mizObject = await jtffci.mizlib.getZipObjectFromMizPath(env_mission);
125
124
  // inject all the lua files in the src folder into the source zip object
126
- mizlib.injectLuaFilesFromFolderIntoZipObject(mizObject, "src");
125
+ jtffci.mizlib.injectLuaFilesFromFolderIntoZipObject(mizObject, "src");
127
126
  // inject all the lua files in the lib folder into the source zip object
128
- mizlib.injectLuaFilesFromFolderIntoZipObject(mizObject, "lib");
127
+ jtffci.mizlib.injectLuaFilesFromFolderIntoZipObject(mizObject, "lib");
129
128
  // injection des fichiers son Généraux si repertoire resources/sounds/General present
130
- await mizlib.mizUpdateSingleSoundFolder(mizObject, 'General');
129
+ await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'General');
131
130
  // On fait une sauvegarde dans le folder de destination
132
131
  // fs.writeFileSync([
133
132
  // jtffci.config.general.missionFolder,
@@ -146,7 +145,7 @@ function injectScripts(jtffci, env_mission) {
146
145
  // })
147
146
  // );
148
147
  // injection des fichiers son Misc si repertoire resources/sounds/Misc present
149
- await mizlib.mizUpdateSingleSoundFolder(mizObject, 'Misc');
148
+ await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'Misc');
150
149
  // On fait une sauvegarde dans le folder de destination
151
150
  // fs.writeFileSync([
152
151
  // jtffci.config.general.missionFolder,
@@ -164,8 +163,8 @@ function injectScripts(jtffci, env_mission) {
164
163
  // }
165
164
  // })
166
165
  // );
167
- const missionObject = await mizlib.getMissionObjectFromZipObject(mizObject);
168
- let mapResourceObject = await mizlib.getMapResourceObjectFromZipObject(mizObject);
166
+ const missionObject = await jtffci.mizlib.getMissionObjectFromZipObject(mizObject);
167
+ let mapResourceObject = await jtffci.mizlib.getMapResourceObjectFromZipObject(mizObject);
169
168
  let settingsArray = [];
170
169
  if (Array.isArray(mapResourceObject)) {
171
170
  if (mapResourceObject.length === 0) {
@@ -173,7 +172,7 @@ function injectScripts(jtffci, env_mission) {
173
172
  }
174
173
  }
175
174
  // injection SplashDamage
176
- let tuple = mizlib.injectLuaScriptsInMissionObject(
175
+ let tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
177
176
  missionObject['trig'],
178
177
  missionObject['trigrules'],
179
178
  mapResourceObject,
@@ -186,7 +185,7 @@ function injectScripts(jtffci, env_mission) {
186
185
  missionObject['trigrules'] = tuple.trObject;
187
186
  mapResourceObject = tuple.mrObject;
188
187
  // injection Moose
189
- tuple = mizlib.injectLuaScriptsInMissionObject(
188
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
190
189
  missionObject['trig'],
191
190
  missionObject['trigrules'],
192
191
  mapResourceObject,
@@ -199,7 +198,7 @@ function injectScripts(jtffci, env_mission) {
199
198
  missionObject['trigrules'] = tuple.trObject;
200
199
  mapResourceObject = tuple.mrObject;
201
200
  // injection Mist
202
- tuple = mizlib.injectLuaScriptsInMissionObject(
201
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
203
202
  missionObject['trig'],
204
203
  missionObject['trigrules'],
205
204
  mapResourceObject,
@@ -212,7 +211,7 @@ function injectScripts(jtffci, env_mission) {
212
211
  missionObject['trigrules'] = tuple.trObject;
213
212
  mapResourceObject = tuple.mrObject;
214
213
  // injection Skynet
215
- tuple = mizlib.injectLuaScriptsInMissionObject(
214
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
216
215
  missionObject['trig'],
217
216
  missionObject['trigrules'],
218
217
  mapResourceObject,
@@ -233,7 +232,7 @@ function injectScripts(jtffci, env_mission) {
233
232
  file: "settings-global.lua",
234
233
  },
235
234
  );
236
- tuple = mizlib.injectLuaScriptsInMissionObject(
235
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
237
236
  missionObject['trig'],
238
237
  missionObject['trigrules'],
239
238
  mapResourceObject,
@@ -247,7 +246,7 @@ function injectScripts(jtffci, env_mission) {
247
246
  mapResourceObject = tuple.mrObject;
248
247
 
249
248
  // injection de la gestion des Set_Clients
250
- tuple = mizlib.injectLuaScriptsInMissionObject(
249
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
251
250
  missionObject['trig'],
252
251
  missionObject['trigrules'],
253
252
  mapResourceObject,
@@ -271,7 +270,7 @@ function injectScripts(jtffci, env_mission) {
271
270
  objectName: "OnDemandTankersConfig"
272
271
  },
273
272
  );
274
- tuple = mizlib.injectLuaScriptsInMissionObject(
273
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
275
274
  missionObject['trig'],
276
275
  missionObject['trigrules'],
277
276
  mapResourceObject,
@@ -286,7 +285,7 @@ function injectScripts(jtffci, env_mission) {
286
285
  }
287
286
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_airboss)) {
288
287
  // injection des fichiers son Airboss
289
- // await mizlib.mizUpdateSingleSoundFolder(mizObject, 'AIRBOSS');
288
+ // await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'AIRBOSS');
290
289
  settingsArray.push(
291
290
  {
292
291
  file: "settings-airboss.lua",
@@ -297,7 +296,7 @@ function injectScripts(jtffci, env_mission) {
297
296
  objectName: "PedrosConfig"
298
297
  },
299
298
  );
300
- tuple = mizlib.injectLuaScriptsInMissionObject(
299
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
301
300
  missionObject['trig'],
302
301
  missionObject['trigrules'],
303
302
  mapResourceObject,
@@ -317,7 +316,7 @@ function injectScripts(jtffci, env_mission) {
317
316
  objectName: "BeaconsConfig"
318
317
  },
319
318
  );
320
- tuple = mizlib.injectLuaScriptsInMissionObject(
319
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
321
320
  missionObject['trig'],
322
321
  missionObject['trigrules'],
323
322
  mapResourceObject,
@@ -341,7 +340,7 @@ function injectScripts(jtffci, env_mission) {
341
340
  objectName: "AwacsOnDemandConfig"
342
341
  },
343
342
  );
344
- tuple = mizlib.injectLuaScriptsInMissionObject(
343
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
345
344
  missionObject['trig'],
346
345
  missionObject['trigrules'],
347
346
  mapResourceObject,
@@ -356,14 +355,14 @@ function injectScripts(jtffci, env_mission) {
356
355
  }
357
356
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_atis)) {
358
357
  // injection des fichiers son ATIS
359
- // await mizlib.mizUpdateSingleSoundFolder(mizObject, 'ATIS');
358
+ // await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'ATIS');
360
359
  settingsArray.push(
361
360
  {
362
361
  file: "settings-atis.lua",
363
362
  objectName: "AtisConfig"
364
363
  },
365
364
  );
366
- tuple = mizlib.injectLuaScriptsInMissionObject(
365
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
367
366
  missionObject['trig'],
368
367
  missionObject['trigrules'],
369
368
  mapResourceObject,
@@ -399,7 +398,7 @@ function injectScripts(jtffci, env_mission) {
399
398
  objectName: "InterceptConfig"
400
399
  },
401
400
  );
402
- tuple = mizlib.injectLuaScriptsInMissionObject(
401
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
403
402
  missionObject['trig'],
404
403
  missionObject['trigrules'],
405
404
  mapResourceObject,
@@ -414,14 +413,14 @@ function injectScripts(jtffci, env_mission) {
414
413
  }
415
414
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_Logistics)) {
416
415
  // injection des fichiers son CTLD
417
- await mizlib.mizUpdateSingleSoundFolder(mizObject, 'CTLD');
416
+ await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'CTLD');
418
417
  settingsArray.push(
419
418
  {
420
419
  file: "settings-logistics.lua",
421
420
  objectName: "CTLDConfig"
422
421
  },
423
422
  );
424
- tuple = mizlib.injectLuaScriptsInMissionObject(
423
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
425
424
  missionObject['trig'],
426
425
  missionObject['trigrules'],
427
426
  mapResourceObject,
@@ -436,7 +435,7 @@ function injectScripts(jtffci, env_mission) {
436
435
  }
437
436
  if ((/^y\b|o\b|yes\b|oui\b/i).test(prompt_result.inject_A2G)) {
438
437
  // injection des fichiers son Range
439
- // await mizlib.mizUpdateSingleSoundFolder(mizObject, 'RANGE');
438
+ // await jtffci.mizlib.mizUpdateSingleSoundFolder(mizObject, 'RANGE');
440
439
  settingsArray.push(
441
440
  {
442
441
  file: "settings-ranges.lua",
@@ -463,7 +462,7 @@ function injectScripts(jtffci, env_mission) {
463
462
  objectName: "SkynetConfig"
464
463
  },
465
464
  );
466
- tuple = mizlib.injectLuaScriptsInMissionObject(
465
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
467
466
  missionObject['trig'],
468
467
  missionObject['trigrules'],
469
468
  mapResourceObject,
@@ -485,7 +484,7 @@ function injectScripts(jtffci, env_mission) {
485
484
  // "/src/200-mission.lua"
486
485
  // ].join("")
487
486
  // );
488
- // const zip = await mizlib.getZipObjectFromMizPath([
487
+ // const zip = await jtffci.mizlib.getZipObjectFromMizPath([
489
488
  // jtffci.config.general.missionFolder,
490
489
  // "/",
491
490
  // path.parse(env_mission).name,
@@ -493,7 +492,7 @@ function injectScripts(jtffci, env_mission) {
493
492
  // path.basename(env_mission)
494
493
  // ].join(""));
495
494
  //
496
- // mizlib.injectFileIntoZipObject(zip, [
495
+ // jtffci.mizlib.injectFileIntoZipObject(zip, [
497
496
  // jtffci.config.general.missionFolder,
498
497
  // "/",
499
498
  // path.parse(env_mission).name,
@@ -516,7 +515,7 @@ function injectScripts(jtffci, env_mission) {
516
515
  // path.basename(env_mission)
517
516
  // ].join(""),
518
517
  // inputZip);
519
- tuple = mizlib.injectLuaScriptsInMissionObject(
518
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
520
519
  missionObject['trig'],
521
520
  missionObject['trigrules'],
522
521
  mapResourceObject,
@@ -538,7 +537,7 @@ function injectScripts(jtffci, env_mission) {
538
537
  "/",
539
538
  path.basename(env_mission)
540
539
  ].join("") + ": injecting radio presets declared in resources/radios/" + path.parse(env_mission).name);
541
- await mizlib.mizUpdateRadioPresets(mizObject, 'resources/radios/' + path.parse(env_mission).name);
540
+ await jtffci.mizlib.mizUpdateRadioPresets(mizObject, 'resources/radios/' + path.parse(env_mission).name);
542
541
  }
543
542
  //injection du trigger des settings
544
543
  for (let settingsObject of settingsArray) {
@@ -556,7 +555,7 @@ function injectScripts(jtffci, env_mission) {
556
555
  ].join("")
557
556
  );
558
557
  }
559
- await mizlib.injectLuaSettingsFromFolderPathToZipObject(mizObject,
558
+ await jtffci.mizlib.injectLuaSettingsFromFolderPathToZipObject(mizObject,
560
559
  [
561
560
  jtffci.config.general.missionFolder,
562
561
  "/",
@@ -565,7 +564,7 @@ function injectScripts(jtffci, env_mission) {
565
564
  ].join("")
566
565
  );
567
566
  if (settingsArray.length > 0) {
568
- tuple = mizlib.injectLuaScriptsInMissionObject(
567
+ tuple = jtffci.mizlib.injectLuaScriptsInMissionObject(
569
568
  missionObject['trig'],
570
569
  missionObject['trigrules'],
571
570
  mapResourceObject,
@@ -579,7 +578,7 @@ function injectScripts(jtffci, env_mission) {
579
578
  mapResourceObject = tuple.mrObject;
580
579
  }
581
580
  // Sauvegarde de la mission avec scripts injectés
582
- await mizlib.mizInjectMissionDataFile(
581
+ await jtffci.mizlib.mizInjectMissionDataFile(
583
582
  [
584
583
  jtffci.config.general.missionFolder,
585
584
  "/",
@@ -589,7 +588,7 @@ function injectScripts(jtffci, env_mission) {
589
588
  ].join(""),
590
589
  { mission: missionObject }
591
590
  );
592
- await mizlib.mizInjectMapResourceFile(
591
+ await jtffci.mizlib.mizInjectMapResourceFile(
593
592
  [
594
593
  jtffci.config.general.missionFolder,
595
594
  "/",
@@ -3,7 +3,7 @@ const fs = require("fs");
3
3
  function templateUpdate(jtffci) {
4
4
  fs.mkdirSync(jtffci.config.general.missionFolder, { recursive: true });
5
5
  jtffci.config.missionTemplates.map(async missionTemplate => {
6
- await mizlib.mizUpdate([
6
+ await this.mizlib.mizUpdate([
7
7
  missionTemplate.prefix,
8
8
  '_',
9
9
  missionTemplate.theatre,