104 lines
3.8 KiB
JavaScript
104 lines
3.8 KiB
JavaScript
|
'use strict';
|
||
|
// this file is used by controller when build uploads
|
||
|
function stringify(data) {
|
||
|
let obj = data.data;
|
||
|
let id = data.id;
|
||
|
if (data.data.type === 'channel') {
|
||
|
id = id.replace(/\./g, '/').substring('script.js.'.length) + '/_dir.json';
|
||
|
obj = JSON.stringify(obj, null, 2);
|
||
|
} else if (data.data.type === 'script') {
|
||
|
id = id.replace(/\./g, '/').substring('script.js.'.length) + '.json';
|
||
|
if (obj.common && obj.common.source) {
|
||
|
const source = obj.common.source;
|
||
|
if (obj.common.enabled) delete obj.common.enabled;
|
||
|
if (obj.common.engine === 'system.adapter.javascript.0') delete obj.common.engine;
|
||
|
if (obj.common.engineType === 'Javascript/js') delete obj.common.engineType;
|
||
|
delete obj.common.name;
|
||
|
delete obj.common.source;
|
||
|
if (JSON.stringify(obj.common) !== '{}') {
|
||
|
obj = '/* -- do not edit following lines - START --\n' + JSON.stringify(obj.common, null, 2) + '\n' + '-- do not edit previous lines - END --*/\n' + source;
|
||
|
} else {
|
||
|
obj = source;
|
||
|
}
|
||
|
} else {
|
||
|
obj = JSON.stringify(obj, null, 2);
|
||
|
}
|
||
|
} else if (data.data.type === 'script') {
|
||
|
id = id.replace(/\./g, '/').substring('script.js.'.length) + '.json';
|
||
|
obj = JSON.stringify(obj, null, 2);
|
||
|
}
|
||
|
|
||
|
return {id: id, data: obj};
|
||
|
}
|
||
|
|
||
|
function parse(data) {
|
||
|
let obj = data.data;
|
||
|
let id = data.id;
|
||
|
let error;
|
||
|
let name;
|
||
|
if (id[id.length - 1] === '/') id = id.substring(0, id.length - 1);
|
||
|
|
||
|
if (!id.match(/\.json$/)) return null;
|
||
|
|
||
|
if (id.match(/_dir\.json$/)) {
|
||
|
name = id.substring(0, id.length - '/_dir.json'.length).replace(/\//g, '.');
|
||
|
|
||
|
try {
|
||
|
obj = JSON.parse(obj);
|
||
|
} catch (e) {
|
||
|
error = 'Cannot parse object "' + name + '": ' + e;
|
||
|
obj = {
|
||
|
common: {
|
||
|
name: name.split('.').pop()
|
||
|
},
|
||
|
type: 'channel',
|
||
|
_id: 'script.js.' + name
|
||
|
};
|
||
|
}
|
||
|
id = 'script.js.' + name;
|
||
|
} else {
|
||
|
//script
|
||
|
name = id.substring(0, id.length - '.json'.length).replace(/\//g, '.');
|
||
|
let source;
|
||
|
if (obj.match(/^\/\*\s--\sdo\snot/)) {
|
||
|
obj = obj.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
||
|
const lines = obj.split('\n');
|
||
|
let strignObj = '';
|
||
|
let line = 1;
|
||
|
while (line < lines.length) {
|
||
|
if (lines[line].match(/^--\sdo\snot/)) {
|
||
|
break;
|
||
|
}
|
||
|
strignObj += lines[line];
|
||
|
line++;
|
||
|
}
|
||
|
lines.splice(0, line + 1);
|
||
|
source = lines.join('\n');
|
||
|
try {
|
||
|
obj = {};
|
||
|
obj.common = JSON.parse(strignObj);
|
||
|
obj.common.source = source;
|
||
|
} catch (e) {
|
||
|
error = 'Cannot parse object "' + id + '": ' + e;
|
||
|
}
|
||
|
} else {
|
||
|
source = obj;
|
||
|
obj = null;
|
||
|
}
|
||
|
|
||
|
obj = obj || {};
|
||
|
obj.common = obj.common || {};
|
||
|
obj._id = 'script.js.' + name;
|
||
|
obj.type = 'script';
|
||
|
obj.common.name = name.split('.').pop();
|
||
|
obj.common.enabled = (obj.common.enabled === undefined) ? true : obj.common.enabled;
|
||
|
obj.common.engine = obj.common.engine || 'system.adapter.javascript.0';
|
||
|
obj.common.engineType = obj.common.engineType || 'Javascript/js';
|
||
|
obj.common.source = obj.common.source || source;
|
||
|
id = 'script.js.' + name;
|
||
|
}
|
||
|
|
||
|
return {id: id, data: obj, error: error};
|
||
|
}
|
||
|
module.exports.stringify = stringify;
|
||
|
module.exports.parse = parse;
|