@rosen-bridge/fastify-enhanced 0.1.1 → 2.0.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/CHANGELOG.md +16 -0
- package/README.md +3 -3
- package/dist/error.d.ts +5 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +9 -0
- package/dist/fastify.d.ts +5 -20
- package/dist/fastify.d.ts.map +1 -1
- package/dist/fastify.js +13 -133
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/jsonParser.d.ts +4 -0
- package/dist/jsonParser.d.ts.map +1 -0
- package/dist/jsonParser.js +18 -0
- package/dist/serializerCompiler.d.ts +14 -0
- package/dist/serializerCompiler.d.ts.map +1 -0
- package/dist/serializerCompiler.js +27 -0
- package/dist/swagger.d.ts +6 -0
- package/dist/swagger.d.ts.map +1 -0
- package/dist/swagger.js +43 -0
- package/dist/types.d.ts +3 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +4 -0
- package/package.json +31 -23
- package/.eslintignore +0 -1
- package/dist/dataTypes.d.ts +0 -234
- package/dist/dataTypes.d.ts.map +0 -1
- package/dist/dataTypes.js +0 -6
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/lib/dataTypes.ts +0 -7
- package/lib/fastify.ts +0 -197
- package/lib/index.ts +0 -4
- package/lib/types.ts +0 -18
- package/tests/.gitkeep +0 -0
- package/tsconfig.build.json +0 -7
- package/tsconfig.build.tsbuildinfo +0 -1
- package/tsconfig.json +0 -7
- package/vitest.config.ts +0 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @rosen-bridge/fastify-enhanced
|
|
2
2
|
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- Update node version to 22.18
|
|
8
|
+
|
|
9
|
+
## 1.0.0
|
|
10
|
+
|
|
11
|
+
### Major Changes
|
|
12
|
+
|
|
13
|
+
- Update fastify-enhanced package to support swagger and bigint
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- Update versions of nodejs to 20.11 & typescript to 5.8
|
|
18
|
+
|
|
3
19
|
## 0.1.1
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -44,7 +44,7 @@ const addTokenPaymentRoute = (
|
|
|
44
44
|
ServerResponse<IncomingMessage>,
|
|
45
45
|
FastifyBaseLogger,
|
|
46
46
|
ZodTypeProvider
|
|
47
|
-
|
|
47
|
+
>,
|
|
48
48
|
) => {
|
|
49
49
|
const bodySchema = types.object({
|
|
50
50
|
tokenName: types.string(),
|
|
@@ -85,7 +85,7 @@ const fastify = await createFastify(
|
|
|
85
85
|
description: '',
|
|
86
86
|
version: '0.0.1',
|
|
87
87
|
},
|
|
88
|
-
{ logger: false }
|
|
88
|
+
{ logger: false },
|
|
89
89
|
);
|
|
90
90
|
addTokenPaymentRoute(fastify);
|
|
91
91
|
|
|
@@ -109,6 +109,6 @@ fastify.register(
|
|
|
109
109
|
addTokenPaymentRoute(subFastify);
|
|
110
110
|
next();
|
|
111
111
|
},
|
|
112
|
-
{ prefix: 'subroute' }
|
|
112
|
+
{ prefix: 'subroute' },
|
|
113
113
|
);
|
|
114
114
|
```
|
package/dist/error.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../lib/error.ts"],"names":[],"mappings":"AAAA,qBAAa,uBAAwB,SAAQ,KAAK;IACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAExB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAKlD"}
|
package/dist/error.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export class ResponseValidationError extends Error {
|
|
2
|
+
details;
|
|
3
|
+
constructor(validationResult) {
|
|
4
|
+
super("Response doesn't match the schema");
|
|
5
|
+
this.name = 'ResponseValidationError';
|
|
6
|
+
this.details = validationResult.error;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLHVCQUF3QixTQUFRLEtBQUs7SUFDekMsT0FBTyxDQUFzQjtJQUVwQyxZQUFZLGdCQUFxQztRQUMvQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLHlCQUF5QixDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0lBQ3hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBSZXNwb25zZVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIGRldGFpbHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgY29uc3RydWN0b3IodmFsaWRhdGlvblJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHN1cGVyKFwiUmVzcG9uc2UgZG9lc24ndCBtYXRjaCB0aGUgc2NoZW1hXCIpO1xuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZVZhbGlkYXRpb25FcnJvcic7XG4gICAgdGhpcy5kZXRhaWxzID0gdmFsaWRhdGlvblJlc3VsdC5lcnJvcjtcbiAgfVxufVxuIl19
|
package/dist/fastify.d.ts
CHANGED
|
@@ -1,31 +1,16 @@
|
|
|
1
|
+
import 'zod-openapi/extend';
|
|
1
2
|
import { FastifyWithZod, SwaggerOpts } from './types';
|
|
2
3
|
/**
|
|
3
4
|
* creates an instance of Fastify with Zod validation library as validator and
|
|
4
5
|
* type provider
|
|
5
|
-
*
|
|
6
|
-
* @param {string} [swaggerPath='/swagger']
|
|
7
|
-
* @param {boolean} [jsonHandler=JsonBigIntFactory({
|
|
8
|
-
* alwaysParseAsBig: false,
|
|
9
|
-
* useNativeBigInt: true,
|
|
10
|
-
* })]
|
|
11
|
-
* @param {*} [opts={ logger: true }]
|
|
12
|
-
* @return {Promise<
|
|
13
|
-
* FastifyInstance<
|
|
14
|
-
* http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>,
|
|
15
|
-
* http.IncomingMessage,
|
|
16
|
-
* http.ServerResponse<http.IncomingMessage>,
|
|
17
|
-
* FastifyBaseLogger,
|
|
18
|
-
* ZodTypeProvider
|
|
19
|
-
* >
|
|
20
|
-
* >}
|
|
21
6
|
*/
|
|
22
|
-
export declare const
|
|
7
|
+
export declare const makeFastify: (swaggerOpts?: SwaggerOpts, opts?: {
|
|
23
8
|
logger: boolean;
|
|
24
9
|
}, jsonHandler?: {
|
|
25
|
-
parse: (text: string, reviver?: (
|
|
10
|
+
parse: (text: string, reviver?: (this: any, key: string, value: any) => any) => any;
|
|
26
11
|
stringify: {
|
|
27
|
-
(value: any, replacer?: (
|
|
28
|
-
(value: any, replacer?: (
|
|
12
|
+
(value: any, replacer?: (this: any, key: string, value: any) => any, space?: string | number): string;
|
|
13
|
+
(value: any, replacer?: (number | string)[] | null, space?: string | number): string;
|
|
29
14
|
};
|
|
30
15
|
}) => Promise<FastifyWithZod>;
|
|
31
16
|
//# sourceMappingURL=fastify.d.ts.map
|
package/dist/fastify.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../lib/fastify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../lib/fastify.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAU5B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKtD;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,cAAa,WAKZ,EACD;;CAAuB,EACvB;;;;;;CAIE,KACD,OAAO,CAAC,cAAc,CAoBxB,CAAC"}
|
package/dist/fastify.js
CHANGED
|
@@ -1,151 +1,31 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import 'zod-openapi/extend';
|
|
2
|
+
import { fastifyZodOpenApiPlugin, validatorCompiler, } from 'fastify-zod-openapi';
|
|
3
3
|
import Fastify from 'fastify';
|
|
4
|
-
import { jsonSchemaTransform, validatorCompiler, } from 'fastify-type-provider-zod';
|
|
5
4
|
import JsonBigIntFactory from 'json-bigint';
|
|
5
|
+
import { registerSwagger } from './swagger';
|
|
6
|
+
import { makeJsonParser } from './jsonParser';
|
|
7
|
+
import { makeSerializerCompiler } from './serializerCompiler';
|
|
6
8
|
/**
|
|
7
9
|
* creates an instance of Fastify with Zod validation library as validator and
|
|
8
10
|
* type provider
|
|
9
|
-
*
|
|
10
|
-
* @param {string} [swaggerPath='/swagger']
|
|
11
|
-
* @param {boolean} [jsonHandler=JsonBigIntFactory({
|
|
12
|
-
* alwaysParseAsBig: false,
|
|
13
|
-
* useNativeBigInt: true,
|
|
14
|
-
* })]
|
|
15
|
-
* @param {*} [opts={ logger: true }]
|
|
16
|
-
* @return {Promise<
|
|
17
|
-
* FastifyInstance<
|
|
18
|
-
* http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>,
|
|
19
|
-
* http.IncomingMessage,
|
|
20
|
-
* http.ServerResponse<http.IncomingMessage>,
|
|
21
|
-
* FastifyBaseLogger,
|
|
22
|
-
* ZodTypeProvider
|
|
23
|
-
* >
|
|
24
|
-
* >}
|
|
25
11
|
*/
|
|
26
|
-
export const
|
|
12
|
+
export const makeFastify = async (swaggerOpts = {
|
|
27
13
|
path: '/swagger',
|
|
28
|
-
title: '',
|
|
14
|
+
title: 'api',
|
|
29
15
|
description: '',
|
|
30
16
|
version: '0.0.1',
|
|
31
17
|
}, opts = { logger: true }, jsonHandler = JsonBigIntFactory({
|
|
32
18
|
alwaysParseAsBig: false,
|
|
33
19
|
useNativeBigInt: true,
|
|
20
|
+
storeAsString: true,
|
|
34
21
|
})) => {
|
|
35
22
|
const fastify = Fastify(opts).withTypeProvider();
|
|
36
23
|
fastify.setValidatorCompiler(validatorCompiler);
|
|
37
|
-
const serializerCompiler =
|
|
24
|
+
const serializerCompiler = makeSerializerCompiler(jsonHandler);
|
|
38
25
|
fastify.setSerializerCompiler(serializerCompiler);
|
|
39
|
-
fastify.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
done(null, json);
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
if (err instanceof Error || err === null) {
|
|
46
|
-
done(err, undefined);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
const wrappedErr = new Error(`An unexpected error occurred while trying to parse request body`, { cause: err });
|
|
50
|
-
done(wrappedErr, undefined);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
await addSwaggerRoute(fastify, swaggerOpts);
|
|
26
|
+
await fastify.register(fastifyZodOpenApiPlugin);
|
|
27
|
+
fastify.addContentTypeParser('application/json', { parseAs: 'string' }, makeJsonParser(jsonHandler));
|
|
28
|
+
await registerSwagger(fastify, swaggerOpts);
|
|
55
29
|
return fastify;
|
|
56
30
|
};
|
|
57
|
-
|
|
58
|
-
* creates a Fastify serializer compiler based on Zod validation library and
|
|
59
|
-
* using the passed json parser/serializer
|
|
60
|
-
*
|
|
61
|
-
* @param {typeof JSON} jsonHandler
|
|
62
|
-
* @return {(FastifySerializerCompiler<
|
|
63
|
-
* | ZodAny
|
|
64
|
-
* | {
|
|
65
|
-
* properties: ZodAny;
|
|
66
|
-
* }
|
|
67
|
-
* >)}
|
|
68
|
-
*/
|
|
69
|
-
const getSerializerCompiler = (jsonHandler) => {
|
|
70
|
-
const hasOwnProperty = (obj, prop) => {
|
|
71
|
-
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
72
|
-
};
|
|
73
|
-
/**
|
|
74
|
-
* resolve the right schema to be used
|
|
75
|
-
*
|
|
76
|
-
* @param {(ZodAny | { properties: ZodAny })} maybeSchema
|
|
77
|
-
* @return {Pick<ZodAny, 'safeParse'>}
|
|
78
|
-
*/
|
|
79
|
-
function resolveSchema(maybeSchema) {
|
|
80
|
-
if (hasOwnProperty(maybeSchema, 'safeParse')) {
|
|
81
|
-
return maybeSchema;
|
|
82
|
-
}
|
|
83
|
-
if (hasOwnProperty(maybeSchema, 'properties')) {
|
|
84
|
-
return maybeSchema.properties;
|
|
85
|
-
}
|
|
86
|
-
throw new Error(`Invalid schema passed: ${JSON.stringify(maybeSchema)}`);
|
|
87
|
-
}
|
|
88
|
-
class ResponseValidationError extends Error {
|
|
89
|
-
details;
|
|
90
|
-
constructor(validationResult) {
|
|
91
|
-
super("Response doesn't match the schema");
|
|
92
|
-
this.name = 'ResponseValidationError';
|
|
93
|
-
this.details = validationResult.error;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* creates a serializer compiler based on Zod library
|
|
98
|
-
*
|
|
99
|
-
* @param { schema: maybeSchema }
|
|
100
|
-
*/
|
|
101
|
-
const serializerCompiler = ({ schema: maybeSchema }) => (data) => {
|
|
102
|
-
const schema = resolveSchema(maybeSchema);
|
|
103
|
-
const result = schema.safeParse(data);
|
|
104
|
-
if (result.success) {
|
|
105
|
-
return jsonHandler.stringify(result.data);
|
|
106
|
-
}
|
|
107
|
-
throw new ResponseValidationError(result);
|
|
108
|
-
};
|
|
109
|
-
return serializerCompiler;
|
|
110
|
-
};
|
|
111
|
-
/**
|
|
112
|
-
* adds swagger to the fastify instance
|
|
113
|
-
*
|
|
114
|
-
* @param {Awaited<ReturnType<typeof createFastify>>} fastify
|
|
115
|
-
* @param {string} path
|
|
116
|
-
*/
|
|
117
|
-
const addSwaggerRoute = async (fastify, opts) => {
|
|
118
|
-
fastify.register(swagger, {
|
|
119
|
-
openapi: {
|
|
120
|
-
info: {
|
|
121
|
-
title: opts.title,
|
|
122
|
-
description: opts.description,
|
|
123
|
-
version: opts.version,
|
|
124
|
-
},
|
|
125
|
-
servers: [],
|
|
126
|
-
},
|
|
127
|
-
transform: jsonSchemaTransform,
|
|
128
|
-
});
|
|
129
|
-
fastify.register(swaggerUi, {
|
|
130
|
-
routePrefix: opts.path,
|
|
131
|
-
uiConfig: {
|
|
132
|
-
docExpansion: 'full',
|
|
133
|
-
deepLinking: false,
|
|
134
|
-
},
|
|
135
|
-
uiHooks: {
|
|
136
|
-
onRequest: function (request, reply, next) {
|
|
137
|
-
next();
|
|
138
|
-
},
|
|
139
|
-
preHandler: function (request, reply, next) {
|
|
140
|
-
next();
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
staticCSP: true,
|
|
144
|
-
transformStaticCSP: (header) => header,
|
|
145
|
-
transformSpecification: (swaggerObject, request, reply) => {
|
|
146
|
-
return swaggerObject;
|
|
147
|
-
},
|
|
148
|
-
transformSpecificationClone: true,
|
|
149
|
-
});
|
|
150
|
-
};
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdGlmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9mYXN0aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sT0FBK0MsTUFBTSxTQUFTLENBQUM7QUFDdEUsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixpQkFBaUIsR0FDbEIsTUFBTSwyQkFBMkIsQ0FBQztBQUduQyxPQUFPLGlCQUFpQixNQUFNLGFBQWEsQ0FBQztBQUk1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQ2hDLGNBQTJCO0lBQ3pCLElBQUksRUFBRSxVQUFVO0lBQ2hCLEtBQUssRUFBRSxFQUFFO0lBQ1QsV0FBVyxFQUFFLEVBQUU7SUFDZixPQUFPLEVBQUUsT0FBTztDQUNqQixFQUNELElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFDdkIsV0FBVyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyxFQUN1QixFQUFFO0lBQzNCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBbUIsQ0FBQztJQUNsRSxPQUFPLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUVoRCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRWxELE9BQU8sQ0FBQyxvQkFBb0IsQ0FDMUIsa0JBQWtCLEVBQ2xCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUNyQixVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSTtR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Q2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCO1lBQ0QsT0FBTyxFQUFFLEVBQUU7U0FDWjtRQUNELFNBQVMsRUFBRSxtQkFBbUI7S0FDL0IsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7UUFDMUIsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJO1FBQ3RCLFFBQVEsRUFBRTtZQUNSLFlBQVksRUFBRSxNQUFNO1lBQ3BCLFdBQVcsRUFBRSxLQUFLO1NBQ25CO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsU0FBUyxFQUFFLFVBQVUsT0FBWSxFQUFFLEtBQVUsRUFBRSxJQUFnQjtnQkFDN0QsSUFBSSxFQUFFLENBQUM7WUFDVCxDQUFDO1lBQ0QsVUFBVSxFQUFFLFVBQVUsT0FBWSxFQUFFLEtBQVUsRUFBRSxJQUFnQjtnQkFDOUQsSUFBSSxFQUFFLENBQUM7WUFDVCxDQUFDO1NBQ0Y7UUFDRCxTQUFTLEVBQUUsSUFBSTtRQUNmLGtCQUFrQixFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNO1FBQzNDLHNCQUFzQixFQUFFLENBQUMsYUFBa0IsRUFBRSxPQUFZLEVBQUUsS0FBVSxFQUFFLEVBQUU7WUFDdkUsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUNELDJCQUEyQixFQUFFLElBQUk7S0FDbEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN3YWdnZXIgZnJvbSAnQGZhc3RpZnkvc3dhZ2dlcic7XG5pbXBvcnQgc3dhZ2dlclVpIGZyb20gJ0BmYXN0aWZ5L3N3YWdnZXItdWknO1xuaW1wb3J0IEZhc3RpZnksIHsgRmFzdGlmeUJhc2VMb2dnZXIsIEZhc3RpZnlJbnN0YW5jZSB9IGZyb20gJ2Zhc3RpZnknO1xuaW1wb3J0IHtcbiAgWm9kVHlwZVByb3ZpZGVyLFxuICBqc29uU2NoZW1hVHJhbnNmb3JtLFxuICB2YWxpZGF0b3JDb21waWxlcixcbn0gZnJvbSAnZmFzdGlmeS10eXBlLXByb3ZpZGVyLXpvZCc7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlTZXJpYWxpemVyQ29tcGlsZXIgfSBmcm9tICdmYXN0aWZ5L3R5cGVzL3NjaGVtYSc7XG5pbXBvcnQgKiBhcyBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCB0eXBlIHsgWm9kQW55IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEZhc3RpZnlXaXRoWm9kLCBTd2FnZ2VyT3B0cyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRmFzdGlmeSB3aXRoIFpvZCB2YWxpZGF0aW9uIGxpYnJhcnkgYXMgdmFsaWRhdG9yIGFuZFxuICogdHlwZSBwcm92aWRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3dhZ2dlclBhdGg9Jy9zd2FnZ2VyJ11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2pzb25IYW5kbGVyPUpzb25CaWdJbnRGYWN0b3J5KHtcbiAqICAgICBhbHdheXNQYXJzZUFzQmlnOiBmYWxzZSxcbiAqICAgICB1c2VOYXRpdmVCaWdJbnQ6IHRydWUsXG4gKiAgIH0pXVxuICogQHBhcmFtIHsqfSBbb3B0cz17IGxvZ2dlcjogdHJ1ZSB9XVxuICogQHJldHVybiB7UHJvbWlzZTxcbiAqICAgRmFzdGlmeUluc3RhbmNlPFxuICogICAgIGh0dHAuU2VydmVyPHR5cGVvZiBodHRwLkluY29taW5nTWVzc2FnZSwgdHlwZW9mIGh0dHAuU2VydmVyUmVzcG9uc2U+LFxuICogICAgIGh0dHAuSW5jb21pbmdNZXNzYWdlLFxuICogICAgIGh0dHAuU2VydmVyUmVzcG9uc2U8aHR0cC5JbmNvbWluZ01lc3NhZ2U+LFxuICogICAgIEZhc3RpZnlCYXNlTG9nZ2VyLFxuICogICAgIFpvZFR5cGVQcm92aWRlclxuICogICA+XG4gKiA+fVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRmFzdGlmeSA9IGFzeW5jIChcbiAgc3dhZ2dlck9wdHM6IFN3YWdnZXJPcHRzID0ge1xuICAgIHBhdGg6ICcvc3dhZ2dlcicsXG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICB2ZXJzaW9uOiAnMC4wLjEnLFxuICB9LFxuICBvcHRzID0geyBsb2dnZXI6IHRydWUgfSxcbiAganNvbkhhbmRsZXIgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gICAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsXG4gICAgdXNlTmF0aXZlQmlnSW50OiB0cnVlLFxuICB9KVxuKTogUHJvbWlzZTxGYXN0aWZ5V2l0aFpvZD4gPT4ge1xuICBjb25zdCBmYXN0aWZ5ID0gRmFzdGlmeShvcHRzKS53aXRoVHlwZVByb3ZpZGVyPFpvZFR5cGVQcm92aWRlcj4oKTtcbiAgZmFzdGlmeS5zZXRWYWxpZGF0b3JDb21waWxlcih2YWxpZGF0b3JDb21waWxlcik7XG5cbiAgY29uc3Qgc2VyaWFsaXplckNvbXBpbGVyID0gZ2V0U2VyaWFsaXplckNvbXBpbGVyKGpzb25IYW5kbGVyKTtcbiAgZmFzdGlmeS5zZXRTZXJpYWxpemVyQ29tcGlsZXIoc2VyaWFsaXplckNvbXBpbGVyKTtcblxuICBmYXN0aWZ5LmFkZENvbnRlbnRUeXBlUGFyc2VyPHN0cmluZz4oXG4gICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIHsgcGFyc2VBczogJ3N0cmluZycgfSxcbiAgICBmdW5jdGlvbiAocmVxLCBib2R5LCBkb25lKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0ganNvbkhhbmRsZXIucGFyc2UoYm9keSk7XG4gICAgICAgIGRvbmUobnVsbCwganNvbik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yIHx8IGVyciA9PT0gbnVsbCkge1xuICAgICAgICAgIGRvbmUoZXJyLCB1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRFcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcGFyc2UgcmVxdWVzdCBib2R5YCxcbiAgICAgICAgICAgIHsgY2F1c2U6IGVyciB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBkb25lKHdyYXBwZWRFcnIsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgYXdhaXQgYWRkU3dhZ2dlclJvdXRlKGZhc3RpZnksIHN3YWdnZXJPcHRzKTtcbiAgcmV0dXJuIGZhc3RpZnk7XG59O1xuXG4vKipcbiAqIGNyZWF0ZXMgYSBGYXN0aWZ5IHNlcmlhbGl6ZXIgY29tcGlsZXIgYmFzZWQgb24gWm9kIHZhbGlkYXRpb24gbGlicmFyeSBhbmRcbiAqIHVzaW5nIHRoZSBwYXNzZWQganNvbiBwYXJzZXIvc2VyaWFsaXplclxuICpcbiAqIEBwYXJhbSB7dHlwZW9mIEpTT059IGpzb25IYW5kbGVyXG4gKiBAcmV0dXJuIHsoRmFzdGlmeVNlcmlhbGl6ZXJDb21waWxlcjxcbiAqICAgfCBab2RBbnlcbiAqICAgfCB7XG4gKiAgICAgICBwcm9wZXJ0aWVzOiBab2RBbnk7XG4gKiAgICAgfVxuICogPil9XG4gKi9cbmNvbnN0IGdldFNlcmlhbGl6ZXJDb21waWxlciA9IChcbiAganNvbkhhbmRsZXI6IFJldHVyblR5cGU8dHlwZW9mIEpzb25CaWdJbnRGYWN0b3J5PlxuKTogRmFzdGlmeVNlcmlhbGl6ZXJDb21waWxlcjxcbiAgfCBab2RBbnlcbiAgfCB7XG4gICAgICBwcm9wZXJ0aWVzOiBab2RBbnk7XG4gICAgfVxuPiA9PiB7XG4gIGNvbnN0IGhhc093blByb3BlcnR5ID0gPFQsIEsgZXh0ZW5kcyBQcm9wZXJ0eUtleT4oXG4gICAgb2JqOiBULFxuICAgIHByb3A6IEtcbiAgKTogb2JqIGlzIFQgJiBSZWNvcmQ8SywgYW55PiA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXNvbHZlIHRoZSByaWdodCBzY2hlbWEgdG8gYmUgdXNlZFxuICAgKlxuICAgKiBAcGFyYW0geyhab2RBbnkgfCB7IHByb3BlcnRpZXM6IFpvZEFueSB9KX0gbWF5YmVTY2hlbWFcbiAgICogQHJldHVybiB7UGljazxab2RBbnksICdzYWZlUGFyc2UnPn1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoXG4gICAgbWF5YmVTY2hlbWE6IFpvZEFueSB8IHsgcHJvcGVydGllczogWm9kQW55IH1cbiAgKTogUGljazxab2RBbnksICdzYWZlUGFyc2UnPiB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG1heWJlU2NoZW1hLCAnc2FmZVBhcnNlJykpIHtcbiAgICAgIHJldHVybiBtYXliZVNjaGVtYTtcbiAgICB9XG4gICAgaWYgKGhhc093blByb3BlcnR5KG1heWJlU2NoZW1hLCAncHJvcGVydGllcycpKSB7XG4gICAgICByZXR1cm4gbWF5YmVTY2hlbWEucHJvcGVydGllcztcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNjaGVtYSBwYXNzZWQ6ICR7SlNPTi5zdHJpbmdpZnkobWF5YmVTY2hlbWEpfWApO1xuICB9XG5cbiAgY2xhc3MgUmVzcG9uc2VWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGRldGFpbHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgICBjb25zdHJ1Y3Rvcih2YWxpZGF0aW9uUmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgICBzdXBlcihcIlJlc3BvbnNlIGRvZXNuJ3QgbWF0Y2ggdGhlIHNjaGVtYVwiKTtcbiAgICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZVZhbGlkYXRpb25FcnJvcic7XG4gICAgICB0aGlzLmRldGFpbHMgPSB2YWxpZGF0aW9uUmVzdWx0LmVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGVzIGEgc2VyaWFsaXplciBjb21waWxlciBiYXNlZCBvbiBab2QgbGlicmFyeVxuICAgKlxuICAgKiBAcGFyYW0geyBzY2hlbWE6IG1heWJlU2NoZW1hIH1cbiAgICovXG4gIGNvbnN0IHNlcmlhbGl6ZXJDb21waWxlcjogRmFzdGlmeVNlcmlhbGl6ZXJDb21waWxlcjxcbiAgICBab2RBbnkgfCB7IHByb3BlcnRpZXM6IFpvZEFueSB9XG4gID4gPVxuICAgICh7IHNjaGVtYTogbWF5YmVTY2hlbWEgfSkgPT5cbiAgICAoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hOiBQaWNrPFpvZEFueSwgJ3NhZmVQYXJzZSc+ID0gcmVzb2x2ZVNjaGVtYShtYXliZVNjaGVtYSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNjaGVtYS5zYWZlUGFyc2UoZGF0YSk7XG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGpzb25IYW5kbGVyLnN0cmluZ2lmeShyZXN1bHQuZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBSZXNwb25zZVZhbGlkYXRpb25FcnJvcihyZXN1bHQpO1xuICAgIH07XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZXJDb21waWxlcjtcbn07XG5cbi8qKlxuICogYWRkcyBzd2FnZ2VyIHRvIHRoZSBmYXN0aWZ5IGluc3RhbmNlXG4gKlxuICogQHBhcmFtIHtBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUZhc3RpZnk+Pn0gZmFzdGlmeVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqL1xuY29uc3QgYWRkU3dhZ2dlclJvdXRlID0gYXN5bmMgKGZhc3RpZnk6IEZhc3RpZnlXaXRoWm9kLCBvcHRzOiBTd2FnZ2VyT3B0cykgPT4ge1xuICBmYXN0aWZ5LnJlZ2lzdGVyKHN3YWdnZXIsIHtcbiAgICBvcGVuYXBpOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIHRpdGxlOiBvcHRzLnRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0cy5kZXNjcmlwdGlvbixcbiAgICAgICAgdmVyc2lvbjogb3B0cy52ZXJzaW9uLFxuICAgICAgfSxcbiAgICAgIHNlcnZlcnM6IFtdLFxuICAgIH0sXG4gICAgdHJhbnNmb3JtOiBqc29uU2NoZW1hVHJhbnNmb3JtLFxuICB9KTtcblxuICBmYXN0aWZ5LnJlZ2lzdGVyKHN3YWdnZXJVaSwge1xuICAgIHJvdXRlUHJlZml4OiBvcHRzLnBhdGgsXG4gICAgdWlDb25maWc6IHtcbiAgICAgIGRvY0V4cGFuc2lvbjogJ2Z1bGwnLFxuICAgICAgZGVlcExpbmtpbmc6IGZhbHNlLFxuICAgIH0sXG4gICAgdWlIb29rczoge1xuICAgICAgb25SZXF1ZXN0OiBmdW5jdGlvbiAocmVxdWVzdDogYW55LCByZXBseTogYW55LCBuZXh0OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0sXG4gICAgICBwcmVIYW5kbGVyOiBmdW5jdGlvbiAocmVxdWVzdDogYW55LCByZXBseTogYW55LCBuZXh0OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzdGF0aWNDU1A6IHRydWUsXG4gICAgdHJhbnNmb3JtU3RhdGljQ1NQOiAoaGVhZGVyOiBhbnkpID0+IGhlYWRlcixcbiAgICB0cmFuc2Zvcm1TcGVjaWZpY2F0aW9uOiAoc3dhZ2dlck9iamVjdDogYW55LCByZXF1ZXN0OiBhbnksIHJlcGx5OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBzd2FnZ2VyT2JqZWN0O1xuICAgIH0sXG4gICAgdHJhbnNmb3JtU3BlY2lmaWNhdGlvbkNsb25lOiB0cnVlLFxuICB9KTtcbn07XG4iXX0=
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdGlmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9mYXN0aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sb0JBQW9CLENBQUM7QUFFNUIsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxpQkFBaUIsTUFBTSxhQUFhLENBQUM7QUFHNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTlEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQzlCLGNBQTJCO0lBQ3pCLElBQUksRUFBRSxVQUFVO0lBQ2hCLEtBQUssRUFBRSxLQUFLO0lBQ1osV0FBVyxFQUFFLEVBQUU7SUFDZixPQUFPLEVBQUUsT0FBTztDQUNqQixFQUNELElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFDdkIsV0FBVyxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsZUFBZSxFQUFFLElBQUk7SUFDckIsYUFBYSxFQUFFLElBQUk7Q0FDcEIsQ0FBQyxFQUN1QixFQUFFO0lBQzNCLE1BQU0sT0FBTyxHQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBaUMsQ0FBQztJQUVsRSxPQUFPLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUVoRCxNQUFNLGtCQUFrQixHQUFHLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9ELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRWxELE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBRWhELE9BQU8sQ0FBQyxvQkFBb0IsQ0FDMUIsa0JBQWtCLEVBQ2xCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUNyQixjQUFjLENBQUMsV0FBVyxDQUFDLENBQzVCLENBQUM7SUFFRixNQUFNLGVBQWUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFNUMsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICd6b2Qtb3BlbmFwaS9leHRlbmQnO1xuXG5pbXBvcnQge1xuICB0eXBlIEZhc3RpZnlab2RPcGVuQXBpVHlwZVByb3ZpZGVyLFxuICBmYXN0aWZ5Wm9kT3BlbkFwaVBsdWdpbixcbiAgdmFsaWRhdG9yQ29tcGlsZXIsXG59IGZyb20gJ2Zhc3RpZnktem9kLW9wZW5hcGknO1xuaW1wb3J0IEZhc3RpZnkgZnJvbSAnZmFzdGlmeSc7XG5pbXBvcnQgSnNvbkJpZ0ludEZhY3RvcnkgZnJvbSAnanNvbi1iaWdpbnQnO1xuXG5pbXBvcnQgeyBGYXN0aWZ5V2l0aFpvZCwgU3dhZ2dlck9wdHMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHJlZ2lzdGVyU3dhZ2dlciB9IGZyb20gJy4vc3dhZ2dlcic7XG5pbXBvcnQgeyBtYWtlSnNvblBhcnNlciB9IGZyb20gJy4vanNvblBhcnNlcic7XG5pbXBvcnQgeyBtYWtlU2VyaWFsaXplckNvbXBpbGVyIH0gZnJvbSAnLi9zZXJpYWxpemVyQ29tcGlsZXInO1xuXG4vKipcbiAqIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRmFzdGlmeSB3aXRoIFpvZCB2YWxpZGF0aW9uIGxpYnJhcnkgYXMgdmFsaWRhdG9yIGFuZFxuICogdHlwZSBwcm92aWRlclxuICovXG5leHBvcnQgY29uc3QgbWFrZUZhc3RpZnkgPSBhc3luYyAoXG4gIHN3YWdnZXJPcHRzOiBTd2FnZ2VyT3B0cyA9IHtcbiAgICBwYXRoOiAnL3N3YWdnZXInLFxuICAgIHRpdGxlOiAnYXBpJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgdmVyc2lvbjogJzAuMC4xJyxcbiAgfSxcbiAgb3B0cyA9IHsgbG9nZ2VyOiB0cnVlIH0sXG4gIGpzb25IYW5kbGVyID0gSnNvbkJpZ0ludEZhY3Rvcnkoe1xuICAgIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLFxuICAgIHVzZU5hdGl2ZUJpZ0ludDogdHJ1ZSxcbiAgICBzdG9yZUFzU3RyaW5nOiB0cnVlLFxuICB9KSxcbik6IFByb21pc2U8RmFzdGlmeVdpdGhab2Q+ID0+IHtcbiAgY29uc3QgZmFzdGlmeSA9XG4gICAgRmFzdGlmeShvcHRzKS53aXRoVHlwZVByb3ZpZGVyPEZhc3RpZnlab2RPcGVuQXBpVHlwZVByb3ZpZGVyPigpO1xuXG4gIGZhc3RpZnkuc2V0VmFsaWRhdG9yQ29tcGlsZXIodmFsaWRhdG9yQ29tcGlsZXIpO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZXJDb21waWxlciA9IG1ha2VTZXJpYWxpemVyQ29tcGlsZXIoanNvbkhhbmRsZXIpO1xuICBmYXN0aWZ5LnNldFNlcmlhbGl6ZXJDb21waWxlcihzZXJpYWxpemVyQ29tcGlsZXIpO1xuXG4gIGF3YWl0IGZhc3RpZnkucmVnaXN0ZXIoZmFzdGlmeVpvZE9wZW5BcGlQbHVnaW4pO1xuXG4gIGZhc3RpZnkuYWRkQ29udGVudFR5cGVQYXJzZXI8c3RyaW5nPihcbiAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgeyBwYXJzZUFzOiAnc3RyaW5nJyB9LFxuICAgIG1ha2VKc29uUGFyc2VyKGpzb25IYW5kbGVyKSxcbiAgKTtcblxuICBhd2FpdCByZWdpc3RlclN3YWdnZXIoZmFzdGlmeSwgc3dhZ2dlck9wdHMpO1xuXG4gIHJldHVybiBmYXN0aWZ5O1xufTtcbiJdfQ==
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACzE,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export * from './dataTypes';
|
|
2
1
|
export * from './fastify';
|
|
3
2
|
export * from './types';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IEZhc3RpZnlab2RPcGVuQXBpVHlwZVByb3ZpZGVyIH0gZnJvbSAnZmFzdGlmeS16b2Qtb3BlbmFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2Zhc3RpZnknO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ContentTypeParserDoneFunction } from 'fastify/types/content-type-parser';
|
|
2
|
+
import JsonBigIntFactory from 'json-bigint';
|
|
3
|
+
export declare const makeJsonParser: (jsonHandler: ReturnType<typeof JsonBigIntFactory>) => (req: unknown, body: string, done: ContentTypeParserDoneFunction) => void;
|
|
4
|
+
//# sourceMappingURL=jsonParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonParser.d.ts","sourceRoot":"","sources":["../lib/jsonParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,iBAAiB,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,cAAc,GACzB,aAAa,UAAU,CAAC,OAAO,iBAAiB,CAAC,MAEzC,KAAK,OAAO,EAAE,MAAM,MAAM,EAAE,MAAM,6BAA6B,SAgBxE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const makeJsonParser = (jsonHandler) => {
|
|
2
|
+
return (req, body, done) => {
|
|
3
|
+
try {
|
|
4
|
+
const json = jsonHandler.parse(body);
|
|
5
|
+
done(null, json);
|
|
6
|
+
}
|
|
7
|
+
catch (err) {
|
|
8
|
+
if (err instanceof Error || err === null) {
|
|
9
|
+
done(err, undefined);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
const wrappedErr = new Error(`An unexpected error occurred while trying to parse request body`, { cause: err });
|
|
13
|
+
done(wrappedErr, undefined);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvblBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9qc29uUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUM1QixXQUFpRCxFQUNqRCxFQUFFO0lBQ0YsT0FBTyxDQUFDLEdBQVksRUFBRSxJQUFZLEVBQUUsSUFBbUMsRUFBRSxFQUFFO1FBQ3pFLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksR0FBRyxZQUFZLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUMxQixpRUFBaUUsRUFDakUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQ2YsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudFR5cGVQYXJzZXJEb25lRnVuY3Rpb24gfSBmcm9tICdmYXN0aWZ5L3R5cGVzL2NvbnRlbnQtdHlwZS1wYXJzZXInO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcblxuZXhwb3J0IGNvbnN0IG1ha2VKc29uUGFyc2VyID0gKFxuICBqc29uSGFuZGxlcjogUmV0dXJuVHlwZTx0eXBlb2YgSnNvbkJpZ0ludEZhY3Rvcnk+LFxuKSA9PiB7XG4gIHJldHVybiAocmVxOiB1bmtub3duLCBib2R5OiBzdHJpbmcsIGRvbmU6IENvbnRlbnRUeXBlUGFyc2VyRG9uZUZ1bmN0aW9uKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb24gPSBqc29uSGFuZGxlci5wYXJzZShib2R5KTtcbiAgICAgIGRvbmUobnVsbCwganNvbik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgfHwgZXJyID09PSBudWxsKSB7XG4gICAgICAgIGRvbmUoZXJyLCB1bmRlZmluZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZEVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcGFyc2UgcmVxdWVzdCBib2R5YCxcbiAgICAgICAgICB7IGNhdXNlOiBlcnIgfSxcbiAgICAgICAgKTtcbiAgICAgICAgZG9uZSh3cmFwcGVkRXJyLCB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FastifySerializerCompiler } from 'fastify/types/schema';
|
|
2
|
+
import { ZodAny } from 'zod';
|
|
3
|
+
import JsonBigIntFactory from 'json-bigint';
|
|
4
|
+
type SerType = FastifySerializerCompiler<ZodAny | {
|
|
5
|
+
properties: ZodAny;
|
|
6
|
+
}>;
|
|
7
|
+
type JsonHandler = ReturnType<typeof JsonBigIntFactory>;
|
|
8
|
+
/**
|
|
9
|
+
* creates a Fastify serializer compiler based on Zod validation library and
|
|
10
|
+
* using the passed json parser/serializer
|
|
11
|
+
*/
|
|
12
|
+
export declare const makeSerializerCompiler: (jsonHandler: JsonHandler) => SerType;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=serializerCompiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializerCompiler.d.ts","sourceRoot":"","sources":["../lib/serializerCompiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,iBAAiB,MAAM,aAAa,CAAC;AAK5C,KAAK,OAAO,GAAG,yBAAyB,CAAC,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC1E,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAChC,aAAa,WAAW,KAAG,OAW3B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ResponseValidationError } from './error';
|
|
2
|
+
import { hasOwnProperty } from './utils';
|
|
3
|
+
/**
|
|
4
|
+
* creates a Fastify serializer compiler based on Zod validation library and
|
|
5
|
+
* using the passed json parser/serializer
|
|
6
|
+
*/
|
|
7
|
+
export const makeSerializerCompiler = (jsonHandler) => (schemaDef) => (data) => {
|
|
8
|
+
const schema = resolveSchema(schemaDef.schema);
|
|
9
|
+
const result = schema.safeParse(data);
|
|
10
|
+
if (result.success) {
|
|
11
|
+
return jsonHandler.stringify(result.data);
|
|
12
|
+
}
|
|
13
|
+
throw new ResponseValidationError(result);
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* resolve the right schema to be used
|
|
17
|
+
*/
|
|
18
|
+
const resolveSchema = (maybeSchema) => {
|
|
19
|
+
if (hasOwnProperty(maybeSchema, 'safeParse')) {
|
|
20
|
+
return maybeSchema;
|
|
21
|
+
}
|
|
22
|
+
if (hasOwnProperty(maybeSchema, 'properties')) {
|
|
23
|
+
return maybeSchema.properties;
|
|
24
|
+
}
|
|
25
|
+
throw new Error(`Invalid schema passed: ${JSON.stringify(maybeSchema)}`);
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplckNvbXBpbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL3NlcmlhbGl6ZXJDb21waWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUt6Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FDakMsQ0FBQyxXQUF3QixFQUFXLEVBQUUsQ0FDdEMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUNkLENBQUMsSUFBSSxFQUFFLEVBQUU7SUFDUCxNQUFNLE1BQU0sR0FBOEIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUxRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFFSjs7R0FFRztBQUNILE1BQU0sYUFBYSxHQUFHLENBQ3BCLFdBQTRDLEVBQ2pCLEVBQUU7SUFDN0IsSUFBSSxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDN0MsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmFzdGlmeVNlcmlhbGl6ZXJDb21waWxlciB9IGZyb20gJ2Zhc3RpZnkvdHlwZXMvc2NoZW1hJztcbmltcG9ydCB7IFpvZEFueSB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgSnNvbkJpZ0ludEZhY3RvcnkgZnJvbSAnanNvbi1iaWdpbnQnO1xuXG5pbXBvcnQgeyBSZXNwb25zZVZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IHsgaGFzT3duUHJvcGVydHkgfSBmcm9tICcuL3V0aWxzJztcblxudHlwZSBTZXJUeXBlID0gRmFzdGlmeVNlcmlhbGl6ZXJDb21waWxlcjxab2RBbnkgfCB7IHByb3BlcnRpZXM6IFpvZEFueSB9PjtcbnR5cGUgSnNvbkhhbmRsZXIgPSBSZXR1cm5UeXBlPHR5cGVvZiBKc29uQmlnSW50RmFjdG9yeT47XG5cbi8qKlxuICogY3JlYXRlcyBhIEZhc3RpZnkgc2VyaWFsaXplciBjb21waWxlciBiYXNlZCBvbiBab2QgdmFsaWRhdGlvbiBsaWJyYXJ5IGFuZFxuICogdXNpbmcgdGhlIHBhc3NlZCBqc29uIHBhcnNlci9zZXJpYWxpemVyXG4gKi9cbmV4cG9ydCBjb25zdCBtYWtlU2VyaWFsaXplckNvbXBpbGVyID1cbiAgKGpzb25IYW5kbGVyOiBKc29uSGFuZGxlcik6IFNlclR5cGUgPT5cbiAgKHNjaGVtYURlZikgPT5cbiAgKGRhdGEpID0+IHtcbiAgICBjb25zdCBzY2hlbWE6IFBpY2s8Wm9kQW55LCAnc2FmZVBhcnNlJz4gPSByZXNvbHZlU2NoZW1hKHNjaGVtYURlZi5zY2hlbWEpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gc2NoZW1hLnNhZmVQYXJzZShkYXRhKTtcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiBqc29uSGFuZGxlci5zdHJpbmdpZnkocmVzdWx0LmRhdGEpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBSZXNwb25zZVZhbGlkYXRpb25FcnJvcihyZXN1bHQpO1xuICB9O1xuXG4vKipcbiAqIHJlc29sdmUgdGhlIHJpZ2h0IHNjaGVtYSB0byBiZSB1c2VkXG4gKi9cbmNvbnN0IHJlc29sdmVTY2hlbWEgPSAoXG4gIG1heWJlU2NoZW1hOiBab2RBbnkgfCB7IHByb3BlcnRpZXM6IFpvZEFueSB9LFxuKTogUGljazxab2RBbnksICdzYWZlUGFyc2UnPiA9PiB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eShtYXliZVNjaGVtYSwgJ3NhZmVQYXJzZScpKSB7XG4gICAgcmV0dXJuIG1heWJlU2NoZW1hO1xuICB9XG4gIGlmIChoYXNPd25Qcm9wZXJ0eShtYXliZVNjaGVtYSwgJ3Byb3BlcnRpZXMnKSkge1xuICAgIHJldHVybiBtYXliZVNjaGVtYS5wcm9wZXJ0aWVzO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzY2hlbWEgcGFzc2VkOiAke0pTT04uc3RyaW5naWZ5KG1heWJlU2NoZW1hKX1gKTtcbn07XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.d.ts","sourceRoot":"","sources":["../lib/swagger.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,cAAc,EACvB,MAAM,WAAW,kBAqClB,CAAC"}
|
package/dist/swagger.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import swagger from '@fastify/swagger';
|
|
2
|
+
import swaggerUi from '@fastify/swagger-ui';
|
|
3
|
+
import { fastifyZodOpenApiTransform, fastifyZodOpenApiTransformObject, } from 'fastify-zod-openapi';
|
|
4
|
+
/**
|
|
5
|
+
* adds swagger to the fastify instance
|
|
6
|
+
*/
|
|
7
|
+
export const registerSwagger = async (fastify, opts) => {
|
|
8
|
+
await fastify.register(swagger, {
|
|
9
|
+
openapi: {
|
|
10
|
+
openapi: '3.1.0',
|
|
11
|
+
info: {
|
|
12
|
+
title: opts.title,
|
|
13
|
+
description: opts.description,
|
|
14
|
+
version: opts.version,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
transform: fastifyZodOpenApiTransform,
|
|
18
|
+
transformObject: fastifyZodOpenApiTransformObject,
|
|
19
|
+
});
|
|
20
|
+
await fastify.register(swaggerUi, {
|
|
21
|
+
routePrefix: opts.path,
|
|
22
|
+
uiConfig: {
|
|
23
|
+
docExpansion: 'full',
|
|
24
|
+
deepLinking: false,
|
|
25
|
+
},
|
|
26
|
+
uiHooks: {
|
|
27
|
+
onRequest: (request, reply, next) => {
|
|
28
|
+
next();
|
|
29
|
+
},
|
|
30
|
+
preHandler: (request, reply, next) => {
|
|
31
|
+
next();
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
staticCSP: true,
|
|
35
|
+
transformStaticCSP: (header) => header,
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
37
|
+
transformSpecification: (swaggerObject, request, reply) => {
|
|
38
|
+
return swaggerObject;
|
|
39
|
+
},
|
|
40
|
+
transformSpecificationClone: true,
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dhZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9zd2FnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsZ0NBQWdDLEdBQ2pDLE1BQU0scUJBQXFCLENBQUM7QUFLN0I7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsS0FBSyxFQUNsQyxPQUF1QixFQUN2QixJQUFpQixFQUNqQixFQUFFO0lBQ0YsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUM5QixPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsT0FBNEI7WUFDckMsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEI7U0FDRjtRQUNELFNBQVMsRUFBRSwwQkFBMEI7UUFDckMsZUFBZSxFQUFFLGdDQUFnQztLQUNsRCxDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO1FBQ2hDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSTtRQUN0QixRQUFRLEVBQUU7WUFDUixZQUFZLEVBQUUsTUFBTTtZQUNwQixXQUFXLEVBQUUsS0FBSztTQUNuQjtRQUNELE9BQU8sRUFBRTtZQUNQLFNBQVMsRUFBRSxDQUFDLE9BQVksRUFBRSxLQUFVLEVBQUUsSUFBZ0IsRUFBRSxFQUFFO2dCQUN4RCxJQUFJLEVBQUUsQ0FBQztZQUNULENBQUM7WUFDRCxVQUFVLEVBQUUsQ0FBQyxPQUFZLEVBQUUsS0FBVSxFQUFFLElBQWdCLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxFQUFFLENBQUM7WUFDVCxDQUFDO1NBQ0Y7UUFDRCxTQUFTLEVBQUUsSUFBSTtRQUNmLGtCQUFrQixFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNO1FBQzNDLDZEQUE2RDtRQUM3RCxzQkFBc0IsRUFBRSxDQUFDLGFBQWtCLEVBQUUsT0FBWSxFQUFFLEtBQVUsRUFBRSxFQUFFO1lBQ3ZFLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCwyQkFBMkIsRUFBRSxJQUFJO0tBQ2xDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzd2FnZ2VyIGZyb20gJ0BmYXN0aWZ5L3N3YWdnZXInO1xuaW1wb3J0IHN3YWdnZXJVaSBmcm9tICdAZmFzdGlmeS9zd2FnZ2VyLXVpJztcbmltcG9ydCB7XG4gIGZhc3RpZnlab2RPcGVuQXBpVHJhbnNmb3JtLFxuICBmYXN0aWZ5Wm9kT3BlbkFwaVRyYW5zZm9ybU9iamVjdCxcbn0gZnJvbSAnZmFzdGlmeS16b2Qtb3BlbmFwaSc7XG5pbXBvcnQgeyBab2RPcGVuQXBpVmVyc2lvbiB9IGZyb20gJ3pvZC1vcGVuYXBpJztcblxuaW1wb3J0IHsgRmFzdGlmeVdpdGhab2QsIFN3YWdnZXJPcHRzIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogYWRkcyBzd2FnZ2VyIHRvIHRoZSBmYXN0aWZ5IGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjb25zdCByZWdpc3RlclN3YWdnZXIgPSBhc3luYyAoXG4gIGZhc3RpZnk6IEZhc3RpZnlXaXRoWm9kLFxuICBvcHRzOiBTd2FnZ2VyT3B0cyxcbikgPT4ge1xuICBhd2FpdCBmYXN0aWZ5LnJlZ2lzdGVyKHN3YWdnZXIsIHtcbiAgICBvcGVuYXBpOiB7XG4gICAgICBvcGVuYXBpOiAnMy4xLjAnIGFzIFpvZE9wZW5BcGlWZXJzaW9uLFxuICAgICAgaW5mbzoge1xuICAgICAgICB0aXRsZTogb3B0cy50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdHMuZGVzY3JpcHRpb24sXG4gICAgICAgIHZlcnNpb246IG9wdHMudmVyc2lvbixcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0cmFuc2Zvcm06IGZhc3RpZnlab2RPcGVuQXBpVHJhbnNmb3JtLFxuICAgIHRyYW5zZm9ybU9iamVjdDogZmFzdGlmeVpvZE9wZW5BcGlUcmFuc2Zvcm1PYmplY3QsXG4gIH0pO1xuXG4gIGF3YWl0IGZhc3RpZnkucmVnaXN0ZXIoc3dhZ2dlclVpLCB7XG4gICAgcm91dGVQcmVmaXg6IG9wdHMucGF0aCxcbiAgICB1aUNvbmZpZzoge1xuICAgICAgZG9jRXhwYW5zaW9uOiAnZnVsbCcsXG4gICAgICBkZWVwTGlua2luZzogZmFsc2UsXG4gICAgfSxcbiAgICB1aUhvb2tzOiB7XG4gICAgICBvblJlcXVlc3Q6IChyZXF1ZXN0OiBhbnksIHJlcGx5OiBhbnksIG5leHQ6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSxcbiAgICAgIHByZUhhbmRsZXI6IChyZXF1ZXN0OiBhbnksIHJlcGx5OiBhbnksIG5leHQ6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHN0YXRpY0NTUDogdHJ1ZSxcbiAgICB0cmFuc2Zvcm1TdGF0aWNDU1A6IChoZWFkZXI6IGFueSkgPT4gaGVhZGVyLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB0cmFuc2Zvcm1TcGVjaWZpY2F0aW9uOiAoc3dhZ2dlck9iamVjdDogYW55LCByZXF1ZXN0OiBhbnksIHJlcGx5OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBzd2FnZ2VyT2JqZWN0O1xuICAgIH0sXG4gICAgdHJhbnNmb3JtU3BlY2lmaWNhdGlvbkNsb25lOiB0cnVlLFxuICB9KTtcbn07XG4iXX0=
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { FastifyBaseLogger, FastifyInstance } from 'fastify';
|
|
3
|
-
import { ZodTypeProvider } from 'fastify-type-provider-zod';
|
|
4
1
|
import * as http from 'http';
|
|
5
|
-
|
|
2
|
+
import { FastifyBaseLogger, FastifyInstance } from 'fastify';
|
|
3
|
+
import type { FastifyZodOpenApiTypeProvider } from 'fastify-zod-openapi';
|
|
4
|
+
export type FastifyWithZod = FastifyInstance<http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>, http.IncomingMessage, http.ServerResponse<http.IncomingMessage>, FastifyBaseLogger, FastifyZodOpenApiTypeProvider>;
|
|
6
5
|
export interface SwaggerOpts {
|
|
7
6
|
path: string;
|
|
8
7
|
title: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG,eAAe,CAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,EACpE,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,EACzC,iBAAiB,EACjB,6BAA6B,CAC9B,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBGYXN0aWZ5QmFzZUxvZ2dlciwgRmFzdGlmeUluc3RhbmNlIH0gZnJvbSAnZmFzdGlmeSc7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlab2RPcGVuQXBpVHlwZVByb3ZpZGVyIH0gZnJvbSAnZmFzdGlmeS16b2Qtb3BlbmFwaSc7XG5cbmV4cG9ydCB0eXBlIEZhc3RpZnlXaXRoWm9kID0gRmFzdGlmeUluc3RhbmNlPFxuICBodHRwLlNlcnZlcjx0eXBlb2YgaHR0cC5JbmNvbWluZ01lc3NhZ2UsIHR5cGVvZiBodHRwLlNlcnZlclJlc3BvbnNlPixcbiAgaHR0cC5JbmNvbWluZ01lc3NhZ2UsXG4gIGh0dHAuU2VydmVyUmVzcG9uc2U8aHR0cC5JbmNvbWluZ01lc3NhZ2U+LFxuICBGYXN0aWZ5QmFzZUxvZ2dlcixcbiAgRmFzdGlmeVpvZE9wZW5BcGlUeXBlUHJvdmlkZXJcbj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3dhZ2dlck9wdHMge1xuICBwYXRoOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbn1cbiJdfQ==
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../lib/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,SAAS,WAAW,EACrD,KAAK,CAAC,EACN,MAAM,CAAC,KACN,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,CAE1B,CAAC"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export const hasOwnProperty = (obj, prop) => {
|
|
2
|
+
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
3
|
+
};
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQzVCLEdBQU0sRUFDTixJQUFPLEVBQ29CLEVBQUU7SUFDN0IsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBoYXNPd25Qcm9wZXJ0eSA9IDxULCBLIGV4dGVuZHMgUHJvcGVydHlLZXk+KFxuICBvYmo6IFQsXG4gIHByb3A6IEssXG4pOiBvYmogaXMgVCAmIFJlY29yZDxLLCBhbnk+ID0+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufTtcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,42 +1,50 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosen-bridge/fastify-enhanced",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "a wrapper around fastify web framework to make it even better",
|
|
5
|
-
"repository":
|
|
6
|
-
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/rosen-bridge/utils.git"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
7
10
|
"author": "Rosen Team",
|
|
8
11
|
"type": "module",
|
|
9
12
|
"main": "dist/index.js",
|
|
10
13
|
"types": "dist/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"CHANGELOG.md"
|
|
17
|
+
],
|
|
11
18
|
"scripts": {
|
|
12
19
|
"build": "tsc --build tsconfig.build.json",
|
|
13
|
-
"coverage": "npm run test -- --coverage",
|
|
20
|
+
"coverage": "npm run test -- --run --coverage",
|
|
14
21
|
"lint": "eslint --fix . && npm run prettify",
|
|
15
|
-
"
|
|
22
|
+
"lint:check": "eslint . && npm run prettify:check",
|
|
23
|
+
"prettify": "prettier --write . --ignore-path ../../.gitignore",
|
|
24
|
+
"prettify:check": "prettier --check . --ignore-path ../../.gitignore",
|
|
16
25
|
"release": "npm run build && npm publish --access public",
|
|
17
|
-
"test": "NODE_OPTIONS
|
|
26
|
+
"test": "NODE_OPTIONS='--import tsx' vitest",
|
|
27
|
+
"test:bin": "tsx tests/bin.ts",
|
|
18
28
|
"type-check": "tsc --noEmit"
|
|
19
29
|
},
|
|
20
30
|
"devDependencies": {
|
|
21
|
-
"@types/
|
|
22
|
-
"@
|
|
23
|
-
"@
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"prettier": "2.7.1",
|
|
28
|
-
"typescript": "^5.0.0",
|
|
29
|
-
"vitest": "^0.26.2"
|
|
30
|
-
},
|
|
31
|
-
"engines": {
|
|
32
|
-
"node": ">=18.12.0"
|
|
31
|
+
"@types/json-bigint": "^1.0.1",
|
|
32
|
+
"@types/node": "^22.18.0",
|
|
33
|
+
"@vitest/coverage-istanbul": "^3.1.4",
|
|
34
|
+
"tsx": "^4.20.5",
|
|
35
|
+
"typescript": "^5.8.3",
|
|
36
|
+
"vitest": "^3.1.4"
|
|
33
37
|
},
|
|
34
38
|
"dependencies": {
|
|
35
|
-
"@fastify/swagger": "^
|
|
36
|
-
"@fastify/swagger-ui": "^
|
|
37
|
-
"fastify": "^
|
|
38
|
-
"fastify-
|
|
39
|
+
"@fastify/swagger": "^9.5.1",
|
|
40
|
+
"@fastify/swagger-ui": "^5.2.3",
|
|
41
|
+
"fastify": "^5.3.3",
|
|
42
|
+
"fastify-zod-openapi": "^4.1.2",
|
|
39
43
|
"json-bigint": "^1.0.0",
|
|
40
|
-
"zod": "^3.
|
|
44
|
+
"zod": "^3.25.56",
|
|
45
|
+
"zod-openapi": "^4.2.4"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=22.18.0"
|
|
41
49
|
}
|
|
42
50
|
}
|
package/.eslintignore
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
dist
|