From 2f5fc7ac712145f02b9e738174c70b6dec7ea0e4 Mon Sep 17 00:00:00 2001 From: Github Actions for Actionhero Date: Mon, 15 Apr 2024 19:50:01 +0000 Subject: [PATCH] deploy static site @ Mon Apr 15 19:50:01 UTC 2024 --- .nojekyll | 1 + CNAME | 1 + assets/highlight.css | 92 ++ assets/icons.js | 15 + assets/icons.svg | 1 + assets/main.js | 59 + assets/navigation.js | 1 + assets/search.js | 1 + assets/style.css | 1412 +++++++++++++++++ classes/Action-1.html | 28 + classes/ActionProcessor.html | 32 + classes/Api.html | 18 + classes/CLI.html | 22 + classes/Connection.html | 61 + classes/Initializer.html | 18 + classes/Process.html | 29 + classes/Server.html | 295 ++++ classes/Task-1.html | 33 + enums/cache.CacheErrorMessages.html | 3 + favicon.ico | Bin 0 -> 5430 bytes functions/action.addMiddleware.html | 2 + functions/action.run.html | 2 + functions/cache.checkLock.html | 1 + functions/cache.clear.html | 3 + functions/cache.client.html | 1 + functions/cache.destroy.html | 3 + functions/cache.dumpRead.html | 3 + functions/cache.dumpWrite.html | 2 + functions/cache.getKeys.html | 3 + functions/cache.keys.html | 2 + functions/cache.listLength.html | 2 + functions/cache.load.html | 3 + functions/cache.lock.html | 2 + functions/cache.lockName.html | 1 + functions/cache.locks.html | 2 + functions/cache.overrideLockName.html | 1 + functions/cache.pop.html | 3 + functions/cache.push.html | 3 + functions/cache.save.html | 3 + functions/cache.size.html | 2 + functions/cache.unlock.html | 2 + functions/chatRoom.add.html | 2 + functions/chatRoom.addMember.html | 2 + functions/chatRoom.addMiddleware.html | 2 + functions/chatRoom.broadcast.html | 10 + functions/chatRoom.client.html | 1 + functions/chatRoom.destroy.html | 2 + functions/chatRoom.exists.html | 2 + functions/chatRoom.generateMemberDetails.html | 2 + functions/chatRoom.list.html | 2 + functions/chatRoom.removeMember.html | 3 + functions/chatRoom.roomStatus.html | 3 + functions/chatRoom.sanitizeMemberDetails.html | 2 + functions/log.html | 8 + functions/rebuildConfig.html | 2 + functions/redis.doCluster.html | 2 + functions/redis.publish.html | 4 + functions/redis.respondCluster.html | 1 + functions/route.registerRoute.html | 11 + functions/specHelper.buildConnection.html | 2 + functions/specHelper.deleteEnqueuedTasks.html | 2 + functions/specHelper.findEnqueuedTasks.html | 5 + functions/specHelper.getStaticFile.html | 2 + functions/specHelper.runAction.html | 2 + functions/specHelper.runFullTask.html | 3 + functions/specHelper.runTask.html | 3 + functions/task.addMiddleware.html | 1 + functions/task.allDelayed.html | 4 + functions/task.allWorkingOn.html | 3 + functions/task.cleanOldWorkers.html | 6 + functions/task.del.html | 10 + functions/task.delByFunction.html | 13 + functions/task.delDelayed.html | 9 + functions/task.delLock.html | 3 + functions/task.delQueue.html | 3 + functions/task.delayedAt.html | 3 + functions/task.details.html | 3 + functions/task.enqueue.html | 3 + functions/task.enqueueAllRecurrentTasks.html | 3 + functions/task.enqueueAt.html | 10 + functions/task.enqueueIn.html | 11 + functions/task.enqueueRecurrentTask.html | 4 + functions/task.failed.html | 3 + functions/task.failedCount.html | 3 + functions/task.locks.html | 4 + functions/task.queued.html | 9 + functions/task.removeFailed.html | 3 + functions/task.retryAndRemoveFailed.html | 3 + functions/task.scheduledAt.html | 9 + functions/task.stats.html | 3 + functions/task.stopRecurrentTask.html | 3 + functions/task.timestamps.html | 3 + functions/task.workers.html | 4 + functions/task.workingOn.html | 3 + hierarchy.html | 1 + index.html | 104 ++ interfaces/ActionheroConfigInterface.html | 10 + interfaces/Input.html | 6 + interfaces/Inputs.html | 1 + interfaces/action.ActionMiddleware.html | 24 + interfaces/cache.CacheObject.html | 4 + interfaces/cache.CacheOptions.html | 3 + interfaces/chatRoom.ChatMiddleware.html | 16 + interfaces/chatRoom.ChatPubSubMessage.html | 7 + interfaces/redis.PubSubMessage.html | 1 + interfaces/task.TaskMiddleware.html | 18 + modules.html | 38 + modules/action.html | 4 + modules/cache.html | 28 + modules/chatRoom.html | 15 + modules/redis.html | 5 + modules/route.html | 2 + modules/specHelper.html | 8 + modules/task.html | 30 + types/ActionheroLogLevel.html | 1 + types/ExceptionReporter.html | 1 + types/ParamsFrom.html | 1 + types/PluginConfig.html | 1 + types/RouteMethod.html | 1 + types/RouteType.html | 1 + types/RoutesConfig.html | 1 + variables/actionheroVersion.html | 1 + variables/api-1.html | 1 + variables/cache.lockDuration.html | 1 + variables/cache.lockPrefix.html | 1 + variables/cache.lockRetry.html | 1 + variables/cache.redisPrefix.html | 1 + variables/cache.scanCount.html | 1 + variables/config.html | 1 + variables/env.html | 1 + variables/id.html | 1 + variables/loggers.html | 1 + variables/projectRoot.html | 1 + variables/typescript.html | 1 + variables/utils.html | 39 + 135 files changed, 2771 insertions(+) create mode 100644 .nojekyll create mode 100644 CNAME create mode 100644 assets/highlight.css create mode 100644 assets/icons.js create mode 100644 assets/icons.svg create mode 100644 assets/main.js create mode 100644 assets/navigation.js create mode 100644 assets/search.js create mode 100644 assets/style.css create mode 100644 classes/Action-1.html create mode 100644 classes/ActionProcessor.html create mode 100644 classes/Api.html create mode 100644 classes/CLI.html create mode 100644 classes/Connection.html create mode 100644 classes/Initializer.html create mode 100644 classes/Process.html create mode 100644 classes/Server.html create mode 100644 classes/Task-1.html create mode 100644 enums/cache.CacheErrorMessages.html create mode 100755 favicon.ico create mode 100644 functions/action.addMiddleware.html create mode 100644 functions/action.run.html create mode 100644 functions/cache.checkLock.html create mode 100644 functions/cache.clear.html create mode 100644 functions/cache.client.html create mode 100644 functions/cache.destroy.html create mode 100644 functions/cache.dumpRead.html create mode 100644 functions/cache.dumpWrite.html create mode 100644 functions/cache.getKeys.html create mode 100644 functions/cache.keys.html create mode 100644 functions/cache.listLength.html create mode 100644 functions/cache.load.html create mode 100644 functions/cache.lock.html create mode 100644 functions/cache.lockName.html create mode 100644 functions/cache.locks.html create mode 100644 functions/cache.overrideLockName.html create mode 100644 functions/cache.pop.html create mode 100644 functions/cache.push.html create mode 100644 functions/cache.save.html create mode 100644 functions/cache.size.html create mode 100644 functions/cache.unlock.html create mode 100644 functions/chatRoom.add.html create mode 100644 functions/chatRoom.addMember.html create mode 100644 functions/chatRoom.addMiddleware.html create mode 100644 functions/chatRoom.broadcast.html create mode 100644 functions/chatRoom.client.html create mode 100644 functions/chatRoom.destroy.html create mode 100644 functions/chatRoom.exists.html create mode 100644 functions/chatRoom.generateMemberDetails.html create mode 100644 functions/chatRoom.list.html create mode 100644 functions/chatRoom.removeMember.html create mode 100644 functions/chatRoom.roomStatus.html create mode 100644 functions/chatRoom.sanitizeMemberDetails.html create mode 100644 functions/log.html create mode 100644 functions/rebuildConfig.html create mode 100644 functions/redis.doCluster.html create mode 100644 functions/redis.publish.html create mode 100644 functions/redis.respondCluster.html create mode 100644 functions/route.registerRoute.html create mode 100644 functions/specHelper.buildConnection.html create mode 100644 functions/specHelper.deleteEnqueuedTasks.html create mode 100644 functions/specHelper.findEnqueuedTasks.html create mode 100644 functions/specHelper.getStaticFile.html create mode 100644 functions/specHelper.runAction.html create mode 100644 functions/specHelper.runFullTask.html create mode 100644 functions/specHelper.runTask.html create mode 100644 functions/task.addMiddleware.html create mode 100644 functions/task.allDelayed.html create mode 100644 functions/task.allWorkingOn.html create mode 100644 functions/task.cleanOldWorkers.html create mode 100644 functions/task.del.html create mode 100644 functions/task.delByFunction.html create mode 100644 functions/task.delDelayed.html create mode 100644 functions/task.delLock.html create mode 100644 functions/task.delQueue.html create mode 100644 functions/task.delayedAt.html create mode 100644 functions/task.details.html create mode 100644 functions/task.enqueue.html create mode 100644 functions/task.enqueueAllRecurrentTasks.html create mode 100644 functions/task.enqueueAt.html create mode 100644 functions/task.enqueueIn.html create mode 100644 functions/task.enqueueRecurrentTask.html create mode 100644 functions/task.failed.html create mode 100644 functions/task.failedCount.html create mode 100644 functions/task.locks.html create mode 100644 functions/task.queued.html create mode 100644 functions/task.removeFailed.html create mode 100644 functions/task.retryAndRemoveFailed.html create mode 100644 functions/task.scheduledAt.html create mode 100644 functions/task.stats.html create mode 100644 functions/task.stopRecurrentTask.html create mode 100644 functions/task.timestamps.html create mode 100644 functions/task.workers.html create mode 100644 functions/task.workingOn.html create mode 100644 hierarchy.html create mode 100644 index.html create mode 100644 interfaces/ActionheroConfigInterface.html create mode 100644 interfaces/Input.html create mode 100644 interfaces/Inputs.html create mode 100644 interfaces/action.ActionMiddleware.html create mode 100644 interfaces/cache.CacheObject.html create mode 100644 interfaces/cache.CacheOptions.html create mode 100644 interfaces/chatRoom.ChatMiddleware.html create mode 100644 interfaces/chatRoom.ChatPubSubMessage.html create mode 100644 interfaces/redis.PubSubMessage.html create mode 100644 interfaces/task.TaskMiddleware.html create mode 100644 modules.html create mode 100644 modules/action.html create mode 100644 modules/cache.html create mode 100644 modules/chatRoom.html create mode 100644 modules/redis.html create mode 100644 modules/route.html create mode 100644 modules/specHelper.html create mode 100644 modules/task.html create mode 100644 types/ActionheroLogLevel.html create mode 100644 types/ExceptionReporter.html create mode 100644 types/ParamsFrom.html create mode 100644 types/PluginConfig.html create mode 100644 types/RouteMethod.html create mode 100644 types/RouteType.html create mode 100644 types/RoutesConfig.html create mode 100644 variables/actionheroVersion.html create mode 100644 variables/api-1.html create mode 100644 variables/cache.lockDuration.html create mode 100644 variables/cache.lockPrefix.html create mode 100644 variables/cache.lockRetry.html create mode 100644 variables/cache.redisPrefix.html create mode 100644 variables/cache.scanCount.html create mode 100644 variables/config.html create mode 100644 variables/env.html create mode 100644 variables/id.html create mode 100644 variables/loggers.html create mode 100644 variables/projectRoot.html create mode 100644 variables/typescript.html create mode 100644 variables/utils.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e2ac6616ad --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000000..a5f330dade --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.actionherojs.com diff --git a/assets/highlight.css b/assets/highlight.css new file mode 100644 index 0000000000..9452e6aadc --- /dev/null +++ b/assets/highlight.css @@ -0,0 +1,92 @@ +:root { + --light-hl-0: #008000; + --dark-hl-0: #6A9955; + --light-hl-1: #795E26; + --dark-hl-1: #DCDCAA; + --light-hl-2: #000000; + --dark-hl-2: #D4D4D4; + --light-hl-3: #A31515; + --dark-hl-3: #CE9178; + --light-hl-4: #0000FF; + --dark-hl-4: #569CD6; + --light-hl-5: #001080; + --dark-hl-5: #9CDCFE; + --light-hl-6: #098658; + --dark-hl-6: #B5CEA8; + --light-hl-7: #AF00DB; + --dark-hl-7: #C586C0; + --light-hl-8: #0070C1; + --dark-hl-8: #4FC1FF; + --light-hl-9: #267F99; + --dark-hl-9: #4EC9B0; + --light-code-background: #FFFFFF; + --dark-code-background: #1E1E1E; +} + +@media (prefers-color-scheme: light) { :root { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --code-background: var(--light-code-background); +} } + +@media (prefers-color-scheme: dark) { :root { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --code-background: var(--dark-code-background); +} } + +:root[data-theme='light'] { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --code-background: var(--light-code-background); +} + +:root[data-theme='dark'] { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --code-background: var(--dark-code-background); +} + +.hl-0 { color: var(--hl-0); } +.hl-1 { color: var(--hl-1); } +.hl-2 { color: var(--hl-2); } +.hl-3 { color: var(--hl-3); } +.hl-4 { color: var(--hl-4); } +.hl-5 { color: var(--hl-5); } +.hl-6 { color: var(--hl-6); } +.hl-7 { color: var(--hl-7); } +.hl-8 { color: var(--hl-8); } +.hl-9 { color: var(--hl-9); } +pre, code { background: var(--code-background); } diff --git a/assets/icons.js b/assets/icons.js new file mode 100644 index 0000000000..b79c9e89fb --- /dev/null +++ b/assets/icons.js @@ -0,0 +1,15 @@ +(function(svg) { + svg.innerHTML = ``; + svg.style.display = 'none'; + if (location.protocol === 'file:') { + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateUseElements); + else updateUseElements() + function updateUseElements() { + document.querySelectorAll('use').forEach(el => { + if (el.getAttribute('href').includes('#icon-')) { + el.setAttribute('href', el.getAttribute('href').replace(/.*#/, '#')); + } + }); + } + } +})(document.body.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))) \ No newline at end of file diff --git a/assets/icons.svg b/assets/icons.svg new file mode 100644 index 0000000000..7dead61183 --- /dev/null +++ b/assets/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/main.js b/assets/main.js new file mode 100644 index 0000000000..d6f138860f --- /dev/null +++ b/assets/main.js @@ -0,0 +1,59 @@ +"use strict"; +"use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(console.log("Show page"),document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){console.log("Scorlling");let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ve(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ne(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ve(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ne(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +/*! Bundled license information: + +lunr/lunr.js: + (** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + *) + (*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + *) + (*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + *) +*/ diff --git a/assets/navigation.js b/assets/navigation.js new file mode 100644 index 0000000000..0113dfda19 --- /dev/null +++ b/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA6WZ23LbNhCG34XXblO7SZr6zpXtqaZy7cqZ5iLTC4hYi6hAgMVBtpzpu3dI8ACQ4IJpbrn//xEnYpfA5y+ZgReTXWYkN0yK7CyriCmyy6yU1HLQb9zz7wtT8uwsOzBBs8u3Z1leME4ViOzyc4+4aqR3jFIOz0TBAGPCgHoi+cAba8MXXLx7/+/Z0DRKY9AnKxpIzwx0IfD9W4+nrEAoyoqJ9y/PnZO8gOk4NY8XDdOqVt4oJdUdaE32oAcaCFt2rKkuxH/wGtVo73d/Q26io+4RnQobbyermlFJ0pwMw3GZH66tIuH6OhLFyG4YOV8V0n68GMEeFDyxFxzlNAnQFow64ZxGgmAUUKZTDfJECErnRKykFWYe1EsQTF5AftjI/BBb4w7TS5CPJOdAFIKow6idgd+Tqb+OIwAK2ih5mie0Agxhy2oLhCKMVpGAfFLMRDeegdJIEMwezG9w0vOQVoAgDqj/gJs502YDYm+KecSgwUASG9A6ipqxZcnxFVmHfyclMhGdIgFBRrEJI3Z5BKUYhU2yLWMlAq1kNc+pZIVZrUYmtI4iZk2OSAfqKGZmr5iZvWJmK/CV4OJ4Gi6I2UpZRjJxG1mWjAtiEhVLzwu1aAYtiHmwu0e7a1N3GhzIE9VQdOA6GKHYF1jXSFDuIL61ewynSpDQqiygLanLdkoSmhMdTxsdrVf9v+zTYb4pAXWQdA6CF6ZNfMPpIE6C5g4BihhwU3INhjCOI6OORHZAgbUAq6ihlEdYsLB8IcaTsnw0xFi8m4MM3eUEM+z1K0Yv6kA3o6bAm+5EzeNF21B6s3CsxbsElStutYlPh2P1EjS/7DiLpxgHaQXo2tCVFDTZnFCHD7e0JvIL1jxeNNwK9qx+yzYEeU1qUIEMbZGuIP8VeOV3sGvWEFvUtp1lnK6kEDD6Ix9a5xFHanQ/42DgRvxjwQL9SHS8DvLYEQfCf2KCfg19oser5/o7Z/kt49H58riBFj8FuFoywr0OZ91azutupGmdEuctY0U5/sI0AaZbkmZim1mMNT9RHjWsUPdNhzkNb2nJQDi/Bk5OEK2JHKqX4JxPUh2Y2N9H10NH6kWJP2dxz2mtBRX9DBrcSId/urMUChx3/nK6bR0YY1DhtNRoDxKcM3dA0UESpxMU+B/1zoEhGgHOqNt5Fa18OohToJTZgqJlpIovcJvgLKGNpwlXnG8ht0qBMLM7sI+cGBa8Y360ekWasp5fi70iTQnangIGYiyNEcaR9e3CSf/oHC8KiRzkLTuqaBipkwqXWGftLpws6W/x0fBFKMuo05Wg22XMqRgr7/MC6qSGfceeBiMZEv9Tc4w6irpltWxBTpQI1bAStCFlNd+wQYJwnhO56DmZg56T6fF5Njf6Bcm45so50Rr0G/f8u/PQfH7xYeJ9UDIHraWag/QClFWxiL9imGe1WU89q80a9UQq+d46U7eHhHX9N0o4e4VIj70gxmiHZOpvA5j3EdQx9mr3HHOGn0Hnq58umecClFxJ8cT2667ajBags2qsDF2LysavyppI0hq/GHMhzDw0diP3Gzj6lZ05VUF3OsWI98PPP52/8298bl5yaK7htlBJFfxkO+REkCI+EEVKfav841WHGiJJBrd7JtyUTCheLMVpfr7vwBSSjjFeaBHl46mCKKMOLCLoeH/8WIpD+vn9E5SeuROdiJALP+LvZB6iYuOvLLwnHPXEu2uM9COwgjjGfCCOiInRmIdRxMLlfh9krcHXhhBzpWR90b2VMnqh6oURSDO9uWJVlDFEEYQ1we/B4G4CeO9juZbLPZKmFXQnQsHk+odtnmCaqf8DeBJ/DBEiAAA=" \ No newline at end of file diff --git a/assets/search.js b/assets/search.js new file mode 100644 index 0000000000..d0fb3fa71b --- /dev/null +++ b/assets/search.js @@ -0,0 +1 @@ +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/assets/style.css b/assets/style.css new file mode 100644 index 0000000000..778b949279 --- /dev/null +++ b/assets/style.css @@ -0,0 +1,1412 @@ +:root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-warning-text: #222; + --light-color-background-warning: #e6e600; + --light-color-icon-background: var(--light-color-background); + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); + --light-color-text: #222; + --light-color-text-aside: #6e6e6e; + --light-color-link: #1f70c2; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: var(--light-color-ts-variable); + --light-color-ts-method: var(--light-color-ts-function); + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var(--light-color-ts-constructor); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: var(--light-color-ts-property); + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + --dark-color-link: #00aff4; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: var(--dark-color-ts-variable); + --dark-color-ts-method: var(--dark-color-ts-function); + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: var(--dark-color-ts-property); + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; +} + +@media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-link: var(--light-color-link); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-link: var(--dark-color-link); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } +} + +html { + color-scheme: var(--color-scheme); +} + +body { + margin: 0; +} + +:root[data-theme="light"] { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-link: var(--light-color-link); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); +} + +:root[data-theme="dark"] { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-link: var(--dark-color-link); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); +} + +.always-visible, +.always-visible .tsd-signatures { + display: inherit !important; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: 1.2; +} + +h1 > a:not(.link), +h2 > a:not(.link), +h3 > a:not(.link), +h4 > a:not(.link), +h5 > a:not(.link), +h6 > a:not(.link) { + text-decoration: none; + color: var(--color-text); +} + +h1 { + font-size: 1.875rem; + margin: 0.67rem 0; +} + +h2 { + font-size: 1.5rem; + margin: 0.83rem 0; +} + +h3 { + font-size: 1.25rem; + margin: 1rem 0; +} + +h4 { + font-size: 1.05rem; + margin: 1.33rem 0; +} + +h5 { + font-size: 1rem; + margin: 1.5rem 0; +} + +h6 { + font-size: 0.875rem; + margin: 2.33rem 0; +} + +.uppercase { + text-transform: uppercase; +} + +dl, +menu, +ol, +ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +.container { + max-width: 1700px; + padding: 0 2rem; +} + +/* Footer */ +footer { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; +} +.tsd-generator { + margin: 0 1em; +} + +.container-main { + margin: 0 auto; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } +} +@keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } +} +@keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } +} +@keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } +} +body { + background: var(--color-background); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + color: var(--color-text); +} + +a { + color: var(--color-link); + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; +} + +code, +pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; +} + +pre { + position: relative; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); +} +pre code { + padding: 0; + font-size: 100%; +} +pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; +} +pre:hover > button, +pre > button.visible { + opacity: 1; +} + +blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; +} + +.tsd-typography { + line-height: 1.333em; +} +.tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; +} +.tsd-typography .tsd-index-panel h3, +.tsd-index-panel .tsd-typography h3, +.tsd-typography h4, +.tsd-typography h5, +.tsd-typography h6 { + font-size: 1em; +} +.tsd-typography h5, +.tsd-typography h6 { + font-weight: normal; +} +.tsd-typography p, +.tsd-typography ul, +.tsd-typography ol { + margin: 1em 0; +} +.tsd-typography table { + border-collapse: collapse; + border: none; +} +.tsd-typography td, +.tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); +} +.tsd-typography thead, +.tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); +} + +.tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); +} +.tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; +} +.tsd-breadcrumb a:hover { + text-decoration: underline; +} +.tsd-breadcrumb li { + display: inline; +} +.tsd-breadcrumb li:after { + content: " / "; +} + +.tsd-comment-tags { + display: flex; + flex-direction: column; +} +dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; +} +dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; +} +dl.tsd-comment-tag-group dd { + margin: 0; +} +code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; +} +h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; +} + +dl.tsd-comment-tag-group dd:before, +dl.tsd-comment-tag-group dd:after { + content: " "; +} +dl.tsd-comment-tag-group dd pre, +dl.tsd-comment-tag-group dd:after { + clear: both; +} +dl.tsd-comment-tag-group p { + margin: 0; +} + +.tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; +} +.tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; +} + +.tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; +} +.tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; +} +.tsd-filter-input { + display: flex; + width: fit-content; + width: -moz-fit-content; + align-items: center; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + cursor: pointer; +} +.tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; +} +.tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; +} +.tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; +} +.tsd-filter-input input[type="checkbox"]:focus + svg { + transform: scale(0.95); +} +.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { + transform: scale(1); +} +.tsd-checkbox-background { + fill: var(--color-accent); +} +input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); +} + +.tsd-theme-toggle { + padding-top: 0.75rem; +} +.tsd-theme-toggle > h4 { + display: inline; + vertical-align: middle; + margin-right: 0.75rem; +} + +.tsd-hierarchy { + list-style: square; + margin: 0; +} +.tsd-hierarchy .target { + font-weight: bold; +} + +.tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); +} +.tsd-full-hierarchy, +.tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; +} +.tsd-full-hierarchy ul { + padding-left: 1.5rem; +} +.tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} + +.tsd-panel-group.tsd-index-group { + margin-bottom: 0; +} +.tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; +} +@media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } +} +@media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } +} +.tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; +} + +.tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; +} + +.tsd-anchor { + position: relative; + top: -100px; +} + +.tsd-member { + position: relative; +} +.tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; +} + +.tsd-navigation.settings { + margin: 1rem 0; +} +.tsd-navigation > a, +.tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; +} +.tsd-navigation a, +.tsd-navigation summary > span, +.tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; +} +.tsd-navigation a.current, +.tsd-page-navigation a.current { + background: var(--color-active-menu-item); +} +.tsd-navigation a:hover, +.tsd-page-navigation a:hover { + text-decoration: underline; +} +.tsd-navigation ul, +.tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; +} +.tsd-navigation li, +.tsd-page-navigation li { + padding: 0; + max-width: 100%; +} +.tsd-nested-navigation { + margin-left: 3rem; +} +.tsd-nested-navigation > li > details { + margin-left: -1.5rem; +} +.tsd-small-nested-navigation { + margin-left: 1.5rem; +} +.tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; +} + +.tsd-page-navigation ul { + padding-left: 1.75rem; +} + +#tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; +} +#tsd-sidebar-links a:last-of-type { + margin-bottom: 0; +} + +a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} +.tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ +} +.tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ +} +.tsd-accordion-summary, +.tsd-accordion-summary a { + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + + cursor: pointer; +} +.tsd-accordion-summary a { + width: calc(100% - 1.5rem); +} +.tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} +.tsd-index-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; +} +.tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; +} +.tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; +} + +.tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; +} +.tsd-kind-icon path { + transform-origin: center; + transform: scale(1.1); +} +.tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; +} + +.tsd-panel { + margin-bottom: 2.5rem; +} +.tsd-panel.tsd-member { + margin-bottom: 4rem; +} +.tsd-panel:empty { + display: none; +} +.tsd-panel > h1, +.tsd-panel > h2, +.tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; +} +.tsd-panel > h1.tsd-before-signature, +.tsd-panel > h2.tsd-before-signature, +.tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; +} + +.tsd-panel-group { + margin: 4rem 0; +} +.tsd-panel-group.tsd-index-group { + margin: 2rem 0; +} +.tsd-panel-group.tsd-index-group details { + margin: 2rem 0; +} + +#tsd-search { + transition: background-color 0.2s; +} +#tsd-search .title { + position: relative; + z-index: 2; +} +#tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; +} +#tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: var(--color-text); +} +#tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; +} +#tsd-search .field input, +#tsd-search .title, +#tsd-toolbar-links a { + transition: opacity 0.2s; +} +#tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); +} +#tsd-search .results li { + background-color: var(--color-background); + line-height: initial; + padding: 4px; +} +#tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); +} +#tsd-search .results li.state { + display: none; +} +#tsd-search .results li.current:not(.no-results), +#tsd-search .results li:hover:not(.no-results) { + background-color: var(--color-accent); +} +#tsd-search .results a { + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; +} +#tsd-search .results a:before { + top: 10px; +} +#tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; +} +#tsd-search.has-focus { + background-color: var(--color-accent); +} +#tsd-search.has-focus .field input { + top: 0; + opacity: 1; +} +#tsd-search.has-focus .title, +#tsd-search.has-focus #tsd-toolbar-links a { + z-index: 0; + opacity: 0; +} +#tsd-search.has-focus .results { + visibility: visible; +} +#tsd-search.loading .results li.state.loading { + display: block; +} +#tsd-search.failure .results li.state.failure { + display: block; +} + +#tsd-toolbar-links { + position: absolute; + top: 0; + right: 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-end; +} +#tsd-toolbar-links a { + margin-left: 1.5rem; +} +#tsd-toolbar-links a:hover { + text-decoration: underline; +} + +.tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; +} + +.tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; +} + +.tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; +} + +.tsd-signature-type { + font-style: italic; + font-weight: normal; +} + +.tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; +} +.tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; +} +.tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; +} + +ul.tsd-parameter-list, +ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; +} +ul.tsd-parameter-list > li.tsd-parameter-signature, +ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; +} +ul.tsd-parameter-list h5, +ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; +} +.tsd-sources { + margin-top: 1rem; + font-size: 0.875em; +} +.tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; +} +.tsd-sources ul { + list-style: none; + padding: 0; +} + +.tsd-page-toolbar { + position: sticky; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; +} +.tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; +} +.tsd-page-toolbar a.title { + font-weight: bold; +} +.tsd-page-toolbar a.title:hover { + text-decoration: underline; +} +.tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; + margin: 0 auto; +} +.tsd-page-toolbar .table-cell { + position: relative; + white-space: nowrap; + line-height: 40px; +} +.tsd-page-toolbar .table-cell:first-child { + width: 100%; +} +.tsd-page-toolbar .tsd-toolbar-icon { + box-sizing: border-box; + line-height: 0; + padding: 12px 0; +} + +.tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: + opacity 0.1s, + background-color 0.2s; + vertical-align: bottom; + cursor: pointer; +} +.tsd-widget:hover { + opacity: 0.9; +} +.tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); +} +.tsd-widget.no-caption { + width: 40px; +} +.tsd-widget.no-caption:before { + margin: 0; +} + +.tsd-widget.options, +.tsd-widget.menu { + display: none; +} +input[type="checkbox"] + .tsd-widget:before { + background-position: -120px 0; +} +input[type="checkbox"]:checked + .tsd-widget:before { + background-position: -160px 0; +} + +img { + max-width: 100%; +} + +.tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + vertical-align: middle; + color: var(--color-text); +} + +.tsd-anchor-icon svg { + width: 1em; + height: 1em; + visibility: hidden; +} + +.tsd-anchor-link:hover > .tsd-anchor-icon svg { + visibility: visible; +} + +.deprecated { + text-decoration: line-through !important; +} + +.warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); +} + +.tsd-kind-project { + color: var(--color-ts-project); +} +.tsd-kind-module { + color: var(--color-ts-module); +} +.tsd-kind-namespace { + color: var(--color-ts-namespace); +} +.tsd-kind-enum { + color: var(--color-ts-enum); +} +.tsd-kind-enum-member { + color: var(--color-ts-enum-member); +} +.tsd-kind-variable { + color: var(--color-ts-variable); +} +.tsd-kind-function { + color: var(--color-ts-function); +} +.tsd-kind-class { + color: var(--color-ts-class); +} +.tsd-kind-interface { + color: var(--color-ts-interface); +} +.tsd-kind-constructor { + color: var(--color-ts-constructor); +} +.tsd-kind-property { + color: var(--color-ts-property); +} +.tsd-kind-method { + color: var(--color-ts-method); +} +.tsd-kind-call-signature { + color: var(--color-ts-call-signature); +} +.tsd-kind-index-signature { + color: var(--color-ts-index-signature); +} +.tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); +} +.tsd-kind-parameter { + color: var(--color-ts-parameter); +} +.tsd-kind-type-literal { + color: var(--color-ts-type-literal); +} +.tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); +} +.tsd-kind-accessor { + color: var(--color-ts-accessor); +} +.tsd-kind-get-signature { + color: var(--color-ts-get-signature); +} +.tsd-kind-set-signature { + color: var(--color-ts-set-signature); +} +.tsd-kind-type-alias { + color: var(--color-ts-type-alias); +} + +/* if we have a kind icon, don't color the text by kind */ +.tsd-kind-icon ~ span { + color: var(--color-text); +} + +* { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); +} + +*::-webkit-scrollbar { + width: 0.75rem; +} + +*::-webkit-scrollbar-track { + background: var(--color-icon-background); +} + +*::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); +} + +/* mobile */ +@media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } +} + +/* one sidebar */ +@media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } +} +@media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } +} + +/* two sidebars */ +@media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem 0; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } +} diff --git a/classes/Action-1.html b/classes/Action-1.html new file mode 100644 index 0000000000..742e7e56fe --- /dev/null +++ b/classes/Action-1.html @@ -0,0 +1,28 @@ +Action | actionhero

Class ActionAbstract

Create a new Actionhero Action. The required properties of an action. These can be defined statically (this.name) or as methods which return a value.

+
import { Action } from "actionhero";

export default class RandomNumber extends Action {
constructor () {
super()
this.name = 'randomNumber'
this.description = 'I am an API method which will generate a random number'
this.outputExample = { randomNumber: 0.1234 }
}
async run ({ response }) {
response.randomNumber = Math.random()
}
} +
+

Constructors

  • Returns Action

Properties

blockedConnectionTypes?: string[]

Are there connections from any servers which cannot use this Action (default: [])?

+
description: string

The description of the Action (default this.name)

+
inputs?: Inputs

The inputs of the Action (default: {})

+

Under what level should connections to this Action be logged (default 'info')?

+
matchExtensionMimeType?: boolean

If this Action is responding to a web request, and that request has a file extension like *.jpg, should Actionhero set the response headers to match that extension (default: true)?

+
middleware?: string[]

The Middleware specific to this Action (default: []). Middleware is described by the string names of the middleware.

+
name: string

The name of the Action

+
outputExample?: object
toDocument?: boolean

Should this Action appear in api.documentation.documentation? (default: true)?

+
version?: string | number

The version of this Action (default: 1)

+

Methods

  • The main "do something" method for this action. It can be async. Usually the goal of this run method is to return the data that you want to be sent to API consumers. If error is thrown in this method, it will be logged, caught, and returned to the client as error

    +

    Parameters

    Returns Promise<ActionResponse>

  • Returns void

\ No newline at end of file diff --git a/classes/ActionProcessor.html b/classes/ActionProcessor.html new file mode 100644 index 0000000000..7d3c9849dd --- /dev/null +++ b/classes/ActionProcessor.html @@ -0,0 +1,32 @@ +ActionProcessor | actionhero

Class ActionProcessor<ActionClass>

Type Parameters

Constructors

Properties

action: ActionClass["name"]
actionStartTime: number
actionStatus: ActionsStatus
actionTemplate: ActionClass
connection: Connection
duration: number
messageId: string | number
missingParams: string[]
params: {
    action?: string;
    apiVersion?: string | number;
    [key: string]: any;
}

Type declaration

  • [key: string]: any
  • Optional action?: string
  • Optional apiVersion?: string | number
response: {
    [key: string]: any;
}

Type declaration

  • [key: string]: any
session: any
toProcess: boolean
toRender: boolean
validatorErrors: (string | Error)[]
working: boolean

Methods

  • Parameters

    • error: ErrnoException

    Returns {
        errorFields: {
            error: string;
        };
        logLevel: ActionheroLogLevel;
    }

  • Returns number

  • Parameters

    • count: number = 1

    Returns void

  • Parameters

    • count: number = 1

    Returns void

  • Returns void

  • Parameters

    • status: ActionsStatus
    • error: ErrnoException

    Returns void

  • Returns Promise<void>

  • Returns Promise<void>

  • Parameters

    • method: string

    Returns Function

  • Parameters

    • Optional schemaKey: string

    Returns void

  • Parameters

    • props: Input
    • params: {
          action?: string;
          apiVersion?: string | number;
          [key: string]: any;
      }
      • [key: string]: any
      • Optional action?: string
      • Optional apiVersion?: string | number
    • key: string
    • schemaKey: string

    Returns Promise<void>

  • Parameters

    • Optional schemaKey: string

    Returns Promise<void>

\ No newline at end of file diff --git a/classes/Api.html b/classes/Api.html new file mode 100644 index 0000000000..730c5e4dda --- /dev/null +++ b/classes/Api.html @@ -0,0 +1,18 @@ +Api | actionhero

Class Api

Indexable

[key: string]: any

Constructors

  • Returns Api

Properties

actions: ActionsApi
bootTime: number
chatRoom: ChatRoomApi
commands: {
    initialize?: Function;
    restart?: Function;
    start?: Function;
    stop?: Function;
}

Type declaration

  • Optional initialize?: Function
  • Optional restart?: Function
  • Optional start?: Function
  • Optional stop?: Function
connections: ConnectionsApi
exceptionHandlers: ExceptionHandlerAPI
params: ParamsApi
process?: Process
redis: RedisApi
resque: ResqueApi
routes: RoutesApi
running: boolean
servers: ServersApi
specHelper: SpecHelperApi
staticFile: StaticFileApi
tasks: TaskApi
\ No newline at end of file diff --git a/classes/CLI.html b/classes/CLI.html new file mode 100644 index 0000000000..c61973cc82 --- /dev/null +++ b/classes/CLI.html @@ -0,0 +1,22 @@ +CLI | actionhero

Class CLIAbstract

An Actionhero CLI Command. +For inputs, you can provide Options (--thing=stuff) with the "Inputs" object, or define Arguments in the name of the command (greet [name])

+

Constructors

Properties

Methods

Constructors

  • Returns CLI

Properties

description: string

The description of the CLI command (default this.name)

+
example: string

An example of how to run this CLI command

+
initialize: boolean

Should the server initialize before running this command?

+
inputs: {
    [key: string]: {
        default?: string | boolean;
        description?: string;
        flag?: boolean;
        formatter?: Function;
        letter?: string;
        placeholder?: string;
        required?: boolean;
        requiredValue?: boolean;
        validator?: Function;
        variadic?: boolean;
    };
}

The inputs of the CLI command (default: {})

+

Type declaration

  • [key: string]: {
        default?: string | boolean;
        description?: string;
        flag?: boolean;
        formatter?: Function;
        letter?: string;
        placeholder?: string;
        required?: boolean;
        requiredValue?: boolean;
        validator?: Function;
        variadic?: boolean;
    }
    • Optional default?: string | boolean
    • Optional description?: string
    • Optional flag?: boolean
    • Optional formatter?: Function
    • Optional letter?: string
    • Optional placeholder?: string
    • Optional required?: boolean
    • Optional requiredValue?: boolean
    • Optional validator?: Function
    • Optional variadic?: boolean
name: string

The name of the CLI command.

+
start: boolean

Should the server start before running this command?

+

Methods

  • An optional method to append additional information to the --help response for this CLI command

    +

    Returns void

  • The main "do something" method for this CLI command. It is an async method. +If error is thrown in this method, it will be logged to STDERR, and the process will terminate with a non-0 exit code.

    +

    Parameters

    • data: {
          [key: string]: any;
      }
      • [key: string]: any

    Returns Promise<boolean>

  • Returns void

\ No newline at end of file diff --git a/classes/Connection.html b/classes/Connection.html new file mode 100644 index 0000000000..105397f537 --- /dev/null +++ b/classes/Connection.html @@ -0,0 +1,61 @@ +Connection | actionhero

Class Connection

The generic representation of a connection for all server types is an Actionhero.Connection. You will never be creating these yourself via an action or task, but you will find them in your Actions and Action Middleware.

+

Constructors

  • Parameters

    • data: ConnectionData

      The specifics of this connection

      +
    • callCreateMethods: boolean = true

      The specifics of this connection will calls create methods in the constructor. This property will exist for backward compatibility. If you want to construct connection and call create methods within async, you can use await Actionhero.Connection.createAsync(details) for construction.

      +

    Returns Connection

Properties

canChat: boolean

Can this connection use the chat system?

+
connectedAt: number

The timestamp of when this connection was created

+
destroyed: boolean
error?: ErrnoException

If there's a local error

+
extension?: string

If there's a local extension to the request

+
fingerprint: string

A unique string identifer for this connection, but common among subsequent requests. For example, all web requests from the same client have the same fingerprint, but not the same id

+
id: string

A unique string identifer for this connection.

+
matchedRoute?: RouteType
messageId: string

The Id of the latest message this connection has sent to the server.

+
messages?: {
    message: string;
    [key: string]: any;
}[]

for specHelper

+

Type declaration

  • [key: string]: any
  • message: string
params: ConnectionParams

Any params this connection has saved for use in subsequent Actions.

+
pendingActions: number

How many actions are currently running for this connection? Most server types have a limit

+
pipe?: Function
rawConnection: any

Any connection-specific properties. For, example, the HTTP res and req objects for web connections are here

+
remoteIP: string

The remote connection's IP address (as best as we can tell). May be either IPv4 or IPv6.

+
remotePort: string | number

The remote connection's port. Related to connection.remoteIP

+
response?: Record<string, unknown>

storage for a response payload

+
rooms: string[]

Any rooms this connection is a member of, it it can chat

+
session?: Record<string, any>

storage for session data

+
setHeader?: ((key, value) => {})

Type declaration

    • (key, value): {}
    • Parameters

      • key: string
      • value: string

      Returns {}

    setStatusCode?: ((code) => {})

    Type declaration

      • (code): {}
      • Parameters

        • code: number

        Returns {}

      totalActions: number

      How many actions has this connection run since it connected.

      +
      type: string

      The type of this connection (web, websocket, etc) as defined by the name of the server which created it

      +

      Methods

      • Destroys the connection. If the type/sever of the connection has a goodbye message, it will be sent. The connection will be removed from all rooms. The connection's socket will be closed when possible.

        +

        Returns Promise<void>

      • Returns string

      • Send a file to a connection (usually in the context of an Action). Be sure to set data.toRender = false in the action! +Uses Server#processFile and will set connection.params.file = path

        +

        Parameters

        • path: string

        Returns Promise<void>

      • Send a message to a connection. Uses Server#sendMessage.

        +

        Parameters

        • message: string | object | any[]
        • Optional verb: string

        Returns Promise<void>

      • Parameters

        Returns void

      • Parameters

        • data: ConnectionData

        Returns void

      • Try to run a verb command for a connection

        +

        Parameters

        • verb: string
        • words: string | string[]

        Returns Promise<any>

      • Parameters

        Returns Promise<void>

      • Parameters

        • data: ConnectionData

          The specifics of this connection

          +

        Returns Promise<Connection>

      \ No newline at end of file diff --git a/classes/Initializer.html b/classes/Initializer.html new file mode 100644 index 0000000000..c88c03f91a --- /dev/null +++ b/classes/Initializer.html @@ -0,0 +1,18 @@ +Initializer | actionhero

      Class InitializerAbstract

      Create a new Actionhero Initializer. The required properties of an initializer. These can be defined statically (this.name) or as methods which return a value.

      +

      Constructors

      Properties

      loadPriority?: number

      What order should this Initializer load at (Default: 1000, Actionhero core methods are < 1000)

      +
      name: string

      The name of the Initializer.

      +
      startPriority?: number

      What order should this Initializer start at (Default: 1000, Actionhero core methods are < 1000)

      +
      stopPriority?: number

      What order should this Initializer stop at (Default: 1000, Actionhero core methods are < 1000)

      +

      Methods

      • Method run as part of the initialize lifecycle of your server. Usually sets api['YourNamespace']

        +

        Returns Promise<void>

      • Method run as part of the start lifecycle of your server. Usually connects to remote servers or processes..

        +

        Returns Promise<void>

      • Method run as part of the initialize lifecycle of your server. Usually disconnects from remote servers or processes.

        +

        Returns Promise<void>

      • Returns void

      \ No newline at end of file diff --git a/classes/Process.html b/classes/Process.html new file mode 100644 index 0000000000..48c0bbf5c5 --- /dev/null +++ b/classes/Process.html @@ -0,0 +1,29 @@ +Process | actionhero

      Class Process

      Constructors

      • Returns Process

      Properties

      bootTime: number
      initialized: boolean
      initializers: Initializers
      loadInitializers: (() => Promise<void>)[]

      Type declaration

        • (): Promise<void>
        • Method run as part of the initialize lifecycle of your server. Usually sets api['YourNamespace']

          +

          Returns Promise<void>

      running: boolean
      shuttingDown: boolean
      startCount: number
      startInitializers: (() => Promise<void>)[]

      Type declaration

        • (): Promise<void>
        • Method run as part of the start lifecycle of your server. Usually connects to remote servers or processes..

          +

          Returns Promise<void>

      started: boolean
      stopInitializers: (() => Promise<void>)[]

      Type declaration

        • (): Promise<void>
        • Method run as part of the initialize lifecycle of your server. Usually disconnects from remote servers or processes.

          +

          Returns Promise<void>

      stopReasons?: string[]
      stopped: boolean

      Methods

      • Parameters

        • errors: ErrnoException | ErrnoException[] = []
        • type: string

        Returns Promise<void>

      • Type Parameters

        • T

        Parameters

        • collection: {
              [rank: number]: T[];
          }
          • [rank: number]: T[]

        Returns T[]

      • Returns Promise<void>

      • Register listeners for process signals and uncaught exceptions & rejections. +Try to gracefully shut down when signaled to do so

        +

        Parameters

        • stopCallback: ((exitCode?) => void) = ...
            • (exitCode?): void
            • Parameters

              • Optional exitCode: number

              Returns void

        Returns void

      • Restart the Actionhero Process

        +

        Returns Promise<void>

      • Start the Actionhero Process

        +

        Returns Promise<void>

      • Stop the Actionhero Process

        +

        Parameters

        • stopReasons: string | string[] = []

        Returns Promise<void>

      \ No newline at end of file diff --git a/classes/Server.html b/classes/Server.html new file mode 100644 index 0000000000..2b67185a80 --- /dev/null +++ b/classes/Server.html @@ -0,0 +1,295 @@ +Server | actionhero

      Class ServerAbstract

      Create a new Actionhero Server. The required properties of an server. These can be defined statically (this.name) or as methods which return a value.

      +

      Hierarchy

      • EventEmitter
        • Server

      Constructors

      • Returns Server

      Properties

      attributes: {
          [key: string]: any;
      }

      attributes of the server

      +

      Type declaration

      • [key: string]: any
      canChat: boolean

      Can connections of this server use the chat system?

      +
      config?: ServerConfig

      Shorthand for api.config[this.type]

      +
      connectionCustomMethods: {
          [key: string]: Function;
      }

      Methods described by the server to apply to each connection (like connection.setHeader for web connections)

      +

      Type declaration

      • [key: string]: Function
      logConnections: boolean

      Should we log every new connection?

      +
      logExits: boolean

      Should we log when a connection disconnects/exits?

      +
      options?: {
          [key: string]: any;
      }

      Type declaration

      • [key: string]: any
      sendWelcomeMessage: boolean

      Should every new connection of this server type receive the welcome message

      +
      server?: any

      A place to store the actually server object you create

      +
      type: string

      The name & type of the server.

      +
      verbs?: string[]

      What connection verbs can connections of this type use?

      +
      captureRejectionSymbol: typeof captureRejectionSymbol

      Value: Symbol.for('nodejs.rejection')

      +

      See how to write a custom rejection handler.

      +

      Since

      v13.4.0, v12.16.0

      +
      captureRejections: boolean

      Value: boolean

      +

      Change the default captureRejections option on all new EventEmitter objects.

      +

      Since

      v13.4.0, v12.16.0

      +
      defaultMaxListeners: number

      By default, a maximum of 10 listeners can be registered for any single +event. This limit can be changed for individual EventEmitter instances +using the emitter.setMaxListeners(n) method. To change the default +for allEventEmitter instances, the events.defaultMaxListenersproperty can be used. If this value is not a positive number, a RangeErroris thrown.

      +

      Take caution when setting the events.defaultMaxListeners because the +change affects allEventEmitter instances, including those created before +the change is made. However, calling emitter.setMaxListeners(n) still has +precedence over events.defaultMaxListeners.

      +

      This is not a hard limit. The EventEmitter instance will allow +more listeners to be added but will output a trace warning to stderr indicating +that a "possible EventEmitter memory leak" has been detected. For any singleEventEmitter, the emitter.getMaxListeners() and emitter.setMaxListeners()methods can be used to +temporarily avoid this warning:

      +
      import { EventEmitter } from 'node:events';
      const emitter = new EventEmitter();
      emitter.setMaxListeners(emitter.getMaxListeners() + 1);
      emitter.once('event', () => {
      // do stuff
      emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
      }); +
      +

      The --trace-warnings command-line flag can be used to display the +stack trace for such warnings.

      +

      The emitted warning can be inspected with process.on('warning') and will +have the additional emitter, type, and count properties, referring to +the event emitter instance, the event's name and the number of attached +listeners, respectively. +Its name property is set to 'MaxListenersExceededWarning'.

      +

      Since

      v0.11.2

      +
      errorMonitor: typeof errorMonitor

      This symbol shall be used to install a listener for only monitoring 'error'events. Listeners installed using this symbol are called before the regular'error' listeners are called.

      +

      Installing a listener using this symbol does not change the behavior once an'error' event is emitted. Therefore, the process will still crash if no +regular 'error' listener is installed.

      +

      Since

      v13.6.0, v12.17.0

      +

      Methods

      • Type Parameters

        • K

        Parameters

        • error: Error
        • event: string | symbol
        • Rest ...args: AnyRest

        Returns void

      • Alias for emitter.on(eventName, listener).

        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol
        • listener: ((...args) => void)
            • (...args): void
            • Parameters

              • Rest ...args: any[]

              Returns void

        Returns this

        Since

        v0.1.26

        +
        • +
        • Build a the Actionhero.Connection from the raw parts provided by the server.
        • +
        +
        this.buildConnection({
        rawConnection: {
        req: req,
        res: res,
        params: {},
        method: method,
        cookies: cookies,
        responseHeaders: responseHeaders,
        responseHttpCode: responseHttpCode,
        parsedURL: parsedURL
        },
        id: fingerprint + '-' + uuid.v4(),
        fingerprint: fingerprint,
        remoteAddress: remoteIP,
        remotePort: remotePort
        }) +
        +

        Parameters

        • data: {
              [key: string]: any;
          }
          • [key: string]: any

        Returns Promise<void>

      • Enumerate the connections for this server type on this server.

        +

        Returns Connection[]

      • Synchronously calls each of the listeners registered for the event namedeventName, in the order they were registered, passing the supplied arguments +to each.

        +

        Returns true if the event had listeners, false otherwise.

        +
        import { EventEmitter } from 'node:events';
        const myEmitter = new EventEmitter();

        // First listener
        myEmitter.on('event', function firstListener() {
        console.log('Helloooo! first listener');
        });
        // Second listener
        myEmitter.on('event', function secondListener(arg1, arg2) {
        console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
        });
        // Third listener
        myEmitter.on('event', function thirdListener(...args) {
        const parameters = args.join(', ');
        console.log(`event with parameters ${parameters} in third listener`);
        });

        console.log(myEmitter.listeners('event'));

        myEmitter.emit('event', 1, 2, 3, 4, 5);

        // Prints:
        // [
        // [Function: firstListener],
        // [Function: secondListener],
        // [Function: thirdListener]
        // ]
        // Helloooo! first listener
        // event with parameters 1, 2 in second listener
        // event with parameters 1, 2, 3, 4, 5 in third listener +
        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol
        • Rest ...args: AnyRest

        Returns boolean

        Since

        v0.1.26

        +
      • Returns an array listing the events for which the emitter has registered +listeners. The values in the array are strings or Symbols.

        +
        import { EventEmitter } from 'node:events';

        const myEE = new EventEmitter();
        myEE.on('foo', () => {});
        myEE.on('bar', () => {});

        const sym = Symbol('symbol');
        myEE.on(sym, () => {});

        console.log(myEE.eventNames());
        // Prints: [ 'foo', 'bar', Symbol(symbol) ] +
        +

        Returns (string | symbol)[]

        Since

        v6.0.0

        +
      • Returns the current max listener value for the EventEmitter which is either +set by emitter.setMaxListeners(n) or defaults to defaultMaxListeners.

        +

        Returns number

        Since

        v1.0.0

        +
      • An optional message to send to clients when they disconnect

        +

        Parameters

        Returns Promise<void>

      • Method run as part of the initialize lifecycle of your server. Usually configures the server.

        +

        Returns Promise<void>

      • Returns the number of listeners listening for the event named eventName. +If listener is provided, it will return how many times the listener is found +in the list of the listeners of the event.

        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol

          The name of the event being listened for

          +
        • Optional listener: Function

          The event handler function

          +

        Returns number

        Since

        v3.2.0

        +
      • Returns a copy of the array of listeners for the event named eventName.

        +
        server.on('connection', (stream) => {
        console.log('someone connected!');
        });
        console.log(util.inspect(server.listeners('connection')));
        // Prints: [ [Function] ] +
        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol

        Returns Function[]

        Since

        v0.1.26

        +
      • Log a message from this server type. A wrapper around log() with a server prefix.

        +

        Parameters

        Returns void

      • Alias for emitter.removeListener().

        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol
        • listener: ((...args) => void)
            • (...args): void
            • Parameters

              • Rest ...args: any[]

              Returns void

        Returns this

        Since

        v10.0.0

        +
      • Adds the listener function to the end of the listeners array for the +event named eventName. No checks are made to see if the listener has +already been added. Multiple calls passing the same combination of eventNameand listener will result in the listener being added, and called, multiple +times.

        +
        server.on('connection', (stream) => {
        console.log('someone connected!');
        }); +
        +

        Returns a reference to the EventEmitter, so that calls can be chained.

        +

        By default, event listeners are invoked in the order they are added. Theemitter.prependListener() method can be used as an alternative to add the +event listener to the beginning of the listeners array.

        +
        import { EventEmitter } from 'node:events';
        const myEE = new EventEmitter();
        myEE.on('foo', () => console.log('a'));
        myEE.prependListener('foo', () => console.log('b'));
        myEE.emit('foo');
        // Prints:
        // b
        // a +
        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol

          The name of the event.

          +
        • listener: ((...args) => void)

          The callback function

          +
            • (...args): void
            • Parameters

              • Rest ...args: any[]

              Returns void

        Returns this

        Since

        v0.1.101

        +
      • Adds a one-timelistener function for the event named eventName. The +next time eventName is triggered, this listener is removed and then invoked.

        +
        server.once('connection', (stream) => {
        console.log('Ah, we have our first user!');
        }); +
        +

        Returns a reference to the EventEmitter, so that calls can be chained.

        +

        By default, event listeners are invoked in the order they are added. Theemitter.prependOnceListener() method can be used as an alternative to add the +event listener to the beginning of the listeners array.

        +
        import { EventEmitter } from 'node:events';
        const myEE = new EventEmitter();
        myEE.once('foo', () => console.log('a'));
        myEE.prependOnceListener('foo', () => console.log('b'));
        myEE.emit('foo');
        // Prints:
        // b
        // a +
        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol

          The name of the event.

          +
        • listener: ((...args) => void)

          The callback function

          +
            • (...args): void
            • Parameters

              • Rest ...args: any[]

              Returns void

        Returns this

        Since

        v0.3.0

        +
      • Adds the listener function to the beginning of the listeners array for the +event named eventName. No checks are made to see if the listener has +already been added. Multiple calls passing the same combination of eventNameand listener will result in the listener being added, and called, multiple +times.

        +
        server.prependListener('connection', (stream) => {
        console.log('someone connected!');
        }); +
        +

        Returns a reference to the EventEmitter, so that calls can be chained.

        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol

          The name of the event.

          +
        • listener: ((...args) => void)

          The callback function

          +
            • (...args): void
            • Parameters

              • Rest ...args: any[]

              Returns void

        Returns this

        Since

        v6.0.0

        +
      • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this +listener is removed, and then invoked.

        +
        server.prependOnceListener('connection', (stream) => {
        console.log('Ah, we have our first user!');
        }); +
        +

        Returns a reference to the EventEmitter, so that calls can be chained.

        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol

          The name of the event.

          +
        • listener: ((...args) => void)

          The callback function

          +
            • (...args): void
            • Parameters

              • Rest ...args: any[]

              Returns void

        Returns this

        Since

        v6.0.0

        +
      • When a connection has called an Action command, and all properties are set. Connection should have params.action set at least. +on(event: 'actionComplete', cb: (data: object) => void): this;

        +

        Parameters

        Returns Promise<void>

      • When a connection has called an File command, and all properties are set. Connection should have params.file set at least. Will eventually call Actionhero.Server#sendFile.

        +

        Parameters

        Returns Promise<void>

      • Returns a copy of the array of listeners for the event named eventName, +including any wrappers (such as those created by .once()).

        +
        import { EventEmitter } from 'node:events';
        const emitter = new EventEmitter();
        emitter.once('log', () => console.log('log once'));

        // Returns a new Array with a function `onceWrapper` which has a property
        // `listener` which contains the original listener bound above
        const listeners = emitter.rawListeners('log');
        const logFnWrapper = listeners[0];

        // Logs "log once" to the console and does not unbind the `once` event
        logFnWrapper.listener();

        // Logs "log once" to the console and removes the listener
        logFnWrapper();

        emitter.on('log', () => console.log('log persistently'));
        // Will return a new Array with a single function bound by `.on()` above
        const newListeners = emitter.rawListeners('log');

        // Logs "log persistently" twice
        newListeners[0]();
        emitter.emit('log'); +
        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol

        Returns Function[]

        Since

        v9.4.0

        +
      • Removes all listeners, or those of the specified eventName.

        +

        It is bad practice to remove listeners added elsewhere in the code, +particularly when the EventEmitter instance was created by some other +component or module (e.g. sockets or file streams).

        +

        Returns a reference to the EventEmitter, so that calls can be chained.

        +

        Parameters

        • Optional eventName: string | symbol

        Returns this

        Since

        v0.1.26

        +
      • Removes the specified listener from the listener array for the event namedeventName.

        +
        const callback = (stream) => {
        console.log('someone connected!');
        };
        server.on('connection', callback);
        // ...
        server.removeListener('connection', callback); +
        +

        removeListener() will remove, at most, one instance of a listener from the +listener array. If any single listener has been added multiple times to the +listener array for the specified eventName, then removeListener() must be +called multiple times to remove each instance.

        +

        Once an event is emitted, all listeners attached to it at the +time of emitting are called in order. This implies that anyremoveListener() or removeAllListeners() calls after emitting and before the last listener finishes execution +will not remove them fromemit() in progress. Subsequent events behave as expected.

        +
        import { EventEmitter } from 'node:events';
        class MyEmitter extends EventEmitter {}
        const myEmitter = new MyEmitter();

        const callbackA = () => {
        console.log('A');
        myEmitter.removeListener('event', callbackB);
        };

        const callbackB = () => {
        console.log('B');
        };

        myEmitter.on('event', callbackA);

        myEmitter.on('event', callbackB);

        // callbackA removes listener callbackB but it will still be called.
        // Internal listener array at time of emit [callbackA, callbackB]
        myEmitter.emit('event');
        // Prints:
        // A
        // B

        // callbackB is now removed.
        // Internal listener array [callbackA]
        myEmitter.emit('event');
        // Prints:
        // A +
        +

        Because listeners are managed using an internal array, calling this will +change the position indices of any listener registered after the listener +being removed. This will not impact the order in which listeners are called, +but it means that any copies of the listener array as returned by +the emitter.listeners() method will need to be recreated.

        +

        When a single function has been added as a handler multiple times for a single +event (as in the example below), removeListener() will remove the most +recently added instance. In the example the once('ping')listener is removed:

        +
        import { EventEmitter } from 'node:events';
        const ee = new EventEmitter();

        function pong() {
        console.log('pong');
        }

        ee.on('ping', pong);
        ee.once('ping', pong);
        ee.removeListener('ping', pong);

        ee.emit('ping');
        ee.emit('ping'); +
        +

        Returns a reference to the EventEmitter, so that calls can be chained.

        +

        Type Parameters

        • K

        Parameters

        • eventName: string | symbol
        • listener: ((...args) => void)
            • (...args): void
            • Parameters

              • Rest ...args: any[]

              Returns void

        Returns this

        Since

        v0.1.26

        +
      • Must be defined explaining how to send a file to an individual connection. Might be a noop for some connection types.

        +

        Parameters

        • connection: Connection
        • error: ErrnoException
        • fileStream: any
        • mime: string
        • length: number
        • lastModified: Date

        Returns Promise<void>

      • Must be defined explaining how to send a message to an individual connection.

        +

        Parameters

        • connection: Connection
        • message: string | object | any[]
        • Optional messageId: string

        Returns Promise<void>

      • By default EventEmitters will print a warning if more than 10 listeners are +added for a particular event. This is a useful default that helps finding +memory leaks. The emitter.setMaxListeners() method allows the limit to be +modified for this specific EventEmitter instance. The value can be set toInfinity (or 0) to indicate an unlimited number of listeners.

        +

        Returns a reference to the EventEmitter, so that calls can be chained.

        +

        Parameters

        • n: number

        Returns this

        Since

        v0.3.5

        +
      • Method run as part of the start lifecycle of your server. Usually boots the server (listens on port, etc).

        +

        Returns Promise<void>

      • Method run as part of the stop lifecycle of your server. Usually configures the server (disconnects from port, etc).

        +

        Returns Promise<void>

      • Returns void

      • Experimental

        Listens once to the abort event on the provided signal.

        +

        Listening to the abort event on abort signals is unsafe and may +lead to resource leaks since another third party with the signal can +call e.stopImmediatePropagation(). Unfortunately Node.js cannot change +this since it would violate the web standard. Additionally, the original +API makes it easy to forget to remove listeners.

        +

        This API allows safely using AbortSignals in Node.js APIs by solving these +two issues by listening to the event such that stopImmediatePropagation does +not prevent the listener from running.

        +

        Returns a disposable so that it may be unsubscribed from more easily.

        +
        import { addAbortListener } from 'node:events';

        function example(signal) {
        let disposable;
        try {
        signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
        disposable = addAbortListener(signal, (e) => {
        // Do something when signal is aborted.
        });
        } finally {
        disposable?.[Symbol.dispose]();
        }
        } +
        +

        Parameters

        • signal: AbortSignal
        • resource: ((event) => void)
            • (event): void
            • Parameters

              • event: Event

              Returns void

        Returns Disposable

        Disposable that removes the abort listener.

        +

        Since

        v20.5.0

        +
      • Returns a copy of the array of listeners for the event named eventName.

        +

        For EventEmitters this behaves exactly the same as calling .listeners on +the emitter.

        +

        For EventTargets this is the only way to get the event listeners for the +event target. This is useful for debugging and diagnostic purposes.

        +
        import { getEventListeners, EventEmitter } from 'node:events';

        {
        const ee = new EventEmitter();
        const listener = () => console.log('Events are fun');
        ee.on('foo', listener);
        console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
        }
        {
        const et = new EventTarget();
        const listener = () => console.log('Events are fun');
        et.addEventListener('foo', listener);
        console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
        } +
        +

        Parameters

        • emitter: EventEmitter<DefaultEventMap> | _DOMEventTarget
        • name: string | symbol

        Returns Function[]

        Since

        v15.2.0, v14.17.0

        +
      • Returns the currently set max amount of listeners.

        +

        For EventEmitters this behaves exactly the same as calling .getMaxListeners on +the emitter.

        +

        For EventTargets this is the only way to get the max event listeners for the +event target. If the number of event handlers on a single EventTarget exceeds +the max set, the EventTarget will print a warning.

        +
        import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';

        {
        const ee = new EventEmitter();
        console.log(getMaxListeners(ee)); // 10
        setMaxListeners(11, ee);
        console.log(getMaxListeners(ee)); // 11
        }
        {
        const et = new EventTarget();
        console.log(getMaxListeners(et)); // 10
        setMaxListeners(11, et);
        console.log(getMaxListeners(et)); // 11
        } +
        +

        Parameters

        • emitter: EventEmitter<DefaultEventMap> | _DOMEventTarget

        Returns number

        Since

        v19.9.0

        +
      • A class method that returns the number of listeners for the given eventNameregistered on the given emitter.

        +
        import { EventEmitter, listenerCount } from 'node:events';

        const myEmitter = new EventEmitter();
        myEmitter.on('event', () => {});
        myEmitter.on('event', () => {});
        console.log(listenerCount(myEmitter, 'event'));
        // Prints: 2 +
        +

        Parameters

        • emitter: EventEmitter<DefaultEventMap>

          The emitter to query

          +
        • eventName: string | symbol

          The event name

          +

        Returns number

        Since

        v0.9.12

        +

        Deprecated

        Since v3.2.0 - Use listenerCount instead.

        +
      • import { on, EventEmitter } from 'node:events';
        import process from 'node:process';

        const ee = new EventEmitter();

        // Emit later on
        process.nextTick(() => {
        ee.emit('foo', 'bar');
        ee.emit('foo', 42);
        });

        for await (const event of on(ee, 'foo')) {
        // The execution of this inner block is synchronous and it
        // processes one event at a time (even with await). Do not use
        // if concurrent execution is required.
        console.log(event); // prints ['bar'] [42]
        }
        // Unreachable here +
        +

        Returns an AsyncIterator that iterates eventName events. It will throw +if the EventEmitter emits 'error'. It removes all listeners when +exiting the loop. The value returned by each iteration is an array +composed of the emitted event arguments.

        +

        An AbortSignal can be used to cancel waiting on events:

        +
        import { on, EventEmitter } from 'node:events';
        import process from 'node:process';

        const ac = new AbortController();

        (async () => {
        const ee = new EventEmitter();

        // Emit later on
        process.nextTick(() => {
        ee.emit('foo', 'bar');
        ee.emit('foo', 42);
        });

        for await (const event of on(ee, 'foo', { signal: ac.signal })) {
        // The execution of this inner block is synchronous and it
        // processes one event at a time (even with await). Do not use
        // if concurrent execution is required.
        console.log(event); // prints ['bar'] [42]
        }
        // Unreachable here
        })();

        process.nextTick(() => ac.abort()); +
        +

        Parameters

        • emitter: EventEmitter<DefaultEventMap>
        • eventName: string

          The name of the event being listened for

          +
        • Optional options: StaticEventEmitterOptions

        Returns AsyncIterableIterator<any>

        that iterates eventName events emitted by the emitter

        +

        Since

        v13.6.0, v12.16.0

        +
      • Creates a Promise that is fulfilled when the EventEmitter emits the given +event or that is rejected if the EventEmitter emits 'error' while waiting. +The Promise will resolve with an array of all the arguments emitted to the +given event.

        +

        This method is intentionally generic and works with the web platform EventTarget interface, which has no special'error' event +semantics and does not listen to the 'error' event.

        +
        import { once, EventEmitter } from 'node:events';
        import process from 'node:process';

        const ee = new EventEmitter();

        process.nextTick(() => {
        ee.emit('myevent', 42);
        });

        const [value] = await once(ee, 'myevent');
        console.log(value);

        const err = new Error('kaboom');
        process.nextTick(() => {
        ee.emit('error', err);
        });

        try {
        await once(ee, 'myevent');
        } catch (err) {
        console.error('error happened', err);
        } +
        +

        The special handling of the 'error' event is only used when events.once()is used to wait for another event. If events.once() is used to wait for the +'error' event itself, then it is treated as any other kind of event without +special handling:

        +
        import { EventEmitter, once } from 'node:events';

        const ee = new EventEmitter();

        once(ee, 'error')
        .then(([err]) => console.log('ok', err.message))
        .catch((err) => console.error('error', err.message));

        ee.emit('error', new Error('boom'));

        // Prints: ok boom +
        +

        An AbortSignal can be used to cancel waiting for the event:

        +
        import { EventEmitter, once } from 'node:events';

        const ee = new EventEmitter();
        const ac = new AbortController();

        async function foo(emitter, event, signal) {
        try {
        await once(emitter, event, { signal });
        console.log('event emitted!');
        } catch (error) {
        if (error.name === 'AbortError') {
        console.error('Waiting for the event was canceled!');
        } else {
        console.error('There was an error', error.message);
        }
        }
        }

        foo(ee, 'foo', ac.signal);
        ac.abort(); // Abort waiting for the event
        ee.emit('foo'); // Prints: Waiting for the event was canceled! +
        +

        Parameters

        • emitter: EventEmitter<DefaultEventMap>
        • eventName: string | symbol
        • Optional options: StaticEventEmitterOptions

        Returns Promise<any[]>

        Since

        v11.13.0, v10.16.0

        +
      • Parameters

        • emitter: _DOMEventTarget
        • eventName: string
        • Optional options: StaticEventEmitterOptions

        Returns Promise<any[]>

      • import { setMaxListeners, EventEmitter } from 'node:events';

        const target = new EventTarget();
        const emitter = new EventEmitter();

        setMaxListeners(5, target, emitter); +
        +

        Parameters

        • Optional n: number

          A non-negative number. The maximum number of listeners per EventTarget event.

          +
        • Rest ...eventTargets: (EventEmitter<DefaultEventMap> | _DOMEventTarget)[]

        Returns void

        Since

        v15.4.0

        +
      \ No newline at end of file diff --git a/classes/Task-1.html b/classes/Task-1.html new file mode 100644 index 0000000000..7eb1a70aa4 --- /dev/null +++ b/classes/Task-1.html @@ -0,0 +1,33 @@ +Task | actionhero

      Class TaskAbstract

      Create a new Actionhero Task. The required properties of an task. These can be defined statically (this.name) or as methods which return a value.

      +
      import { Task, api, log } from "actionhero"

      export default class SayHello extends Task {
      constructor () {
      super()
      this.name = 'sayHello'
      this.description = 'I say Hello every minute'
      this.frequency = (60 * 1000)
      }
      async run (data, worker) {
      log('Hello!')
      }
      } +
      +

      Constructors

      • Returns Task

      Properties

      description: string

      The description of the Task (default this.name)

      +
      frequency?: number

      How often to run this Task, in ms. 0 is non-recurring. (default: 0)

      +
      inputs?: Inputs

      The inputs of the Task (default: {})

      +
      middleware?: string[]

      The Middleware specific to this Task (default: []). Middleware is described by the string names of the middleware

      +
      name: string

      The name of the Task

      +
      pluginOptions?: {
          [key: string]: any;
      }

      Options for the node-resque plugins.

      +

      Type declaration

      • [key: string]: any
      plugins?: (string | (new (args) => Plugin))[]

      Plugins from node-resque to use on this task (default: []). Plugins like QueueLock can be applied

      +
      queue: string

      The default queue to run this Task on (default: 'default')

      +
      reEnqueuePeriodicTaskIfException?: boolean

      Re-enqueuing a periodic task in the case of an exception. (default: false)

      +

      Methods

      • The main "do something" method for this task. It can be async. Anything returned from this method will be logged. +If error is thrown in this method, it will be logged & caught. Using middleware, you can decide to re-run the task on failure. +this is a Task instance itself now.

        +

        Inputs:

        +
          +
        • data: The data about this instance of the task, specifically params.
        • +
        • worker: Instance of a node-resque worker. You can inspect worker.job and set worker.result explicitly if your Task does not return a value.
        • +
        +

        Parameters

        • data: TaskInputs
        • worker: Worker

        Returns Promise<any>

      • Returns void

      \ No newline at end of file diff --git a/enums/cache.CacheErrorMessages.html b/enums/cache.CacheErrorMessages.html new file mode 100644 index 0000000000..a6ee204b6d --- /dev/null +++ b/enums/cache.CacheErrorMessages.html @@ -0,0 +1,3 @@ +CacheErrorMessages | actionhero

      Enumeration CacheErrorMessages

      Enumeration Members

      Enumeration Members

      locked: "Object locked"
      notFound: "Object not found"
      \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..1869472babec95a26598c6f156ab4865d7cbc0e1 GIT binary patch literal 5430 zcmb_g3s96*6u$d_#RYc}w&e{AA@7GQuLXGthzN?{D49BwnI-u^$I@|11<6dyQ8KN} zM`{ikl_^fzC^{s*(gxHF@kI-wpz;b4R)^tq&%gYzyYAxd(!X=&-g{o(`TzgibI-qo za0r*!+7dd-NFJXMA3}&srd}VU{LPf-M|pHgHPn1My!4W~&zQsI32h81a=4aOj9+s5h{8f|Pt&`Z}-KE#~&$j^;xpYH*!a5 zc;0m3mm&p?{jnV5 zt!n6o${SDNwT1T~IR5Y%R_+z@@n#EwREj?AohD{c-wja{|7y{sn8|g$826vbZit!u zPp_s7=aCbt9!TADXKKcwIroX!esI&?R`~j-HVBLtW-f8fo{4eKTiFCoo^LKP z#zs?zZy~mgnRNI0*eOb&x$CYeGj<*r`+a$6;_)hD^>y`V-1%<4%L;Y*#;$SCS&N6> zF93w}G!gQonvf2$np7TysBkVIq=H9CA%~FOL_+!s1_|gKZE>T^C?!$CdSvQl@06aw zQdnYCR~_vyGFhOAGz{>87vC*fYgIwc(G`$FB-)z`NUQ0y;bYu&4%8@F+|0xNxb z+B`1T&3DO4+~;U3Ppzz_a+6|b{o$Fy;^P>ac8a+3HA*uEtWkE3X&JgcY(|Aegpa>ar>To`k-Z{LSJ#wvNW#(c=x179BjEXgb36w; z0zO#B;qb8LbDg~AyhC$Eg|fKpdYGAipV5mio zp!SWtps}Upz7g9G;2a6hhLhD@khiLdS&t6evPa9A84IDvFM#!b?&edt)1iW#w;LJ% zEFZ_DY4vcuxd(2wsUTshIv#uHjBGO?bxpY8sb_B?M)84GXjDCiPjtWX~48}94U=!lcUiyH+sCm=_r>=Hs5%v^_kG%ov`YZO8>E4LBYq2CI z0evD}y|2bWEL~D|J%iL4>Kt|Om}RgZG&K%8#|asj^N7FuNIQeOwWN*7bIkQMTOTvL zW0#&VI;iL3owtv;xQbJhF8H{z=j)=n&m zOE48zWEZ6fOZmM9>jz6w6R$CSHsWE9iUq%8;Tn{_bGyaEwU1)F5%0 zWXxXVx_Hme$Nq}-rEkO>NBn)icEE;REzEq&cdY~X`fOsel;9b(b`ytVVX5zV;CU;S z#3~#-Ue7f|KJw4MLEo6;nCnSh{8GCl`eX+qqXai^-}spo2qq3Dboofr$| zI=lbzdjfgbuNdQl(MhSiE_IteP2am1ipQQunCp1&7{mMz`_CKs@Xwo}uu&!y`3{^% znDaMVRS=(}e!lq4^D_JYLC%$@R5H1OIe)Nx@Vuel=w{a%Q{uv&3g0*8{QDdF&ztDI zhfVP@99?=I#j*Q=t$_}*S#yWu(-d1g7qG6eG2r=NX{G+|HO0?xbm`f$hs6($KXP_B zzRa=3-ipOH=ljMSOidf?t+2oDt~N2T;(5Kabu55O)-SKncL904St?B@}W7se%W9gnu#6v6qlU l6(M3!3ZQ}zULpOf0aRiDmB%3UCIYb3S3tq~3Ft_#{{Yc!lQIAR literal 0 HcmV?d00001 diff --git a/functions/action.addMiddleware.html b/functions/action.addMiddleware.html new file mode 100644 index 0000000000..137067cf32 --- /dev/null +++ b/functions/action.addMiddleware.html @@ -0,0 +1,2 @@ +addMiddleware | actionhero

      Function addMiddleware

      • Add a middleware component available to pre or post-process actions.

        +

        Parameters

        Returns void

      \ No newline at end of file diff --git a/functions/action.run.html b/functions/action.run.html new file mode 100644 index 0000000000..7896637c2a --- /dev/null +++ b/functions/action.run.html @@ -0,0 +1,2 @@ +run | actionhero
      • Run an Action in-line, perhaps from within another Action or Task.

        +

        Type Parameters

        • ActionClass

        Parameters

        • actionName: string
        • Optional actionVersion: string | number
        • params: {
              [key: string]: any;
          } = {}
          • [key: string]: any
        • connectionProperties: {} = {}

          Returns Promise<{
              [key: string]: any;
          }>

        \ No newline at end of file diff --git a/functions/cache.checkLock.html b/functions/cache.checkLock.html new file mode 100644 index 0000000000..db39a97775 --- /dev/null +++ b/functions/cache.checkLock.html @@ -0,0 +1 @@ +checkLock | actionhero

        Function checkLock

        • Parameters

          • key: string
          • retry: number | boolean = false
          • startTime: number = ...

          Returns Promise<boolean>

        \ No newline at end of file diff --git a/functions/cache.clear.html b/functions/cache.clear.html new file mode 100644 index 0000000000..f53ac69db1 --- /dev/null +++ b/functions/cache.clear.html @@ -0,0 +1,3 @@ +clear | actionhero

        Function clear

        • Removes all keys in redis which are under this Actionhero namespace. Potentially very slow. +Returns the deleted keys.

          +

          Parameters

          • pattern: string = ...

          Returns Promise<string[]>

        \ No newline at end of file diff --git a/functions/cache.client.html b/functions/cache.client.html new file mode 100644 index 0000000000..94d930b95b --- /dev/null +++ b/functions/cache.client.html @@ -0,0 +1 @@ +client | actionhero

        Function client

        • Returns Redis

        \ No newline at end of file diff --git a/functions/cache.destroy.html b/functions/cache.destroy.html new file mode 100644 index 0000000000..0d141e55cc --- /dev/null +++ b/functions/cache.destroy.html @@ -0,0 +1,3 @@ +destroy | actionhero

        Function destroy

        • Delete an item in the cache. Will throw an error if the item named by key is locked. +Automatically handles api.cache.redisPrefix

          +

          Parameters

          • key: string

          Returns Promise<boolean>

        \ No newline at end of file diff --git a/functions/cache.dumpRead.html b/functions/cache.dumpRead.html new file mode 100644 index 0000000000..6aa30bea34 --- /dev/null +++ b/functions/cache.dumpRead.html @@ -0,0 +1,3 @@ +dumpRead | actionhero

        Function dumpRead

        • Load in contents for redis (and api.cache) saved to a file +Warning! Any existing keys in redis (under this Actionhero namespace) will be removed.

          +

          Parameters

          • file: string

          Returns Promise<number>

        \ No newline at end of file diff --git a/functions/cache.dumpWrite.html b/functions/cache.dumpWrite.html new file mode 100644 index 0000000000..d44e0bbd8b --- /dev/null +++ b/functions/cache.dumpWrite.html @@ -0,0 +1,2 @@ +dumpWrite | actionhero

        Function dumpWrite

        • Write the current concents of redis (only the keys in Actionhero's namespace) to a file.

          +

          Parameters

          • file: string

          Returns Promise<number>

        \ No newline at end of file diff --git a/functions/cache.getKeys.html b/functions/cache.getKeys.html new file mode 100644 index 0000000000..8d2a7ae1a4 --- /dev/null +++ b/functions/cache.getKeys.html @@ -0,0 +1,3 @@ +getKeys | actionhero

        Function getKeys

        • A generic method to find all keys which match a pattern.

          +

          Parameters

          • pattern: string
          • count: number = scanCount
          • keysAry: string[] = []
          • cursor: number = 0

          Returns Promise<string[]>

          Pattern

          likely has a * at the end of the string. Other arguments are for recursion and not required.

          +
        \ No newline at end of file diff --git a/functions/cache.keys.html b/functions/cache.keys.html new file mode 100644 index 0000000000..690c6151eb --- /dev/null +++ b/functions/cache.keys.html @@ -0,0 +1,2 @@ +keys | actionhero

        Function keys

        • Returns all the keys in redis which are under this Actionhero namespace. Potentially very slow.

          +

          Parameters

          • optionalScopePrefix: string = ""

          Returns Promise<string[]>

        \ No newline at end of file diff --git a/functions/cache.listLength.html b/functions/cache.listLength.html new file mode 100644 index 0000000000..b8a66f1931 --- /dev/null +++ b/functions/cache.listLength.html @@ -0,0 +1,2 @@ +listLength | actionhero

        Function listLength

        • Check how many items are stored in a shared queue/list in redis.

          +

          Parameters

          • key: string

          Returns Promise<number>

        \ No newline at end of file diff --git a/functions/cache.load.html b/functions/cache.load.html new file mode 100644 index 0000000000..6070ae1866 --- /dev/null +++ b/functions/cache.load.html @@ -0,0 +1,3 @@ +load | actionhero

        Function load

        • Load an item from the cache. Will throw an error if the item named by key cannot be found. +Automatically handles api.cache.redisPrefix

          +

          Parameters

          Returns Promise<CacheObject>

        \ No newline at end of file diff --git a/functions/cache.lock.html b/functions/cache.lock.html new file mode 100644 index 0000000000..b182eb8fcc --- /dev/null +++ b/functions/cache.lock.html @@ -0,0 +1,2 @@ +lock | actionhero

        Function lock

        • Lock an item in redis (can be a list or a saved item) to this Actionhero process.

          +

          Parameters

          • key: string
          • expireTimeMS: number = lockDuration

          Returns Promise<boolean>

        \ No newline at end of file diff --git a/functions/cache.lockName.html b/functions/cache.lockName.html new file mode 100644 index 0000000000..a2976cad1b --- /dev/null +++ b/functions/cache.lockName.html @@ -0,0 +1 @@ +lockName | actionhero

        Function lockName

        • Returns string

        \ No newline at end of file diff --git a/functions/cache.locks.html b/functions/cache.locks.html new file mode 100644 index 0000000000..455bdf7afb --- /dev/null +++ b/functions/cache.locks.html @@ -0,0 +1,2 @@ +locks | actionhero

        Function locks

        • Returns all the locks in redis which are under this Actionhero namespace. Potentially slow.

          +

          Parameters

          • optionalScopePrefix: string = ""

          Returns Promise<string[]>

        \ No newline at end of file diff --git a/functions/cache.overrideLockName.html b/functions/cache.overrideLockName.html new file mode 100644 index 0000000000..734437f959 --- /dev/null +++ b/functions/cache.overrideLockName.html @@ -0,0 +1 @@ +overrideLockName | actionhero

        Function overrideLockName

        • Parameters

          • name: string

          Returns void

        \ No newline at end of file diff --git a/functions/cache.pop.html b/functions/cache.pop.html new file mode 100644 index 0000000000..ab6bcdeb35 --- /dev/null +++ b/functions/cache.pop.html @@ -0,0 +1,3 @@ +pop | actionhero

        Function pop

        • Pop (get) an item to a shared queue/list in redis. +Automatically handles api.cache.redisPrefix

          +

          Parameters

          • key: string

          Returns Promise<boolean>

        \ No newline at end of file diff --git a/functions/cache.push.html b/functions/cache.push.html new file mode 100644 index 0000000000..8cb9a933a1 --- /dev/null +++ b/functions/cache.push.html @@ -0,0 +1,3 @@ +push | actionhero

        Function push

        • Push an item to a shared queue/list in redis. +Automatically handles api.cache.redisPrefix

          +

          Parameters

          • key: string
          • item: any

          Returns Promise<boolean>

        \ No newline at end of file diff --git a/functions/cache.save.html b/functions/cache.save.html new file mode 100644 index 0000000000..b1d788c144 --- /dev/null +++ b/functions/cache.save.html @@ -0,0 +1,3 @@ +save | actionhero

        Function save

        • Save an item in the cache. If an item is already in the cache with the same key, it will be overwritten. Throws an error if the object is already in the cache and is locked. +Automatically handles api.cache.redisPrefix

          +

          Parameters

          • key: string
          • value: any
          • Optional expireTimeMS: number

          Returns Promise<boolean>

        \ No newline at end of file diff --git a/functions/cache.size.html b/functions/cache.size.html new file mode 100644 index 0000000000..7139780e88 --- /dev/null +++ b/functions/cache.size.html @@ -0,0 +1,2 @@ +size | actionhero

        Function size

        • Returns the number of keys in redis which are under this Actionhero namespace. Potentially very slow.

          +

          Parameters

          • pattern: string = ...

          Returns Promise<number>

        \ No newline at end of file diff --git a/functions/cache.unlock.html b/functions/cache.unlock.html new file mode 100644 index 0000000000..9deaccec8e --- /dev/null +++ b/functions/cache.unlock.html @@ -0,0 +1,2 @@ +unlock | actionhero

        Function unlock

        • Unlock an item in redis (can be a list or a saved item) which was previously locked by this Actionhero process.

          +

          Parameters

          • key: string

          Returns Promise<boolean>

        \ No newline at end of file diff --git a/functions/chatRoom.add.html b/functions/chatRoom.add.html new file mode 100644 index 0000000000..870656b68e --- /dev/null +++ b/functions/chatRoom.add.html @@ -0,0 +1,2 @@ +add | actionhero
        • Add a new chat room. Throws an error if the room already exists.

          +

          Parameters

          • room: string

          Returns Promise<number>

        \ No newline at end of file diff --git a/functions/chatRoom.addMember.html b/functions/chatRoom.addMember.html new file mode 100644 index 0000000000..4c3be58aa0 --- /dev/null +++ b/functions/chatRoom.addMember.html @@ -0,0 +1,2 @@ +addMember | actionhero

        Function addMember

        • Add a connection (via id) to a room. Throws errors if the room does not exist, or the connection is already in the room. Middleware errors also throw.

          +

          Parameters

          • connectionId: string
          • room: string

          Returns Promise<any>

        \ No newline at end of file diff --git a/functions/chatRoom.addMiddleware.html b/functions/chatRoom.addMiddleware.html new file mode 100644 index 0000000000..76c498156c --- /dev/null +++ b/functions/chatRoom.addMiddleware.html @@ -0,0 +1,2 @@ +addMiddleware | actionhero

        Function addMiddleware

        • Add a middleware component to connection handling.

          +

          Parameters

          Returns Promise<void>

        \ No newline at end of file diff --git a/functions/chatRoom.broadcast.html b/functions/chatRoom.broadcast.html new file mode 100644 index 0000000000..7a8a36beea --- /dev/null +++ b/functions/chatRoom.broadcast.html @@ -0,0 +1,10 @@ +broadcast | actionhero

        Function broadcast

        • Send a message to all clients connected to this room

          +
            +
          • connection: + - {} send to every connections + - should either be a real client you are emulating (found in api.connections) + - a mock
          • +
          • room is the string name of an already-existing room
          • +
          • message can be anything: string, json, object, etc
          • +
          +

          Parameters

          • connection: Partial<Connection>
          • room: string
          • message: any

          Returns Promise<void>

        \ No newline at end of file diff --git a/functions/chatRoom.client.html b/functions/chatRoom.client.html new file mode 100644 index 0000000000..55751a4989 --- /dev/null +++ b/functions/chatRoom.client.html @@ -0,0 +1 @@ +client | actionhero
        • Returns Redis

        \ No newline at end of file diff --git a/functions/chatRoom.destroy.html b/functions/chatRoom.destroy.html new file mode 100644 index 0000000000..6448eff035 --- /dev/null +++ b/functions/chatRoom.destroy.html @@ -0,0 +1,2 @@ +destroy | actionhero
        • Remove an existing chat room. All connections in the room will be removed. Throws an error if the room does not exist.

          +

          Parameters

          • room: string

          Returns Promise<void>

        \ No newline at end of file diff --git a/functions/chatRoom.exists.html b/functions/chatRoom.exists.html new file mode 100644 index 0000000000..93f1c74bd4 --- /dev/null +++ b/functions/chatRoom.exists.html @@ -0,0 +1,2 @@ +exists | actionhero
        • Check if a room exists.

          +

          Parameters

          • room: string

          Returns Promise<boolean>

        \ No newline at end of file diff --git a/functions/chatRoom.generateMemberDetails.html b/functions/chatRoom.generateMemberDetails.html new file mode 100644 index 0000000000..b76de51e2f --- /dev/null +++ b/functions/chatRoom.generateMemberDetails.html @@ -0,0 +1,2 @@ +generateMemberDetails | actionhero

        Function generateMemberDetails

        • An overwrite-able method which configures what properties of connections in a room are initially stored about a connection when added via api.chatRoom.addMember

          +

          Parameters

          Returns Promise<{
              host: string;
              id: string;
              joinedAt: number;
          }>

        \ No newline at end of file diff --git a/functions/chatRoom.list.html b/functions/chatRoom.list.html new file mode 100644 index 0000000000..c05eebcaec --- /dev/null +++ b/functions/chatRoom.list.html @@ -0,0 +1,2 @@ +list | actionhero
        • List all chat rooms created

          +

          Returns Promise<string[]>

        \ No newline at end of file diff --git a/functions/chatRoom.removeMember.html b/functions/chatRoom.removeMember.html new file mode 100644 index 0000000000..bf05f6aacd --- /dev/null +++ b/functions/chatRoom.removeMember.html @@ -0,0 +1,3 @@ +removeMember | actionhero

        Function removeMember

        • Remote a connection (via id) from a room. Throws errors if the room does not exist, or the connection is not in the room. Middleware errors also throw. +toWaitRemote: Should this method wait until the remote Actionhero server (the one the connection is connected too) responds?

          +

          Parameters

          • connectionId: string
          • room: string
          • toWaitRemote: boolean = true

          Returns Promise<any>

        \ No newline at end of file diff --git a/functions/chatRoom.roomStatus.html b/functions/chatRoom.roomStatus.html new file mode 100644 index 0000000000..65b56c5100 --- /dev/null +++ b/functions/chatRoom.roomStatus.html @@ -0,0 +1,3 @@ +roomStatus | actionhero

        Function roomStatus

        • Learn about the connections in the room. +Returns a hash of the form { room: room, members: cleanedMembers, membersCount: count }. Members is an array of connections in the room sanitized via api.chatRoom.sanitizeMemberDetails

          +

          Parameters

          • room: string

          Returns Promise<{
              members: Record<string, AsyncReturnType<typeof sanitizeMemberDetails>>;
              membersCount: number;
              room: string;
          }>

        \ No newline at end of file diff --git a/functions/chatRoom.sanitizeMemberDetails.html b/functions/chatRoom.sanitizeMemberDetails.html new file mode 100644 index 0000000000..132c09aa94 --- /dev/null +++ b/functions/chatRoom.sanitizeMemberDetails.html @@ -0,0 +1,2 @@ +sanitizeMemberDetails | actionhero

        Function sanitizeMemberDetails

        • Configures what properties of connections in a room to return via api.chatRoom.roomStatus

          +

          Parameters

          • memberData: {
                id: string;
                joinedAt: number;
                [key: string]: any;
            }
            • [key: string]: any
            • id: string
            • joinedAt: number

          Returns Promise<{
              id: string;
              joinedAt: number;
          }>

        \ No newline at end of file diff --git a/functions/log.html b/functions/log.html new file mode 100644 index 0000000000..93d9fe40b9 --- /dev/null +++ b/functions/log.html @@ -0,0 +1,8 @@ +log | actionhero

        Function log

        • Log a message, with optional metadata. The message can be logged to a number of locations (stdio, files, etc) as configured via config/logger.js

          +

          The most basic use. Will assume 'info' as the severity: log('hello') +Custom severity: log('OH NO!', 'warning') +Custom severity with a metadata object: log('OH NO, something went wrong', 'warning', { error: new Error('things are busted') })

          +

          The default log levels are: emerg: 0, alert: 1, crit: 2, error: 3, warning: 4, notice: 5, info: 6, debug: 7. +Logging levels in winston conform to the severity ordering specified by RFC5424: severity of all levels is assumed to be numerically ascending from most important to least important. +Learn more at https://github.com/winstonjs/winston

          +

          Parameters

          Returns void

        \ No newline at end of file diff --git a/functions/rebuildConfig.html b/functions/rebuildConfig.html new file mode 100644 index 0000000000..c98409378b --- /dev/null +++ b/functions/rebuildConfig.html @@ -0,0 +1,2 @@ +rebuildConfig | actionhero

        Function rebuildConfig

        • Rebuild Actionhero's config object. Useful when Environment variables effecting the config may have changed.

          +

          Returns void

        \ No newline at end of file diff --git a/functions/redis.doCluster.html b/functions/redis.doCluster.html new file mode 100644 index 0000000000..d305ed286e --- /dev/null +++ b/functions/redis.doCluster.html @@ -0,0 +1,2 @@ +doCluster | actionhero

        Function doCluster

        • Invoke a command on all servers in this cluster.

          +

          Type Parameters

          • T

          Parameters

          • method: string
          • args: any[] = []
          • Optional connectionId: string
          • waitForResponse: boolean = false

          Returns Promise<T extends any
              ? T
              : unknown>

        \ No newline at end of file diff --git a/functions/redis.publish.html b/functions/redis.publish.html new file mode 100644 index 0000000000..d0966e5925 --- /dev/null +++ b/functions/redis.publish.html @@ -0,0 +1,4 @@ +publish | actionhero

        Function publish

        • Publish a message to all other Actionhero nodes in the cluster. Will be authenticated against api.config.serverToken

          +
          let payload = {
          messageType: 'myMessageType',
          serverId: api.id,
          serverToken: api.config.general.serverToken,
          message: 'hello!'
          }

          await api.redis.publish(payload) +
          +

          Parameters

          • payload: object | any[]

          Returns Promise<number>

        \ No newline at end of file diff --git a/functions/redis.respondCluster.html b/functions/redis.respondCluster.html new file mode 100644 index 0000000000..92072d2f30 --- /dev/null +++ b/functions/redis.respondCluster.html @@ -0,0 +1 @@ +respondCluster | actionhero

        Function respondCluster

        • Parameters

          Returns Promise<void>

        \ No newline at end of file diff --git a/functions/route.registerRoute.html b/functions/route.registerRoute.html new file mode 100644 index 0000000000..f7f876d59c --- /dev/null +++ b/functions/route.registerRoute.html @@ -0,0 +1,11 @@ +registerRoute | actionhero

        Function registerRoute

        • Programmatically define a route, rather than using config.routes. This is useful for plugins which may define routes as well. +You can use both routes.registerRoute and config.routes in the same project.

          +
            +
          • method: HTTP verb (get, put, etc)
          • +
          • path: The route in question. Can use variables.
          • +
          • action: The action to call with this route.
          • +
          • apiVersion: The version of the action to call, if more than one.
          • +
          • matchTrailingPathParts: Allows the final segment of your route to absorb all trailing path parts in a matched variable. (ie: /api/user would match /api/user/123)
          • +
          • dir: Which folder to serve static files from (must by included in config.general.paths)
          • +
          +

          Parameters

          • method: string
          • path: string
          • action: string
          • Optional apiVersion: string | number
          • matchTrailingPathParts: boolean = false
          • Optional dir: string

          Returns void

        \ No newline at end of file diff --git a/functions/specHelper.buildConnection.html b/functions/specHelper.buildConnection.html new file mode 100644 index 0000000000..7e975f989f --- /dev/null +++ b/functions/specHelper.buildConnection.html @@ -0,0 +1,2 @@ +buildConnection | actionhero

        Function buildConnection

        • Generate a connection to use in your tests

          +

          Returns Promise<SpecHelperConnection>

        \ No newline at end of file diff --git a/functions/specHelper.deleteEnqueuedTasks.html b/functions/specHelper.deleteEnqueuedTasks.html new file mode 100644 index 0000000000..1adc7e8ddb --- /dev/null +++ b/functions/specHelper.deleteEnqueuedTasks.html @@ -0,0 +1,2 @@ +deleteEnqueuedTasks | actionhero

        Function deleteEnqueuedTasks

        • Delete all enqueued instances of a task, both in all the normal queues and all of the delayed queues

          +

          Parameters

          • taskName: string
          • params: {}

            Returns Promise<void>

          \ No newline at end of file diff --git a/functions/specHelper.findEnqueuedTasks.html b/functions/specHelper.findEnqueuedTasks.html new file mode 100644 index 0000000000..d01986998f --- /dev/null +++ b/functions/specHelper.findEnqueuedTasks.html @@ -0,0 +1,5 @@ +findEnqueuedTasks | actionhero

          Function findEnqueuedTasks

          • Use the specHelper to find enqueued instances of a task +This will return an array of instances of the task which have been enqueued either in the normal queues or delayed queues +If a task is enqueued in a delayed queue, it will have a 'timestamp' property +i.e. [ { class: 'regularTask', queue: 'testQueue', args: [ [Object] ] } ]

            +

            Parameters

            • taskName: string

            Returns Promise<TaskInputs[]>

          \ No newline at end of file diff --git a/functions/specHelper.getStaticFile.html b/functions/specHelper.getStaticFile.html new file mode 100644 index 0000000000..bcf95c5e7b --- /dev/null +++ b/functions/specHelper.getStaticFile.html @@ -0,0 +1,2 @@ +getStaticFile | actionhero

          Function getStaticFile

          • Mock a specHelper connection requesting a file from the server.

            +

            Parameters

            • file: string

            Returns Promise<any>

          \ No newline at end of file diff --git a/functions/specHelper.runAction.html b/functions/specHelper.runAction.html new file mode 100644 index 0000000000..4762d29df5 --- /dev/null +++ b/functions/specHelper.runAction.html @@ -0,0 +1,2 @@ +runAction | actionhero
          • Run an action via the specHelper server.

            +

            Type Parameters

            • A extends void | Action = void

            Parameters

            • actionName: string
            • input: Record<string, any> | Partial<SpecHelperConnection> = {}

            Returns Promise<(A extends Action
                ? AsyncReturnType<A<A>["run"]>
                : {
                    [key: string]: any;
                }) & {
                error?: any;
                messageId?: string;
                requesterInformation?: {
                    fingerprint: string;
                    id: string;
                    messageId: string;
                    receivedParams: {
                        [key: string]: any;
                    };
                    remoteIP: string;
                };
                serverInformation?: {
                    apiVersion: string;
                    currentTime: number;
                    requestDuration: number;
                    serverName: string;
                };
            }>

          \ No newline at end of file diff --git a/functions/specHelper.runFullTask.html b/functions/specHelper.runFullTask.html new file mode 100644 index 0000000000..1b3921353c --- /dev/null +++ b/functions/specHelper.runFullTask.html @@ -0,0 +1,3 @@ +runFullTask | actionhero
          • Use the specHelper to run a task. +Note: this will run a full Task worker, and will also include any middleware. This is slower than api.specHelper.runTask.

            +

            Type Parameters

            • T extends void | Task = void

            Parameters

            • taskName: string
            • params: object | any[]

            Returns Promise<(T extends Task
                ? AsyncReturnType<T<T>["run"]>
                : {
                    [key: string]: any;
                }) & {
                error?: string;
            }>

          \ No newline at end of file diff --git a/functions/specHelper.runTask.html b/functions/specHelper.runTask.html new file mode 100644 index 0000000000..e960627267 --- /dev/null +++ b/functions/specHelper.runTask.html @@ -0,0 +1,3 @@ +runTask | actionhero
          • Use the specHelper to run a task. +Note: this only runs the task's run() method, and no middleware. This is faster than api.specHelper.runFullTask.

            +

            Type Parameters

            • T extends void | Task = void

            Parameters

            • taskName: string
            • params: object | any[]

            Returns Promise<(T extends Task
                ? AsyncReturnType<T<T>["run"]>
                : {
                    [key: string]: any;
                }) & {
                error?: string | ErrnoException;
            }>

          \ No newline at end of file diff --git a/functions/task.addMiddleware.html b/functions/task.addMiddleware.html new file mode 100644 index 0000000000..165c0a6add --- /dev/null +++ b/functions/task.addMiddleware.html @@ -0,0 +1 @@ +addMiddleware | actionhero

          Function addMiddleware

          • Parameters

            Returns Promise<void>

          \ No newline at end of file diff --git a/functions/task.allDelayed.html b/functions/task.allDelayed.html new file mode 100644 index 0000000000..234e731726 --- /dev/null +++ b/functions/task.allDelayed.html @@ -0,0 +1,4 @@ +allDelayed | actionhero

          Function allDelayed

          • Return all delayed jobs, organized by the timestamp at where they are to run at. +Note: This is a very slow command. +Will throw an error if redis cannot be reached.

            +

            Returns Promise<{
                [timestamp: string]: any[];
            }>

          \ No newline at end of file diff --git a/functions/task.allWorkingOn.html b/functions/task.allWorkingOn.html new file mode 100644 index 0000000000..0c11d45e58 --- /dev/null +++ b/functions/task.allWorkingOn.html @@ -0,0 +1,3 @@ +allWorkingOn | actionhero

          Function allWorkingOn

          • Return all workers and what job they might be working on. +Will throw an error if redis cannot be reached.

            +

            Returns Promise<{
                [key: string]: ParsedWorkerPayload;
            }>

          \ No newline at end of file diff --git a/functions/task.cleanOldWorkers.html b/functions/task.cleanOldWorkers.html new file mode 100644 index 0000000000..0c6a338e2a --- /dev/null +++ b/functions/task.cleanOldWorkers.html @@ -0,0 +1,6 @@ +cleanOldWorkers | actionhero

          Function cleanOldWorkers

          • If a worker process crashes, it will leave its state in redis as "working". +You can remove workers from redis you know to be over, by specificizing an age which would make them too old to exist. +This method will remove the data created by a 'stuck' worker and move the payload to the error queue. +However, it will not actually remove any processes which may be running. A job may be running that you have removed. +Will throw an error if redis cannot be reached.

            +

            Parameters

            • age: number

            Returns Promise<{
                [key: string]: any;
            }>

          \ No newline at end of file diff --git a/functions/task.del.html b/functions/task.del.html new file mode 100644 index 0000000000..1367f2d98f --- /dev/null +++ b/functions/task.del.html @@ -0,0 +1,10 @@ +del | actionhero

          Function del

          • Delete a previously enqueued task, which hasn't been run yet, from a queue. +Will throw an error if redis cannot be reached.

            +

            Inputs:

            +
              +
            • q: Which queue/priority is the task stored on?
            • +
            • taskName: The name of the job, likely to be the same name as a tak.
            • +
            • args: The arguments of the job. Note, arguments passed to a Task initially may be modified when enqueuing. It is best to read job properties first via api.tasks.queued or similar method.
            • +
            • count: Of the jobs that match q, taskName, and args, up to what position should we delete? (Default 0; this command is 0-indexed)
            • +
            +

            Parameters

            • q: string
            • taskName: string
            • Optional args: TaskInputs
            • Optional count: number

            Returns Promise<number>

          \ No newline at end of file diff --git a/functions/task.delByFunction.html b/functions/task.delByFunction.html new file mode 100644 index 0000000000..852263389f --- /dev/null +++ b/functions/task.delByFunction.html @@ -0,0 +1,13 @@ +delByFunction | actionhero

          Function delByFunction

            • +
            • will delete all jobs in the given queue of the named function/class
            • +
            • will not prevent new jobs from being added as this method is running
            • +
            • will not delete jobs in the delayed queues
            • +
            +

            Inputs:

            +
              +
            • q: Which queue/priority is to run on?
            • +
            • taskName: The name of the job, likely to be the same name as a tak.
            • +
            • start? - starting position of task count to remove
            • +
            • stop? - stop position of task count to remove
            • +
            +

            Parameters

            • q: string
            • taskName: string
            • Optional start: number
            • Optional stop: number

            Returns Promise<number>

          \ No newline at end of file diff --git a/functions/task.delDelayed.html b/functions/task.delDelayed.html new file mode 100644 index 0000000000..5156d9debd --- /dev/null +++ b/functions/task.delDelayed.html @@ -0,0 +1,9 @@ +delDelayed | actionhero

          Function delDelayed

          • Delete all previously enqueued tasks, which haven't been run yet, from all possible delayed timestamps. +Will throw an error if redis cannot be reached.

            +

            Inputs:

            +
              +
            • q: Which queue/priority is to run on?
            • +
            • taskName: The name of the job, likely to be the same name as a tak.
            • +
            • inputs The arguments of the job. Note, arguments passed to a Task initially may be modified when enqueuing. It is best to read job properties first via api.tasks.delayedAt or similar method.
            • +
            +

            Parameters

            • q: string
            • taskName: string
            • Optional inputs: TaskInputs

            Returns Promise<number[]>

          \ No newline at end of file diff --git a/functions/task.delLock.html b/functions/task.delLock.html new file mode 100644 index 0000000000..1b74e0e8a5 --- /dev/null +++ b/functions/task.delLock.html @@ -0,0 +1,3 @@ +delLock | actionhero

          Function delLock

          • Delete a lock on a job or worker. Locks can be found via api.tasks.locks +Will throw an error if redis cannot be reached.

            +

            Parameters

            • lock: string

            Returns Promise<number>

          \ No newline at end of file diff --git a/functions/task.delQueue.html b/functions/task.delQueue.html new file mode 100644 index 0000000000..dd41d3df78 --- /dev/null +++ b/functions/task.delQueue.html @@ -0,0 +1,3 @@ +delQueue | actionhero

          Function delQueue

          • Delete a queue in redis, and all jobs stored on it. +Will throw an error if redis cannot be reached.

            +

            Parameters

            • q: string

            Returns Promise<void>

          \ No newline at end of file diff --git a/functions/task.delayedAt.html b/functions/task.delayedAt.html new file mode 100644 index 0000000000..f705d50aa7 --- /dev/null +++ b/functions/task.delayedAt.html @@ -0,0 +1,3 @@ +delayedAt | actionhero

          Function delayedAt

          • Return all jobs which have been enqueued to run at a certain timestamp. +Will throw an error if redis cannot be reached.

            +

            Parameters

            • timestamp: number

            Returns Promise<any>

          \ No newline at end of file diff --git a/functions/task.details.html b/functions/task.details.html new file mode 100644 index 0000000000..7b90085c59 --- /dev/null +++ b/functions/task.details.html @@ -0,0 +1,3 @@ +details | actionhero

          Function details

          • Return wholistic details about the task system, including failures, queues, and workers. +Will throw an error if redis cannot be reached.

            +

            Returns Promise<{
                leader: string;
                queues: {
                    [key: string]: any;
                };
                stats: {
                    [key: string]: any;
                };
                workers: {
                    [key: string]: any;
                };
            }>

          \ No newline at end of file diff --git a/functions/task.enqueue.html b/functions/task.enqueue.html new file mode 100644 index 0000000000..bc0e1e7569 --- /dev/null +++ b/functions/task.enqueue.html @@ -0,0 +1,3 @@ +enqueue | actionhero

          Function enqueue

          • Enqueue a task to be performed in the background. +Will throw an error if redis cannot be reached.

            +

            Parameters

            • taskName: string
            • Optional inputs: TaskInputs
            • queue: string = ...

            Returns Promise<boolean>

          \ No newline at end of file diff --git a/functions/task.enqueueAllRecurrentTasks.html b/functions/task.enqueueAllRecurrentTasks.html new file mode 100644 index 0000000000..80cd3a709a --- /dev/null +++ b/functions/task.enqueueAllRecurrentTasks.html @@ -0,0 +1,3 @@ +enqueueAllRecurrentTasks | actionhero

          Function enqueueAllRecurrentTasks

          • This is run automatically at boot for all tasks which have a frequency, calling api.tasks.enqueueRecurrentTask +Will throw an error if redis cannot be reached.

            +

            Returns Promise<string[]>

          \ No newline at end of file diff --git a/functions/task.enqueueAt.html b/functions/task.enqueueAt.html new file mode 100644 index 0000000000..de21d076df --- /dev/null +++ b/functions/task.enqueueAt.html @@ -0,0 +1,10 @@ +enqueueAt | actionhero

          Function enqueueAt

          • Enqueue a task to be performed in the background, at a certain time in the future. +Will throw an error if redis cannot be reached.

            +

            Inputs:

            +
              +
            • taskName: The name of the task.
            • +
            • inputs: inputs to pass to the task.
            • +
            • queue: (Optional) Which queue/priority to run this instance of the task on.
            • +
            • suppressDuplicateTaskError: (optional) Suppress errors when the same task with the same arguments are double-enqueued for the same time
            • +
            +

            Parameters

            • timestamp: number
            • taskName: string
            • Optional inputs: TaskInputs
            • queue: string = ...
            • suppressDuplicateTaskError: boolean = false

            Returns Promise<void>

          \ No newline at end of file diff --git a/functions/task.enqueueIn.html b/functions/task.enqueueIn.html new file mode 100644 index 0000000000..3ed1c9094a --- /dev/null +++ b/functions/task.enqueueIn.html @@ -0,0 +1,11 @@ +enqueueIn | actionhero

          Function enqueueIn

          • Enqueue a task to be performed in the background, at a certain number of ms from now. +Will throw an error if redis cannot be reached.

            +

            Inputs:

            +
              +
            • timestamp: At what time the task is able to be run. Does not guarantee that the task will be run at this time. (in ms)
            • +
            • taskName: The name of the task.
            • +
            • inputs: inputs to pass to the task.
            • +
            • queue: (Optional) Which queue/priority to run this instance of the task on.
            • +
            • suppressDuplicateTaskError: (optional) Suppress errors when the same task with the same arguments are double-enqueued for the same time
            • +
            +

            Parameters

            • time: number
            • taskName: string
            • Optional inputs: TaskInputs
            • queue: string = ...
            • suppressDuplicateTaskError: boolean = false

            Returns Promise<void>

          \ No newline at end of file diff --git a/functions/task.enqueueRecurrentTask.html b/functions/task.enqueueRecurrentTask.html new file mode 100644 index 0000000000..1ae748f43a --- /dev/null +++ b/functions/task.enqueueRecurrentTask.html @@ -0,0 +1,4 @@ +enqueueRecurrentTask | actionhero

          Function enqueueRecurrentTask

          • Ensures that a task which has a frequency is either running, or already enqueued. +This is run automatically at boot for all tasks which have a frequency, via api.tasks.enqueueAllRecurrentTasks. +Will throw an error if redis cannot be reached.

            +

            Parameters

            • taskName: string

            Returns Promise<void>

          \ No newline at end of file diff --git a/functions/task.failed.html b/functions/task.failed.html new file mode 100644 index 0000000000..cb8e6f6be9 --- /dev/null +++ b/functions/task.failed.html @@ -0,0 +1,3 @@ +failed | actionhero

          Function failed

          • Retrieve the details of failed jobs between start and stop (0-indexed). +Will throw an error if redis cannot be reached.

            +

            Parameters

            • start: number
            • stop: number

            Returns Promise<ParsedFailedJobPayload[]>

          \ No newline at end of file diff --git a/functions/task.failedCount.html b/functions/task.failedCount.html new file mode 100644 index 0000000000..2b1b4c13a9 --- /dev/null +++ b/functions/task.failedCount.html @@ -0,0 +1,3 @@ +failedCount | actionhero

          Function failedCount

          • How many jobs are in the failed queue. +Will throw an error if redis cannot be reached.

            +

            Returns Promise<number>

          \ No newline at end of file diff --git a/functions/task.locks.html b/functions/task.locks.html new file mode 100644 index 0000000000..5d4a97001d --- /dev/null +++ b/functions/task.locks.html @@ -0,0 +1,4 @@ +locks | actionhero

          Function locks

          • Return any locks, as created by resque plugins or task middleware, in this redis namespace. +Will contain locks with keys like resque:lock:{job} and resque:workerslock:{workerId} +Will throw an error if redis cannot be reached.

            +

            Returns Promise<{
                [key: string]: string;
            }>

          \ No newline at end of file diff --git a/functions/task.queued.html b/functions/task.queued.html new file mode 100644 index 0000000000..0290e01bcd --- /dev/null +++ b/functions/task.queued.html @@ -0,0 +1,9 @@ +queued | actionhero

          Function queued

          • Retrieve the details of jobs enqueued on a certain queue between start and stop (0-indexed) +Will throw an error if redis cannot be reached.

            +

            Inputs:

            +
              +
            • q The name of the queue.
            • +
            • start The index of the first job to return.
            • +
            • stop The index of the last job to return.
            • +
            +

            Parameters

            • q: string
            • start: number
            • stop: number

            Returns Promise<TaskInputs[]>

          \ No newline at end of file diff --git a/functions/task.removeFailed.html b/functions/task.removeFailed.html new file mode 100644 index 0000000000..3bf838fa0b --- /dev/null +++ b/functions/task.removeFailed.html @@ -0,0 +1,3 @@ +removeFailed | actionhero

          Function removeFailed

          • Remove a specific job from the failed queue. +Will throw an error if redis cannot be reached.

            +

            Parameters

            • failedJob: ErrorPayload

            Returns Promise<number>

          \ No newline at end of file diff --git a/functions/task.retryAndRemoveFailed.html b/functions/task.retryAndRemoveFailed.html new file mode 100644 index 0000000000..cc7726c8bf --- /dev/null +++ b/functions/task.retryAndRemoveFailed.html @@ -0,0 +1,3 @@ +retryAndRemoveFailed | actionhero

          Function retryAndRemoveFailed

          • Remove a specific job from the failed queue, and retry it by placing it back into its original queue. +Will throw an error if redis cannot be reached.

            +

            Parameters

            • failedJob: ErrorPayload

            Returns Promise<boolean>

          \ No newline at end of file diff --git a/functions/task.scheduledAt.html b/functions/task.scheduledAt.html new file mode 100644 index 0000000000..568ed70684 --- /dev/null +++ b/functions/task.scheduledAt.html @@ -0,0 +1,9 @@ +scheduledAt | actionhero

          Function scheduledAt

          • Return the timestamps a task is scheduled for. +Will throw an error if redis cannot be reached.

            +

            Inputs:

            +
              +
            • q: Which queue/priority is to run on?
            • +
            • taskName: The name of the job, likely to be the same name as a tak.
            • +
            • inputs: The arguments of the job. Note, arguments passed to a Task initially may be modified when enqueuing. It is best to read job properties first via api.tasks.delayedAt or similar method.
            • +
            +

            Parameters

            • q: string
            • taskName: string
            • inputs: TaskInputs

            Returns Promise<number[]>

          \ No newline at end of file diff --git a/functions/task.stats.html b/functions/task.stats.html new file mode 100644 index 0000000000..56709b54db --- /dev/null +++ b/functions/task.stats.html @@ -0,0 +1,3 @@ +stats | actionhero

          Function stats

          • Return all resque stats for this namespace (how jobs failed, jobs succeeded, etc) +Will throw an error if redis cannot be reached.

            +

            Returns Promise<{
                [key: string]: any;
            }>

          \ No newline at end of file diff --git a/functions/task.stopRecurrentTask.html b/functions/task.stopRecurrentTask.html new file mode 100644 index 0000000000..aba80f1748 --- /dev/null +++ b/functions/task.stopRecurrentTask.html @@ -0,0 +1,3 @@ +stopRecurrentTask | actionhero

          Function stopRecurrentTask

          • Stop a task with a frequency by removing it from all possible queues. +Will throw an error if redis cannot be reached.

            +

            Parameters

            • taskName: string

            Returns Promise<number>

          \ No newline at end of file diff --git a/functions/task.timestamps.html b/functions/task.timestamps.html new file mode 100644 index 0000000000..7695cc1f08 --- /dev/null +++ b/functions/task.timestamps.html @@ -0,0 +1,3 @@ +timestamps | actionhero

          Function timestamps

          • List all timestamps for which tasks are enqueued in the future, via api.tasks.enqueueIn or api.tasks.enqueueAt +Will throw an error if redis cannot be reached.

            +

            Returns Promise<number[]>

          \ No newline at end of file diff --git a/functions/task.workers.html b/functions/task.workers.html new file mode 100644 index 0000000000..ed03e9090b --- /dev/null +++ b/functions/task.workers.html @@ -0,0 +1,4 @@ +workers | actionhero

          Function workers

          • Return all workers registered by all members of this cluster. +Note: MultiWorker processors each register as a unique worker. +Will throw an error if redis cannot be reached.

            +

            Returns Promise<{
                [key: string]: string;
            }>

          \ No newline at end of file diff --git a/functions/task.workingOn.html b/functions/task.workingOn.html new file mode 100644 index 0000000000..4d463b76dc --- /dev/null +++ b/functions/task.workingOn.html @@ -0,0 +1,3 @@ +workingOn | actionhero

          Function workingOn

          • What is a given worker working on? If the worker is idle, 'started' will be returned. +Will throw an error if redis cannot be reached.

            +

            Parameters

            • workerName: string
            • queues: string

            Returns Promise<any>

          \ No newline at end of file diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 0000000000..bfddaf9276 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1 @@ +actionhero

          actionhero

          Class Hierarchy

          \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000000..0e4dcda69b --- /dev/null +++ b/index.html @@ -0,0 +1,104 @@ +actionhero

          actionhero

          Actionhero

          The reusable, scalable, and quick node.js API server for stateless and stateful applications

          +
          +
          + Actionhero Logo +
          + +
          + + + +
          + +
          + +

          NPM Version +Node Version +NPM +Dependency Status +Test +Chat

          +
          + +

          Who is the Actionhero?

          Actionhero is a multi-transport API Server with integrated cluster capabilities and delayed tasks. The goal of actionhero is to create an easy-to-use toolkit for making reusable & scalable APIs for HTTP, WebSockets, and more. Clients connected to an actionhero server can consume the api, consume static content, and communicate with each other. Actionhero is cluster-ready, with built in support for background tasks, 0-downtime deploys, and more. Actionhero provides a simple Async/Await API for managing every type of connection and background task.

          +

          Currently actionhero supports the following out of the box...

          + +

          ... and you can also make your own servers and transports.

          +

          Quick Start

          # Generate a new Project
          npx actionhero generate
          npm install
          npm run build
          npm run dev # <-- I automatically notice changes and restart, as well as compiling .ts files

          # Use the actionhero CLI
          (npx) actionhero generate action --name my_action
          (npx) actionhero generate task --name my_task --queue default --frequency 0

          # Test
          npm test

          # To deploy your app
          npm run build
          npm run start +
          +

          Your new project will come with example actions, tests, and more.

          +

          Or deploy a free API server now:

          +

          Deploy to Heroku

          +

          Learn More 📚

          +

          In-depth Tutorials 🎓

          Core Components

          +

          Server Types

          +

          Testing, Deployment, and Operations

          +

          Sample Projects

          +

          Who?

            +
          • Many folks have helped to make Actionhero a reality.
          • +
          • If you want to contribute to actionhero, contribute to the conversation on github and join us on slack
          • +
          +

          Contributing

          +

          License

          Apache 2.0

          +

          Dedication

          +

          Technology is a powerful force in our society. Data, software, and communication can be used for bad: to entrench unfair power structures, to undermine human rights, and to protect vested interests. But they can also be used for good: to make underrepresented people’s voices heard, to create opportunities for everyone, and to avert disasters. This project is dedicated to everyone working toward the good.

          +
          +

          Inspired by Martin Kleppmann

          +
          +
          +
          \ No newline at end of file diff --git a/interfaces/ActionheroConfigInterface.html b/interfaces/ActionheroConfigInterface.html new file mode 100644 index 0000000000..9dbecf79d6 --- /dev/null +++ b/interfaces/ActionheroConfigInterface.html @@ -0,0 +1,10 @@ +ActionheroConfigInterface | actionhero

          Interface ActionheroConfigInterface

          interface ActionheroConfigInterface {
              errors: {
                  _toExpand: boolean;
                  connectionAlreadyInRoom: ((connection, room) => string);
                  connectionNotInRoom: ((connection, room) => string);
                  connectionRoomAndMessage: ((connection) => string);
                  connectionRoomExists: ((room) => string);
                  connectionRoomHasBeenDeleted: ((room) => string);
                  connectionRoomNotExist: ((room) => string);
                  connectionRoomRequired: (() => string);
                  fileNotFound: ((connection) => string);
                  fileNotProvided: ((connection) => string);
                  fileReadError: ((connection, error) => string);
                  invalidParams: ((data, validationErrors) => string | Error);
                  missingParams: ((data, missingParams) => string);
                  reportUnknownActions: boolean;
                  serializers: {
                      actionProcessor: ((error) => {
                          errorFields: {
                              error: string;
                          };
                          logLevel: ActionheroLogLevel;
                      });
                      servers: {
                          specHelper: ((error) => string | ErrnoException);
                          web: ((error) => string | ErrnoException);
                          websocket: ((error) => string | ErrnoException);
                      };
                  };
                  serverShuttingDown: ((data) => string);
                  tooManyPendingActions: ((data) => string);
                  unknownAction: ((data) => string);
                  unsupportedServerType: ((data) => string);
                  verbNotAllowed: ((connection, verb) => string);
                  verbNotFound: ((connection, verb) => string);
                  genericError(data, error): Promise<ErrnoException>;
              };
              general: {
                  apiVersion: string;
                  cachePrefix: string;
                  channel: string;
                  cliIncludeInternal: boolean;
                  defaultMiddlewarePriority: number;
                  directoryFileType: string;
                  disableParamScrubbing: boolean;
                  enableResponseLogging: boolean;
                  enforceConnectionProperties: boolean;
                  fileRequestLogLevel: ActionheroLogLevel;
                  filteredParams: string[] | (() => string[]);
                  filteredResponse: string[] | (() => string[]);
                  id: string;
                  lockDuration: number;
                  lockPrefix: string;
                  missingParamChecks: string[];
                  paths: {
                      action: string[];
                      cli: string[];
                      dist: string;
                      initializer: string[];
                      log: string[];
                      pid: string[];
                      plugin: string[];
                      public: string[];
                      server: string[];
                      src: string;
                      task: string[];
                      test: string[];
                  };
                  rpcTimeout: number;
                  serverName: string;
                  serverToken: string;
                  simultaneousActions: number;
                  startingChatRooms: Record<string, Record<string, any>>;
                  welcomeMessage: string;
              };
              logger: {
                  loggers: ActionheroConfigLoggerBuilderArray;
                  maxLogArrayLength: number;
                  maxLogStringLength: number;
              };
              plugins: PluginConfig;
              redis: {
                  _toExpand: boolean;
                  client: {
                      args: {
                          db: number;
                          host: string;
                          password: string;
                          port: string | number;
                          retryStrategy: ((times) => number);
                          tls: {
                              rejectUnauthorized: boolean;
                          };
                      }[];
                      buildNew: boolean;
                      konstructor: any;
                  };
                  scanCount: number;
                  stopTimeout: number;
                  subscriber: {
                      args: {
                          db: number;
                          host: string;
                          password: string;
                          port: string | number;
                          retryStrategy: ((times) => number);
                          tls: {
                              rejectUnauthorized: boolean;
                          };
                      }[];
                      buildNew: boolean;
                      konstructor: any;
                  };
                  tasks: {
                      args: {
                          db: number;
                          host: string;
                          password: string;
                          port: string | number;
                          retryStrategy: ((times) => number);
                          tls: {
                              rejectUnauthorized: boolean;
                          };
                      }[];
                      buildNew: boolean;
                      konstructor: any;
                  };
              };
              routes: Partial<Record<"all" | "head" | "get" | "patch" | "post" | "put" | "delete", RouteType[]>>;
              tasks: {
                  _toExpand: boolean;
                  checkTimeout: number;
                  connectionOptions: {
                      tasks: {};
                  };
                  maxEventLoopDelay: number;
                  maxTaskProcessors: number;
                  minTaskProcessors: number;
                  queues: string[] | (() => Promise<string[]>);
                  resque_overrides: {
                      multiWorker: MultiWorker;
                      queue: Queue;
                      scheduler: Scheduler;
                  };
                  retryStuckJobs: boolean;
                  scheduler: boolean;
                  schedulerLogging: {
                      end: ActionheroLogLevel;
                      enqueue: ActionheroLogLevel;
                      poll: ActionheroLogLevel;
                      reEnqueue: ActionheroLogLevel;
                      start: ActionheroLogLevel;
                      transferred_job: ActionheroLogLevel;
                      working_timestamp: ActionheroLogLevel;
                  };
                  stuckWorkerTimeout: number;
                  timeout: number;
                  workerLogging: {
                      cleaning_worker: ActionheroLogLevel;
                      end: ActionheroLogLevel;
                      failure: ActionheroLogLevel;
                      internalError: ActionheroLogLevel;
                      job: ActionheroLogLevel;
                      multiWorkerAction: ActionheroLogLevel;
                      pause: ActionheroLogLevel;
                      poll: ActionheroLogLevel;
                      reEnqueue: ActionheroLogLevel;
                      start: ActionheroLogLevel;
                      success: ActionheroLogLevel;
                  };
              };
              web: {
                  allowedRequestHosts: string[];
                  automaticRoutes: string[];
                  bindIP: string;
                  bootAttempts: number;
                  compress: boolean;
                  defaultErrorStatusCode: number;
                  enableEtag: boolean;
                  enabled: boolean;
                  fingerprintOptions: {
                      cookieKey: string;
                      onlyStaticElements: boolean;
                      settings: {
                          expires: number;
                          path: string;
                      };
                      toSetCookie: boolean;
                  };
                  flatFileCacheDuration: number;
                  formOptions: Options;
                  httpHeaders: {
                      Access-Control-Allow-Headers: string;
                      Access-Control-Allow-Methods: string;
                      Access-Control-Allow-Origin: string;
                      Strict-Transport-Security: string;
                      X-Powered-By: string;
                  };
                  metadataOptions: {
                      requesterInformation: boolean;
                      serverInformation: boolean;
                  };
                  padding: number;
                  port: string | number;
                  queryParseOptions: {};
                  returnErrorCodes: boolean;
                  rootEndpointType: string;
                  saveRawBody: boolean;
                  secure: boolean;
                  serverOptions: {};
                  urlPathForActions: string;
                  urlPathForFiles: string;
              };
              websocket: {
                  client: {
                      apiPath: string;
                      cookieKey: string;
                  };
                  clientJsName: string;
                  clientJsPath: string;
                  clientUrl: string;
                  destroyClientsOnShutdown: boolean;
                  enabled: boolean;
                  server: {};
              };
              [key: string]: Record<string, unknown>;
          }

          Indexable

          [key: string]: Record<string, unknown>

          Properties

          errors: {
              _toExpand: boolean;
              connectionAlreadyInRoom: ((connection, room) => string);
              connectionNotInRoom: ((connection, room) => string);
              connectionRoomAndMessage: ((connection) => string);
              connectionRoomExists: ((room) => string);
              connectionRoomHasBeenDeleted: ((room) => string);
              connectionRoomNotExist: ((room) => string);
              connectionRoomRequired: (() => string);
              fileNotFound: ((connection) => string);
              fileNotProvided: ((connection) => string);
              fileReadError: ((connection, error) => string);
              invalidParams: ((data, validationErrors) => string | Error);
              missingParams: ((data, missingParams) => string);
              reportUnknownActions: boolean;
              serializers: {
                  actionProcessor: ((error) => {
                      errorFields: {
                          error: string;
                      };
                      logLevel: ActionheroLogLevel;
                  });
                  servers: {
                      specHelper: ((error) => string | ErrnoException);
                      web: ((error) => string | ErrnoException);
                      websocket: ((error) => string | ErrnoException);
                  };
              };
              serverShuttingDown: ((data) => string);
              tooManyPendingActions: ((data) => string);
              unknownAction: ((data) => string);
              unsupportedServerType: ((data) => string);
              verbNotAllowed: ((connection, verb) => string);
              verbNotFound: ((connection, verb) => string);
              genericError(data, error): Promise<ErrnoException>;
          }

          Type declaration

          • _toExpand: boolean
          • connectionAlreadyInRoom: ((connection, room) => string)
              • (connection, room): string
              • Parameters

                Returns string

          • connectionNotInRoom: ((connection, room) => string)
              • (connection, room): string
              • Parameters

                Returns string

          • connectionRoomAndMessage: ((connection) => string)
              • (connection): string
              • Parameters

                Returns string

          • connectionRoomExists: ((room) => string)
              • (room): string
              • Parameters

                • room: string

                Returns string

          • connectionRoomHasBeenDeleted: ((room) => string)
              • (room): string
              • Parameters

                • room: string

                Returns string

          • connectionRoomNotExist: ((room) => string)
              • (room): string
              • Parameters

                • room: string

                Returns string

          • connectionRoomRequired: (() => string)
              • (): string
              • Returns string

          • fileNotFound: ((connection) => string)
              • (connection): string
              • Parameters

                Returns string

          • fileNotProvided: ((connection) => string)
              • (connection): string
              • Parameters

                Returns string

          • fileReadError: ((connection, error) => string)
              • (connection, error): string
              • Parameters

                Returns string

          • invalidParams: ((data, validationErrors) => string | Error)
              • (data, validationErrors): string | Error
              • Parameters

                Returns string | Error

          • missingParams: ((data, missingParams) => string)
              • (data, missingParams): string
              • Parameters

                Returns string

          • reportUnknownActions: boolean
          • serializers: {
                actionProcessor: ((error) => {
                    errorFields: {
                        error: string;
                    };
                    logLevel: ActionheroLogLevel;
                });
                servers: {
                    specHelper: ((error) => string | ErrnoException);
                    web: ((error) => string | ErrnoException);
                    websocket: ((error) => string | ErrnoException);
                };
            }
            • actionProcessor: ((error) => {
                  errorFields: {
                      error: string;
                  };
                  logLevel: ActionheroLogLevel;
              })
                • (error): {
                      errorFields: {
                          error: string;
                      };
                      logLevel: ActionheroLogLevel;
                  }
                • Parameters

                  • error: ErrnoException

                  Returns {
                      errorFields: {
                          error: string;
                      };
                      logLevel: ActionheroLogLevel;
                  }

            • servers: {
                  specHelper: ((error) => string | ErrnoException);
                  web: ((error) => string | ErrnoException);
                  websocket: ((error) => string | ErrnoException);
              }
              • specHelper: ((error) => string | ErrnoException)
                  • (error): string | ErrnoException
                  • Parameters

                    • error: ErrnoException

                    Returns string | ErrnoException

              • web: ((error) => string | ErrnoException)
                  • (error): string | ErrnoException
                  • Parameters

                    • error: ErrnoException

                    Returns string | ErrnoException

              • websocket: ((error) => string | ErrnoException)
                  • (error): string | ErrnoException
                  • Parameters

                    • error: ErrnoException

                    Returns string | ErrnoException

          • serverShuttingDown: ((data) => string)
          • tooManyPendingActions: ((data) => string)
          • unknownAction: ((data) => string)
          • unsupportedServerType: ((data) => string)
          • verbNotAllowed: ((connection, verb) => string)
              • (connection, verb): string
              • Parameters

                Returns string

          • verbNotFound: ((connection, verb) => string)
              • (connection, verb): string
              • Parameters

                Returns string

          • genericError:function
            • Parameters

              Returns Promise<ErrnoException>

          general: {
              apiVersion: string;
              cachePrefix: string;
              channel: string;
              cliIncludeInternal: boolean;
              defaultMiddlewarePriority: number;
              directoryFileType: string;
              disableParamScrubbing: boolean;
              enableResponseLogging: boolean;
              enforceConnectionProperties: boolean;
              fileRequestLogLevel: ActionheroLogLevel;
              filteredParams: string[] | (() => string[]);
              filteredResponse: string[] | (() => string[]);
              id: string;
              lockDuration: number;
              lockPrefix: string;
              missingParamChecks: string[];
              paths: {
                  action: string[];
                  cli: string[];
                  dist: string;
                  initializer: string[];
                  log: string[];
                  pid: string[];
                  plugin: string[];
                  public: string[];
                  server: string[];
                  src: string;
                  task: string[];
                  test: string[];
              };
              rpcTimeout: number;
              serverName: string;
              serverToken: string;
              simultaneousActions: number;
              startingChatRooms: Record<string, Record<string, any>>;
              welcomeMessage: string;
          }

          Type declaration

          • apiVersion: string
          • cachePrefix: string
          • channel: string
          • cliIncludeInternal: boolean
          • defaultMiddlewarePriority: number
          • directoryFileType: string
          • disableParamScrubbing: boolean
          • enableResponseLogging: boolean
          • enforceConnectionProperties: boolean
          • fileRequestLogLevel: ActionheroLogLevel
          • filteredParams: string[] | (() => string[])
          • filteredResponse: string[] | (() => string[])
          • id: string
          • lockDuration: number
          • lockPrefix: string
          • missingParamChecks: string[]
          • paths: {
                action: string[];
                cli: string[];
                dist: string;
                initializer: string[];
                log: string[];
                pid: string[];
                plugin: string[];
                public: string[];
                server: string[];
                src: string;
                task: string[];
                test: string[];
            }
            • action: string[]
            • cli: string[]
            • dist: string
            • initializer: string[]
            • log: string[]
            • pid: string[]
            • plugin: string[]
            • public: string[]
            • server: string[]
            • src: string
            • task: string[]
            • test: string[]
          • rpcTimeout: number
          • serverName: string
          • serverToken: string
          • simultaneousActions: number
          • startingChatRooms: Record<string, Record<string, any>>
          • welcomeMessage: string
          logger: {
              loggers: ActionheroConfigLoggerBuilderArray;
              maxLogArrayLength: number;
              maxLogStringLength: number;
          }

          Type declaration

          • loggers: ActionheroConfigLoggerBuilderArray
          • maxLogArrayLength: number
          • maxLogStringLength: number
          plugins: PluginConfig
          redis: {
              _toExpand: boolean;
              client: {
                  args: {
                      db: number;
                      host: string;
                      password: string;
                      port: string | number;
                      retryStrategy: ((times) => number);
                      tls: {
                          rejectUnauthorized: boolean;
                      };
                  }[];
                  buildNew: boolean;
                  konstructor: any;
              };
              scanCount: number;
              stopTimeout: number;
              subscriber: {
                  args: {
                      db: number;
                      host: string;
                      password: string;
                      port: string | number;
                      retryStrategy: ((times) => number);
                      tls: {
                          rejectUnauthorized: boolean;
                      };
                  }[];
                  buildNew: boolean;
                  konstructor: any;
              };
              tasks: {
                  args: {
                      db: number;
                      host: string;
                      password: string;
                      port: string | number;
                      retryStrategy: ((times) => number);
                      tls: {
                          rejectUnauthorized: boolean;
                      };
                  }[];
                  buildNew: boolean;
                  konstructor: any;
              };
          }

          Type declaration

          • _toExpand: boolean
          • client: {
                args: {
                    db: number;
                    host: string;
                    password: string;
                    port: string | number;
                    retryStrategy: ((times) => number);
                    tls: {
                        rejectUnauthorized: boolean;
                    };
                }[];
                buildNew: boolean;
                konstructor: any;
            }
            • args: {
                  db: number;
                  host: string;
                  password: string;
                  port: string | number;
                  retryStrategy: ((times) => number);
                  tls: {
                      rejectUnauthorized: boolean;
                  };
              }[]
            • buildNew: boolean
            • konstructor: any
          • scanCount: number
          • stopTimeout: number
          • subscriber: {
                args: {
                    db: number;
                    host: string;
                    password: string;
                    port: string | number;
                    retryStrategy: ((times) => number);
                    tls: {
                        rejectUnauthorized: boolean;
                    };
                }[];
                buildNew: boolean;
                konstructor: any;
            }
            • args: {
                  db: number;
                  host: string;
                  password: string;
                  port: string | number;
                  retryStrategy: ((times) => number);
                  tls: {
                      rejectUnauthorized: boolean;
                  };
              }[]
            • buildNew: boolean
            • konstructor: any
          • tasks: {
                args: {
                    db: number;
                    host: string;
                    password: string;
                    port: string | number;
                    retryStrategy: ((times) => number);
                    tls: {
                        rejectUnauthorized: boolean;
                    };
                }[];
                buildNew: boolean;
                konstructor: any;
            }
            • args: {
                  db: number;
                  host: string;
                  password: string;
                  port: string | number;
                  retryStrategy: ((times) => number);
                  tls: {
                      rejectUnauthorized: boolean;
                  };
              }[]
            • buildNew: boolean
            • konstructor: any
          routes: Partial<Record<"all" | "head" | "get" | "patch" | "post" | "put" | "delete", RouteType[]>>
          tasks: {
              _toExpand: boolean;
              checkTimeout: number;
              connectionOptions: {
                  tasks: {};
              };
              maxEventLoopDelay: number;
              maxTaskProcessors: number;
              minTaskProcessors: number;
              queues: string[] | (() => Promise<string[]>);
              resque_overrides: {
                  multiWorker: MultiWorker;
                  queue: Queue;
                  scheduler: Scheduler;
              };
              retryStuckJobs: boolean;
              scheduler: boolean;
              schedulerLogging: {
                  end: ActionheroLogLevel;
                  enqueue: ActionheroLogLevel;
                  poll: ActionheroLogLevel;
                  reEnqueue: ActionheroLogLevel;
                  start: ActionheroLogLevel;
                  transferred_job: ActionheroLogLevel;
                  working_timestamp: ActionheroLogLevel;
              };
              stuckWorkerTimeout: number;
              timeout: number;
              workerLogging: {
                  cleaning_worker: ActionheroLogLevel;
                  end: ActionheroLogLevel;
                  failure: ActionheroLogLevel;
                  internalError: ActionheroLogLevel;
                  job: ActionheroLogLevel;
                  multiWorkerAction: ActionheroLogLevel;
                  pause: ActionheroLogLevel;
                  poll: ActionheroLogLevel;
                  reEnqueue: ActionheroLogLevel;
                  start: ActionheroLogLevel;
                  success: ActionheroLogLevel;
              };
          }

          Type declaration

          web: {
              allowedRequestHosts: string[];
              automaticRoutes: string[];
              bindIP: string;
              bootAttempts: number;
              compress: boolean;
              defaultErrorStatusCode: number;
              enableEtag: boolean;
              enabled: boolean;
              fingerprintOptions: {
                  cookieKey: string;
                  onlyStaticElements: boolean;
                  settings: {
                      expires: number;
                      path: string;
                  };
                  toSetCookie: boolean;
              };
              flatFileCacheDuration: number;
              formOptions: Options;
              httpHeaders: {
                  Access-Control-Allow-Headers: string;
                  Access-Control-Allow-Methods: string;
                  Access-Control-Allow-Origin: string;
                  Strict-Transport-Security: string;
                  X-Powered-By: string;
              };
              metadataOptions: {
                  requesterInformation: boolean;
                  serverInformation: boolean;
              };
              padding: number;
              port: string | number;
              queryParseOptions: {};
              returnErrorCodes: boolean;
              rootEndpointType: string;
              saveRawBody: boolean;
              secure: boolean;
              serverOptions: {};
              urlPathForActions: string;
              urlPathForFiles: string;
          }

          Type declaration

          • allowedRequestHosts: string[]
          • automaticRoutes: string[]
          • bindIP: string
          • bootAttempts: number
          • compress: boolean
          • defaultErrorStatusCode: number
          • enableEtag: boolean
          • enabled: boolean
          • fingerprintOptions: {
                cookieKey: string;
                onlyStaticElements: boolean;
                settings: {
                    expires: number;
                    path: string;
                };
                toSetCookie: boolean;
            }
            • cookieKey: string
            • onlyStaticElements: boolean
            • settings: {
                  expires: number;
                  path: string;
              }
              • expires: number
              • path: string
            • toSetCookie: boolean
          • flatFileCacheDuration: number
          • formOptions: Options
          • httpHeaders: {
                Access-Control-Allow-Headers: string;
                Access-Control-Allow-Methods: string;
                Access-Control-Allow-Origin: string;
                Strict-Transport-Security: string;
                X-Powered-By: string;
            }
            • Access-Control-Allow-Headers: string
            • Access-Control-Allow-Methods: string
            • Access-Control-Allow-Origin: string
            • Strict-Transport-Security: string
            • X-Powered-By: string
          • metadataOptions: {
                requesterInformation: boolean;
                serverInformation: boolean;
            }
            • requesterInformation: boolean
            • serverInformation: boolean
          • padding: number
          • port: string | number
          • queryParseOptions: {}
            • returnErrorCodes: boolean
            • rootEndpointType: string
            • saveRawBody: boolean
            • secure: boolean
            • serverOptions: {}
              • urlPathForActions: string
              • urlPathForFiles: string
              websocket: {
                  client: {
                      apiPath: string;
                      cookieKey: string;
                  };
                  clientJsName: string;
                  clientJsPath: string;
                  clientUrl: string;
                  destroyClientsOnShutdown: boolean;
                  enabled: boolean;
                  server: {};
              }

              Type declaration

              • client: {
                    apiPath: string;
                    cookieKey: string;
                }
                • apiPath: string
                • cookieKey: string
              • clientJsName: string
              • clientJsPath: string
              • clientUrl: string
              • destroyClientsOnShutdown: boolean
              • enabled: boolean
              • server: {}
                \ No newline at end of file diff --git a/interfaces/Input.html b/interfaces/Input.html new file mode 100644 index 0000000000..f5eaf07b00 --- /dev/null +++ b/interfaces/Input.html @@ -0,0 +1,6 @@ +Input | actionhero

                Interface Input

                interface Input {
                    default?: any;
                    formatter?: Function | string[] | Function[];
                    required?: boolean;
                    schema?: {
                        [key: string]: any;
                    };
                    validator?: Function | string[] | Function[];
                }

                Properties

                default?: any
                formatter?: Function | string[] | Function[]
                required?: boolean
                schema?: {
                    [key: string]: any;
                }

                Type declaration

                • [key: string]: any
                validator?: Function | string[] | Function[]
                \ No newline at end of file diff --git a/interfaces/Inputs.html b/interfaces/Inputs.html new file mode 100644 index 0000000000..c564475f87 --- /dev/null +++ b/interfaces/Inputs.html @@ -0,0 +1 @@ +Inputs | actionhero

                Interface Inputs

                interface Inputs {
                    [key: string]: Input;
                }

                Indexable

                [key: string]: Input
                \ No newline at end of file diff --git a/interfaces/action.ActionMiddleware.html b/interfaces/action.ActionMiddleware.html new file mode 100644 index 0000000000..01a10548e6 --- /dev/null +++ b/interfaces/action.ActionMiddleware.html @@ -0,0 +1,24 @@ +ActionMiddleware | actionhero

                Interface ActionMiddleware

                var middleware = { + name: 'userId checker', + global: false, + priority: 1000, + preProcessor: async (data) => { + if(!data.params.userId){ + throw new Error('All actions require a userId') + } + }, + postProcessor: async (data) => { + if(data.thing.stuff == false){ data.toRender = false } + } +}

                +
                interface ActionMiddleware {
                    global: boolean;
                    name: string;
                    postProcessor?: Function;
                    preProcessor?: Function;
                    priority?: number;
                }

                Properties

                global: boolean

                Is this middleware applied to all actions?

                +
                name: string

                Unique name for the middleware.

                +
                postProcessor?: Function

                Called after the action runs.

                +
                preProcessor?: Function

                Called before the action runs. Has access to all params, before sanitization. Can modify the data object for use in actions.

                +
                priority?: number

                Module load order. Defaults to api.config.general.defaultMiddlewarePriority.

                +
                \ No newline at end of file diff --git a/interfaces/cache.CacheObject.html b/interfaces/cache.CacheObject.html new file mode 100644 index 0000000000..edc97640ab --- /dev/null +++ b/interfaces/cache.CacheObject.html @@ -0,0 +1,4 @@ +CacheObject | actionhero

                Interface CacheObject

                interface CacheObject {
                    createdAt: number;
                    key: string;
                    value: any;
                }

                Properties

                Properties

                createdAt: number
                key: string
                value: any
                \ No newline at end of file diff --git a/interfaces/cache.CacheOptions.html b/interfaces/cache.CacheOptions.html new file mode 100644 index 0000000000..8645955ca2 --- /dev/null +++ b/interfaces/cache.CacheOptions.html @@ -0,0 +1,3 @@ +CacheOptions | actionhero

                Interface CacheOptions

                interface CacheOptions {
                    expireTimeMS?: number;
                    retry?: number | boolean;
                }

                Properties

                Properties

                expireTimeMS?: number
                retry?: number | boolean
                \ No newline at end of file diff --git a/interfaces/chatRoom.ChatMiddleware.html b/interfaces/chatRoom.ChatMiddleware.html new file mode 100644 index 0000000000..6d63bfead0 --- /dev/null +++ b/interfaces/chatRoom.ChatMiddleware.html @@ -0,0 +1,16 @@ +ChatMiddleware | actionhero

                Interface ChatMiddleware

                Middleware definition for processing chat events. Can be of the

                +
                 var chatMiddleware = {
                name: 'chat middleware',
                priority: 1000,
                join: (connection, room) => {
                // announce all connections entering a room
                api.chatRoom.broadcast(null, room, 'I have joined the room: ' + connection.id, callback)
                },
                leave:(connection, room, callback) => {
                // announce all connections leaving a room
                api.chatRoom.broadcast(null, room, 'I have left the room: ' + connection.id, callback)
                },
                // Will be executed once per client connection before delivering the message.
                say: (connection, room, messagePayload) => {
                // do stuff
                log(messagePayload)
                },
                // Will be executed only once, when the message is sent to the server.
                onSayReceive: (connection, room, messagePayload) => {
                // do stuff
                log(messagePayload)
                }
                }
                api.chatRoom.addMiddleware(chatMiddleware) +
                +
                interface ChatMiddleware {
                    join?: Function;
                    leave?: Function;
                    name: string;
                    onSayReceive?: Function;
                    priority?: number;
                    say?: Function;
                }

                Properties

                join?: Function

                Called when a connection joins a room.

                +
                leave?: Function

                Called when a connection leaves a room.

                +
                name: string

                Unique name for the middleware.

                +
                onSayReceive?: Function

                Called when a connection says a message to a room.

                +
                priority?: number

                Module load order. Defaults to api.config.general.defaultMiddlewarePriority.

                +
                say?: Function

                Called when a connection is about to receive a say message.

                +
                \ No newline at end of file diff --git a/interfaces/chatRoom.ChatPubSubMessage.html b/interfaces/chatRoom.ChatPubSubMessage.html new file mode 100644 index 0000000000..c9fc8bcb0b --- /dev/null +++ b/interfaces/chatRoom.ChatPubSubMessage.html @@ -0,0 +1,7 @@ +ChatPubSubMessage | actionhero

                Interface ChatPubSubMessage

                interface ChatPubSubMessage {
                    connection: {
                        id: string;
                        room: string;
                    };
                    message: any;
                    messageType: string;
                    sentAt: number;
                    serverId: string | number;
                    serverToken: string;
                }

                Hierarchy (view full)

                Properties

                connection: {
                    id: string;
                    room: string;
                }

                Type declaration

                • id: string
                • room: string
                message: any
                messageType: string
                sentAt: number
                serverId: string | number
                serverToken: string
                \ No newline at end of file diff --git a/interfaces/redis.PubSubMessage.html b/interfaces/redis.PubSubMessage.html new file mode 100644 index 0000000000..6f8d7cc41b --- /dev/null +++ b/interfaces/redis.PubSubMessage.html @@ -0,0 +1 @@ +PubSubMessage | actionhero

                Interface PubSubMessage

                interface PubSubMessage {
                    [key: string]: any;
                }

                Hierarchy (view full)

                Indexable

                [key: string]: any
                \ No newline at end of file diff --git a/interfaces/task.TaskMiddleware.html b/interfaces/task.TaskMiddleware.html new file mode 100644 index 0000000000..8c1c638ed7 --- /dev/null +++ b/interfaces/task.TaskMiddleware.html @@ -0,0 +1,18 @@ +TaskMiddleware | actionhero

                Interface TaskMiddleware

                An example middleware

                +
                const middleware = {
                name: 'timer',
                global: true,
                priority: 90,
                preProcessor: async function () {
                const worker = this.worker
                worker.startTime = process.hrtime()
                },
                postProcessor: async function () {
                const worker = this.worker
                const elapsed = process.hrtime(worker.startTime)
                const seconds = elapsed[0]
                const millis = elapsed[1] / 1000000
                log(worker.job.class + ' done in ' + seconds + ' s and ' + millis + ' ms.', 'info')
                },
                preEnqueue: async function () {
                return true // returning `false` will prevent the task from enqueueing
                },
                postEnqueue: async function () {
                log("Task successfully enqueued!")
                }
                }
                api.tasks.addMiddleware(middleware) +
                +
                interface TaskMiddleware {
                    global: boolean;
                    name: string;
                    postEnqueue?: (() => boolean);
                    postProcessor?: (() => boolean);
                    preEnqueue?: (() => Promise<boolean>);
                    preProcessor?: (() => boolean);
                    priority?: number;
                }

                Properties

                global: boolean

                Is this middleware applied to all tasks?

                +
                name: string

                Unique name for the middleware.

                +
                postEnqueue?: (() => boolean)

                Called after a task using this middleware is enqueued.

                +

                Type declaration

                  • (): boolean
                  • Returns boolean

                postProcessor?: (() => boolean)

                Called after the task runs.

                +

                Type declaration

                  • (): boolean
                  • Returns boolean

                preEnqueue?: (() => Promise<boolean>)

                Called before a task using this middleware is enqueued.

                +

                Type declaration

                  • (): Promise<boolean>
                  • Returns Promise<boolean>

                preProcessor?: (() => boolean)

                Called berore the task runs. Has access to all params, before sanitization. Can modify the data object for use in tasks.

                +

                Type declaration

                  • (): boolean
                  • Returns boolean

                priority?: number

                Module load order. Defaults to api.config.general.defaultMiddlewarePriority.

                +
                \ No newline at end of file diff --git a/modules.html b/modules.html new file mode 100644 index 0000000000..444c30a175 --- /dev/null +++ b/modules.html @@ -0,0 +1,38 @@ +actionhero
                \ No newline at end of file diff --git a/modules/action.html b/modules/action.html new file mode 100644 index 0000000000..0b9522d7b8 --- /dev/null +++ b/modules/action.html @@ -0,0 +1,4 @@ +action | actionhero

                Namespace action

                Index

                Interfaces

                Functions

                \ No newline at end of file diff --git a/modules/cache.html b/modules/cache.html new file mode 100644 index 0000000000..6d66dc0374 --- /dev/null +++ b/modules/cache.html @@ -0,0 +1,28 @@ +cache | actionhero
                \ No newline at end of file diff --git a/modules/chatRoom.html b/modules/chatRoom.html new file mode 100644 index 0000000000..2a16fe5e8e --- /dev/null +++ b/modules/chatRoom.html @@ -0,0 +1,15 @@ +chatRoom | actionhero
                \ No newline at end of file diff --git a/modules/redis.html b/modules/redis.html new file mode 100644 index 0000000000..a4659cb1ce --- /dev/null +++ b/modules/redis.html @@ -0,0 +1,5 @@ +redis | actionhero

                Namespace redis

                Index

                Interfaces

                Functions

                \ No newline at end of file diff --git a/modules/route.html b/modules/route.html new file mode 100644 index 0000000000..ffcd821f3c --- /dev/null +++ b/modules/route.html @@ -0,0 +1,2 @@ +route | actionhero

                Namespace route

                Index

                Functions

                \ No newline at end of file diff --git a/modules/specHelper.html b/modules/specHelper.html new file mode 100644 index 0000000000..66eec115d1 --- /dev/null +++ b/modules/specHelper.html @@ -0,0 +1,8 @@ +specHelper | actionhero

                Namespace specHelper

                Index

                Functions

                \ No newline at end of file diff --git a/modules/task.html b/modules/task.html new file mode 100644 index 0000000000..854a1826e9 --- /dev/null +++ b/modules/task.html @@ -0,0 +1,30 @@ +task | actionhero
                \ No newline at end of file diff --git a/types/ActionheroLogLevel.html b/types/ActionheroLogLevel.html new file mode 100644 index 0000000000..a361bf6871 --- /dev/null +++ b/types/ActionheroLogLevel.html @@ -0,0 +1 @@ +ActionheroLogLevel | actionhero

                Type alias ActionheroLogLevel

                ActionheroLogLevel: "emerg" | "alert" | "crit" | "error" | "warning" | "notice" | "info" | "debug"
                \ No newline at end of file diff --git a/types/ExceptionReporter.html b/types/ExceptionReporter.html new file mode 100644 index 0000000000..7241182997 --- /dev/null +++ b/types/ExceptionReporter.html @@ -0,0 +1 @@ +ExceptionReporter | actionhero

                Type alias ExceptionReporter

                ExceptionReporter: ((error, type, name, objects?, severity?) => void)

                Type declaration

                  • (error, type, name, objects?, severity?): void
                  • Parameters

                    • error: NodeJS.ErrnoException
                    • type: string
                    • name: string
                    • Optional objects: any
                    • Optional severity: ActionheroLogLevel

                    Returns void

                \ No newline at end of file diff --git a/types/ParamsFrom.html b/types/ParamsFrom.html new file mode 100644 index 0000000000..1b5cd71c94 --- /dev/null +++ b/types/ParamsFrom.html @@ -0,0 +1 @@ +ParamsFrom | actionhero

                Type alias ParamsFrom<A>

                ParamsFrom<A>: Pick<ParamsExtractor<A>, RequiredParamsKeys<A>> & Partial<ParamsExtractor<A>>

                Type Parameters

                • A extends ActionheroWithParams
                \ No newline at end of file diff --git a/types/PluginConfig.html b/types/PluginConfig.html new file mode 100644 index 0000000000..3eae291451 --- /dev/null +++ b/types/PluginConfig.html @@ -0,0 +1 @@ +PluginConfig | actionhero

                Type alias PluginConfig

                PluginConfig: {
                    [name: string]: PluginConfigRecord;
                }

                Type declaration

                • [name: string]: PluginConfigRecord
                \ No newline at end of file diff --git a/types/RouteMethod.html b/types/RouteMethod.html new file mode 100644 index 0000000000..258418f31c --- /dev/null +++ b/types/RouteMethod.html @@ -0,0 +1 @@ +RouteMethod | actionhero

                Type alias RouteMethod

                RouteMethod: typeof routerMethods[number]
                \ No newline at end of file diff --git a/types/RouteType.html b/types/RouteType.html new file mode 100644 index 0000000000..9ebbaac032 --- /dev/null +++ b/types/RouteType.html @@ -0,0 +1 @@ +RouteType | actionhero

                Type alias RouteType

                RouteType: {
                    action: string;
                    apiVersion?: number | string;
                    dir?: string;
                    matchTrailingPathParts?: boolean;
                    path: string;
                }

                Type declaration

                • action: string
                • Optional apiVersion?: number | string
                • Optional dir?: string
                • Optional matchTrailingPathParts?: boolean
                • path: string
                \ No newline at end of file diff --git a/types/RoutesConfig.html b/types/RoutesConfig.html new file mode 100644 index 0000000000..c546bff88b --- /dev/null +++ b/types/RoutesConfig.html @@ -0,0 +1 @@ +RoutesConfig | actionhero

                Type alias RoutesConfig

                RoutesConfig: Partial<Record<typeof routerMethods[number], RouteType[]>>
                \ No newline at end of file diff --git a/variables/actionheroVersion.html b/variables/actionheroVersion.html new file mode 100644 index 0000000000..f31cfe425b --- /dev/null +++ b/variables/actionheroVersion.html @@ -0,0 +1 @@ +actionheroVersion | actionhero

                Variable actionheroVersion

                actionheroVersion: string = ...
                \ No newline at end of file diff --git a/variables/api-1.html b/variables/api-1.html new file mode 100644 index 0000000000..ae4e10fc8e --- /dev/null +++ b/variables/api-1.html @@ -0,0 +1 @@ +api | actionhero

                Variable apiConst

                api: Api = globalThis.api
                \ No newline at end of file diff --git a/variables/cache.lockDuration.html b/variables/cache.lockDuration.html new file mode 100644 index 0000000000..4044d90094 --- /dev/null +++ b/variables/cache.lockDuration.html @@ -0,0 +1 @@ +lockDuration | actionhero

                Variable lockDurationConst

                lockDuration: number = config.general.lockDuration
                \ No newline at end of file diff --git a/variables/cache.lockPrefix.html b/variables/cache.lockPrefix.html new file mode 100644 index 0000000000..171b8eb811 --- /dev/null +++ b/variables/cache.lockPrefix.html @@ -0,0 +1 @@ +lockPrefix | actionhero

                Variable lockPrefixConst

                lockPrefix: string = config.general.lockPrefix
                \ No newline at end of file diff --git a/variables/cache.lockRetry.html b/variables/cache.lockRetry.html new file mode 100644 index 0000000000..039d22e0c0 --- /dev/null +++ b/variables/cache.lockRetry.html @@ -0,0 +1 @@ +lockRetry | actionhero

                Variable lockRetryConst

                lockRetry: number = 100
                \ No newline at end of file diff --git a/variables/cache.redisPrefix.html b/variables/cache.redisPrefix.html new file mode 100644 index 0000000000..0add0cdf94 --- /dev/null +++ b/variables/cache.redisPrefix.html @@ -0,0 +1 @@ +redisPrefix | actionhero

                Variable redisPrefixConst

                redisPrefix: string = config.general.cachePrefix
                \ No newline at end of file diff --git a/variables/cache.scanCount.html b/variables/cache.scanCount.html new file mode 100644 index 0000000000..804f6f076c --- /dev/null +++ b/variables/cache.scanCount.html @@ -0,0 +1 @@ +scanCount | actionhero

                Variable scanCountConst

                scanCount: number = ...
                \ No newline at end of file diff --git a/variables/config.html b/variables/config.html new file mode 100644 index 0000000000..e0799039c3 --- /dev/null +++ b/variables/config.html @@ -0,0 +1 @@ +config | actionhero

                Variable config

                config: Partial<ActionheroConfigInterface> = ...
                \ No newline at end of file diff --git a/variables/env.html b/variables/env.html new file mode 100644 index 0000000000..acace41902 --- /dev/null +++ b/variables/env.html @@ -0,0 +1 @@ +env | actionhero

                Variable env

                env: string = ...
                \ No newline at end of file diff --git a/variables/id.html b/variables/id.html new file mode 100644 index 0000000000..3300bd3868 --- /dev/null +++ b/variables/id.html @@ -0,0 +1 @@ +id | actionhero

                Variable id

                id: string = ...
                \ No newline at end of file diff --git a/variables/loggers.html b/variables/loggers.html new file mode 100644 index 0000000000..a553283768 --- /dev/null +++ b/variables/loggers.html @@ -0,0 +1 @@ +loggers | actionhero

                Variable loggers

                loggers: winston.Logger[] = []
                \ No newline at end of file diff --git a/variables/projectRoot.html b/variables/projectRoot.html new file mode 100644 index 0000000000..23dc1b78ed --- /dev/null +++ b/variables/projectRoot.html @@ -0,0 +1 @@ +projectRoot | actionhero

                Variable projectRoot

                projectRoot: string = ...
                \ No newline at end of file diff --git a/variables/typescript.html b/variables/typescript.html new file mode 100644 index 0000000000..340d5108a5 --- /dev/null +++ b/variables/typescript.html @@ -0,0 +1 @@ +typescript | actionhero

                Variable typescript

                typescript: boolean = ...
                \ No newline at end of file diff --git a/variables/utils.html b/variables/utils.html new file mode 100644 index 0000000000..b831d428c6 --- /dev/null +++ b/variables/utils.html @@ -0,0 +1,39 @@ +utils | actionhero

                Variable utilsConst

                utils: {
                    argv: {
                        [key: string]: string;
                    };
                    arrayStartingMatch: ((a, b) => boolean);
                    arrayUnique: ((arr) => any[]);
                    collapseObjectToArray: ((obj) => any[] | boolean);
                    deepCopy: (<T>(obj) => T);
                    ensureNoTsHeaderOrSpecFiles: ((files) => string[]);
                    eventLoopDelay: ((iterations?) => Promise<number>);
                    fileUtils: {
                        createDirSafely: ((dir) => string);
                        createFileSafely: ((file, data, overwrite?) => string);
                        createLinkfileSafely: ((filePath, type) => string);
                        createSymlinkSafely: ((destination, source) => string);
                        dirExists: ((dir) => boolean);
                        fileExists: ((file) => boolean);
                        removeLinkfileSafely: ((filePath) => string);
                    };
                    filterObjectForLogging: ((params) => Record<string, any>);
                    filterResponseForLogging: ((response) => {
                        [key: string]: any;
                    });
                    getExternalIPAddress: (() => string);
                    hashMerge: ((a, b, arg?) => {
                        [key: string]: any;
                    });
                    isPlainObject: ((o) => boolean);
                    isRunning: ((pid) => boolean);
                    parseCookies: ((req) => object);
                    parseHeadersForClientAddress: ((headers) => {
                        ip: string;
                        port: string | number;
                    });
                    parseIPv6URI: ((addr) => {
                        host: string;
                        port: number;
                    });
                    replaceDistWithSrc: ((f) => string);
                    safeGlobSync: ((match, args?) => string[]);
                    sleep: ((time) => Promise<void>);
                    sortGlobalMiddleware: ((globalMiddlewareList, middleware) => void);
                    sourceRelativeLinkPath: ((linkFile, pluginPaths) => string | boolean);
                } = ...

                Utility functions for Actionhero

                +

                Type declaration

                • argv: {
                      [key: string]: string;
                  }
                  • [key: string]: string
                • arrayStartingMatch: ((a, b) => boolean)
                    • (a, b): boolean
                    • Compare the first n elements of an array with another, longer array

                      +

                      Parameters

                      • a: any[]
                      • b: any[]

                      Returns boolean

                • arrayUnique: ((arr) => any[])
                    • (arr): any[]
                    • Return only the unique values in an Array.

                      +

                      Parameters

                      • arr: any[]

                      Returns any[]

                • collapseObjectToArray: ((obj) => any[] | boolean)
                    • (obj): any[] | boolean
                    • Collapses an Object with numerical keys (like arguments in a function) to an Array

                      +

                      Parameters

                      • obj: Record<string, any>

                      Returns any[] | boolean

                • deepCopy: (<T>(obj) => T)
                    • <T>(obj): T
                    • Type Parameters

                      • T

                      Parameters

                      • obj: T

                      Returns T

                • ensureNoTsHeaderOrSpecFiles: ((files) => string[])
                    • (files): string[]
                    • swap out d.ts files for the JS versions when running with ts-node +also filter out *.test. and *.spec. js|ts files

                      +

                      Parameters

                      • files: string[]

                      Returns string[]

                • eventLoopDelay: ((iterations?) => Promise<number>)
                    • (iterations?): Promise<number>
                    • Returns the average delay between a tick of the node.js event loop, as measured for N calls of process.nextTick

                      +

                      Parameters

                      • iterations: number = 10000

                      Returns Promise<number>

                • fileUtils: {
                      createDirSafely: ((dir) => string);
                      createFileSafely: ((file, data, overwrite?) => string);
                      createLinkfileSafely: ((filePath, type) => string);
                      createSymlinkSafely: ((destination, source) => string);
                      dirExists: ((dir) => boolean);
                      fileExists: ((file) => boolean);
                      removeLinkfileSafely: ((filePath) => string);
                  }
                  • createDirSafely: ((dir) => string)
                      • (dir): string
                      • Create a directory, only if it doesn't exist yet. +Throws an error if the directory already exists, or encounters a filesystem problem.

                        +

                        Parameters

                        • dir: string

                        Returns string

                  • createFileSafely: ((file, data, overwrite?) => string)
                      • (file, data, overwrite?): string
                      • Create a file, only if it doesn't exist yet. +Throws an error if the file already exists, or encounters a filesystem problem.

                        +

                        Parameters

                        • file: string
                        • data: string | ArrayBufferView
                        • overwrite: boolean = false

                        Returns string

                  • createLinkfileSafely: ((filePath, type) => string)
                      • (filePath, type): string
                      • Create an Actionhero LinkFile, only if it doesn't exist yet. +Throws an error if the file already exists, or encounters a filesystem problem.

                        +

                        Parameters

                        • filePath: string
                        • type: string

                        Returns string

                  • createSymlinkSafely: ((destination, source) => string)
                      • (destination, source): string
                      • Create a system symbolic link. +Throws an error if it encounters a filesystem problem.

                        +

                        Parameters

                        • destination: string
                        • source: string

                        Returns string

                  • dirExists: ((dir) => boolean)
                      • (dir): boolean
                      • Check if a directory exists.

                        +

                        Parameters

                        • dir: string

                        Returns boolean

                  • fileExists: ((file) => boolean)
                      • (file): boolean
                      • Check if a file exists.

                        +

                        Parameters

                        • file: string

                        Returns boolean

                  • removeLinkfileSafely: ((filePath) => string)
                      • (filePath): string
                      • Remove an Actionhero LinkFile, only if it exists. +Throws an error if the file does not exist, or encounters a filesystem problem.

                        +

                        Parameters

                        • filePath: string

                        Returns string

                • filterObjectForLogging: ((params) => Record<string, any>)
                    • (params): Record<string, any>
                    • Prepares acton params for logging. +Hides any sensitive data as defined by api.config.general.filteredParams +Truncates long strings via api.config.logger.maxLogStringLength

                      +

                      Parameters

                      • params: Record<string, any>

                      Returns Record<string, any>

                • filterResponseForLogging: ((response) => {
                      [key: string]: any;
                  })
                    • (response): {
                          [key: string]: any;
                      }
                    • Prepares acton response for logging. +Hides any sensitive data as defined by api.config.general.filteredResponse +Truncates long strings via api.config.logger.maxLogStringLength

                      +

                      Parameters

                      • response: Record<string, any>

                      Returns {
                          [key: string]: any;
                      }

                      • [key: string]: any
                • getExternalIPAddress: (() => string)
                    • (): string
                    • Returns this server's external/public IP address

                      +

                      Returns string

                • hashMerge: ((a, b, arg?) => {
                      [key: string]: any;
                  })
                    • (a, b, arg?): {
                          [key: string]: any;
                      }
                    • Recursively merge 2 Objects together. Will resolve functions if they are present, unless the parent Object has the property _toExpand = false. +Actionhero uses this internally to construct and resolve the config. +Matching keys in B override A.

                      +

                      Parameters

                      • a: Record<string, any>
                      • b: Record<string, any>
                      • Optional arg: Record<string, any>

                      Returns {
                          [key: string]: any;
                      }

                      • [key: string]: any
                • isPlainObject: ((o) => boolean)
                    • (o): boolean
                    • Is the JS Object passed in truly just an object?

                      +

                      Parameters

                      • o: any

                      Returns boolean

                • isRunning: ((pid) => boolean)
                    • (pid): boolean
                    • Parameters

                      • pid: number

                      Returns boolean

                • parseCookies: ((req) => object)
                    • (req): object
                    • Transform the cookie headers of a node HTTP req Object into a hash.

                      +

                      Parameters

                      • req: {
                            headers: {
                                [key: string]: string | string[];
                            };
                        }
                        • headers: {
                              [key: string]: string | string[];
                          }
                          • [key: string]: string | string[]

                      Returns object

                • parseHeadersForClientAddress: ((headers) => {
                      ip: string;
                      port: string | number;
                  })
                    • (headers): {
                          ip: string;
                          port: string | number;
                      }
                    • Return ip and port information if defined in the header

                      +

                      Parameters

                      • headers: Record<string, string | string[]>

                      Returns {
                          ip: string;
                          port: string | number;
                      }

                      • ip: string
                      • port: string | number
                • parseIPv6URI: ((addr) => {
                      host: string;
                      port: number;
                  })
                    • (addr): {
                          host: string;
                          port: number;
                      }
                    • Parse an IPv6 address, returning both host and port. +see https://github.com/actionhero/actionhero/issues/275

                      +

                      Parameters

                      • addr: string

                      Returns {
                          host: string;
                          port: number;
                      }

                      • host: string
                      • port: number
                • replaceDistWithSrc: ((f) => string)
                    • (f): string
                    • Used by generator functions running from your dist, it replaces the path with your src +Relies on api.config.general.paths

                      +

                      Parameters

                      • f: string

                      Returns string

                • safeGlobSync: ((match, args?) => string[])
                    • (match, args?): string[]
                    • Parameters

                      • match: string
                      • args: IOptions = {}

                      Returns string[]

                • sleep: ((time) => Promise<void>)
                    • (time): Promise<void>
                    • Sleep with a Promise

                      +

                      Parameters

                      • time: number

                      Returns Promise<void>

                • sortGlobalMiddleware: ((globalMiddlewareList, middleware) => void)
                    • (globalMiddlewareList, middleware): void
                    • Sorts an Array of Objects with a priority key

                      +

                      Parameters

                      • globalMiddlewareList: any[]
                      • middleware: {
                            [key: string]: any;
                        }
                        • [key: string]: any

                      Returns void

                • sourceRelativeLinkPath: ((linkFile, pluginPaths) => string | boolean)
                    • (linkFile, pluginPaths): string | boolean
                    • Parameters

                      • linkFile: string
                      • pluginPaths: string[]

                      Returns string | boolean

                \ No newline at end of file