Skip to content

Commit 243d648

Browse files
Józef Flakusgitbook-bot
authored andcommitted
GitBook: [master] 22 pages and 6 assets modified
1 parent 6a338d6 commit 243d648

28 files changed

+127
-199
lines changed

.gitbook/assets/2.jpg

385 KB
Loading

.gitbook/assets/effect.jpg

72.7 KB
Loading

.gitbook/assets/events.jpg

12.1 KB
Loading

.gitbook/assets/in_progress.png

26.4 KB
Loading
3.45 MB
Loading

.gitbook/assets/wallpaper.jpg

3.51 MB
Loading

advanced/context.md

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ In Marble.js you don't have to create the app context explicitly. In order to cr
1818

1919
Every dependency that you would like to register inside the Context has to conform to `ContextReader` interface, which means that the registered function should be able to read from the bootstrapped server context. Knowing the basics, let's create some readers!
2020

21-
{% code-tabs %}
22-
{% code-tabs-item title="example.ts" %}
21+
{% code title="example.ts" %}
2322
```typescript
2423
import { createContextToken, reader } from '@marblejs/core';
2524

@@ -31,11 +30,9 @@ export const d2 = reader.map(ask =>
3130
ask(d1Token).map(v => v + ', world!').getOrElse('')
3231
);
3332
```
34-
{% endcode-tabs-item %}
35-
{% endcode-tabs %}
33+
{% endcode %}
3634

37-
{% code-tabs %}
38-
{% code-tabs-item title="index.ts" %}
35+
{% code title="index.ts" %}
3936
```typescript
4037
import { bindTo createServer } from '@marblejs/core';
4138
import { d1, d2, d1Token, d2Token } from './example';
@@ -49,13 +46,11 @@ createServer({
4946
// ...
5047
});
5148
```
52-
{% endcode-tabs-item %}
53-
{% endcode-tabs %}
49+
{% endcode %}
5450

5551
Having our dependencies defined, let's define some test Effect where we can test how our dependency can be consumed.
5652

57-
{% code-tabs %}
58-
{% code-tabs-item title="example.effect.ts" %}
53+
{% code title="example.effect.ts" %}
5954
```typescript
6055
import { r } from '@marblejs/core';
6156
import { d2Token } from './example';
@@ -68,8 +63,7 @@ export const example$ = r.pipe(
6863
map(msg => ({ body: msg })),
6964
)));
7065
```
71-
{% endcode-tabs-item %}
72-
{% endcode-tabs %}
66+
{% endcode %}
7367

7468
The type safety is very important. If you are percipient, you'll notice that using previously defined `d2Token` together with provided dependency we can also grab its inferred type. Reading from the context is not safe every time, thats why the provided dependency is wrapped arround [`Option`](https://gcanti.github.io/fp-ts/Option.html) monad that you can work on. As you can see the real benefit of using Readers is to be able to provide that context in an implicit way without the need to state it explicitly on each one of the functions that needs it.
7569

@@ -83,19 +77,16 @@ Let's say you have a HTTP server that would like to connect with a WebSocket ser
8377

8478
Lets look at an example of eagerly binding of a WebSocket server.
8579

86-
{% code-tabs %}
87-
{% code-tabs-item title="tokens.ts" %}
80+
{% code title="tokens.ts" %}
8881
```typescript
8982
import { createContextToken } from '@marblejs/core';
9083
import { MarbleWebSocketServer } from '@marblejs/websockets';
9184

9285
export const WsServerToken = createContextToken<MarbleWebSocketServer>();
9386
```
94-
{% endcode-tabs-item %}
95-
{% endcode-tabs %}
87+
{% endcode %}
9688

97-
{% code-tabs %}
98-
{% code-tabs-item title="index.ts" %}
89+
{% code title="index.ts" %}
9990
```typescript
10091
import { createServer, bindTo } from '@marblejs/core';
10192
import { mapToServer } from '@marblejs/websockets';
@@ -113,8 +104,7 @@ const server = createServer({
113104

114105
server.run();
115106
```
116-
{% endcode-tabs-item %}
117-
{% endcode-tabs %}
107+
{% endcode %}
118108

119109
In order to instantiate our registered dependency as soon as possible, you have to run it inside `bindTo` function. It means that the registered dependency will try to resolve its dependencies during the binding, using previously registered context.
120110

@@ -132,8 +122,7 @@ bindTo(Token)(dependency().run);
132122

133123
Having the WebSocket dependency eagerly registered we can ask for it eg. inside HTTP Effect. Note that provided dependency won't be instantiated while asking - we can easily grab previously instantiated WebSocket server on demand. 😎
134124

135-
{% code-tabs %}
136-
{% code-tabs-item title="http.listener.ts" %}
125+
{% code title="http.listener.ts" %}
137126
```typescript
138127
import { httpListener } from '@marblejs/core';
139128
import { requestValidator$ } from '@marblejs/middleware-io';
@@ -157,6 +146,5 @@ export default httpListener({
157146
effects: [postItem$],
158147
});
159148
```
160-
{% endcode-tabs-item %}
161-
{% endcode-tabs %}
149+
{% endcode %}
162150

api-reference/core/core-combineroutes.md

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ Factorized `RouteEffectGroup` object.
3939

4040
### Example
4141

42-
{% code-tabs %}
43-
{% code-tabs-item title="user.effects.ts" %}
42+
{% code title="user.effects.ts" %}
4443
```typescript
4544
import { combineRoutes } from '@marblejs/core';
4645
import { authorize$ } from 'auth.middleware';
@@ -53,11 +52,9 @@ export const user$ = combineRoutes('/user', {
5352
effects: [getUsers$, postUser$],
5453
});
5554
```
56-
{% endcode-tabs-item %}
57-
{% endcode-tabs %}
55+
{% endcode %}
5856

59-
{% code-tabs %}
60-
{% code-tabs-item title="api.effects.ts" %}
57+
{% code title="api.effects.ts" %}
6158
```typescript
6259
import { combineRoutes } from '@marblejs/core';
6360
import { user$ } from './user';
@@ -69,6 +66,5 @@ export const api$ = combineRoutes('/api/v1', [
6966
root$, user$, notFound$,
7067
]);
7168
```
72-
{% endcode-tabs-item %}
73-
{% endcode-tabs %}
69+
{% endcode %}
7470

api-reference/core/core-effectfactory.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,7 @@ Factorized `RouteEffect` object.
7272

7373
## Example
7474

75-
{% code-tabs %}
76-
{% code-tabs-item title="root.effect.ts" %}
75+
{% code title="root.effect.ts" %}
7776
```typescript
7877
import { EffectFactory } from '@marblejs/core';
7978

@@ -84,8 +83,7 @@ export const root$ = EffectFactory
8483
mapTo({ body: `Hello, world! 👻` })
8584
));
8685
```
87-
{% endcode-tabs-item %}
88-
{% endcode-tabs %}
86+
{% endcode %}
8987

9088

9189

api-reference/core/core-httplistener.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ Besides the default http server handler, the `httpListener` returns also an conf
4545

4646
### **Example**
4747

48-
{% code-tabs %}
49-
{% code-tabs-item title="http.listener" %}
48+
{% code title="http.listener" %}
5049
```typescript
5150
import { httpListener } from '@marblejs/core';
5251
import { bodyParser$ } from '@marblejs/middleware-body';
@@ -64,6 +63,5 @@ const effects = [
6463

6564
export default httpListener({ middlewares, effects });
6665
```
67-
{% endcode-tabs-item %}
68-
{% endcode-tabs %}
66+
{% endcode %}
6967

0 commit comments

Comments
 (0)