From 3955337bee078956ba3981a192f7b1d7d1d90bed Mon Sep 17 00:00:00 2001
From: SrIzan10 <66965250+SrIzan10@users.noreply.github.com>
Date: Tue, 7 May 2024 16:25:00 +0200
Subject: [PATCH] Revert "starlight rewrite" (#65)
This reverts commit f6f60dee0d2c2714365e38d30e1ff8989c2df494.
---
.github/workflows/docusaurus.yml | 39 +
.github/workflows/github-pages.yml | 30 -
.gitignore | 34 +-
.nvmrc | 2 +-
.yarnrc.yml | 1 +
404.html | 30 +
LICENSE | 21 +
README.md | 4 +-
astro.config.mjs | 95 -
babel.config.js | 3 +
.../2022-09-28-mdx-blog-post.md | 65 +-
.../2022-09-30-mdx-blog-post.md | 14 +-
.../2022-12-13-mdx-blog-post.md | 140 +-
.../2023-01-12-mdx-blog-post.md | 19 +-
.../2023-06-18-mdx-blog-post.md | 79 +-
.../2023-7-4-mdx-blog-post.md | 11 +-
.../2024-02-23-mdx-blog-post.md | 5 +-
blog/authors.yml | 24 +
bun.lockb | Bin 282300 -> 0 bytes
docgen.docusaurus.config.js | 206 +
docs/api/_category_.yml | 1 +
docs/api/classes/CommandExecutable.md | 97 +
.../docs => docs}/api/classes/Context.md | 213 +-
docs/api/classes/DefaultErrorHandling.md | 90 +
docs/api/classes/DefaultLogging.md | 136 +
docs/api/classes/DefaultModuleManager.md | 195 +
docs/api/classes/EventExecutable.md | 97 +
.../docs => docs}/api/classes/ModuleStore.md | 25 +-
docs/api/classes/SernEmitter.md | 1289 ++
docs/api/classes/_category_.yml | 2 +
.../api/enums}/CommandType.md | 83 +-
.../api/enums}/EventType.md | 27 +-
.../api/enums}/PayloadType.md | 25 +-
.../api/enums}/PluginType.md | 21 +-
docs/api/enums/SernError.md | 104 +
docs/api/enums/_category_.yml | 2 +
docs/api/index.md | 76 +
docs/api/interfaces/AutocompleteCommand.md | 55 +
docs/api/interfaces/AutocompletePlugin.md | 88 +
.../api/interfaces/BothCommand.md | 92 +-
.../api/interfaces/ButtonCommand.md | 77 +-
.../api/interfaces/ChannelSelectCommand.md | 77 +-
docs/api/interfaces/CommandError.Response.md | 45 +
.../api/interfaces/CommandModuleDefs.md | 79 +-
docs/api/interfaces/CommandPlugin.md | 72 +
.../api/interfaces/ContextMenuMsg.md | 77 +-
.../api/interfaces/ContextMenuUser.md | 77 +-
docs/api/interfaces/ControlPlugin.md | 47 +
docs/api/interfaces/Controller.md | 43 +
docs/api/interfaces/CoreDependencies.md | 119 +
.../api/interfaces/CoreModuleStore.md | 19 +-
docs/api/interfaces/Dependencies.md | 67 +
.../api/interfaces/DependencyConfiguration.md | 47 +
docs/api/interfaces/DiscordEmitterPlugin.md | 90 +
.../api/interfaces/DiscordEventCommand.md | 77 +-
docs/api/interfaces/DiscordEventPlugin.md | 94 +
.../api/interfaces/Disposable.md | 15 +-
docs/api/interfaces/Emitter.md | 70 +
.../api/interfaces/ErrorHandling.md | 45 +-
.../api/interfaces/EventModuleDefs.md | 25 +-
docs/api/interfaces/EventPlugin.md | 72 +
docs/api/interfaces/ExternalEmitterPlugin.md | 90 +
.../api/interfaces/ExternalEventCommand.md | 73 +-
docs/api/interfaces/ExternalEventPlugin.md | 88 +
.../docs => docs}/api/interfaces/Init.md | 15 +-
docs/api/interfaces/InitArgs.md | 33 +
docs/api/interfaces/InitPlugin.md | 47 +
docs/api/interfaces/Logging.md | 101 +
.../interfaces/MentionableSelectCommand.md | 77 +-
.../api/interfaces/ModalSubmitCommand.md | 77 +-
docs/api/interfaces/Module.md | 115 +
docs/api/interfaces/ModuleManager.md | 155 +
docs/api/interfaces/Plugin.md | 47 +
.../api/interfaces/Presence.Result.md | 70 +-
.../api/interfaces/RoleSelectCommand.md | 77 +-
docs/api/interfaces/SernAutocompleteData.md | 113 +
docs/api/interfaces/SernEmitterPlugin.md | 90 +
.../api/interfaces/SernEventCommand.md | 77 +-
docs/api/interfaces/SernEventPlugin.md | 94 +
.../api/interfaces/SernEventsMapping.md | 37 +-
docs/api/interfaces/SernSubCommandData.md | 107 +
.../api/interfaces/SernSubCommandGroupData.md | 117 +
.../api/interfaces/SlashCommand.md | 84 +-
.../api/interfaces/StringSelectCommand.md | 77 +-
.../api/interfaces/TextCommand.md | 86 +-
.../api/interfaces/UserSelectCommand.md | 77 +-
.../docs => docs}/api/interfaces/Wrapper.md | 65 +-
docs/api/interfaces/_category_.yml | 2 +
docs/api/modules.md | 734 +
docs/api/namespaces/CommandError.md | 31 +
docs/api/namespaces/Presence.md | 93 +
docs/api/namespaces/Sern.md | 40 +
docs/api/namespaces/_category_.yml | 2 +
.../docs/cli/about.md => docs/cli/README.md | 14 +-
.../docs/cli/build.mdx => docs/cli/build.md | 206 +-
{src/content/docs => docs}/cli/clear.md | 17 +-
{src/content/docs => docs}/cli/extra.md | 3 -
{src/content/docs => docs}/cli/publish.md | 47 +-
docs/guide/.nojekyll | 0
docs/guide/README.md | 30 +
docs/guide/getting-started/_category_.yml | 1 +
docs/guide/getting-started/choose-ide.md | 11 +
docs/guide/getting-started/preparing.md | 14 +
docs/guide/walkthrough/_category_.yml | 1 +
docs/guide/walkthrough/autocomplete.md | 45 +
.../docs => docs}/guide/walkthrough/cli.md | 21 +-
.../guide/walkthrough/conclusion.md | 8 +-
.../guide/walkthrough/dependency-injection.md | 110 +
docs/guide/walkthrough/first-command.md | 120 +
.../guide/walkthrough/first-event.md | 65 +-
docs/guide/walkthrough/goal.md | 51 +
.../guide/walkthrough/good-to-know.md | 7 +-
.../guide/walkthrough/new-project.md | 11 +-
.../guide/walkthrough/plugins.md | 62 +-
.../guide/walkthrough/sern-emitter.md | 8 +-
docs/guide/walkthrough/services.md | 158 +
docs/guide/walkthrough/transition.md | 39 +
docs/intro.md | 21 +
docusaurus.config.js | 208 +
ec.config.mjs | 14 -
netlify.toml | 4 +-
package-lock.json | 15640 ++++++++++++++++
package.json | 82 +-
public/favicon.svg | 9 -
sidebars.js | 31 +
src/assets/docs/event-plugins.png | Bin 34537 -> 0 bytes
src/assets/logo/navbar-icon.png | Bin 31069 -> 0 bytes
src/assets/logo/sern-logo.png | Bin 22097 -> 0 bytes
src/components/DeprecatedIcon.astro | 16 -
src/components/Head.astro | 32 -
src/components/HomepageFeatures/index.js | 65 +
.../HomepageFeatures/styles.module.css | 12 +
src/components/Modal.astro | 42 -
src/components/PluginCard.astro | 41 -
src/components/PluginCard/index.js | 28 +
src/components/PluginCard/index.module.css | 31 +
src/components/PluginModal.astro | 46 -
src/components/PluginModal/index.js | 88 +
src/components/PluginModal/index.module.css | 11 +
src/components/SponsorCard.astro | 46 -
src/components/Sponsors/index.js | 92 +
src/components/Sponsors/styles.module.css | 42 +
src/components/ThemeSelect.astro | 39 -
src/content/config.ts | 7 -
src/content/docs/api/README.md | 96 -
.../api/functions/CommandControlPlugin.md | 29 -
.../docs/api/functions/CommandInitPlugin.md | 29 -
.../functions/DiscordEventControlPlugin.md | 35 -
.../docs/api/functions/EventControlPlugin.md | 29 -
.../docs/api/functions/EventInitPlugin.md | 29 -
src/content/docs/api/functions/Service.md | 41 -
src/content/docs/api/functions/Services.md | 31 -
.../docs/api/functions/commandModule.md | 24 -
.../docs/api/functions/discordEvent.md | 36 -
src/content/docs/api/functions/eventModule.md | 25 -
.../docs/api/functions/makeDependencies.md | 24 -
src/content/docs/api/functions/makePlugin.md | 26 -
src/content/docs/api/functions/single.md | 35 -
src/content/docs/api/functions/transient.md | 39 -
.../docs/api/interfaces/ControlPlugin.md | 38 -
src/content/docs/api/interfaces/Controller.md | 34 -
.../docs/api/interfaces/CoreDependencies.md | 94 -
src/content/docs/api/interfaces/Emitter.md | 66 -
src/content/docs/api/interfaces/InitPlugin.md | 38 -
src/content/docs/api/interfaces/Logging.md | 86 -
src/content/docs/api/interfaces/Plugin.md | 38 -
.../api/interfaces/SernAutocompleteData.md | 110 -
.../docs/api/interfaces/SernSubCommandData.md | 104 -
.../api/interfaces/SernSubCommandGroupData.md | 114 -
.../namespaces/Presence/functions/module.md | 28 -
.../api/namespaces/Presence/functions/of.md | 97 -
.../Presence/type-aliases/Config.md | 34 -
.../api/namespaces/Sern/functions/init.md | 33 -
.../docs/api/type-aliases/AnyCommandPlugin.md | 12 -
.../docs/api/type-aliases/AnyEventPlugin.md | 12 -
src/content/docs/api/type-aliases/Args.md | 22 -
.../docs/api/type-aliases/CommandModule.md | 12 -
.../docs/api/type-aliases/EventModule.md | 12 -
.../docs/api/type-aliases/Initializable.md | 19 -
.../docs/api/type-aliases/LogPayload.md | 22 -
src/content/docs/api/type-aliases/Payload.md | 12 -
.../docs/api/type-aliases/PluginResult.md | 12 -
.../docs/api/type-aliases/SernOptionsData.md | 14 -
.../docs/api/type-aliases/Singleton.md | 23 -
.../docs/api/type-aliases/SlashOptions.md | 12 -
.../docs/api/type-aliases/Transient.md | 27 -
src/content/docs/api/variables/controller.md | 35 -
.../docs/guide/getting-started/choose-ide.md | 12 -
.../docs/guide/getting-started/preparing.md | 13 -
.../docs/guide/walkthrough/autocomplete.md | 44 -
.../guide/walkthrough/dependency-injection.md | 113 -
.../docs/guide/walkthrough/first-command.mdx | 110 -
src/content/docs/guide/walkthrough/goal.md | 52 -
.../docs/guide/walkthrough/services.mdx | 144 -
.../docs/guide/walkthrough/transition.mdx | 60 -
src/content/docs/index.mdx | 28 -
src/content/docs/reference/example.md | 11 -
src/css/custom.css | 64 +
src/env.d.ts | 2 -
src/hooks/useTheme.js | 13 +
src/pages/discord.astro | 1 -
src/pages/index.js | 58 +
src/pages/index.module.css | 42 +
src/pages/markdown-page.md | 7 +
src/pages/plugins.astro | 17 -
src/pages/plugins.js | 32 +
src/pages/sponsors.astro | 44 -
src/pages/sponsors.css | 9 +
src/pages/sponsors.js | 18 +
src/styles/global.css | 3 -
src/theme/CodeBlock/index.js | 32 +
static/.nojekyll | 0
static/CNAME | 1 +
.../blog/newlogo/paperlogo.png | Bin
.../blog/newlogo/paperprototypes.jpg | Bin
.../blog/newlogo/serentried.png | Bin
static/discord.html | 13 +
.../img/Code_-_Insiders_2kTVzm0uIQ.gif | Bin
static/img/bricks-svgrepo-com.svg | 32 +
static/img/eventplugins.drawio.svg | 4 +
static/img/favicon.ico | Bin 0 -> 6280 bytes
static/img/fire-com.svg | 3 +
static/img/fs.png | Bin 0 -> 106755 bytes
static/img/logo.png | Bin 0 -> 5814 bytes
static/img/old-logo.png | Bin 0 -> 125133 bytes
static/img/old-sern-logo.png | Bin 0 -> 36614 bytes
static/img/pencil-svgrepo-com.svg | 15 +
static/img/puzzle-svgrepo-com.svg | 50 +
{public => static/img}/sern-logo.png | Bin
tailwind.config.mjs | 16 -
tsconfig.json | 4 -
yarn.lock | 8910 +++++++++
232 files changed, 33078 insertions(+), 4148 deletions(-)
create mode 100644 .github/workflows/docusaurus.yml
delete mode 100644 .github/workflows/github-pages.yml
create mode 100644 .yarnrc.yml
create mode 100644 404.html
create mode 100644 LICENSE
delete mode 100644 astro.config.mjs
create mode 100644 babel.config.js
rename src/content/docs/blog/2022-09-28.md => blog/2022-09-28-mdx-blog-post.md (63%)
rename src/content/docs/blog/2022-09-30.md => blog/2022-09-30-mdx-blog-post.md (91%)
rename src/content/docs/blog/2022-12-13.md => blog/2022-12-13-mdx-blog-post.md (68%)
rename src/content/docs/blog/2023-01-12.md => blog/2023-01-12-mdx-blog-post.md (78%)
rename src/content/docs/blog/2023-06-18.md => blog/2023-06-18-mdx-blog-post.md (54%)
rename src/content/docs/blog/2023-7-4.md => blog/2023-7-4-mdx-blog-post.md (86%)
rename src/content/docs/blog/2024-02-23.md => blog/2024-02-23-mdx-blog-post.md (97%)
create mode 100644 blog/authors.yml
delete mode 100755 bun.lockb
create mode 100644 docgen.docusaurus.config.js
create mode 100644 docs/api/_category_.yml
create mode 100644 docs/api/classes/CommandExecutable.md
rename {src/content/docs => docs}/api/classes/Context.md (54%)
create mode 100644 docs/api/classes/DefaultErrorHandling.md
create mode 100644 docs/api/classes/DefaultLogging.md
create mode 100644 docs/api/classes/DefaultModuleManager.md
create mode 100644 docs/api/classes/EventExecutable.md
rename {src/content/docs => docs}/api/classes/ModuleStore.md (54%)
create mode 100644 docs/api/classes/SernEmitter.md
create mode 100644 docs/api/classes/_category_.yml
rename {src/content/docs/api/enumerations => docs/api/enums}/CommandType.md (77%)
rename {src/content/docs/api/enumerations => docs/api/enums}/EventType.md (79%)
rename {src/content/docs/api/enumerations => docs/api/enums}/PayloadType.md (71%)
rename {src/content/docs/api/enumerations => docs/api/enums}/PluginType.md (76%)
create mode 100644 docs/api/enums/SernError.md
create mode 100644 docs/api/enums/_category_.yml
create mode 100644 docs/api/index.md
create mode 100644 docs/api/interfaces/AutocompleteCommand.md
create mode 100644 docs/api/interfaces/AutocompletePlugin.md
rename {src/content/docs => docs}/api/interfaces/BothCommand.md (56%)
rename {src/content/docs => docs}/api/interfaces/ButtonCommand.md (55%)
rename {src/content/docs => docs}/api/interfaces/ChannelSelectCommand.md (53%)
create mode 100644 docs/api/interfaces/CommandError.Response.md
rename {src/content/docs => docs}/api/interfaces/CommandModuleDefs.md (65%)
create mode 100644 docs/api/interfaces/CommandPlugin.md
rename {src/content/docs => docs}/api/interfaces/ContextMenuMsg.md (54%)
rename {src/content/docs => docs}/api/interfaces/ContextMenuUser.md (54%)
create mode 100644 docs/api/interfaces/ControlPlugin.md
create mode 100644 docs/api/interfaces/Controller.md
create mode 100644 docs/api/interfaces/CoreDependencies.md
rename {src/content/docs => docs}/api/interfaces/CoreModuleStore.md (62%)
create mode 100644 docs/api/interfaces/Dependencies.md
create mode 100644 docs/api/interfaces/DependencyConfiguration.md
create mode 100644 docs/api/interfaces/DiscordEmitterPlugin.md
rename {src/content/docs => docs}/api/interfaces/DiscordEventCommand.md (56%)
create mode 100644 docs/api/interfaces/DiscordEventPlugin.md
rename {src/content/docs => docs}/api/interfaces/Disposable.md (62%)
create mode 100644 docs/api/interfaces/Emitter.md
rename {src/content/docs => docs}/api/interfaces/ErrorHandling.md (52%)
rename {src/content/docs => docs}/api/interfaces/EventModuleDefs.md (53%)
create mode 100644 docs/api/interfaces/EventPlugin.md
create mode 100644 docs/api/interfaces/ExternalEmitterPlugin.md
rename {src/content/docs => docs}/api/interfaces/ExternalEventCommand.md (60%)
create mode 100644 docs/api/interfaces/ExternalEventPlugin.md
rename {src/content/docs => docs}/api/interfaces/Init.md (66%)
create mode 100644 docs/api/interfaces/InitArgs.md
create mode 100644 docs/api/interfaces/InitPlugin.md
create mode 100644 docs/api/interfaces/Logging.md
rename {src/content/docs => docs}/api/interfaces/MentionableSelectCommand.md (52%)
rename {src/content/docs => docs}/api/interfaces/ModalSubmitCommand.md (54%)
create mode 100644 docs/api/interfaces/Module.md
create mode 100644 docs/api/interfaces/ModuleManager.md
create mode 100644 docs/api/interfaces/Plugin.md
rename src/content/docs/api/namespaces/Presence/interfaces/Result.md => docs/api/interfaces/Presence.Result.md (50%)
rename {src/content/docs => docs}/api/interfaces/RoleSelectCommand.md (54%)
create mode 100644 docs/api/interfaces/SernAutocompleteData.md
create mode 100644 docs/api/interfaces/SernEmitterPlugin.md
rename {src/content/docs => docs}/api/interfaces/SernEventCommand.md (55%)
create mode 100644 docs/api/interfaces/SernEventPlugin.md
rename {src/content/docs => docs}/api/interfaces/SernEventsMapping.md (58%)
create mode 100644 docs/api/interfaces/SernSubCommandData.md
create mode 100644 docs/api/interfaces/SernSubCommandGroupData.md
rename {src/content/docs => docs}/api/interfaces/SlashCommand.md (53%)
rename {src/content/docs => docs}/api/interfaces/StringSelectCommand.md (54%)
rename {src/content/docs => docs}/api/interfaces/TextCommand.md (55%)
rename {src/content/docs => docs}/api/interfaces/UserSelectCommand.md (54%)
rename {src/content/docs => docs}/api/interfaces/Wrapper.md (58%)
create mode 100644 docs/api/interfaces/_category_.yml
create mode 100644 docs/api/modules.md
create mode 100644 docs/api/namespaces/CommandError.md
create mode 100644 docs/api/namespaces/Presence.md
create mode 100644 docs/api/namespaces/Sern.md
create mode 100644 docs/api/namespaces/_category_.yml
rename src/content/docs/cli/about.md => docs/cli/README.md (67%)
rename src/content/docs/cli/build.mdx => docs/cli/build.md (66%)
rename {src/content/docs => docs}/cli/clear.md (72%)
rename {src/content/docs => docs}/cli/extra.md (92%)
rename {src/content/docs => docs}/cli/publish.md (87%)
create mode 100644 docs/guide/.nojekyll
create mode 100644 docs/guide/README.md
create mode 100644 docs/guide/getting-started/_category_.yml
create mode 100644 docs/guide/getting-started/choose-ide.md
create mode 100644 docs/guide/getting-started/preparing.md
create mode 100644 docs/guide/walkthrough/_category_.yml
create mode 100644 docs/guide/walkthrough/autocomplete.md
rename {src/content/docs => docs}/guide/walkthrough/cli.md (84%)
rename {src/content/docs => docs}/guide/walkthrough/conclusion.md (58%)
create mode 100644 docs/guide/walkthrough/dependency-injection.md
create mode 100644 docs/guide/walkthrough/first-command.md
rename src/content/docs/guide/walkthrough/first-event.mdx => docs/guide/walkthrough/first-event.md (58%)
create mode 100644 docs/guide/walkthrough/goal.md
rename {src/content/docs => docs}/guide/walkthrough/good-to-know.md (93%)
rename {src/content/docs => docs}/guide/walkthrough/new-project.md (56%)
rename {src/content/docs => docs}/guide/walkthrough/plugins.md (71%)
rename {src/content/docs => docs}/guide/walkthrough/sern-emitter.md (89%)
create mode 100644 docs/guide/walkthrough/services.md
create mode 100644 docs/guide/walkthrough/transition.md
create mode 100644 docs/intro.md
create mode 100644 docusaurus.config.js
delete mode 100644 ec.config.mjs
create mode 100644 package-lock.json
delete mode 100644 public/favicon.svg
create mode 100644 sidebars.js
delete mode 100644 src/assets/docs/event-plugins.png
delete mode 100644 src/assets/logo/navbar-icon.png
delete mode 100644 src/assets/logo/sern-logo.png
delete mode 100644 src/components/DeprecatedIcon.astro
delete mode 100644 src/components/Head.astro
create mode 100644 src/components/HomepageFeatures/index.js
create mode 100644 src/components/HomepageFeatures/styles.module.css
delete mode 100644 src/components/Modal.astro
delete mode 100644 src/components/PluginCard.astro
create mode 100644 src/components/PluginCard/index.js
create mode 100644 src/components/PluginCard/index.module.css
delete mode 100644 src/components/PluginModal.astro
create mode 100644 src/components/PluginModal/index.js
create mode 100644 src/components/PluginModal/index.module.css
delete mode 100644 src/components/SponsorCard.astro
create mode 100644 src/components/Sponsors/index.js
create mode 100644 src/components/Sponsors/styles.module.css
delete mode 100644 src/components/ThemeSelect.astro
delete mode 100644 src/content/config.ts
delete mode 100644 src/content/docs/api/README.md
delete mode 100644 src/content/docs/api/functions/CommandControlPlugin.md
delete mode 100644 src/content/docs/api/functions/CommandInitPlugin.md
delete mode 100644 src/content/docs/api/functions/DiscordEventControlPlugin.md
delete mode 100644 src/content/docs/api/functions/EventControlPlugin.md
delete mode 100644 src/content/docs/api/functions/EventInitPlugin.md
delete mode 100644 src/content/docs/api/functions/Service.md
delete mode 100644 src/content/docs/api/functions/Services.md
delete mode 100644 src/content/docs/api/functions/commandModule.md
delete mode 100644 src/content/docs/api/functions/discordEvent.md
delete mode 100644 src/content/docs/api/functions/eventModule.md
delete mode 100644 src/content/docs/api/functions/makeDependencies.md
delete mode 100644 src/content/docs/api/functions/makePlugin.md
delete mode 100644 src/content/docs/api/functions/single.md
delete mode 100644 src/content/docs/api/functions/transient.md
delete mode 100644 src/content/docs/api/interfaces/ControlPlugin.md
delete mode 100644 src/content/docs/api/interfaces/Controller.md
delete mode 100644 src/content/docs/api/interfaces/CoreDependencies.md
delete mode 100644 src/content/docs/api/interfaces/Emitter.md
delete mode 100644 src/content/docs/api/interfaces/InitPlugin.md
delete mode 100644 src/content/docs/api/interfaces/Logging.md
delete mode 100644 src/content/docs/api/interfaces/Plugin.md
delete mode 100644 src/content/docs/api/interfaces/SernAutocompleteData.md
delete mode 100644 src/content/docs/api/interfaces/SernSubCommandData.md
delete mode 100644 src/content/docs/api/interfaces/SernSubCommandGroupData.md
delete mode 100644 src/content/docs/api/namespaces/Presence/functions/module.md
delete mode 100644 src/content/docs/api/namespaces/Presence/functions/of.md
delete mode 100644 src/content/docs/api/namespaces/Presence/type-aliases/Config.md
delete mode 100644 src/content/docs/api/namespaces/Sern/functions/init.md
delete mode 100644 src/content/docs/api/type-aliases/AnyCommandPlugin.md
delete mode 100644 src/content/docs/api/type-aliases/AnyEventPlugin.md
delete mode 100644 src/content/docs/api/type-aliases/Args.md
delete mode 100644 src/content/docs/api/type-aliases/CommandModule.md
delete mode 100644 src/content/docs/api/type-aliases/EventModule.md
delete mode 100644 src/content/docs/api/type-aliases/Initializable.md
delete mode 100644 src/content/docs/api/type-aliases/LogPayload.md
delete mode 100644 src/content/docs/api/type-aliases/Payload.md
delete mode 100644 src/content/docs/api/type-aliases/PluginResult.md
delete mode 100644 src/content/docs/api/type-aliases/SernOptionsData.md
delete mode 100644 src/content/docs/api/type-aliases/Singleton.md
delete mode 100644 src/content/docs/api/type-aliases/SlashOptions.md
delete mode 100644 src/content/docs/api/type-aliases/Transient.md
delete mode 100644 src/content/docs/api/variables/controller.md
delete mode 100644 src/content/docs/guide/getting-started/choose-ide.md
delete mode 100644 src/content/docs/guide/getting-started/preparing.md
delete mode 100644 src/content/docs/guide/walkthrough/autocomplete.md
delete mode 100644 src/content/docs/guide/walkthrough/dependency-injection.md
delete mode 100644 src/content/docs/guide/walkthrough/first-command.mdx
delete mode 100644 src/content/docs/guide/walkthrough/goal.md
delete mode 100644 src/content/docs/guide/walkthrough/services.mdx
delete mode 100644 src/content/docs/guide/walkthrough/transition.mdx
delete mode 100644 src/content/docs/index.mdx
delete mode 100644 src/content/docs/reference/example.md
create mode 100644 src/css/custom.css
delete mode 100644 src/env.d.ts
create mode 100644 src/hooks/useTheme.js
delete mode 100644 src/pages/discord.astro
create mode 100644 src/pages/index.js
create mode 100644 src/pages/index.module.css
create mode 100644 src/pages/markdown-page.md
delete mode 100644 src/pages/plugins.astro
create mode 100644 src/pages/plugins.js
delete mode 100644 src/pages/sponsors.astro
create mode 100644 src/pages/sponsors.css
create mode 100644 src/pages/sponsors.js
delete mode 100644 src/styles/global.css
create mode 100644 src/theme/CodeBlock/index.js
create mode 100644 static/.nojekyll
create mode 100644 static/CNAME
rename src/assets/blog/paper-logo.png => static/blog/newlogo/paperlogo.png (100%)
rename src/assets/blog/paper-prototypes.jpg => static/blog/newlogo/paperprototypes.jpg (100%)
rename src/assets/blog/seren-tried.png => static/blog/newlogo/serentried.png (100%)
create mode 100644 static/discord.html
rename src/assets/docs/sern-publish.gif => static/img/Code_-_Insiders_2kTVzm0uIQ.gif (100%)
create mode 100644 static/img/bricks-svgrepo-com.svg
create mode 100644 static/img/eventplugins.drawio.svg
create mode 100644 static/img/favicon.ico
create mode 100644 static/img/fire-com.svg
create mode 100644 static/img/fs.png
create mode 100644 static/img/logo.png
create mode 100644 static/img/old-logo.png
create mode 100644 static/img/old-sern-logo.png
create mode 100644 static/img/pencil-svgrepo-com.svg
create mode 100644 static/img/puzzle-svgrepo-com.svg
rename {public => static/img}/sern-logo.png (100%)
delete mode 100644 tailwind.config.mjs
delete mode 100644 tsconfig.json
create mode 100644 yarn.lock
diff --git a/.github/workflows/docusaurus.yml b/.github/workflows/docusaurus.yml
new file mode 100644
index 000000000..bbdaedce8
--- /dev/null
+++ b/.github/workflows/docusaurus.yml
@@ -0,0 +1,39 @@
+name: Deploy to GitHub Pages
+
+on:
+ push:
+ branches: [ main ]
+ # Review gh actions docs if you want to further define triggers, paths, etc
+ # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on
+
+jobs:
+ deploy:
+ name: Deploy to GitHub Pages
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 18
+ cache: yarn
+
+ - name: Install dependencies
+ run: yarn install --immutable
+ - name: Build website
+ run: yarn build
+
+ # Popular action to deploy to GitHub Pages:
+ # Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus
+ - name: Deploy to GitHub Pages
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ # Build output to publish to the `gh-pages` branch:
+ publish_dir: ./build
+ # The following lines assign commit authorship to the official
+ # GH-Actions bot for deploys to `gh-pages` branch:
+ # https://github.com/actions/checkout/issues/13#issuecomment-724415212
+ # The GH actions bot is used by default if you didn't specify the two fields.
+ # You can swap them out with your own user credentials.
+ user_name: github-actions[bot]
+ user_email: 41898282+github-actions[bot]@users.noreply.github.com
diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml
deleted file mode 100644
index f7af71aab..000000000
--- a/.github/workflows/github-pages.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-name: Deploy to GitHub Pages
-
-on:
- push:
- branches:
- - main
-
-jobs:
- deploy:
- name: Deploy to GitHub Pages
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: oven-sh/setup-bun@v1
- with:
- bun-version: latest
-
- - name: Install Dependencies
- run: bun install
-
- - name: Build
- run: rm -rf sern-handler && git clone https://github.com/sern-handler/handler sern-handler && cd sern-handler && bun install && cd .. && bun run build
-
- - name: Deploy to GitHub Pages
- uses: peaceiris/actions-gh-pages@v3
- with:
- github_token: ${{ secrets.AUTOMATA_TOKEN }}
- publish_dir: ./dist
- user_name: sernbot
- user_email: ${{ secrets.AUTOMATA_EMAIL }}
diff --git a/.gitignore b/.gitignore
index f9e74db9a..e472625f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,24 +1,20 @@
-# build output
-dist/
-# generated types
-.astro/
+# Dependencies
+/node_modules
-# dependencies
-node_modules/
-sern-handler
+# Production
+/build
-# logs
+# Generated files
+.docusaurus
+.cache-loader
+
+# Misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+.yarn/install-state.gz
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-pnpm-debug.log*
-
-
-# environment variables
-.env
-.env.production
-
-# macOS-specific files
-.DS_Store
-
-sern-handler
\ No newline at end of file
diff --git a/.nvmrc b/.nvmrc
index 1a2f5bd20..b009dfb9d 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-lts/*
\ No newline at end of file
+lts/*
diff --git a/.yarnrc.yml b/.yarnrc.yml
new file mode 100644
index 000000000..3186f3f07
--- /dev/null
+++ b/.yarnrc.yml
@@ -0,0 +1 @@
+nodeLinker: node-modules
diff --git a/404.html b/404.html
new file mode 100644
index 000000000..c2f2ef484
--- /dev/null
+++ b/404.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sern - Page Not Found
+
+
+
+
404
+
Not Found
+
+
The link you visited may be broken or invalid.
+
+
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..25a128d66
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 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
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+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.
diff --git a/README.md b/README.md
index a6e070dd2..de35e9903 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
-# Website (v2)
+# Website
-sern's clean, modern, and user-friendly web interface. (now built with [Starlight](https://starlight.astro.build/))
+sern's clean, modern and user-friendly web interface.
diff --git a/astro.config.mjs b/astro.config.mjs
deleted file mode 100644
index 8bbb8f908..000000000
--- a/astro.config.mjs
+++ /dev/null
@@ -1,95 +0,0 @@
-import { defineConfig } from 'astro/config';
-import starlight from '@astrojs/starlight';
-import starlightBlog from 'starlight-blog';
-import tailwind from "@astrojs/tailwind";
-import starlightDocSearch from '@astrojs/starlight-docsearch';
-import starlightTypeDoc, { typeDocSidebarGroup } from 'starlight-typedoc';
-
-export default defineConfig({
- integrations: [starlight({
- title: 'sern',
- social: {
- github: 'https://github.com/sern-handler',
- discord: 'https://discord.gg/DwbF5H5JgQ',
- },
- components: {
- ThemeSelect: './src/components/ThemeSelect.astro',
- Head: './src/components/Head.astro',
- },
- logo: {
- src: './src/assets/logo/navbar-icon.png',
- replacesTitle: true,
- },
- customCss: [
- './src/styles/global.css',
- ],
- sidebar: [
- typeDocSidebarGroup,
- {
- label: 'CLI',
- autogenerate: { directory: 'cli' },
- },
- {
- label: 'Guide',
- items: [
- {
- label: 'Getting Started',
- autogenerate: { directory: 'guide/getting-started' },
- },
- {
- label: 'Walkthrough',
- autogenerate: { directory: 'guide/walkthrough' },
- },
- ],
- },
- ],
- plugins: [
- starlightDocSearch({
- appId: 'AA9S5J9NYT',
- apiKey: 'ccfe6abc4d12ac6f882565a9d0caafb1',
- indexName: 'sern',
- }),
- starlightBlog({
- authors: {
- jacoobes: {
- name: 'jacoobes',
- title: 'Head Dev',
- url: 'https://github.com/jacoobes',
- picture: 'https://github.com/jacoobes.png',
- },
- ethan: {
- name: 'Sr Izan',
- title: 'Head Dev',
- url: 'https://github.com/SrIzan10',
- picture: 'https://github.com/SrIzan10.png',
- },
- sern: {
- name: 'sern Team',
- url: 'https://github.com/sern-handler',
- picture: 'https://github.com/sernbot.png',
- },
- murtatrxx: {
- name: 'Murtatrxx',
- title: 'Head Dev',
- url: 'https://github.com/Murtatrxx',
- picture: 'https://github.com/Murtatrxx.png',
- },
- duro: {
- name: 'Duro',
- title: 'Developer',
- url: 'https://github.com/DuroCodes',
- picture: 'https://github.com/DuroCodes.png',
- },
- }
- }),
- starlightTypeDoc({
- tsconfig: './sern-handler/tsconfig.json',
- entryPoints: ['./sern-handler/src/index.ts'],
- autogenerate: {
- directory: 'api',
- },
- sidebar: { collapsed: true },
- }),
- ],
- }), tailwind()]
-});
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 000000000..e00595dae
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
+};
diff --git a/src/content/docs/blog/2022-09-28.md b/blog/2022-09-28-mdx-blog-post.md
similarity index 63%
rename from src/content/docs/blog/2022-09-28.md
rename to blog/2022-09-28-mdx-blog-post.md
index 10d476c90..f5ebc5925 100644
--- a/src/content/docs/blog/2022-09-28.md
+++ b/blog/2022-09-28-mdx-blog-post.md
@@ -1,77 +1,71 @@
---
-slug: blog/1.2.0
+slug: 1.2.0
title: Release 1.2.0
authors: [jacoobes]
tags: [release]
-date: 2022-09-28
---
## Class-based modules
Today we're announcing the ability to create class based modules!
To get started, install
-
```
npm install @sern/handler@latest
```
Quick List of changes!
+- [Class based modules](#class-based-modules)
+- [Deprecation Warnings](#deprecation-warnings)
+- [Dependencies update](#dependencies-update)
-- [Class-based modules](#class-based-modules-1)
- - [Deprecation Warnings](#deprecation-warnings)
- - [Dependencies Update](#dependencies-update)
### Class based modules
-
Incorporate class based modules into your project instead of the traditional `commandModule` or `eventModule`
Extend the new [CommandExecutable](docs/api/classes/CommandExecutable) or [EventExecutable](docs/api/classes/EventExecutable)
-
-```ts title="commands/meaning-of-life.ts" {15}
-import {
- CommandType,
- CommandExecutable,
- type Args,
- type Context,
-} from "@sern/handler";
-import { publish } from "../plugins/publish.js";
-import { serendipityOnly } from "../plugins/serendipityOnly.js";
+```ts title="commands/meaning-of-life.ts"
+import { CommandType, CommandExecutable, type Args, type Context } from '@sern/handler';
+import { publish } from '../plugins/publish.js';
+import { serendipityOnly } from '../plugins/serendipityOnly.js';
export default class extends CommandExecutable {
- type = CommandType.Both as const;
- description = "What is the meaning of life?";
- override onEvent = [serendipityOnly()];
- override plugins = [publish()];
- execute = async (ctx: Context, args: Args) => {
- await ctx.reply("42");
- };
+ type = CommandType.Both as const;
+ description = 'What is the meaning of life?'
+ override onEvent = [
+ serendipityOnly()
+ ];
+ override plugins = [
+ publish(),
+ ];
+ // highlight-next-line
+ execute = async (ctx: Context, args: Args) => {
+ await ctx.reply('42')
+ };
}
```
-
:::caution
execute must not be a method of the class. It should be as above, a property on the class!
:::
-```ts title="events/guildMemberAdd.ts" {6}
-import { CommandType, EventExecutable, type EventType } from "@sern/handler";
-import type { GuildMember } from "discord.js";
+```ts title="events/guildMemberAdd.ts"
+import { CommandType, EventExecutable, type EventType } from '@sern/handler';
+import type { GuildMember } from 'discord.js'
export default class extends EventExecutable {
- type = EventType.Discord as const;
- execute = (member: GuildMember) => {
- console.log(member);
- };
+ type = EventType.Discord as const;
+ // highlight-next-line
+ execute = (member: GuildMember) => {
+ console.log(member)
+ };
}
```
-
Now, you might ask **why** this feature was added. Simply put, to give flexibility to the developers.
I believe that you should build your own structures however you might like and customize to your liking.
In addition, **decorators now unofficially work with modules!**
-Feel free to use TypeScript experimental decorators to augment and customize your classes.
+Feel free to use TypeScript experimental decorators to augment and customize your classes.
### Deprecation Warnings
-
The next update will bring sern v2 with some important features. Here are some things to watch out for.
- [Wrapper#client](docs/api/interfaces/Wrapper) will be deprecated
@@ -81,6 +75,5 @@ The next update will bring sern v2 with some important features. Here are some t
- [Sern#addExternal](docs/api/classes/SernEmitter) will be deprecated in favor of a better way.
### Dependencies Update
-
- TypeScript has been updated to 4.8.3
- Discord.js has been upgraded to 14.5
diff --git a/src/content/docs/blog/2022-09-30.md b/blog/2022-09-30-mdx-blog-post.md
similarity index 91%
rename from src/content/docs/blog/2022-09-30.md
rename to blog/2022-09-30-mdx-blog-post.md
index cf9340863..1d7aad5a5 100644
--- a/src/content/docs/blog/2022-09-30.md
+++ b/blog/2022-09-30-mdx-blog-post.md
@@ -1,9 +1,8 @@
---
-slug: blog/getting-started
+slug: getting-started
title: How to get started with sern!
-authors: [ethan]
+authors: [Sr Izan]
tags: [guides]
-date: 2022-09-30
---
## Hello everyone!
@@ -15,17 +14,13 @@ Today I'm going to show you how to get started with sern and all its cool featur
### Step 1: Install the CLI.
Install the CLI:
-
```
npm i -g @sern/cli
```
-
and then run
-
```
sern init
```
-
:::tip
You can also run `sern init -y` if you want to use the default options.
:::
@@ -55,14 +50,13 @@ Yes, that's it. Here's a little FAQ to get you started. You can also join the [D
## FAQ
**Q**: How do I publish a slash command?
-**A**: Install the publish extension. Little video:
-
+**A**: Install the publish extension. Little video:
**Q**: Any snippet VSCode extension?
-**A**: Yeah, just search `sern Snippets` made by a verified publisher called Sr Izan (haha yeah me funny!)
+**A**: Yeah, just search `sern Snippets` made by a verified publisher called Sr Izan (haha yeah me funny!)
**Q**: HEEEELLLPPPP!!!!
**A**: Hey, don't panic! We're here to help so, join the [Discord](https://sern.dev/discord). We're trying to get to 100 members!
diff --git a/src/content/docs/blog/2022-12-13.md b/blog/2022-12-13-mdx-blog-post.md
similarity index 68%
rename from src/content/docs/blog/2022-12-13.md
rename to blog/2022-12-13-mdx-blog-post.md
index f092564b9..30588296d 100644
--- a/src/content/docs/blog/2022-12-13.md
+++ b/blog/2022-12-13-mdx-blog-post.md
@@ -1,51 +1,45 @@
---
-slug: blog/2.0.0
+slug: 2.0.0
title: Release 2.0.0
authors: [jacoobes]
tags: [release]
-date: 2022-12-13
---
## 2.0 Release
-
Join our [discord](https://sern.dev/discord)!
Wow! We're finally increasing our semantic versioning by +`1.7.9.`
What does this mean?
### Plugin Support for Event Modules
-
-You can now use plugins for event modules. Previous version would throw an error if the
+You can now use plugins for event modules. Previous version would throw an error if the
`plugins` field was populated.
-```typescript
-export function commandPlTest(): SernEmitterPlugin {
- return {
- type: PluginType.Command,
- execute: ({ mod }, controller) => {
- if (mod.name === "module.register") {
- console.log("Event Module created correctly");
- return controller.next();
- }
- console.log("event name is wrong");
- return controller.stop();
- },
- };
+```typescript
+export function commandPlTest() : SernEmitterPlugin {
+ return {
+ type: PluginType.Command,
+ execute: ({ mod}, controller) => {
+ if(mod.name === 'module.register') {
+ console.log('Event Module created correctly')
+ return controller.next()
+ }
+ console.log('event name is wrong')
+ return controller.stop()
+ }
+ }
}
```
-
-Applying this plugin to some `eventModule`:
-
+Applying this plugin to some `eventModule`:
```typescript
export default eventModule({
- name: "error",
- type: EventType.Sern,
- plugins: [commandPlTest()],
- execute(m) {
- console.log(m);
- },
-});
+ name: 'error',
+ type: EventType.Sern,
+ plugins: [commandPlTest()],
+ execute(m) {
+ console.log(m)
+ },
+})
```
-
## Dependency Injection and Decoupling
The powerful npm package `iti` decouples sern even more.
@@ -53,63 +47,57 @@ Decoupling data structures with the Inversion of Control pattern separates data
and make sern even more customizable than before.
### How do I start?
-
```typescript title="src/index.ts"
//With typescript, you can customize / augment your typings.
interface MyDependencies extends Dependencies {
- "@sern/client": Singleton;
- "@sern/logger": Singleton;
+ '@sern/client' : Singleton;
+ '@sern/logger' : Singleton
}
export const useContainer = Sern.makeDependencies({
- // exclude: new Set(['@sern/logger']), don't autofill optional dependencies
- build: (root) =>
- root
- .add({ "@sern/client": single(client) })
- .add({ "@sern/logger": single(new DefaultLogging()) }),
+// exclude: new Set(['@sern/logger']), don't autofill optional dependencies
+ build: root => root
+ .add({ '@sern/client': single(client) })
+ .add({ '@sern/logger': single(new DefaultLogging()) })
});
Sern.init({
- defaultPrefix: "!", // removing defaultPrefix will shut down text commands
- commands: "src/commands",
- // events: 'src/events' (optional),
- containerConfig: {
- get: useContainer, //pass in your dependency getter here
- },
+ defaultPrefix: '!', // removing defaultPrefix will shut down text commands
+ commands: 'src/commands',
+ // events: 'src/events' (optional),
+ containerConfig : {
+ get: useContainer //pass in your dependency getter here
+ }
});
-```
-Using the `Sern#makeDependencies` function, inject your dependencies.
+```
+Using the `Sern#makeDependencies` function, inject your dependencies.
We'll use specific dependencies that are created with the `@sern/keyword`
key.
Using typescript to display all `keywords` and what they represent:
-
```typescript
export interface Dependencies {
- "@sern/client": Singleton; //Discord Client
- "@sern/logger"?: Singleton; //Logger
- "@sern/emitter": Singleton; //SernEmitter
- "@sern/store": Singleton; //Stores all Command Modules
- "@sern/modules": Singleton; //Manages Modules
- "@sern/errors": Singleton; //A Lifetime / Crash Handler
+ '@sern/client': Singleton; //Discord Client
+ '@sern/logger'?: Singleton; //Logger
+ '@sern/emitter': Singleton; //SernEmitter
+ '@sern/store' : Singleton; //Stores all Command Modules
+ '@sern/modules' : Singleton; //Manages Modules
+ '@sern/errors': Singleton; //A Lifetime / Crash Handler
}
```
-
:::danger
Sern#addExternal has been deprecated and removed in favor of Sern#makeDependencies
:::
-
-At the moment, one optional dependency, `@sern/logger`, exists. If not added explicitly,
+At the moment, one optional dependency, `@sern/logger`, exists. If not added explicitly,
we'll **autofill** with a [DefaultLogger](https://sern.dev/docs/api/classes/defaultlogging).
:::tip
-If you don't want a logger, add it to the
+If you don't want a logger, add it to the
`exclude` field while composing dependencies.
:::
Use your generated dependency getter `useContainer` (use whatever name you want), access them
from anywhere.
-
:::note
the function [useContainerRaw](https://sern.dev/docs/api/modules#usecontainerraw) is provided for direct access to dependencies and the internal
data structure. Use this wisely as no guarantees are made and crashes can happen.
@@ -118,30 +106,24 @@ data structure. Use this wisely as no guarantees are made and crashes can happen
The `build` field follows [createContainer](https://itijs.org/docs/quick-start#usage) function call.
## New CommandTypes
-
2.0 includes all the new role select menus. `CommandType.MenuSelect` has been renamed into
`CommandType.StringSelect`. The remaining SelectMenus are
`CommandType.RoleSelect`, `CommandType.ChannelSelect`, `CommandType.UserSelect`, `CommandType.MentionableSelect`
-
```typescript title="commands/roleselect.ts"
export default commandModule({
- type: CommandType.RoleSelect,
- execute(ctx) {
- ctx.reply("role select");
- },
-});
+ type: CommandType.RoleSelect,
+ execute(ctx) {
+ ctx.reply('role select')
+ },
+})
```
-
In addition, commandModules with ContextMenus have been renamed.
-
```diff
-- CommandType.MenuUser, CommandType.MenuMsg
+- CommandType.MenuUser, CommandType.MenuMsg
+ CommandType.CtxUser, CommandType.CtxMsg
```
-
## Typings Simplification
-
-Pre 2.0:
+Pre 2.0:
Post 2.0:
@@ -149,14 +131,12 @@ Post 2.0:
CommandPlugin and EventPlugin typings have also been static'ified, transformed from types to interfaces
-
## Breaking Changes
-
All deprecation warnings from previous versions have taken effect, and are removed in 2.0.
-```diff lang="ts" showLineNumbers=false
+```diff
- type Module = EventModule | CommandModule
+ type AnyModule = EventModule | CommandModule
@@ -164,9 +144,7 @@ All deprecation warnings from previous versions have taken effect, and are remov
- args: Parameters[number],
- ) => unknown;
```
-
Override type has been removed due to redundancy
-
```diff
- discord.js : 14.5
+ discord.js : 14.7
@@ -174,8 +152,7 @@ Override type has been removed due to redundancy
-typescript: 4.7
+ typescript: 4.9
```
-
-```diff lang="ts" showLineNumbers=false
+```diff
+ interface Wrapper {
+ readonly defaultPrefix?: string;
+ readonly commands: string;
@@ -196,22 +173,19 @@ Override type has been removed due to redundancy
- | (() => { mod: EventModule; absPath: string }[]);
-}
```
-
-```diff lang="ts" showLineNumbers=false
+```diff
+ DefaultLogger
+ DefaultModuleManager
+ SernEmitter
+ DefaultErrorHandling
+ type Singleton = () => T
-+ type Transient = () => () => T;
++ type Transient = () => () => T;
+ type LogPayload = { message: T }
+ export const single = () => T
+ export const many = () => () => T
```
-
Including the previous section, some names to symbols and data structures were altered to
be better represented. view [changelog](/404.html)
## Context refactoring
-
-The context data structure has been internally altered to represent its dynamics better.
+The context data structure has been internally altered to represent its dynamics better.
diff --git a/src/content/docs/blog/2023-01-12.md b/blog/2023-01-12-mdx-blog-post.md
similarity index 78%
rename from src/content/docs/blog/2023-01-12.md
rename to blog/2023-01-12-mdx-blog-post.md
index 6e23ec72b..586327a2e 100644
--- a/src/content/docs/blog/2023-01-12.md
+++ b/blog/2023-01-12-mdx-blog-post.md
@@ -1,32 +1,25 @@
---
-slug: blog/2.5.0
+slug: 2.5.0
title: Release 2.5.0
authors: [jacoobes]
tags: [release]
-date: 2023-01-12
---
## 2.5 Release
### Join our [discord](https://sern.dev/discord)
-
- Thank you for using sern in your projects. It's only going to get better!
- I apologize for the sudden small breaking change. After this update, there won't be any for a while.
- Wow! We're increasing our semantic versioning by `+0.3.9`
- What does this mean?
-
+Wow! We're increasing our semantic versioning by `+0.3.9`
+What does this mean?
### Breaking changes
-
- [controller](../docs/api/modules#controller) parameter for plugins has been removed
- - You'll need to import it instead
- - This **breaks** old [CommandPlugin](../docs/api/interfaces/CommandPlugin), but **not** old [EventPlugin](../docs/api/interfaces/EventPlugin)
-
+ - You'll need to import it instead
+ - This **breaks** old [CommandPlugin](../docs/api/interfaces/CommandPlugin), but **not** old [EventPlugin](../docs/api/interfaces/EventPlugin)
### Deprecations
-
- [CommandPlugin](../docs/api/interfaces/CommandPlugin) and [EventPlugin](../docs/api/interfaces/EventPlugin) have been renamed [InitPlugin](../docs/api/interfaces/InitPlugin) and [ControlPlugin](../docs/api/interfaces/ControlPlugin)
### Reason
-
- The naming of plugins was getting too complex. For example, plugin naming evolved into CommandModuleCommandPlugin, CommandModuleEventPlugin and more.
- I realize that this affects all plugins. I have updated all [plugins](https://github.com/sern-handler/awesome-plugins/pull/68) to match these changes
- The old way of declaring plugins has been deprecated in favor of newer functions that facilitate and ease typings
@@ -35,4 +28,4 @@ date: 2023-01-12
- [EventControlPlugin](../docs/api/modules#eventcontrolplugin)
- [EventInitPlugin](../docs/api/modules#eventinitplugin)
- [DiscordEventControlPlugin](../docs/api/modules#discordeventcontrolplugin)
- This will probably be the last breaking change in a while. Thanks for using sern!
+ This will probably be the last breaking change in a while. Thanks for using sern!
\ No newline at end of file
diff --git a/src/content/docs/blog/2023-06-18.md b/blog/2023-06-18-mdx-blog-post.md
similarity index 54%
rename from src/content/docs/blog/2023-06-18.md
rename to blog/2023-06-18-mdx-blog-post.md
index e79b03db1..4bcbc5fcd 100644
--- a/src/content/docs/blog/2023-06-18.md
+++ b/blog/2023-06-18-mdx-blog-post.md
@@ -1,9 +1,8 @@
---
-slug: blog/3.0.0
+slug: 3.0.0
title: Release 3.0.0
authors: [jacoobes]
tags: [release]
-date: 2023-06-18
---
## 3.0 Release
@@ -13,22 +12,20 @@ date: 2023-06-18
### Features
#### Dependency Management
-
- `Service` API (recommended to use this over useContainer hooks)
- - Dependencies type must be globally augmented in order for Services api to function properly
+ - Dependencies type must be globally augmented in order for Services api to function properly
- new methods on ModuleManager
- - getPublishableCommands()
-- Init Hooks
- - implement starting behavior for dependencies
- - To enforce and type check this, use the `Initializable` type when making your Dependencies type!
+ - getPublishableCommands()
+- Init Hooks
+ - implement starting behavior for dependencies
+ - To enforce and type check this, use the `Initializable` type when making your Dependencies type!
- Emitter interface
- - More generic interface to define any event emitter
- - You can now swap out the SernEmitter with whatever emitter now.
-
-```ts
+ - More generic interface to define any event emitter
+ - You can now swap out the SernEmitter with whatever emitter now.
+```ts
class DatabaseService implements Init {
//some hypothetical database
- _pgsql : database()
+ _pgsql : database()
async init() {
await _pgsql.load()
@@ -36,74 +33,70 @@ class DatabaseService implements Init {
}
-await makeDependencies({
+await makeDependencies({
build: root => root.add({
db: new DatabaseService() //will be init'ed automatically
})
})
```
-
- new SernEmitter event `modulesLoaded` , which allows users to customize behavior after all modules are loaded!
-
```ts
+
export default eventModule({
- name: "modulesLoaded",
- type: EventType.Sern,
- execute: () => {
- console.log("All modules loaded");
- },
-});
+ name: 'modulesLoaded',
+ type: EventType.Sern,
+ execute: () => {
+ console.log('All modules loaded')
+ }
+})
+
+
```
#### Quality of Life
-
- faster module loading
- - I utilize async generators for reading files now. A lot faster than the first iteration.
+ - I utilize async generators for reading files now. A lot faster than the first iteration.
- better error handling
- Less boilerplate
- - Services api cleans up v2 boilerplate
+ - Services api cleans up v2 boilerplate
- class modules devex got upgraded and work better than before
- automatically ignore any files not ending in (mts, cts, mjs, cjs, ts, js)
-
- - ignore commands and events with `!` prefix on filename or directory (ie: `!filename.ts` or `!directory` will be ignored by sern)
+ - ignore commands and events with `!` prefix on filename or directory (ie: `!filename.ts` or `!directory` will be ignored by sern)
- `Service` API (recommended to use this over useContainer hooks)
- - Dependencies type must be globally augmented in order for Services api to function properly
+ - Dependencies type must be globally augmented in order for Services api to function properly
- Less boilerplate
- new methods on ModuleManager
- automatically ignore any files not ending in (mts, cts, mjs, cjs, ts, js)
- - ignore commands / events with `!` prefix on filename or directory (ie: `!filename.ts` or `!directory`)
+ - ignore commands / events with `!` prefix on filename or directory (ie: `!filename.ts` or `!directory`)
- new SernEmitter event `modulesLoaded` , which allows users to customize behavior after all modules are loaded!
-- Init Hooks
- - implement starting behavior for dependencies
+- Init Hooks
+ - implement starting behavior for dependencies
### Experimental
-
- Experimental things may be subject to removal, need feedback and are not guaranteed stable
-- dev / prod mode
- - sern will behave differently depending on mode set
+- dev / prod mode
+ - sern will behave differently depending on mode set
- init sern from `file` option
- - reads from local sern.config.json
+ - reads from local sern.config.json
-```js
-Sern.init("file");
+```js
+Sern.init('file');
```
-
### Breaking changes
-
- Sern.makeDependencies -> makeDependencies
- - it is asynchronous and top level function now. Make sure to await it before initing for proper synchronization.
-- module store and manager internally changed, so those using them may recieve breaking changes
+ - it is asynchronous and top level function now. Make sure to await it before initing for proper synchronization.
+- module store and manager internally changed, so those using them may recieve breaking changes
- BaseOptions type removed
-```diff lang="ts" showLineNumbers=false
+```diff
- Sern.makeDependencies({ build: () => {} })
+ await makeDependencies({ build: () => {} })
```
### Deprecations
-
- Removed all previous marked deprecations in v3
- ModuleStore will be removed as a dependency in v4. The only way to access modules should be through ModuleManager
- Default Dependencies will be made internal in the v4. Users should only have access to its interface / contract
+
diff --git a/src/content/docs/blog/2023-7-4.md b/blog/2023-7-4-mdx-blog-post.md
similarity index 86%
rename from src/content/docs/blog/2023-7-4.md
rename to blog/2023-7-4-mdx-blog-post.md
index 7873cbdb8..0288cc5b2 100644
--- a/src/content/docs/blog/2023-7-4.md
+++ b/blog/2023-7-4-mdx-blog-post.md
@@ -1,9 +1,8 @@
---
-slug: blog/new-logo
+slug: newlogo
title: New logo!
authors: [sern]
tags: [branding]
-date: 2023-07-04
---
Hey everyone! Today we have very special news for you all: We're changing our logo!
@@ -18,11 +17,11 @@ And here we are!
[Ropox](https://github.com/Murtatrxx)!
Bro's the GOAT. This website is maintained by him, the domain costs are funded by him and also he started brainstorming how the logo would be on paper:
-
+
And there it all clicked:
-
+
seren tried by the way!
-
+
# Anyways, here it is:
@@ -32,4 +31,4 @@ Pretty nice!
By the way, we have animations and variations on the way, so make sure to stay updated in the [discord server](https://sern.dev/discord)!
-# Finally, from the entire sern team, thank you for sticking around ❤️
+# Finally, from the entire sern team, thank you for sticking around ❤️
\ No newline at end of file
diff --git a/src/content/docs/blog/2024-02-23.md b/blog/2024-02-23-mdx-blog-post.md
similarity index 97%
rename from src/content/docs/blog/2024-02-23.md
rename to blog/2024-02-23-mdx-blog-post.md
index b8f3842dd..c163a56b6 100644
--- a/src/content/docs/blog/2024-02-23.md
+++ b/blog/2024-02-23-mdx-blog-post.md
@@ -1,9 +1,8 @@
---
-slug: blog/railway-deploy
+slug: railway-deploy
title: Deploying sern with Railway
-authors: [duro]
+authors: [Duro]
tags: [guides]
-date: 2024-02-23
---
In this guide, I'll be showing you how to deploy your sern bot with [Railway](https://railway.app/).
diff --git a/blog/authors.yml b/blog/authors.yml
new file mode 100644
index 000000000..c522ede2d
--- /dev/null
+++ b/blog/authors.yml
@@ -0,0 +1,24 @@
+jacoobes:
+ name: jacoobes
+ title: Head Dev
+ url: https://github.com/jacoobes
+ image_url: https://github.com/jacoobes.png
+Sr Izan:
+ name: Sr Izan
+ title: Developer
+ url: https://github.com/SrIzan10
+ image_url: https://github.com/SrIzan10.png
+sern:
+ name: sern Team
+ url: https://github.com/sern-handler
+ image_url: https://github.com/sernbot.png
+Murtatrxx:
+ name: Murtatrxx
+ title: Developer
+ url: https://github.com/Murtatrxx
+ image_url: https://github.com/Murtatrxx.png
+Duro:
+ name: Duro
+ title: Developer
+ url: https://github.com/DuroCodes
+ image_url: https://github.com/DuroCodes.png
diff --git a/bun.lockb b/bun.lockb
deleted file mode 100755
index b3bfc5c516805829baae2dd6591824638c4dab8d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 282300
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
z
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