@xuda.io/runtime-bundle
Version:
The Xuda Runtime Bundle refers to a collection of scripts and libraries packaged together to provide the necessary runtime environment for executing plugins or components in the Xuda platform.
106 lines (85 loc) • 2.85 kB
JavaScript
const new_node_id = (type, app_id) => {
const abbreviate = (word) => {
if (word.length <= 3) {
return word;
}
// Remove vowels except the first letter
let abbreviation = word[0];
const vowels = 'aeiou';
for (let i = 1; i < word.length && abbreviation.length < 3; i++) {
if (!vowels.includes(word[i].toLowerCase())) {
abbreviation += word[i];
}
}
// If the abbreviation is still less than 3 letters, pad it with the remaining letters
if (abbreviation.length < 3) {
abbreviation = word.substring(0, 3);
}
return abbreviation;
};
var last12uuid = crypto.randomUUID().split('-')[4];
if (type) {
var menuAbbreviated = abbreviate(type.replaceAll('_', ''));
return `${app_id.substr(app_id.length - 3)}_${menuAbbreviated}_${last12uuid}`;
}
return app_id.substr(app_id.length - 3) + '_' + last12uuid;
};
export const createDoc = function ({ _id, uid, menuType, checkedInUserName, app_id, parentId, properties, studio_meta = {}, minimal = false } = {}) {
if (!_id) {
_id = new_node_id(menuType, app_id);
}
var doc = {
_id,
stat: 3,
docType: 'studio',
docDate: Date.now(),
ts: Date.now(),
order_ts: Date.now(),
studio_meta: {
...{
created: Date.now(),
createdByUid: uid,
checkedInUserId: uid,
checkedInUserName,
parentId: parentId || menuType === 'globals' ? 'globals' : menuType === 'table' ? 'database' : menuType === 'route' ? 'routes' : 'programs',
},
...studio_meta,
},
properties: properties || {},
};
if (minimal) return doc;
if (menuType) {
switch (menuType) {
case 'table':
if (!doc.tableIndexes) doc.tableIndexes = [];
if (!doc.tableFields) doc.tableFields = [];
break;
case 'alert':
if (!doc.alertData) doc.alertData = {};
break;
case 'javascript':
if (!doc.scriptData) doc.scriptData = {};
break;
case 'folder':
break;
case 'route':
if (!doc.routeMenu) doc.routeMenu = {};
break;
case 'api':
if (!doc.scriptData) doc.scriptData = {};
case 'component':
if (!doc.progUi) doc.progUi = [{ id: 'root', type: 'element', tagName: doc?.properties?.renderType !== 'form' ? 'xu-multi-view' : 'xu-single-view', attributes: {}, children: [] }];
default:
//get_data, set_data, batch
if (!doc.progDataSource)
doc.progDataSource = {
dataSourceType: '',
};
if (!doc.progFields) doc.progFields = [];
if (!doc.progEvents) doc.progEvents = [];
break;
}
}
return doc;
};
export const valid_menuType = ['globals', 'table', 'get_data', 'set_data', 'batch', 'alert', 'javascript', 'folder', 'route', 'api', 'component'];