express-fast-json-stringify 1.2.6 → 1.2.9

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/CHANGELOG.md CHANGED
@@ -2,43 +2,52 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
- ### [1.2.6](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.2.4...v1.2.6) (2024-09-29)
6
-
7
-
8
- ### Bug Fixes
9
-
10
- * export ([b753280](https://github.com/nigrosimone/express-fast-json-stringify/commit/b753280af8af5aea830715405d404f3fad6f43d7))
11
-
12
- ### [1.2.4](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.2.2...v1.2.4) (2024-09-29)
13
-
14
-
15
- ### Bug Fixes
16
-
17
- * del deps ([0e9e63a](https://github.com/nigrosimone/express-fast-json-stringify/commit/0e9e63af86e647815002079b1df5ca19ff6f7632))
18
-
19
- ### [1.2.2](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.2.0...v1.2.2) (2024-09-29)
20
-
21
- ## [1.2.0](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.1.4...v1.2.0) (2024-09-29)
22
-
23
-
24
- ### Features
25
-
26
- * add options ([9466dc3](https://github.com/nigrosimone/express-fast-json-stringify/commit/9466dc30c20693a7ceabf2240d5d9701c76280c0))
27
-
28
- ### [1.1.4](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.1.2...v1.1.4) (2024-09-29)
29
-
30
- ### [1.1.2](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.1.0...v1.1.2) (2024-09-29)
31
-
32
- ## 1.1.0 (2024-09-29)
33
-
34
-
35
- ### Features
36
-
37
- * first commit ([5e3cc3e](https://github.com/nigrosimone/express-fast-json-stringify/commit/5e3cc3e46fc0d35c07299697d1133636d21bee9b))
38
- * npmignore ([364b397](https://github.com/nigrosimone/express-fast-json-stringify/commit/364b397ec15c14846c427c8c395b756aec839174))
39
- * vscode ([f962e81](https://github.com/nigrosimone/express-fast-json-stringify/commit/f962e8145aeaa517c8b80dc642f5bca6139dff4d))
40
-
41
-
42
- ### Bug Fixes
43
-
44
- * ignore publish ([ca95f45](https://github.com/nigrosimone/express-fast-json-stringify/commit/ca95f450e1ce22f957fff4cd9f7520386ee70962))
5
+ ### [1.2.9](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.2.8...v1.2.9) (2026-01-18)
6
+
7
+ ### [1.2.8](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.2.6...v1.2.8) (2024-09-29)
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * global type ([56fa47c](https://github.com/nigrosimone/express-fast-json-stringify/commit/56fa47c6b395a1de89dd85bc67f55c8cd3f5d852))
13
+
14
+ ### [1.2.6](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.2.4...v1.2.6) (2024-09-29)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * export ([b753280](https://github.com/nigrosimone/express-fast-json-stringify/commit/b753280af8af5aea830715405d404f3fad6f43d7))
20
+
21
+ ### [1.2.4](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.2.2...v1.2.4) (2024-09-29)
22
+
23
+
24
+ ### Bug Fixes
25
+
26
+ * del deps ([0e9e63a](https://github.com/nigrosimone/express-fast-json-stringify/commit/0e9e63af86e647815002079b1df5ca19ff6f7632))
27
+
28
+ ### [1.2.2](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.2.0...v1.2.2) (2024-09-29)
29
+
30
+ ## [1.2.0](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.1.4...v1.2.0) (2024-09-29)
31
+
32
+
33
+ ### Features
34
+
35
+ * add options ([9466dc3](https://github.com/nigrosimone/express-fast-json-stringify/commit/9466dc30c20693a7ceabf2240d5d9701c76280c0))
36
+
37
+ ### [1.1.4](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.1.2...v1.1.4) (2024-09-29)
38
+
39
+ ### [1.1.2](https://github.com/nigrosimone/express-fast-json-stringify/compare/v1.1.0...v1.1.2) (2024-09-29)
40
+
41
+ ## 1.1.0 (2024-09-29)
42
+
43
+
44
+ ### Features
45
+
46
+ * first commit ([5e3cc3e](https://github.com/nigrosimone/express-fast-json-stringify/commit/5e3cc3e46fc0d35c07299697d1133636d21bee9b))
47
+ * npmignore ([364b397](https://github.com/nigrosimone/express-fast-json-stringify/commit/364b397ec15c14846c427c8c395b756aec839174))
48
+ * vscode ([f962e81](https://github.com/nigrosimone/express-fast-json-stringify/commit/f962e8145aeaa517c8b80dc642f5bca6139dff4d))
49
+
50
+
51
+ ### Bug Fixes
52
+
53
+ * ignore publish ([ca95f45](https://github.com/nigrosimone/express-fast-json-stringify/commit/ca95f450e1ce22f957fff4cd9f7520386ee70962))
package/README.md CHANGED
@@ -1,59 +1,24 @@
1
- # express-fast-json-stringify
1
+ JSON serialization is a critical task in web development, particularly for applications built with Node.js and Express.js. While the native JSON serialization in Node.js (`JSON.stringify()`) is straightforward and convenient, it can become a performance bottleneck, especially under heavy load. This documentation introduces [express-fast-json-stringify](https://www.npmjs.com/package/express-fast-json-stringify), a custom middleware package that leverages [fast-json-stringify](https://www.npmjs.com/package/fast-json-stringify) to significantly boost JSON serialization performance in Express applications.
2
2
 
3
- One of the reasons why [Fastify](https://www.npmjs.com/package/fastify) is faster than Express is its use of [fast-json-stringify](https://www.npmjs.com/package/fast-json-stringify). `fast-json-stringify` is a library developed by the Fastify team that boosts JSON conversion speed by analyzing JSON schema definitions.
3
+ ## What is fast-json-stringify?
4
4
 
5
- By using the `fast-json-stringify` library, Fastify can serialize JSON much faster than Express, contributing to its overall performance advantage.
5
+ `fast-json-stringify` is a JSON serialization library developed by the Fastify team. It enhances JSON conversion speed by analyzing JSON schema definitions and compiling them into highly optimized serialization functions. This makes it much faster than the native `JSON.stringify()`, particularly beneficial for high-performance applications.
6
6
 
7
- With `express-fast-json-stringify`, you can leverage `fast-json-stringify` in your Express application as follows:
7
+ ## Introducing express-fast-json-stringify
8
8
 
9
- ```ts
10
- import express from 'express';
11
- import { fastJsonSchema, Schema } from 'express-fast-json-stringify';
12
-
13
- const schema: Schema = {
14
- title: 'Example Schema',
15
- type: 'object',
16
- properties: {
17
- firstName: {
18
- type: 'string',
19
- },
20
- lastName: {
21
- type: 'string',
22
- },
23
- age: {
24
- description: 'Age in years',
25
- type: 'integer',
26
- },
27
- },
28
- };
29
-
30
- const app = express();
31
-
32
- app.get('/', fastJsonSchema(schema), (req, res, next) => {
33
- try {
34
- const data = {
35
- firstName: 'Simone',
36
- lastName: 'Nigro',
37
- age: 40,
38
- };
39
- res.fastJson(data);
40
- } catch (error) {
41
- next(error);
42
- }
43
- });
44
- ```
9
+ `express-fast-json-stringify` is an npm package that brings the performance benefits of `fast-json-stringify` to Express.js applications. By integrating this package, you can achieve faster JSON serialization, thus improving the overall performance of your application.
45
10
 
46
- See the stackblitz [demo](https://stackblitz.com/edit/express-fast-json-stringify).
11
+ ## Installation
47
12
 
48
- ## How to Use
49
-
50
- 1. Install the package:
13
+ First, install the `express-fast-json-stringify` package:
51
14
 
52
15
  ```
53
16
  npm install express-fast-json-stringify
54
17
  ```
55
18
 
56
- 2. Create a schema object that defines the structure of your JSON response, eg.:
19
+ ## Creating a JSON Schema
20
+
21
+ Define a schema object that specifies the structure of your JSON responses. This schema will be used by `fast-json-stringify` to optimize the serialization process.
57
22
 
58
23
  ```ts
59
24
  import { Schema } from 'express-fast-json-stringify';
@@ -62,12 +27,8 @@ const schema: Schema = {
62
27
  title: 'Example Schema',
63
28
  type: 'object',
64
29
  properties: {
65
- firstName: {
66
- type: 'string',
67
- },
68
- lastName: {
69
- type: 'string',
70
- },
30
+ firstName: { type: 'string' },
31
+ lastName: { type: 'string' },
71
32
  age: {
72
33
  description: 'Age in years',
73
34
  type: 'integer',
@@ -76,46 +37,45 @@ const schema: Schema = {
76
37
  };
77
38
  ```
78
39
 
79
- 3. Apply the `fastJsonSchema` middleware to your Express route, passing in the schema object, eg.:
40
+ ## Applying the Middleware
41
+
42
+ Use the `fastJsonSchema` middleware in your Express routes, passing the schema object as an argument. This will set up the optimized JSON serialization for that route.
80
43
 
81
44
  ```ts
45
+ import express from 'express';
82
46
  import { fastJsonSchema, Schema } from 'express-fast-json-stringify';
83
47
 
84
- const schema: Schema = {
48
+ const app = express();
49
+
50
+ const exampleSchema: Schema = {
85
51
  title: 'Example Schema',
86
52
  type: 'object',
87
53
  properties: {
88
- firstName: {
89
- type: 'string',
90
- },
91
- lastName: {
92
- type: 'string',
93
- },
94
- age: {
95
- description: 'Age in years',
96
- type: 'integer',
97
- },
54
+ firstName: { type: 'string' },
55
+ lastName: { type: 'string' },
56
+ age: { type: 'integer' },
98
57
  },
99
58
  };
100
59
 
101
- app.get('/', fastJsonSchema(schema), (req, res, next) => {});
60
+ app.get('/', fastJsonSchema(exampleSchema), (req, res, next) => {});
102
61
  ```
103
62
 
104
- 4. Send JSON Response: Use `res.fastJson()` to send your JSON response, leveraging the speed benefits of `fast-json-stringify`, eg.:
63
+ ## Sending JSON Responses
64
+
65
+ Instead of using the default `res.json()` method, use the `res.fastJson()` method provided by the middleware to send JSON responses. This leverages the speed benefits of fast-json-stringify.
105
66
 
106
67
  ```ts
68
+ import express from 'express';
107
69
  import { fastJsonSchema, Schema } from 'express-fast-json-stringify';
108
70
 
71
+ const app = express();
72
+
109
73
  const schema: Schema = {
110
74
  title: 'Example Schema',
111
75
  type: 'object',
112
76
  properties: {
113
- firstName: {
114
- type: 'string',
115
- },
116
- lastName: {
117
- type: 'string',
118
- },
77
+ firstName: { type: 'string' },
78
+ lastName: { type: 'string' },
119
79
  age: {
120
80
  description: 'Age in years',
121
81
  type: 'integer',
@@ -137,4 +97,20 @@ app.get('/', fastJsonSchema(schema), (req, res, next) => {
137
97
  });
138
98
  ```
139
99
 
140
- By following these steps, you can enhance the performance of your Express applications with faster JSON serialization.
100
+ ## Performance Benefits
101
+
102
+ Using `express-fast-json-stringify` offers several performance benefits:
103
+
104
+ 1. **Increased Speed**: `fast-json-stringify` can serialize JSON data much faster than JSON.stringify(), especially for complex JSON objects.
105
+ 2. **Reduced CPU Usage**: Faster serialization means less CPU time spent on processing, allowing your server to handle more concurrent requests.
106
+ 3. **Consistency and Validation**: By defining JSON schemas, you ensure that the serialized data adheres to a predefined structure, improving data consistency and reducing the likelihood of errors.
107
+
108
+ ## Conclusion
109
+
110
+ Integrating `express-fast-json-stringify` into your Express.js application can provide substantial performance improvements, especially in scenarios where JSON serialization is a bottleneck. By leveraging the power of `fast-json-stringify`, you can achieve faster response times and handle higher loads, making your application more efficient and scalable.
111
+
112
+ To start using `express-fast-json-stringify`, follow the steps outlined in this documentation, and enjoy the benefits of faster JSON serialization in your Express applications. For a live demo, you can check out the [StackBlitz demo](https://stackblitz.com/edit/express-fast-json-stringify).
113
+
114
+ ## Support
115
+
116
+ This is an open-source project. Star this [repository](https://github.com/nigrosimone/express-fast-json-stringify), if you like it, or even [donate](https://www.paypal.com/paypalme/snwp). Thank you so much!
@@ -1,15 +1,16 @@
1
1
  import type { NextFunction, Request, Response } from 'express';
2
- import { Options, Schema } from 'fast-json-stringify';
2
+ import { type Options, type Schema } from 'fast-json-stringify';
3
3
  export type { Schema, Options } from 'fast-json-stringify';
4
4
  /**
5
- * Set the schema
5
+ * Build a stringify function using a schema of the documents that should be stringified
6
6
  * @param {Schema} schema The schema used to stringify values
7
7
  * @param {Options} options The options to use (optional)
8
+ * @see https://www.npmjs.com/package/fast-json-stringify
8
9
  *
9
10
  * Examples:
10
11
  * ```ts
11
12
  * import express from 'express';
12
- * import { fastJsonSchemas, Schema } from 'express-fast-json-stringify';
13
+ * import { fastJsonSchema, Schema } from 'express-fast-json-stringify';
13
14
  *
14
15
  * const app = express();
15
16
  *
@@ -43,4 +44,20 @@ export type { Schema, Options } from 'fast-json-stringify';
43
44
  * });
44
45
  * ```
45
46
  */
46
- export declare const fastJsonSchema: (schema: Schema, options?: Options) => (_req: Request, res: Response, next: NextFunction) => void;
47
+ export declare const fastJsonSchema: (schema: Schema, options?: Omit<Options, "mode">) => (_req: Request, res: Response, next: NextFunction) => void;
48
+ declare global {
49
+ namespace Express {
50
+ interface Response {
51
+ /**
52
+ * Send JSON response.
53
+ *
54
+ * Examples:
55
+ * ```ts
56
+ * res.fastJson({ user: 'Simone Nigro' });
57
+ * res.status(200).fastJson({ user: 'Simone Nigro' });
58
+ * ```
59
+ */
60
+ fastJson: (body: any) => Response;
61
+ }
62
+ }
63
+ }
@@ -6,14 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.fastJsonSchema = void 0;
7
7
  const fast_json_stringify_1 = __importDefault(require("fast-json-stringify"));
8
8
  /**
9
- * Set the schema
9
+ * Build a stringify function using a schema of the documents that should be stringified
10
10
  * @param {Schema} schema The schema used to stringify values
11
11
  * @param {Options} options The options to use (optional)
12
+ * @see https://www.npmjs.com/package/fast-json-stringify
12
13
  *
13
14
  * Examples:
14
15
  * ```ts
15
16
  * import express from 'express';
16
- * import { fastJsonSchemas, Schema } from 'express-fast-json-stringify';
17
+ * import { fastJsonSchema, Schema } from 'express-fast-json-stringify';
17
18
  *
18
19
  * const app = express();
19
20
  *
@@ -58,18 +59,16 @@ const fastJsonSchema = (schema, options) => {
58
59
  *
59
60
  * Examples:
60
61
  * ```ts
61
- * res.fastJson({ user: 'tj' });
62
- * res.status(200).fastJson({ user: 'tj' });
62
+ * res.fastJson({ user: 'Simone Nigro' });
63
+ * res.status(200).fastJson({ user: 'Simone Nigro' });
63
64
  * ```
64
65
  */
65
- res.fastJson = (data) => {
66
- if (!res.getHeader('Content-Type')) {
67
- res.setHeader('Content-Type', 'application/json');
68
- }
69
- return res.send(fjs(data));
66
+ res.fastJson = (body) => {
67
+ res.setHeader('Content-Type', 'application/json');
68
+ return res.end(fjs(body));
70
69
  };
71
70
  next();
72
71
  };
73
72
  };
74
73
  exports.fastJsonSchema = fastJsonSchema;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSw4RUFBZ0U7QUFJaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHO0FBQ0ksTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFjLEVBQUUsT0FBaUIsRUFBRSxFQUFFO0lBQ2xFLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxNQUFNLElBQUksU0FBUyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7S0FDcEU7SUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFBLDZCQUFRLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sQ0FBQyxJQUFhLEVBQUUsR0FBYSxFQUFFLElBQWtCLEVBQUUsRUFBRTtRQUMxRDs7Ozs7Ozs7V0FRRztRQUNILEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFTLEVBQVksRUFBRTtZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDbEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzthQUNuRDtZQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUM7UUFDRixJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXZCVyxRQUFBLGNBQWMsa0JBdUJ6QiJ9
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSw4RUFBMEU7QUFJMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNJLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBYyxFQUFFLE9BQStCLEVBQUUsRUFBRTtJQUNoRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksU0FBUyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLElBQUEsNkJBQVEsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEMsT0FBTyxDQUFDLElBQWEsRUFBRSxHQUFhLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1FBQzFEOzs7Ozs7OztXQVFHO1FBQ0gsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQVMsRUFBWSxFQUFFO1lBQ3JDLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDbEQsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQztRQUNGLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBckJXLFFBQUEsY0FBYyxrQkFxQnpCIn0=
@@ -1,15 +1,16 @@
1
1
  import type { NextFunction, Request, Response } from 'express';
2
- import { Options, Schema } from 'fast-json-stringify';
2
+ import { type Options, type Schema } from 'fast-json-stringify';
3
3
  export type { Schema, Options } from 'fast-json-stringify';
4
4
  /**
5
- * Set the schema
5
+ * Build a stringify function using a schema of the documents that should be stringified
6
6
  * @param {Schema} schema The schema used to stringify values
7
7
  * @param {Options} options The options to use (optional)
8
+ * @see https://www.npmjs.com/package/fast-json-stringify
8
9
  *
9
10
  * Examples:
10
11
  * ```ts
11
12
  * import express from 'express';
12
- * import { fastJsonSchemas, Schema } from 'express-fast-json-stringify';
13
+ * import { fastJsonSchema, Schema } from 'express-fast-json-stringify';
13
14
  *
14
15
  * const app = express();
15
16
  *
@@ -43,4 +44,20 @@ export type { Schema, Options } from 'fast-json-stringify';
43
44
  * });
44
45
  * ```
45
46
  */
46
- export declare const fastJsonSchema: (schema: Schema, options?: Options) => (_req: Request, res: Response, next: NextFunction) => void;
47
+ export declare const fastJsonSchema: (schema: Schema, options?: Omit<Options, "mode">) => (_req: Request, res: Response, next: NextFunction) => void;
48
+ declare global {
49
+ namespace Express {
50
+ interface Response {
51
+ /**
52
+ * Send JSON response.
53
+ *
54
+ * Examples:
55
+ * ```ts
56
+ * res.fastJson({ user: 'Simone Nigro' });
57
+ * res.status(200).fastJson({ user: 'Simone Nigro' });
58
+ * ```
59
+ */
60
+ fastJson: (body: any) => Response;
61
+ }
62
+ }
63
+ }
@@ -1,13 +1,14 @@
1
1
  import fastJson from 'fast-json-stringify';
2
2
  /**
3
- * Set the schema
3
+ * Build a stringify function using a schema of the documents that should be stringified
4
4
  * @param {Schema} schema The schema used to stringify values
5
5
  * @param {Options} options The options to use (optional)
6
+ * @see https://www.npmjs.com/package/fast-json-stringify
6
7
  *
7
8
  * Examples:
8
9
  * ```ts
9
10
  * import express from 'express';
10
- * import { fastJsonSchemas, Schema } from 'express-fast-json-stringify';
11
+ * import { fastJsonSchema, Schema } from 'express-fast-json-stringify';
11
12
  *
12
13
  * const app = express();
13
14
  *
@@ -52,17 +53,15 @@ export const fastJsonSchema = (schema, options) => {
52
53
  *
53
54
  * Examples:
54
55
  * ```ts
55
- * res.fastJson({ user: 'tj' });
56
- * res.status(200).fastJson({ user: 'tj' });
56
+ * res.fastJson({ user: 'Simone Nigro' });
57
+ * res.status(200).fastJson({ user: 'Simone Nigro' });
57
58
  * ```
58
59
  */
59
- res.fastJson = (data) => {
60
- if (!res.getHeader('Content-Type')) {
61
- res.setHeader('Content-Type', 'application/json');
62
- }
63
- return res.send(fjs(data));
60
+ res.fastJson = (body) => {
61
+ res.setHeader('Content-Type', 'application/json');
62
+ return res.end(fjs(body));
64
63
  };
65
64
  next();
66
65
  };
67
66
  };
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLFFBQTZCLE1BQU0scUJBQXFCLENBQUM7QUFJaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBYyxFQUFFLE9BQWlCLEVBQUUsRUFBRTtJQUNsRSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsTUFBTSxJQUFJLFNBQVMsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0tBQ3BFO0lBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxPQUFPLENBQUMsSUFBYSxFQUFFLEdBQWEsRUFBRSxJQUFrQixFQUFFLEVBQUU7UUFDMUQ7Ozs7Ozs7O1dBUUc7UUFDSCxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBUyxFQUFZLEVBQUU7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ2xDLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7YUFDbkQ7WUFDRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLFFBQXVDLE1BQU0scUJBQXFCLENBQUM7QUFJMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQWMsRUFBRSxPQUErQixFQUFFLEVBQUU7SUFDaEYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLFNBQVMsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sQ0FBQyxJQUFhLEVBQUUsR0FBYSxFQUFFLElBQWtCLEVBQUUsRUFBRTtRQUMxRDs7Ozs7Ozs7V0FRRztRQUNILEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFTLEVBQVksRUFBRTtZQUNyQyxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFDRixJQUFJLEVBQUUsQ0FBQztJQUNULENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "express-fast-json-stringify",
3
- "version": "1.2.6",
4
- "description": "With express-fast-json-stringify, you can leverage fast-json-stringify in your Express application",
3
+ "version": "1.2.9",
4
+ "description": "With express-fast-json-stringify, you can leverage fast-json-stringify in your Express application to improve JSON serialization performance",
5
5
  "main": "build/main/index.js",
6
6
  "typings": "build/main/index.d.ts",
7
7
  "module": "build/module/index.js",
@@ -9,7 +9,13 @@
9
9
  "license": "MIT",
10
10
  "keywords": [
11
11
  "express",
12
- "fast-json-stringify"
12
+ "fast-json-stringify",
13
+ "json",
14
+ "stringify",
15
+ "schema",
16
+ "jsonschema",
17
+ "validator",
18
+ "json-schema"
13
19
  ],
14
20
  "scripts": {
15
21
  "build": "run-p build:*",
@@ -45,36 +51,39 @@
45
51
  "node": ">=18"
46
52
  },
47
53
  "dependencies": {
48
- "fast-json-stringify": "^6.0.0"
54
+ "fast-json-stringify": "^6.2.0"
49
55
  },
50
56
  "devDependencies": {
51
- "@ava/typescript": "^4.1.0",
52
- "@istanbuljs/nyc-config-typescript": "^1.0.1",
53
- "@types/express": "^5.0.0",
54
- "@types/node": "^20.9.0",
55
- "@types/supertest": "^6.0.2",
56
- "@typescript-eslint/eslint-plugin": "^6.10.0",
57
- "@typescript-eslint/parser": "^6.10.0",
58
- "ava": "^5.3.1",
59
- "codecov": "^3.5.0",
60
- "cspell": "^8.0.0",
57
+ "@ava/typescript": "^6.0.0",
58
+ "@eslint/compat": "^2.0.1",
59
+ "@eslint/eslintrc": "^3.3.3",
60
+ "@eslint/js": "^9.39.2",
61
+ "@istanbuljs/nyc-config-typescript": "^1.0.2",
62
+ "@types/express": "^5.0.6",
63
+ "@types/node": "^25.0.9",
64
+ "@types/supertest": "^6.0.3",
65
+ "@typescript-eslint/eslint-plugin": "^8.53.0",
66
+ "@typescript-eslint/parser": "^8.53.0",
67
+ "ava": "^6.4.1",
68
+ "codecov": "^3.8.3",
69
+ "cspell": "^9.6.0",
61
70
  "cz-conventional-changelog": "^3.3.0",
62
- "eslint": "^8.53.0",
63
- "eslint-config-prettier": "^9.0.0",
71
+ "eslint": "^9.39.2",
72
+ "eslint-config-prettier": "^10.1.8",
64
73
  "eslint-plugin-eslint-comments": "^3.2.0",
65
- "eslint-plugin-functional": "^6.0.0",
66
- "eslint-plugin-import": "^2.22.0",
67
- "express": "^4.21.0",
68
- "gh-pages": "^6.0.0",
74
+ "eslint-plugin-functional": "^9.0.2",
75
+ "eslint-plugin-import": "^2.32.0",
76
+ "express": "^5.2.1",
77
+ "gh-pages": "^6.3.0",
69
78
  "npm-run-all": "^4.1.5",
70
- "nyc": "^15.1.0",
71
- "open-cli": "^7.2.0",
72
- "prettier": "^3.0.3",
73
- "standard-version": "^9.0.0",
74
- "supertest": "^7.0.0",
75
- "ts-node": "^10.9.1",
76
- "typedoc": "^0.25.3",
77
- "typescript": "^5.2.2"
79
+ "nyc": "^17.1.0",
80
+ "open-cli": "^8.0.0",
81
+ "prettier": "^3.8.0",
82
+ "standard-version": "^9.5.0",
83
+ "supertest": "^7.2.2",
84
+ "ts-node": "^10.9.2",
85
+ "typedoc": "^0.28.16",
86
+ "typescript": "^5.9.3"
78
87
  },
79
88
  "files": [
80
89
  "build/main",
@@ -113,6 +122,6 @@
113
122
  ]
114
123
  },
115
124
  "peerDependencies": {
116
- "fast-json-stringify": "^6.0.0"
125
+ "fast-json-stringify": "^6.2.0"
117
126
  }
118
127
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1,66 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const ava_1 = __importDefault(require("ava"));
7
- const express_1 = __importDefault(require("express"));
8
- const supertest_1 = __importDefault(require("supertest"));
9
- const _1 = require("./");
10
- const data = {
11
- firstName: 'Simone',
12
- lastName: 'Nigro',
13
- age: 40,
14
- };
15
- const schema = {
16
- title: 'Example Schema',
17
- type: 'object',
18
- properties: {
19
- firstName: {
20
- type: 'string',
21
- },
22
- lastName: {
23
- type: 'string',
24
- },
25
- age: {
26
- description: 'Age in years',
27
- type: 'integer',
28
- },
29
- },
30
- };
31
- const app = (0, express_1.default)();
32
- app.use(express_1.default.json());
33
- app.post('/with-schema', (0, _1.fastJsonSchema)(schema), (req, res, next) => {
34
- try {
35
- res.fastJson(req.body.data);
36
- }
37
- catch (error) {
38
- next(error);
39
- }
40
- });
41
- app.post('/without-schema', (req, res, next) => {
42
- try {
43
- res.fastJson(req.body.data);
44
- }
45
- catch (error) {
46
- next(error);
47
- }
48
- });
49
- app.use((err, _req, res, _next) => {
50
- res.status(500).json({ error: err.message });
51
- });
52
- (0, ava_1.default)('with schema', async (t) => {
53
- t.plan(3);
54
- const res = await (0, supertest_1.default)(app).post('/with-schema').send({ data });
55
- t.like(res.body, data);
56
- t.is(res.ok, true);
57
- t.is(res.type, 'application/json');
58
- });
59
- (0, ava_1.default)('without schema', async (t) => {
60
- t.plan(3);
61
- const res = await (0, supertest_1.default)(app).post('/without-schema').send({ data });
62
- t.like(res.body, { error: `res.fastJson is not a function` });
63
- t.is(res.ok, false);
64
- t.is(res.type, 'application/json');
65
- });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOENBQXVCO0FBQ3ZCLHNEQUFtRTtBQUNuRSwwREFBZ0M7QUFFaEMseUJBQTRDO0FBRTVDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsU0FBUyxFQUFFLFFBQVE7SUFDbkIsUUFBUSxFQUFFLE9BQU87SUFDakIsR0FBRyxFQUFFLEVBQUU7Q0FDUixDQUFDO0FBRUYsTUFBTSxNQUFNLEdBQVc7SUFDckIsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixJQUFJLEVBQUUsUUFBUTtJQUNkLFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1NBQ2Y7UUFDRCxRQUFRLEVBQUU7WUFDUixJQUFJLEVBQUUsUUFBUTtTQUNmO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsV0FBVyxFQUFFLGNBQWM7WUFDM0IsSUFBSSxFQUFFLFNBQVM7U0FDaEI7S0FDRjtDQUNGLENBQUM7QUFFRixNQUFNLEdBQUcsR0FBRyxJQUFBLGlCQUFPLEdBQUUsQ0FBQztBQUV0QixHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUV4QixHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFBLGlCQUFjLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ2xFLElBQUk7UUFDRixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0I7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNiO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSCxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUM3QyxJQUFJO1FBQ0YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzdCO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDYjtBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxJQUFhLEVBQUUsR0FBYSxFQUFFLEtBQW1CLEVBQUUsRUFBRTtJQUN0RSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUEsYUFBSSxFQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVWLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxtQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFBLGFBQUksRUFBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVWLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxtQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLENBQUMifQ==
@@ -1 +0,0 @@
1
- export {};
@@ -1,61 +0,0 @@
1
- import test from 'ava';
2
- import express from 'express';
3
- import request from 'supertest';
4
- import { fastJsonSchema } from './';
5
- const data = {
6
- firstName: 'Simone',
7
- lastName: 'Nigro',
8
- age: 40,
9
- };
10
- const schema = {
11
- title: 'Example Schema',
12
- type: 'object',
13
- properties: {
14
- firstName: {
15
- type: 'string',
16
- },
17
- lastName: {
18
- type: 'string',
19
- },
20
- age: {
21
- description: 'Age in years',
22
- type: 'integer',
23
- },
24
- },
25
- };
26
- const app = express();
27
- app.use(express.json());
28
- app.post('/with-schema', fastJsonSchema(schema), (req, res, next) => {
29
- try {
30
- res.fastJson(req.body.data);
31
- }
32
- catch (error) {
33
- next(error);
34
- }
35
- });
36
- app.post('/without-schema', (req, res, next) => {
37
- try {
38
- res.fastJson(req.body.data);
39
- }
40
- catch (error) {
41
- next(error);
42
- }
43
- });
44
- app.use((err, _req, res, _next) => {
45
- res.status(500).json({ error: err.message });
46
- });
47
- test('with schema', async (t) => {
48
- t.plan(3);
49
- const res = await request(app).post('/with-schema').send({ data });
50
- t.like(res.body, data);
51
- t.is(res.ok, true);
52
- t.is(res.type, 'application/json');
53
- });
54
- test('without schema', async (t) => {
55
- t.plan(3);
56
- const res = await request(app).post('/without-schema').send({ data });
57
- t.like(res.body, { error: `res.fastJson is not a function` });
58
- t.is(res.ok, false);
59
- t.is(res.type, 'application/json');
60
- });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLEtBQUssQ0FBQztBQUN2QixPQUFPLE9BQTRDLE1BQU0sU0FBUyxDQUFDO0FBQ25FLE9BQU8sT0FBTyxNQUFNLFdBQVcsQ0FBQztBQUVoQyxPQUFPLEVBQUUsY0FBYyxFQUFVLE1BQU0sSUFBSSxDQUFDO0FBRTVDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsU0FBUyxFQUFFLFFBQVE7SUFDbkIsUUFBUSxFQUFFLE9BQU87SUFDakIsR0FBRyxFQUFFLEVBQUU7Q0FDUixDQUFDO0FBRUYsTUFBTSxNQUFNLEdBQVc7SUFDckIsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixJQUFJLEVBQUUsUUFBUTtJQUNkLFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1NBQ2Y7UUFDRCxRQUFRLEVBQUU7WUFDUixJQUFJLEVBQUUsUUFBUTtTQUNmO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsV0FBVyxFQUFFLGNBQWM7WUFDM0IsSUFBSSxFQUFFLFNBQVM7U0FDaEI7S0FDRjtDQUNGLENBQUM7QUFFRixNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUV0QixHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBRXhCLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDbEUsSUFBSTtRQUNGLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM3QjtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2I7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQzdDLElBQUk7UUFDRixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0I7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNiO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLElBQWEsRUFBRSxHQUFhLEVBQUUsS0FBbUIsRUFBRSxFQUFFO0lBQ3RFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVWLE1BQU0sR0FBRyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFVixNQUFNLEdBQUcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXRFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQyxDQUFDIn0=