From d56ff9d6d8eb3f26bb5d847d851c24e7f8dd07f3 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:19:09 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/top/jamlib.jsi | 90 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 js/top/jamlib.jsi diff --git a/js/top/jamlib.jsi b/js/top/jamlib.jsi new file mode 100644 index 0000000..b9ebdf5 --- /dev/null +++ b/js/top/jamlib.jsi @@ -0,0 +1,90 @@ +use jam/aios as AI +use jam/chan as CH +use jam/mobi as MO +use jam/node as NO +use jam/ts as TS + +class jam = { + node: object, + world: object, + run: boolean, + options: object, + + syntax: object { + find: function (@root,@typ,@name), + location: function (elem,short) -> string, + name: function (elem) -> string, + offset: number + }, + addClass: method (@templates), + addNode: method (nodeDesc) + with nodeDesc: {x,y,id}, + addNodes: method (@nodes) -> AI.id [], + analyze: method (@ac,@options) -> {report:string,interface}, + analyzeSyntax: private method (Esprima.syntax,options:object), + connectNodes: method (@connections), + connectTo: method (to:string "url>|",nodeid?:AI.id), + connected: method (dir:MO.dir,nodeid?:AI.id) -> none|boolean|string|string [], + compileClass: method (name:string,constructor:function,@options), + createAgent: method (ac:string,args:[]|{},level:number,className:string) -> AI.id, + createAgentOn: method (nodeid:AI.id,ac:string,args:[]|{},level:number,className:string) -> AI.id, + createPort: method (dir:MO.dir,@options,@nodeid) -> CH.channel, + disconnect: method (to:MO.dir,nodeid?:AI.id), + emit: method(@event,@arg1,..), + // Execute an agent snapshot delivered in JSON+ text format + execute: method (data:string,file?:string), + executeOn: method (data:string,node:number|string,file?:string), + extend: method (level:number|number[],name:string,function,argn?:number|number []), + getNode: method (string|number|object) -> NO.node|undefeined, + getNodeName: method (@nodeNumberorPosition) -> string, + getWorldName : method () -> string, + init: method (callback), + inp: method (TS.pattern) -> TS.tuple|none, + kill: method (AI.id), + lookup: method (dir:MO.dir,callback?:function,nodeid?:AI.id) -> none|boolean|string|string [], + migrate: method (@data), + on: method (event:string,handler:function), + open: method (file:string,@options), + out: method (TS.tuple), + rd: method (TS.pattern) -> TS.tuple, + readClass: method (file:string,@options), + register: function (node:NO.node), + removeNode: method (AI.id), + rm: method (TS.pattern), + saveSnapshot: method (aid:string,file?:string,kill?:boolean) -> string|undefined, + saveSnapshotOn: method (aid:string,node:number|string,file?:string,kill?:boolean) -> string|undefined, + schedule: method (), + setCurrentNode: method (number), + signal: method (to:AI.id,sig:string,arg:*,@broadcast?), + start: method (), + stats: method (@kind) -> object + with @kind={'process'}, + step: method (steps:number,callback:function), + stop: method (), + time: method () -> number, + ts: method (pat:TS.pattern,callback:function) -> TS.pattern, + version: method () -> string +} + +Jam: constructor (options) -> jam + with options : { + connections?, + print?:function (string), + provider:function (TS.pattern) -> TS.tuple|none, + consumer:function (TS.tuple) -> boolean, + @classes?, + id?:AI.id is node identifier, + verbose?:number, + TMO?:number is default cache timeout, + nolimits?:boolean, + nowatch?:boolean, + log?:{} + } + and connections : { + $kind : { + send:function(data:string|buffer,dest:MO.DIR) -> number, + link?:function (MO.DIR) -> boolean + } , .. + } + and $kind = {north,south,west,east,nw,sw,ne,se,up,down,path,dos,ip} +