dx-server 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,17 +14,14 @@ Simple server
14
14
  ```javascript
15
15
  import {Server} from 'node:http'
16
16
  import chain from 'jchain'
17
- import {reqContext, resContext, dxContext, setHtml, setText, router,} from 'dx-server'
17
+ import dxServer, {getReq, getRes, router, setHtml, setText,} from 'dx-server'
18
18
 
19
- new Server().on('request', async (req, res) => {
20
- await chain(
21
- reqContext.chain(req),
22
- resContext.chain(res),
23
- dxContext.chain(),
19
+ new Server().on('request', (req, res) => chain(
20
+ dxServer(req, res),
24
21
  next => {
25
- resContext.value.setHeader('Cache-Control', 'no-cache')
26
- console.log(reqContext.value.method, reqContext.value.url)
27
- next()
22
+ getRes().setHeader('Cache-Control', 'no-cache')
23
+ console.log(getReq().method, getReq().url)
24
+ return next()
28
25
  },
29
26
  async next => {
30
27
  try {await next()} catch (e) {
@@ -38,7 +35,7 @@ new Server().on('request', async (req, res) => {
38
35
  }),
39
36
  () => {setHtml('not found', {status: 404})},
40
37
  )()
41
- }).listen(3000, () => console.log('server is listening at 3000'))
38
+ ).listen(3000, () => console.log('server is listening at 3000'))
42
39
  ```
43
40
 
44
41
  More complex server with express.
@@ -49,18 +46,16 @@ This sample additionally requires: `yarn install express morgan`
49
46
  import {Server} from 'node:http'
50
47
  import {promisify} from 'node:util'
51
48
  import chain from 'jchain'
