From be4ca540f6466e3545ab5807d55ab0f3f8da6cad Mon Sep 17 00:00:00 2001 From: Zaid Date: Sat, 6 Mar 2021 16:44:24 -0500 Subject: [PATCH 01/26] Update README.md --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 17216fa..7a6a279 100644 --- a/README.md +++ b/README.md @@ -9,20 +9,20 @@ cordis is a fully modular, micro-service based [Node.js](https://nodejs.org/) wr It is cut up in multiple packages/libraries: -- `@cordis/bitfield`, for working with bitfields using BigInts -- `@cordis/brokers`, message brokers for routing patterns, pub/sub systems and RPC! -- `@cordis/common`, cordis core utilities -- `@cordis/gateway`, containing a very flexible way of connecting to Discord's gateway - with clustering support -- `@cordis/queue`, simple, small sequential queue for async operations -- `@cordis/redis-store`, Redis implementation of `@cordis/store` -- `@cordis/rest`, tooling for making HTTP requests to Discord, with rate limiting handling -- `@cordis/routers`, make API requests with ease using simple dynamic javascript property accessing -- `@cordis/snowflake`, simple snowflake structure for destructuring Discord IDs into relevant information -- `@cordis/store`, Simple map-like interface for holding key-value pairs - ships with an in-memory implementation +- [`@cordis/bitfield`](https://github.com/cordis-lib/cordis/tree/main/libs/bitfield), for working with bitfields using BigInts +- [`@cordis/brokers`](https://github.com/cordis-lib/cordis/tree/main/libs/brokers), message brokers for routing patterns, pub/sub systems and RPC! +- [`@cordis/common`](https://github.com/cordis-lib/cordis/tree/main/libs/common), cordis core utilities +- [`@cordis/gateway`](https://github.com/cordis-lib/cordis/tree/main/libs/gateway), containing a very flexible way of connecting to Discord's gateway - with clustering support +- [`@cordis/queue`](https://github.com/cordis-lib/cordis/tree/main/libs/queue), simple, small sequential queue for async operations +- [`@cordis/redis-store`](https://github.com/cordis-lib/cordis/tree/main/libs/redis-store), Redis implementation of `@cordis/store` +- [`@cordis/rest`](https://github.com/cordis-lib/cordis/tree/main/libs/rest), tooling for making HTTP requests to Discord, with rate limiting handling +- [`@cordis/routers`](https://github.com/cordis-lib/cordis/tree/main/libs/routers), make API requests with ease using simple dynamic javascript property accessing +- [`@cordis/snowflake`](https://github.com/cordis-lib/cordis/tree/main/libs/snowflake), simple snowflake structure for destructuring Discord IDs into relevant information +- [`@cordis/store`](https://github.com/cordis-lib/cordis/tree/main/libs/store), Simple map-like interface for holding key-value pairs - ships with an in-memory implementation But also services that hook into RabbitMQ using the libraries mentioned above: -- `@cordis/gateway-service` - https://hub.docker.com/r/cordislib/gateway +- [`@cordis/gateway-service`](https://github.com/cordis-lib/cordis/tree/main/services/gateway) - https://hub.docker.com/r/cordislib/gateway # Come talk to me on Discord! From c0e65afb7f44aa2e828a045abc1866d4f64572b6 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:26:55 -0500 Subject: [PATCH 02/26] add new cordis logo --- media/cordis_transparent.png | Bin 0 -> 94632 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/cordis_transparent.png diff --git a/media/cordis_transparent.png b/media/cordis_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b33f6c411a128932e74ebf4e265c173fa421ad GIT binary patch literal 94632 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 literal 0 HcmV?d00001 From 42a46f7bb8b1e00051cc9badad35e1ea9439abab Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:27:04 -0500 Subject: [PATCH 03/26] pretty the root readme --- README.md | 58 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 7a6a279..7e8cf77 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,50 @@
-
+ +

+ A fully modular, micro-service based Node.js wrapper around the Discord API +

+

- +
+

+ + Explore the docs » Join Our Discord! + +

+

+ +

+ Linting + TypeScript
+ License: APACHE 2.0 + Issues + GitHub pull requests
+

-# About -cordis is a fully modular, micro-service based [Node.js](https://nodejs.org/) wrapper around the [Discord API](https://discordapp.com/developers/docs/intro) +# Packages -It is cut up in multiple packages/libraries: +Cordis is cut up in the form of multiple packages/libraries: -- [`@cordis/bitfield`](https://github.com/cordis-lib/cordis/tree/main/libs/bitfield), for working with bitfields using BigInts -- [`@cordis/brokers`](https://github.com/cordis-lib/cordis/tree/main/libs/brokers), message brokers for routing patterns, pub/sub systems and RPC! -- [`@cordis/common`](https://github.com/cordis-lib/cordis/tree/main/libs/common), cordis core utilities -- [`@cordis/gateway`](https://github.com/cordis-lib/cordis/tree/main/libs/gateway), containing a very flexible way of connecting to Discord's gateway - with clustering support -- [`@cordis/queue`](https://github.com/cordis-lib/cordis/tree/main/libs/queue), simple, small sequential queue for async operations -- [`@cordis/redis-store`](https://github.com/cordis-lib/cordis/tree/main/libs/redis-store), Redis implementation of `@cordis/store` -- [`@cordis/rest`](https://github.com/cordis-lib/cordis/tree/main/libs/rest), tooling for making HTTP requests to Discord, with rate limiting handling -- [`@cordis/routers`](https://github.com/cordis-lib/cordis/tree/main/libs/routers), make API requests with ease using simple dynamic javascript property accessing -- [`@cordis/snowflake`](https://github.com/cordis-lib/cordis/tree/main/libs/snowflake), simple snowflake structure for destructuring Discord IDs into relevant information -- [`@cordis/store`](https://github.com/cordis-lib/cordis/tree/main/libs/store), Simple map-like interface for holding key-value pairs - ships with an in-memory implementation +- [`@cordis/bitfield`](https://github.com/cordis-lib/cordis/tree/main/libs/bitfield) - A simple structure for working with bitfields using BigInts +- [`@cordis/brokers`](https://github.com/cordis-lib/cordis/tree/main/libs/brokers) - Message brokers for routing patterns, pub/sub systems and RPC! +- [`@cordis/common`](https://github.com/cordis-lib/cordis/tree/main/libs/common) - Common structures and utility shared across packages. +- [`@cordis/gateway`](https://github.com/cordis-lib/cordis/tree/main/libs/gateway) - A very flexible way of connecting to Discord's gateway, with clustering support. + - [`@cordis/gateway-service`](https://github.com/cordis-lib/cordis/tree/main/services/gateway) ([Docker](https://hub.docker.com/r/cordislib/gateway)) - Service that hooks into RabbitMQ using `@cordis/gateway` +- [`@cordis/queue`](https://github.com/cordis-lib/cordis/tree/main/libs/queue) - A simple and compact sequential queue for async operations +- [`@cordis/redis-store`](https://github.com/cordis-lib/cordis/tree/main/libs/redis-store) - A Redis implementation of `@cordis/store` +- [`@cordis/rest`](https://github.com/cordis-lib/cordis/tree/main/libs/rest) - Tooling for making HTTP requests to Discord, with rate limiting handling +- [`@cordis/routers`](https://github.com/cordis-lib/cordis/tree/main/libs/routers) - Make API requests with ease using simple dynamic JavaScript property accessing +- [`@cordis/snowflake`](https://github.com/cordis-lib/cordis/tree/main/libs/snowflake) - A simple snowflake structure for destructuring Discord IDs into relevant information +- [`@cordis/store`](https://github.com/cordis-lib/cordis/tree/main/libs/store) - A simple map-like interface for holding key-value pairs - ships with an in-memory implementation -But also services that hook into RabbitMQ using the libraries mentioned above: +# Contributing +We make use of [`PNPM`](https://pnpm.js.org/) to manage our monorepo setup. It is expected that you have an up-to-date version of it. -- [`@cordis/gateway-service`](https://github.com/cordis-lib/cordis/tree/main/services/gateway) - https://hub.docker.com/r/cordislib/gateway +Please ensure that you follow our [Code Of Conduct](https://github.com/discordjs/discord.js/blob/master/.github/CODE_OF_CONDUCT.md). +# LICENSING -# Come talk to me on Discord! +© 2020, [Didinele](https://github.com/didinele). Some rights reserved. -**Permanent invite link**: https://discord.gg/37ysd5dPYk +> Cordis is licensed under [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) From 0cd28b8b2f7a2d3f7f5ec91c1678af905f5a9090 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:33:45 -0500 Subject: [PATCH 04/26] fix some alt tags --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7e8cf77..0722410 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@

- Linting - TypeScript
+ Quality Check + Deploy Docs
License: APACHE 2.0 Issues GitHub pull requests
From 7bdb620e0a7623a66f11cb16a8889f753324ab4f Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:33:52 -0500 Subject: [PATCH 05/26] bitfield readme --- libs/bitfield/README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/libs/bitfield/README.md b/libs/bitfield/README.md index 547e326..3dac1e6 100644 --- a/libs/bitfield/README.md +++ b/libs/bitfield/README.md @@ -1,12 +1,21 @@ -

+# `@cordis/bitfield` -# @cordis/bitfield +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/bitfield?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/bitfield) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) -
+Data structure for working with bitfields. -## Description - -Data structure for working with bit fields. +## Installation +- `npm install @cordis/bitfield` +- `pnpm install @cordis/bitfield` +- `yarn add @cordis/bitfield` ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From c76b1b44dd7b21b2ce2f5b9307eae39c381bb68e Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:34:31 -0500 Subject: [PATCH 06/26] brokers readme --- libs/brokers/README.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/libs/brokers/README.md b/libs/brokers/README.md index a89741c..4371a10 100644 --- a/libs/brokers/README.md +++ b/libs/brokers/README.md @@ -1,11 +1,21 @@ -
+# `@cordis/brokers` -# @cordis/brokers +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/brokers?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/brokers) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) -
+A library containing message brokers for all sorts of patterns & protocols -## Description -A library containing message brokers for all sorts of patterns & protocols. +## Installation +- `npm install @cordis/brokers` +- `pnpm install @cordis/brokers` +- `yarn add @cordis/brokers` ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From d782820d08905733977f9e01fd99e76c62ae91a8 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:41:07 -0500 Subject: [PATCH 07/26] pretty common readme --- libs/common/README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/libs/common/README.md b/libs/common/README.md index 31feb7f..3adeaad 100644 --- a/libs/common/README.md +++ b/libs/common/README.md @@ -1,12 +1,21 @@ -
+# `@cordis/common` -# @cordis/common - -
- -## Description +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/common?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/common) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) A library containing cordis utility functions/types/structures. +## Installation +- `npm install @cordis/common` +- `pnpm install @cordis/common` +- `yarn add @cordis/common` + ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From c6c9d4e91c92eae0bbaeb71bd33c8ed2987dae4b Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:41:13 -0500 Subject: [PATCH 08/26] pretty error readme --- libs/error/README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/libs/error/README.md b/libs/error/README.md index 351e288..78738cc 100644 --- a/libs/error/README.md +++ b/libs/error/README.md @@ -1,12 +1,21 @@ -
+# `@cordis/error` -# @cordis/error - -
- -## Description +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/error?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/error) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) A library for easily creating error classes with pre-defined messages. +## Installation +- `npm install @cordis/error` +- `pnpm install @cordis/error` +- `yarn add @cordis/error` + ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From 146f93d58a257758797c1fcd2d2a07ba5f3c0ae6 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:41:20 -0500 Subject: [PATCH 09/26] pretty gateway readme --- libs/gateway/README.md | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/libs/gateway/README.md b/libs/gateway/README.md index 9ac115f..6794c8d 100644 --- a/libs/gateway/README.md +++ b/libs/gateway/README.md @@ -1,15 +1,18 @@ -
+# `@cordis/gateway` -# @cordis/gateway +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/gateway?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/gateway) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) -
+The cordis WS client for Discord's API. -## Description -The cordis WS client for Discord's API -___ +## Installation +- `npm install @cordis/gateway` +- `pnpm install @cordis/gateway` +- `yarn add @cordis/gateway` -## Example usage -```js +## Example Usage +```ts const { Cluster } = require('@cordis/gateway'); const main = async () => { @@ -33,7 +36,12 @@ const main = async () => { main(); ``` -___ ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From d29b87a626966c2a63ba2652bffbbe5bd1f25ecc Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:41:33 -0500 Subject: [PATCH 10/26] pretty queue readme --- libs/queue/README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/libs/queue/README.md b/libs/queue/README.md index c2c00c4..d6c2ac3 100644 --- a/libs/queue/README.md +++ b/libs/queue/README.md @@ -1,12 +1,21 @@ -
+# `@cordis/queue` -# @cordis/queue - -
- -## Description +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/queue?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/queue) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) Simple and sequential queue for async operations. +## Installation +- `npm install @cordis/queue` +- `pnpm install @cordis/queue` +- `yarn add @cordis/queue` + ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From 5acf61e01aee76d9913b175c3af5fec8f0ff853f Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:41:40 -0500 Subject: [PATCH 11/26] pretty redis-store readme --- libs/redis-store/README.md | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/libs/redis-store/README.md b/libs/redis-store/README.md index 1015feb..3f0e804 100644 --- a/libs/redis-store/README.md +++ b/libs/redis-store/README.md @@ -1,14 +1,23 @@ -
+# `@cordis/redis-store` -# @cordis/redis-store - -
- -## Description +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/redis-store?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/redis-store) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) Simple data structure for holding key-value pairs, taking from both Maps and Arrays. -This package implements `@cordis/store` using Redis hashes. +This package implements [`@cordis/store`](https://github.com/cordis-lib/cordis/tree/main/libs/store) using Redis hashes. + +## Installation +- `npm install @cordis/redis-store` +- `pnpm install @cordis/redis-store` +- `yarn add @cordis/redis-store` ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From 72c8cf446ed8b87c48bbd45c4d7bf2a58243a7f7 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:41:48 -0500 Subject: [PATCH 12/26] pretty rest readme --- libs/rest/README.md | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/libs/rest/README.md b/libs/rest/README.md index b1bc093..0ba3afb 100644 --- a/libs/rest/README.md +++ b/libs/rest/README.md @@ -1,17 +1,20 @@ -
+# `@cordis/rest` -# @cordis/rest +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/rest?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/rest) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) -
- -## Description Cordis' REST utilities for the Discord API Note: Props to https://github.com/spec-tacles/spectacles.js for the Mutex logic. -___ -## Example usage -```js +## Installation +- `npm install @cordis/rest` +- `pnpm install @cordis/rest` +- `yarn add @cordis/rest` + +## Example Usage +```ts const { RestManager } = require('@cordis/rest'); const main = async () => { @@ -28,7 +31,12 @@ const main = async () => { main(); ``` -___ ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From a48d27fe4f838863d8d95a09886e632e7229bfad Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:41:56 -0500 Subject: [PATCH 13/26] pretty routers readme --- libs/routers/README.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/libs/routers/README.md b/libs/routers/README.md index d2df220..020d1bd 100644 --- a/libs/routers/README.md +++ b/libs/routers/README.md @@ -1,16 +1,18 @@ -
+# `@cordis/routers` -# @cordis/routers - -
- -## Description +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/routers?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/routers) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) Construct API paths using simple JavaScript property accessing and execute requests with method calls. -## Example +## Installation +- `npm install @cordis/routers` +- `pnpm install @cordis/routers` +- `yarn add @cordis/routers` -```js +## Example Usage +```ts const { buildRestRouter } = require('@cordis/router'); const { RestManager } = require('@cordis/rest'); @@ -23,3 +25,9 @@ console.log(user); ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From 8257cd26687a42d209c664b21bb544886ccc64ed Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:42:03 -0500 Subject: [PATCH 14/26] pretty snowflake readme --- libs/snowflake/README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/libs/snowflake/README.md b/libs/snowflake/README.md index b53eb53..7012f63 100644 --- a/libs/snowflake/README.md +++ b/libs/snowflake/README.md @@ -1,12 +1,21 @@ -
+# `@cordis/snowflake` -# @cordis/snowflake - -
- -# Description +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/snowflake?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/snowflake) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) Simple package for destructuring (Twitter) Discord snowflakes. +## Installation +- `npm install @cordis/snowflake` +- `pnpm install @cordis/snowflake` +- `yarn add @cordis/snowflake` + ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From 7bde2b42178a5a71af3f106b89adda9edb055071 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:42:07 -0500 Subject: [PATCH 15/26] pretty store readme --- libs/store/README.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/libs/store/README.md b/libs/store/README.md index 4dbf17d..adf2152 100644 --- a/libs/store/README.md +++ b/libs/store/README.md @@ -1,14 +1,23 @@ -
+# `@cordis/store` -# @cordis/store - -
- -## Description +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![npm](https://img.shields.io/npm/v/@cordis/store?color=crimson&logo=npm)](https://www.npmjs.com/package/@cordis/store) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) Simple data structure for holding key-value pairs, taking from both Maps and Arrays. This package implements a simple in-memory store that actually extends the standard Map. +## Installation +- `npm install @cordis/store` +- `pnpm install @cordis/store` +- `yarn add @cordis/store` + ## Documentation You can find documentation for the whole project over at https://cordis.didinele.me + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From 7583e697abc7378b19f89c0623b4b10d8b1df9e9 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 19:47:13 -0500 Subject: [PATCH 16/26] add code_of_conduct and additional info to root readme --- .github/CODE_OF_CONDUCT.md | 76 ++++++++++++++++++++++++++++++++++++++ README.md | 6 ++- 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 .github/CODE_OF_CONDUCT.md diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..6bbfc6e --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at https://discord.gg/bRCvFy9. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq \ No newline at end of file diff --git a/README.md b/README.md index 0722410..23e9828 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,14 @@ Cordis is cut up in the form of multiple packages/libraries: - [`@cordis/store`](https://github.com/cordis-lib/cordis/tree/main/libs/store) - A simple map-like interface for holding key-value pairs - ships with an in-memory implementation # Contributing -We make use of [`PNPM`](https://pnpm.js.org/) to manage our monorepo setup. It is expected that you have an up-to-date version of it. +We make use of [`PNPM`](https://pnpm.js.org/) to manage our monorepo setup. It is expected that you have an up-to-date version of it. + +Please ensure you run `pnpm run lint` and `pnpm run build` in the root before pushing your commits. Please ensure that you follow our [Code Of Conduct](https://github.com/discordjs/discord.js/blob/master/.github/CODE_OF_CONDUCT.md). +If all checks out, [Submit a Pull Request](https://github.com/cordis-lib/cordis/compare) + # LICENSING © 2020, [Didinele](https://github.com/didinele). Some rights reserved. From 680ae40fca042a4cb73c4cf6b3d6e78422af485f Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sat, 6 Mar 2021 20:07:49 -0500 Subject: [PATCH 17/26] add issue and pull request templates --- .github/ISSUE_TEMPLATE/bug_report.md | 33 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 5 ++++ .github/ISSUE_TEMPLATE/feature_request.md | 22 +++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 15 +++++++++++ 4 files changed, 75 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..c2a60be --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- + +name: Bug report +about: Report incorrect or unexpected behavior of any cordis libraries/packages +title: '' +labels: 's: unverified, type: bug' +assignees: '' +--- + + +**Which cordis library/package are you facing this issue in?:** + +**Please describe the problem you are having in as much detail as possible:** + +**Include a reproducible code sample here, if possible:** + +```ts +// Place your code here +``` + +**Further details:** + +- Cordis Package Version: +- Node.js version: +- Operating system: +- Priority this issue should have – please be realistic and elaborate if possible: + + \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..7441e54 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Discord server + url: https://discord.gg/37ysd5dPYk + about: Feel free to join our Discord server for any questions. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..59e270a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- + +name: Feature request +about: Request a feature for any of the cordis libraries/packages +title: '' +labels: 'type: enhancement' +assignees: '' +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Eg. I'm always frustrated when [...] + +**Describe the ideal solution** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. + +Adapted from the [Discord.js Feature Request Template](https://github.com/discordjs/discord.js/blob/master/.github/ISSUE_TEMPLATE/feature_request.md) \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..cd5719b --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,15 @@ +**Please describe the changes this PR makes and why it should be merged:** + + + +**Status and versioning classification:** + + \ No newline at end of file From 74f55b0c902af6bcd05ad875c4f28bda634384a5 Mon Sep 17 00:00:00 2001 From: Zaid Date: Sun, 7 Mar 2021 12:14:22 -0500 Subject: [PATCH 18/26] Update .github/ISSUE_TEMPLATE/bug_report.md Co-authored-by: didinele --- .github/ISSUE_TEMPLATE/bug_report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c2a60be..2c945c8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ assignees: '' --- -**Which cordis library/package are you facing this issue in?:** +**Which cordis libraries/services are you facing this issue in?:** **Please describe the problem you are having in as much detail as possible:** @@ -30,4 +30,4 @@ Remove the comment and fill out the commit hash if this applies to you: (While it's not a requirement to test your issue on the master branch, it would make fixing the problem a lot easier for us, so please do so if possible.) - I have also tested the issue on latest master, commit hash: `xxx` ---> \ No newline at end of file +--> From 8489053351b23be31d5e6822148f0c08a8e63195 Mon Sep 17 00:00:00 2001 From: Zaid Date: Sun, 7 Mar 2021 12:15:24 -0500 Subject: [PATCH 19/26] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 23e9828..5426aca 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,6 @@ If all checks out, [Submit a Pull Request](https://github.com/cordis-lib/cordis/ # LICENSING -© 2020, [Didinele](https://github.com/didinele). Some rights reserved. +© 2020, [didinele](https://github.com/didinele). Some rights reserved. > Cordis is licensed under [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) From c7a582b9a422865eb76f9e2ec4759ea7601e647a Mon Sep 17 00:00:00 2001 From: Zaid Date: Sun, 7 Mar 2021 12:16:47 -0500 Subject: [PATCH 20/26] Update feature_request.md --- .github/ISSUE_TEMPLATE/feature_request.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 59e270a..a9a7b4a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,7 +1,7 @@ --- name: Feature request -about: Request a feature for any of the cordis libraries/packages +about: Request a feature for any of the cordis libraries/services title: '' labels: 'type: enhancement' assignees: '' @@ -19,4 +19,4 @@ A clear and concise description of any alternative solutions or features you've **Additional context** Add any other context or screenshots about the feature request here. -Adapted from the [Discord.js Feature Request Template](https://github.com/discordjs/discord.js/blob/master/.github/ISSUE_TEMPLATE/feature_request.md) \ No newline at end of file +Adapted from the [Discord.js Feature Request Template](https://github.com/discordjs/discord.js/blob/master/.github/ISSUE_TEMPLATE/feature_request.md) From 31e577cc6ae651a12e2ad9a578099d182d719397 Mon Sep 17 00:00:00 2001 From: Zaid Date: Sun, 7 Mar 2021 12:23:25 -0500 Subject: [PATCH 21/26] Update config.yml --- .github/ISSUE_TEMPLATE/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 7441e54..8f160b4 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,4 +2,5 @@ blank_issues_enabled: false contact_links: - name: Discord server url: https://discord.gg/37ysd5dPYk - about: Feel free to join our Discord server for any questions. \ No newline at end of file + about: Feel free to join our Discord server for any questions. + From e78c802df9c396b180b5d3d455ae4e44b2626620 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sun, 7 Mar 2021 12:46:12 -0500 Subject: [PATCH 22/26] resolve https://github.com/cordis-lib/cordis/pull/47#discussion_r589054822 --- .github/ISSUE_TEMPLATE/bug_report.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 2c945c8..2c0fda5 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -20,7 +20,19 @@ assignees: '' **Further details:** -- Cordis Package Version: + +- `@cordis/gateway` version: +- `@cordis/bitfield` version: +- `@cordis/brokers` version: +- `@cordis/common` version: +- `@cordis/error` version: +- `@cordis/queue` version: +- `@cordis/redis-store` version: +- `@cordis/store` version: +- `@cordis/rest` version: +- `@cordis/routers` version: +- `@cordis/gateway` version: +- `@cordis/snowflake` version: - Node.js version: - Operating system: - Priority this issue should have – please be realistic and elaborate if possible: From d8d5ce487ca289e4c47de6ed8532cac6977a8f1a Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sun, 7 Mar 2021 13:04:50 -0500 Subject: [PATCH 23/26] remove extra EOL --- .github/ISSUE_TEMPLATE/config.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 8f160b4..b0cd014 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -3,4 +3,3 @@ contact_links: - name: Discord server url: https://discord.gg/37ysd5dPYk about: Feel free to join our Discord server for any questions. - From a3988bacae82fb2b5e733b23f41c7cd15ca8e1f1 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sun, 7 Mar 2021 13:06:05 -0500 Subject: [PATCH 24/26] add all cordis packages/services to bug report --- .github/ISSUE_TEMPLATE/bug_report.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 2c0fda5..88304b3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -20,7 +20,7 @@ assignees: '' **Further details:** - + - Node.js version: - Operating system: - Priority this issue should have – please be realistic and elaborate if possible: From 7512ba42b7f156bc59c433b212c9f762e26592d4 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sun, 7 Mar 2021 13:13:27 -0500 Subject: [PATCH 25/26] @cordis/gateway-service readme --- services/gateway/README.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/services/gateway/README.md b/services/gateway/README.md index 274951d..88a1eaa 100644 --- a/services/gateway/README.md +++ b/services/gateway/README.md @@ -1,9 +1,15 @@ -
+# `@cordis/gateway-service` -# Cordis gateway service +[![GitHub](https://img.shields.io/badge/License-Apache%202.0-yellow.svg)](https://github.com/cordis-lib/cordis/blob/main/LICENSE) +[![TypeScript](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml/badge.svg)](https://github.com/cordis-lib/cordis/actions/workflows/quality.yml) -
- -## Description Docker service for the cordis gateway, respecting [the spec](https://github.com/cordis-lib/spec). + +You can find the image [here](https://hub.docker.com/r/cordislib/gateway) + +## Contributing +Please see the main [README.md](https://github.com/cordis-lib/cordis) for info on how to contribute to this package or the other `@cordis` packages. + +## LICENSE +Licensed under the [Apache 2.0](https://github.com/cordis-lib/cordis/blob/main/LICENSE) license. \ No newline at end of file From 33eb57d2e9ddfffe8bacc31acf8dd42bebe145b5 Mon Sep 17 00:00:00 2001 From: "Zaid \"Nico" Date: Sun, 7 Mar 2021 13:14:23 -0500 Subject: [PATCH 26/26] mention unit tests in root readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5426aca..7b9eb0b 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Cordis is cut up in the form of multiple packages/libraries: # Contributing We make use of [`PNPM`](https://pnpm.js.org/) to manage our monorepo setup. It is expected that you have an up-to-date version of it. -Please ensure you run `pnpm run lint` and `pnpm run build` in the root before pushing your commits. +Please ensure you run `pnpm run lint`, `pnpm run build`, and `pnpm run test` in the root before pushing your commits. Please ensure that you follow our [Code Of Conduct](https://github.com/discordjs/discord.js/blob/master/.github/CODE_OF_CONDUCT.md).