mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 09:26:54 +00:00
Compare commits
247 Commits
api-update
...
v3.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a72cc4fe3 | ||
|
|
70cca0dbb0 | ||
|
|
7798e36458 | ||
|
|
9144485c39 | ||
|
|
cf15b67ede | ||
|
|
57cc94ff81 | ||
|
|
6a2a5b4565 | ||
|
|
5fdc1eda7f | ||
|
|
e00d1df32e | ||
|
|
31c221bd5e | ||
|
|
0aba4a6606 | ||
|
|
e9c7661804 | ||
|
|
446417bfb9 | ||
|
|
6b58ef731b | ||
|
|
b62129bf04 | ||
|
|
3d121ff01c | ||
|
|
d201087d4f | ||
|
|
1af4a2bed4 | ||
|
|
edcaed083e | ||
|
|
a4fe2c50df | ||
|
|
9ea991626d | ||
|
|
64f20f1cf5 | ||
|
|
41cc72fe63 | ||
|
|
d983f95906 | ||
|
|
c1f690633c | ||
|
|
8544d301ef | ||
|
|
52bcba9cfc | ||
|
|
21febd2c90 | ||
|
|
11daebb30a | ||
|
|
b817f98c10 | ||
|
|
563f583318 | ||
|
|
e4c7bfe686 | ||
|
|
69fa4908c3 | ||
|
|
4fa28d605f | ||
|
|
079b554f8b | ||
|
|
dec56335b9 | ||
|
|
50be972d4f | ||
|
|
507d183970 | ||
|
|
90edd4f91e | ||
|
|
5f11142599 | ||
|
|
7a635f9978 | ||
|
|
a17aeac558 | ||
|
|
af6ebed348 | ||
|
|
2f96b7634d | ||
|
|
97741faa69 | ||
|
|
94070d99e8 | ||
|
|
473be775f0 | ||
|
|
36af102251 | ||
|
|
cee740ea3f | ||
|
|
2fd7697300 | ||
|
|
f9609ce6cd | ||
|
|
a3064aa915 | ||
|
|
0a53a48521 | ||
|
|
05037b5315 | ||
|
|
06a3e69210 | ||
|
|
74c4b77d4b | ||
|
|
d381ff568e | ||
|
|
6db5c71506 | ||
|
|
507c9e7939 | ||
|
|
09610d0501 | ||
|
|
0862bf92d0 | ||
|
|
62162f6b8c | ||
|
|
eb501db09a | ||
|
|
964848a4e2 | ||
|
|
78dead1b49 | ||
|
|
39e6d6d2f9 | ||
|
|
5aff57ed6d | ||
|
|
4095471346 | ||
|
|
f7b9c52df1 | ||
|
|
d20d01524b | ||
|
|
5684c060bc | ||
|
|
ca8b31f280 | ||
|
|
ce9a0831a6 | ||
|
|
3a32968a17 | ||
|
|
e549f8bc3e | ||
|
|
3ab73459ad | ||
|
|
16af2e996d | ||
|
|
4f9a842b0e | ||
|
|
5dfd1a1fc1 | ||
|
|
c45a10c950 | ||
|
|
b45ba34f3c | ||
|
|
facee79c90 | ||
|
|
306eee071d | ||
|
|
00d55208a0 | ||
|
|
49fad801a5 | ||
|
|
c9f44ce72b | ||
|
|
a9a2528faf | ||
|
|
529edb7da5 | ||
|
|
f236dc05e2 | ||
|
|
c78936a225 | ||
|
|
1860b898f3 | ||
|
|
fd10772a9b | ||
|
|
cd36bd8a47 | ||
|
|
dda7f41231 | ||
|
|
371a57194c | ||
|
|
bfcc160a39 | ||
|
|
86fa531eb6 | ||
|
|
58052e94cb | ||
|
|
96f4281121 | ||
|
|
f9ae7c003b | ||
|
|
ec211d5a8d | ||
|
|
3faf83bbf7 | ||
|
|
8eed099503 | ||
|
|
e2874be4e7 | ||
|
|
1d6751a9cd | ||
|
|
f6afafa352 | ||
|
|
b4b195dc95 | ||
|
|
33f14467ec | ||
|
|
cb95105c1c | ||
|
|
845b82feef | ||
|
|
833a323f3c | ||
|
|
42e5f20425 | ||
|
|
2b25e6bfbb | ||
|
|
1a27341092 | ||
|
|
4680e451bb | ||
|
|
917d8b0d1b | ||
|
|
b8492ee45d | ||
|
|
08aac1d67a | ||
|
|
a13df6fb42 | ||
|
|
7089f5c0dc | ||
|
|
559c1a7a7b | ||
|
|
ac27d168e2 | ||
|
|
d1e6ec4589 | ||
|
|
ff379d03be | ||
|
|
1e4e933db2 | ||
|
|
ce960f4c8d | ||
|
|
1130456045 | ||
|
|
1617d2dcc3 | ||
|
|
ddacbd6e38 | ||
|
|
d69819e9fc | ||
|
|
49e4ba623f | ||
|
|
1b6c413fc2 | ||
|
|
e986535935 | ||
|
|
c30aac476c | ||
|
|
f9622d3788 | ||
|
|
f286a24686 | ||
|
|
166934d749 | ||
|
|
01d79177e8 | ||
|
|
50dac7fb46 | ||
|
|
714d23d401 | ||
|
|
565c4fc35a | ||
|
|
8d18c4b182 | ||
|
|
71cec6f142 | ||
|
|
14556223fd | ||
|
|
59c1c9c6a9 | ||
|
|
a120136f55 | ||
|
|
9b2d7eea5f | ||
|
|
4d7aa97b66 | ||
|
|
83eadcd2e5 | ||
|
|
c0bf346841 | ||
|
|
73c161fffe | ||
|
|
ee763301d0 | ||
|
|
c5f6eb9794 | ||
|
|
ec8a61a9ee | ||
|
|
87c17dbe10 | ||
|
|
790ce1681c | ||
|
|
cbad7380e1 | ||
|
|
ad36875be2 | ||
|
|
50288867a5 | ||
|
|
6b8995d149 | ||
|
|
82bbddac8d | ||
|
|
03936eb2ea | ||
|
|
c4019f7a08 | ||
|
|
992619f8e5 | ||
|
|
b995560ec6 | ||
|
|
f01ef9b86c | ||
|
|
702c5750fc | ||
|
|
d5d1b4129b | ||
|
|
7658d3e3ab | ||
|
|
9c1abc6b2e | ||
|
|
20bc135a7d | ||
|
|
8a373de880 | ||
|
|
395549c173 | ||
|
|
dbc180fa78 | ||
|
|
ff5c161469 | ||
|
|
82637245f3 | ||
|
|
bc3ed918da | ||
|
|
62bfcb1eb7 | ||
|
|
fbf54c9d36 | ||
|
|
b999918b71 | ||
|
|
224ce97fe8 | ||
|
|
f52dd01ca5 | ||
|
|
b8841e926d | ||
|
|
f0f54cb7f2 | ||
|
|
ebe759f5e0 | ||
|
|
58d97e08a5 | ||
|
|
21a438768b | ||
|
|
b3ed8da68f | ||
|
|
c5bd94131d | ||
|
|
3dec347ef0 | ||
|
|
4e9530f4d7 | ||
|
|
0da1b5a4dc | ||
|
|
8a7a671300 | ||
|
|
bf8a5d5a11 | ||
|
|
74378f0f12 | ||
|
|
0559fcca96 | ||
|
|
70d7bdb8c5 | ||
|
|
b6ea3da23f | ||
|
|
75a6a04db5 | ||
|
|
24fae252a7 | ||
|
|
d70a2a1d5e | ||
|
|
0d6e592614 | ||
|
|
44ee2f4440 | ||
|
|
b560d56346 | ||
|
|
344229b65f | ||
|
|
ca728f755b | ||
|
|
d8d6330260 | ||
|
|
c17c49bb17 | ||
|
|
7da7bff700 | ||
|
|
a0587f59d4 | ||
|
|
d62be87c9a | ||
|
|
35a200f055 | ||
|
|
d96681bfb5 | ||
|
|
d1b034b826 | ||
|
|
2387add445 | ||
|
|
7bf15a2d5d | ||
|
|
07e6dabce1 | ||
|
|
8e3feb81ca | ||
|
|
9a16c20dad | ||
|
|
17eb816ec9 | ||
|
|
79be5096d3 | ||
|
|
4fea383519 | ||
|
|
ca9ac52fae | ||
|
|
9cb25a585a | ||
|
|
17033254d4 | ||
|
|
2f5e0fc772 | ||
|
|
a35ceb9531 | ||
|
|
fbbd79babc | ||
|
|
501745b7ea | ||
|
|
6ea84ac8cd | ||
|
|
76c4333a81 | ||
|
|
ac459593a0 | ||
|
|
c5dac42da0 | ||
|
|
ef2200c257 | ||
|
|
fcb5f6747c | ||
|
|
dd75650a46 | ||
|
|
4872590b28 | ||
|
|
cc127bd040 | ||
|
|
9dd82a3cfb | ||
|
|
9340cf229c | ||
|
|
7c97fa9461 | ||
|
|
ef22aca5ff | ||
|
|
e71b63d261 | ||
|
|
e677ce0839 | ||
|
|
371f9d711a | ||
|
|
a5320dddb9 | ||
|
|
92b83c8d32 |
450
.dependency-cruiser.js
Normal file
450
.dependency-cruiser.js
Normal file
@@ -0,0 +1,450 @@
|
||||
/** @type {import('dependency-cruiser').IConfiguration} */
|
||||
module.exports = {
|
||||
forbidden: [
|
||||
/* rules from the 'recommended' preset: */
|
||||
{
|
||||
name: 'no-circular',
|
||||
severity: 'warn',
|
||||
comment:
|
||||
'This dependency is part of a circular relationship. You might want to revise ' +
|
||||
'your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ',
|
||||
from: {},
|
||||
to: {
|
||||
circular: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'no-orphans',
|
||||
comment:
|
||||
"This is an orphan module - it's likely not used (anymore?). Either use it or " +
|
||||
"remove it. If it's logical this module is an orphan (i.e. it's a config file), " +
|
||||
'add an exception for it in your dependency-cruiser configuration. By default ' +
|
||||
'this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration ' +
|
||||
'files (.d.ts), tsconfig.json and some of the babel and webpack configs.',
|
||||
severity: 'warn',
|
||||
from: {
|
||||
orphan: true,
|
||||
pathNot: [
|
||||
'(^|/)\\.[^/]+\\.(js|cjs|mjs|ts|json)$', // dot files
|
||||
'\\.d\\.ts$', // TypeScript declaration files
|
||||
'(^|/)tsconfig\\.json$', // TypeScript config
|
||||
'(^|/)(babel|webpack)\\.config\\.(js|cjs|mjs|ts|json)$', // other configs
|
||||
],
|
||||
},
|
||||
to: {},
|
||||
},
|
||||
{
|
||||
name: 'no-deprecated-core',
|
||||
comment:
|
||||
'A module depends on a node core module that has been deprecated. Find an alternative - these are ' +
|
||||
"bound to exist - node doesn't deprecate lightly.",
|
||||
severity: 'warn',
|
||||
from: {},
|
||||
to: {
|
||||
dependencyTypes: ['core'],
|
||||
path: [
|
||||
'^(v8/tools/codemap)$',
|
||||
'^(v8/tools/consarray)$',
|
||||
'^(v8/tools/csvparser)$',
|
||||
'^(v8/tools/logreader)$',
|
||||
'^(v8/tools/profile_view)$',
|
||||
'^(v8/tools/profile)$',
|
||||
'^(v8/tools/SourceMap)$',
|
||||
'^(v8/tools/splaytree)$',
|
||||
'^(v8/tools/tickprocessor-driver)$',
|
||||
'^(v8/tools/tickprocessor)$',
|
||||
'^(node-inspect/lib/_inspect)$',
|
||||
'^(node-inspect/lib/internal/inspect_client)$',
|
||||
'^(node-inspect/lib/internal/inspect_repl)$',
|
||||
'^(async_hooks)$',
|
||||
'^(punycode)$',
|
||||
'^(domain)$',
|
||||
'^(constants)$',
|
||||
'^(sys)$',
|
||||
'^(_linklist)$',
|
||||
'^(_stream_wrap)$',
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'not-to-deprecated',
|
||||
comment:
|
||||
'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' +
|
||||
'version of that module, or find an alternative. Deprecated modules are a security risk.',
|
||||
severity: 'warn',
|
||||
from: {},
|
||||
to: {
|
||||
dependencyTypes: ['deprecated'],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'no-non-package-json',
|
||||
severity: 'error',
|
||||
comment:
|
||||
"This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " +
|
||||
"That's problematic as the package either (1) won't be available on live (2 - worse) will be " +
|
||||
'available on live with an non-guaranteed version. Fix it by adding the package to the dependencies ' +
|
||||
'in your package.json.',
|
||||
from: {},
|
||||
to: {
|
||||
dependencyTypes: ['npm-no-pkg', 'npm-unknown'],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'not-to-unresolvable',
|
||||
comment:
|
||||
"This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " +
|
||||
'module: add it to your package.json. In all other cases you likely already know what to do.',
|
||||
severity: 'error',
|
||||
from: {},
|
||||
to: {
|
||||
couldNotResolve: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'no-duplicate-dep-types',
|
||||
comment:
|
||||
"Likely this module depends on an external ('npm') package that occurs more than once " +
|
||||
'in your package.json i.e. bot as a devDependencies and in dependencies. This will cause ' +
|
||||
'maintenance problems later on.',
|
||||
severity: 'warn',
|
||||
from: {},
|
||||
to: {
|
||||
moreThanOneDependencyType: true,
|
||||
// as it's pretty common to have a type import be a type only import
|
||||
// _and_ (e.g.) a devDependency - don't consider type-only dependency
|
||||
// types for this rule
|
||||
dependencyTypesNot: ['type-only'],
|
||||
},
|
||||
},
|
||||
|
||||
/* rules you might want to tweak for your specific situation: */
|
||||
{
|
||||
name: 'not-to-test',
|
||||
comment:
|
||||
"This module depends on code within a folder that should only contain tests. As tests don't " +
|
||||
"implement functionality this is odd. Either you're writing a test outside the test folder " +
|
||||
"or there's something in the test folder that isn't a test.",
|
||||
severity: 'error',
|
||||
from: {
|
||||
pathNot: '^(test)',
|
||||
},
|
||||
to: {
|
||||
path: '^(test)',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'not-to-spec',
|
||||
comment:
|
||||
'This module depends on a spec (test) file. The sole responsibility of a spec file is to test code. ' +
|
||||
"If there's something in a spec that's of use to other modules, it doesn't have that single " +
|
||||
'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.',
|
||||
severity: 'error',
|
||||
from: {},
|
||||
to: {
|
||||
path: '\\.(spec|test)\\.(js|mjs|cjs|ts|ls|coffee|litcoffee|coffee\\.md)$',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'not-to-dev-dep',
|
||||
severity: 'error',
|
||||
comment:
|
||||
"This module depends on an npm package from the 'devDependencies' section of your " +
|
||||
'package.json. It looks like something that ships to production, though. To prevent problems ' +
|
||||
"with npm packages that aren't there on production declare it (only!) in the 'dependencies'" +
|
||||
'section of your package.json. If this module is development only - add it to the ' +
|
||||
'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration',
|
||||
from: {
|
||||
path: '^(src)',
|
||||
pathNot: '\\.(spec|test)\\.(js|mjs|cjs|ts|ls|coffee|litcoffee|coffee\\.md)$',
|
||||
},
|
||||
to: {
|
||||
dependencyTypes: ['npm-dev'],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'optional-deps-used',
|
||||
severity: 'info',
|
||||
comment:
|
||||
'This module depends on an npm package that is declared as an optional dependency ' +
|
||||
"in your package.json. As this makes sense in limited situations only, it's flagged here. " +
|
||||
"If you're using an optional dependency here by design - add an exception to your" +
|
||||
'dependency-cruiser configuration.',
|
||||
from: {},
|
||||
to: {
|
||||
dependencyTypes: ['npm-optional'],
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'peer-deps-used',
|
||||
comment:
|
||||
'This module depends on an npm package that is declared as a peer dependency ' +
|
||||
'in your package.json. This makes sense if your package is e.g. a plugin, but in ' +
|
||||
'other cases - maybe not so much. If the use of a peer dependency is intentional ' +
|
||||
'add an exception to your dependency-cruiser configuration.',
|
||||
severity: 'warn',
|
||||
from: {},
|
||||
to: {
|
||||
dependencyTypes: ['npm-peer'],
|
||||
},
|
||||
},
|
||||
],
|
||||
options: {
|
||||
/* conditions specifying which files not to follow further when encountered:
|
||||
- path: a regular expression to match
|
||||
- dependencyTypes: see https://github.com/sverweij/dependency-cruiser/blob/main/doc/rules-reference.md#dependencytypes-and-dependencytypesnot
|
||||
for a complete list
|
||||
*/
|
||||
doNotFollow: {
|
||||
path: 'node_modules',
|
||||
},
|
||||
|
||||
/* conditions specifying which dependencies to exclude
|
||||
- path: a regular expression to match
|
||||
- dynamic: a boolean indicating whether to ignore dynamic (true) or static (false) dependencies.
|
||||
leave out if you want to exclude neither (recommended!)
|
||||
*/
|
||||
// exclude : {
|
||||
// path: '',
|
||||
// dynamic: true
|
||||
// },
|
||||
|
||||
/* pattern specifying which files to include (regular expression)
|
||||
dependency-cruiser will skip everything not matching this pattern
|
||||
*/
|
||||
// includeOnly : '',
|
||||
|
||||
/* dependency-cruiser will include modules matching against the focus
|
||||
regular expression in its output, as well as their neighbours (direct
|
||||
dependencies and dependents)
|
||||
*/
|
||||
// focus : '',
|
||||
|
||||
/* list of module systems to cruise */
|
||||
// moduleSystems: ['amd', 'cjs', 'es6', 'tsd'],
|
||||
|
||||
/* prefix for links in html and svg output (e.g. 'https://github.com/you/yourrepo/blob/develop/'
|
||||
to open it on your online repo or `vscode://file/${process.cwd()}/` to
|
||||
open it in visual studio code),
|
||||
*/
|
||||
// prefix: '',
|
||||
|
||||
/* false (the default): ignore dependencies that only exist before typescript-to-javascript compilation
|
||||
true: also detect dependencies that only exist before typescript-to-javascript compilation
|
||||
"specify": for each dependency identify whether it only exists before compilation or also after
|
||||
*/
|
||||
tsPreCompilationDeps: true,
|
||||
|
||||
/*
|
||||
list of extensions to scan that aren't javascript or compile-to-javascript.
|
||||
Empty by default. Only put extensions in here that you want to take into
|
||||
account that are _not_ parsable.
|
||||
*/
|
||||
// extraExtensionsToScan: [".json", ".jpg", ".png", ".svg", ".webp"],
|
||||
|
||||
/* if true combines the package.jsons found from the module up to the base
|
||||
folder the cruise is initiated from. Useful for how (some) mono-repos
|
||||
manage dependencies & dependency definitions.
|
||||
*/
|
||||
// combinedDependencies: false,
|
||||
|
||||
/* if true leave symlinks untouched, otherwise use the realpath */
|
||||
// preserveSymlinks: false,
|
||||
|
||||
/* TypeScript project file ('tsconfig.json') to use for
|
||||
(1) compilation and
|
||||
(2) resolution (e.g. with the paths property)
|
||||
|
||||
The (optional) fileName attribute specifies which file to take (relative to
|
||||
dependency-cruiser's current working directory). When not provided
|
||||
defaults to './tsconfig.json'.
|
||||
*/
|
||||
tsConfig: {
|
||||
fileName: 'tsconfig.json',
|
||||
},
|
||||
|
||||
/* Webpack configuration to use to get resolve options from.
|
||||
|
||||
The (optional) fileName attribute specifies which file to take (relative
|
||||
to dependency-cruiser's current working directory. When not provided defaults
|
||||
to './webpack.conf.js'.
|
||||
|
||||
The (optional) `env` and `arguments` attributes contain the parameters to be passed if
|
||||
your webpack config is a function and takes them (see webpack documentation
|
||||
for details)
|
||||
*/
|
||||
// webpackConfig: {
|
||||
// fileName: './webpack.config.js',
|
||||
// env: {},
|
||||
// arguments: {},
|
||||
// },
|
||||
|
||||
/* Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use
|
||||
for compilation (and whatever other naughty things babel plugins do to
|
||||
source code). This feature is well tested and usable, but might change
|
||||
behavior a bit over time (e.g. more precise results for used module
|
||||
systems) without dependency-cruiser getting a major version bump.
|
||||
*/
|
||||
// babelConfig: {
|
||||
// fileName: './.babelrc'
|
||||
// },
|
||||
|
||||
/* List of strings you have in use in addition to cjs/ es6 requires
|
||||
& imports to declare module dependencies. Use this e.g. if you've
|
||||
re-declared require, use a require-wrapper or use window.require as
|
||||
a hack.
|
||||
*/
|
||||
// exoticRequireStrings: [],
|
||||
/* options to pass on to enhanced-resolve, the package dependency-cruiser
|
||||
uses to resolve module references to disk. You can set most of these
|
||||
options in a webpack.conf.js - this section is here for those
|
||||
projects that don't have a separate webpack config file.
|
||||
|
||||
Note: settings in webpack.conf.js override the ones specified here.
|
||||
*/
|
||||
enhancedResolveOptions: {
|
||||
/* List of strings to consider as 'exports' fields in package.json. Use
|
||||
['exports'] when you use packages that use such a field and your environment
|
||||
supports it (e.g. node ^12.19 || >=14.7 or recent versions of webpack).
|
||||
|
||||
If you have an `exportsFields` attribute in your webpack config, that one
|
||||
will have precedence over the one specified here.
|
||||
*/
|
||||
exportsFields: ['exports'],
|
||||
/* List of conditions to check for in the exports field. e.g. use ['imports']
|
||||
if you're only interested in exposed es6 modules, ['require'] for commonjs,
|
||||
or all conditions at once `(['import', 'require', 'node', 'default']`)
|
||||
if anything goes for you. Only works when the 'exportsFields' array is
|
||||
non-empty.
|
||||
|
||||
If you have a 'conditionNames' attribute in your webpack config, that one will
|
||||
have precedence over the one specified here.
|
||||
*/
|
||||
conditionNames: ['import', 'require', 'node', 'default'],
|
||||
/*
|
||||
The extensions, by default are the same as the ones dependency-cruiser
|
||||
can access (run `npx depcruise --info` to see which ones that are in
|
||||
_your_ environment. If that list is larger than what you need (e.g.
|
||||
it contains .js, .jsx, .ts, .tsx, .cts, .mts - but you don't use
|
||||
TypeScript you can pass just the extensions you actually use (e.g.
|
||||
[".js", ".jsx"]). This can speed up the most expensive step in
|
||||
dependency cruising (module resolution) quite a bit.
|
||||
*/
|
||||
// extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"],
|
||||
/*
|
||||
If your TypeScript project makes use of types specified in 'types'
|
||||
fields in package.jsons of external dependencies, specify "types"
|
||||
in addition to "main" in here, so enhanced-resolve (the resolver
|
||||
dependency-cruiser uses) knows to also look there. You can also do
|
||||
this if you're not sure, but still use TypeScript. In a future version
|
||||
of dependency-cruiser this will likely become the default.
|
||||
*/
|
||||
mainFields: ['main', 'types'],
|
||||
},
|
||||
reporterOptions: {
|
||||
dot: {
|
||||
/* pattern of modules that can be consolidated in the detailed
|
||||
graphical dependency graph. The default pattern in this configuration
|
||||
collapses everything in node_modules to one folder deep so you see
|
||||
the external modules, but not the innards your app depends upon.
|
||||
*/
|
||||
collapsePattern: 'node_modules/(@[^/]+/[^/]+|[^/]+)',
|
||||
|
||||
/* Options to tweak the appearance of your graph.See
|
||||
https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions
|
||||
for details and some examples. If you don't specify a theme
|
||||
don't worry - dependency-cruiser will fall back to the default one.
|
||||
*/
|
||||
// theme: {
|
||||
// graph: {
|
||||
// /* use splines: "ortho" for straight lines. Be aware though
|
||||
// graphviz might take a long time calculating ortho(gonal)
|
||||
// routings.
|
||||
// */
|
||||
// splines: "true"
|
||||
// },
|
||||
// modules: [
|
||||
// {
|
||||
// criteria: { matchesFocus: true },
|
||||
// attributes: {
|
||||
// fillcolor: "lime",
|
||||
// penwidth: 2,
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// criteria: { matchesFocus: false },
|
||||
// attributes: {
|
||||
// fillcolor: "lightgrey",
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// criteria: { matchesReaches: true },
|
||||
// attributes: {
|
||||
// fillcolor: "lime",
|
||||
// penwidth: 2,
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// criteria: { matchesReaches: false },
|
||||
// attributes: {
|
||||
// fillcolor: "lightgrey",
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// criteria: { source: "^src/model" },
|
||||
// attributes: { fillcolor: "#ccccff" }
|
||||
// },
|
||||
// {
|
||||
// criteria: { source: "^src/view" },
|
||||
// attributes: { fillcolor: "#ccffcc" }
|
||||
// },
|
||||
// ],
|
||||
// dependencies: [
|
||||
// {
|
||||
// criteria: { "rules[0].severity": "error" },
|
||||
// attributes: { fontcolor: "red", color: "red" }
|
||||
// },
|
||||
// {
|
||||
// criteria: { "rules[0].severity": "warn" },
|
||||
// attributes: { fontcolor: "orange", color: "orange" }
|
||||
// },
|
||||
// {
|
||||
// criteria: { "rules[0].severity": "info" },
|
||||
// attributes: { fontcolor: "blue", color: "blue" }
|
||||
// },
|
||||
// {
|
||||
// criteria: { resolved: "^src/model" },
|
||||
// attributes: { color: "#0000ff77" }
|
||||
// },
|
||||
// {
|
||||
// criteria: { resolved: "^src/view" },
|
||||
// attributes: { color: "#00770077" }
|
||||
// }
|
||||
// ]
|
||||
// }
|
||||
},
|
||||
archi: {
|
||||
/* pattern of modules that can be consolidated in the high level
|
||||
graphical dependency graph. If you use the high level graphical
|
||||
dependency graph reporter (`archi`) you probably want to tweak
|
||||
this collapsePattern to your situation.
|
||||
*/
|
||||
collapsePattern:
|
||||
'^(packages|src|lib|app|bin|test(s?)|spec(s?))/[^/]+|node_modules/(@[^/]+/[^/]+|[^/]+)',
|
||||
|
||||
/* Options to tweak the appearance of your graph.See
|
||||
https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions
|
||||
for details and some examples. If you don't specify a theme
|
||||
for 'archi' dependency-cruiser will use the one specified in the
|
||||
dot section (see above), if any, and otherwise use the default one.
|
||||
*/
|
||||
// theme: {
|
||||
// },
|
||||
},
|
||||
text: {
|
||||
highlightFocused: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
// generated: dependency-cruiser@13.0.5 on 2023-07-08T03:48:00.632Z
|
||||
11
.eslintrc
11
.eslintrc
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"extends": ["plugin:@typescript-eslint/recommended"],
|
||||
"parserOptions": { "ecmaVersion": "latest", "sourceType": "script" },
|
||||
"rules": {
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"quotes": [2, "single", { "avoidEscape": true, "allowTemplateLiterals" : true }],
|
||||
"semi": ["error", "always"],
|
||||
"@typescript-eslint/no-empty-interface": 0
|
||||
}
|
||||
}
|
||||
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
@@ -1,2 +1 @@
|
||||
src/* @jacoobes
|
||||
docs/* @Murtatrxx
|
||||
* @jacoobes
|
||||
|
||||
33
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
33
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: "[BUG] Write a descriptive title."
|
||||
labels: bug
|
||||
assignees: EvolutionX-10, jacoobes, Murtatrxx
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Versioning**
|
||||
NodeJS version:
|
||||
DiscordJS version:
|
||||
SernHandler version:
|
||||
Channel: (e.g. beta)
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Sern Community Support
|
||||
url: https://discord.gg/9w8jzsR48U
|
||||
about: Please ask and answer questions here.
|
||||
43
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
43
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Ask for things that are not in sern
|
||||
title: "[Feature] Request a feature"
|
||||
labels: feature
|
||||
assignees: EvolutionX-10, jacoobes, Murtatrxx
|
||||
|
||||
---
|
||||
Request a new feature!
|
||||
---
|
||||
### Is your proposal related to a problem?
|
||||
|
||||
<!--
|
||||
Provide a clear and concise description of what the problem is.
|
||||
For example, "I'm always frustrated when..."
|
||||
-->
|
||||
|
||||
(Write your answer here.)
|
||||
|
||||
### Describe the solution you'd like
|
||||
|
||||
<!--
|
||||
Provide a clear and concise description of what you want to happen.
|
||||
-->
|
||||
|
||||
(Describe your proposed solution here.)
|
||||
|
||||
### Describe alternatives you've considered
|
||||
|
||||
<!--
|
||||
Let us know about other solutions you've tried or researched.
|
||||
-->
|
||||
|
||||
(Write your answer here.)
|
||||
|
||||
### Additional context
|
||||
|
||||
<!--
|
||||
Is there anything else you can add about the proposal?
|
||||
You might want to link to related issues here, if you haven't already.
|
||||
-->
|
||||
|
||||
(Write your answer here.)
|
||||
26
.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
vendored
Normal file
26
.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
# Description
|
||||
|
||||
Please include a summary of the changes and the related issue. Please also include relevant motivation and context. List any dependencies that are required for this change.
|
||||
|
||||
Fixes # (issue)
|
||||
|
||||
## Type of change
|
||||
|
||||
Please delete options that are not relevant.
|
||||
|
||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] New feature (non-breaking change which adds functionality)
|
||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||
- [ ] This change requires a documentation update
|
||||
|
||||
# Checklist:
|
||||
|
||||
- [ ] My code follows the style guidelines of this project
|
||||
- [ ] I have performed a self-review of my code
|
||||
- [ ] I have commented my code, particularly in hard-to-understand areas
|
||||
- [ ] I have made corresponding changes to the documentation
|
||||
- [ ] My changes generate no new warnings
|
||||
- [ ] I have added tests that prove my fix is effective or that my feature works
|
||||
- [ ] New and existing unit tests pass locally with my changes
|
||||
- [ ] Any dependent changes have been merged and published in downstream modules
|
||||
|
||||
38
.github/SECURITY.md
vendored
38
.github/SECURITY.md
vendored
@@ -6,14 +6,44 @@ Project is currently under heavy development but you can try out our [npm packag
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 0.1.0 @ dev | :white_check_mark: |
|
||||
| 2.6.1 | YES |
|
||||
| 2.6.0 | YES |
|
||||
| 2.5.3 | YES |
|
||||
| 2.5.2 | YES |
|
||||
| 2.5.1 | YES |
|
||||
| 2.5.0 | YES |
|
||||
| 2.1.1 | NO |
|
||||
| 2.1.0 | NO |
|
||||
| 2.0.0 | NO |
|
||||
| 1.2.1 | NO |
|
||||
| 1.2.0 | NO |
|
||||
| 1.1.0 | NO |
|
||||
1.0.1 | NO
|
||||
1.0.0 | NO
|
||||
1.1.9 @ beta | NO
|
||||
1.1.8 @ beta | NO
|
||||
1.1.7 @ beta | NO
|
||||
1.1.6 @ beta | NO
|
||||
1.1.5 @ beta | NO
|
||||
1.1.4 @ beta | NO
|
||||
1.1.3 @ beta | NO
|
||||
1.1.2 @ beta | NO
|
||||
1.1.1 @ beta | NO
|
||||
1.1.0 @ beta | NO
|
||||
1.0.4 @ beta | NO
|
||||
1.0.3 @ beta | NO
|
||||
1.0.2 @ beta | NO
|
||||
1.0.1 @ beta | NO
|
||||
1.0.0 @ beta | NO
|
||||
0.0.1 @ dev | NO (TRY IT)
|
||||
|
||||
* Dev versions might include bugs, use it with your own risk.
|
||||
|
||||
* Dev versions might include bugs and not supported use stable versions.
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
You can report a vulnerability by opening an issue on the [project's GitHub](https://github.com/SernHandler/Sern/issues) repository.
|
||||
You can report a vulnerability by opening an issue on the [project's GitHub](https://github.com/sern-handler/handler/issues) repository.
|
||||
|
||||
Please provide as much information as possible when reporting a vulnerability. We are lookin information for, the affected version, and the steps to reproduce the vulnerability.
|
||||
Please provide as much information as possible when reporting a vulnerability. We are looking information for, the affected version, and the steps to reproduce the vulnerability.
|
||||
|
||||
Be patient, we are working on fixing all reported vulnerabilities.
|
||||
|
||||
10
.github/workflows/codeql-analysis.yml
vendored
10
.github/workflows/codeql-analysis.yml
vendored
@@ -3,8 +3,10 @@ name: "CodeQL"
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
paths: ["src/**/*"]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
paths: ["src/**/*"]
|
||||
schedule:
|
||||
- cron: '37 20 * * 4'
|
||||
|
||||
@@ -24,14 +26,14 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
uses: github/codeql-action/analyze@v2
|
||||
|
||||
50
.github/workflows/continuous-integration.yml
vendored
Normal file
50
.github/workflows/continuous-integration.yml
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
name: Continuous Integration
|
||||
|
||||
on:
|
||||
# Trigger the workflow on push or pull request or custom
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- '*.ts'
|
||||
pull_request_target:
|
||||
branches:
|
||||
main
|
||||
paths:
|
||||
- '*ts'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
Prettier:
|
||||
name: Run Prettier
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check out Git repository
|
||||
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
|
||||
with:
|
||||
node-version: 17
|
||||
|
||||
- name: Install pnpm
|
||||
run: npm i -g yarn
|
||||
|
||||
# Prettier must be in `package.json`
|
||||
- name: Install Node.js dependencies
|
||||
run: yarn --immutable
|
||||
|
||||
- name: Run Prettier
|
||||
run: yarn pretty
|
||||
|
||||
- name: Create Pull Request
|
||||
id: cpr
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
with:
|
||||
commit-message: "style: pretty please"
|
||||
branch: prettier
|
||||
delete-branch: true
|
||||
branch-suffix: short-commit-hash
|
||||
title: "style: pretty please"
|
||||
body: "pretty pretty prettier"
|
||||
reviewers: EvolutionX-10
|
||||
20
.github/workflows/dependency-review.yml
vendored
Normal file
20
.github/workflows/dependency-review.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# Dependency Review Action
|
||||
#
|
||||
# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
|
||||
#
|
||||
# Source repository: https://github.com/actions/dependency-review-action
|
||||
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
||||
name: 'Dependency Review'
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout Repository'
|
||||
uses: actions/checkout@v3
|
||||
- name: 'Dependency Review'
|
||||
uses: actions/dependency-review-action@v2
|
||||
32
.github/workflows/npm-publish.yml
vendored
32
.github/workflows/npm-publish.yml
vendored
@@ -1,30 +1,18 @@
|
||||
name: NPM / Publish
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [created]
|
||||
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
build:
|
||||
test-and-publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm ci
|
||||
- run: npm test
|
||||
|
||||
publish-npm:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
node-version: 17
|
||||
- run: yarn --immutable
|
||||
- run: yarn build:prod
|
||||
- uses: JS-DevTools/npm-publish@v1
|
||||
with:
|
||||
node-version: 16
|
||||
registry-url: https://registry.npmjs.org/
|
||||
- run: npm ci
|
||||
- run: npm publish
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
||||
token: ${{ secrets.NPM_TOKEN }}
|
||||
access: "public"
|
||||
|
||||
14
.github/workflows/release-please.yml
vendored
Normal file
14
.github/workflows/release-please.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
name: release-please
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
release-please:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: google-github-actions/release-please-action@v3
|
||||
with:
|
||||
release-type: node
|
||||
package-name: release-please-action
|
||||
bump-patch-for-minor-pre-major: true
|
||||
|
||||
29
.github/workflows/test.yml
vendored
29
.github/workflows/test.yml
vendored
@@ -1,29 +0,0 @@
|
||||
name: Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
run-tests:
|
||||
name: Run Tests
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check out Git repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 17
|
||||
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
7
.gitignore
vendored
7
.gitignore
vendored
@@ -82,5 +82,12 @@ dist
|
||||
# VisualStudio Config file
|
||||
.vs
|
||||
|
||||
# VSCode settings and cache
|
||||
.vscode
|
||||
|
||||
# IntelliJ IDEA Config file
|
||||
.idea/
|
||||
|
||||
# Yarn files
|
||||
.yarn/install-state.gz
|
||||
.yarn/build-state.yml
|
||||
|
||||
18
.npmignore
18
.npmignore
@@ -1,5 +1,4 @@
|
||||
src/
|
||||
tsconfig.json
|
||||
docs/
|
||||
.gitignore
|
||||
|
||||
@@ -9,7 +8,7 @@ logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
.yarn
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
@@ -54,6 +53,7 @@ typings/
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
@@ -81,9 +81,7 @@ typings/
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# TypeScript build output
|
||||
dist
|
||||
|
||||
test
|
||||
# VisualStudio Config file
|
||||
.vs
|
||||
|
||||
@@ -106,4 +104,12 @@ CODE_OF_CONDUCT.md
|
||||
|
||||
babel.config.js
|
||||
|
||||
tests/
|
||||
tsup.config.js
|
||||
|
||||
tsconfig-base.json
|
||||
|
||||
tsconfig-cjs.json
|
||||
|
||||
tsconfig-esm.json
|
||||
|
||||
renovate.json
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
README.md
|
||||
.github/
|
||||
*.md
|
||||
dist/
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"semi": true,
|
||||
"trailingComma": "all",
|
||||
"singleQuote": true,
|
||||
"printWidth": 100,
|
||||
"tabWidth": 4,
|
||||
"arrowParens": "avoid"
|
||||
}
|
||||
873
.yarn/releases/yarn-3.5.1.cjs
vendored
Executable file
873
.yarn/releases/yarn-3.5.1.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
5
.yarnrc.yml
Normal file
5
.yarnrc.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
enableGlobalCache: true
|
||||
|
||||
nodeLinker: node-modules
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.5.1.cjs
|
||||
251
CHANGELOG.md
Normal file
251
CHANGELOG.md
Normal file
@@ -0,0 +1,251 @@
|
||||
# Changelog
|
||||
|
||||
## [3.0.0](https://github.com/sern-handler/handler/compare/v2.6.3...v3.0.0) (2023-07-29)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* v3 ([#294](https://github.com/sern-handler/handler/issues/294))
|
||||
|
||||
### Features
|
||||
|
||||
* v3 ([#294](https://github.com/sern-handler/handler/issues/294)) ([7798e36](https://github.com/sern-handler/handler/commit/7798e36458c7f555d2bcb8a5857a6db47b7211da))
|
||||
|
||||
|
||||
### Miscellaneous Chores
|
||||
|
||||
* release 3.0.0 ([70cca0d](https://github.com/sern-handler/handler/commit/70cca0dbb01e70b47a8c899b1fc4f43dee5ed8ed))
|
||||
|
||||
## [2.6.3](https://github.com/sern-handler/handler/compare/v2.6.2...v2.6.3) (2023-06-17)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* autocomplete nested option and merge main ([5fdc1ed](https://github.com/sern-handler/handler/commit/5fdc1eda7f4fcc1f94af7eca661660c0edeb3251))
|
||||
|
||||
## [2.6.2](https://github.com/sern-handler/handler/compare/v2.6.1...v2.6.2) (2023-04-15)
|
||||
|
||||
|
||||
### Miscellaneous Chores
|
||||
|
||||
* release 2.6.2 ([c1f6906](https://github.com/sern-handler/handler/commit/c1f690633c55ba41db1e035b7c16f9e19c70b385))
|
||||
|
||||
## [2.6.1](https://github.com/sern-handler/handler/compare/v2.6.0...v2.6.1) (2023-03-17)
|
||||
|
||||
|
||||
### Miscellaneous Chores
|
||||
|
||||
* release 2.6.1 ([f9609ce](https://github.com/sern-handler/handler/commit/f9609ce6cd777fa0eb595d8c48d57905bbce5966))
|
||||
|
||||
## [2.6.0](https://github.com/sern-handler/handler/compare/v2.5.3...v2.6.0) (2023-03-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* adding pure annotation for better tree shaking ([d20d015](https://github.com/sern-handler/handler/commit/d20d01524b872549da501e21feec147ab204f397))
|
||||
|
||||
## [2.5.3](https://github.com/sern-handler/handler/compare/v2.5.2...v2.5.3) (2023-02-16)
|
||||
|
||||
|
||||
### Miscellaneous Chores
|
||||
|
||||
* release 2.5.3 ([ce9a083](https://github.com/sern-handler/handler/commit/ce9a0831a6e47dd38648f34653f0bd89b1d2e48e))
|
||||
|
||||
## [2.5.2](https://github.com/sern-handler/handler/compare/v2.5.1...v2.5.2) (2023-02-16)
|
||||
|
||||
|
||||
### Reverts
|
||||
|
||||
* version ([facee79](https://github.com/sern-handler/handler/commit/facee79c904ad663d3c57ce56fb825419fcc12f9))
|
||||
|
||||
## [2.5.1](https://github.com/sern-handler/handler/compare/v2.5.0...v2.5.1) (2023-02-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Adding my bot to readme ([#210](https://github.com/sern-handler/handler/issues/210)) ([96f4281](https://github.com/sern-handler/handler/commit/96f42811218e4898a47e75a8138ccd452ae2c5c2))
|
||||
* Adding the WIP to my bot ([86fa531](https://github.com/sern-handler/handler/commit/86fa531eb620d2ac649bad6decb29d5c55a25445))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* autocomplete ([1860b89](https://github.com/sern-handler/handler/commit/1860b898f3a231840e2a8b781e007ef9d6f587a4))
|
||||
|
||||
|
||||
### Miscellaneous Chores
|
||||
|
||||
* release 2.5.1 ([c78936a](https://github.com/sern-handler/handler/commit/c78936a22574da4af71826f5b5f72f354a4eb06a))
|
||||
|
||||
## [2.5.0](https://github.com/sern-handler/handler/compare/v2.1.1...v2.5.0) (2023-01-30)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* simpler plugins ([#193](https://github.com/sern-handler/handler/issues/193))
|
||||
|
||||
### Features
|
||||
|
||||
* simpler plugins ([#193](https://github.com/sern-handler/handler/issues/193)) ([33f1446](https://github.com/sern-handler/handler/commit/33f14467ec413e003a82503c8a77cb42a6194281))
|
||||
|
||||
|
||||
### Miscellaneous Chores
|
||||
|
||||
* release 2.5.0 ([b4b195d](https://github.com/sern-handler/handler/commit/b4b195dc9586736760d0b78caa8589f3d6131f8a))
|
||||
|
||||
## [2.1.1](https://github.com/sern-handler/handler/compare/v2.1.0...v2.1.1) (2022-12-31)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* modals remapping ([a13df6f](https://github.com/sern-handler/handler/commit/a13df6fb424d256476284da49024dbe56e82baab))
|
||||
|
||||
## [2.1.0](https://github.com/sern-handler/handler/compare/v2.0.0...v2.1.0) (2022-12-30)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* grammar ([c30aac4](https://github.com/sern-handler/handler/commit/c30aac476cdc2094de34f9f67b5805204cc5e4dd))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* multi parameter events ([e986535](https://github.com/sern-handler/handler/commit/e98653593566ef4635493e0c997bd107a7a3a2a2))
|
||||
|
||||
## [2.0.0](https://github.com/sern-handler/handler/compare/v1.2.1...v2.0.0) (2022-12-28)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* (2.0 global services) ([#156](https://github.com/sern-handler/handler/issues/156))
|
||||
|
||||
### Features
|
||||
|
||||
* (2.0 global services) ([#156](https://github.com/sern-handler/handler/issues/156)) ([1455622](https://github.com/sern-handler/handler/commit/14556223fd6f79b797fb2aee03e795d4f4e94a8b))
|
||||
|
||||
## [1.2.1](https://github.com/sern-handler/handler/compare/v1.2.0...v1.2.1) (2022-10-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **autocomplete:** now support multiple autocomplete options ([#147](https://github.com/sern-handler/handler/issues/147)) ([cbad738](https://github.com/sern-handler/handler/commit/cbad7380e1993b96c643f365726457f63e4fbd5d))
|
||||
|
||||
## [1.2.0](https://github.com/sern-handler/handler/compare/v1.1.0...v1.2.0) (2022-09-28)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* allow constructable modules ([#133](https://github.com/sern-handler/handler/issues/133)) ([03936eb](https://github.com/sern-handler/handler/commit/03936eb2ea1d1af7cada04d77bb8345d63a5e20f))
|
||||
* classmodules@arcs ([#143](https://github.com/sern-handler/handler/issues/143)) ([5028886](https://github.com/sern-handler/handler/commit/50288867a5b171511941a1be3877d721694e9f77))
|
||||
* update CODEOWNERS ([6b8995d](https://github.com/sern-handler/handler/commit/6b8995d149c857558415a6c151a3f575ec373445))
|
||||
|
||||
|
||||
### Reverts
|
||||
|
||||
* feat of allow constructable modules ([#138](https://github.com/sern-handler/handler/issues/138)) ([82bbdda](https://github.com/sern-handler/handler/commit/82bbddac8d656b60b3a1fb2471ea03ee5224f5c3))
|
||||
|
||||
## [1.1.0](https://github.com/sern-handler/handler/compare/v1.0.0...v1.1.0) (2022-08-29)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add proper error handling ([#115](https://github.com/sern-handler/handler/issues/115)) ([395549c](https://github.com/sern-handler/handler/commit/395549c173cb62a18205e451bf2cb5579ba9a6e0))
|
||||
|
||||
|
||||
### Miscellaneous Chores
|
||||
|
||||
* release 1.1.0 ([8a373de](https://github.com/sern-handler/handler/commit/8a373de880ff18df85af812adf9f6f6a4f45028d))
|
||||
|
||||
## 1.0.0 (2022-08-15)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* improve quality of code, refactorings, QOL intellisense (#64)
|
||||
|
||||
### Features
|
||||
|
||||
* add .prettierignore and ignore README.md ([7ae5ecf](https://github.com/sern-handler/handler/commit/7ae5ecf1a64700d667e85420ae4b2eaf31781d85))
|
||||
* Add castings for res ([2697e35](https://github.com/sern-handler/handler/commit/2697e35b2e5b754ea9d0d84db3720fb68b3f43db))
|
||||
* Add DefinetlyDefined type, more todo statements ([c8c0c84](https://github.com/sern-handler/handler/commit/c8c0c841db2423e29d69bbc1a3ab590bfebb5d5b))
|
||||
* add discord.js as a peerDependency instead ([b3ed8da](https://github.com/sern-handler/handler/commit/b3ed8da68f55b69a7fe1697cd88c552243cc637f))
|
||||
* add docs/ to npmignore ([f90342d](https://github.com/sern-handler/handler/commit/f90342d6b140241f7a6a95dea71c05bf309a7a52))
|
||||
* add externallyUsed.ts and support BothCommands again ([fc81bfc](https://github.com/sern-handler/handler/commit/fc81bfc6d75e4722486766715abe7271ad21cd7f))
|
||||
* add feature-request.md ([#92](https://github.com/sern-handler/handler/issues/92)) ([0d6e592](https://github.com/sern-handler/handler/commit/0d6e592614f0d4eeaaa9ffe5ba245fe002f5b907))
|
||||
* add frontmatter ([#95](https://github.com/sern-handler/handler/issues/95)) ([75a6a04](https://github.com/sern-handler/handler/commit/75a6a04db56551049387e38979bb7ef21356f303))
|
||||
* Add messageComponent handler ([d29298c](https://github.com/sern-handler/handler/commit/d29298c17a1d67146bdddb9cf07a16924c55ed3a))
|
||||
* add version.txt ([4fea383](https://github.com/sern-handler/handler/commit/4fea383519b9905c17c7679587f69b530c08cec8))
|
||||
* added conventional commits ([741cf13](https://github.com/sern-handler/handler/commit/741cf13fd56ac49ebca6f73ecc3a2209f00e774d))
|
||||
* Added SECURITY file & formatted some TypeScript code ([779011a](https://github.com/sern-handler/handler/commit/779011a124ab76bbfb19a2a11889bf9255cbd360))
|
||||
* adding better typings, refactoring ([99e2a99](https://github.com/sern-handler/handler/commit/99e2a997edaac1ba880e56bf782ecd1fa5e96b4c))
|
||||
* Adding docs to some data structures, moving to default from export files ([0ae541d](https://github.com/sern-handler/handler/commit/0ae541daba4c5d2aa3e612ab4b78fd6a858717ad))
|
||||
* adding modal and autocomplete support ([77856ce](https://github.com/sern-handler/handler/commit/77856ce5d0d8d1e2e2f5a971269224a4174bc205))
|
||||
* adding refactoring for repetitive event plugin processing ([475b073](https://github.com/sern-handler/handler/commit/475b0736d573bb8969b2a0eb9180231aa8618a0e))
|
||||
* Adding sern event listeners, overriding and typing methods ([115d1a4](https://github.com/sern-handler/handler/commit/115d1a49b52eb45d9b68ba015f8f734b902e9a60))
|
||||
* Adding TextInput map & starting event plugins for message components ([6ac9720](https://github.com/sern-handler/handler/commit/6ac9720260040afb12d232b002c28db99b18e093))
|
||||
* Aliases optional ([430315a](https://github.com/sern-handler/handler/commit/430315ad02060121e75604aee40c246c71a7e8d2))
|
||||
* better looking typings for modules ([53bc080](https://github.com/sern-handler/handler/commit/53bc080a290fd5064993aa0d98497d4b239ac8f3))
|
||||
* broadening EventPlugin default generic type, reformat with prettier ([88dcdee](https://github.com/sern-handler/handler/commit/88dcdee818e42405234ef502087226a8c042c92f))
|
||||
* CodeQL ([7012da6](https://github.com/sern-handler/handler/commit/7012da60530c2b0b5d8cc97b417a80cd8031f51f))
|
||||
* delete partition.ts ([f6d584c](https://github.com/sern-handler/handler/commit/f6d584cf99abdb292985f812e64553a37ab51a01))
|
||||
* Edited event names for more conciseness, finished basic event emitters ([3f64a8a](https://github.com/sern-handler/handler/commit/3f64a8aa0a47a09f822d54f2b3f03bc42faa10f7))
|
||||
* finished interactionCreate.ts handling? (need test) ([97907b7](https://github.com/sern-handler/handler/commit/97907b746fc94d6e8b65e2fec1cce4b0c3160491))
|
||||
* finishing autocomplete!! ([d63423c](https://github.com/sern-handler/handler/commit/d63423cfc458cb9ab07b9900a7c4d2f7ea8d71b9))
|
||||
* finishing optionData for autocomplete changes, adding class for builder ([b08eebf](https://github.com/sern-handler/handler/commit/b08eebf6850acaee3b56bb1c60aec2a026a5144c))
|
||||
* Finishing up autocomplete, need to test ([d50b801](https://github.com/sern-handler/handler/commit/d50b8013ee343b2be0ed232938e9f5f91c43b493))
|
||||
* fix duplicate ([c5bd941](https://github.com/sern-handler/handler/commit/c5bd94131dfb20b2c69b7eeb96f3ad89d6de43f4))
|
||||
* **handler:** adding higher-order-function wrappers to increase readability and shorten code ([0f0b0fb](https://github.com/sern-handler/handler/commit/0f0b0fb61c80654179e2c6d6f69e50c70114201b))
|
||||
* **handler:** command plugins work?! ([70bd12d](https://github.com/sern-handler/handler/commit/70bd12dd61182f48445c707a9199421b1dba586e))
|
||||
* **handler:** progress on event plugins ([2f61399](https://github.com/sern-handler/handler/commit/2f61399b5e5ad53ee3165e19cb74dd279b827b99))
|
||||
* **higherorders.ts:** a new function that acts as a command options builder ([651009c](https://github.com/sern-handler/handler/commit/651009c9ed5e8e04cf44fa4438f94a9e119aa8f8))
|
||||
* improve quality of code, refactorings, QOL intellisense ([#64](https://github.com/sern-handler/handler/issues/64)) ([e71b63d](https://github.com/sern-handler/handler/commit/e71b63d261d86b17ddc05fbee999f63623d8c6d1))
|
||||
* Improved TypeScript experince ([dad3042](https://github.com/sern-handler/handler/commit/dad3042a644b0e47d01319f48eefe01632678cc3))
|
||||
* interactionCreate.ts refactoring ([c4e8e51](https://github.com/sern-handler/handler/commit/c4e8e517b3f4bb6baca902251a0afa22b2548450))
|
||||
* Making name required in auto cmp interactions ([ac8a2f4](https://github.com/sern-handler/handler/commit/ac8a2f4c86a1c426d32e388a5439a8696db52279))
|
||||
* move name and description out of OptionsData[] ([93942bd](https://github.com/sern-handler/handler/commit/93942bd0e7d0ac688d20159cab2c70c3285085f4))
|
||||
* Optional plugins to reduce bloat ([2b81d53](https://github.com/sern-handler/handler/commit/2b81d53503209a738b70d238512c82542d3d88e8))
|
||||
* **prefix:** make defaultPrefix optional ([f6b88dc](https://github.com/sern-handler/handler/commit/f6b88dcdc80c407e14f4d6ae73eb27e75d195e18))
|
||||
* **readme.md:** added basic command examples ([63b2d3a](https://github.com/sern-handler/handler/commit/63b2d3a5723ac6e1f0baa0de8b65640cecd7d634))
|
||||
* remove comments about prev commit ([a220949](https://github.com/sern-handler/handler/commit/a2209494bdd05ca89176aff82f7d3afce0b8de46))
|
||||
* remove copyright bloat ([48737ef](https://github.com/sern-handler/handler/commit/48737efea3c0fce572238701e72335293333379f))
|
||||
* remove externallyUsed.ts ([3dec347](https://github.com/sern-handler/handler/commit/3dec347ef0957845601f0eb2acb3f1815d1e9ca1))
|
||||
* Revamp Docs ([#47](https://github.com/sern-handler/handler/issues/47)) ([163e48f](https://github.com/sern-handler/handler/commit/163e48f3eb38d37500cefc8d0c722c083a3070c7))
|
||||
* **sern.ts:** adding logging instead of large complaining messages from bot ([00a5fa4](https://github.com/sern-handler/handler/commit/00a5fa43ad9e0b4c7d5ef1f2772a4cb186768837))
|
||||
* **sern.ts:** beginning to add new basic logger system ([ef9d53e](https://github.com/sern-handler/handler/commit/ef9d53e6b1a9009eab5ce9ff9f8b5542d1d7cf7f))
|
||||
* **sern.ts:** changed how module is passed around, now has name property at runtime ([40fb723](https://github.com/sern-handler/handler/commit/40fb7231436331c97fa791eab3b8b51636e826f1))
|
||||
* **sern.ts:** changing default value of args in text based cmd to string[], from string ([1397974](https://github.com/sern-handler/handler/commit/1397974fb6e6d8c1b1e82db8272ef0a57916022c))
|
||||
* **sern.ts:** changing default value of args in text based cmd to string[], from string ([e0541f7](https://github.com/sern-handler/handler/commit/e0541f777bc3dcb1ec0c0cccf219b9fa66199a2b))
|
||||
* **sern.ts:** changing text-based command parser fn value to string[] ([b11f999](https://github.com/sern-handler/handler/commit/b11f9996749977a16e516523af7a8e2a9e6521ae))
|
||||
* **sern.ts:** renaming Module.delegate to Module.execute ([8702876](https://github.com/sern-handler/handler/commit/870287674aa7eccbe1fc890d1cf2cd808982b801))
|
||||
* should be able to register other nodejs event emitters ([b8cda35](https://github.com/sern-handler/handler/commit/b8cda351e1f549422692c633255ac1d6c7d78a9b))
|
||||
* shrink package size, improve dev deps, esm and cjs support ([#98](https://github.com/sern-handler/handler/issues/98)) ([74378f0](https://github.com/sern-handler/handler/commit/74378f0f12cf5d16b90ddbc01fb42505e0235c39))
|
||||
* update example ([0da1b5a](https://github.com/sern-handler/handler/commit/0da1b5a4dc6823807880ade03728b466fe895190))
|
||||
* Updated Readme design ([369586f](https://github.com/sern-handler/handler/commit/369586f378f807ba9906167b5ada197c2c95e411))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* accidentally imported wildcard from wrong place & namespace ([8782cad](https://github.com/sern-handler/handler/commit/8782cad9cddbb24c03c2bfff96d3377aceb5f542))
|
||||
* autocomplete in nested form ([#97](https://github.com/sern-handler/handler/issues/97)) ([70d7bdb](https://github.com/sern-handler/handler/commit/70d7bdb8c53a1990addc5c9fd54427f194833b4e))
|
||||
* Change discord server link ([#62](https://github.com/sern-handler/handler/issues/62)) ([e677ce0](https://github.com/sern-handler/handler/commit/e677ce083966dedc945d236034e2ce4a7a586e05))
|
||||
* **codeql-analysis.yml:** Fixed autobuild issue on some TS files & deleted more unused comments ([e51c7ff](https://github.com/sern-handler/handler/commit/e51c7ffed038f0519a37f4339406c28546d92c83))
|
||||
* crash on collectors ([#89](https://github.com/sern-handler/handler/issues/89)) ([a0587f5](https://github.com/sern-handler/handler/commit/a0587f59d43d62642c033e0bb843902f9e6dc0c4))
|
||||
* crash on collectors pt ([7da7bff](https://github.com/sern-handler/handler/commit/7da7bff700f8e46e72412ca5d379a6edbc14e10a))
|
||||
* didn't run prettier, now i am ([6c144de](https://github.com/sern-handler/handler/commit/6c144defcacd7732e15292f6c3e5eaea7944bc32))
|
||||
* Fix return type of sernModule ([cf85a5d](https://github.com/sern-handler/handler/commit/cf85a5db6413e2b8b42143f70964f7a19789e1ff))
|
||||
* Fixed renovate warning ([#77](https://github.com/sern-handler/handler/issues/77)) ([76c4333](https://github.com/sern-handler/handler/commit/76c4333a817006100f0b99d73bb455e82797d3d9))
|
||||
* Fixed typo in Security.md ([c35def9](https://github.com/sern-handler/handler/commit/c35def99c93e77a0c932a1b8f1da06cd45fde294))
|
||||
* **handler.ts:** added the changes of Module<T>.execute to type delegate (now type execute) ([f062a33](https://github.com/sern-handler/handler/commit/f062a338687be4b3ac64c048a63bdcb895282d2d))
|
||||
* linting issue in markup.ts ([dac665d](https://github.com/sern-handler/handler/commit/dac665d6281a29ec79663adb26a3e5c5243e6ae0))
|
||||
* Non-exhaustiveness led to commands not registering readyEvent.ts ([b266508](https://github.com/sern-handler/handler/commit/b26650818e2c193c326356359b38412117ea6186))
|
||||
* prettier changes again ([d5bb992](https://github.com/sern-handler/handler/commit/d5bb9922dfdb14e4f7e95ad5acd470765b7a90c2))
|
||||
* prettier wants lf line ending ([571a804](https://github.com/sern-handler/handler/commit/571a8044b027afee91466219a841817dd55ef455))
|
||||
* **sern.ts:** checking ctx instanceof Message always returned false ([7166947](https://github.com/sern-handler/handler/commit/7166947d28f3be1a6e1c44385eb7946731784f58))
|
||||
* Standard for of does not resolve promises. Switched to for await ([66b9f51](https://github.com/sern-handler/handler/commit/66b9f51fa73cf07a589671d13ca4c65a9c8193a1))
|
||||
* **utilexports.ts:** forgot to remove the deleted feat of option builder ([1cff46c](https://github.com/sern-handler/handler/commit/1cff46c0ab5959d8e0f0fe89f1e6cd4c6cebff19))
|
||||
|
||||
|
||||
### Reverts
|
||||
|
||||
* Move enums to enums.ts ([40a10bf](https://github.com/sern-handler/handler/commit/40a10bf32b9a1c6afbf85bdaeb2a7918c15ac7a8))
|
||||
* Re-add plugins overload ([b9b5919](https://github.com/sern-handler/handler/commit/b9b59197df7d9bbeac3df68ebe6f7cea1ce50677))
|
||||
* remove version.txt ([ca9ac52](https://github.com/sern-handler/handler/commit/ca9ac52fae32108b4cb90b201204d5c358c5ef7b))
|
||||
@@ -1,5 +1,5 @@
|
||||
# Code of Conduct
|
||||
All participants of SernHandler are expected to abide by our Code of Conduct, both online and during in-person events that are hosted and/or associated with SernHandler.
|
||||
All participants of sern are expected to abide by our Code of Conduct, both online and during in-person events that are hosted and/or associated with sern.
|
||||
|
||||
# The Pledge
|
||||
In the interest of fostering an open and welcoming environment, we pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
@@ -26,7 +26,7 @@ Examples of behaviour that contributes to creating a positive environment includ
|
||||
• Other conduct which you know could reasonably be considered inappropriate in a professional setting. <br/>
|
||||
• Enforcement. <br/>
|
||||
|
||||
Violations of the Code of Conduct may be reported by sending a message to [discord server](https://discord.com/). All reports will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Further details of specific enforcement policies may be posted separately.
|
||||
Violations of the Code of Conduct may be reported by reaching us on our [discord server](https://discord.com/). All reports will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
We hold the right and responsibility to remove comments or other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any members for other behaviours that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
**Copyright (c) 2022 Sern**
|
||||
Copyright (c) 2023 sern
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -19,5 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
End license text.
|
||||
147
README.md
147
README.md
@@ -1,13 +1,32 @@
|
||||
# SernHandler
|
||||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/sern-handler/.github/main/banner.png" width="900px" />
|
||||
</div>
|
||||
|
||||
<a href="https://www.npmjs.com/package/@sern/handler"><img src="https://img.shields.io/npm/v/@sern/handler?maxAge=3600" alt="NPM version" /></a>
|
||||
<a href="https://www.npmjs.com/package/@sern/handler"><img src="https://img.shields.io/npm/dt/@sern/handler?maxAge=3600" alt="NPM downloads" /></a>
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
<h1 align="center">Handlers. Redefined.</h1>
|
||||
<h4 align="center">A complete, customizable, typesafe, & reactive framework for discord bots</h4>
|
||||
|
||||
A customizable, batteries-included, powerful discord.js framework to automate and streamline your bot development.
|
||||
<div align="center" styles="margin-top: 10px">
|
||||
<img src="https://img.shields.io/badge/open-source-brightgreen" />
|
||||
<a href="https://www.npmjs.com/package/@sern/handler"><img src="https://img.shields.io/npm/v/@sern/handler?maxAge=3600" alt="NPM version" /></a>
|
||||
<a href="https://www.npmjs.com/package/@sern/handler"><img src="https://img.shields.io/npm/dt/@sern/handler?maxAge=3600" alt="NPM downloads" /></a>
|
||||
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-brightgreen" alt="License MIT" /></a>
|
||||
<a href="https://sern.dev"><img alt="docs.rs" src="https://img.shields.io/docsrs/docs" /></a>
|
||||
<img alt="Lines of code" src="https://img.shields.io/badge/total%20lines-2k-blue" />
|
||||
</div>
|
||||
|
||||
## Why?
|
||||
- For you. A framework that's tailored to your exact needs.
|
||||
- Lightweight. Does a lot while being small.
|
||||
- Latest features. Support for discord.js v14 and all of its interactions.
|
||||
- Hybrid, customizable and composable commands. Create them just how you like.
|
||||
- Start quickly. Plug and play or customize to your liking.
|
||||
- Embraces reactive programming. For consistent and reliable backend.
|
||||
- Switch and customize how errors are handled, logging, and more.
|
||||
- Use it with TypeScript or JavaScript. CommonJS and ESM supported.
|
||||
- Active and growing community, always here to help. [Join us](https://sern.dev/discord)
|
||||
- Unleash its full potential with a powerful CLI and awesome plugins.
|
||||
|
||||
## Installation
|
||||
## 📜 Installation
|
||||
|
||||
```sh
|
||||
npm install @sern/handler
|
||||
@@ -21,63 +40,91 @@ yarn add @sern/handler
|
||||
pnpm add @sern/handler
|
||||
```
|
||||
|
||||
## Basic Usage
|
||||
## 👶 Basic Usage
|
||||
<details open><summary>ping.ts</summary>
|
||||
|
||||
#### ` index.js (CommonJS)`
|
||||
|
||||
```js
|
||||
const { Client, GatewayIntentBits } = require('discord.js');
|
||||
const { Sern } = require('sern-handler');
|
||||
const { defaultPrefix, token } = require('./config.json');
|
||||
|
||||
const client = new Client({
|
||||
intents: [
|
||||
GatewayIntentBits.Guilds,
|
||||
GatewayIntentBits.GuildMembers,
|
||||
GatewayIntentBits.GuildMessages
|
||||
]
|
||||
```ts
|
||||
export default commandModule({
|
||||
type: CommandType.Slash,
|
||||
//Installed plugin to publish to discord api and allow access to owners only.
|
||||
plugins: [publish(), ownerOnly()],
|
||||
description: 'A ping pong command',
|
||||
execute(ctx) {
|
||||
ctx.reply('Hello owner of the bot');
|
||||
}
|
||||
});
|
||||
|
||||
Sern.init({
|
||||
client,
|
||||
defaultPrefix,
|
||||
commands : 'src/commands',
|
||||
});
|
||||
|
||||
client.login(token);
|
||||
```
|
||||
</details>
|
||||
<details open><summary>modal.ts</summary>
|
||||
|
||||
#### ` ping.js (CommonJS)`
|
||||
|
||||
```js
|
||||
const { Sern, CommandType } = require('@sern/handler');
|
||||
|
||||
exports.default = {
|
||||
description: 'A ping pong command',
|
||||
type: CommandType.Slash,
|
||||
execute(ctx) {
|
||||
ctx.reply('pong!');
|
||||
```ts
|
||||
export default commandModule({
|
||||
type: CommandType.Modal,
|
||||
//Installed a plugin to make sure modal fields pass a validation.
|
||||
plugins : [
|
||||
assertFields({
|
||||
fields: {
|
||||
name: /^([^0-9]*)$/
|
||||
},
|
||||
failure: (errors, modal) => modal.reply('your submission did not pass the validations')
|
||||
})
|
||||
],
|
||||
execute : (modal) => {
|
||||
modal.reply('thanks for the submission!');
|
||||
}
|
||||
};
|
||||
})
|
||||
```
|
||||
</details>
|
||||
<details open><summary>index.ts</summary>
|
||||
|
||||
See our [templates](https://github.com/sern-handler/templates) for TypeScript examples and more
|
||||
```ts
|
||||
import { Client, GatewayIntentBits } from 'discord.js';
|
||||
import { Sern, single, type Dependencies } from '@sern/handler';
|
||||
|
||||
## CLI
|
||||
//client has been declared previously
|
||||
|
||||
We are providing a [command line interface](https://github.com/sern-handler/cli) for better & easier bot developement. Don't forget to view it.
|
||||
interface MyDependencies extends Dependencies {
|
||||
'@sern/client': Singleton<Client>;
|
||||
}
|
||||
export const useContainer = Sern.makeDependencies<MyDependencies>({
|
||||
build: root => root
|
||||
.add({ '@sern/client': single(() => client) })
|
||||
});
|
||||
|
||||
## Links
|
||||
//View docs for all options
|
||||
Sern.init({
|
||||
defaultPrefix: '!', // removing defaultPrefix will shut down text commands
|
||||
commands: 'src/commands',
|
||||
// events: 'src/events' (optional),
|
||||
containerConfig : {
|
||||
get: useContainer
|
||||
}
|
||||
});
|
||||
|
||||
- [Official Documentation](https://sern-handler.js.org)
|
||||
- [Support Server](https://discord.com/invite/Yvb7DnqjXX)
|
||||
client.login("YOUR_BOT_TOKEN_HERE");
|
||||
```
|
||||
</details>
|
||||
|
||||
## Contribute
|
||||
## 🤖 Bots Using sern
|
||||
- [Community Bot](https://github.com/sern-handler/sern-community), the community bot for our [discord server](https://sern.dev/discord).
|
||||
- [Vinci](https://github.com/SrIzan10/vinci), the bot for Mara Turing.
|
||||
- [Bask](https://github.com/baskbotml/bask), Listen your favorite artists on Discord.
|
||||
- [ava](https://github.com/SrIzan10/ava), A discord bot that plays KNGI and Gensokyo Radio.
|
||||
- [Murayama](https://github.com/murayamabot/murayama), :pepega:
|
||||
- [Protector (WIP)](https://github.com/needhamgary/Protector), Just a simple bot to help enhance a private minecraft server.
|
||||
- [SmokinWeed 💨](https://github.com/Peter-MJ-Parker/sern-bud), A fun bot for a small - but growing - server.
|
||||
|
||||
- Read our contribution [guidelines](https://github.com/sern-handler/handler) carefully
|
||||
## 💻 CLI
|
||||
|
||||
It is **highly encouraged** to use the [command line interface](https://github.com/sern-handler/cli) for your project. Don't forget to view it.
|
||||
|
||||
## 🔗 Links
|
||||
|
||||
- [Official Documentation and Guide](https://sern.dev)
|
||||
- [Support Server](https://sern.dev/discord)
|
||||
|
||||
## 👋 Contribute
|
||||
- Read our contribution [guidelines](https://github.com/sern-handler/handler/blob/main/.github/CONTRIBUTING.md) carefully
|
||||
- Pull up on [issues](https://github.com/sern-handler/handler/issues) and report bugs
|
||||
- All kinds of contributions are welcomed.
|
||||
|
||||
## Roadmap
|
||||
|
||||
You can check our [roadmap](https://github.com/sern-handler/roadmap) to see what's going to be added or patched in the future.
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'],
|
||||
};
|
||||
1484
dependency-graph.svg
Normal file
1484
dependency-graph.svg
Normal file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 119 KiB |
@@ -1 +0,0 @@
|
||||
TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
|
||||
@@ -1 +0,0 @@
|
||||
sern-handler.js.org
|
||||
@@ -1,110 +0,0 @@
|
||||
:root {
|
||||
--light-hl-0: #000000;
|
||||
--dark-hl-0: #d4d4d4;
|
||||
--light-hl-1: #af00db;
|
||||
--dark-hl-1: #c586c0;
|
||||
--light-hl-2: #001080;
|
||||
--dark-hl-2: #9cdcfe;
|
||||
--light-hl-3: #a31515;
|
||||
--dark-hl-3: #ce9178;
|
||||
--light-hl-4: #0000ff;
|
||||
--dark-hl-4: #569cd6;
|
||||
--light-hl-5: #0070c1;
|
||||
--dark-hl-5: #4fc1ff;
|
||||
--light-hl-6: #795e26;
|
||||
--dark-hl-6: #dcdcaa;
|
||||
--light-hl-7: #008000;
|
||||
--dark-hl-7: #6a9955;
|
||||
--light-hl-8: #cd3131;
|
||||
--dark-hl-8: #f44747;
|
||||
--light-code-background: #f5f5f5;
|
||||
--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);
|
||||
--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);
|
||||
--code-background: var(--dark-code-background);
|
||||
}
|
||||
}
|
||||
|
||||
body.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);
|
||||
--code-background: var(--light-code-background);
|
||||
}
|
||||
|
||||
body.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);
|
||||
--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);
|
||||
}
|
||||
pre,
|
||||
code {
|
||||
background: var(--code-background);
|
||||
}
|
||||
@@ -1,907 +0,0 @@
|
||||
.tsd-kind-icon {
|
||||
display: block;
|
||||
position: relative;
|
||||
padding-left: 20px;
|
||||
text-indent: -20px;
|
||||
}
|
||||
.tsd-kind-icon:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
margin: 0 3px 2px 0;
|
||||
background-image: url(./icons.png);
|
||||
}
|
||||
@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {
|
||||
.tsd-kind-icon:before {
|
||||
background-image: url(./icons@2x.png);
|
||||
background-size: 238px 204px;
|
||||
}
|
||||
}
|
||||
|
||||
.tsd-signature.tsd-kind-icon:before {
|
||||
background-position: 0 -153px;
|
||||
}
|
||||
|
||||
.tsd-kind-object-literal > .tsd-kind-icon:before {
|
||||
background-position: 0px -17px;
|
||||
}
|
||||
.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -17px;
|
||||
}
|
||||
.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -17px;
|
||||
}
|
||||
|
||||
.tsd-kind-class > .tsd-kind-icon:before {
|
||||
background-position: 0px -34px;
|
||||
}
|
||||
.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -34px;
|
||||
}
|
||||
.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -34px;
|
||||
}
|
||||
|
||||
.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: 0px -51px;
|
||||
}
|
||||
.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -51px;
|
||||
}
|
||||
.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -51px;
|
||||
}
|
||||
|
||||
.tsd-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: 0px -68px;
|
||||
}
|
||||
.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -68px;
|
||||
}
|
||||
.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -68px;
|
||||
}
|
||||
|
||||
.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: 0px -85px;
|
||||
}
|
||||
.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -85px;
|
||||
}
|
||||
.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -85px;
|
||||
}
|
||||
|
||||
.tsd-kind-namespace > .tsd-kind-icon:before {
|
||||
background-position: 0px -102px;
|
||||
}
|
||||
.tsd-kind-namespace.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -102px;
|
||||
}
|
||||
.tsd-kind-namespace.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -102px;
|
||||
}
|
||||
|
||||
.tsd-kind-module > .tsd-kind-icon:before {
|
||||
background-position: 0px -102px;
|
||||
}
|
||||
.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -102px;
|
||||
}
|
||||
.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -102px;
|
||||
}
|
||||
|
||||
.tsd-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: 0px -119px;
|
||||
}
|
||||
.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -119px;
|
||||
}
|
||||
.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -119px;
|
||||
}
|
||||
|
||||
.tsd-kind-enum-member > .tsd-kind-icon:before {
|
||||
background-position: 0px -136px;
|
||||
}
|
||||
.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -136px;
|
||||
}
|
||||
.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -136px;
|
||||
}
|
||||
|
||||
.tsd-kind-signature > .tsd-kind-icon:before {
|
||||
background-position: 0px -153px;
|
||||
}
|
||||
.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -153px;
|
||||
}
|
||||
.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -153px;
|
||||
}
|
||||
|
||||
.tsd-kind-type-alias > .tsd-kind-icon:before {
|
||||
background-position: 0px -170px;
|
||||
}
|
||||
.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -170px;
|
||||
}
|
||||
.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -170px;
|
||||
}
|
||||
|
||||
.tsd-kind-type-alias.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: 0px -187px;
|
||||
}
|
||||
.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -187px;
|
||||
}
|
||||
.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -187px;
|
||||
}
|
||||
|
||||
.tsd-kind-variable > .tsd-kind-icon:before {
|
||||
background-position: -136px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -0px;
|
||||
}
|
||||
|
||||
.tsd-kind-property > .tsd-kind-icon:before {
|
||||
background-position: -136px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -0px;
|
||||
}
|
||||
|
||||
.tsd-kind-get-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -17px;
|
||||
}
|
||||
|
||||
.tsd-kind-set-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -34px;
|
||||
}
|
||||
|
||||
.tsd-kind-accessor > .tsd-kind-icon:before {
|
||||
background-position: -136px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -51px;
|
||||
}
|
||||
|
||||
.tsd-kind-function > .tsd-kind-icon:before {
|
||||
background-position: -136px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -68px;
|
||||
}
|
||||
|
||||
.tsd-kind-method > .tsd-kind-icon:before {
|
||||
background-position: -136px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -68px;
|
||||
}
|
||||
|
||||
.tsd-kind-call-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -68px;
|
||||
}
|
||||
|
||||
.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: -136px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited
|
||||
> .tsd-kind-icon:before {
|
||||
background-position: -102px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -85px;
|
||||
}
|
||||
|
||||
.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: -136px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited
|
||||
> .tsd-kind-icon:before {
|
||||
background-position: -102px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -85px;
|
||||
}
|
||||
|
||||
.tsd-kind-constructor > .tsd-kind-icon:before {
|
||||
background-position: -136px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -102px;
|
||||
}
|
||||
|
||||
.tsd-kind-constructor-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -102px;
|
||||
}
|
||||
|
||||
.tsd-kind-index-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -119px;
|
||||
}
|
||||
|
||||
.tsd-kind-event > .tsd-kind-icon:before {
|
||||
background-position: -136px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -136px;
|
||||
}
|
||||
|
||||
.tsd-is-static > .tsd-kind-icon:before {
|
||||
background-position: -136px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -153px;
|
||||
}
|
||||
|
||||
.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before {
|
||||
background-position: -136px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -170px;
|
||||
}
|
||||
|
||||
.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before {
|
||||
background-position: -136px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -170px;
|
||||
}
|
||||
|
||||
.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -170px;
|
||||
}
|
||||
|
||||
.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before {
|
||||
background-position: -136px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -187px;
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 480 B |
Binary file not shown.
|
Before Width: | Height: | Size: 855 B |
@@ -1,992 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Handler - SernHandler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li><a href="Sern.Handler.html">Handler</a></li>
|
||||
</ul>
|
||||
<h1>Class Handler</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel tsd-hierarchy">
|
||||
<h3>Hierarchy</h3>
|
||||
<ul class="tsd-hierarchy">
|
||||
<li><span class="target">Handler</span></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Constructors</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-constructor tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#constructor" class="tsd-kind-icon">constructor</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section tsd-is-private tsd-is-private-protected">
|
||||
<h3>Properties</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-property tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#wrapper" class="tsd-kind-icon">wrapper</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Accessors</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#client" class="tsd-kind-icon">client</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#commandDir" class="tsd-kind-icon">command<wbr />Dir</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#prefix" class="tsd-kind-icon">prefix</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#privateServers" class="tsd-kind-icon">private<wbr />Servers</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section tsd-is-private tsd-is-private-protected">
|
||||
<h3>Methods</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#commandResult" class="tsd-kind-icon">command<wbr />Result</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-private">
|
||||
<a href="Sern.Handler.html#findModuleFrom" class="tsd-kind-icon">find<wbr />Module<wbr />From</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#interactionResult" class="tsd-kind-icon">interaction<wbr />Result</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#registerModules" class="tsd-kind-icon">register<wbr />Modules</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#reloadSlash" class="tsd-kind-icon">reload<wbr />Slash</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Constructors</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-constructor tsd-parent-kind-class">
|
||||
<a id="constructor" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
constructor<a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-constructor tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
new <wbr />Handler<span class="tsd-signature-symbol">(</span>wrapper<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><a href="../interfaces/Sern.Wrapper.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Wrapper</a
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><a href="Sern.Handler.html" class="tsd-signature-type" data-tsd-kind="Class">Handler</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L36"
|
||||
>handler/sern.ts:36</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
wrapper:
|
||||
<a href="../interfaces/Sern.Wrapper.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Wrapper</a
|
||||
>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>The data that is required to run sern handler</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <a href="Sern.Handler.html" class="tsd-signature-type" data-tsd-kind="Class">Handler</a>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group tsd-is-private tsd-is-private-protected">
|
||||
<h2>Properties</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class tsd-is-private">
|
||||
<a id="wrapper" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> wrapper<a
|
||||
href="#wrapper"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
wrapper<span class="tsd-signature-symbol">:</span>
|
||||
<a href="../interfaces/Sern.Wrapper.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Wrapper</a
|
||||
>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L28"
|
||||
>handler/sern.ts:28</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Accessors</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a id="client" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
client<a href="#client" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
<span class="tsd-signature-symbol">get</span> client<span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Client</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L246"
|
||||
>handler/sern.ts:246</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>readonly</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Client</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div><p>the discord.js client (DiscordJS#Client));</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a id="commandDir" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
command<wbr />Dir<a href="#commandDir" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
<span class="tsd-signature-symbol">get</span> commandDir<span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L237"
|
||||
>handler/sern.ts:237</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>readonly</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4>
|
||||
<div><p>Directory of the commands folder</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a id="prefix" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
prefix<a href="#prefix" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
<span class="tsd-signature-symbol">get</span> prefix<span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L228"
|
||||
>handler/sern.ts:228</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>readonly</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4>
|
||||
<div><p>The prefix used for legacy commands</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a id="privateServers" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
private<wbr />Servers<a href="#privateServers" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
<span class="tsd-signature-symbol">get</span> privateServers<span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-symbol">{ </span>id<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>test<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L255"
|
||||
>handler/sern.ts:255</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>readonly</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-symbol">{ </span>id<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>test<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</h4>
|
||||
<div><p>[]} Private server ID for testing or personal use</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group tsd-is-private tsd-is-private-protected">
|
||||
<h2>Methods</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a id="commandResult" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> command<wbr />Result<a
|
||||
href="#commandResult"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
command<wbr />Result<span class="tsd-signature-symbol">(</span>module<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">CommandVal</span>, message<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">Message</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span
|
||||
><a href="../modules/Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L112"
|
||||
>handler/sern.ts:112</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>module: <span class="tsd-signature-type">CommandVal</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>Command file information</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
message: <span class="tsd-signature-type">Message</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>The message object</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span
|
||||
><a
|
||||
href="../modules/Types.html#possibleOutput"
|
||||
class="tsd-signature-type"
|
||||
data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div><p>Takes return value and replies it, if possible input</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section
|
||||
class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-private"
|
||||
>
|
||||
<a id="findModuleFrom" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> find<wbr />Module<wbr />From<a
|
||||
href="#findModuleFrom"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
find<wbr />Module<wbr />From<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">(</span>ctx<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span
|
||||
><span class="tsd-signature-type">CommandVal</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L194"
|
||||
>handler/sern.ts:194</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li>
|
||||
<h4>
|
||||
T<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">CommandInteraction</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">CacheType</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> | </span
|
||||
><span class="tsd-signature-type">Message</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>ctx: <span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>name of possible command</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">undefined</span
|
||||
><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">CommandVal</span>
|
||||
</h4>
|
||||
<div></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a id="interactionResult" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> interaction<wbr />Result<a
|
||||
href="#interactionResult"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
interaction<wbr />Result<span class="tsd-signature-symbol">(</span>module<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">CommandVal</span>, interaction<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">CommandInteraction</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">CacheType</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">undefined</span
|
||||
><span class="tsd-signature-symbol"> | </span
|
||||
><a href="../modules/Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L88"
|
||||
>handler/sern.ts:88</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>module: <span class="tsd-signature-type">CommandVal</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>Command file information</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
interaction: <span class="tsd-signature-type">CommandInteraction</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">CacheType</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>The Discord.js command interaction (DiscordJS#CommandInteraction))</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span
|
||||
><a
|
||||
href="../modules/Types.html#possibleOutput"
|
||||
class="tsd-signature-type"
|
||||
data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div><p>Takes return value and replies it, if possible input</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a id="registerModules" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> register<wbr />Modules<a
|
||||
href="#registerModules"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
register<wbr />Modules<span class="tsd-signature-symbol">(</span>modArr<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-symbol">{ </span>absPath<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>mod<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><a href="../interfaces/Sern.Module.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Module</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">unknown</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">; </span>name<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L142"
|
||||
>handler/sern.ts:142</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>This function chains <code>Files.buildData</code></p>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
modArr: <span class="tsd-signature-symbol">{ </span>absPath<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">; </span>mod<span class="tsd-signature-symbol">: </span
|
||||
><a href="../interfaces/Sern.Module.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Module</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">unknown</span
|
||||
><span class="tsd-signature-symbol">></span
|
||||
><span class="tsd-signature-symbol">; </span>name<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>module information</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a id="reloadSlash" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> reload<wbr />Slash<a
|
||||
href="#reloadSlash"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
reload<wbr />Slash<span class="tsd-signature-symbol">(</span>cmdName<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, description<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, options<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">ApplicationCommandOptionData</span
|
||||
><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L207"
|
||||
>handler/sern.ts:207</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>cmdName: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>name of command</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>description: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>description of command</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
options: <span class="tsd-signature-type">ApplicationCommandOptionData</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>any options for the slash command</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="current tsd-kind-class tsd-parent-kind-namespace">
|
||||
<a href="Sern.Handler.html" class="tsd-kind-icon">Handler</a>
|
||||
<ul>
|
||||
<li class="tsd-kind-constructor tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#constructor" class="tsd-kind-icon">constructor</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#wrapper" class="tsd-kind-icon">wrapper</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#client" class="tsd-kind-icon">client</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#commandDir" class="tsd-kind-icon">command<wbr />Dir</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#prefix" class="tsd-kind-icon">prefix</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#privateServers" class="tsd-kind-icon">private<wbr />Servers</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#commandResult" class="tsd-kind-icon">command<wbr />Result</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-private">
|
||||
<a href="Sern.Handler.html#findModuleFrom" class="tsd-kind-icon">find<wbr />Module<wbr />From</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#interactionResult" class="tsd-kind-icon">interaction<wbr />Result</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#registerModules" class="tsd-kind-icon">register<wbr />Modules</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#reloadSlash" class="tsd-kind-icon">reload<wbr />Slash</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Legend</h2>
|
||||
<div class="tsd-legend-group">
|
||||
<ul class="tsd-legend">
|
||||
<li class="tsd-kind-property tsd-parent-kind-class tsd-is-private">
|
||||
<span class="tsd-kind-icon">Private property</span>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<span class="tsd-kind-icon">Private method</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-legend">
|
||||
<li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,204 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>CommandType - SernHandler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li><a href="Sern.CommandType.html">CommandType</a></li>
|
||||
</ul>
|
||||
<h1>Enumeration CommandType</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Enumeration members</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a href="Sern.CommandType.html#SLASH" class="tsd-kind-icon">SLASH</a>
|
||||
</li>
|
||||
<li class="tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a href="Sern.CommandType.html#TEXT" class="tsd-kind-icon">TEXT</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Enumeration members</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a id="SLASH" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
SLASH<a href="#SLASH" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">SLASH<span class="tsd-signature-symbol"> = 2</span></div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L303"
|
||||
>handler/sern.ts:303</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a id="TEXT" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
TEXT<a href="#TEXT" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">TEXT<span class="tsd-signature-symbol"> = 1</span></div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L302"
|
||||
>handler/sern.ts:302</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="current tsd-kind-enum tsd-parent-kind-namespace">
|
||||
<a href="Sern.CommandType.html" class="tsd-kind-icon">Command<wbr />Type</a>
|
||||
<ul>
|
||||
<li class="tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a href="Sern.CommandType.html#SLASH" class="tsd-kind-icon">SLASH</a>
|
||||
</li>
|
||||
<li class="tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a href="Sern.CommandType.html#TEXT" class="tsd-kind-icon">TEXT</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
168
docs/index.html
168
docs/index.html
@@ -1,168 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>SernHandler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="assets/style.css" />
|
||||
<link rel="stylesheet" href="assets/highlight.css" />
|
||||
<script async src="assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base=".">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container"><h1>sern-handler</h1></div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<div class="tsd-panel tsd-typography">
|
||||
<a href="#sern-handler" id="sern-handler" style="color: inherit; text-decoration: none">
|
||||
<h1>Sern Handler</h1>
|
||||
</a>
|
||||
<a href="https://www.npmjs.com/package/sern-handler">
|
||||
<img src="https://img.shields.io/npm/v/sern_handler?maxAge=3600" alt="NPM version"
|
||||
/></a>
|
||||
<a href="https://www.npmjs.com/package/sern-handler"
|
||||
><img src="https://img.shields.io/npm/dt/sern_handler?maxAge=3600" alt="NPM downloads"
|
||||
/></a>
|
||||
<a href="https://www.npmjs.com/package/sern-handler"
|
||||
><img src="https://img.shields.io/badge/builds-stable" alt="Builds Passing"
|
||||
/></a>
|
||||
|
||||
<p>
|
||||
Sern can automate and streamline development of your discord bot with new version compatibility and full
|
||||
customization.
|
||||
</p>
|
||||
<ul>
|
||||
<li>A reincarnation of <a href="https://github.com/jacoobes/sern_handler">this old project</a></li>
|
||||
</ul>
|
||||
|
||||
<a href="#installation" id="installation" style="color: inherit; text-decoration: none">
|
||||
<h2>Installation</h2>
|
||||
</a>
|
||||
<pre><code class="language-sh"><span class="hl-0">npm install sern-handler</span>
|
||||
</code></pre>
|
||||
<pre><code class="language-sh"><span class="hl-0">yarn add sern-handler</span>
|
||||
</code></pre>
|
||||
<pre><code class="language-sh"><span class="hl-0">pnpm add sern-handler</span>
|
||||
</code></pre>
|
||||
|
||||
<a href="#basic-usage" id="basic-usage" style="color: inherit; text-decoration: none">
|
||||
<h2>Basic Usage</h2>
|
||||
</a>
|
||||
|
||||
<a href="#indexjs" id="indexjs" style="color: inherit; text-decoration: none">
|
||||
<h4><code>index.js</code></h4>
|
||||
</a>
|
||||
<pre><code class="language-js"><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">Client</span><span class="hl-0">, </span><span class="hl-2">Intents</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'discord.js'</span><span class="hl-0">;</span><br/><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">Sern</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'sern-handler'</span><span class="hl-0">;</span><br/><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">prefix</span><span class="hl-0">, </span><span class="hl-2">token</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'../src/secrets.json'</span><span class="hl-0">;</span><br/><br/><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">client</span><span class="hl-0"> = </span><span class="hl-4">new</span><span class="hl-0"> </span><span class="hl-6">Client</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-2">intents:</span><span class="hl-0"> [</span><br/><span class="hl-0"> </span><span class="hl-2">Intents</span><span class="hl-0">.</span><span class="hl-5">FLAGS</span><span class="hl-0">.</span><span class="hl-5">GUILDS</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">Intents</span><span class="hl-0">.</span><span class="hl-5">FLAGS</span><span class="hl-0">.</span><span class="hl-5">GUILD_MESSAGES</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">Intents</span><span class="hl-0">.</span><span class="hl-5">FLAGS</span><span class="hl-0">.</span><span class="hl-5">GUILD_MEMBERS</span><br/><span class="hl-0"> ]</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-4">new</span><span class="hl-0"> </span><span class="hl-2">Sern</span><span class="hl-0">.</span><span class="hl-6">Handler</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-2">client</span><span class="hl-0">, </span><br/><span class="hl-0"> </span><span class="hl-2">prefix</span><span class="hl-0">, </span><br/><span class="hl-0"> </span><span class="hl-2">commands :</span><span class="hl-0"> </span><span class="hl-3">'dist/commands'</span><span class="hl-0">, </span><br/><span class="hl-0"> </span><span class="hl-2">privateServers :</span><span class="hl-0"> [ </span><br/><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-2">test :</span><span class="hl-0"> </span><span class="hl-4">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">id:</span><span class="hl-0"> </span><span class="hl-3">'server-id'</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> ],</span><br/><span class="hl-0"> </span><span class="hl-6">init</span><span class="hl-2">:</span><span class="hl-0"> </span><span class="hl-4">async</span><span class="hl-0"> (</span><span class="hl-2">handler</span><span class="hl-0">) </span><span class="hl-4">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">// Optional function to initialize anything else on bot startup</span><br/><span class="hl-0"> },</span><br/><span class="hl-0">});</span><br/><br/><br/><span class="hl-2">client</span><span class="hl-0">.</span><span class="hl-6">login</span><span class="hl-0">(</span><span class="hl-2">token</span><span class="hl-0">);</span>
|
||||
</code></pre>
|
||||
|
||||
<a href="#pingjs" id="pingjs" style="color: inherit; text-decoration: none">
|
||||
<h4><code>ping.js</code></h4>
|
||||
</a>
|
||||
<pre><code class="language-js"><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">Sern</span><span class="hl-0">, </span><span class="hl-2">Types</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'sern-handler'</span><span class="hl-0">;</span><br/><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">Ok</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'ts-results'</span><span class="hl-0">;</span><br/><br/><span class="hl-1">export</span><span class="hl-0"> </span><span class="hl-1">default</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-2">alias:</span><span class="hl-0"> [],</span><br/><span class="hl-0"> </span><span class="hl-2">desc :</span><span class="hl-0"> </span><span class="hl-3">'A ping pong command'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">visibility :</span><span class="hl-0"> </span><span class="hl-3">'private'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">test :</span><span class="hl-0"> </span><span class="hl-4">false</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">type:</span><span class="hl-0"> </span><span class="hl-2">Sern</span><span class="hl-0">.</span><span class="hl-2">CommandType</span><span class="hl-0">.</span><span class="hl-5">SLASH</span><span class="hl-0"> | </span><span class="hl-2">Sern</span><span class="hl-0">.</span><span class="hl-2">CommandType</span><span class="hl-0">.</span><span class="hl-5">TEXT</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-6">execute</span><span class="hl-2"> :</span><span class="hl-0"> </span><span class="hl-4">async</span><span class="hl-0"> ({ </span><span class="hl-2">message</span><span class="hl-0">, </span><span class="hl-2">interaction</span><span class="hl-0"> }, </span><span class="hl-2">args</span><span class="hl-0">) </span><span class="hl-4">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-2">interaction</span><span class="hl-0">.</span><span class="hl-6">reply</span><span class="hl-0">({ </span><span class="hl-2">content:</span><span class="hl-0"> </span><span class="hl-3">'Pong! })</span><span class="hl-8">;</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">};</span>
|
||||
</code></pre>
|
||||
<p>See <a href="https://sernhandler.js.org">documentation</a> for TypeScript examples and more</p>
|
||||
|
||||
<a href="#links-" id="links-" style="color: inherit; text-decoration: none">
|
||||
<h2>Links <img src="https://img.shields.io/badge/Coming-Soon-purple" alt="link" /></h2>
|
||||
</a>
|
||||
<ul>
|
||||
<li><a href="https://tmp.com">Official Documentation</a></li>
|
||||
<li><a href="https://tmp.com">Example Bot</a></li>
|
||||
<li><a href="https://google.com">Discord Server</a></li>
|
||||
</ul>
|
||||
|
||||
<a href="#contribute" id="contribute" style="color: inherit; text-decoration: none">
|
||||
<h2>Contribute</h2>
|
||||
</a>
|
||||
<ul>
|
||||
<li>
|
||||
Pull up on <a href="https://github.com/jacoobes/Sern/issues">issues</a> and tell me if there are bugs
|
||||
</li>
|
||||
<li>All kinds of contributions are welcomed!</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class="current"><a href="modules.html">Exports</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky"><ul></ul></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,559 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Module | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li><a href="Sern.Module.html">Module</a></li>
|
||||
</ul>
|
||||
<h1>Interface Module<T></h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel tsd-comment">
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>An object that gets imported and acts as a command.</p>
|
||||
</div>
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>property</dt>
|
||||
<dd><p>{string} desc</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{Visibility} visibility</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{CommandType} type</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd>
|
||||
<p>
|
||||
{(eventParams : Context, args : Ok<T=string>) => Awaitable<possibleOutput | void>}
|
||||
execute
|
||||
</p>
|
||||
</dd>
|
||||
<dt>prop</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-type-parameters">
|
||||
<h3>Type parameters</h3>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li>
|
||||
<h4>T = <span class="tsd-signature-type">string</span></h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-hierarchy">
|
||||
<h3>Hierarchy</h3>
|
||||
<ul class="tsd-hierarchy">
|
||||
<li><span class="target">Module</span></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Properties</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#alias" class="tsd-kind-icon">alias</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#desc" class="tsd-kind-icon">desc</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#test" class="tsd-kind-icon">test</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#type" class="tsd-kind-icon">type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#visibility" class="tsd-kind-icon">visibility</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Methods</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#execute" class="tsd-kind-icon">execute</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#parse" class="tsd-kind-icon">parse</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Properties</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="alias" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
alias<a href="#alias" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
alias<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L288"
|
||||
>handler/sern.ts:288</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="desc" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
desc<a href="#desc" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
desc<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L289"
|
||||
>handler/sern.ts:289</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="test" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
test<a href="#test" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
test<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L292"
|
||||
>handler/sern.ts:292</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="type" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
type<a href="#type" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
type<span class="tsd-signature-symbol">:</span>
|
||||
<a href="../enums/Sern.CommandType.html" class="tsd-signature-type" data-tsd-kind="Enumeration"
|
||||
>CommandType</a
|
||||
>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L291"
|
||||
>handler/sern.ts:291</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="visibility" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
visibility<a href="#visibility" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
visibility<span class="tsd-signature-symbol">:</span>
|
||||
<a href="../modules/Types.html#Visibility" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Visibility</a
|
||||
>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L290"
|
||||
>handler/sern.ts:290</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Methods</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface">
|
||||
<a id="execute" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
execute<a href="#execute" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-interface">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
execute<span class="tsd-signature-symbol">(</span>eventParams<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><a href="../modules/Types.html#Context" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Context</a
|
||||
>, args<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Ok</span
|
||||
><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Awaitable</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span
|
||||
><span class="tsd-signature-symbol"> | </span
|
||||
><a href="../modules/Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L293"
|
||||
>handler/sern.ts:293</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
eventParams:
|
||||
<a href="../modules/Types.html#Context" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Context</a
|
||||
>
|
||||
</h5>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
args: <span class="tsd-signature-type">Ok</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Awaitable</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span
|
||||
><span class="tsd-signature-symbol"> | </span
|
||||
><a
|
||||
href="../modules/Types.html#possibleOutput"
|
||||
class="tsd-signature-type"
|
||||
data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface">
|
||||
<a id="parse" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagOptional">Optional</span> parse<a
|
||||
href="#parse"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-interface">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
parse<span class="tsd-signature-symbol">(</span>ctx<span class="tsd-signature-symbol">: </span
|
||||
><a href="../modules/Types.html#Context" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Context</a
|
||||
>, args<span class="tsd-signature-symbol">: </span
|
||||
><a href="../modules/Types.html#Arg" class="tsd-signature-type" data-tsd-kind="Type alias">Arg</a
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><a href="../modules/Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L294"
|
||||
>handler/sern.ts:294</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
ctx:
|
||||
<a href="../modules/Types.html#Context" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Context</a
|
||||
>
|
||||
</h5>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
args:
|
||||
<a href="../modules/Types.html#Arg" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Arg</a
|
||||
>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="../modules/Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="current tsd-kind-interface tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Sern.Module.html" class="tsd-kind-icon">Module</a>
|
||||
<ul>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#alias" class="tsd-kind-icon">alias</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#desc" class="tsd-kind-icon">desc</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#test" class="tsd-kind-icon">test</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#type" class="tsd-kind-icon">type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#visibility" class="tsd-kind-icon">visibility</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#execute" class="tsd-kind-icon">execute</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#parse" class="tsd-kind-icon">parse</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Legend</h2>
|
||||
<div class="tsd-legend-group">
|
||||
<ul class="tsd-legend">
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,409 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Wrapper | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li><a href="Sern.Wrapper.html">Wrapper</a></li>
|
||||
</ul>
|
||||
<h1>Interface Wrapper</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel tsd-comment">
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>An object to be passed into Sern.Handler constructor.</p>
|
||||
</div>
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>property</dt>
|
||||
<dd><p>{readonly Client} client</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{readonly string} prefix</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{readonly string} commands</p></dd>
|
||||
<dt>prop</dt>
|
||||
<dd><p>{(handler : Handler) => void)} init</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{readonly {test: boolean, id: string}[]} privateServers</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-hierarchy">
|
||||
<h3>Hierarchy</h3>
|
||||
<ul class="tsd-hierarchy">
|
||||
<li><span class="target">Wrapper</span></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Properties</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#client" class="tsd-kind-icon">client</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#commands" class="tsd-kind-icon">commands</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#prefix" class="tsd-kind-icon">prefix</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#privateServers" class="tsd-kind-icon">private<wbr />Servers</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Methods</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#init" class="tsd-kind-icon">init</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Properties</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="client" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagReadonly">Readonly</span> client<a
|
||||
href="#client"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
client<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Client</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L270"
|
||||
>handler/sern.ts:270</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="commands" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagReadonly">Readonly</span> commands<a
|
||||
href="#commands"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
commands<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L272"
|
||||
>handler/sern.ts:272</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="prefix" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagReadonly">Readonly</span> prefix<a
|
||||
href="#prefix"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
prefix<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L271"
|
||||
>handler/sern.ts:271</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="privateServers" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagReadonly">Readonly</span> private<wbr />Servers<a
|
||||
href="#privateServers"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
private<wbr />Servers<span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-symbol">{ </span>id<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>test<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L274"
|
||||
>handler/sern.ts:274</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Methods</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface">
|
||||
<a id="init" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagOptional">Optional</span> init<a
|
||||
href="#init"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-interface">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
init<span class="tsd-signature-symbol">(</span>handler<span class="tsd-signature-symbol">: </span
|
||||
><a href="../classes/Sern.Handler.html" class="tsd-signature-type" data-tsd-kind="Class">Handler</a
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">void</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L273"
|
||||
>handler/sern.ts:273</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
handler:
|
||||
<a href="../classes/Sern.Handler.html" class="tsd-signature-type" data-tsd-kind="Class"
|
||||
>Handler</a
|
||||
>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="current tsd-kind-interface tsd-parent-kind-namespace">
|
||||
<a href="Sern.Wrapper.html" class="tsd-kind-icon">Wrapper</a>
|
||||
<ul>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#client" class="tsd-kind-icon">client</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#commands" class="tsd-kind-icon">commands</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#prefix" class="tsd-kind-icon">prefix</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#privateServers" class="tsd-kind-icon">private<wbr />Servers</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#init" class="tsd-kind-icon">init</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Legend</h2>
|
||||
<div class="tsd-legend-group">
|
||||
<ul class="tsd-legend">
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,115 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>SernHandler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="assets/style.css" />
|
||||
<link rel="stylesheet" href="assets/highlight.css" />
|
||||
<script async src="assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base=".">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="index.html" class="title">SernHandler - Develop faster. Grow more.</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container"><h1>sern-handler</h1></div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Namespaces</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-namespace"><a href="modules/Sern.html" class="tsd-kind-icon">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Types.html" class="tsd-kind-icon">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Utils.html" class="tsd-kind-icon">Utils</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class="current"><a href="modules.html">Exports</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky"><ul></ul></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,155 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Sern | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="Sern.html">Sern</a></li>
|
||||
</ul>
|
||||
<h1>Namespace Sern</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Enumerations</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-enum tsd-parent-kind-namespace">
|
||||
<a href="../enums/Sern.CommandType.html" class="tsd-kind-icon">Command<wbr />Type</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Classes</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-class tsd-parent-kind-namespace">
|
||||
<a href="../classes/Sern.Handler.html" class="tsd-kind-icon">Handler</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Interfaces</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-interface tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="../interfaces/Sern.Module.html" class="tsd-kind-icon">Module</a>
|
||||
</li>
|
||||
<li class="tsd-kind-interface tsd-parent-kind-namespace">
|
||||
<a href="../interfaces/Sern.Wrapper.html" class="tsd-kind-icon">Wrapper</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="tsd-kind-enum tsd-parent-kind-namespace">
|
||||
<a href="../enums/Sern.CommandType.html" class="tsd-kind-icon">Command<wbr />Type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-class tsd-parent-kind-namespace">
|
||||
<a href="../classes/Sern.Handler.html" class="tsd-kind-icon">Handler</a>
|
||||
</li>
|
||||
<li class="tsd-kind-interface tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="../interfaces/Sern.Module.html" class="tsd-kind-icon">Module</a>
|
||||
</li>
|
||||
<li class="tsd-kind-interface tsd-parent-kind-namespace">
|
||||
<a href="../interfaces/Sern.Wrapper.html" class="tsd-kind-icon">Wrapper</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,533 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Types | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="Types.html">Types</a></li>
|
||||
</ul>
|
||||
<h1>Namespace Types</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Type aliases</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Arg" class="tsd-kind-icon">Arg</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Context" class="tsd-kind-icon">Context</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#Nullable" class="tsd-kind-icon">Nullable</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#ParseType" class="tsd-kind-icon">Parse<wbr />Type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#SlashOptions" class="tsd-kind-icon">Slash<wbr />Options</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Visibility" class="tsd-kind-icon">Visibility</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#execute" class="tsd-kind-icon">execute</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#possibleOutput" class="tsd-kind-icon">possible<wbr />Output</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Type aliases</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="Arg" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Arg<a href="#Arg" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Arg<span class="tsd-signature-symbol">:</span>
|
||||
<a href="Types.html#ParseType" class="tsd-signature-type" data-tsd-kind="Type alias">ParseType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-symbol">{ </span>slash<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><a href="Types.html#SlashOptions" class="tsd-signature-type" data-tsd-kind="Type alias">SlashOptions</a
|
||||
><span class="tsd-signature-symbol">; </span>text<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L30"
|
||||
>types/handler.ts:30</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="Context" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Context<a href="#Context" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Context<span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-symbol">{ </span>interaction<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Option</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">CommandInteraction</span><span class="tsd-signature-symbol">></span
|
||||
><span class="tsd-signature-symbol">; </span>message<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Option</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">Message</span><span class="tsd-signature-symbol">></span
|
||||
><span class="tsd-signature-symbol"> }</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L25"
|
||||
>types/handler.ts:25</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-type-declaration">
|
||||
<h4>Type declaration</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li class="tsd-parameter">
|
||||
<h5>
|
||||
interaction<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Option</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">CommandInteraction</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
</li>
|
||||
<li class="tsd-parameter">
|
||||
<h5>
|
||||
message<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Option</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Message</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a id="Nullable" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Nullable<a href="#Nullable" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Nullable<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">null</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L17"
|
||||
>types/handler.ts:17</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li><h4>T</h4></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a id="ParseType" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Parse<wbr />Type<a href="#ParseType" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Parse<wbr />Type<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[ </span
|
||||
><span class="tsd-signature-type">K</span><span class="tsd-signature-symbol"> in </span
|
||||
><span class="tsd-signature-symbol">keyof </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">K</span
|
||||
><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol"> extends </span
|
||||
><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol"> ? </span
|
||||
><span class="tsd-signature-symbol">[</span>k<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">K</span><span class="tsd-signature-symbol">, </span>args<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">K</span
|
||||
><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">]</span
|
||||
><span class="tsd-signature-symbol"> : </span><span class="tsd-signature-type">never</span>
|
||||
<span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">[</span
|
||||
><span class="tsd-signature-symbol">keyof </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">]</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L20"
|
||||
>types/handler.ts:20</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li><h4>T</h4></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="SlashOptions" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Slash<wbr />Options<a href="#SlashOptions" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Slash<wbr />Options<span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type">Omit</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">CommandInteractionOptionResolver</span
|
||||
><span class="tsd-signature-symbol">, </span
|
||||
><span class="tsd-signature-type">"getMessage"</span
|
||||
><span class="tsd-signature-symbol"> | </span
|
||||
><span class="tsd-signature-type">"getFocused"</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L33"
|
||||
>types/handler.ts:33</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="Visibility" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Visibility<a href="#Visibility" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Visibility<span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type">"private"</span><span class="tsd-signature-symbol"> | </span
|
||||
><span class="tsd-signature-type">"public"</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L13"
|
||||
>types/handler.ts:13</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="execute" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
execute<a href="#execute" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
execute<span class="tsd-signature-symbol">:</span>
|
||||
<a href="../interfaces/Sern.Module.html" class="tsd-signature-type" data-tsd-kind="Interface">Module</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">unknown</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">[</span
|
||||
><a href="../interfaces/Sern.Module.html#execute"
|
||||
><span class="tsd-signature-type">"execute"</span></a
|
||||
><span class="tsd-signature-symbol">]</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L18"
|
||||
>types/handler.ts:18</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a id="possibleOutput" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
possible<wbr />Output<a href="#possibleOutput" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
possible<wbr />Output<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-type">MessagePayload</span><span class="tsd-signature-symbol"> & </span
|
||||
><span class="tsd-signature-type">MessageOptions</span><span class="tsd-signature-symbol">)</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L16"
|
||||
>types/handler.ts:16</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li>
|
||||
<h4>T = <span class="tsd-signature-type">string</span></h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Sern.html">Sern</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Arg" class="tsd-kind-icon">Arg</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Context" class="tsd-kind-icon">Context</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#Nullable" class="tsd-kind-icon">Nullable</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#ParseType" class="tsd-kind-icon">Parse<wbr />Type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#SlashOptions" class="tsd-kind-icon">Slash<wbr />Options</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Visibility" class="tsd-kind-icon">Visibility</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#execute" class="tsd-kind-icon">execute</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#possibleOutput" class="tsd-kind-icon">possible<wbr />Output</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,659 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Utils | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
<h1>Namespace Utils</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Type aliases</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Utils.html#ArgType" class="tsd-kind-icon">Arg<wbr />Type</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Functions</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#parseBool" class="tsd-kind-icon">parse<wbr />Bool</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#parseInt" class="tsd-kind-icon">parse<wbr />Int</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toArr" class="tsd-kind-icon">to<wbr />Arr</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toNegativeInt" class="tsd-kind-icon">to<wbr />Negative<wbr />Int</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toPositiveInt" class="tsd-kind-icon">to<wbr />Positive<wbr />Int</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Type aliases</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a id="ArgType" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Arg<wbr />Type<a href="#ArgType" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Arg<wbr />Type<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type">Result</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">, </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L8"
|
||||
>handler/utilities/preprocessors/args.ts:8</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>
|
||||
Wrapper type taking <code>Ok(T)</code> or <code>Err(possibleOutput)</code> e.g
|
||||
<code>Result<T, possibleOutput</code>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li><h4>T</h4></li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Functions</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="parseBool" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
parse<wbr />Bool<a href="#parseBool" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
parse<wbr />Bool<span class="tsd-signature-symbol">(</span>arg<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, onFailure<span class="tsd-signature-symbol">?: </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span>, regexes<span class="tsd-signature-symbol">?: </span
|
||||
><span class="tsd-signature-symbol">{ </span>noRegex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span
|
||||
><span class="tsd-signature-symbol">; </span>yesRegex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L31"
|
||||
>handler/utilities/preprocessors/args.ts:31</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
onFailure:
|
||||
<a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> = ...</span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>If cannot parse <code>arg</code> into boolean.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
regexes: <span class="tsd-signature-symbol">{ </span>noRegex<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">RegExp</span
|
||||
><span class="tsd-signature-symbol">; </span>yesRegex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol"> = ...</span>
|
||||
</h5>
|
||||
<ul class="tsd-parameters">
|
||||
<li class="tsd-parameter">
|
||||
<h5>
|
||||
no<wbr />Regex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span>
|
||||
</h5>
|
||||
</li>
|
||||
<li class="tsd-parameter">
|
||||
<h5>
|
||||
yes<wbr />Regex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div>
|
||||
<p>attemps to parse <code>args</code> as a boolean</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="parseInt" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
parse<wbr />Int<a href="#parseInt" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
parse<wbr />Int<span class="tsd-signature-symbol">(</span>arg<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, onFailure<span class="tsd-signature-symbol">: </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L17"
|
||||
>handler/utilities/preprocessors/args.ts:17</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
onFailure:
|
||||
<a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>if <code>Number.parseInt</code> returns NaN</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div>
|
||||
<p>Attempts to use <code>Number.parseInt()</code> on <code>arg</code></p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="toArr" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
to<wbr />Arr<a href="#toArr" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
to<wbr />Arr<span class="tsd-signature-symbol">(</span>arg<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span>, sep<span class="tsd-signature-symbol">?: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L55"
|
||||
>handler/utilities/preprocessors/args.ts:55</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
sep: <span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol"> = ' '</span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>default separator = ' '</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="toNegativeInt" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
to<wbr />Negative<wbr />Int<a href="#toNegativeInt" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
to<wbr />Negative<wbr />Int<span class="tsd-signature-symbol">(</span>arg<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, onFailure<span class="tsd-signature-symbol">: </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L76"
|
||||
>handler/utilities/preprocessors/args.ts:76</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
onFailure:
|
||||
<a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>delegates <code>parseInt</code></p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="toPositiveInt" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
to<wbr />Positive<wbr />Int<a href="#toPositiveInt" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
to<wbr />Positive<wbr />Int<span class="tsd-signature-symbol">(</span>arg<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, onFailure<span class="tsd-signature-symbol">: </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L66"
|
||||
>handler/utilities/preprocessors/args.ts:66</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
onFailure:
|
||||
<a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>delegates <code>Utils.parseInt</code></p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Types.html">Types</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Utils.html#ArgType" class="tsd-kind-icon">Arg<wbr />Type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#parseBool" class="tsd-kind-icon">parse<wbr />Bool</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#parseInt" class="tsd-kind-icon">parse<wbr />Int</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toArr" class="tsd-kind-icon">to<wbr />Arr</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toNegativeInt" class="tsd-kind-icon">to<wbr />Negative<wbr />Int</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toPositiveInt" class="tsd-kind-icon">to<wbr />Positive<wbr />Int</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
194
jest.config.ts
194
jest.config.ts
@@ -1,194 +0,0 @@
|
||||
/*
|
||||
* For a detailed explanation regarding each configuration property and type check, visit:
|
||||
* https://jestjs.io/docs/configuration
|
||||
*/
|
||||
|
||||
export default {
|
||||
// All imported modules in your tests should be mocked automatically
|
||||
// automock: false,
|
||||
|
||||
// Stop running tests after `n` failures
|
||||
// bail: 0,
|
||||
|
||||
// The directory where Jest should store its cached dependency information
|
||||
// cacheDirectory: "C:\\Users\\jeyus\\AppData\\Local\\Temp\\jest",
|
||||
|
||||
// Automatically clear mock calls, instances and results before every test
|
||||
clearMocks: true,
|
||||
|
||||
// Indicates whether the coverage information should be collected while executing the test
|
||||
collectCoverage: true,
|
||||
|
||||
// An array of glob patterns indicating a set of files for which coverage information should be collected
|
||||
// collectCoverageFrom: undefined,
|
||||
|
||||
// The directory where Jest should output its coverage files
|
||||
coverageDirectory: 'coverage',
|
||||
|
||||
// An array of regexp pattern strings used to skip coverage collection
|
||||
// coveragePathIgnorePatterns: [
|
||||
// "\\\\node_modules\\\\"
|
||||
// ],
|
||||
|
||||
// Indicates which provider should be used to instrument code for coverage
|
||||
coverageProvider: 'v8',
|
||||
|
||||
// A list of reporter names that Jest uses when writing coverage reports
|
||||
// coverageReporters: [
|
||||
// "json",
|
||||
// "text",
|
||||
// "lcov",
|
||||
// "clover"
|
||||
// ],
|
||||
|
||||
// An object that configures minimum threshold enforcement for coverage results
|
||||
// coverageThreshold: undefined,
|
||||
|
||||
// A path to a custom dependency extractor
|
||||
// dependencyExtractor: undefined,
|
||||
|
||||
// Make calling deprecated APIs throw helpful error messages
|
||||
// errorOnDeprecated: false,
|
||||
|
||||
// Force coverage collection from ignored files using an array of glob patterns
|
||||
// forceCoverageMatch: [],
|
||||
|
||||
// A path to a module which exports an async function that is triggered once before all test suites
|
||||
// globalSetup: undefined,
|
||||
|
||||
// A path to a module which exports an async function that is triggered once after all test suites
|
||||
// globalTeardown: undefined,
|
||||
|
||||
// A set of global variables that need to be available in all test environments
|
||||
// globals: {},
|
||||
|
||||
// The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
|
||||
// maxWorkers: "50%",
|
||||
|
||||
// An array of directory names to be searched recursively up from the requiring module's location
|
||||
// moduleDirectories: [
|
||||
// "node_modules"
|
||||
// ],
|
||||
|
||||
// An array of file extensions your modules use
|
||||
// moduleFileExtensions: [
|
||||
// "js",
|
||||
// "jsx",
|
||||
// "ts",
|
||||
// "tsx",
|
||||
// "json",
|
||||
// "node"
|
||||
// ],
|
||||
|
||||
// A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
|
||||
// moduleNameMapper: {},
|
||||
|
||||
// An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
|
||||
// modulePathIgnorePatterns: [],
|
||||
|
||||
// Activates notifications for test results
|
||||
// notify: false,
|
||||
|
||||
// An enum that specifies notification mode. Requires { notify: true }
|
||||
// notifyMode: "failure-change",
|
||||
|
||||
// A preset that is used as a base for Jest's configuration
|
||||
// preset: undefined,
|
||||
|
||||
// Run tests from one or more projects
|
||||
// projects: undefined,
|
||||
|
||||
// Use this configuration option to add custom reporters to Jest
|
||||
// reporters: undefined,
|
||||
|
||||
// Automatically reset mock state before every test
|
||||
// resetMocks: false,
|
||||
|
||||
// Reset the module registry before running each individual test
|
||||
// resetModules: false,
|
||||
|
||||
// A path to a custom resolver
|
||||
// resolver: undefined,
|
||||
|
||||
// Automatically restore mock state and implementation before every test
|
||||
// restoreMocks: false,
|
||||
|
||||
// The root directory that Jest should scan for tests and modules within
|
||||
// rootDir: undefined,
|
||||
|
||||
// A list of paths to directories that Jest should use to search for files in
|
||||
// roots: [
|
||||
// "<rootDir>"
|
||||
// ],
|
||||
|
||||
// Allows you to use a custom runner instead of Jest's default test runner
|
||||
// runner: "jest-runner",
|
||||
|
||||
// The paths to modules that run some code to configure or set up the testing environment before each test
|
||||
// setupFiles: [],
|
||||
|
||||
// A list of paths to modules that run some code to configure or set up the testing framework before each test
|
||||
// setupFilesAfterEnv: [],
|
||||
|
||||
// The number of seconds after which a test is considered as slow and reported as such in the results.
|
||||
// slowTestThreshold: 5,
|
||||
|
||||
// A list of paths to snapshot serializer modules Jest should use for snapshot testing
|
||||
// snapshotSerializers: [],
|
||||
|
||||
// The test environment that will be used for testing
|
||||
// testEnvironment: "jest-environment-node",
|
||||
|
||||
// Options that will be passed to the testEnvironment
|
||||
// testEnvironmentOptions: {},
|
||||
|
||||
// Adds a location field to test results
|
||||
// testLocationInResults: false,
|
||||
|
||||
// The glob patterns Jest uses to detect test files
|
||||
// testMatch: [
|
||||
// "**/__tests__/**/*.[jt]s?(x)",
|
||||
// "**/?(*.)+(spec|test).[tj]s?(x)"
|
||||
// ],
|
||||
|
||||
// An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
|
||||
// testPathIgnorePatterns: [
|
||||
// "\\\\node_modules\\\\"
|
||||
// ],
|
||||
|
||||
// The regexp pattern or array of patterns that Jest uses to detect test files
|
||||
// testRegex: [],
|
||||
|
||||
// This option allows the use of a custom results processor
|
||||
// testResultsProcessor: undefined,
|
||||
|
||||
// This option allows use of a custom test runner
|
||||
// testRunner: "jest-circus/runner",
|
||||
|
||||
// This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
|
||||
// testURL: "http://localhost",
|
||||
|
||||
// Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
|
||||
// timers: "real",
|
||||
|
||||
// A map from regular expressions to paths to transformers
|
||||
// transform: undefined,
|
||||
|
||||
// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
|
||||
// transformIgnorePatterns: [
|
||||
// "\\\\node_modules\\\\",
|
||||
// "\\.pnp\\.[^\\\\]+$"
|
||||
// ],
|
||||
|
||||
// An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
|
||||
// unmockedModulePathPatterns: undefined,
|
||||
|
||||
// Indicates whether each individual test should be reported during the run
|
||||
// verbose: undefined,
|
||||
|
||||
// An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
|
||||
// watchPathIgnorePatterns: [],
|
||||
|
||||
// Whether to use watchman for file crawling
|
||||
// watchman: true,
|
||||
};
|
||||
18311
package-lock.json
generated
18311
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
149
package.json
149
package.json
@@ -1,53 +1,100 @@
|
||||
{
|
||||
"name": "@sern/handler",
|
||||
"version": "1.0.1-beta",
|
||||
"description": "A customizable, batteries-included, powerful discord.js framework to automate and streamline bot development.",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
"compile": "tsc",
|
||||
"watch": "tsc -w",
|
||||
"lint": "eslint src/**/*.ts",
|
||||
"format": "eslint src/**/*.ts --fix",
|
||||
"release": "standard-version && git push --follow-tags",
|
||||
"test": "jest --coverage --verbose",
|
||||
"commit": "cz"
|
||||
},
|
||||
"keywords": [
|
||||
"sern-handler",
|
||||
"sern",
|
||||
"handler",
|
||||
"sern handler",
|
||||
"wrapper",
|
||||
"discord.js",
|
||||
"framework"
|
||||
],
|
||||
"author": "SernDevs",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"discord.js": "^14.0.0-dev.1647259751.2297c2b",
|
||||
"rxjs": "^7.5.5",
|
||||
"ts-pattern": "^4.0.2",
|
||||
"ts-results": "^3.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.8.0",
|
||||
"@typescript-eslint/parser": "^5.10.2",
|
||||
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
||||
"@babel/core": "^7.17.2",
|
||||
"@babel/preset-env": "^7.16.11",
|
||||
"@babel/preset-typescript": "^7.16.7",
|
||||
"@types/jest": "^27.4.0",
|
||||
"babel-jest": "^27.5.1",
|
||||
"cz-conventional-changelog": "3.0.1",
|
||||
"jest": "^27.5.1",
|
||||
"prettier": "2.6.2",
|
||||
"standard-version": "^9.3.2",
|
||||
"typedoc": "^0.22.11",
|
||||
"typescript": "^4.5.5"
|
||||
},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
"path": "cz-conventional-changelog"
|
||||
}
|
||||
}
|
||||
"name": "@sern/handler",
|
||||
"packageManager": "yarn@3.5.0",
|
||||
"version": "3.0.0",
|
||||
"description": "A complete, customizable, typesafe, & reactive framework for discord bots.",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/cjs/index.cjs",
|
||||
"types": "./dist/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./dist/index.mjs",
|
||||
"require": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"watch": "tsup --watch",
|
||||
"clean-modules": "rimraf node_modules/ && npm install",
|
||||
"lint": "eslint src/**/*.ts",
|
||||
"format": "eslint src/**/*.ts --fix",
|
||||
"build:dev": "tsup --metafile",
|
||||
"build:prod": "tsup --minify",
|
||||
"prepare": "npm run build:prod",
|
||||
"pretty": "prettier --write .",
|
||||
"tdd": "vitest",
|
||||
"test": "vitest --run",
|
||||
"analyze-imports": "npx depcruise src --include-only \"^src\" --output-type dot | dot -T svg > dependency-graph.svg"
|
||||
},
|
||||
"keywords": [
|
||||
"sern-handler",
|
||||
"sern",
|
||||
"handler",
|
||||
"sern handler",
|
||||
"wrapper",
|
||||
"discord.js",
|
||||
"framework"
|
||||
],
|
||||
"author": "SernDevs",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"iti": "^0.6.0",
|
||||
"rxjs": "^7.8.0",
|
||||
"ts-results-es": "^3.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@faker-js/faker": "^8.0.1",
|
||||
"@types/node": "^18.15.11",
|
||||
"@typescript-eslint/eslint-plugin": "5.58.0",
|
||||
"@typescript-eslint/parser": "5.59.1",
|
||||
"dependency-cruiser": "^13.0.5",
|
||||
"discord.js": "14.11.0",
|
||||
"esbuild": "^0.17.0",
|
||||
"eslint": "8.39.0",
|
||||
"prettier": "2.8.8",
|
||||
"tsup": "^6.7.0",
|
||||
"typescript": "5.0.2",
|
||||
"vitest": "latest"
|
||||
},
|
||||
"prettier": {
|
||||
"semi": true,
|
||||
"trailingComma": "all",
|
||||
"singleQuote": true,
|
||||
"printWidth": 100,
|
||||
"tabWidth": 4,
|
||||
"arrowParens": "avoid"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"extends": [
|
||||
"plugin:@typescript-eslint/recommended"
|
||||
],
|
||||
"parserOptions": {
|
||||
"ecmaVersion": "latest",
|
||||
"sourceType": "script"
|
||||
},
|
||||
"rules": {
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"quotes": [
|
||||
2,
|
||||
"single",
|
||||
{
|
||||
"avoidEscape": true,
|
||||
"allowTemplateLiterals": true
|
||||
}
|
||||
],
|
||||
"semi": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"@typescript-eslint/no-empty-interface": 0,
|
||||
"@typescript-eslint/ban-types": 0,
|
||||
"@typescript-eslint/no-explicit-any": "off"
|
||||
}
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/sern-handler/handler.git"
|
||||
},
|
||||
"homepage": "https://sern.dev"
|
||||
}
|
||||
|
||||
15
renovate.json
Normal file
15
renovate.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"extends": ["config:base", "helpers:pinGitHubActionDigests", "group:allNonMajor"],
|
||||
"major": {
|
||||
"dependencyDashboardApproval": true,
|
||||
"reviewers": ["EvolutionX-10", "jacoobes", "Murtatrxx"]
|
||||
},
|
||||
"minor": {
|
||||
"reviewers": ["jacoobes", "Murtatrxx"]
|
||||
},
|
||||
"schedule": ["every weekend"],
|
||||
"lockFileMaintenance": {
|
||||
"enabled": true,
|
||||
"automerge": true
|
||||
}
|
||||
}
|
||||
9
src/core/_internal.ts
Normal file
9
src/core/_internal.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
export * as Id from './id';
|
||||
export * from './operators';
|
||||
export * from './predicates';
|
||||
export * as Files from './module-loading';
|
||||
export * from './functions';
|
||||
export type { VoidResult } from '../types/core-plugin';
|
||||
export { SernError } from './structures/enums';
|
||||
export { ModuleStore } from './structures/module-store';
|
||||
export * as DefaultServices from './structures/services';
|
||||
7
src/core/contracts/emitter.ts
Normal file
7
src/core/contracts/emitter.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import type { AnyFunction } from '../../types/utility';
|
||||
|
||||
export interface Emitter {
|
||||
addListener(eventName: string | symbol, listener: AnyFunction): this;
|
||||
removeListener(eventName: string | symbol, listener: AnyFunction): this;
|
||||
emit(eventName: string | symbol, ...payload: any[]): boolean;
|
||||
}
|
||||
21
src/core/contracts/error-handling.ts
Normal file
21
src/core/contracts/error-handling.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* @since 2.0.0
|
||||
*/
|
||||
export interface ErrorHandling {
|
||||
/**
|
||||
* Number of times the process should throw an error until crashing and exiting
|
||||
*/
|
||||
keepAlive: number;
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* Version 4 will remove this method
|
||||
*/
|
||||
crash(err: Error): never;
|
||||
/**
|
||||
* A function that is called on every crash. Updates keepAlive.
|
||||
* If keepAlive is 0, the process crashes.
|
||||
* @param error
|
||||
*/
|
||||
updateAlive(error: Error): void;
|
||||
}
|
||||
6
src/core/contracts/index.ts
Normal file
6
src/core/contracts/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export * from './error-handling';
|
||||
export * from './logging';
|
||||
export * from './module-manager';
|
||||
export * from './module-store';
|
||||
export * from './init';
|
||||
export * from './emitter';
|
||||
9
src/core/contracts/init.ts
Normal file
9
src/core/contracts/init.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import type { Awaitable } from '../../types/utility';
|
||||
|
||||
/**
|
||||
* Represents an initialization contract.
|
||||
* Let dependencies implement this to initiate some logic.
|
||||
*/
|
||||
export interface Init {
|
||||
init(): Awaitable<unknown>;
|
||||
}
|
||||
11
src/core/contracts/logging.ts
Normal file
11
src/core/contracts/logging.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
* @since 2.0.0
|
||||
*/
|
||||
export interface Logging<T = unknown> {
|
||||
error(payload: LogPayload<T>): void;
|
||||
warning(payload: LogPayload<T>): void;
|
||||
info(payload: LogPayload<T>): void;
|
||||
debug(payload: LogPayload<T>): void;
|
||||
}
|
||||
|
||||
export type LogPayload<T = unknown> = { message: T };
|
||||
22
src/core/contracts/module-manager.ts
Normal file
22
src/core/contracts/module-manager.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import type {
|
||||
CommandMeta,
|
||||
CommandModule,
|
||||
CommandModuleDefs,
|
||||
Module,
|
||||
} from '../../types/core-modules';
|
||||
import { CommandType } from '../structures';
|
||||
|
||||
/**
|
||||
* @since 2.0.0
|
||||
*/
|
||||
export interface ModuleManager {
|
||||
get(id: string): string | undefined;
|
||||
getMetadata(m: Module): CommandMeta | undefined;
|
||||
setMetadata(m: Module, c: CommandMeta): void;
|
||||
set(id: string, path: string): void;
|
||||
getPublishableCommands(): Promise<CommandModule[]>;
|
||||
getByNameCommandType<T extends CommandType>(
|
||||
name: string,
|
||||
commandType: T,
|
||||
): Promise<CommandModuleDefs[T]> | undefined;
|
||||
}
|
||||
9
src/core/contracts/module-store.ts
Normal file
9
src/core/contracts/module-store.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import type { CommandMeta, Module } from '../../types/core-modules';
|
||||
|
||||
/**
|
||||
* Represents a core module store that stores IDs mapped to file paths.
|
||||
*/
|
||||
export interface CoreModuleStore {
|
||||
commands: Map<string, string>;
|
||||
metadata: WeakMap<Module, CommandMeta>;
|
||||
}
|
||||
62
src/core/create-plugins.ts
Normal file
62
src/core/create-plugins.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { CommandType, EventType, PluginType } from './structures';
|
||||
import type { Plugin, PluginResult, EventArgs, CommandArgs } from '../types/core-plugin';
|
||||
import type { ClientEvents } from 'discord.js';
|
||||
|
||||
export function makePlugin<V extends unknown[]>(
|
||||
type: PluginType,
|
||||
execute: (...args: any[]) => any,
|
||||
): Plugin<V> {
|
||||
return {
|
||||
type,
|
||||
execute,
|
||||
} as Plugin<V>;
|
||||
}
|
||||
/**
|
||||
* @since 2.5.0
|
||||
* @__PURE__
|
||||
*/
|
||||
export function EventInitPlugin<I extends EventType>(
|
||||
execute: (...args: EventArgs<I, PluginType.Init>) => PluginResult,
|
||||
) {
|
||||
return makePlugin(PluginType.Init, execute);
|
||||
}
|
||||
/**
|
||||
* @since 2.5.0
|
||||
* @__PURE__
|
||||
*/
|
||||
export function CommandInitPlugin<I extends CommandType>(
|
||||
execute: (...args: CommandArgs<I, PluginType.Init>) => PluginResult,
|
||||
) {
|
||||
return makePlugin(PluginType.Init, execute);
|
||||
}
|
||||
/**
|
||||
* @since 2.5.0
|
||||
* @__PURE__
|
||||
*/
|
||||
export function CommandControlPlugin<I extends CommandType>(
|
||||
execute: (...args: CommandArgs<I, PluginType.Control>) => PluginResult,
|
||||
) {
|
||||
return makePlugin(PluginType.Control, execute);
|
||||
}
|
||||
/**
|
||||
* @since 2.5.0
|
||||
* @__PURE__
|
||||
*/
|
||||
export function EventControlPlugin<I extends EventType>(
|
||||
execute: (...args: EventArgs<I, PluginType.Control>) => PluginResult,
|
||||
) {
|
||||
return makePlugin(PluginType.Control, execute);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 2.5.0
|
||||
* @Experimental
|
||||
* A specialized function for creating control plugins with discord.js ClientEvents.
|
||||
* Will probably be moved one day!
|
||||
*/
|
||||
export function DiscordEventControlPlugin<T extends keyof ClientEvents>(
|
||||
name: T,
|
||||
execute: (...args: ClientEvents[T]) => PluginResult,
|
||||
) {
|
||||
return makePlugin(PluginType.Control, execute);
|
||||
}
|
||||
83
src/core/functions.ts
Normal file
83
src/core/functions.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
import { Err, Ok } from 'ts-results-es';
|
||||
import { ApplicationCommandOptionType, AutocompleteInteraction } from 'discord.js';
|
||||
import type { SernAutocompleteData, SernOptionsData } from '../types/core-modules';
|
||||
import type { AnyCommandPlugin, AnyEventPlugin, Plugin } from '../types/core-plugin';
|
||||
import { PluginType } from './structures';
|
||||
import assert from 'assert';
|
||||
|
||||
//function wrappers for empty ok / err
|
||||
export const ok = /* @__PURE__*/ () => Ok.EMPTY;
|
||||
export const err = /* @__PURE__*/ () => Err.EMPTY;
|
||||
|
||||
export function partitionPlugins(
|
||||
arr: (AnyEventPlugin | AnyCommandPlugin)[] = [],
|
||||
): [Plugin[], Plugin[]] {
|
||||
const controlPlugins = [];
|
||||
const initPlugins = [];
|
||||
|
||||
for (const el of arr) {
|
||||
switch (el.type) {
|
||||
case PluginType.Control:
|
||||
controlPlugins.push(el);
|
||||
break;
|
||||
case PluginType.Init:
|
||||
initPlugins.push(el);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return [controlPlugins, initPlugins];
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses an iterative DFS to check if an autocomplete node exists on the option tree
|
||||
* @param iAutocomplete
|
||||
* @param options
|
||||
*/
|
||||
export function treeSearch(
|
||||
iAutocomplete: AutocompleteInteraction,
|
||||
options: SernOptionsData[] | undefined,
|
||||
): SernAutocompleteData | undefined {
|
||||
if (options === undefined) return undefined;
|
||||
//clone to prevent mutation of original command module
|
||||
const _options = options.map(a => ({ ...a }));
|
||||
let subcommands = new Set();
|
||||
while (_options.length > 0) {
|
||||
const cur = _options.pop()!;
|
||||
switch (cur.type) {
|
||||
case ApplicationCommandOptionType.Subcommand:
|
||||
{
|
||||
subcommands.add(cur.name);
|
||||
for (const option of cur.options ?? []) _options.push(option);
|
||||
}
|
||||
break;
|
||||
case ApplicationCommandOptionType.SubcommandGroup:
|
||||
{
|
||||
for (const command of cur.options ?? []) _options.push(command);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
if ('autocomplete' in cur && cur.autocomplete) {
|
||||
const choice = iAutocomplete.options.getFocused(true);
|
||||
assert(
|
||||
'command' in cur,
|
||||
'No command property found for autocomplete option',
|
||||
);
|
||||
if (subcommands.size > 0) {
|
||||
const parent = iAutocomplete.options.getSubcommand();
|
||||
const parentAndOptionMatches =
|
||||
subcommands.has(parent) && cur.name === choice.name;
|
||||
if (parentAndOptionMatches) {
|
||||
return cur;
|
||||
}
|
||||
} else {
|
||||
if (cur.name === choice.name) {
|
||||
return cur;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
63
src/core/id.ts
Normal file
63
src/core/id.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
import { ApplicationCommandType, ComponentType, Interaction, InteractionType } from 'discord.js';
|
||||
import { CommandType, EventType } from './structures';
|
||||
|
||||
/**
|
||||
* Construct unique ID for a given interaction object.
|
||||
* @param event The interaction object for which to create an ID.
|
||||
* @returns A unique string ID based on the type and properties of the interaction object.
|
||||
*/
|
||||
export function reconstruct<T extends Interaction>(event: T) {
|
||||
switch (event.type) {
|
||||
case InteractionType.MessageComponent: {
|
||||
return `${event.customId}_C${event.componentType}`;
|
||||
}
|
||||
case InteractionType.ApplicationCommand:
|
||||
case InteractionType.ApplicationCommandAutocomplete: {
|
||||
return `${event.commandName}_A${event.commandType}`;
|
||||
}
|
||||
//Modal interactions are classified as components for sern
|
||||
case InteractionType.ModalSubmit: {
|
||||
return `${event.customId}_C1`;
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
*
|
||||
* A magic number to represent any commandtype that is an ApplicationCommand.
|
||||
*/
|
||||
const appBitField = 0b000000001111;
|
||||
|
||||
// Each index represents the exponent of a CommandType.
|
||||
// Every CommandType is a power of two.
|
||||
export const CommandTypeDiscordApi = [
|
||||
1, // CommandType.Text
|
||||
ApplicationCommandType.ChatInput,
|
||||
ApplicationCommandType.User,
|
||||
ApplicationCommandType.Message,
|
||||
ComponentType.Button,
|
||||
ComponentType.StringSelect,
|
||||
1, // CommandType.Modal
|
||||
ComponentType.UserSelect,
|
||||
ComponentType.RoleSelect,
|
||||
ComponentType.MentionableSelect,
|
||||
ComponentType.ChannelSelect,
|
||||
];
|
||||
/*
|
||||
* Generates a number based on CommandType.
|
||||
* This corresponds to an ApplicationCommandType or ComponentType
|
||||
* TextCommands are 0 as they aren't either or.
|
||||
*/
|
||||
function apiType(t: CommandType | EventType) {
|
||||
if (t === CommandType.Both || t === CommandType.Modal) return 1;
|
||||
return CommandTypeDiscordApi[Math.log2(t)];
|
||||
}
|
||||
|
||||
/*
|
||||
* Generates an id based on name and CommandType.
|
||||
* A is for any ApplicationCommand. C is for any ComponentCommand
|
||||
* Then, another number generated by apiType function is appended
|
||||
*/
|
||||
export function create(name: string, type: CommandType | EventType) {
|
||||
const am = (appBitField & type) !== 0 ? 'A' : 'C';
|
||||
return name + '_' + am + apiType(type);
|
||||
}
|
||||
4
src/core/index.ts
Normal file
4
src/core/index.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export * from './contracts';
|
||||
export * from './create-plugins';
|
||||
export * from './structures';
|
||||
export * from './ioc';
|
||||
34
src/core/ioc/base.ts
Normal file
34
src/core/ioc/base.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import * as assert from 'assert';
|
||||
import { composeRoot, useContainer } from './dependency-injection';
|
||||
import type { DependencyConfiguration } from '../../types/ioc';
|
||||
import { CoreContainer } from './container';
|
||||
|
||||
//SIDE EFFECT: GLOBAL DI
|
||||
let containerSubject: CoreContainer<Partial<Dependencies>>;
|
||||
|
||||
/**
|
||||
* Returns the underlying data structure holding all dependencies.
|
||||
* Exposes methods from iti
|
||||
*/
|
||||
export function useContainerRaw() {
|
||||
assert.ok(
|
||||
containerSubject && containerSubject.isReady(),
|
||||
"Could not find container or container wasn't ready. Did you call makeDependencies?",
|
||||
);
|
||||
return containerSubject;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 2.0.0
|
||||
* @param conf a configuration for creating your project dependencies
|
||||
*/
|
||||
export async function makeDependencies<const T extends Dependencies>(
|
||||
conf: DependencyConfiguration,
|
||||
) {
|
||||
//Until there are more optional dependencies, just check if the logger exists
|
||||
//SIDE EFFECT
|
||||
containerSubject = new CoreContainer();
|
||||
await composeRoot(containerSubject, conf);
|
||||
|
||||
return useContainer<T>();
|
||||
}
|
||||
67
src/core/ioc/container.ts
Normal file
67
src/core/ioc/container.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import { Container } from 'iti';
|
||||
import { SernEmitter } from '../';
|
||||
import { isAsyncFunction } from 'node:util/types';
|
||||
|
||||
import * as assert from 'node:assert';
|
||||
import { Subject } from 'rxjs';
|
||||
import { DefaultServices, ModuleStore } from '../_internal';
|
||||
|
||||
/**
|
||||
* Provides all the defaults for sern to function properly.
|
||||
* The only user provided dependency needs to be @sern/client
|
||||
*/
|
||||
export class CoreContainer<T extends Partial<Dependencies>> extends Container<T, {}> {
|
||||
private ready$ = new Subject<never>();
|
||||
private beenCalled = new Set<PropertyKey>();
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.listenForInsertions();
|
||||
|
||||
(this as Container<{}, {}>)
|
||||
.add({
|
||||
'@sern/errors': () => new DefaultServices.DefaultErrorHandling(),
|
||||
'@sern/emitter': () => new SernEmitter(),
|
||||
'@sern/store': () => new ModuleStore(),
|
||||
})
|
||||
.add(ctx => {
|
||||
return {
|
||||
'@sern/modules': () =>
|
||||
new DefaultServices.DefaultModuleManager(ctx['@sern/store']),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
private listenForInsertions() {
|
||||
assert.ok(
|
||||
!this.isReady(),
|
||||
'listening for init functions should only occur prior to sern being ready.',
|
||||
);
|
||||
const unsubscriber = this.on('containerUpserted', e => this.callInitHooks(e));
|
||||
|
||||
this.ready$.subscribe({
|
||||
complete: unsubscriber,
|
||||
});
|
||||
}
|
||||
|
||||
private async callInitHooks(e: { key: keyof T; newContainer: T[keyof T] | null }) {
|
||||
const dep = e.newContainer;
|
||||
|
||||
assert.ok(dep);
|
||||
//Ignore any dependencies that are not objects or array
|
||||
if (typeof dep !== 'object' || Array.isArray(dep)) {
|
||||
return;
|
||||
}
|
||||
if ('init' in dep && typeof dep.init === 'function' && !this.beenCalled.has(e.key)) {
|
||||
isAsyncFunction(dep.init) ? await dep.init() : dep.init();
|
||||
this.beenCalled.add(e.key);
|
||||
}
|
||||
}
|
||||
|
||||
isReady() {
|
||||
return this.ready$.closed;
|
||||
}
|
||||
ready() {
|
||||
this.ready$.unsubscribe();
|
||||
}
|
||||
}
|
||||
90
src/core/ioc/dependency-injection.ts
Normal file
90
src/core/ioc/dependency-injection.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
import type { CoreDependencies, DependencyConfiguration, IntoDependencies } from '../../types/ioc';
|
||||
import { SernError, DefaultServices } from '../_internal';
|
||||
import { useContainerRaw } from './base';
|
||||
import { CoreContainer } from './container';
|
||||
|
||||
/**
|
||||
* @__PURE__
|
||||
* @since 2.0.0.
|
||||
* Creates a singleton object.
|
||||
* @param cb
|
||||
*/
|
||||
export function single<T>(cb: () => T) {
|
||||
return cb;
|
||||
}
|
||||
|
||||
/**
|
||||
* @__PURE__
|
||||
* @since 2.0.0
|
||||
* Creates a transient object
|
||||
* @param cb
|
||||
*/
|
||||
export function transient<T>(cb: () => () => T) {
|
||||
return cb;
|
||||
}
|
||||
/**
|
||||
* The new Service api, a cleaner alternative to useContainer
|
||||
* To obtain intellisense, ensure a .d.ts file exists in the root of compilation.
|
||||
* Usually our scaffolding tool takes care of this.
|
||||
* @since 3.0.0
|
||||
* @example
|
||||
* ```ts
|
||||
* const client = Service('@sern/client');
|
||||
* ```
|
||||
* @param key a key that corresponds to a dependency registered.
|
||||
*
|
||||
*/
|
||||
export function Service<const T extends keyof Dependencies>(key: T) {
|
||||
return useContainerRaw().get(key)!;
|
||||
}
|
||||
/**
|
||||
* @since 3.0.0
|
||||
* The plural version of {@link Service}
|
||||
* @returns array of dependencies, in the same order of keys provided
|
||||
*/
|
||||
export function Services<const T extends (keyof Dependencies)[]>(...keys: [...T]) {
|
||||
const container = useContainerRaw();
|
||||
return keys.map(k => container.get(k)!) as IntoDependencies<T>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given the user's conf, check for any excluded dependency keys.
|
||||
* Then, call conf.build to get the rest of the users' dependencies.
|
||||
* Finally, update the containerSubject with the new container state
|
||||
* @param conf
|
||||
*/
|
||||
export async function composeRoot(
|
||||
container: CoreContainer<Partial<Dependencies>>,
|
||||
conf: DependencyConfiguration,
|
||||
) {
|
||||
//container should have no client or logger yet.
|
||||
const hasLogger = conf.exclude?.has('@sern/logger');
|
||||
if (!hasLogger) {
|
||||
container.upsert({
|
||||
'@sern/logger': () => new DefaultServices.DefaultLogging(),
|
||||
});
|
||||
}
|
||||
//Build the container based on the callback provided by the user
|
||||
conf.build(container as CoreContainer<Omit<CoreDependencies, '@sern/client'>>);
|
||||
try {
|
||||
container.get('@sern/client');
|
||||
} catch {
|
||||
throw new Error(SernError.MissingRequired + ' No client was provided');
|
||||
}
|
||||
|
||||
if (!hasLogger) {
|
||||
container.get('@sern/logger')?.info({ message: 'All dependencies loaded successfully.' });
|
||||
}
|
||||
|
||||
container.ready();
|
||||
}
|
||||
|
||||
export function useContainer<const T extends Dependencies>() {
|
||||
console.warn(`
|
||||
Warning: using a container hook (useContainer) is not recommended.
|
||||
Could lead to many unwanted side effects.
|
||||
Use the new Service(s) api function instead.
|
||||
`);
|
||||
return <V extends (keyof T)[]>(...keys: [...V]) =>
|
||||
keys.map(key => useContainerRaw().get(key as keyof Dependencies)) as IntoDependencies<V>;
|
||||
}
|
||||
2
src/core/ioc/index.ts
Normal file
2
src/core/ioc/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export { useContainerRaw, makeDependencies } from './base';
|
||||
export { Service, Services, single, transient } from './dependency-injection';
|
||||
141
src/core/module-loading.ts
Normal file
141
src/core/module-loading.ts
Normal file
@@ -0,0 +1,141 @@
|
||||
import { Result } from 'ts-results-es';
|
||||
import { type Observable, from, mergeMap, ObservableInput } from 'rxjs';
|
||||
import { readdir, stat } from 'fs/promises';
|
||||
import { basename, extname, join, resolve } from 'path';
|
||||
import assert from 'assert';
|
||||
import { createRequire } from 'node:module';
|
||||
import type { ImportPayload, Wrapper } from '../types/core';
|
||||
import type { Module } from '../types/core-modules';
|
||||
|
||||
export type ModuleResult<T> = Promise<ImportPayload<T>>;
|
||||
|
||||
/**
|
||||
* Import any module based on the absolute path.
|
||||
* This can accept four types of exported modules
|
||||
* commonjs, javascript :
|
||||
* ```js
|
||||
* exports = commandModule({ })
|
||||
*
|
||||
* //or
|
||||
* exports.default = commandModule({ })
|
||||
* ```
|
||||
* esm javascript, typescript, and commonjs typescript
|
||||
* export default commandModule({})
|
||||
*/
|
||||
export async function importModule<T>(absPath: string) {
|
||||
let module = await import(absPath).then(esm => esm.default);
|
||||
|
||||
assert(
|
||||
module,
|
||||
'Found no default export for command module at ' +
|
||||
absPath +
|
||||
'Forgot to ignore with "!"? (!filename.ts)?',
|
||||
);
|
||||
if ('default' in module) {
|
||||
module = module.default;
|
||||
}
|
||||
return Result.wrap(() => module.getInstance()).unwrapOr(module) as T;
|
||||
}
|
||||
export async function defaultModuleLoader<T extends Module>(absPath: string): ModuleResult<T> {
|
||||
let module = await importModule<T>(absPath);
|
||||
assert.ok(
|
||||
module,
|
||||
"Found an undefined module. Forgot to ignore it with a '!' ie (!filename.ts)?",
|
||||
);
|
||||
return { module, absPath };
|
||||
}
|
||||
|
||||
export const fmtFileName = (n: string) => n.substring(0, n.length - 3);
|
||||
|
||||
/**
|
||||
* a directory string is converted into a stream of modules.
|
||||
* starts the stream of modules that sern needs to process on init
|
||||
* @returns {Observable<{ mod: Module; absPath: string; }[]>} data from command files
|
||||
* @param commandDir
|
||||
*/
|
||||
export function buildModuleStream<T extends Module>(
|
||||
input: ObservableInput<string>,
|
||||
): Observable<ImportPayload<T>> {
|
||||
return from(input).pipe(mergeMap(defaultModuleLoader<T>));
|
||||
}
|
||||
|
||||
export const getFullPathTree = (dir: string, mode: boolean) => readPaths(resolve(dir), mode);
|
||||
|
||||
export const filename = (path: string) => fmtFileName(basename(path));
|
||||
|
||||
const isSkippable = (filename: string) => {
|
||||
//empty string is for non extension files (directories)
|
||||
const validExtensions = ['.js', '.cjs', '.mts', '.mjs', '.cts', '.ts', ''];
|
||||
return filename[0] === '!' || !validExtensions.includes(extname(filename));
|
||||
};
|
||||
async function deriveFileInfo(dir: string, file: string) {
|
||||
const fullPath = join(dir, file);
|
||||
return {
|
||||
fullPath,
|
||||
fileStats: await stat(fullPath),
|
||||
base: basename(file),
|
||||
};
|
||||
}
|
||||
async function* readPaths(dir: string, shouldDebug: boolean): AsyncGenerator<string> {
|
||||
try {
|
||||
const files = await readdir(dir);
|
||||
for (const file of files) {
|
||||
const { fullPath, fileStats, base } = await deriveFileInfo(dir, file);
|
||||
if (fileStats.isDirectory()) {
|
||||
//Todo: refactor so that i dont repeat myself for files (line 71)
|
||||
if (isSkippable(base)) {
|
||||
if (shouldDebug) console.info(`ignored directory: ${fullPath}`);
|
||||
} else {
|
||||
yield* readPaths(fullPath, shouldDebug);
|
||||
}
|
||||
} else {
|
||||
if (isSkippable(base)) {
|
||||
if (shouldDebug) console.info(`ignored: ${fullPath}`);
|
||||
} else {
|
||||
yield 'file:///' + fullPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
const requir = createRequire(import.meta.url);
|
||||
|
||||
export function loadConfig(wrapper: Wrapper | 'file'): Wrapper {
|
||||
if (wrapper === 'file') {
|
||||
console.log('Experimental loading of sern.config.json');
|
||||
const config = requir(resolve('sern.config.json')) as {
|
||||
language: string;
|
||||
defaultPrefix?: string;
|
||||
mode?: 'PROD' | 'DEV';
|
||||
paths: {
|
||||
base: string;
|
||||
commands: string;
|
||||
events?: string;
|
||||
};
|
||||
};
|
||||
const makePath = (dir: keyof typeof config.paths) =>
|
||||
config.language === 'typescript'
|
||||
? join('dist', config.paths[dir]!)
|
||||
: join(config.paths[dir]!);
|
||||
|
||||
console.log('Loading config: ', config);
|
||||
const commandsPath = makePath('commands');
|
||||
|
||||
console.log('Commands path is set to', commandsPath);
|
||||
let eventsPath: string | undefined;
|
||||
if (config.paths.events) {
|
||||
eventsPath = makePath('events');
|
||||
console.log('Events path is set to', eventsPath);
|
||||
}
|
||||
return {
|
||||
defaultPrefix: config.defaultPrefix,
|
||||
commands: commandsPath,
|
||||
events: eventsPath,
|
||||
mode: config.mode,
|
||||
};
|
||||
}
|
||||
return wrapper;
|
||||
}
|
||||
112
src/core/modules.ts
Normal file
112
src/core/modules.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
import { ClientEvents } from 'discord.js';
|
||||
import { CommandType, EventType, PluginType } from '../core/structures';
|
||||
import type {
|
||||
AnyCommandPlugin,
|
||||
AnyEventPlugin,
|
||||
CommandArgs,
|
||||
ControlPlugin,
|
||||
EventArgs,
|
||||
InitPlugin,
|
||||
} from '../types/core-plugin';
|
||||
import type {
|
||||
CommandModule,
|
||||
EventModule,
|
||||
InputCommand,
|
||||
InputEvent,
|
||||
Module,
|
||||
} from '../types/core-modules';
|
||||
import { partitionPlugins } from './_internal';
|
||||
import type { Awaitable } from '../types/utility';
|
||||
|
||||
/**
|
||||
* @since 1.0.0 The wrapper function to define command modules for sern
|
||||
* @param mod
|
||||
*/
|
||||
export function commandModule(mod: InputCommand): CommandModule {
|
||||
const [onEvent, plugins] = partitionPlugins(mod.plugins);
|
||||
return {
|
||||
...mod,
|
||||
onEvent,
|
||||
plugins,
|
||||
} as CommandModule;
|
||||
}
|
||||
/**
|
||||
* @since 1.0.0
|
||||
* The wrapper function to define event modules for sern
|
||||
* @param mod
|
||||
*/
|
||||
export function eventModule(mod: InputEvent): EventModule {
|
||||
const [onEvent, plugins] = partitionPlugins(mod.plugins);
|
||||
return {
|
||||
...mod,
|
||||
plugins,
|
||||
onEvent,
|
||||
} as EventModule;
|
||||
}
|
||||
|
||||
/** Create event modules from discord.js client events,
|
||||
* This is an {@link eventModule} for discord events,
|
||||
* where typings can be very bad.
|
||||
* @Experimental
|
||||
* @param mod
|
||||
*/
|
||||
export function discordEvent<T extends keyof ClientEvents>(mod: {
|
||||
name: T;
|
||||
plugins?: AnyEventPlugin[];
|
||||
execute: (...args: ClientEvents[T]) => Awaitable<unknown>;
|
||||
}) {
|
||||
return eventModule({
|
||||
type: EventType.Discord,
|
||||
...mod,
|
||||
});
|
||||
}
|
||||
|
||||
function prepareClassPlugins(c: Module) {
|
||||
const [onEvent, initPlugins] = partitionPlugins(c.plugins);
|
||||
c.plugins = initPlugins as InitPlugin[];
|
||||
c.onEvent = onEvent as ControlPlugin[];
|
||||
}
|
||||
//
|
||||
// Class modules:
|
||||
// Can be refactored.
|
||||
// Both implement singleton, could I make them inherit a singleton parent class?
|
||||
/**
|
||||
* @Experimental
|
||||
* Will be refactored / changed in future
|
||||
*/
|
||||
export abstract class CommandExecutable<const Type extends CommandType = CommandType> {
|
||||
abstract type: Type;
|
||||
plugins: AnyCommandPlugin[] = [];
|
||||
private static _instance: CommandModule;
|
||||
|
||||
static getInstance() {
|
||||
if (!CommandExecutable._instance) {
|
||||
//@ts-ignore
|
||||
CommandExecutable._instance = new this();
|
||||
prepareClassPlugins(CommandExecutable._instance);
|
||||
}
|
||||
return CommandExecutable._instance;
|
||||
}
|
||||
|
||||
abstract execute(...args: CommandArgs<Type, PluginType.Control>): Awaitable<unknown>;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Experimental
|
||||
* Will be refactored in future
|
||||
*/
|
||||
export abstract class EventExecutable<Type extends EventType> {
|
||||
abstract type: Type;
|
||||
plugins: AnyEventPlugin[] = [];
|
||||
|
||||
private static _instance: EventModule;
|
||||
static getInstance() {
|
||||
if (!EventExecutable._instance) {
|
||||
//@ts-ignore
|
||||
EventExecutable._instance = new this();
|
||||
prepareClassPlugins(EventExecutable._instance);
|
||||
}
|
||||
return EventExecutable._instance;
|
||||
}
|
||||
abstract execute(...args: EventArgs<Type, PluginType.Control>): Awaitable<unknown>;
|
||||
}
|
||||
71
src/core/operators.ts
Normal file
71
src/core/operators.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* This file holds sern's rxjs operators used for processing data.
|
||||
* Each function should be modular and testable, not bound to discord / sern
|
||||
* and independent of each other.
|
||||
*/
|
||||
import {
|
||||
concatMap,
|
||||
defaultIfEmpty,
|
||||
EMPTY,
|
||||
every,
|
||||
fromEvent,
|
||||
map,
|
||||
Observable,
|
||||
of,
|
||||
OperatorFunction,
|
||||
pipe,
|
||||
share,
|
||||
} from 'rxjs';
|
||||
import { Emitter, ErrorHandling, Logging } from './contracts';
|
||||
import util from 'node:util';
|
||||
import type { PluginResult, VoidResult } from '../types/core-plugin';
|
||||
/**
|
||||
* if {src} is true, mapTo V, else ignore
|
||||
* @param item
|
||||
*/
|
||||
export function filterMapTo<V>(item: () => V): OperatorFunction<boolean, V> {
|
||||
return concatMap(shouldKeep => (shouldKeep ? of(item()) : EMPTY));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls any plugin with {args}.
|
||||
* @param args if an array, its spread and plugin called.
|
||||
*/
|
||||
export function callPlugin(args: unknown): OperatorFunction<
|
||||
{
|
||||
execute: (...args: unknown[]) => PluginResult;
|
||||
},
|
||||
VoidResult
|
||||
> {
|
||||
return concatMap(async plugin => {
|
||||
if (Array.isArray(args)) {
|
||||
return plugin.execute(...args);
|
||||
}
|
||||
return plugin.execute(args);
|
||||
});
|
||||
}
|
||||
|
||||
export const arrayifySource = map(src => (Array.isArray(src) ? (src as unknown[]) : [src]));
|
||||
|
||||
/**
|
||||
* Checks if the stream of results is all ok.
|
||||
*/
|
||||
export const everyPluginOk: OperatorFunction<VoidResult, boolean> = pipe(
|
||||
every(result => result.ok),
|
||||
defaultIfEmpty(true),
|
||||
);
|
||||
|
||||
export const sharedEventStream = <T>(e: Emitter, eventName: string) => {
|
||||
return (fromEvent(e, eventName) as Observable<T>).pipe(share());
|
||||
};
|
||||
|
||||
export function handleError<C>(crashHandler: ErrorHandling, logging?: Logging) {
|
||||
return (pload: unknown, caught: Observable<C>) => {
|
||||
// This is done to fit the ErrorHandling contract
|
||||
const err = pload instanceof Error ? pload : Error(util.inspect(pload, { colors: true }));
|
||||
//formatted payload
|
||||
logging?.error({ message: util.inspect(pload) });
|
||||
crashHandler.updateAlive(err);
|
||||
return caught;
|
||||
};
|
||||
}
|
||||
34
src/core/predicates.ts
Normal file
34
src/core/predicates.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import type {
|
||||
AnySelectMenuInteraction,
|
||||
AutocompleteInteraction,
|
||||
ButtonInteraction,
|
||||
ChatInputCommandInteraction,
|
||||
MessageContextMenuCommandInteraction,
|
||||
ModalSubmitInteraction,
|
||||
UserContextMenuCommandInteraction,
|
||||
} from 'discord.js';
|
||||
import { InteractionType } from 'discord.js';
|
||||
|
||||
interface InteractionTypable {
|
||||
type: InteractionType;
|
||||
}
|
||||
//discord.js pls fix ur typings or i will >:(
|
||||
type AnyMessageComponentInteraction = AnySelectMenuInteraction | ButtonInteraction;
|
||||
type AnyCommandInteraction =
|
||||
| ChatInputCommandInteraction
|
||||
| MessageContextMenuCommandInteraction
|
||||
| UserContextMenuCommandInteraction;
|
||||
|
||||
export function isMessageComponent(i: InteractionTypable): i is AnyMessageComponentInteraction {
|
||||
return i.type === InteractionType.MessageComponent;
|
||||
}
|
||||
export function isCommand(i: InteractionTypable): i is AnyCommandInteraction {
|
||||
return i.type === InteractionType.ApplicationCommand;
|
||||
}
|
||||
export function isAutocomplete(i: InteractionTypable): i is AutocompleteInteraction {
|
||||
return i.type === InteractionType.ApplicationCommandAutocomplete;
|
||||
}
|
||||
|
||||
export function isModal(i: InteractionTypable): i is ModalSubmitInteraction {
|
||||
return i.type === InteractionType.ModalSubmit;
|
||||
}
|
||||
95
src/core/structures/context.ts
Normal file
95
src/core/structures/context.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import {
|
||||
BaseInteraction,
|
||||
ChatInputCommandInteraction,
|
||||
Client,
|
||||
InteractionReplyOptions,
|
||||
Message,
|
||||
MessageReplyOptions,
|
||||
Snowflake,
|
||||
User,
|
||||
} from 'discord.js';
|
||||
import { CoreContext } from '../structures/core-context';
|
||||
import { Result, Ok, Err } from 'ts-results-es';
|
||||
import * as assert from 'assert';
|
||||
|
||||
type ReplyOptions = string | Omit<InteractionReplyOptions, 'fetchReply'> | MessageReplyOptions;
|
||||
|
||||
/**
|
||||
* @since 1.0.0
|
||||
* Provides values shared between
|
||||
* Message and ChatInputCommandInteraction
|
||||
*/
|
||||
export class Context extends CoreContext<Message, ChatInputCommandInteraction> {
|
||||
/*
|
||||
* @Experimental
|
||||
*/
|
||||
get options() {
|
||||
return this.interaction.options;
|
||||
}
|
||||
protected constructor(protected ctx: Result<Message, ChatInputCommandInteraction>) {
|
||||
super(ctx);
|
||||
}
|
||||
|
||||
public get id(): Snowflake {
|
||||
return this.ctx.val.id;
|
||||
}
|
||||
|
||||
public get channel() {
|
||||
return this.ctx.val.channel;
|
||||
}
|
||||
/**
|
||||
* If context is holding a message, message.author
|
||||
* else, interaction.user
|
||||
*/
|
||||
public get user(): User {
|
||||
return safeUnwrap(this.ctx.map(m => m.author).mapErr(i => i.user));
|
||||
}
|
||||
|
||||
public get createdTimestamp(): number {
|
||||
return this.ctx.val.createdTimestamp;
|
||||
}
|
||||
|
||||
public get guild() {
|
||||
return this.ctx.val.guild;
|
||||
}
|
||||
|
||||
public get guildId() {
|
||||
return this.ctx.val.guildId;
|
||||
}
|
||||
/*
|
||||
* interactions can return APIGuildMember if the guild it is emitted from is not cached
|
||||
*/
|
||||
public get member() {
|
||||
return this.ctx.val.member;
|
||||
}
|
||||
|
||||
public get client(): Client {
|
||||
return this.ctx.val.client;
|
||||
}
|
||||
|
||||
public get inGuild(): boolean {
|
||||
return this.ctx.val.inGuild();
|
||||
}
|
||||
|
||||
public async reply(content: ReplyOptions) {
|
||||
return safeUnwrap(
|
||||
this.ctx
|
||||
.map(m => m.reply(content as string | MessageReplyOptions))
|
||||
.mapErr(i =>
|
||||
i.reply(content as string | InteractionReplyOptions).then(() => i.fetchReply()),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
static override wrap(wrappable: BaseInteraction | Message): Context {
|
||||
if ('interaction' in wrappable) {
|
||||
return new Context(Ok(wrappable));
|
||||
}
|
||||
assert.ok(wrappable.isChatInputCommand());
|
||||
return new Context(Err(wrappable));
|
||||
}
|
||||
}
|
||||
|
||||
function safeUnwrap<T>(res: Result<T, T>) {
|
||||
return res.val;
|
||||
}
|
||||
32
src/core/structures/core-context.ts
Normal file
32
src/core/structures/core-context.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import { Result as Either } from 'ts-results-es';
|
||||
import { SernError } from '../_internal';
|
||||
import * as assert from 'node:assert';
|
||||
|
||||
/**
|
||||
* @since 3.0.0
|
||||
*/
|
||||
export abstract class CoreContext<M, I> {
|
||||
protected constructor(protected ctx: Either<M, I>) {
|
||||
assert.ok(typeof ctx.val === 'object' && ctx.val != null);
|
||||
}
|
||||
get message(): M {
|
||||
return this.ctx.expect(SernError.MismatchEvent);
|
||||
}
|
||||
get interaction(): I {
|
||||
return this.ctx.expectErr(SernError.MismatchEvent);
|
||||
}
|
||||
|
||||
public isMessage(): this is CoreContext<M, never> {
|
||||
return this.ctx.ok;
|
||||
}
|
||||
|
||||
public isSlash(): this is CoreContext<never, I> {
|
||||
return !this.isMessage();
|
||||
}
|
||||
//todo: add agnostic options resolver for Context
|
||||
abstract get options(): unknown;
|
||||
|
||||
static wrap(_: unknown): unknown {
|
||||
throw Error('You need to override this method; cannot wrap an abstract class');
|
||||
}
|
||||
}
|
||||
142
src/core/structures/enums.ts
Normal file
142
src/core/structures/enums.ts
Normal file
@@ -0,0 +1,142 @@
|
||||
/**
|
||||
* @since 1.0.0
|
||||
* A bitfield that discriminates command modules
|
||||
* @enum { number }
|
||||
* @example
|
||||
* ```ts
|
||||
* export default commandModule({
|
||||
* // highlight-next-line
|
||||
* type : CommandType.Text,
|
||||
* name : 'a text command'
|
||||
* execute(message) {
|
||||
* console.log(message.content)
|
||||
* }
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
export enum CommandType {
|
||||
Text = 1 << 0,
|
||||
Slash = 1 << 1,
|
||||
Both = 3,
|
||||
CtxUser = 1 << 2,
|
||||
CtxMsg = 1 << 3,
|
||||
Button = 1 << 4,
|
||||
StringSelect = 1 << 5,
|
||||
Modal = 1 << 6,
|
||||
UserSelect = 1 << 7,
|
||||
RoleSelect = 1 << 8,
|
||||
MentionableSelect = 1 << 9,
|
||||
ChannelSelect = 1 << 10,
|
||||
}
|
||||
|
||||
/**
|
||||
* A bitfield that discriminates event modules
|
||||
* @enum { number }
|
||||
* @example
|
||||
* ```ts
|
||||
* export default eventModule({
|
||||
* //highlight-next-line
|
||||
* type : EventType.Discord,
|
||||
* name : 'guildMemberAdd'
|
||||
* execute(member : GuildMember) {
|
||||
* console.log(member)
|
||||
* }
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
export enum EventType {
|
||||
/**
|
||||
* The EventType for handling discord events
|
||||
*/
|
||||
Discord = 1,
|
||||
/**
|
||||
* The EventType for handling sern events
|
||||
*/
|
||||
Sern = 2,
|
||||
/**
|
||||
* The EventType for handling external events.
|
||||
* Could be for example, `process` events, database events
|
||||
*/
|
||||
External = 3,
|
||||
}
|
||||
|
||||
/**
|
||||
* A bitfield that discriminates plugins
|
||||
* @enum { number }
|
||||
* @example
|
||||
* ```ts
|
||||
* export default function myPlugin() : EventPlugin<CommandType.Text> {
|
||||
* //highlight-next-line
|
||||
* type : PluginType.Event,
|
||||
* execute([ctx, args], controller) {
|
||||
* return controller.next();
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
export enum PluginType {
|
||||
/**
|
||||
* The PluginType for InitPlugins
|
||||
*/
|
||||
Init = 1,
|
||||
/**
|
||||
* The PluginType for EventPlugins
|
||||
*/
|
||||
Control = 2,
|
||||
}
|
||||
/**
|
||||
* @enum { string }
|
||||
*/
|
||||
export enum PayloadType {
|
||||
/**
|
||||
* The PayloadType for a SernEmitter success event
|
||||
*/
|
||||
Success = 'success',
|
||||
/**
|
||||
* The PayloadType for a SernEmitter failure event
|
||||
*/
|
||||
Failure = 'failure',
|
||||
/**
|
||||
* The PayloadType for a SernEmitter warning event
|
||||
*/
|
||||
Warning = 'warning',
|
||||
}
|
||||
|
||||
/**
|
||||
* @enum { string }
|
||||
*/
|
||||
export const enum SernError {
|
||||
/**
|
||||
* Throws when registering an invalid module.
|
||||
* This means it is undefined or an invalid command type was provided
|
||||
*/
|
||||
InvalidModuleType = 'Detected an unknown module type',
|
||||
/**
|
||||
* Attempted to lookup module in command module store. Nothing was found!
|
||||
*/
|
||||
UndefinedModule = `A module could not be detected`,
|
||||
/**
|
||||
* Attempted to lookup module in command module store. Nothing was found!
|
||||
*/
|
||||
MismatchModule = `A module type mismatched with event emitted!`,
|
||||
/**
|
||||
* Unsupported interaction at this moment.
|
||||
*/
|
||||
NotSupportedInteraction = `This interaction is not supported.`,
|
||||
/**
|
||||
* One plugin called `controller.stop()` (end command execution / loading)
|
||||
*/
|
||||
PluginFailure = `A plugin failed to call controller.next()`,
|
||||
/**
|
||||
* A crash that occurs when accessing an invalid property of Context
|
||||
*/
|
||||
MismatchEvent = `You cannot use message when an interaction fired or vice versa`,
|
||||
/**
|
||||
* Unsupported feature attempted to access at this time
|
||||
*/
|
||||
NotSupportedYet = `This feature is not supported yet`,
|
||||
/**
|
||||
* Required Dependency not found
|
||||
*/
|
||||
MissingRequired = `@sern/client is required but was not found`,
|
||||
}
|
||||
5
src/core/structures/index.ts
Normal file
5
src/core/structures/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export { CommandType, PluginType, PayloadType, EventType } from './enums';
|
||||
export * from './context';
|
||||
export * from './sern-emitter';
|
||||
export * from './services';
|
||||
export * from './module-store';
|
||||
12
src/core/structures/module-store.ts
Normal file
12
src/core/structures/module-store.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { CommandMeta, Module } from '../../types/core-modules';
|
||||
import { CoreModuleStore } from '../contracts';
|
||||
|
||||
/*
|
||||
* @internal
|
||||
* Version 4.0.0 will internalize this api. Please refrain from using ModuleStore!
|
||||
* For interacting with modules, use the ModuleManager instead.
|
||||
*/
|
||||
export class ModuleStore implements CoreModuleStore {
|
||||
metadata = new WeakMap<Module, CommandMeta>();
|
||||
commands = new Map<string, string>();
|
||||
}
|
||||
89
src/core/structures/sern-emitter.ts
Normal file
89
src/core/structures/sern-emitter.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
import { EventEmitter } from 'node:events';
|
||||
import { PayloadType } from '../../core/structures';
|
||||
import { Module } from '../../types/core-modules';
|
||||
import { SernEventsMapping, Payload } from '../../types/utility';
|
||||
|
||||
/**
|
||||
* @since 1.0.0
|
||||
*/
|
||||
export class SernEmitter extends EventEmitter {
|
||||
constructor() {
|
||||
super({ captureRejections: true });
|
||||
}
|
||||
/**
|
||||
* Listening to sern events with on. This event stays on until a crash or a normal exit
|
||||
* @param eventName
|
||||
* @param listener what to do with the data
|
||||
*/
|
||||
public override on<T extends keyof SernEventsMapping>(
|
||||
eventName: T,
|
||||
listener: (...args: SernEventsMapping[T][]) => void,
|
||||
): this {
|
||||
return super.on(eventName, listener);
|
||||
}
|
||||
/**
|
||||
* Listening to sern events with on. This event stays on until a crash or a normal exit
|
||||
* @param eventName
|
||||
* @param listener what to do with the data
|
||||
*/
|
||||
public override once<T extends keyof SernEventsMapping>(
|
||||
eventName: T,
|
||||
listener: (...args: SernEventsMapping[T][]) => void,
|
||||
): this {
|
||||
return super.once(eventName, listener);
|
||||
}
|
||||
/**
|
||||
* Listening to sern events with on. This event stays on until a crash or a normal exit
|
||||
* @param eventName
|
||||
* @param args the arguments for emitting the eventName
|
||||
*/
|
||||
public override emit<T extends keyof SernEventsMapping>(
|
||||
eventName: T,
|
||||
...args: SernEventsMapping[T]
|
||||
): boolean {
|
||||
return super.emit(eventName, ...args);
|
||||
}
|
||||
private static payload<T extends Payload>(
|
||||
type: PayloadType,
|
||||
module?: Module,
|
||||
reason?: unknown,
|
||||
) {
|
||||
return { type, module, reason } as T;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a compliant SernEmitter failure payload
|
||||
* @param module
|
||||
* @param reason
|
||||
*/
|
||||
static failure(module?: Module, reason?: unknown) {
|
||||
//The generic cast Payload & { type : PayloadType.* } coerces the type to be a failure payload
|
||||
// same goes to the other methods below
|
||||
return SernEmitter.payload<Payload & { type: PayloadType.Failure }>(
|
||||
PayloadType.Failure,
|
||||
module,
|
||||
reason,
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Creates a compliant SernEmitter module success payload
|
||||
* @param module
|
||||
*/
|
||||
static success(module: Module) {
|
||||
return SernEmitter.payload<Payload & { type: PayloadType.Success }>(
|
||||
PayloadType.Success,
|
||||
module,
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Creates a compliant SernEmitter module warning payload
|
||||
* @param reason
|
||||
*/
|
||||
static warning(reason: unknown) {
|
||||
return SernEmitter.payload<Payload & { type: PayloadType.Warning }>(
|
||||
PayloadType.Warning,
|
||||
undefined,
|
||||
reason,
|
||||
);
|
||||
}
|
||||
}
|
||||
21
src/core/structures/services/error-handling.ts
Normal file
21
src/core/structures/services/error-handling.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import { ErrorHandling } from '../../contracts';
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @since 2.0.0
|
||||
* Version 4.0.0 will internalize this api. Please refrain from using ModuleStore!
|
||||
*/
|
||||
export class DefaultErrorHandling implements ErrorHandling {
|
||||
crash(err: Error): never {
|
||||
throw err;
|
||||
}
|
||||
|
||||
keepAlive = 5;
|
||||
|
||||
updateAlive(err: Error) {
|
||||
this.keepAlive--;
|
||||
if (this.keepAlive === 0) {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
}
|
||||
3
src/core/structures/services/index.ts
Normal file
3
src/core/structures/services/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export * from './error-handling';
|
||||
export * from './logger';
|
||||
export * from './module-manager';
|
||||
25
src/core/structures/services/logger.ts
Normal file
25
src/core/structures/services/logger.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { LogPayload, Logging } from '../../contracts';
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @since 2.0.0
|
||||
* Version 4.0.0 will internalize this api. Please refrain from using ModuleStore!
|
||||
*/
|
||||
export class DefaultLogging implements Logging {
|
||||
private date = () => new Date();
|
||||
debug(payload: LogPayload): void {
|
||||
console.debug(`DEBUG: ${this.date().toISOString()} -> ${payload.message}`);
|
||||
}
|
||||
|
||||
error(payload: LogPayload): void {
|
||||
console.error(`ERROR: ${this.date().toISOString()} -> ${payload.message}`);
|
||||
}
|
||||
|
||||
info(payload: LogPayload): void {
|
||||
console.info(`INFO: ${this.date().toISOString()} -> ${payload.message}`);
|
||||
}
|
||||
|
||||
warning(payload: LogPayload): void {
|
||||
console.warn(`WARN: ${this.date().toISOString()} -> ${payload.message}`);
|
||||
}
|
||||
}
|
||||
50
src/core/structures/services/module-manager.ts
Normal file
50
src/core/structures/services/module-manager.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import * as Id from '../../../core/id';
|
||||
import { CoreModuleStore, ModuleManager } from '../../contracts';
|
||||
import { Files } from '../../_internal';
|
||||
import { CommandMeta, CommandModule, CommandModuleDefs, Module } from '../../../types/core-modules';
|
||||
import { CommandType } from '../enums';
|
||||
/**
|
||||
* @internal
|
||||
* @since 2.0.0
|
||||
* Version 4.0.0 will internalize this api. Please refrain from using DefaultModuleManager!
|
||||
*/
|
||||
export class DefaultModuleManager implements ModuleManager {
|
||||
constructor(private moduleStore: CoreModuleStore) {}
|
||||
|
||||
getByNameCommandType<T extends CommandType>(name: string, commandType: T) {
|
||||
const id = this.get(Id.create(name, commandType));
|
||||
if (!id) {
|
||||
return undefined;
|
||||
}
|
||||
return Files.importModule<CommandModuleDefs[T]>(id);
|
||||
}
|
||||
|
||||
setMetadata(m: Module, c: CommandMeta): void {
|
||||
this.moduleStore.metadata.set(m, c);
|
||||
}
|
||||
|
||||
getMetadata(m: Module): CommandMeta {
|
||||
const maybeModule = this.moduleStore.metadata.get(m);
|
||||
if (!maybeModule) {
|
||||
throw Error('Could not find metadata in store for ' + m);
|
||||
}
|
||||
return maybeModule;
|
||||
}
|
||||
|
||||
get(id: string) {
|
||||
return this.moduleStore.commands.get(id);
|
||||
}
|
||||
set(id: string, path: string): void {
|
||||
this.moduleStore.commands.set(id, path);
|
||||
}
|
||||
//not tested
|
||||
getPublishableCommands(): Promise<CommandModule[]> {
|
||||
const entries = this.moduleStore.commands.entries();
|
||||
const publishable = 0b000000110;
|
||||
return Promise.all(
|
||||
Array.from(entries)
|
||||
.filter(([id]) => !(Number.parseInt(id.at(-1)!) & publishable))
|
||||
.map(([, path]) => Files.importModule<CommandModule>(path)),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,232 +0,0 @@
|
||||
import type {
|
||||
CommandInteraction,
|
||||
Interaction,
|
||||
MessageComponentInteraction,
|
||||
ModalSubmitInteraction,
|
||||
SelectMenuInteraction,
|
||||
} from 'discord.js';
|
||||
import { concatMap, fromEvent, map, Observable, of, throwError } from 'rxjs';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import * as Files from '../utilities/readFile';
|
||||
import { match } from 'ts-pattern';
|
||||
import { SernError } from '../structures/errors';
|
||||
import Context from '../structures/context';
|
||||
import { controller } from '../sern';
|
||||
import type { Module } from '../structures/module';
|
||||
import {
|
||||
isButton,
|
||||
isChatInputCommand,
|
||||
isMessageCtxMenuCmd,
|
||||
isPromise,
|
||||
isSelectMenu,
|
||||
isUserContextMenuCmd,
|
||||
} from '../utilities/predicates';
|
||||
import { filterCorrectModule } from './observableHandling';
|
||||
import { CommandType } from '../structures/enums';
|
||||
import type { Result } from 'ts-results';
|
||||
import type { AutocompleteInteraction } from 'discord.js';
|
||||
|
||||
function applicationCommandHandler(mod: Module | undefined, interaction: CommandInteraction) {
|
||||
const mod$ = <T extends CommandType>(cmdTy: T) => of(mod).pipe(filterCorrectModule(cmdTy));
|
||||
return (
|
||||
match(interaction)
|
||||
.when(isChatInputCommand, i => {
|
||||
const ctx = Context.wrap(i);
|
||||
return mod$(CommandType.Slash).pipe(
|
||||
concatMap(m => {
|
||||
return of(
|
||||
m.onEvent.map(e => e.execute([ctx, ['slash', i.options]], controller)),
|
||||
).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx, ['slash', i.options]);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
//Todo: refactor so that we dont have to have two separate branches. They're near identical!!
|
||||
//Only thing that differs is type of interaction
|
||||
.when(isMessageCtxMenuCmd, ctx => {
|
||||
return mod$(CommandType.MenuMsg).pipe(
|
||||
concatMap(m => {
|
||||
return of(m.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
.when(isUserContextMenuCmd, ctx => {
|
||||
return mod$(CommandType.MenuUser).pipe(
|
||||
concatMap(m => {
|
||||
return of(m.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
.run()
|
||||
);
|
||||
}
|
||||
|
||||
function messageComponentInteractionHandler(
|
||||
mod: Module | undefined,
|
||||
interaction: MessageComponentInteraction,
|
||||
) {
|
||||
const mod$ = <T extends CommandType>(ty: T) => of(mod).pipe(filterCorrectModule(ty));
|
||||
//Todo: refactor so that we dont have to have two separate branches. They're near identical!!
|
||||
//Only thing that differs is type of interaction
|
||||
return match(interaction)
|
||||
.when(isButton, ctx => {
|
||||
return mod$(CommandType.Button).pipe(
|
||||
concatMap(m => {
|
||||
return of(m.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
.when(isSelectMenu, (ctx: SelectMenuInteraction) => {
|
||||
return mod$(CommandType.MenuSelect).pipe(
|
||||
concatMap(m => {
|
||||
return of(m.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
.otherwise(() => throwError(() => SernError.NotSupportedInteraction));
|
||||
}
|
||||
|
||||
function modalHandler(modul: Module | undefined, ctx: ModalSubmitInteraction) {
|
||||
return of(modul).pipe(
|
||||
filterCorrectModule(CommandType.Modal),
|
||||
concatMap(mod => {
|
||||
return of(mod.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return mod.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
function autoCmpHandler(mod: Module | undefined, interaction: AutocompleteInteraction) {
|
||||
return of(mod).pipe(
|
||||
filterCorrectModule(CommandType.Slash),
|
||||
concatMap(mod => {
|
||||
const choice = interaction.options.getFocused(true);
|
||||
const selectedOption = mod.options?.find(o => o.autocomplete && o.name === choice.name);
|
||||
if (selectedOption !== undefined && selectedOption.autocomplete) {
|
||||
return of(
|
||||
selectedOption.command.onEvent.map(e => e.execute([interaction], controller)),
|
||||
).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return selectedOption.command.execute(interaction);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}
|
||||
return throwError(
|
||||
() =>
|
||||
SernError.NotSupportedInteraction +
|
||||
` There is probably no autocomplete tag for this option`,
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
export function onInteractionCreate(wrapper: Wrapper) {
|
||||
const { client } = wrapper;
|
||||
|
||||
const interactionEvent$ = <Observable<Interaction>>fromEvent(client, 'interactionCreate');
|
||||
|
||||
interactionEvent$
|
||||
.pipe(
|
||||
/*processing plugins*/
|
||||
concatMap(interaction => {
|
||||
if (interaction.isCommand()) {
|
||||
const modul =
|
||||
Files.ApplicationCommands[interaction.commandType].get(
|
||||
interaction.commandName,
|
||||
) ?? Files.BothCommands.get(interaction.commandName);
|
||||
return applicationCommandHandler(modul, interaction);
|
||||
}
|
||||
if (interaction.isMessageComponent()) {
|
||||
const modul = Files.MessageCompCommands[interaction.componentType].get(
|
||||
interaction.customId,
|
||||
);
|
||||
return messageComponentInteractionHandler(modul, interaction);
|
||||
}
|
||||
if (interaction.isModalSubmit()) {
|
||||
const modul = Files.ModalSubmitCommands.get(interaction.customId);
|
||||
return modalHandler(modul, interaction);
|
||||
}
|
||||
if (interaction.isAutocomplete()) {
|
||||
const modul =
|
||||
Files.ApplicationCommands['1'].get(interaction.commandName) ??
|
||||
Files.BothCommands.get(interaction.commandName);
|
||||
return autoCmpHandler(modul, interaction);
|
||||
}
|
||||
return throwError(() => SernError.NotSupportedInteraction);
|
||||
}),
|
||||
)
|
||||
.subscribe({
|
||||
async next({ mod, res: eventPluginRes, execute }) {
|
||||
const ePlugArr: Result<void, void>[] = [];
|
||||
for await (const res of eventPluginRes) {
|
||||
if (isPromise(res)) {
|
||||
ePlugArr.push(res);
|
||||
}
|
||||
ePlugArr.push(res as Awaited<Result<void, void>>);
|
||||
}
|
||||
if (ePlugArr.every(e => e.ok)) {
|
||||
await execute();
|
||||
wrapper.sernEmitter?.emit('module.activate', { success: true, module: mod! });
|
||||
} else {
|
||||
wrapper.sernEmitter?.emit('module.activate', {
|
||||
success: false,
|
||||
module: mod!,
|
||||
reason: SernError.PluginFailure,
|
||||
});
|
||||
}
|
||||
},
|
||||
error(err) {
|
||||
wrapper.sernEmitter?.emit('error', err);
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
import type { Message } from 'discord.js';
|
||||
import { concatMap, from, fromEvent, map, Observable, of } from 'rxjs';
|
||||
import type { Args } from '../..';
|
||||
import { controller } from '../sern';
|
||||
import Context from '../structures/context';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import { fmt } from '../utilities/messageHelpers';
|
||||
import * as Files from '../utilities/readFile';
|
||||
import { filterCorrectModule, ignoreNonBot } from './observableHandling';
|
||||
import { CommandType } from '../structures/enums';
|
||||
import { SernError } from '../structures/errors';
|
||||
|
||||
export const onMessageCreate = (wrapper: Wrapper) => {
|
||||
const { client, defaultPrefix } = wrapper;
|
||||
if (defaultPrefix === undefined) return;
|
||||
|
||||
const messageEvent$ = <Observable<Message>>fromEvent(client, 'messageCreate');
|
||||
|
||||
const processMessage$ = messageEvent$.pipe(
|
||||
ignoreNonBot(defaultPrefix),
|
||||
map(message => {
|
||||
const [prefix, ...rest] = fmt(message, defaultPrefix);
|
||||
return {
|
||||
ctx: Context.wrap(message),
|
||||
args: <Args>['text', rest],
|
||||
mod:
|
||||
Files.TextCommands.text.get(prefix) ??
|
||||
Files.BothCommands.get(prefix) ??
|
||||
Files.TextCommands.aliases.get(prefix),
|
||||
};
|
||||
}),
|
||||
);
|
||||
const ensureModuleType$ = processMessage$.pipe(
|
||||
concatMap(payload =>
|
||||
of(payload.mod).pipe(
|
||||
filterCorrectModule(CommandType.Text),
|
||||
map(mod => ({ ...payload, mod })),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
const processEventPlugins$ = ensureModuleType$.pipe(
|
||||
concatMap(({ ctx, args, mod }) => {
|
||||
const res = Promise.all(
|
||||
mod.onEvent.map(ePlug => {
|
||||
return ePlug.execute([ctx, args], controller);
|
||||
}),
|
||||
);
|
||||
return from(res).pipe(map(res => ({ mod, ctx, args, res })));
|
||||
}),
|
||||
);
|
||||
|
||||
processEventPlugins$.subscribe({
|
||||
next({ mod, ctx, args, res }) {
|
||||
if (res.every(pl => pl.ok)) {
|
||||
Promise.resolve(mod.execute(ctx, args)).then(() => {
|
||||
wrapper.sernEmitter?.emit('module.activate', { success: true, module: mod! });
|
||||
});
|
||||
} else {
|
||||
wrapper.sernEmitter?.emit('module.activate', {
|
||||
success: false,
|
||||
module: mod!,
|
||||
reason: SernError.PluginFailure,
|
||||
});
|
||||
}
|
||||
},
|
||||
error(e) {
|
||||
wrapper.sernEmitter?.emit('error', e);
|
||||
},
|
||||
});
|
||||
};
|
||||
@@ -1,44 +0,0 @@
|
||||
import type { Message } from 'discord.js';
|
||||
import { Observable, throwError } from 'rxjs';
|
||||
import { SernError } from '../structures/errors';
|
||||
import type { Module, ModuleDefs } from '../structures/module';
|
||||
import { correctModuleType } from '../utilities/predicates';
|
||||
export function filterCorrectModule<T extends keyof ModuleDefs>(cmdType: T) {
|
||||
return (src: Observable<Module | undefined>) =>
|
||||
new Observable<ModuleDefs[T]>(subscriber => {
|
||||
return src.subscribe({
|
||||
next(mod) {
|
||||
if (mod === undefined) {
|
||||
return throwError(() => SernError.UndefinedModule);
|
||||
}
|
||||
if (correctModuleType(mod, cmdType)) {
|
||||
subscriber.next(mod!);
|
||||
} else {
|
||||
return throwError(() => SernError.MismatchModule);
|
||||
}
|
||||
},
|
||||
error: e => subscriber.error(e),
|
||||
complete: () => subscriber.complete(),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function ignoreNonBot(prefix: string) {
|
||||
return (src: Observable<Message>) =>
|
||||
new Observable<Message>(subscriber => {
|
||||
return src.subscribe({
|
||||
next(m) {
|
||||
const messageFromHumanAndHasPrefix =
|
||||
!m.author.bot &&
|
||||
m.content
|
||||
.slice(0, prefix.length)
|
||||
.localeCompare(prefix, undefined, { sensitivity: 'accent' }) === 0;
|
||||
if (messageFromHumanAndHasPrefix) {
|
||||
subscriber.next(m);
|
||||
}
|
||||
},
|
||||
error: e => subscriber.error(e),
|
||||
complete: () => subscriber.complete(),
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -1,140 +0,0 @@
|
||||
import {
|
||||
concat,
|
||||
concatMap,
|
||||
from,
|
||||
fromEvent,
|
||||
map,
|
||||
Observable,
|
||||
of,
|
||||
skip,
|
||||
take,
|
||||
throwError,
|
||||
} from 'rxjs';
|
||||
import { basename } from 'path';
|
||||
import * as Files from '../utilities/readFile';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import { controller } from '../sern';
|
||||
import type { Result } from 'ts-results';
|
||||
import { Err, Ok } from 'ts-results';
|
||||
import type { Awaitable } from 'discord.js';
|
||||
import { ApplicationCommandType, ComponentType } from 'discord.js';
|
||||
import type { Module } from '../structures/module';
|
||||
import { match } from 'ts-pattern';
|
||||
import { SernError } from '../structures/errors';
|
||||
import type { DefinitelyDefined } from '../../types/handler';
|
||||
import { CommandType, PluginType } from '../structures/enums';
|
||||
|
||||
export const onReady = (wrapper: Wrapper) => {
|
||||
const { client, commands } = wrapper;
|
||||
const ready$ = fromEvent(client, 'ready').pipe(take(1), skip(1));
|
||||
const processCommandFiles$ = Files.buildData(commands).pipe(
|
||||
map(({ mod, absPath }) => {
|
||||
if (mod?.name === undefined) {
|
||||
const name = Files.fmtFileName(basename(absPath));
|
||||
return { name, ...mod };
|
||||
}
|
||||
return mod;
|
||||
}),
|
||||
);
|
||||
const processPlugins$ = processCommandFiles$.pipe(
|
||||
concatMap(mod => {
|
||||
if (mod.type === CommandType.Autocomplete) {
|
||||
return throwError(
|
||||
() =>
|
||||
SernError.NonValidModuleType +
|
||||
`. You cannot use command plugins and Autocomplete.`,
|
||||
);
|
||||
}
|
||||
const cmdPluginsRes =
|
||||
mod.plugins?.map(plug => {
|
||||
return {
|
||||
...plug,
|
||||
name: plug?.name ?? 'Unnamed Plugin',
|
||||
execute: plug.execute(client, mod, controller),
|
||||
};
|
||||
}) ?? [];
|
||||
return of({ mod, cmdPluginsRes });
|
||||
}),
|
||||
);
|
||||
|
||||
(
|
||||
concat(ready$, processPlugins$) as Observable<{
|
||||
mod: DefinitelyDefined<Module, { name: string }>;
|
||||
cmdPluginsRes: {
|
||||
execute: Awaitable<Result<void, void>>;
|
||||
type: PluginType.Command;
|
||||
name: string;
|
||||
description: string;
|
||||
}[];
|
||||
}>
|
||||
)
|
||||
.pipe(
|
||||
concatMap(pl =>
|
||||
from(
|
||||
Promise.all(
|
||||
pl.cmdPluginsRes.map(async e => ({ ...e, execute: await e.execute })),
|
||||
),
|
||||
).pipe(map(res => ({ ...pl, cmdPluginsRes: res }))),
|
||||
),
|
||||
)
|
||||
.subscribe(({ mod, cmdPluginsRes }) => {
|
||||
const loadedPluginsCorrectly = cmdPluginsRes.every(res => res.execute.ok);
|
||||
if (loadedPluginsCorrectly) {
|
||||
const res = registerModule(mod);
|
||||
if (res.err) {
|
||||
throw Error(
|
||||
SernError.NonValidModuleType +
|
||||
', or loading modules was handled incorrectly. ' +
|
||||
'Check commands path and command files!',
|
||||
);
|
||||
}
|
||||
wrapper.sernEmitter?.emit('module.register', { success: true, module: mod });
|
||||
} else {
|
||||
wrapper.sernEmitter?.emit('module.register', {
|
||||
success: false,
|
||||
module: mod,
|
||||
reason: SernError.PluginFailure,
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function registerModule(mod: DefinitelyDefined<Module, { name: string }>): Result<void, void> {
|
||||
const name = mod.name;
|
||||
return match<Module>(mod)
|
||||
.with({ type: CommandType.Text }, mod => {
|
||||
mod.alias?.forEach(a => Files.TextCommands.aliases.set(a, mod));
|
||||
Files.TextCommands.text.set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.Slash }, mod => {
|
||||
Files.ApplicationCommands[ApplicationCommandType.ChatInput].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.Both }, mod => {
|
||||
Files.BothCommands.set(name, mod);
|
||||
mod.alias?.forEach(a => Files.TextCommands.aliases.set(a, mod));
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.MenuUser }, mod => {
|
||||
Files.ApplicationCommands[ApplicationCommandType.User].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.MenuMsg }, mod => {
|
||||
Files.ApplicationCommands[ApplicationCommandType.Message].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.Button }, mod => {
|
||||
Files.ApplicationCommands[ComponentType.Button].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.MenuSelect }, mod => {
|
||||
Files.MessageCompCommands[ComponentType.SelectMenu].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.Modal }, mod => {
|
||||
Files.ModalSubmitCommands.set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.otherwise(() => Err.EMPTY);
|
||||
}
|
||||
@@ -1,108 +0,0 @@
|
||||
//
|
||||
// Plugins can be inserted on all commands and are emitted
|
||||
//
|
||||
// 1. on ready event, where all commands are loaded.
|
||||
// 2. on corresponding observable (command triggers)
|
||||
//
|
||||
// The goal of plugins is to organize commands and
|
||||
// provide extensions to repetitive patterns
|
||||
// examples include refreshing modules,
|
||||
// categorizing commands, cooldowns, permissions, etc.
|
||||
// Plugins are reminiscent of middleware in express.
|
||||
//
|
||||
|
||||
import type { Awaitable, Client } from 'discord.js';
|
||||
import type { Err, Ok, Result } from 'ts-results';
|
||||
import type { Module, Override } from '../..';
|
||||
import { CommandType } from '../..';
|
||||
import type { AutocompleteCommand, BaseModule, ModuleDefs } from '../structures/module';
|
||||
import { PluginType } from '../structures/enums';
|
||||
|
||||
export interface Controller {
|
||||
next: () => Ok<void>;
|
||||
stop: () => Err<void>;
|
||||
}
|
||||
|
||||
type BasePlugin = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: PluginType;
|
||||
}
|
||||
>;
|
||||
|
||||
export type CommandPlugin<T extends keyof ModuleDefs = keyof ModuleDefs> = {
|
||||
[K in T]: Override<
|
||||
BasePlugin,
|
||||
{
|
||||
type: PluginType.Command;
|
||||
execute: (
|
||||
wrapper: Client,
|
||||
module: ModuleDefs[T],
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
>;
|
||||
}[T];
|
||||
export type EventPlugin<T extends keyof ModuleDefs = keyof ModuleDefs> = {
|
||||
[K in T]: Override<
|
||||
BasePlugin,
|
||||
{
|
||||
type: PluginType.Event;
|
||||
execute: (
|
||||
event: Parameters<ModuleDefs[K]['execute']>,
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
>;
|
||||
}[T];
|
||||
|
||||
//Syntactic sugar on hold
|
||||
// export function plugins<T extends keyof ModuleDefs>(
|
||||
// ...plug: (EventPlugin<T> | CommandPlugin<T>)[]
|
||||
// ) {
|
||||
// return plug;
|
||||
// }
|
||||
|
||||
type ModuleNoPlugins = {
|
||||
[T in keyof ModuleDefs]: Omit<ModuleDefs[T], 'plugins' | 'onEvent'>;
|
||||
};
|
||||
|
||||
function isEventPlugin<T extends CommandType>(
|
||||
e: CommandPlugin<T> | EventPlugin<T>,
|
||||
): e is EventPlugin<T> {
|
||||
return e.type === PluginType.Event;
|
||||
}
|
||||
function isCommandPlugin<T extends CommandType>(
|
||||
e: CommandPlugin<T> | EventPlugin<T>,
|
||||
): e is CommandPlugin<T> {
|
||||
return !isEventPlugin(e);
|
||||
}
|
||||
//TODO: I WANT BETTER TYPINGS AHHHHHHHHHHHHHHH
|
||||
export function sernModule<T extends CommandType>(
|
||||
plugin: (CommandPlugin<T> | EventPlugin<T>)[],
|
||||
mod: ModuleNoPlugins[T],
|
||||
): Module {
|
||||
const onEvent = plugin.filter(isEventPlugin);
|
||||
const plugins = plugin.filter(isCommandPlugin);
|
||||
if (mod.type === CommandType.Autocomplete) {
|
||||
throw new Error(
|
||||
'You cannot use this function declaration for Autocomplete Interactions! use the raw object for options or' +
|
||||
'sernAutoComplete function',
|
||||
);
|
||||
} else
|
||||
return {
|
||||
onEvent,
|
||||
plugins,
|
||||
...mod,
|
||||
} as Module;
|
||||
}
|
||||
|
||||
export function sernAutocomplete(
|
||||
onEvent: EventPlugin<CommandType.Autocomplete>[],
|
||||
mod: Omit<AutocompleteCommand, 'type' | 'name' | 'description' | 'onEvent'>,
|
||||
): Omit<AutocompleteCommand, 'type' | 'name' | 'description'> {
|
||||
return {
|
||||
onEvent,
|
||||
...mod,
|
||||
};
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
import type { DiscordEvent, EventEmitterRegister } from '../types/handler';
|
||||
|
||||
import type Wrapper from './structures/wrapper';
|
||||
import { fromEvent } from 'rxjs';
|
||||
import { onReady } from './events/readyEvent';
|
||||
import { onMessageCreate } from './events/messageEvent';
|
||||
import { onInteractionCreate } from './events/interactionCreate';
|
||||
import { Err, Ok } from 'ts-results';
|
||||
import { isDiscordEvent } from './utilities/predicates';
|
||||
import type { Client } from 'discord.js';
|
||||
|
||||
export function init(wrapper: Wrapper) {
|
||||
const { events, client } = wrapper;
|
||||
if (events !== undefined) {
|
||||
eventObserver(client, events);
|
||||
}
|
||||
onReady(wrapper);
|
||||
onMessageCreate(wrapper);
|
||||
onInteractionCreate(wrapper);
|
||||
}
|
||||
|
||||
function eventObserver(client: Client, events: (DiscordEvent | EventEmitterRegister)[]) {
|
||||
events.forEach(event => {
|
||||
if (isDiscordEvent(event)) {
|
||||
fromEvent(client, event[0], event[1]).subscribe();
|
||||
} else {
|
||||
fromEvent(event[0], event[1], event[2]).subscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export const controller = {
|
||||
next: () => Ok.EMPTY,
|
||||
stop: () => Err.EMPTY,
|
||||
};
|
||||
@@ -1,48 +0,0 @@
|
||||
import { EventEmitter } from 'events';
|
||||
import type { Module } from './structures/module';
|
||||
|
||||
type Payload =
|
||||
| { success: true; module: Module }
|
||||
| { success: false; module: Module | undefined; reason: string | Error };
|
||||
|
||||
type SernEventsMapping = {
|
||||
['module.register']: [Payload];
|
||||
['module.activate']: [Payload];
|
||||
['error']: [Error | string];
|
||||
};
|
||||
|
||||
export default class SernEmitter extends EventEmitter {
|
||||
/**
|
||||
* Listening to sern events with on. This event stays on until a crash or a normal exit
|
||||
* @param eventName
|
||||
* @param listener what to do with the data
|
||||
*/
|
||||
public override on<T extends keyof SernEventsMapping>(
|
||||
eventName: T,
|
||||
listener: (...args: SernEventsMapping[T][]) => void,
|
||||
): this {
|
||||
return super.on(eventName, listener);
|
||||
}
|
||||
/**
|
||||
* Listening to sern events with on. This event stays on until a crash or a normal exit
|
||||
* @param eventName
|
||||
* @param listener what to do with the data
|
||||
*/
|
||||
public override once<T extends keyof SernEventsMapping>(
|
||||
eventName: T,
|
||||
listener: (...args: SernEventsMapping[T][]) => void,
|
||||
): this {
|
||||
return super.once(eventName, listener);
|
||||
}
|
||||
/**
|
||||
* Listening to sern events with on. This event stays on until a crash or a normal exit
|
||||
* @param eventName
|
||||
* @param args the arguments for emitting the { eventName }
|
||||
*/
|
||||
public override emit<T extends keyof SernEventsMapping>(
|
||||
eventName: T,
|
||||
...args: SernEventsMapping[T]
|
||||
): boolean {
|
||||
return super.emit(eventName, ...args);
|
||||
}
|
||||
}
|
||||
@@ -1,157 +0,0 @@
|
||||
import type { APIGuildMember } from 'discord-api-types/v9';
|
||||
import type {
|
||||
ChatInputCommandInteraction,
|
||||
Client,
|
||||
Guild,
|
||||
GuildMember,
|
||||
InteractionReplyOptions,
|
||||
Message,
|
||||
ReplyMessageOptions,
|
||||
Snowflake,
|
||||
TextBasedChannel,
|
||||
User,
|
||||
} from 'discord.js';
|
||||
import { None, Option, Some } from 'ts-results';
|
||||
import type { Nullish } from '../../types/handler';
|
||||
import { ExternallyUsed } from '../utilities/externallyUsed';
|
||||
|
||||
function firstSome<T>(...args: Option<T>[]): Nullish<T> {
|
||||
for (const op of args) {
|
||||
if (op.some) return op.val;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//Could I refactor with Either monad?
|
||||
/**
|
||||
* Provides values shared between
|
||||
* Message and ChatInputCommandInteraction
|
||||
*/
|
||||
export default class Context {
|
||||
private constructor(
|
||||
private oMsg: Option<Message> = None,
|
||||
private oInterac: Option<ChatInputCommandInteraction> = None,
|
||||
) {
|
||||
this.oMsg = oMsg;
|
||||
this.oInterac = oInterac;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getting the Message object. Crashes if module type is
|
||||
* CommandType.Slash or the event fired in a Both command was
|
||||
* ChatInputCommandInteraction
|
||||
*/
|
||||
@ExternallyUsed
|
||||
public get message() {
|
||||
return this.oMsg.unwrap();
|
||||
}
|
||||
/**
|
||||
* Getting the ChatInputCommandInteraction object. Crashes if module type is
|
||||
* CommandType.Text or the event fired in a Both command was
|
||||
* Message
|
||||
*/
|
||||
@ExternallyUsed
|
||||
public get interaction() {
|
||||
return this.oInterac.unwrap();
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get id(): Snowflake {
|
||||
return firstSome(
|
||||
this.oInterac.map(i => i.id),
|
||||
this.oMsg.map(m => m.id),
|
||||
)!;
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get channel(): Nullish<TextBasedChannel> {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.channel),
|
||||
this.oInterac.map(i => i.channel),
|
||||
);
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get user(): User {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.author),
|
||||
this.oInterac.map(i => i.user),
|
||||
)!;
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get createdTimestamp(): number {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.createdTimestamp),
|
||||
this.oInterac.map(i => i.createdTimestamp),
|
||||
)!;
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get guild(): Guild {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.guild),
|
||||
this.oInterac.map(i => i.guild),
|
||||
)!;
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get guildId(): Snowflake {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.guildId),
|
||||
this.oInterac.map(i => i.guildId),
|
||||
)!;
|
||||
}
|
||||
|
||||
/*
|
||||
* interactions can return APIGuildMember if the guild it is emitted from is not cached
|
||||
*/
|
||||
@ExternallyUsed
|
||||
public get member(): Nullish<GuildMember | APIGuildMember> {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.member),
|
||||
this.oInterac.map(i => i.member),
|
||||
);
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get client(): Client {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.client),
|
||||
this.oInterac.map(i => i.client),
|
||||
)!;
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get inGuild(): boolean {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.inGuild()),
|
||||
this.oInterac.map(i => i.inGuild()),
|
||||
)!;
|
||||
}
|
||||
|
||||
static wrap(wrappable: ChatInputCommandInteraction | Message): Context {
|
||||
if ('token' in wrappable) {
|
||||
return new Context(None, Some(wrappable));
|
||||
}
|
||||
return new Context(Some(wrappable), None);
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public isEmpty() {
|
||||
return this.oMsg.none && this.oInterac.none;
|
||||
}
|
||||
|
||||
//TODO: make this queueable
|
||||
@ExternallyUsed
|
||||
public reply(content: Omit<InteractionReplyOptions, 'fetchReply'> | ReplyMessageOptions) {
|
||||
return firstSome(
|
||||
this.oInterac.map(i => {
|
||||
return i.reply(content as InteractionReplyOptions).then(() => i.fetchReply());
|
||||
}),
|
||||
this.oMsg.map(m => {
|
||||
return m.reply(content as ReplyMessageOptions);
|
||||
}),
|
||||
)!;
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
/**
|
||||
* @enum { number };
|
||||
*/
|
||||
enum CommandType {
|
||||
Text = 0b00000001,
|
||||
Slash = 0b00000010,
|
||||
MenuUser = 0b00000100,
|
||||
MenuMsg = 0b00001000,
|
||||
Button = 0b00010000,
|
||||
MenuSelect = 0b00100000,
|
||||
Modal = 0b01000000,
|
||||
Autocomplete = 0b10000000,
|
||||
Both = 0b0000011,
|
||||
}
|
||||
|
||||
enum PluginType {
|
||||
Command = 0b01,
|
||||
Event = 0b10,
|
||||
}
|
||||
|
||||
export { CommandType, PluginType };
|
||||
@@ -1,7 +0,0 @@
|
||||
export enum SernError {
|
||||
NonValidModuleType = 'Detected an unknown module type',
|
||||
UndefinedModule = `A module could not be detected at`,
|
||||
MismatchModule = `A module type mismatched with event emitted!`,
|
||||
NotSupportedInteraction = `This interaction is not supported.`,
|
||||
PluginFailure = `A plugin failed to call controller.next()`,
|
||||
}
|
||||
@@ -1,201 +0,0 @@
|
||||
import type {
|
||||
ApplicationCommandAttachmentOption,
|
||||
ApplicationCommandChannelOptionData,
|
||||
ApplicationCommandChoicesData,
|
||||
ApplicationCommandNonOptionsData,
|
||||
ApplicationCommandNumericOptionData,
|
||||
ApplicationCommandOptionData,
|
||||
ApplicationCommandSubCommandData,
|
||||
ApplicationCommandSubGroupData,
|
||||
Awaitable,
|
||||
BaseApplicationCommandOptionsData,
|
||||
ButtonInteraction,
|
||||
MessageContextMenuCommandInteraction,
|
||||
ModalSubmitInteraction,
|
||||
SelectMenuInteraction,
|
||||
UserContextMenuCommandInteraction,
|
||||
} from 'discord.js';
|
||||
import type { Args, Override } from '../../types/handler';
|
||||
import type { CommandPlugin, EventPlugin } from '../plugins/plugin';
|
||||
import type Context from './context';
|
||||
import { CommandType, PluginType } from './enums';
|
||||
import type { AutocompleteInteraction } from 'discord.js';
|
||||
import type { ApplicationCommandOptionType } from 'discord.js';
|
||||
|
||||
export interface BaseModule {
|
||||
type: CommandType | PluginType;
|
||||
name?: string;
|
||||
description: string;
|
||||
execute: (ctx: Context, args: Args) => Awaitable<void>;
|
||||
}
|
||||
|
||||
//possible refactoring types into interfaces and not types
|
||||
export type TextCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Text;
|
||||
onEvent: EventPlugin<CommandType.Text>[];
|
||||
plugins: CommandPlugin[];
|
||||
alias?: string[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type SlashCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Slash;
|
||||
onEvent: EventPlugin<CommandType.Slash>[];
|
||||
plugins: CommandPlugin[];
|
||||
options?: SernOptionsData[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type BothCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Both;
|
||||
onEvent: EventPlugin<CommandType.Both>[];
|
||||
plugins: CommandPlugin[];
|
||||
alias?: string[];
|
||||
options?: SernOptionsData[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type ContextMenuUser = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.MenuUser;
|
||||
onEvent: EventPlugin<CommandType.MenuUser>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: UserContextMenuCommandInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type ContextMenuMsg = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.MenuMsg;
|
||||
onEvent: EventPlugin<CommandType.MenuMsg>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: MessageContextMenuCommandInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type ButtonCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Button;
|
||||
onEvent: EventPlugin<CommandType.Button>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ButtonInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type SelectMenuCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.MenuSelect;
|
||||
onEvent: EventPlugin<CommandType.MenuSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: SelectMenuInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type ModalSubmitCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Modal;
|
||||
onEvent: EventPlugin<CommandType.Modal>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ModalSubmitInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
// Autocomplete commands are a little different
|
||||
// They can't have command plugins as they are
|
||||
// in conjunction with chat input commands
|
||||
// TODO: possibly in future, allow Autocmp commands in separate files?
|
||||
export type AutocompleteCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Autocomplete;
|
||||
name: string;
|
||||
onEvent: EventPlugin<CommandType.Autocomplete>[];
|
||||
execute: (ctx: AutocompleteInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type Module =
|
||||
| TextCommand
|
||||
| SlashCommand
|
||||
| BothCommand
|
||||
| ContextMenuUser
|
||||
| ContextMenuMsg
|
||||
| ButtonCommand
|
||||
| SelectMenuCommand
|
||||
| ModalSubmitCommand
|
||||
| AutocompleteCommand;
|
||||
|
||||
//https://stackoverflow.com/questions/64092736/alternative-to-switch-statement-for-typescript-discriminated-union
|
||||
// Explicit Module Definitions for mapping
|
||||
export type ModuleDefs = {
|
||||
[CommandType.Text]: TextCommand;
|
||||
[CommandType.Slash]: SlashCommand;
|
||||
[CommandType.Both]: BothCommand;
|
||||
[CommandType.MenuMsg]: ContextMenuMsg;
|
||||
[CommandType.MenuUser]: ContextMenuUser;
|
||||
[CommandType.Button]: ButtonCommand;
|
||||
[CommandType.MenuSelect]: SelectMenuCommand;
|
||||
[CommandType.Modal]: ModalSubmitCommand;
|
||||
[CommandType.Autocomplete]: AutocompleteCommand;
|
||||
};
|
||||
|
||||
//TODO: support deeply nested Autocomplete
|
||||
// objective: construct union of ApplicationCommandOptionData change any Autocomplete data
|
||||
// into Sern autocomplete data.
|
||||
|
||||
export type SernAutocompleteData = Override<
|
||||
BaseApplicationCommandOptionsData,
|
||||
{
|
||||
autocomplete: true;
|
||||
type:
|
||||
| ApplicationCommandOptionType.String
|
||||
| ApplicationCommandOptionType.Number
|
||||
| ApplicationCommandOptionType.Integer;
|
||||
command: Omit<AutocompleteCommand, 'type' | 'name' | 'description'>;
|
||||
}
|
||||
>;
|
||||
|
||||
/**
|
||||
* Type that just uses SernAutocompleteData and not regular autocomplete
|
||||
*/
|
||||
export type BaseOptions =
|
||||
| ApplicationCommandChoicesData
|
||||
| ApplicationCommandNonOptionsData
|
||||
| ApplicationCommandChannelOptionData
|
||||
| ApplicationCommandNumericOptionData
|
||||
| ApplicationCommandAttachmentOption
|
||||
| SernAutocompleteData;
|
||||
|
||||
export type SernSubCommandData = Override<
|
||||
Omit<BaseApplicationCommandOptionsData, 'required'>,
|
||||
{
|
||||
type: ApplicationCommandOptionType.Subcommand;
|
||||
options?: BaseOptions[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type SernSubCommandGroupData = Override<
|
||||
Omit<BaseApplicationCommandOptionsData, 'required'>,
|
||||
{
|
||||
type: ApplicationCommandOptionType.SubcommandGroup;
|
||||
options?: SernSubCommandData[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type SernOptionsData<U extends ApplicationCommandOptionData = ApplicationCommandOptionData> =
|
||||
U extends ApplicationCommandSubCommandData
|
||||
? SernSubCommandData
|
||||
: U extends ApplicationCommandSubGroupData
|
||||
? SernSubCommandGroupData
|
||||
: BaseOptions;
|
||||
@@ -1,28 +0,0 @@
|
||||
import Context from './context';
|
||||
import type {
|
||||
BothCommand,
|
||||
Module,
|
||||
SlashCommand,
|
||||
TextCommand,
|
||||
SernOptionsData,
|
||||
BaseOptions,
|
||||
SernAutocompleteData,
|
||||
SernSubCommandData,
|
||||
SernSubCommandGroupData,
|
||||
} from './module';
|
||||
import type Wrapper from './wrapper';
|
||||
|
||||
export * from './enums';
|
||||
export {
|
||||
Context,
|
||||
SlashCommand,
|
||||
TextCommand,
|
||||
BothCommand,
|
||||
Module,
|
||||
Wrapper,
|
||||
SernOptionsData,
|
||||
BaseOptions,
|
||||
SernAutocompleteData,
|
||||
SernSubCommandData,
|
||||
SernSubCommandGroupData,
|
||||
};
|
||||
@@ -1,21 +0,0 @@
|
||||
import type { Client } from 'discord.js';
|
||||
import type { DiscordEvent, EventEmitterRegister } from '../../types/handler';
|
||||
import type SernEmitter from '../sernEmitter';
|
||||
|
||||
/**
|
||||
* An object to be passed into Sern.Handler constructor.
|
||||
* @typedef {object} Wrapper
|
||||
* @property {readonly Client} client
|
||||
* @property {readonly string} defaultPrefix
|
||||
* @property {readonly string} commands
|
||||
* @prop { readonly DiscordEvent[] } events
|
||||
*/
|
||||
interface Wrapper {
|
||||
readonly client: Client;
|
||||
readonly sernEmitter?: SernEmitter;
|
||||
readonly defaultPrefix?: string;
|
||||
readonly commands: string;
|
||||
readonly events?: (DiscordEvent | EventEmitterRegister)[];
|
||||
}
|
||||
|
||||
export default Wrapper;
|
||||
@@ -1,18 +0,0 @@
|
||||
/**
|
||||
* This function denotes usage of decorated method is external
|
||||
* Also, makes method appear 'used' in IDEs
|
||||
* @param _target
|
||||
* @param _propertyKey
|
||||
* @param _descriptor
|
||||
* @constructor
|
||||
*/
|
||||
export function ExternallyUsed(
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_target: unknown,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_propertyKey: string,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_descriptor: PropertyDescriptor,
|
||||
) {
|
||||
return void 0;
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
import type { Message } from 'discord.js';
|
||||
|
||||
/**
|
||||
* Checks if the author of message is a bot or not
|
||||
* @param message The message to check
|
||||
* @returns `true` if the author of the message is a bot, `false` otherwise
|
||||
* @example
|
||||
* isBot(message) ? 'yes it is a bot' : 'no it is not a bot';
|
||||
*/
|
||||
export function isNotFromBot(message: Message) {
|
||||
return !message.author.bot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the message **starts** with the prefix
|
||||
* @param message The message to check
|
||||
* @param prefix The prefix to check for
|
||||
* @returns `true` if the message starts with the prefix, `false` otherwise
|
||||
* @example
|
||||
* hasPrefix(message, '!') ? 'yes it does' : 'no it does not';
|
||||
*/
|
||||
export function hasPrefix(message: Message, prefix?: string) {
|
||||
return message.content.startsWith(prefix!);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the first character(s) _[depending on prefix length]_ of the message
|
||||
* @param msg
|
||||
* @param prefix The prefix to remove
|
||||
* @returns The message without the prefix
|
||||
* @example
|
||||
* message.content = '!ping';
|
||||
* console.log(fmt(message, '!'));
|
||||
* // [ 'ping' ]
|
||||
*/
|
||||
export function fmt(msg: Message, prefix: string): string[] {
|
||||
return msg.content.slice(prefix.length).trim().split(/\s+/g);
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
import type { Module, ModuleDefs } from '../structures/module';
|
||||
import type {
|
||||
Awaitable,
|
||||
ButtonInteraction,
|
||||
ChatInputCommandInteraction,
|
||||
CommandInteraction,
|
||||
MessageComponentInteraction,
|
||||
MessageContextMenuCommandInteraction,
|
||||
SelectMenuInteraction,
|
||||
UserContextMenuCommandInteraction,
|
||||
} from 'discord.js';
|
||||
import type { DiscordEvent, EventEmitterRegister } from '../..';
|
||||
|
||||
export function correctModuleType<T extends keyof ModuleDefs>(
|
||||
plug: Module | undefined,
|
||||
type: T,
|
||||
): plug is ModuleDefs[T] {
|
||||
// Another way to check if type is equivalent,
|
||||
// It will check based on flag system instead
|
||||
return plug !== undefined && (plug.type & type) !== 0;
|
||||
}
|
||||
|
||||
export function isChatInputCommand(i: CommandInteraction): i is ChatInputCommandInteraction {
|
||||
return i.isChatInputCommand();
|
||||
}
|
||||
|
||||
export function isButton(i: MessageComponentInteraction): i is ButtonInteraction {
|
||||
return i.isButton();
|
||||
}
|
||||
|
||||
export function isSelectMenu(i: MessageComponentInteraction): i is SelectMenuInteraction {
|
||||
return i.isSelectMenu();
|
||||
}
|
||||
|
||||
export function isMessageCtxMenuCmd(
|
||||
i: CommandInteraction,
|
||||
): i is MessageContextMenuCommandInteraction {
|
||||
return i.isMessageContextMenuCommand();
|
||||
}
|
||||
|
||||
export function isUserContextMenuCmd(
|
||||
i: CommandInteraction,
|
||||
): i is UserContextMenuCommandInteraction {
|
||||
return i.isUserContextMenuCommand();
|
||||
}
|
||||
|
||||
export function isPromise<T>(promiseLike: Awaitable<T>): promiseLike is Promise<T> {
|
||||
const keys = new Set(Object.keys(promiseLike));
|
||||
return keys.has('then') && keys.has('catch');
|
||||
}
|
||||
|
||||
export function isDiscordEvent(el: DiscordEvent | EventEmitterRegister): el is DiscordEvent {
|
||||
return el.length === 2;
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
import { ApplicationCommandType, ComponentType } from 'discord.js';
|
||||
import { readdirSync, statSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
import { from, Observable } from 'rxjs';
|
||||
import type { Module } from '../structures/module';
|
||||
|
||||
//Maybe move this? this probably doesnt belong in utlities/
|
||||
export const BothCommands = new Map<string, Module>();
|
||||
export const ApplicationCommands = {
|
||||
[ApplicationCommandType.User]: new Map<string, Module>(),
|
||||
[ApplicationCommandType.Message]: new Map<string, Module>(),
|
||||
[ApplicationCommandType.ChatInput]: new Map<string, Module>(),
|
||||
} as { [K in ApplicationCommandType]: Map<string, Module> };
|
||||
|
||||
export const MessageCompCommands = {
|
||||
[ComponentType.Button]: new Map<string, Module>(),
|
||||
[ComponentType.SelectMenu]: new Map<string, Module>(),
|
||||
[ComponentType.TextInput]: new Map<string, Module>(),
|
||||
};
|
||||
export const TextCommands = {
|
||||
text: new Map<string, Module>(),
|
||||
aliases: new Map<string, Module>(),
|
||||
};
|
||||
export const ModalSubmitCommands = new Map<string, Module>();
|
||||
// Courtesy @Townsy45
|
||||
function readPath(dir: string, arrayOfFiles: string[] = []): string[] {
|
||||
try {
|
||||
const files = readdirSync(dir);
|
||||
for (const file of files) {
|
||||
if (statSync(dir + '/' + file).isDirectory()) readPath(dir + '/' + file, arrayOfFiles);
|
||||
else arrayOfFiles.push(join(dir, '/', file));
|
||||
}
|
||||
} catch (err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
return arrayOfFiles;
|
||||
}
|
||||
|
||||
export const fmtFileName = (n: string) => n.substring(0, n.length - 3);
|
||||
|
||||
/**
|
||||
*
|
||||
* @returns {Observable<{ mod: Module; absPath: string; }[]>} data from command files
|
||||
* @param commandDir
|
||||
*/
|
||||
|
||||
export function buildData(commandDir: string): Observable<{
|
||||
mod: Module;
|
||||
absPath: string;
|
||||
}> {
|
||||
return from(
|
||||
getCommands(commandDir).map(absPath => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||
const mod = <Module>require(absPath).default;
|
||||
return { mod, absPath };
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
export function getCommands(dir: string): string[] {
|
||||
return readPath(join(process.cwd(), dir));
|
||||
}
|
||||
2
src/handlers/_internal.ts
Normal file
2
src/handlers/_internal.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export * from './dispatchers';
|
||||
export * from './event-utils';
|
||||
117
src/handlers/dispatchers.ts
Normal file
117
src/handlers/dispatchers.ts
Normal file
@@ -0,0 +1,117 @@
|
||||
import { EventEmitter } from 'node:events';
|
||||
import * as assert from 'node:assert';
|
||||
import { concatMap, from, fromEvent, map, OperatorFunction, pipe } from 'rxjs';
|
||||
import {
|
||||
arrayifySource,
|
||||
callPlugin,
|
||||
isAutocomplete,
|
||||
treeSearch,
|
||||
SernError,
|
||||
} from '../core/_internal';
|
||||
import { createResultResolver } from './event-utils';
|
||||
import { AutocompleteInteraction, BaseInteraction, Message } from 'discord.js';
|
||||
import { CommandType, Context } from '../core';
|
||||
import type { Args } from '../types/utility';
|
||||
import type { BothCommand, CommandModule, Module, Processed } from '../types/core-modules';
|
||||
|
||||
function dispatchInteraction<T extends CommandModule, V extends BaseInteraction | Message>(
|
||||
payload: { module: Processed<T>; event: V },
|
||||
createArgs: (m: typeof payload.event) => unknown[],
|
||||
) {
|
||||
return {
|
||||
module: payload.module,
|
||||
args: createArgs(payload.event),
|
||||
};
|
||||
}
|
||||
//TODO: refactor dispatchers so that it implements a strategy for each different type of payload?
|
||||
export function dispatchMessage(module: Processed<CommandModule>, args: [Context, Args]) {
|
||||
return {
|
||||
module,
|
||||
args,
|
||||
};
|
||||
}
|
||||
|
||||
function dispatchAutocomplete(payload: {
|
||||
module: Processed<BothCommand>;
|
||||
event: AutocompleteInteraction;
|
||||
}) {
|
||||
const option = treeSearch(payload.event, payload.module.options);
|
||||
assert.ok(
|
||||
option,
|
||||
Error(SernError.NotSupportedInteraction + ` There is no autocomplete tag for this option`),
|
||||
);
|
||||
return {
|
||||
module: option.command as Processed<Module>, //autocomplete is not a true "module" warning cast!
|
||||
args: [payload.event],
|
||||
};
|
||||
}
|
||||
|
||||
export function contextArgs(wrappable: Message | BaseInteraction, messageArgs?: string[]) {
|
||||
const ctx = Context.wrap(wrappable);
|
||||
const args = ctx.isMessage() ? ['text', messageArgs!] : ['slash', ctx.options];
|
||||
return [ctx, args] as [Context, Args];
|
||||
}
|
||||
|
||||
function interactionArg<T extends BaseInteraction>(interaction: T) {
|
||||
return [interaction] as [T];
|
||||
}
|
||||
|
||||
function intoPayload(module: Processed<Module>) {
|
||||
return pipe(
|
||||
arrayifySource,
|
||||
map(args => ({ module, args })),
|
||||
);
|
||||
}
|
||||
|
||||
const createResult = createResultResolver<
|
||||
Processed<Module>,
|
||||
{ module: Processed<Module>; args: unknown[] },
|
||||
unknown[]
|
||||
>({
|
||||
createStream: ({ module, args }) => from(module.onEvent).pipe(callPlugin(args)),
|
||||
onNext: ({ args }) => args,
|
||||
});
|
||||
/**
|
||||
* Creates an observable from { source }
|
||||
* @param module
|
||||
* @param source
|
||||
*/
|
||||
export function eventDispatcher(module: Processed<Module>, source: unknown) {
|
||||
assert.ok(source instanceof EventEmitter, `${source} is not an EventEmitter`);
|
||||
|
||||
const execute: OperatorFunction<unknown[], unknown> = concatMap(async args =>
|
||||
module.execute(...args),
|
||||
);
|
||||
return fromEvent(source, module.name).pipe(
|
||||
intoPayload(module),
|
||||
concatMap(createResult),
|
||||
execute,
|
||||
);
|
||||
}
|
||||
|
||||
export function createDispatcher(payload: {
|
||||
module: Processed<CommandModule>;
|
||||
event: BaseInteraction;
|
||||
}) {
|
||||
assert.ok(
|
||||
CommandType.Text !== payload.module.type,
|
||||
SernError.MismatchEvent + 'Found text command in interaction stream',
|
||||
);
|
||||
switch (payload.module.type) {
|
||||
case CommandType.Slash:
|
||||
case CommandType.Both: {
|
||||
if (isAutocomplete(payload.event)) {
|
||||
/**
|
||||
* Autocomplete is a special case that
|
||||
* must be handled separately, since it's
|
||||
* too different from regular command modules
|
||||
* CAST SAFETY: payload is already guaranteed to be a slash command or both command
|
||||
*/
|
||||
return dispatchAutocomplete(payload as never);
|
||||
}
|
||||
return dispatchInteraction(payload, contextArgs);
|
||||
}
|
||||
default:
|
||||
return dispatchInteraction(payload, interactionArg);
|
||||
}
|
||||
}
|
||||
237
src/handlers/event-utils.ts
Normal file
237
src/handlers/event-utils.ts
Normal file
@@ -0,0 +1,237 @@
|
||||
import { Interaction, Message } from 'discord.js';
|
||||
import {
|
||||
EMPTY,
|
||||
Observable,
|
||||
concatMap,
|
||||
filter,
|
||||
from,
|
||||
of,
|
||||
throwError,
|
||||
tap,
|
||||
MonoTypeOperatorFunction,
|
||||
catchError,
|
||||
finalize,
|
||||
} from 'rxjs';
|
||||
import {
|
||||
Files,
|
||||
Id,
|
||||
callPlugin,
|
||||
everyPluginOk,
|
||||
filterMapTo,
|
||||
handleError,
|
||||
SernError,
|
||||
VoidResult,
|
||||
} from '../core/_internal';
|
||||
import { Emitter, ErrorHandling, Logging, ModuleManager, useContainerRaw } from '../core';
|
||||
import { contextArgs, createDispatcher, dispatchMessage } from './dispatchers';
|
||||
import { ObservableInput, pipe } from 'rxjs';
|
||||
import { SernEmitter } from '../core';
|
||||
import { Result } from 'ts-results-es';
|
||||
import type { Awaitable } from '../types/utility';
|
||||
import assert from 'node:assert';
|
||||
import type { ControlPlugin } from '../types/core-plugin';
|
||||
import type { AnyModule, CommandModule, Module, Processed } from '../types/core-modules';
|
||||
import type { ImportPayload } from '../types/core';
|
||||
|
||||
function createGenericHandler<Source, Narrowed extends Source, Output>(
|
||||
source: Observable<Source>,
|
||||
makeModule: (event: Narrowed) => Promise<Output>,
|
||||
) {
|
||||
return (pred: (i: Source) => i is Narrowed) => source.pipe(filter(pred), concatMap(makeModule));
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the first character(s) _[depending on prefix length]_ of the message
|
||||
* @param msg
|
||||
* @param prefix The prefix to remove
|
||||
* @returns The message without the prefix
|
||||
* @example
|
||||
* message.content = '!ping';
|
||||
* console.log(fmt(message, '!'));
|
||||
* // [ 'ping' ]
|
||||
*/
|
||||
export function fmt(msg: string, prefix: string): string[] {
|
||||
return msg.slice(prefix.length).trim().split(/\s+/g);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Creates an RxJS observable that filters and maps incoming interactions to their respective modules.
|
||||
* @param i An RxJS observable of interactions.
|
||||
* @param mg The module manager instance used to retrieve the module path for each interaction.
|
||||
* @returns A handler to create a RxJS observable of dispatchers that take incoming interactions and execute their corresponding modules.
|
||||
*/
|
||||
export function createInteractionHandler<T extends Interaction>(
|
||||
source: Observable<Interaction>,
|
||||
mg: ModuleManager,
|
||||
) {
|
||||
return createGenericHandler<Interaction, T, ReturnType<typeof createDispatcher>>(
|
||||
source,
|
||||
async event => {
|
||||
const fullPath = mg.get(Id.reconstruct(event));
|
||||
assert(fullPath, SernError.UndefinedModule + ' No full path found in module store');
|
||||
return Files.defaultModuleLoader<Processed<CommandModule>>(fullPath).then(payload =>
|
||||
createDispatcher({ module: payload.module, event }),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
export function createMessageHandler(
|
||||
source: Observable<Message>,
|
||||
defaultPrefix: string,
|
||||
mg: ModuleManager,
|
||||
) {
|
||||
return createGenericHandler(source, async event => {
|
||||
const [prefix, ...rest] = fmt(event.content, defaultPrefix);
|
||||
const fullPath = mg.get(`${prefix}_A1`);
|
||||
|
||||
assert(fullPath, SernError.UndefinedModule + ' No full path found in module store');
|
||||
return Files.defaultModuleLoader<Processed<CommandModule>>(fullPath).then(payload => {
|
||||
const args = contextArgs(event, rest);
|
||||
return dispatchMessage(payload.module, args);
|
||||
});
|
||||
});
|
||||
}
|
||||
/**
|
||||
* IMPURE SIDE EFFECT
|
||||
* This function assigns remaining, incomplete data to each imported module.
|
||||
*/
|
||||
function assignDefaults<T extends Module>(
|
||||
moduleManager: ModuleManager,
|
||||
): MonoTypeOperatorFunction<ImportPayload<T>> {
|
||||
return tap(({ module, absPath }) => {
|
||||
module.name ??= Files.filename(absPath);
|
||||
module.description ??= '...';
|
||||
moduleManager.setMetadata(module, {
|
||||
isClass: module.constructor.name === 'Function',
|
||||
fullPath: absPath,
|
||||
id: Id.create(module.name, module.type),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function buildModules<T extends AnyModule>(
|
||||
input: ObservableInput<string>,
|
||||
moduleManager: ModuleManager,
|
||||
) {
|
||||
return Files.buildModuleStream<Processed<T>>(input).pipe(assignDefaults(moduleManager));
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps the task in a Result as a try / catch.
|
||||
* if the task is ok, an event is emitted and the stream becomes empty
|
||||
* if the task is an error, throw an error down the stream which will be handled by catchError
|
||||
* @param emitter reference to SernEmitter that will emit a successful execution of module
|
||||
* @param module the module that will be executed with task
|
||||
* @param task the deferred execution which will be called
|
||||
*/
|
||||
export function executeModule(
|
||||
emitter: Emitter,
|
||||
{
|
||||
module,
|
||||
task,
|
||||
}: {
|
||||
module: Processed<Module>;
|
||||
task: () => Awaitable<unknown>;
|
||||
},
|
||||
) {
|
||||
return of(module).pipe(
|
||||
//converting the task into a promise so rxjs can resolve the Awaitable properly
|
||||
concatMap(() => Result.wrapAsync(async () => task())),
|
||||
concatMap(result => {
|
||||
if (result.ok) {
|
||||
emitter.emit('module.activate', SernEmitter.success(module));
|
||||
return EMPTY;
|
||||
} else {
|
||||
return throwError(() => SernEmitter.failure(module, result.val));
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* A higher order function that
|
||||
* - creates a stream of {@link VoidResult} { config.createStream }
|
||||
* - any failures results to { config.onFailure } being called
|
||||
* - if all results are ok, the stream is converted to { config.onNext }
|
||||
* emit config.onSuccess Observable
|
||||
* @param config
|
||||
* @returns receiver function for flattening a stream of data
|
||||
*/
|
||||
export function createResultResolver<
|
||||
T extends { execute: (...args: any[]) => any; onEvent: ControlPlugin[] },
|
||||
Args extends { module: T; [key: string]: unknown },
|
||||
Output,
|
||||
>(config: {
|
||||
onStop?: (module: T) => unknown;
|
||||
onNext: (args: Args) => Output;
|
||||
createStream: (args: Args) => Observable<VoidResult>;
|
||||
}) {
|
||||
return (args: Args) => {
|
||||
const task$ = config.createStream(args);
|
||||
return task$.pipe(
|
||||
tap(result => {
|
||||
result.err && config.onStop?.(args.module);
|
||||
}),
|
||||
everyPluginOk,
|
||||
filterMapTo(() => config.onNext(args)),
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls a module's init plugins and checks for Err. If so, call { onStop } and
|
||||
* ignore the module
|
||||
*/
|
||||
export function callInitPlugins<T extends Processed<AnyModule>>(sernEmitter: Emitter) {
|
||||
return concatMap(
|
||||
createResultResolver({
|
||||
createStream: args => from(args.module.plugins).pipe(callPlugin(args)),
|
||||
onStop: (module: T) => {
|
||||
sernEmitter.emit(
|
||||
'module.register',
|
||||
SernEmitter.failure(module, SernError.PluginFailure),
|
||||
);
|
||||
},
|
||||
onNext: ({ module }) => {
|
||||
sernEmitter.emit('module.register', SernEmitter.success(module));
|
||||
return module;
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an executable task ( execute the command ) if all control plugins are successful
|
||||
* @param onStop emits a failure response to the SernEmitter
|
||||
*/
|
||||
export function makeModuleExecutor<
|
||||
M extends Processed<Module>,
|
||||
Args extends { module: M; args: unknown[] },
|
||||
>(onStop: (m: M) => unknown) {
|
||||
const onNext = ({ args, module }: Args) => ({
|
||||
task: () => module.execute(...args),
|
||||
module,
|
||||
});
|
||||
return concatMap(
|
||||
createResultResolver({
|
||||
onStop,
|
||||
createStream: ({ args, module }) => from(module.onEvent).pipe(callPlugin(args)),
|
||||
onNext,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
export const handleCrash = (err: ErrorHandling, log?: Logging) =>
|
||||
pipe(
|
||||
catchError(handleError(err, log)),
|
||||
finalize(() => {
|
||||
log?.info({
|
||||
message: 'A stream closed or reached end of lifetime',
|
||||
});
|
||||
useContainerRaw()
|
||||
?.disposeAll()
|
||||
.then(() => log?.info({ message: 'Cleaning container and crashing' }));
|
||||
}),
|
||||
);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user