Skip to content

Commit 74bb7e2

Browse files
committed
feat: base implementation
1 parent 795c079 commit 74bb7e2

19 files changed

+857
-0
lines changed

packages/@wroud/api-logger/README.md

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
# @wroud/api-logger
2+
3+
[![ESM-only package][package]][esm-info-url]
4+
[![NPM version][npm]][npm-url]
5+
6+
<!-- [![Install size][size]][size-url] -->
7+
8+
[package]: https://img.shields.io/badge/package-ESM--only-ffe536.svg
9+
[esm-info-url]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
10+
[npm]: https://img.shields.io/npm/v/@wroud/api-logger.svg
11+
[npm-url]: https://npmjs.com/package/@wroud/api-logger
12+
[size]: https://packagephobia.com/badge?p=@wroud/api-logger
13+
[size-url]: https://packagephobia.com/result?p=@wroud/api-logger
14+
15+
@wroud/api-logger is a lightweight and flexible logging interface library for JavaScript and TypeScript applications. It provides a standardized way to implement logging across your projects, ensuring consistency and ease of maintenance. Designed with modern JavaScript features in mind, it seamlessly integrates with various logging implementations.
16+
17+
## Features
18+
19+
- **TypeScript Support**: Fully typed interfaces for enhanced developer experience.
20+
- **ESM-only Package**: Utilizes ES modules for optimal performance and compatibility.
21+
- **Flexible Logging Levels**: Supports `info`, `warn`, and `error` levels.
22+
- **Ease of Integration**: Easily implement the `ILogger` interface with your preferred logging libraries.
23+
24+
## Installation
25+
26+
Install via npm:
27+
28+
```sh
29+
npm install @wroud/api-logger
30+
```
31+
32+
Install via yarn:
33+
34+
```sh
35+
yarn add @wroud/api-logger
36+
```
37+
38+
## Documentation
39+
40+
For detailed usage and API reference, visit the [documentation site](https://wroud.dev/).
41+
42+
## Example
43+
44+
```ts
45+
// Import the ILogger interface
46+
import { ILogger } from "@wroud/api-logger";
47+
48+
// Implement the ILogger interface
49+
class ConsoleLogger implements ILogger {
50+
info(...messages: any[]): void {
51+
console.info(...messages);
52+
}
53+
54+
warn(...messages: any[]): void {
55+
console.warn(...messages);
56+
}
57+
58+
error(...messages: any[]): void {
59+
console.error(...messages);
60+
}
61+
}
62+
63+
// Usage example
64+
const logger: ILogger = new ConsoleLogger();
65+
66+
logger.info("This is an info message");
67+
logger.warn("This is a warning message");
68+
logger.error("This is an error message");
69+
```
70+
71+
### Integrating with @wroud/di
72+
73+
If you're using `@wroud/di` for dependency injection, you can easily inject your logger implementation:
74+
75+
```ts
76+
import { ServiceContainerBuilder, injectable } from "@wroud/di";
77+
import { ILogger } from "@wroud/api-logger";
78+
79+
@injectable()
80+
class ConsoleLogger implements ILogger {
81+
info(...messages: any[]): void {
82+
console.info(...messages);
83+
}
84+
85+
warn(...messages: any[]): void {
86+
console.warn(...messages);
87+
}
88+
89+
error(...messages: any[]): void {
90+
console.error(...messages);
91+
}
92+
}
93+
94+
const builder = new ServiceContainerBuilder();
95+
builder.addSingleton(ConsoleLogger);
96+
const provider = builder.build();
97+
98+
const logger = provider.getService(ConsoleLogger);
99+
logger.info("Hello world with DI!");
100+
```
101+
102+
## Changelog
103+
104+
All notable changes to this project will be documented in the [CHANGELOG](./CHANGELOG.md) file.
105+
106+
## License
107+
108+
This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{
2+
"name": "@wroud/api-logger",
3+
"type": "module",
4+
"version": "0.0.0",
5+
"description": "@wroud/api-logger is a lightweight, TypeScript-compatible logging interface for JavaScript applications. It provides standardized logging methods (`info`, `warn`, `error`) to ensure consistent and maintainable logging across your projects. Designed as an ESM-only package, it seamlessly integrates with modern JavaScript workflows and various logging implementations, making it an ideal choice for developers seeking flexibility and type safety in their logging solutions.",
6+
"sideEffects": [],
7+
"exports": {
8+
".": "./lib/index.js",
9+
"./*": "./lib/*.js"
10+
},
11+
"scripts": {
12+
"ci:release": "yarn ci release --prefix api-logger-v",
13+
"ci:git-tag": "yarn ci git-tag --prefix api-logger-v",
14+
"ci:release-github": "yarn ci release-github --prefix api-logger-v",
15+
"build": "tsc -b",
16+
"clear": "rimraf lib"
17+
},
18+
"files": [
19+
"package.json",
20+
"LICENSE",
21+
"README.md",
22+
"CHANGELOG.md",
23+
"lib",
24+
"!lib/**/*.d.ts.map",
25+
"!lib/**/*.test.js",
26+
"!lib/**/*.test.d.ts",
27+
"!lib/**/*.test.d.ts.map",
28+
"!lib/**/*.test.js.map",
29+
"!lib/tests",
30+
"!.tsbuildinfo"
31+
],
32+
"packageManager": "[email protected]",
33+
"devDependencies": {
34+
"@wroud/ci": "workspace:^",
35+
"@wroud/tsconfig": "workspace:^",
36+
"rimraf": "^6",
37+
"typescript": "^5"
38+
},
39+
"keywords": [
40+
"logger",
41+
"logging",
42+
"typescript",
43+
"javascript",
44+
"ESM",
45+
"interface",
46+
"lightweight",
47+
"logging-interface",
48+
"API-logger"
49+
]
50+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export interface ILogger {
2+
/**
3+
* Logs a message with the "info" level.
4+
* @param {any[]} messages - The messages to log.
5+
*/
6+
info(...messages: any[]): void;
7+
8+
/**
9+
* Logs a message with the "warn" level.
10+
* @param {any[]} messages - The messages to log.
11+
*/
12+
warn(...messages: any[]): void;
13+
14+
/**
15+
* Logs a message with the "error" level.
16+
* @param {any[]} messages - The messages to log.
17+
*/
18+
error(...messages: any[]): void;
19+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./ILogger.js";
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"extends": "@wroud/tsconfig/tsconfig.json",
3+
"compilerOptions": {
4+
"tsBuildInfoFile": "./lib/.tsbuildinfo",
5+
"rootDir": "src",
6+
"rootDirs": [
7+
"src"
8+
],
9+
"outDir": "lib",
10+
"incremental": true,
11+
"composite": true
12+
},
13+
"include": [
14+
"src"
15+
]
16+
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
# @wroud/flow-middleware
2+
3+
[![ESM-only package][package]][esm-info-url]
4+
[![NPM version][npm]][npm-url]
5+
6+
<!-- [![Install size][size]][size-url] -->
7+
8+
[package]: https://img.shields.io/badge/package-ESM--only-ffe536.svg
9+
[esm-info-url]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
10+
[npm]: https://img.shields.io/npm/v/@wroud/flow-middleware.svg
11+
[npm-url]: https://npmjs.com/package/@wroud/flow-middleware
12+
[size]: https://packagephobia.com/badge?p=@wroud/flow-middleware
13+
[size-url]: https://packagephobia.com/result?p=@wroud/flow-middleware
14+
15+
@wroud/flow-middleware is a lightweight middleware management library for JavaScript and TypeScript. It facilitates the creation and execution of middleware chains with support for re-runs, error handling, and disposability. Inspired by modern middleware patterns, it leverages TypeScript for type safety and ESM for optimal performance.
16+
17+
## Features
18+
19+
- **Modern JavaScript**: Utilizes ES modules and ESNext syntax for advanced performance optimizations.
20+
- **TypeScript**: Written in TypeScript for type safety and enhanced developer experience.
21+
- **Middleware Chains**: Easily create and manage middleware chains with support for asynchronous operations.
22+
- **Re-run Capabilities**: Middlewares can trigger re-execution of the middleware chain based on external events.
23+
- **Error Handling**: Dedicated error-handling middlewares to manage and respond to errors gracefully.
24+
- **Subscription Management**: Efficiently handle subscriptions with automatic cleanup to prevent memory leaks.
25+
- **Disposability**: Cleanly dispose of middleware requests and all associated subscriptions.
26+
27+
## Installation
28+
29+
Install via npm:
30+
31+
```sh
32+
npm install @wroud/flow-middleware
33+
```
34+
35+
Install via yarn:
36+
37+
```sh
38+
yarn add @wroud/flow-middleware
39+
```
40+
41+
## Documentation
42+
43+
For detailed usage and API reference, visit the [documentation site](https://wroud.dev).
44+
45+
## Example
46+
47+
```ts
48+
import { FlowMiddleware } from "@wroud/flow-middleware";
49+
import type {
50+
IMiddleware,
51+
IErrorMiddleware,
52+
} from "@wroud/flow-middleware/interfaces";
53+
54+
/**
55+
* Simple Middleware Example
56+
*/
57+
const simpleMiddleware: IMiddleware<{ message: string }> = async (
58+
req,
59+
next,
60+
triggerReRun,
61+
subscribe,
62+
) => {
63+
console.log("Middleware: Processing message:", req.message);
64+
await next();
65+
};
66+
67+
/**
68+
* Simple Error Middleware Example
69+
*/
70+
const simpleErrorMiddleware: IErrorMiddleware<{ message: string }> = async (
71+
error,
72+
req,
73+
next,
74+
triggerReRun,
75+
subscribe,
76+
) => {
77+
console.error("ErrorMiddleware: An error occurred:", error.message);
78+
// Handle error, modify request data, or trigger re-run
79+
req.message = "Error handled";
80+
triggerReRun();
81+
};
82+
83+
const middleware = new FlowMiddleware();
84+
85+
// Register middlewares
86+
middleware.register(simpleMiddleware);
87+
middleware.registerErrorMiddleware(simpleErrorMiddleware);
88+
89+
// Create a new request with initial data
90+
const request = middleware.createRequest({ message: "Hello, FlowMiddleware!" });
91+
92+
// Execute the middleware chain
93+
(async () => {
94+
try {
95+
await request.execute();
96+
} catch (error) {
97+
console.error("Main: Error executing middleware chain:", error);
98+
}
99+
})();
100+
```
101+
102+
## Changelog
103+
104+
All notable changes to this project will be documented in the [CHANGELOG](./CHANGELOG.md) file.
105+
106+
## License
107+
108+
This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"name": "@wroud/flow-middleware",
3+
"type": "module",
4+
"version": "0.0.0",
5+
"description": "A lightweight middleware management library for JavaScript and TypeScript, facilitating middleware chains with re-runs, error handling, and disposability.",
6+
"sideEffects": [],
7+
"exports": {
8+
".": "./lib/index.js",
9+
"./*": "./lib/*.js"
10+
},
11+
"scripts": {
12+
"ci:release": "yarn ci release --prefix api-logger-v",
13+
"ci:git-tag": "yarn ci git-tag --prefix api-logger-v",
14+
"ci:release-github": "yarn ci release-github --prefix api-logger-v",
15+
"build": "tsc -b",
16+
"clear": "rimraf lib"
17+
},
18+
"files": [
19+
"package.json",
20+
"LICENSE",
21+
"README.md",
22+
"CHANGELOG.md",
23+
"lib",
24+
"!lib/**/*.d.ts.map",
25+
"!lib/**/*.test.js",
26+
"!lib/**/*.test.d.ts",
27+
"!lib/**/*.test.d.ts.map",
28+
"!lib/**/*.test.js.map",
29+
"!lib/tests",
30+
"!.tsbuildinfo"
31+
],
32+
"packageManager": "[email protected]",
33+
"devDependencies": {
34+
"@wroud/api-logger": "workspace:^",
35+
"@wroud/ci": "workspace:^",
36+
"@wroud/tsconfig": "workspace:^",
37+
"rimraf": "^6",
38+
"typescript": "^5"
39+
},
40+
"keywords": [
41+
"middleware",
42+
"typescript",
43+
"javascript",
44+
"flow control",
45+
"error handling",
46+
"ESM",
47+
"asynchronous",
48+
"dependency management",
49+
"middleware chains",
50+
"re-run",
51+
"disposable",
52+
"flow middleware",
53+
"middleware library"
54+
]
55+
}

0 commit comments

Comments
 (0)