1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-15 15:53:55 +00:00

Added ability to export JS modules from agent.

This commit is contained in:
Bryan Roe
2022-10-20 22:27:35 -07:00
parent 2be1bac351
commit 236786bc42
3 changed files with 170 additions and 1 deletions

View File

@@ -131,6 +131,12 @@ char* crashMemory = ILib_POSIX_InstallCrashHandler(argv[0]);
} }
} }
if (argc > 1 && strcmp(argv[1], "-export") == 0 && integratedJavaScriptLen == 0)
{
integratedJavaScript = ILibString_Copy("require('code-utils').expand({embedded: true});process.exit();",0);
integratedJavaScriptLen = (int)strnlen_s(integratedJavaScript, sizeof(ILibScratchPad));
}
if (argc > 2 && strcmp(argv[1], "-exec") == 0 && integratedJavaScriptLen == 0) if (argc > 2 && strcmp(argv[1], "-exec") == 0 && integratedJavaScriptLen == 0)
{ {
integratedJavaScript = ILibString_Copy(argv[2], 0); integratedJavaScript = ILibString_Copy(argv[2], 0);

View File

@@ -69,6 +69,7 @@ limitations under the License.
extern void* _duk_get_first_object(void *ctx); extern void* _duk_get_first_object(void *ctx);
extern void* _duk_get_next_object(void *ctx, void *heapptr); extern void* _duk_get_next_object(void *ctx, void *heapptr);
extern duk_ret_t ModSearchTable_Get(duk_context *ctx, duk_idx_t table, char *key, char *id);
typedef enum ILibDuktape_Console_DestinationFlags typedef enum ILibDuktape_Console_DestinationFlags
@@ -2679,7 +2680,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx)
// }} END OF AUTO-GENERATED BODY // }} END OF AUTO-GENERATED BODY
duk_peval_string_noresult(ctx, "Object.defineProperty(this, 'wget', {get: function() { return(require('wget'));}});"); duk_peval_string_noresult(ctx, "Object.defineProperty(this, 'wget', {get: function() { return(require('wget'));}});");
duk_peval_string_noresult(ctx, "Object.defineProperty(process, 'arch', {get: function() {return( require('os').arch());}});"); duk_peval_string_noresult(ctx, "Object.defineProperty(process, 'arch', {get: function() {return( require('os').arch());}});");
duk_peval_string_noresult(ctx, "addCompressedModule('code-utils', Buffer.from('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', 'base64'), '2022-10-19T23:17:33.000-07:00');"); duk_peval_string_noresult(ctx, "addCompressedModule('code-utils', Buffer.from('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', 'base64'), '2022-10-20T16:36:15.000-07:00');");
} }
@@ -3607,6 +3608,27 @@ duk_ret_t ILibDuktape_Polyfills_resolve(duk_context *ctx)
ILibDuktape_CreateReadonlyProperty_SetEnumerable(ctx, "_integers", 0); // [ret] ILibDuktape_CreateReadonlyProperty_SetEnumerable(ctx, "_integers", 0); // [ret]
return(1); return(1);
} }
duk_ret_t ILibDuktape_Polyfills_getModules(duk_context *ctx)
{
char *id;
duk_idx_t top;
duk_push_heap_stash(ctx); // [stash]
duk_get_prop_string(ctx, -1, "ModSearchTable"); // [stash][table]
duk_enum(ctx, -1, DUK_ENUM_OWN_PROPERTIES_ONLY); // [stash][table][enum]
duk_push_array(ctx); // [stash][table][enum][array]
top = duk_get_top(ctx);
while (duk_next(ctx, -2, 0)) // [stash][table][enum][array][key]
{
id = (char*)duk_to_string(ctx, -1);
if (ModSearchTable_Get(ctx, -4, "\xFF_Modules_File", id) > 0) // [stash][table][enum][array][key][value]
{
duk_pop(ctx); // [stash][table][enum][array][key]
duk_array_push(ctx, -2); // [stash][table][enum][array]
}
duk_set_top(ctx, top);
}
return(1);
}
void ILibDuktape_Polyfills_Init(duk_context *ctx) void ILibDuktape_Polyfills_Init(duk_context *ctx)
{ {
ILibDuktape_ModSearch_AddHandler(ctx, "queue", ILibDuktape_Queue_Push); ILibDuktape_ModSearch_AddHandler(ctx, "queue", ILibDuktape_Queue_Push);
@@ -3645,6 +3667,7 @@ void ILibDuktape_Polyfills_Init(duk_context *ctx)
ILibDuktape_CreateInstanceMethod(ctx, "addModuleObject", ILibDuktape_Polyfills_addModuleObject, 2); ILibDuktape_CreateInstanceMethod(ctx, "addModuleObject", ILibDuktape_Polyfills_addModuleObject, 2);
ILibDuktape_CreateInstanceMethod(ctx, "addModule", ILibDuktape_Polyfills_addModule, DUK_VARARGS); ILibDuktape_CreateInstanceMethod(ctx, "addModule", ILibDuktape_Polyfills_addModule, DUK_VARARGS);
ILibDuktape_CreateInstanceMethod(ctx, "addCompressedModule", ILibDuktape_Polyfills_addCompressedModule, DUK_VARARGS); ILibDuktape_CreateInstanceMethod(ctx, "addCompressedModule", ILibDuktape_Polyfills_addCompressedModule, DUK_VARARGS);
ILibDuktape_CreateInstanceMethod(ctx, "getModules", ILibDuktape_Polyfills_getModules, 0);
ILibDuktape_CreateInstanceMethod(ctx, "getJSModule", ILibDuktape_Polyfills_getJSModule, 1); ILibDuktape_CreateInstanceMethod(ctx, "getJSModule", ILibDuktape_Polyfills_getJSModule, 1);
ILibDuktape_CreateInstanceMethod(ctx, "getJSModuleDate", ILibDuktape_Polyfills_getJSModuleDate, 1); ILibDuktape_CreateInstanceMethod(ctx, "getJSModuleDate", ILibDuktape_Polyfills_getJSModuleDate, 1);
ILibDuktape_CreateInstanceMethod(ctx, "_debugHang", ILibDuktape_Polyfills_debugHang, DUK_VARARGS); ILibDuktape_CreateInstanceMethod(ctx, "_debugHang", ILibDuktape_Polyfills_debugHang, DUK_VARARGS);

View File

@@ -20,6 +20,144 @@ limitations under the License.
// to be able to embed and extact JavaScript modules from native C code on the fly. // to be able to embed and extact JavaScript modules from native C code on the fly.
// //
try
{
// This peroperty is a polyfill for an Array, to fetch the specified element if it exists, removing the surrounding quotes if they are there
Object.defineProperty(Array.prototype, 'getParameterEx',
{
value: function (name, defaultValue)
{
var i, ret;
for (i = 0; i < this.length; ++i)
{
if (this[i].startsWith(name + '='))
{
ret = this[i].substring(name.length + 1);
if (ret.startsWith('"')) { ret = ret.substring(1, ret.length - 1); }
return (ret);
}
}
return (defaultValue);
}
});
// This property is a polyfill for an Array, to fetch the specified element if it exists
Object.defineProperty(Array.prototype, 'getParameter',
{
value: function (name, defaultValue)
{
return (this.getParameterEx('--' + name, defaultValue));
}
});
}
catch (x)
{ }
try
{
// This property is a polyfill for an Array, to fetch the index of the specified element, if it exists
Object.defineProperty(Array.prototype, 'getParameterIndex',
{
value: function (name)
{
var i;
for (i = 0; i < this.length; ++i)
{
if (this[i].startsWith('--' + name + '='))
{
return (i);
}
}
return (-1);
}
});
}
catch (x)
{ }
try
{
// This property is a polyfill for an Array, to remove the specified element, if it exists
Object.defineProperty(Array.prototype, 'deleteParameter',
{
value: function (name)
{
var i = this.getParameterIndex(name);
if (i >= 0)
{
this.splice(i, 1);
}
}
});
}
catch (x)
{ }
try
{
// This property is a polyfill for an Array, to to fetch the value YY of an element XX in the format --XX=YY, if it exists
Object.defineProperty(Array.prototype, 'getParameterValue',
{
value: function (i)
{
var ret = this[i].substring(this[i].indexOf('=') + 1);
if (ret.startsWith('"')) { ret = ret.substring(1, ret.length - 1); }
return (ret);
}
});
}
catch (x)
{ }
//
// This function will export the JavaScript modules that have been embedded/compiled into the agent
//
function expand2(options)
{
// Check the command line parameters to set some of the options
var cmdline_expandedPath = process.argv.getParameter('expandedPath', 'modules_expanded');
var cmdline_filePath = process.argv.getParameter('filePath', null);
options.expandedPath = cmdline_expandedPath;
if (cmdline_filePath != null) { options.filePath = cmdline_filePath; }
if (cmdline_filePath != null)
{
// If a filepath was specified, then rerun this thru expand(), so that it can read from the specified file, instead of exporting from what was compiled in the agent
options.embedded = false;
console.log('Exporting modules from ' + cmdline_filePath + ', into ' + options.expandedPath + ':\n');
return (expand(options));
}
console.log('Exporting modules from Agent, into ' + options.expandedPath + ':\n');
var modulenames = getModules();
var i;
options.modules = [];
for (i = 0; i < modulenames.length; ++i)
{
try
{
options.modules.push({ name: modulenames[i], data: getJSModule(modulenames[i]) });
}
catch(x)
{
console.log(x);
}
}
writeExpandedModules(options);
}
// //
// This function will read the specified C file, and decompress(inflate)/extract all the embedded JavaScript modules, // This function will read the specified C file, and decompress(inflate)/extract all the embedded JavaScript modules,
// and save them to the specified path // and save them to the specified path
@@ -30,6 +168,8 @@ limitations under the License.
function expand(options) function expand(options)
{ {
if (options == null) { options = {}; } if (options == null) { options = {}; }
if (options.embedded === true) { return(expand2(options)); }
if (options.filePath == null) { options.filePath = 'C:/GITHub//MeshAgent/microscript/ILibDuktape_Polyfills.c'; } if (options.filePath == null) { options.filePath = 'C:/GITHub//MeshAgent/microscript/ILibDuktape_Polyfills.c'; }
var file = require('fs').readFileSync(options.filePath); var file = require('fs').readFileSync(options.filePath);