Initial Commit ...
This commit is contained in:
@@ -0,0 +1,353 @@
|
||||
//
|
||||
//#region Imports ...
|
||||
const XFileTools = require('../tools/x-file.tools');
|
||||
const XValueTools = require('../tools/x-value.tools');
|
||||
const XBaseDescriptor = require('./x-base.descriptor');
|
||||
const XEnumDescriptor = require('./x-enum.descriptor');
|
||||
const XTypeDescriptor = require('./x-type.descriptor');
|
||||
const XClassDescriptor = require('./x-class.descriptor');
|
||||
const XConstDescriptor = require('./x-const.descriptor');
|
||||
const XImportDescriptor = require('./x-import.descriptor');
|
||||
const XExportDescriptor = require('./x-export.descriptor');
|
||||
const XInterfaceDescriptor = require('./x-interface.descriptor');
|
||||
//#endregion
|
||||
|
||||
/**
|
||||
* check an object instance is XFileDescriptor or not ...
|
||||
*
|
||||
* @param {any} object proposed object to check ...
|
||||
* @returns
|
||||
*/
|
||||
function isDescriptor(object) {
|
||||
//
|
||||
if (!object) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
let result = false;
|
||||
result =
|
||||
Array.isArray(object.types) &&
|
||||
object.hasOwnProperty('types') &&
|
||||
//
|
||||
Array.isArray(object.enums) &&
|
||||
object.hasOwnProperty('enums') &&
|
||||
//
|
||||
Array.isArray(object.consts) &&
|
||||
object.hasOwnProperty('consts') &&
|
||||
//
|
||||
Array.isArray(object.classes) &&
|
||||
object.hasOwnProperty('classes') &&
|
||||
//
|
||||
Array.isArray(object.imports) &&
|
||||
object.hasOwnProperty('imports') &&
|
||||
//
|
||||
Array.isArray(object.exports) &&
|
||||
object.hasOwnProperty('exports') &&
|
||||
//
|
||||
Array.isArray(object.interfaces) &&
|
||||
object.hasOwnProperty('interfaces');
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* retrieve base or filled XFileDescriptor object instance ...
|
||||
*
|
||||
* @param {any} value a value provider object ...
|
||||
* @returns an instance of XFileDescriptor object ...
|
||||
*/
|
||||
function createDescriptor(value) {
|
||||
//
|
||||
let result = {
|
||||
types: [XTypeDescriptor.createDescriptor()],
|
||||
enums: [XEnumDescriptor.createDescriptor()],
|
||||
consts: [XConstDescriptor.createDescriptor()],
|
||||
classes: [XClassDescriptor.createDescriptor()],
|
||||
imports: [XImportDescriptor.createDescriptor()],
|
||||
exports: [XExportDescriptor.createDescriptor()],
|
||||
interfaces: [XInterfaceDescriptor.createDescriptor()],
|
||||
};
|
||||
|
||||
//
|
||||
result.types.pop();
|
||||
result.enums.pop();
|
||||
result.consts.pop();
|
||||
result.classes.pop();
|
||||
result.imports.pop();
|
||||
result.exports.pop();
|
||||
result.interfaces.pop();
|
||||
|
||||
//
|
||||
//#region Apply Value ...
|
||||
if (value) {
|
||||
//
|
||||
//#region types ...
|
||||
if (XValueTools.hasChildArray(value.types)) {
|
||||
result.types = [
|
||||
...value.types
|
||||
];
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region enums ...
|
||||
if (XValueTools.hasChildArray(value.enums)) {
|
||||
result.enums = [
|
||||
...value.enums
|
||||
];
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region consts ...
|
||||
if (XValueTools.hasChildArray(value.consts)) {
|
||||
result.consts = [
|
||||
...value.consts
|
||||
];
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region classes ...
|
||||
if (XValueTools.hasChildArray(value.classes)) {
|
||||
result.classes = [
|
||||
...value.classes
|
||||
];
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region imports ...
|
||||
if (XValueTools.hasChildArray(value.imports)) {
|
||||
result.imports = [
|
||||
...value.imports
|
||||
];
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region exports ...
|
||||
if (XValueTools.hasChildArray(value.exports)) {
|
||||
result.exports = [
|
||||
...value.exports
|
||||
];
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region interfaces ...
|
||||
if (XValueTools.hasChildArray(value.interfaces)) {
|
||||
result.interfaces = [
|
||||
...value.interfaces
|
||||
];
|
||||
}
|
||||
//#endregion
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* converts an instance of Descriptor to Expression ...
|
||||
*
|
||||
* @param descriptor an instance of XFileDescriptor ...
|
||||
* @returns creator string ...
|
||||
*/
|
||||
function toExpression(descriptor = createDescriptor()) {
|
||||
//
|
||||
let result = '';
|
||||
|
||||
//
|
||||
// Validate Arg ...
|
||||
if (!isDescriptor(descriptor)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
//#region Imports ...
|
||||
if (XValueTools.hasChildArray(descriptor.imports)) {
|
||||
//
|
||||
const expression = descriptor.imports
|
||||
.map(d => XImportDescriptor
|
||||
.toExpression(d)
|
||||
).join('\n');
|
||||
|
||||
//
|
||||
result += expression + '\n\n';
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region Enums ...
|
||||
if (XValueTools.hasChildArray(descriptor.enums)) {
|
||||
//
|
||||
const expression = descriptor.enums
|
||||
.map(d => XEnumDescriptor
|
||||
.toExpression(d)
|
||||
).join('\n');
|
||||
|
||||
//
|
||||
result += expression + '\n\n';
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region Types ...
|
||||
if (XValueTools.hasChildArray(descriptor.types)) {
|
||||
//
|
||||
const expression = descriptor.types
|
||||
.map(d => XTypeDescriptor
|
||||
.toExpression(d)
|
||||
).join('\n');
|
||||
|
||||
//
|
||||
result += expression + '\n\n';
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region Interfaces ...
|
||||
if (XValueTools.hasChildArray(descriptor.interfaces)) {
|
||||
//
|
||||
const expression = descriptor.interfaces
|
||||
.map(d => XInterfaceDescriptor
|
||||
.toExpression(d)
|
||||
).join('\n');
|
||||
|
||||
//
|
||||
result += expression + '\n\n';
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region Consts ...
|
||||
if (XValueTools.hasChildArray(descriptor.consts)) {
|
||||
//
|
||||
const expression = descriptor.consts
|
||||
.map(d => XConstDescriptor
|
||||
.toExpression(d)
|
||||
).join('\n');
|
||||
|
||||
//
|
||||
result += expression + '\n\n';
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region Classes ...
|
||||
if (XValueTools.hasChildArray(descriptor.classes)) {
|
||||
//
|
||||
const expression = descriptor.classes
|
||||
.map(d => XClassDescriptor
|
||||
.toExpression(d)
|
||||
).join('\n');
|
||||
|
||||
//
|
||||
result += expression + '\n\n';
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
//#region Exports ...
|
||||
if (XValueTools.hasChildArray(descriptor.exports)) {
|
||||
//
|
||||
const expression = descriptor.exports
|
||||
.map(d => XExportDescriptor
|
||||
.toExpression(d)
|
||||
).join('\n');
|
||||
|
||||
//
|
||||
result += expression + '\n\n';
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//
|
||||
if (XValueTools.endsWidth('\n', result)) {
|
||||
result = result.substring(0, result.length - 1);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract all exists XFileDescriptors ...
|
||||
*
|
||||
* @param {string} file a file path ...
|
||||
* @returns a collection of XFileDescriptors ...
|
||||
*/
|
||||
async function extractDescriptor(file = '') {
|
||||
//
|
||||
let result = createDescriptor();
|
||||
|
||||
//
|
||||
if (!XFileTools.isFileExists(file)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
//
|
||||
const fileContent = await XFileTools.readFile(file);
|
||||
if (!XValueTools.isValidArg(fileContent)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
//
|
||||
result = extractDescriptorFromContent(fileContent);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract all exists XFileDescriptors ...
|
||||
*
|
||||
* @param {string} content a file content ...
|
||||
* @returns a collection of XFileDescriptors ...
|
||||
*/
|
||||
function extractDescriptorFromContent(content = '') {
|
||||
//
|
||||
// Prepare result ...
|
||||
let result = createDescriptor();
|
||||
|
||||
//
|
||||
// Validate Args ...
|
||||
if (!XValueTools.isValidArg(content)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
//
|
||||
const types = XTypeDescriptor.extractDescriptorsFromContent(content);
|
||||
const enums = XEnumDescriptor.extractDescriptorsFromContent(content);
|
||||
const consts = XConstDescriptor.extractDescriptorsFromContent(content);
|
||||
const classes = XClassDescriptor.extractDescriptorsFromContent(content);
|
||||
const exports = XExportDescriptor.extractDescriptorsFromContent(content);
|
||||
const imports = XImportDescriptor.extractDescriptorsFromContent(content);
|
||||
const interfaces = XInterfaceDescriptor.extractDescriptorsFromContent(content);
|
||||
|
||||
//
|
||||
result = {
|
||||
types,
|
||||
enums,
|
||||
consts,
|
||||
imports,
|
||||
exports,
|
||||
classes,
|
||||
interfaces,
|
||||
};
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Module Exports ...
|
||||
module.exports = {
|
||||
//
|
||||
isDescriptor,
|
||||
toExpression,
|
||||
createDescriptor,
|
||||
extractDescriptor,
|
||||
extractDescriptorFromContent,
|
||||
}
|
||||
Reference in New Issue
Block a user