iobroker.zigbee 1.8.3 → 1.8.5
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/README.md +3 -0
- package/admin/admin.js +512 -493
- package/admin/index_m.html +1171 -1001
- package/admin/tab_m.html +44 -3
- package/docs/de/img/CC2531.png +0 -0
- package/docs/de/img/CC2538_CC2592_PA.PNG +0 -0
- package/docs/de/img/CC2591.png +0 -0
- package/docs/de/img/boards.jpg +0 -0
- package/docs/de/img/cc26x2r.PNG +0 -0
- package/docs/de/img/results.jpg +0 -0
- package/docs/de/img/sku_429478_2.png +0 -0
- package/docs/de/img/sku_429601_2.png +0 -0
- package/docs/de/readme.md +27 -0
- package/docs/en/img/CC2531.png +0 -0
- package/docs/en/img/CC2591.png +0 -0
- package/docs/en/img/deconz.png +0 -0
- package/docs/en/img/sku_429478_2.png +0 -0
- package/docs/en/img/sku_429601_2.png +0 -0
- package/docs/en/readme.md +30 -0
- package/docs/flashing_via_arduino_(en).md +110 -0
- package/docs/ru/img/CC2531.png +0 -0
- package/docs/ru/img/CC2591.png +0 -0
- package/docs/ru/img/sku_429478_2.png +0 -0
- package/docs/ru/img/sku_429601_2.png +0 -0
- package/docs/ru/readme.md +28 -0
- package/docs/tutorial/CC2530_20190425.zip +0 -0
- package/docs/tutorial/CC2530_CC2591_20190515.zip +0 -0
- package/docs/tutorial/CC2530_CC2592_20190515.zip +0 -0
- package/docs/tutorial/CC2531_20190425.zip +0 -0
- package/docs/tutorial/adm5_1.PNG +0 -0
- package/docs/tutorial/adm5_2.PNG +0 -0
- package/docs/tutorial/cat.PNG +0 -0
- package/docs/tutorial/groups-1.png +0 -0
- package/docs/tutorial/groups-2.png +0 -0
- package/docs/tutorial/inst.PNG +0 -0
- package/docs/tutorial/reflash-finish.PNG +0 -0
- package/docs/tutorial/reflash-step0.png +0 -0
- package/docs/tutorial/reflash-step1.PNG +0 -0
- package/docs/tutorial/reflash-step2.PNG +0 -0
- package/docs/tutorial/settings.png +0 -0
- package/docs/tutorial/tab-dev-1.png +0 -0
- package/docs/tutorial/zigbee.png +0 -0
- package/docs/tutorial/zigbee15.png +0 -0
- package/io-package.json +17 -25
- package/lib/backup.js +2 -2
- package/lib/binding.js +32 -37
- package/lib/colors.js +163 -158
- package/lib/commands.js +100 -91
- package/lib/developer.js +9 -12
- package/lib/devices.js +168 -178
- package/lib/exclude.js +30 -36
- package/lib/exposes.js +163 -139
- package/lib/groups.js +81 -83
- package/lib/json.js +5 -6
- package/lib/networkmap.js +2 -3
- package/lib/ota.js +34 -18
- package/lib/rgb.js +114 -72
- package/lib/seriallist.js +25 -20
- package/lib/states.js +511 -526
- package/lib/statescontroller.js +206 -183
- package/lib/utils.js +24 -23
- package/lib/zbBaseExtension.js +4 -4
- package/lib/zbDelayedAction.js +5 -13
- package/lib/zbDeviceAvailability.js +69 -65
- package/lib/zbDeviceConfigure.js +9 -21
- package/lib/zbDeviceEvent.js +3 -4
- package/lib/zigbeecontroller.js +133 -128
- package/main.js +169 -154
- package/package.json +27 -13
- package/.eslintignore +0 -2
- package/.eslintrc.json +0 -37
- package/.github/FUNDING.yml +0 -3
- package/.github/auto-merge.yml +0 -17
- package/.github/dependabot.yml +0 -24
- package/.github/stale.yml +0 -13
- package/.github/workflows/codeql.yml +0 -41
- package/.github/workflows/dependabot-automerge.yml +0 -22
- package/.github/workflows/test-and-release.yml +0 -149
- package/.releaseconfig.json +0 -3
- package/.travis/wiki.sh +0 -28
- package/.travis.yml +0 -41
- package/gulpfile.js +0 -464
- package/test/integration.js +0 -5
- package/test/mocha.custom.opts +0 -2
- package/test/mocha.setup.js +0 -14
- package/test/package.js +0 -5
- package/test/unit.js +0 -5
package/gulpfile.js
DELETED
|
@@ -1,464 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* ioBroker gulpfile
|
|
3
|
-
* Date: 2019-01-22
|
|
4
|
-
*/
|
|
5
|
-
/*eslint no-unused-vars: ['off']*/
|
|
6
|
-
'use strict';
|
|
7
|
-
|
|
8
|
-
const gulp = require('gulp');
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const pkg = require('./package.json');
|
|
11
|
-
const iopackage = require('./io-package.json');
|
|
12
|
-
const version = (pkg && pkg.version) ? pkg.version : iopackage.common.version;
|
|
13
|
-
const fileName = 'words.js';
|
|
14
|
-
const EMPTY = '';
|
|
15
|
-
const translate = require('./lib/tools.js').translateText;
|
|
16
|
-
const languages = {
|
|
17
|
-
en: {},
|
|
18
|
-
de: {},
|
|
19
|
-
ru: {},
|
|
20
|
-
pt: {},
|
|
21
|
-
nl: {},
|
|
22
|
-
fr: {},
|
|
23
|
-
it: {},
|
|
24
|
-
es: {},
|
|
25
|
-
pl: {},
|
|
26
|
-
'zh-cn': {}
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
function lang2data(lang, isFlat) {
|
|
30
|
-
let str = isFlat ? '' : '{\n';
|
|
31
|
-
let count = 0;
|
|
32
|
-
for (const w in lang) {
|
|
33
|
-
if (lang.hasOwnProperty(w)) {
|
|
34
|
-
count++;
|
|
35
|
-
if (isFlat) {
|
|
36
|
-
str += (lang[w] === '' ? (isFlat[w] || w) : lang[w]) + '\n';
|
|
37
|
-
} else {
|
|
38
|
-
const key = ' "' + w.replace(/"/g, '\\"') + '": ';
|
|
39
|
-
str += key + '"' + lang[w].replace(/"/g, '\\"') + '",\n';
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (!count)
|
|
44
|
-
return isFlat ? '' : '{\n}';
|
|
45
|
-
if (isFlat) {
|
|
46
|
-
return str;
|
|
47
|
-
} else {
|
|
48
|
-
return str.substring(0, str.length - 2) + '\n}';
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function readWordJs(src) {
|
|
53
|
-
try {
|
|
54
|
-
let words;
|
|
55
|
-
if (fs.existsSync(src + 'js/' + fileName)) {
|
|
56
|
-
words = fs.readFileSync(src + 'js/' + fileName).toString();
|
|
57
|
-
} else {
|
|
58
|
-
words = fs.readFileSync(src + fileName).toString();
|
|
59
|
-
}
|
|
60
|
-
words = words.substring(words.indexOf('{'), words.length);
|
|
61
|
-
words = words.substring(0, words.lastIndexOf(';'));
|
|
62
|
-
|
|
63
|
-
const resultFunc = new Function('return ' + words + ';');
|
|
64
|
-
|
|
65
|
-
return resultFunc();
|
|
66
|
-
} catch (e) {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function padRight(text, totalLength) {
|
|
72
|
-
return text + (text.length < totalLength ? new Array(totalLength - text.length).join(' ') : '');
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function writeWordJs(data, src) {
|
|
76
|
-
let text = '';
|
|
77
|
-
text += '/*global systemDictionary:true */\n';
|
|
78
|
-
text += '\'use strict\';\n\n';
|
|
79
|
-
text += 'systemDictionary = {\n';
|
|
80
|
-
for (const word in data) {
|
|
81
|
-
if (data.hasOwnProperty(word)) {
|
|
82
|
-
text += ' ' + padRight('"' + word.replace(/"/g, '\\"') + '": {', 50);
|
|
83
|
-
let line = '';
|
|
84
|
-
for (const lang in data[word]) {
|
|
85
|
-
if (data[word].hasOwnProperty(lang)) {
|
|
86
|
-
line += '"' + lang + '": "' + padRight(data[word][lang].replace(/"/g, '\\"') + '",', 50) + ' ';
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
if (line) {
|
|
90
|
-
line = line.trim();
|
|
91
|
-
line = line.substring(0, line.length - 1);
|
|
92
|
-
}
|
|
93
|
-
text += line + '},\n';
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
text += '};';
|
|
97
|
-
if (fs.existsSync(src + 'js/' + fileName)) {
|
|
98
|
-
fs.writeFileSync(src + 'js/' + fileName, text);
|
|
99
|
-
} else {
|
|
100
|
-
fs.writeFileSync(src + '' + fileName, text);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function words2languages(src) {
|
|
105
|
-
const langs = Object.assign({}, languages);
|
|
106
|
-
const data = readWordJs(src);
|
|
107
|
-
if (data) {
|
|
108
|
-
for (const word in data) {
|
|
109
|
-
if (data.hasOwnProperty(word)) {
|
|
110
|
-
for (const lang in data[word]) {
|
|
111
|
-
if (data[word].hasOwnProperty(lang)) {
|
|
112
|
-
langs[lang][word] = data[word][lang];
|
|
113
|
-
// pre-fill all other languages
|
|
114
|
-
for (const j in langs) {
|
|
115
|
-
if (langs.hasOwnProperty(j)) {
|
|
116
|
-
langs[j][word] = langs[j][word] || EMPTY;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (!fs.existsSync(src + 'i18n/')) {
|
|
124
|
-
fs.mkdirSync(src + 'i18n/');
|
|
125
|
-
}
|
|
126
|
-
for (const l in langs) {
|
|
127
|
-
if (!langs.hasOwnProperty(l))
|
|
128
|
-
continue;
|
|
129
|
-
const keys = Object.keys(langs[l]);
|
|
130
|
-
keys.sort();
|
|
131
|
-
const obj = {};
|
|
132
|
-
for (let k = 0; k < keys.length; k++) {
|
|
133
|
-
obj[keys[k]] = langs[l][keys[k]];
|
|
134
|
-
}
|
|
135
|
-
if (!fs.existsSync(src + 'i18n/' + l)) {
|
|
136
|
-
fs.mkdirSync(src + 'i18n/' + l);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
fs.writeFileSync(src + 'i18n/' + l + '/translations.json', lang2data(obj));
|
|
140
|
-
}
|
|
141
|
-
} else {
|
|
142
|
-
console.error('Cannot read or parse ' + fileName);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
function words2languagesFlat(src) {
|
|
147
|
-
const langs = Object.assign({}, languages);
|
|
148
|
-
const data = readWordJs(src);
|
|
149
|
-
if (data) {
|
|
150
|
-
for (const word in data) {
|
|
151
|
-
if (data.hasOwnProperty(word)) {
|
|
152
|
-
for (const lang in data[word]) {
|
|
153
|
-
if (data[word].hasOwnProperty(lang)) {
|
|
154
|
-
langs[lang][word] = data[word][lang];
|
|
155
|
-
// pre-fill all other languages
|
|
156
|
-
for (const j in langs) {
|
|
157
|
-
if (langs.hasOwnProperty(j)) {
|
|
158
|
-
langs[j][word] = langs[j][word] || EMPTY;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
const keys = Object.keys(langs.en);
|
|
166
|
-
keys.sort();
|
|
167
|
-
for (const l in langs) {
|
|
168
|
-
if (!langs.hasOwnProperty(l))
|
|
169
|
-
continue;
|
|
170
|
-
const obj = {};
|
|
171
|
-
for (let k = 0; k < keys.length; k++) {
|
|
172
|
-
obj[keys[k]] = langs[l][keys[k]];
|
|
173
|
-
}
|
|
174
|
-
langs[l] = obj;
|
|
175
|
-
}
|
|
176
|
-
if (!fs.existsSync(src + 'i18n/')) {
|
|
177
|
-
fs.mkdirSync(src + 'i18n/');
|
|
178
|
-
}
|
|
179
|
-
for (const ll in langs) {
|
|
180
|
-
if (!langs.hasOwnProperty(ll))
|
|
181
|
-
continue;
|
|
182
|
-
if (!fs.existsSync(src + 'i18n/' + ll)) {
|
|
183
|
-
fs.mkdirSync(src + 'i18n/' + ll);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
fs.writeFileSync(src + 'i18n/' + ll + '/flat.txt', lang2data(langs[ll], langs.en));
|
|
187
|
-
}
|
|
188
|
-
fs.writeFileSync(src + 'i18n/flat.txt', keys.join('\n'));
|
|
189
|
-
} else {
|
|
190
|
-
console.error('Cannot read or parse ' + fileName);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function languagesFlat2words(src) {
|
|
195
|
-
const dirs = fs.readdirSync(src + 'i18n/');
|
|
196
|
-
const langs = {};
|
|
197
|
-
const bigOne = {};
|
|
198
|
-
const order = Object.keys(languages);
|
|
199
|
-
dirs.sort(function (a, b) {
|
|
200
|
-
const posA = order.indexOf(a);
|
|
201
|
-
const posB = order.indexOf(b);
|
|
202
|
-
if (posA === -1 && posB === -1) {
|
|
203
|
-
if (a > b)
|
|
204
|
-
return 1;
|
|
205
|
-
if (a < b)
|
|
206
|
-
return -1;
|
|
207
|
-
return 0;
|
|
208
|
-
} else if (posA === -1) {
|
|
209
|
-
return -1;
|
|
210
|
-
} else if (posB === -1) {
|
|
211
|
-
return 1;
|
|
212
|
-
} else {
|
|
213
|
-
if (posA > posB)
|
|
214
|
-
return 1;
|
|
215
|
-
if (posA < posB)
|
|
216
|
-
return -1;
|
|
217
|
-
return 0;
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
const keys = fs.readFileSync(src + 'i18n/flat.txt').toString().split('\n');
|
|
221
|
-
|
|
222
|
-
for (let l = 0; l < dirs.length; l++) {
|
|
223
|
-
if (dirs[l] === 'flat.txt')
|
|
224
|
-
continue;
|
|
225
|
-
const lang = dirs[l];
|
|
226
|
-
const values = fs.readFileSync(src + 'i18n/' + lang + '/flat.txt').toString().split('\n');
|
|
227
|
-
langs[lang] = {};
|
|
228
|
-
keys.forEach(function (word, i) {
|
|
229
|
-
langs[lang][word] = values[i];
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
const words = langs[lang];
|
|
233
|
-
for (const word in words) {
|
|
234
|
-
if (words.hasOwnProperty(word)) {
|
|
235
|
-
bigOne[word] = bigOne[word] || {};
|
|
236
|
-
if (words[word] !== EMPTY) {
|
|
237
|
-
bigOne[word][lang] = words[word];
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
// read actual words.js
|
|
243
|
-
const aWords = readWordJs();
|
|
244
|
-
|
|
245
|
-
const temporaryIgnore = ['flat.txt'];
|
|
246
|
-
if (aWords) {
|
|
247
|
-
// Merge words together
|
|
248
|
-
for (const w in aWords) {
|
|
249
|
-
if (aWords.hasOwnProperty(w)) {
|
|
250
|
-
if (!bigOne[w]) {
|
|
251
|
-
console.warn('Take from actual words.js: ' + w);
|
|
252
|
-
bigOne[w] = aWords[w];
|
|
253
|
-
}
|
|
254
|
-
dirs.forEach(function (lang) {
|
|
255
|
-
if (temporaryIgnore.indexOf(lang) !== -1)
|
|
256
|
-
return;
|
|
257
|
-
if (!bigOne[w][lang]) {
|
|
258
|
-
console.warn('Missing "' + lang + '": ' + w);
|
|
259
|
-
}
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
writeWordJs(bigOne, src);
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
function languages2words(src) {
|
|
270
|
-
const dirs = fs.readdirSync(src + 'i18n/');
|
|
271
|
-
const langs = {};
|
|
272
|
-
const bigOne = {};
|
|
273
|
-
const order = Object.keys(languages);
|
|
274
|
-
dirs.sort(function (a, b) {
|
|
275
|
-
const posA = order.indexOf(a);
|
|
276
|
-
const posB = order.indexOf(b);
|
|
277
|
-
if (posA === -1 && posB === -1) {
|
|
278
|
-
if (a > b)
|
|
279
|
-
return 1;
|
|
280
|
-
if (a < b)
|
|
281
|
-
return -1;
|
|
282
|
-
return 0;
|
|
283
|
-
} else if (posA === -1) {
|
|
284
|
-
return -1;
|
|
285
|
-
} else if (posB === -1) {
|
|
286
|
-
return 1;
|
|
287
|
-
} else {
|
|
288
|
-
if (posA > posB)
|
|
289
|
-
return 1;
|
|
290
|
-
if (posA < posB)
|
|
291
|
-
return -1;
|
|
292
|
-
return 0;
|
|
293
|
-
}
|
|
294
|
-
});
|
|
295
|
-
for (let l = 0; l < dirs.length; l++) {
|
|
296
|
-
if (dirs[l] === 'flat.txt')
|
|
297
|
-
continue;
|
|
298
|
-
const lang = dirs[l];
|
|
299
|
-
langs[lang] = fs.readFileSync(src + 'i18n/' + lang + '/translations.json').toString();
|
|
300
|
-
langs[lang] = JSON.parse(langs[lang]);
|
|
301
|
-
const words = langs[lang];
|
|
302
|
-
for (const word in words) {
|
|
303
|
-
if (words.hasOwnProperty(word)) {
|
|
304
|
-
bigOne[word] = bigOne[word] || {};
|
|
305
|
-
if (words[word] !== EMPTY) {
|
|
306
|
-
bigOne[word][lang] = words[word];
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
// read actual words.js
|
|
312
|
-
const aWords = readWordJs();
|
|
313
|
-
|
|
314
|
-
const temporaryIgnore = ['flat.txt'];
|
|
315
|
-
if (aWords) {
|
|
316
|
-
// Merge words together
|
|
317
|
-
for (const w in aWords) {
|
|
318
|
-
if (aWords.hasOwnProperty(w)) {
|
|
319
|
-
if (!bigOne[w]) {
|
|
320
|
-
console.warn('Take from actual words.js: ' + w);
|
|
321
|
-
bigOne[w] = aWords[w];
|
|
322
|
-
}
|
|
323
|
-
dirs.forEach(function (lang) {
|
|
324
|
-
if (temporaryIgnore.indexOf(lang) !== -1)
|
|
325
|
-
return;
|
|
326
|
-
if (!bigOne[w][lang]) {
|
|
327
|
-
console.warn('Missing "' + lang + '": ' + w);
|
|
328
|
-
}
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
writeWordJs(bigOne, src);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
async function translateNotExisting(obj, baseText) {
|
|
339
|
-
let t = obj['en'];
|
|
340
|
-
if (!t) {
|
|
341
|
-
t = baseText;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
if (t) {
|
|
345
|
-
for (const l in languages) {
|
|
346
|
-
if (!obj[l]) {
|
|
347
|
-
obj[l] = await translate(t, l);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
//TASKS
|
|
354
|
-
|
|
355
|
-
gulp.task('adminWords2languages', function (done) {
|
|
356
|
-
words2languages('./admin/');
|
|
357
|
-
done();
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
gulp.task('adminWords2languagesFlat', function (done) {
|
|
361
|
-
words2languagesFlat('./admin/');
|
|
362
|
-
done();
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
gulp.task('adminLanguagesFlat2words', function (done) {
|
|
366
|
-
languagesFlat2words('./admin/');
|
|
367
|
-
done();
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
gulp.task('adminLanguages2words', function (done) {
|
|
371
|
-
languages2words('./admin/');
|
|
372
|
-
done();
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
gulp.task('updatePackages', function (done) {
|
|
376
|
-
iopackage.common.version = pkg.version;
|
|
377
|
-
iopackage.common.news = iopackage.common.news || {};
|
|
378
|
-
if (!iopackage.common.news[pkg.version]) {
|
|
379
|
-
const news = iopackage.common.news;
|
|
380
|
-
const newNews = {};
|
|
381
|
-
|
|
382
|
-
newNews[pkg.version] = {
|
|
383
|
-
en: 'news',
|
|
384
|
-
de: 'neues',
|
|
385
|
-
ru: 'новое',
|
|
386
|
-
pt: 'novidades',
|
|
387
|
-
nl: 'nieuws',
|
|
388
|
-
fr: 'nouvelles',
|
|
389
|
-
it: 'notizie',
|
|
390
|
-
es: 'noticias',
|
|
391
|
-
pl: 'nowości',
|
|
392
|
-
'zh-cn': '新'
|
|
393
|
-
};
|
|
394
|
-
iopackage.common.news = Object.assign(newNews, news);
|
|
395
|
-
}
|
|
396
|
-
fs.writeFileSync('io-package.json', JSON.stringify(iopackage, null, 4));
|
|
397
|
-
done();
|
|
398
|
-
});
|
|
399
|
-
|
|
400
|
-
gulp.task('updateReadme', function (done) {
|
|
401
|
-
const readme = fs.readFileSync('README.md').toString();
|
|
402
|
-
const pos = readme.indexOf('## Changelog\n');
|
|
403
|
-
if (pos !== -1) {
|
|
404
|
-
const readmeStart = readme.substring(0, pos + '## Changelog\n'.length);
|
|
405
|
-
const readmeEnd = readme.substring(pos + '## Changelog\n'.length);
|
|
406
|
-
|
|
407
|
-
if (readme.indexOf(version) === -1) {
|
|
408
|
-
const timestamp = new Date();
|
|
409
|
-
const date = timestamp.getFullYear() + '-' +
|
|
410
|
-
('0' + (timestamp.getMonth() + 1).toString(10)).slice(-2) + '-' +
|
|
411
|
-
('0' + (timestamp.getDate()).toString(10)).slice(-2);
|
|
412
|
-
|
|
413
|
-
let news = '';
|
|
414
|
-
if (iopackage.common.news && iopackage.common.news[pkg.version]) {
|
|
415
|
-
news += '* ' + iopackage.common.news[pkg.version].en;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
fs.writeFileSync('README.md', readmeStart + '### ' + version + ' (' + date + ')\n' + (news ? news + '\n\n' : '\n') + readmeEnd);
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
done();
|
|
422
|
-
});
|
|
423
|
-
|
|
424
|
-
gulp.task('translate', async function (done) {
|
|
425
|
-
if (iopackage && iopackage.common) {
|
|
426
|
-
if (iopackage.common.news) {
|
|
427
|
-
for (const k in iopackage.common.news) {
|
|
428
|
-
const nw = iopackage.common.news[k];
|
|
429
|
-
await translateNotExisting(nw);
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
if (iopackage.common.titleLang) {
|
|
433
|
-
await translateNotExisting(iopackage.common.titleLang, iopackage.common.title);
|
|
434
|
-
}
|
|
435
|
-
if (iopackage.common.desc) {
|
|
436
|
-
await translateNotExisting(iopackage.common.desc);
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
if (fs.existsSync('./admin/i18n/en/translations.json')) {
|
|
440
|
-
const enTranslations = require('./admin/i18n/en/translations.json');
|
|
441
|
-
for (const l in languages) {
|
|
442
|
-
let existing = {};
|
|
443
|
-
if (fs.existsSync('./admin/i18n/' + l + '/translations.json')) {
|
|
444
|
-
existing = require('./admin/i18n/' + l + '/translations.json');
|
|
445
|
-
}
|
|
446
|
-
for (const t in enTranslations) {
|
|
447
|
-
if (!existing[t]) {
|
|
448
|
-
existing[t] = await translate(enTranslations[t], l);
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
if (!fs.existsSync('./admin/i18n/' + l + '/')) {
|
|
452
|
-
fs.mkdirSync('./admin/i18n/' + l + '/');
|
|
453
|
-
}
|
|
454
|
-
fs.writeFileSync('./admin/i18n/' + l + '/translations.json', JSON.stringify(existing, null, 4));
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
}
|
|
459
|
-
fs.writeFileSync('io-package.json', JSON.stringify(iopackage, null, 4));
|
|
460
|
-
});
|
|
461
|
-
|
|
462
|
-
gulp.task('translateAndUpdateWordsJS', gulp.series('translate', 'adminLanguages2words', 'adminWords2languages'));
|
|
463
|
-
|
|
464
|
-
gulp.task('default', gulp.series('updatePackages', 'updateReadme'));
|
package/test/integration.js
DELETED
package/test/mocha.custom.opts
DELETED
package/test/mocha.setup.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// Don't silently swallow unhandled rejections
|
|
2
|
-
process.on('unhandledRejection', (e) => {
|
|
3
|
-
throw e;
|
|
4
|
-
});
|
|
5
|
-
|
|
6
|
-
// enable the should interface with sinon
|
|
7
|
-
// and load chai-as-promised and sinon-chai by default
|
|
8
|
-
const sinonChai = require('sinon-chai');
|
|
9
|
-
const chaiAsPromised = require('chai-as-promised');
|
|
10
|
-
const { should, use } = require('chai');
|
|
11
|
-
|
|
12
|
-
should();
|
|
13
|
-
use(sinonChai);
|
|
14
|
-
use(chaiAsPromised);
|
package/test/package.js
DELETED