52
- import {
53
- makeContext, reqContext, resContext,
54
-
55
- dxContext,
49
+ import dxServer, {
50
+ getReq, getRes,
56
51
  getBuffer, getJson, getRaw, getText, getUrlEncoded, getQuery,
57
52
  setHtml, setJson, setText, setBuffer, setRedirect, setNodeStream, setWebStream,
58
-
59
- router
53
+ router,
60
54
  } from 'dx-server'
61
55
  import {expressApp} from 'dx-server/express'
62
56
  import express from 'express'
63
57
  import morgan from 'morgan'
58
+ import {AsyncLocalStorage} from 'node:async_hooks'
64
59
 
65
60
  // it is best practice to create custom error class for non-system error
66
61
  class ServerError extends Error {
@@ -73,25 +68,21 @@ class ServerError extends Error {
73
68
  }
74
69
  }
75
70
 
76
- // makeContext is a convenient way to create context
77
- const authContext = makeContext(() => {
78
- const req = reqContext.value
79
- // determine if user is authenticated
80
- // for e.g.
81
- if (req.headers.authorization) {
82
- return {id: 1, name: 'joe'}
83
- }
84
- })
71
+ const authStorage = new AsyncLocalStorage()
72
+ const authChain = async next => {
73
+ const auth = getReq().headers.authorization ? {id: 1, name: 'joe'} : undefined
74
+ return authStorage.run(auth, next)
75
+ }
85
76
 
86
77
  const requireAuth = () => {
87
- if (!authContext.value) throw new ServerError('unauthorized', 401, 'unauthorized')
78
+ if (!authStorage.getStore()) throw new ServerError('unauthorized', 401, 'unauthorized')
88
79
  }
89
80
 
90
81
  const serverChain = chain(
91
82
  next => {
92
83
  // this is the difference between express and dx-server
93
84
  // req, res can be accessed from anywhere via context which uses NodeJS's AsyncLocalStorage under the hood
94
- resContext.value.setHeader('Cache-Control', 'no-cache')
85
+ getRes().setHeader('Cache-Control', 'no-cache')
95
86
  return next() // must return or await
96
87
  },
97
88
  async next => {// global error catching for all following middlewares
@@ -111,7 +102,7 @@ const serverChain = chain(
111
102
  app.use(morgan('common')) // in future, we will provide native implementation of express middlewares
112
103
  app.use('/public', express.static('public'))
113
104
  }),
114
- authContext.chain(),
105
+ authChain,
115
106
  router.post({// example of catching error for all /api/* routes
116
107
  async '/api'({next}) {
117
108
  try {
@@ -137,7 +128,7 @@ const serverChain = chain(
137
128
  },
138
129
  '/api/me'() { // sample private router
139
130
  requireAuth()
140
- setJson({name: authContext.value.name})
131
+ setJson({name: authStorage.getStore().name})
141
132
  },
142
133
  }),
143
134
  router.get({ // sample GET router
@@ -157,9 +148,7 @@ const tcpServer = new Server()
157
148
  .on('request', async (req, res) => {
158
149
  try {
159
150
  await chain(
160
- reqContext.chain(req), // required for most middlewares
161
- resContext.chain(res), // required for most middlewares
162
- dxContext.chain({jsonBeautify: process.env.NODE_ENV !== 'production'}), // basic dx-server context
151
+ dxServer(req, res, {jsonBeautify: process.env.NODE_ENV !== 'production'}), // basic dx-server context
163
152
  serverChain,
164
153
  )()
165
154
  } catch (e) {
@@ -183,11 +172,15 @@ The associated results are calculated in the first time they are called and cach
183
172
 
184
173
  If you want to get these values synchronously, you can do as follows:
185
174
  ```javascript
186
- import {makeContext, getJson} from 'dx-server'
187
- const jsonContext = makeContext(() => getJson())
175
+ import {AsyncLocalStorage} from 'node:async_hooks'
176
+ import {getJson} from 'dx-server'
177
+ const jsonStorage = new AsyncLocalStorage()
188
178
 
189
- chain(jsonContext.chain(), next => {
190
- console.log(jsonContext.value) // json body can be accessed synchronously
191
- return next()
192
- })
179
+ chain(
180
+ async next => jsonStorage.run(await getJson(), next),
181
+ next => {
182
+ console.log(jsonContext.value) // json body can be accessed synchronously
183
+ return next()
184
+ }
185
+ )
193
186
  ```
package/cjs/body.js CHANGED
@@ -4,7 +4,7 @@ exports.getQuery = exports.getUrlEncoded = exports.getText = exports.getRaw = ex
4
4
  const stream_js_1 = require("./stream.js");
5
5
  const qs_1 = require("qs");
6
6
  const contentType_js_1 = require("./contentType.js");
7
- const context_js_1 = require("./context.js");
7
+ const dx_js_1 = require("./dx.js");
8
8
  let bufferBodyDefaultOptions = { limit: 100 << 10 }; // 100kb
9
9
  function setBufferBodyDefaultOptions(options) {
10
10
  bufferBodyDefaultOptions = { ...bufferBodyDefaultOptions, ...options };
@@ -13,7 +13,7 @@ exports.setBufferBodyDefaultOptions = setBufferBodyDefaultOptions;
13
13
  const bufferBodySymbol = Symbol('bufferBody');
14
14
  async function getBuffer(options) {
15
15
  const { limit } = { ...bufferBodyDefaultOptions, ...options };
16
- const req = context_js_1.reqContext.value;
16
+ const req = (0, dx_js_1.getReq)();
17
17
  return req[bufferBodySymbol] ??= (async () => {
18
18
  /**
19
19
  * Check if a request has a request body.
@@ -39,7 +39,7 @@ async function getBuffer(options) {
39
39
  exports.getBuffer = getBuffer;
40
40
  // if content-type is not as expected, return undefined
41
41
  function forceGetContentTypeParams(expected) {
42
- const req = context_js_1.reqContext.value;
42
+ const req = (0, dx_js_1.getReq)();
43
43
  const contentTypeRaw = req.headers['content-type'];
44
44
  if (!contentTypeRaw)
45
45
  return;
@@ -60,7 +60,7 @@ function forceGetCharset(expected) {
60
60
  }
61
61
  const jsonBodySymbol = Symbol('jsonBody');
62
62
  async function getJson(options) {
63
- return context_js_1.reqContext.value[jsonBodySymbol] ??= (async () => {
63
+ return (0, dx_js_1.getReq)()[jsonBodySymbol] ??= (async () => {
64
64
  const charset = forceGetCharset('application/json');
65
65
  if (!charset)
66
66
  return;
@@ -74,7 +74,7 @@ async function getJson(options) {
74
74
  exports.getJson = getJson;
75
75
  const rawBodySymbol = Symbol('rawBody');
76
76
  async function getRaw(options) {
77
- return context_js_1.reqContext.value[rawBodySymbol] ??= (async () => {
77
+ return (0, dx_js_1.getReq)()[rawBodySymbol] ??= (async () => {
78
78
  if (!forceGetContentTypeParams('application/octet-stream'))
79
79
  return;
80
80
  return await getBuffer(options);
@@ -83,7 +83,7 @@ async function getRaw(options) {
83
83
  exports.getRaw = getRaw;
84
84
  const textBodySymbol = Symbol('textBody');
85
85
  async function getText(options) {
86
- return context_js_1.reqContext.value[textBodySymbol] ??= (async () => {
86
+ return (0, dx_js_1.getReq)()[textBodySymbol] ??= (async () => {
87
87
  const charset = forceGetCharset('text/plain');
88
88
  if (!charset)
89
89
  return;
@@ -95,7 +95,7 @@ async function getText(options) {
95
95
  exports.getText = getText;
96
96
  const urlEncodedBodySymbol = Symbol('urlencodedBody');
97
97
  async function getUrlEncoded({ simplify, ...options } = {}) {
98
- return context_js_1.reqContext.value[urlEncodedBodySymbol] ??= (async () => {
98
+ return (0, dx_js_1.getReq)()[urlEncodedBodySymbol] ??= (async () => {
99
99
  const charset = forceGetCharset('application/x-www-form-urlencoded');
100
100
  if (!charset)
101
101
  return;
@@ -111,8 +111,8 @@ async function getUrlEncoded({ simplify, ...options } = {}) {
111
111
  exports.getUrlEncoded = getUrlEncoded;
112
112
  const querySymbol = Symbol('query');
113
113
  async function getQuery({ simplify, ...options } = {}) {
114
- return context_js_1.reqContext.value[querySymbol] ??= (async () => {
115
- const query = context_js_1.reqContext.value.url?.split('?', 2)?.[1];
114
+ return (0, dx_js_1.getReq)()[querySymbol] ??= (async () => {
115
+ const query = (0, dx_js_1.getReq)().url?.split('?', 2)?.[1];
116
116
  return query
117
117
  ? simplify
118
118
  ? Object.fromEntries(new URLSearchParams(query))
@@ -121,4 +121,4 @@ async function getQuery({ simplify, ...options } = {}) {
121
121
  })();
122
122
  }
123
123
  exports.getQuery = getQuery;
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF3RDtBQUN4RCwyQkFBd0I7QUFDeEIscURBQWlEO0FBQ2pELDZDQUF1QztBQUt2QyxJQUFJLHdCQUF3QixHQUFzQixFQUFDLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxFQUFDLENBQUEsQ0FBQyxRQUFRO0FBQzdFLFNBQWdCLDJCQUEyQixDQUFDLE9BQW1DO0lBQzlFLHdCQUF3QixHQUFHLEVBQUMsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFBO0FBQ3JFLENBQUM7QUFGRCxrRUFFQztBQUNELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQ3RDLEtBQUssVUFBVSxTQUFTLENBQUMsT0FBb0M7SUFDbkUsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFBO0lBQ3pELE1BQU0sR0FBRyxHQUFHLHVCQUFVLENBQUMsS0FBSyxDQUFBO0lBQzVCLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRTtRQUM1Qzs7Ozs7V0FLRztRQUNGLCtGQUErRjtRQUNoRyxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzdFLElBQ0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLFNBQVM7ZUFDM0MsS0FBSyxDQUFDLG1CQUFtQixDQUFDO1lBQzVCLE9BQU07UUFDUixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQTtRQUVsRixP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
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF3RDtBQUN4RCwyQkFBd0I7QUFDeEIscURBQWlEO0FBQ2pELG1DQUE4QjtBQUs5QixJQUFJLHdCQUF3QixHQUFzQixFQUFDLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxFQUFDLENBQUEsQ0FBQyxRQUFRO0FBQzdFLFNBQWdCLDJCQUEyQixDQUFDLE9BQW1DO0lBQzlFLHdCQUF3QixHQUFHLEVBQUMsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFBO0FBQ3JFLENBQUM7QUFGRCxrRUFFQztBQUNELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQ3RDLEtBQUssVUFBVSxTQUFTLENBQUMsT0FBb0M7SUFDbkUsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFBO0lBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUEsY0FBTSxHQUFFLENBQUE7SUFDcEIsT0FBTyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQzVDOzs7OztXQUtHO1FBQ0YsK0ZBQStGO1FBQ2hHLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDN0UsSUFDQyxHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUztlQUMzQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7WUFDNUIsT0FBTTtRQUNSLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFBO1FBRWxGLE9B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
package/cjs/dx.d.ts CHANGED
@@ -1,64 +1,17 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  /// <reference types="node" resolution-mode="require"/>
3
+ /// <reference types="node" resolution-mode="require"/>
3
4
  import { Readable } from 'node:stream';
4
- export declare const dxContext: {
5
- readonly value: {
6
- charset?: BufferEncoding | undefined;
7
- jsonBeautify?: boolean | undefined;
8
- disableEtag?: boolean | undefined;
9
- } & ({
10
- type: 'text';
11
- data: string;
12
- } | {
13
- type: 'html';
14
- data: string;
15
- } | {
16
- type: 'buffer';
17
- data: Buffer;
18
- } | {
19
- type: 'json';
20
- data: any;
21
- } | {
22
- type: 'redirect';
23
- data: string;
24
- } | {
25
- type: 'nodeStream';
26
- data: Readable;
27
- } | {
28
- type: 'webStream';
29
- data: ReadableStream;
30
- });
31
- chain(params_0?: {
32
- jsonBeautify?: boolean | undefined;
33
- disableEtag?: boolean | undefined;
34
- } | undefined): <V>(next: () => V) => Promise<any>;
35
- with(value: {
36
- charset?: BufferEncoding | undefined;
37
- jsonBeautify?: boolean | undefined;
38
- disableEtag?: boolean | undefined;
39
- } & ({
40
- type: 'text';
41
- data: string;
42
- } | {
43
- type: 'html';
44
- data: string;
45
- } | {
46
- type: 'buffer';
47
- data: Buffer;
48
- } | {
49
- type: 'json';
50
- data: any;
51
- } | {
52
- type: 'redirect';
53
- data: string;
54
- } | {
55
- type: 'nodeStream';
56
- data: Readable;
57
- } | {
58
- type: 'webStream';
59
- data: ReadableStream;
60
- })): <V_1>(next: () => V_1) => Promise<any>;
61
- };
5
+ import type { IncomingMessage, ServerResponse } from 'node:http';
6
+ interface Chainable<P extends any[] = any[], R = any, Next = (...np: any[]) => any> {
7
+ (next: Next, ...p: P): R;
8
+ }
9
+ export declare function dxServer(req: IncomingMessage, res: ServerResponse, options?: {
10
+ jsonBeautify?: boolean;
11
+ disableEtag?: boolean;
12
+ }): Chainable;
13
+ export declare function getReq(): IncomingMessage;
14
+ export declare function getRes(): ServerResponse;
62
15
  export declare function setText(text: string, { status }?: {
63
16
  status?: number;
64
17
  }): void;
@@ -79,3 +32,4 @@ export declare function setJson(json: any, { status, beautify }?: {
79
32
  beautify?: boolean;
80
33
  }): void;
81
34
  export declare function setRedirect(url: string, status: 301 | 302): void;
35
+ export {};