A versatile collection of JavaScript and TypeScript utilities, experimental scripts, and API integration examples.
- π Overview
- β¨ Feature Highlights
- ποΈ Architecture & Design
βΆοΈ Getting Started- π Usage & Workflows
βοΈ Limitations, Known Issues & Future Roadmap- π€ Contributing & Development Guidelines
- π License, Credits & Contact
- π Appendix
This repository, js-testing, serves as a dynamic sandbox for experimenting with various JavaScript and TypeScript concepts, integrating with external APIs, and developing practical utilities and CLI tools. It's a living collection of code snippets, prototypes, and small projects, constantly evolving with new ideas and explorations.
The JS/TS Dev Playground is not a single, cohesive application, but rather a curated collection of independent scripts and modules. Its primary purpose is to:
- Accelerate Prototyping: Quickly test ideas, algorithms, and API integrations.
- Showcase Code Snippets: Provide readily available, runnable examples for common (and uncommon) programming tasks.
- Explore New Technologies: Experiment with emerging JavaScript/TypeScript libraries, frameworks, and language features.
- Facilitate Learning: Serve as a personal knowledge base for design patterns, data structures, and best practices.
- Develop Small Tools: Create lightweight CLI tools and utilities for everyday development needs.
In the fast-paced world of web development, having a personal toolkit for rapid experimentation and problem-solving is invaluable. This repository addresses the need for:
- Quick Solutions: Instead of starting from scratch, find a relevant script, adapt it, and solve the problem.
- Learning by Doing: Understand concepts by seeing them implemented in practical (though often simplified) contexts.
- Reduced Friction: Lower the barrier to trying out new APIs or libraries.
- Code Reusability: Prevent reinventing the wheel for common tasks across different projects.
- JavaScript & TypeScript Developers: Looking for examples, utilities, or a quick way to test concepts.
- Learners & Students: Exploring modern JS/TS features, design patterns, and API interactions.
- Backend & Frontend Engineers: Needing snippets for data manipulation, API calls, or small automation tasks.
- Anyone curious about experimental programming paradigms within the JS/TS ecosystem.
This repository is a diverse collection, offering a wide array of functionalities categorized for easier navigation:
Get up and running quickly with various external services.
- β
News & Article APIs: Scripts for fetching data from
gnews-api.ts,news-api.ts,article-api.ts. - β
Media & Entertainment: Interact with
spotify-genre-search.ts,twitch-alert.ts. - β
AI & ML: Explore
gemini-models.ts,image-gemini-pipeline.ts,project-llm.ts,google-cloud-vision.ts. - β
Web Scraping & Data Extraction:
fire-crawl-cli.ts,fire-crawl-parser.ts,linkedin-profile-parser.ts,webshot.ts,iframe-remover.ts. - π‘ E-commerce:
food-api.ts,shopping-api.ts,product-decoder-pipeline.ts. β οΈ Authentication: Most API scripts assume API keys are provided via environment variables, not hardcoded.
Everyday helpers for common development tasks.
- β
Text & Markdown Processing:
markdown-to-text.ts,markdown-to-google-docs.ts,unified-formatter.ts,linkedin-title-cleaner.ts. - β
File & Directory Management:
files.ts,format-gitignore.ts. - β
Data Structures & Algorithms:
distance-formulas.ts,lazy-map.ts,map.ts,sort.ts,vector.ts. - β
Type & Error Handling:
error-predicate.ts. - π‘ CSS/SCSS Transformation: Convert CSS syntax to SCSS with
css-to-scss.ts. - π Logging & Debugging: Simple
logger.tsimplementation.
Dive into advanced concepts and new language features.
- β
Design Patterns: Examples of various design patterns in TypeScript (
ts-design-patterns.ts). - β
Effect-TS: Experimentation with the
Effectlibrary (effect-fetch.ts). - β
Bun Runtime Specifics: Explore
bun-shell-case.tsfor Bun's shell capabilities. - β
Web Frameworks: Starter/Advanced examples for
ElysiaJS(elysia-starter-advanced.ts). - β
Database Interactions: Examples for
mongo.ts,mongoose.ts,xls-to-firestore-advanced.ts. - π Performance Testing:
performance.tsfor benchmarking code. - π‘ Advanced Pipelines:
image-gemini-pipeline.ts,product-decoder-pipeline.tsdemonstrate complex data flows.
Small but mighty tools for developer workflows.
- β
README Generator:
greadme.ts(perhaps this very README was inspired by it!). - β
Topic Generator:
gtopic.tsfor generating discussion topics. - β
File Documentation:
file-doc-gen.tsto automate basic documentation. - β
Terminal Git Helpers:
terminal-git.tsfor custom Git commands. β οΈ Platform Specific: Some CLI tools might rely on specific shell environments or installed tools.
This repository is designed as a modular toolkit rather than a monolithic application. Each .ts or .js file typically represents an independent script, module, or a small self-contained project. This design promotes reusability, isolation, and ease of experimentation.
The directory structure is flat, with each file serving a distinct purpose. While there aren't formal "modules" in the sense of a large application, related functionalities can be grouped logically by their filename prefixes or inferred categories.
- API Clients: Files like
gnews-api.ts,spotify-genre-search.ts,gemini-models.tsencapsulate logic for interacting with specific external APIs. - Utilities: Scripts such as
markdown-to-text.ts,distance-formulas.ts,format-gitignore.tsprovide general-purpose helper functions. - CLI Tools: Executable scripts like
greadme.ts,file-doc-gen.tsare designed to be run directly from the command line. - Experimental/Prototypes: Files prefixed with
test-, or containing new library explorations (e.g.,effect-fetch.ts,elysia-starter-advanced.ts) are for learning and proof-of-concept. - Design Patterns:
ts-design-patterns.tsdemonstrates architectural approaches.
The following Mermaid diagram illustrates the conceptual architecture, showing how various categories of scripts interact with external services and system components.
graph TD
subgraph Dev Playground
A[CLI Tools] --> B(Utility Scripts)
B --> C(Data Transformation)
C --> D(API Clients)
D --> E(Experimental Code)
E --> B
end
A -- "Executes" --> Terminal(Terminal / Shell)
D -- "Sends Requests To" --> ExternalAPIs(External APIs & Services)
C -- "Processes" --> LocalFiles(Local Files & Data)
B -- "Used By" --> OtherScripts(Other Scripts & Modules)
E -- "Prototype New Features" --> Runtime(JS/TS Runtime)
click Terminal "https://en.wikipedia.org/wiki/Command-line_interface" "CLI Wikipedia"
click ExternalAPIs "https://www.programmableweb.com/category/all/apis" "Explore APIs"
click LocalFiles "https://en.wikipedia.org/wiki/File_system" "File System Concepts"
click Runtime "https://nodejs.org/" "Node.js Website"
- CLI Tools: User-facing scripts that provide command-line interfaces for specific tasks.
- Utility Scripts: Reusable functions and logic that can be imported or executed independently.
- Data Transformation: Scripts focused on manipulating and converting data formats.
- API Clients: Modules designed to communicate with third-party web services.
- Experimental Code: A sandbox for testing new libraries, language features, or complex pipelines without affecting other parts.
- External APIs & Services: Represents the various web services (e.g., Google Gemini, GNews, Spotify) that the API clients interact with.
- Local Files & Data: Where scripts read from or write to, including configuration files, input data, or generated output.
- JS/TS Runtime: The execution environment (Node.js, Bun) where all scripts operate.
This repository primarily leverages the following technologies:
- Languages:
- TypeScript: The majority of the codebase is written in TypeScript, providing type safety, better tooling, and improved maintainability.
- JavaScript: Some older or simpler scripts might still be in plain JavaScript (
.js).
- Runtime Environments:
- Node.js: The most common runtime for executing these scripts.
- Bun: Increasingly used for its speed and native functionalities, especially for shell scripting (
bun-shell-case.ts).
- Package Managers:
- npm / yarn / bun: For managing project dependencies.
- Key Libraries/Frameworks (examples, not exhaustive):
- Effect-TS: For functional programming and typed error handling (
effect-fetch.ts). - ElysiaJS: A fast, Bun-first HTTP framework (
elysia-starter-advanced.ts). - Mongoose / MongoDB: For database interactions (
mongoose.ts,mongo.ts). - Axios / Node-Fetch: Common HTTP clients for API interactions.
- Cheerio: For server-side HTML parsing (often used in scraping scripts).
- Zod: For schema validation.
- Effect-TS: For functional programming and typed error handling (
To get started with the JS/TS Dev Playground, follow these steps to set up your environment and run the scripts.
Before you begin, ensure you have the following installed on your system:
- Node.js: Version 18.x or higher.
- npm (Node Package Manager): Usually comes bundled with Node.js.
- Verify with:
npm -v
- Verify with:
- Bun (Optional, but recommended for some scripts):
- Install Bun
- Verify with:
bun -v
- Git: For cloning the repository.
-
Clone the Repository:
git clone https://github.com/WomB0ComB0/js-testing.git cd js-testing -
Install Dependencies: Using npm:
npm install
Or using Bun (recommended for performance and certain scripts):
bun install
Many scripts, especially those interacting with external APIs, require API keys or other sensitive information. This information should never be hardcoded directly into the scripts.
- Environment Variables: The standard approach is to use environment variables. Create a
.envfile in the root of the repository to store these variables.You can then load these variables into your scripts using a library like# Example .env file GNEWS_API_KEY=your_gnews_api_key_here SPOTIFY_CLIENT_ID=your_spotify_client_id SPOTIFY_CLIENT_SECRET=your_spotify_client_secret # ... any other API keys or configuration values
dotenv(often implicitly handled bybun runor configured intsconfig.jsonfor Node.js). tsconfig.json: Thetsconfig.jsonfile configures the TypeScript compiler. It's already set up, but you might adjusttargetormoduleResolutionif you have specific needs.
π‘ **Tip: Using dotenv**
For Node.js scripts, you might need to explicitly import and configure dotenv at the top of your main script file if it's not handled by your runner:
// my-api-script.ts
import dotenv from 'dotenv';
dotenv.config();
// Now you can access process.env.YOUR_VAR
const apiKey = process.env.GNEWS_API_KEY;With bun run, .env files are typically loaded automatically.
Since this repository contains many individual scripts, you'll typically run them one by one.
- Using
ts-node(for Node.js): For TypeScript files, you can usets-nodeto execute them directly without a prior compilation step.# Install ts-node globally if you haven't already npm install -g ts-node # Run a specific TypeScript file ts-node your-script-name.ts
- Using
bun run(for Bun): Bun can execute both TypeScript and JavaScript files directly.bun run your-script-name.ts
- Compiling and Running (for Node.js):
You can also compile all TypeScript files to JavaScript and then run the compiled JavaScript.
npm run build # Or `tsc` node dist/your-script-name.js # Assuming output to `dist` folder
π **Example: Running `gnews-api.ts`**
Let's say gnews-api.ts takes a query as an argument.
First, ensure your .env file has GNEWS_API_KEY=your_key.
Then, you can run it:
# Using bun
bun run gnews-api.ts "AI innovations"
# Or using ts-node
ts-node gnews-api.ts "Quantum computing breakthroughs"The exact arguments or interactive prompts depend on the specific script's implementation.
This section provides examples of how to interact with different types of scripts in the repository. Remember that each script is largely independent, so refer to its internal comments or structure for specific usage details.
Many scripts are designed as simple utilities that can be run directly or imported into other Node.js/Bun projects.
This script might take an input .gitignore file, sort its entries, and remove duplicates.
// format-gitignore.ts (conceptual)
import { readFileSync, writeFileSync } from 'fs';
function formatGitignore(filePath: string): void {
const content = readFileSync(filePath, 'utf8');
const lines = content.split('\n')
.map(line => line.trim())
.filter(line => line.length > 0 && !line.startsWith('#'))
.sort();
const uniqueLines = [...new Set(lines)];
const formattedContent = uniqueLines.join('\n') + '\n';
writeFileSync(filePath, formattedContent, 'utf8');
console.log(`Formatted ${filePath}`);
}
if (process.argv.length > 2) {
formatGitignore(process.argv[2]);
} else {
console.log("Usage: bun run format-gitignore.ts <path_to_gitignore>");
}Workflow:
- Make sure you have a
.gitignorefile you want to format (e.g.,temp.gitignore). - Run the script with the file path:
bun run format-gitignore.ts temp.gitignore
- The
temp.gitignorefile will be updated in place with sorted and unique entries.
Scripts that interact with external APIs often require environment variables for API keys and may accept command-line arguments for queries.
This script might list available genres or find genres related to a keyword.
// spotify-genre-search.ts (conceptual)
import 'dotenv/config'; // Loads .env variables
import axios from 'axios';
const CLIENT_ID = process.env.SPOTIFY_CLIENT_ID;
const CLIENT_SECRET = process.env.SPOTIFY_CLIENT_SECRET;
async function getAccessToken(): Promise<string> {
// ... OAuth flow to get token
return "YOUR_ACCESS_TOKEN"; // Placeholder
}
async function searchSpotifyGenres(query?: string): Promise<void> {
const token = await getAccessToken();
const headers = { 'Authorization': `Bearer ${token}` };
let url = 'https://api.spotify.com/v1/recommendations/available-genre-seeds';
const response = await axios.get(url, { headers });
const genres: string[] = response.data.genres;
if (query) {
const filtered = genres.filter(g => g.includes(query.toLowerCase()));
console.log(`Genres matching "${query}":\n${filtered.join(', ')}`);
} else {
console.log(`All available genres:\n${genres.join(', ')}`);
}
}
if (process.argv.length > 2) {
searchSpotifyGenres(process.argv[2]);
} else {
searchSpotifyGenres(); // List all genres
}Workflow:
- Create a
.envfile in the root with your Spotify API credentials:SPOTIFY_CLIENT_ID=your_client_id SPOTIFY_CLIENT_SECRET=your_client_secret
- Run the script to list all genres:
bun run spotify-genre-search.ts
- Run the script to search for a specific genre:
bun run spotify-genre-search.ts "rock"
Some scripts are designed to provide command-line functionality, often with internal argument parsing.
This tool might take a project name or path and generate a basic README structure.
// greadme.ts (conceptual simplified CLI)
import { writeFileSync } from 'fs';
function generateReadme(projectName: string, author: string): void {
const content = `# π ${projectName}\n\n_A short description of ${projectName}._\n\n## π Table of Contents\n...\n`;
writeFileSync(`${projectName}_README.md`, content, 'utf8');
console.log(`Generated README for ${projectName} by ${author}`);
}
const args = process.argv.slice(2);
const projectNameArg = args.find(arg => arg.startsWith('--name='))?.split('=')[1];
const authorArg = args.find(arg => arg.startsWith('--author='))?.split('=')[1];
if (projectNameArg && authorArg) {
generateReadme(projectNameArg, authorArg);
} else {
console.log("Usage: bun run greadme.ts --name=<project_name> --author=<your_name>");
}Workflow:
- Run the CLI tool with required arguments:
bun run greadme.ts --name="My Awesome Project" --author="Jane Doe"
- A new file,
My Awesome Project_README.md, will be created in your current directory.
The ts-design-patterns.ts file provides practical examples of various software design patterns implemented in TypeScript.
Workflow:
- Open
ts-design-patterns.tsin your editor. - Review the different pattern implementations (e.g., Singleton, Factory, Observer).
- To see them in action, uncomment specific blocks or add a
mainfunction to test them, then execute the file:This allows you to learn by examining and executing working code examples.bun run ts-design-patterns.ts
This repository is a dynamic collection, and as such, it comes with certain characteristics and plans for its evolution.
- Not a Cohesive Application: This is a collection of independent scripts, not a single, unified application. There's no overarching architecture connecting all files beyond being a general JavaScript/TypeScript codebase.
- Varying Quality & Completeness: Some scripts are fully functional, while others are quick prototypes, experimental ideas, or incomplete snippets.
- Documentation per Script: While this README covers the repository generally, detailed documentation for each individual script is not always present and might require reading the code.
- Dependency Management: Dependencies for some scripts might not be explicitly listed in
package.jsonif they were meant as one-off experiments, though efforts are made to keeppackage.jsonupdated. - Production Readiness: Most scripts are intended for development, learning, or quick tasks, not for production-grade, highly-available systems without further hardening and testing.
- Outdated APIs: External APIs might change, causing some API integration scripts to break or require updates.
- Incomplete Error Handling: Some experimental scripts might have minimal error handling, focusing on the core logic.
- Bun vs. Node.js Differences: While many scripts are cross-compatible, some might leverage Bun-specific features (e.g.,
bun-shell-case.ts) or Node.js-specific modules, which could cause issues if run in the wrong environment without proper polyfills or shims. - Security Concerns: Scripts that handle sensitive data (e.g., API keys) rely on proper environment variable setup. Misconfiguration could expose credentials.
The repository is continuously evolving, with the following planned enhancements:
- Categorization & Indexing: Improve organization by creating subdirectories or a comprehensive index that links to and briefly describes each script.
- Enhanced Individual Script Documentation: Add more detailed comments, JSDoc, or even dedicated
README.mdfiles for complex scripts. - Standardized CLI Interface: For common CLI tools, adopt a more consistent argument parsing library (e.g.,
commander.js,yargs) for better UX. - Automated Testing: Implement unit/integration tests for critical utility scripts.
- CI/CD Integration: Set up GitHub Actions for automatic linting, type-checking, and potentially basic script execution tests.
- Dockerization: Provide Dockerfiles for specific environments (e.g., an ElysiaJS server) to ensure consistent execution.
- Interactive Demos: For select scripts, consider adding executable examples or live demos if applicable.
- Refinement of Experimental Code: Promote stable experimental scripts to utility status, or deprecate/remove outdated ones.
Have an idea for a new utility, API integration, or experimental script? Please open a GitHub Issue with your suggestion! We welcome contributions and ideas that expand the utility and learning potential of this playground.
Contributions are highly welcome! Whether it's adding a new utility, improving an existing script, fixing a bug, or enhancing documentation, your input makes this playground more valuable for everyone.
- Fork the Repository: Start by forking the
js-testingrepository to your GitHub account. - Clone Your Fork:
git clone https://github.com/YOUR_USERNAME/js-testing.git cd js-testing - Create a New Branch:
git checkout -b feature/your-new-feature-name # or git checkout -b bugfix/issue-description - Make Your Changes: Implement your feature, bug fix, or documentation improvement.
- New scripts: Place them in the root directory for now, or suggest a new sub-directory if it starts a new category.
- Existing scripts: Ensure your changes are focused and don't introduce regressions.
- Test Your Changes: If applicable, add tests or manually verify your changes work as expected.
- Commit Your Changes:
git add . git commit -m "feat: Add new awesome utility for X"
- Push to Your Fork:
git push origin feature/your-new-feature-name
- Open a Pull Request: Go to the original
js-testingrepository on GitHub and open a new Pull Request from your forked branch to themainbranch. Provide a clear description of your changes.
- Branch Naming: Use descriptive branch names like
feat/add-new-api-client,bugfix/fix-markdown-parser,docs/improve-readme. - Commit Messages: Write clear, concise commit messages following the Conventional Commits specification (e.g.,
feat: Add support for Google Vision API,fix: Correct typo in cli argument). - Pull Request Description:
- Clearly describe the problem your PR solves or the feature it adds.
- Explain your approach and any design decisions.
- Reference any relevant issues (e.g.,
Closes #123). - Include steps to test your changes.
- TypeScript/JavaScript Best Practices: Follow modern TypeScript/JavaScript best practices.
- ESLint & Prettier: This project uses ESLint for code quality and Prettier for consistent formatting.
- Run linting:
npm run lintorbun lint - Fix formatting:
npm run formatorbun format - Please ensure your code passes linting and formatting checks before submitting a PR.
- Run linting:
- Type Safety: Strive for strong type safety. Avoid
anywhere possible and ensure your code compiles without TypeScript errors. - Testing: While not all experimental scripts have tests, contributions to utility functions or core logic should ideally include unit tests using a framework like
VitestorJest.
- IDE: Visual Studio Code is highly recommended, with the official TypeScript, ESLint, and Prettier extensions.
- Debugger: Utilize Node.js/Bun's built-in debugger or your IDE's debugging features to step through complex scripts.
This project is licensed under the MIT License. You are free to use, modify, and distribute the code for personal or commercial purposes, provided you include the original copyright and license notice.
See the LICENSE file for full details.
A big thank you to the creators and maintainers of the various open-source libraries and frameworks that make modern JavaScript/TypeScript development a joy. This project extensively uses:
- TypeScript: For a robust and scalable codebase.
- Node.js / Bun: For the powerful JavaScript runtime environment.
- npm / Bun package manager: For efficient dependency management.
- Many other fantastic libraries like
axios,dotenv,effect,elysia,mongoose,cheerio,zod, etc., which are listed inpackage.json.
We also acknowledge the inspiration drawn from countless tutorials, articles, and other open-source projects across the web.
This repository is primarily maintained by:
WomB0ComB0
Feel free to reach out via GitHub issues for questions, suggestions, or contributions!
This section records significant updates and changes to the repository.
View Recent Updates
v1.0.0 - Initial Public Release (Conceptual)
- Repository created with a diverse set of JS/TS utilities, API integrations, and experimental scripts.
- Initial setup with
package.json,tsconfig.json, and basic dependencies. - README generated with comprehensive documentation.
Future Updates (Planned)
- Improved script categorization.
- Added
Vitestfor testing utilities. - New API integrations (e.g., Weather, Payment Gateways).
- Refactored core utilities for better reusability.
- Introduced
Dockerconfigurations for specific examples.
Q: Is this a single application or a collection?
A: This repository is primarily a *collection* of independent JavaScript and TypeScript scripts, utilities, and experimental code snippets. It's designed as a personal development playground and a toolkit, not a single cohesive application.Q: How do I run a specific script?
A: You can run individual `.ts` or `.js` files using `bun run ` or `ts-node ` (if you have `ts-node` installed globally for Node.js). Refer to the [Running Scripts](#running-scripts) section for more details.Q: Why are there so many different kinds of scripts?
A: The repository serves as a sandbox to explore various programming concepts, integrate with different APIs, and build small, self-contained utilities. This diversity reflects the wide range of problems and interests encountered in modern JS/TS development.Q: Are all scripts production-ready?
A: No, not all scripts are production-ready. Many are experimental prototypes or quick solutions. While some utilities might be robust, others may lack comprehensive error handling, extensive testing, or full feature sets. Always review the code and adapt it to your specific production needs.Q: I encountered an error. What should I do?
A: First, check the [Troubleshooting Guide](#troubleshooting-guide) below. Ensure all prerequisites are met, dependencies are installed (`npm install` or `bun install`), and environment variables are correctly configured (if applicable). If the issue persists, feel free to open a [GitHub Issue](https://github.com/WomB0ComB0/js-testing/issues).Command not found: bunorCommand not found: ts-node:- Solution: Ensure Node.js and Bun (if used) are correctly installed and added to your system's PATH. For
ts-node, install it globally:npm install -g ts-node.
- Solution: Ensure Node.js and Bun (if used) are correctly installed and added to your system's PATH. For
Cannot find module 'axios'or similar import errors:- Solution: You likely haven't installed the project dependencies. Navigate to the repository root and run
npm installorbun install.
- Solution: You likely haven't installed the project dependencies. Navigate to the repository root and run
TypeError: Cannot read properties of undefined (reading 'YOUR_API_KEY'):- Solution: This typically means an environment variable is missing. Check your
.envfile (create one if it doesn't exist) and ensure all required API keys are present and correctly named. Also, confirmdotenvis being loaded in your script if using Node.js withoutbun run.
- Solution: This typically means an environment variable is missing. Check your
- TypeScript compilation errors (e.g.,
TS2307: Cannot find module '...'):- Solution:
- Ensure
npm installorbun installhas been run to get all@types/*packages. - Check your
tsconfig.jsonfor correctmoduleResolutionandpathssettings. - Sometimes, restarting your IDE helps refresh TypeScript language services.
- Ensure
- Solution:
- Script hangs or doesn't produce output:
- Solution:
- Check for infinite loops or blocking I/O operations.
- If it's an API script, verify your internet connection and the API endpoint's status.
- Add
console.logstatements to debug the execution flow.
- Solution:
- Permission errors when writing files:
- Solution: Ensure the script has the necessary read/write permissions for the target directories. Avoid running scripts with
sudounless absolutely necessary.
- Solution: Ensure the script has the necessary read/write permissions for the target directories. Avoid running scripts with
This repository includes integrations with various third-party APIs. For detailed documentation on how to obtain API keys, understand rate limits, or explore full capabilities, please refer to the official documentation for each service:
- Google Gemini API: Google Cloud Gemini Docs
- GNews API: GNews API Documentation
- Spotify Web API: Spotify for Developers
- Firecrawl API: Firecrawl Docs
- Google Cloud Vision API: Google Cloud Vision AI Docs
- The News API: The News API Documentation
- ElysiaJS: ElysiaJS Documentation
- Effect-TS: Effect-TS Documentation
- MongoDB / Mongoose: MongoDB Docs | Mongoose Docs