@avleon/core 0.0.46 → 0.0.48

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.
Files changed (142) hide show
  1. package/License +21 -21
  2. package/README.md +666 -666
  3. package/dist/chunk-9hOWP6kD.cjs +64 -0
  4. package/dist/chunk-DORXReHP.js +37 -0
  5. package/dist/index-BxIMWhgy.d.ts +1284 -0
  6. package/dist/index-DPn7qtzq.d.cts +1283 -0
  7. package/dist/index.cjs +3194 -0
  8. package/dist/index.cjs.map +1 -0
  9. package/dist/index.js +3022 -79
  10. package/dist/index.js.map +1 -0
  11. package/dist/lib-Bk8hUm06.cjs +7847 -0
  12. package/dist/lib-Bk8hUm06.cjs.map +1 -0
  13. package/dist/lib-CvDxBMkR.js +7843 -0
  14. package/dist/lib-CvDxBMkR.js.map +1 -0
  15. package/package.json +41 -103
  16. package/dist/application.test.d.ts +0 -1
  17. package/dist/application.test.js +0 -15
  18. package/dist/authentication.d.ts +0 -13
  19. package/dist/authentication.js +0 -16
  20. package/dist/cache.d.ts +0 -12
  21. package/dist/cache.js +0 -78
  22. package/dist/cache.test.d.ts +0 -1
  23. package/dist/cache.test.js +0 -36
  24. package/dist/collection.d.ts +0 -43
  25. package/dist/collection.js +0 -231
  26. package/dist/collection.test.d.ts +0 -1
  27. package/dist/collection.test.js +0 -59
  28. package/dist/config.d.ts +0 -18
  29. package/dist/config.js +0 -58
  30. package/dist/config.test.d.ts +0 -1
  31. package/dist/config.test.js +0 -40
  32. package/dist/constants.d.ts +0 -1
  33. package/dist/constants.js +0 -4
  34. package/dist/container.d.ts +0 -30
  35. package/dist/container.js +0 -55
  36. package/dist/controller.d.ts +0 -50
  37. package/dist/controller.js +0 -71
  38. package/dist/controller.test.d.ts +0 -1
  39. package/dist/controller.test.js +0 -97
  40. package/dist/core/application.d.ts +0 -74
  41. package/dist/core/application.js +0 -424
  42. package/dist/core/router.d.ts +0 -44
  43. package/dist/core/router.js +0 -520
  44. package/dist/core/testing.d.ts +0 -21
  45. package/dist/core/testing.js +0 -104
  46. package/dist/core/types.d.ts +0 -67
  47. package/dist/core/types.js +0 -2
  48. package/dist/decorators.d.ts +0 -15
  49. package/dist/decorators.js +0 -41
  50. package/dist/environment-variables.d.ts +0 -49
  51. package/dist/environment-variables.js +0 -130
  52. package/dist/environment-variables.test.d.ts +0 -1
  53. package/dist/environment-variables.test.js +0 -70
  54. package/dist/event-dispatcher.d.ts +0 -22
  55. package/dist/event-dispatcher.js +0 -97
  56. package/dist/event-subscriber.d.ts +0 -14
  57. package/dist/event-subscriber.js +0 -87
  58. package/dist/exceptions/http-exceptions.d.ts +0 -50
  59. package/dist/exceptions/http-exceptions.js +0 -85
  60. package/dist/exceptions/index.d.ts +0 -1
  61. package/dist/exceptions/index.js +0 -17
  62. package/dist/exceptions/system-exception.d.ts +0 -22
  63. package/dist/exceptions/system-exception.js +0 -26
  64. package/dist/file-storage.d.ts +0 -69
  65. package/dist/file-storage.js +0 -323
  66. package/dist/file-storage.test.d.ts +0 -1
  67. package/dist/file-storage.test.js +0 -117
  68. package/dist/helpers.d.ts +0 -11
  69. package/dist/helpers.js +0 -27
  70. package/dist/helpers.test.d.ts +0 -1
  71. package/dist/helpers.test.js +0 -95
  72. package/dist/index.d.ts +0 -57
  73. package/dist/interfaces/avleon-application.d.ts +0 -75
  74. package/dist/interfaces/avleon-application.js +0 -2
  75. package/dist/kenx-provider.d.ts +0 -7
  76. package/dist/kenx-provider.js +0 -44
  77. package/dist/kenx-provider.test.d.ts +0 -1
  78. package/dist/kenx-provider.test.js +0 -36
  79. package/dist/logger.d.ts +0 -12
  80. package/dist/logger.js +0 -87
  81. package/dist/logger.test.d.ts +0 -1
  82. package/dist/logger.test.js +0 -42
  83. package/dist/map-types.d.ts +0 -17
  84. package/dist/map-types.js +0 -89
  85. package/dist/middleware.d.ts +0 -34
  86. package/dist/middleware.js +0 -73
  87. package/dist/middleware.test.d.ts +0 -1
  88. package/dist/middleware.test.js +0 -121
  89. package/dist/multipart.d.ts +0 -17
  90. package/dist/multipart.js +0 -70
  91. package/dist/multipart.test.d.ts +0 -1
  92. package/dist/multipart.test.js +0 -87
  93. package/dist/openapi.d.ts +0 -410
  94. package/dist/openapi.js +0 -59
  95. package/dist/openapi.test.d.ts +0 -1
  96. package/dist/openapi.test.js +0 -111
  97. package/dist/params.d.ts +0 -17
  98. package/dist/params.js +0 -64
  99. package/dist/params.test.d.ts +0 -1
  100. package/dist/params.test.js +0 -83
  101. package/dist/queue.d.ts +0 -29
  102. package/dist/queue.js +0 -84
  103. package/dist/response.d.ts +0 -16
  104. package/dist/response.js +0 -56
  105. package/dist/results.d.ts +0 -20
  106. package/dist/results.js +0 -32
  107. package/dist/route-methods.d.ts +0 -25
  108. package/dist/route-methods.js +0 -60
  109. package/dist/route-methods.test.d.ts +0 -1
  110. package/dist/route-methods.test.js +0 -129
  111. package/dist/swagger-schema.d.ts +0 -37
  112. package/dist/swagger-schema.js +0 -454
  113. package/dist/swagger-schema.test.d.ts +0 -1
  114. package/dist/swagger-schema.test.js +0 -125
  115. package/dist/types/app-builder.interface.d.ts +0 -15
  116. package/dist/types/app-builder.interface.js +0 -8
  117. package/dist/types/application.interface.d.ts +0 -8
  118. package/dist/types/application.interface.js +0 -2
  119. package/dist/utils/common-utils.d.ts +0 -17
  120. package/dist/utils/common-utils.js +0 -108
  121. package/dist/utils/di-utils.d.ts +0 -1
  122. package/dist/utils/di-utils.js +0 -22
  123. package/dist/utils/hash.d.ts +0 -2
  124. package/dist/utils/hash.js +0 -11
  125. package/dist/utils/index.d.ts +0 -2
  126. package/dist/utils/index.js +0 -18
  127. package/dist/utils/object-utils.d.ts +0 -11
  128. package/dist/utils/object-utils.js +0 -198
  129. package/dist/utils/optional-require.d.ts +0 -8
  130. package/dist/utils/optional-require.js +0 -70
  131. package/dist/utils/validation-utils.d.ts +0 -13
  132. package/dist/utils/validation-utils.js +0 -119
  133. package/dist/validation.d.ts +0 -39
  134. package/dist/validation.js +0 -108
  135. package/dist/validation.test.d.ts +0 -1
  136. package/dist/validation.test.js +0 -61
  137. package/dist/validator-extend.d.ts +0 -7
  138. package/dist/validator-extend.js +0 -28
  139. package/dist/websocket.d.ts +0 -10
  140. package/dist/websocket.js +0 -21
  141. package/dist/websocket.test.d.ts +0 -1
  142. package/dist/websocket.test.js +0 -27
@@ -1,73 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AuthorizeMiddleware = exports.AvleonMiddleware = void 0;
4
- exports.CanAuthorize = CanAuthorize;
5
- exports.AppAuthorization = AppAuthorization;
6
- exports.Authorized = Authorized;
7
- exports.AppMiddleware = AppMiddleware;
8
- exports.UseMiddleware = UseMiddleware;
9
- /**
10
- * @copyright 2024
11
- * @author Tareq Hossain
12
- * @email xtrinsic96@gmail.com
13
- * @url https://github.com/xtareq
14
- */
15
- const typedi_1 = require("typedi");
16
- const container_1 = require("./container");
17
- class AvleonMiddleware {
18
- }
19
- exports.AvleonMiddleware = AvleonMiddleware;
20
- class AuthorizeMiddleware {
21
- }
22
- exports.AuthorizeMiddleware = AuthorizeMiddleware;
23
- function CanAuthorize(target) {
24
- if (typeof target.prototype.authorize !== "function") {
25
- throw new Error(`Class "${target.name}" must implement an "authorize" method.`);
26
- }
27
- (0, typedi_1.Service)()(target);
28
- }
29
- function AppAuthorization(target) {
30
- if (typeof target.prototype.authorize !== "function") {
31
- throw new Error(`Class "${target.name}" must implement an "authorize" method.`);
32
- }
33
- (0, typedi_1.Service)()(target);
34
- }
35
- function Authorized(options = {}) {
36
- return function (target, propertyKey, descriptor) {
37
- if (propertyKey && descriptor) {
38
- Reflect.defineMetadata(container_1.AUTHORIZATION_META_KEY, { authorize: true, options }, target.constructor, propertyKey);
39
- }
40
- else {
41
- Reflect.defineMetadata(container_1.AUTHORIZATION_META_KEY, { authorize: true, options }, target);
42
- }
43
- };
44
- }
45
- function AppMiddleware(target) {
46
- if (typeof target.prototype.invoke !== "function") {
47
- throw new Error(`Class "${target.name}" must implement an "invoke" method.`);
48
- }
49
- (0, typedi_1.Service)()(target);
50
- }
51
- /**
52
- * A decorator function that applies one or more middleware to a class or a method.
53
- *
54
- * When applied to a class, the middleware are registered for the entire controller.
55
- * When applied to a method, the middleware are registered for that specific route.
56
- *
57
- * @param options - A single middleware instance/class or an array of middleware instances/classes to be applied.
58
- * @returns A decorator that registers the middleware metadata.
59
- */
60
- function UseMiddleware(options) {
61
- return function (target, propertyKey, descriptor) {
62
- const normalizeMiddleware = (middleware) => typeof middleware === "function" ? new middleware() : middleware;
63
- const middlewareList = (Array.isArray(options) ? options : [options]).map(normalizeMiddleware);
64
- if (typeof target === "function" && !propertyKey) {
65
- const existingMiddlewares = Reflect.getMetadata("controller:middleware", target) || [];
66
- Reflect.defineMetadata("controller:middleware", [...existingMiddlewares, ...middlewareList], target);
67
- }
68
- else if (descriptor) {
69
- const existingMiddlewares = Reflect.getMetadata("route:middleware", target, propertyKey) || [];
70
- Reflect.defineMetadata("route:middleware", [...existingMiddlewares, ...middlewareList], target, propertyKey);
71
- }
72
- };
73
- }
@@ -1 +0,0 @@
1
- import "reflect-metadata";
@@ -1,121 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- require("reflect-metadata");
13
- const middleware_1 = require("./middleware");
14
- describe("AvleonMiddleware", () => {
15
- class TestMiddleware extends middleware_1.AvleonMiddleware {
16
- async invoke(req, res) {
17
- return req;
18
- }
19
- }
20
- it("should allow AppMiddleware decorator on valid class", () => {
21
- expect(() => (0, middleware_1.AppMiddleware)(TestMiddleware)).not.toThrow();
22
- });
23
- it("should throw error if AppMiddleware is used on class without invoke", () => {
24
- class InvalidMiddleware {
25
- }
26
- expect(() => (0, middleware_1.AppMiddleware)(InvalidMiddleware)).toThrow(/must implement an "invoke" method/);
27
- });
28
- });
29
- describe("UseMiddleware", () => {
30
- class MW1 extends middleware_1.AvleonMiddleware {
31
- async invoke(req) {
32
- return req;
33
- }
34
- }
35
- class MW2 extends middleware_1.AvleonMiddleware {
36
- async invoke(req) {
37
- return req;
38
- }
39
- }
40
- it("should attach middleware to class", () => {
41
- let TestController = class TestController {
42
- };
43
- TestController = __decorate([
44
- (0, middleware_1.UseMiddleware)([MW1, MW2])
45
- ], TestController);
46
- const middlewares = Reflect.getMetadata("controller:middleware", TestController);
47
- expect(middlewares).toHaveLength(2);
48
- expect(middlewares[0]).toBeInstanceOf(MW1);
49
- expect(middlewares[1]).toBeInstanceOf(MW2);
50
- });
51
- it("should attach middleware to method", () => {
52
- class TestController {
53
- testMethod() { }
54
- }
55
- __decorate([
56
- (0, middleware_1.UseMiddleware)(MW1),
57
- __metadata("design:type", Function),
58
- __metadata("design:paramtypes", []),
59
- __metadata("design:returntype", void 0)
60
- ], TestController.prototype, "testMethod", null);
61
- const middlewares = Reflect.getMetadata("route:middleware", TestController.prototype, "testMethod");
62
- expect(middlewares).toHaveLength(1);
63
- expect(middlewares[0]).toBeInstanceOf(MW1);
64
- });
65
- });
66
- // describe("Authorized decorator", () => {
67
- // it("should define metadata on class", () => {
68
- // @Authorized({ roles: ["admin"] })
69
- // class TestClass {}
70
- // const meta = Reflect.getMetadata("AUTHORIZATION_META_KEY", TestClass);
71
- // expect(meta).toEqual({ authorize: true, options: { roles: ["admin"] } });
72
- // });
73
- // it("should define metadata on method", () => {
74
- // class TestClass {
75
- // @Authorized({ roles: ["user"] })
76
- // testMethod() {}
77
- // }
78
- // const meta = Reflect.getMetadata(
79
- // "AUTHORIZATION_META_KEY",
80
- // TestClass.constructor,
81
- // "testMethod",
82
- // );
83
- // expect(meta).toEqual({ authorize: true, options: { roles: ["user"] } });
84
- // });
85
- describe("CanAuthorize and AppAuthorization", () => {
86
- class ValidAuthorize {
87
- authorize(req, options) {
88
- return req;
89
- }
90
- }
91
- it("should not throw for valid CanAuthorize", () => {
92
- expect(() => (0, middleware_1.CanAuthorize)(ValidAuthorize)).not.toThrow();
93
- });
94
- it("should throw for invalid CanAuthorize", () => {
95
- class InvalidAuthorize {
96
- }
97
- expect(() => (0, middleware_1.CanAuthorize)(InvalidAuthorize)).toThrow(/must implement an "authorize" method/);
98
- });
99
- it("should not throw for valid AppAuthorization", () => {
100
- expect(() => (0, middleware_1.AppAuthorization)(ValidAuthorize)).not.toThrow();
101
- });
102
- it("should throw for invalid AppAuthorization", () => {
103
- class InvalidAuthorize {
104
- }
105
- expect(() => (0, middleware_1.AppAuthorization)(InvalidAuthorize)).toThrow(/must implement an "authorize" method/);
106
- });
107
- });
108
- describe("AuthorizeMiddleware", () => {
109
- class TestAuthorizeMiddleware extends middleware_1.AuthorizeMiddleware {
110
- authorize(roles) {
111
- return (req) => req;
112
- }
113
- }
114
- it("should implement authorize method", () => {
115
- const mw = new TestAuthorizeMiddleware();
116
- const handler = mw.authorize(["admin"]);
117
- expect(typeof handler).toBe("function");
118
- const req = {};
119
- expect(handler(req)).toBe(req);
120
- });
121
- });
@@ -1,17 +0,0 @@
1
- /**
2
- * @copyright 2024
3
- * @author Tareq Hossain
4
- * @email xtrinsic96@gmail.com
5
- * @url https://github.com/xtareq
6
- */
7
- import { MultipartFile as FsM, SavedMultipartFile } from "@fastify/multipart";
8
- import { IRequest } from "./core/types";
9
- export declare function UploadFile(fieldName: string): (target: any, propertyKey: string | symbol, parameterIndex: number) => void;
10
- export declare function UploadFiles(fieldName?: string): (target: any, propertyKey: string | symbol, parameterIndex: number) => void;
11
- type Foptions = {
12
- saveAs?: string;
13
- dest?: true;
14
- };
15
- export type MultipartFile = FsM | SavedMultipartFile;
16
- export declare function UploadFileFromRequest(req: IRequest, options?: Foptions): Promise<any>;
17
- export {};
package/dist/multipart.js DELETED
@@ -1,70 +0,0 @@
1
- "use strict";
2
- /**
3
- * @copyright 2024
4
- * @author Tareq Hossain
5
- * @email xtrinsic96@gmail.com
6
- * @url https://github.com/xtareq
7
- */
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.UploadFile = UploadFile;
13
- exports.UploadFiles = UploadFiles;
14
- exports.UploadFileFromRequest = UploadFileFromRequest;
15
- const fs_1 = __importDefault(require("fs"));
16
- const path_1 = __importDefault(require("path"));
17
- const promises_1 = require("stream/promises");
18
- const exceptions_1 = require("./exceptions");
19
- const container_1 = require("./container");
20
- function UploadFile(fieldName) {
21
- return function (target, propertyKey, parameterIndex) {
22
- if (!Reflect.hasMetadata(container_1.REQUEST_BODY_FILE_KEY, target, propertyKey)) {
23
- Reflect.defineMetadata(container_1.REQUEST_BODY_FILE_KEY, [], target, propertyKey);
24
- }
25
- const existingMetadata = Reflect.getMetadata(container_1.REQUEST_BODY_FILE_KEY, target, propertyKey);
26
- existingMetadata.push({ fieldName, index: parameterIndex });
27
- Reflect.defineMetadata(container_1.REQUEST_BODY_FILE_KEY, existingMetadata, target, propertyKey);
28
- };
29
- }
30
- function UploadFiles(fieldName) {
31
- return function (target, propertyKey, parameterIndex) {
32
- if (!Reflect.hasMetadata(container_1.REQUEST_BODY_FILES_KEY, target, propertyKey)) {
33
- Reflect.defineMetadata(container_1.REQUEST_BODY_FILES_KEY, [], target, propertyKey);
34
- }
35
- const existingMetadata = Reflect.getMetadata(container_1.REQUEST_BODY_FILES_KEY, target, propertyKey);
36
- existingMetadata.push({
37
- fieldName: fieldName ? fieldName : "all",
38
- index: parameterIndex,
39
- });
40
- Reflect.defineMetadata(container_1.REQUEST_BODY_FILES_KEY, existingMetadata, target, propertyKey);
41
- };
42
- }
43
- function UploadFileFromRequest(req, options) {
44
- return Promise.resolve(req.file().then(async (f) => {
45
- if (f && f.file) {
46
- let fname = f.filename;
47
- if (options) {
48
- if (options.dest) {
49
- fname = options.saveAs
50
- ? options.dest + "/" + options.saveAs
51
- : options.dest + "/" + f.filename;
52
- }
53
- else {
54
- fname = path_1.default.join(process.cwd(), `public/${options.saveAs ? options.saveAs : f.filename}`);
55
- }
56
- }
57
- else {
58
- fname = path_1.default.join(process.cwd(), `public/${f.filename}`);
59
- }
60
- if (fs_1.default.existsSync(fname)) {
61
- throw new exceptions_1.InternalErrorException("File already exists.");
62
- }
63
- await (0, promises_1.pipeline)(f.file, fs_1.default.createWriteStream(fname));
64
- return {
65
- ...f,
66
- filename: (options === null || options === void 0 ? void 0 : options.saveAs) ? options.saveAs : f.filename,
67
- };
68
- }
69
- }));
70
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,87 +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 multipart_1 = require("./multipart");
7
- const exceptions_1 = require("./exceptions");
8
- const fs_1 = __importDefault(require("fs"));
9
- jest.mock("fs");
10
- jest.mock("stream/promises", () => ({
11
- pipeline: jest.fn(() => Promise.resolve()),
12
- }));
13
- const mockFileStream = {};
14
- const mockReq = (fileData) => ({
15
- params: {},
16
- query: {},
17
- body: {},
18
- headers: {},
19
- method: "POST",
20
- url: "/upload",
21
- file: jest.fn().mockResolvedValue(fileData),
22
- // Add any other required IRequest properties as needed for type compatibility
23
- });
24
- describe("UploadFileFromRequest", () => {
25
- beforeEach(() => {
26
- jest.clearAllMocks();
27
- fs_1.default.existsSync.mockReturnValue(false);
28
- });
29
- // it("should save file to default location", async () => {
30
- // const fileData = {
31
- // file: mockFileStream,
32
- // filename: "test.txt",
33
- // };
34
- // const req = mockReq(fileData);
35
- // const result = await UploadFileFromRequest(req);
36
- // expect(fs.existsSync).toHaveBeenCalled();
37
- // expect(pipeline).toHaveBeenCalledWith(mockFileStream, expect.anything());
38
- // expect(result).toMatchObject({
39
- // ...fileData,
40
- // filename: "test.txt",
41
- // });
42
- // });
43
- // it("should save file to custom location with saveAs", async () => {
44
- // const fileData = {
45
- // file: mockFileStream,
46
- // filename: "original.txt",
47
- // };
48
- // const req = mockReq(fileData);
49
- // const options = { saveAs: "custom.txt" };
50
- // const result = await UploadFileFromRequest(req, options);
51
- // expect(fs.existsSync).toHaveBeenCalled();
52
- // expect(pipeline).toHaveBeenCalledWith(mockFileStream, expect.anything());
53
- // expect(result).toMatchObject({
54
- // ...fileData,
55
- // filename: "custom.txt",
56
- // });
57
- // });
58
- // it("should save file to custom dest", async () => {
59
- // const fileData = {
60
- // file: mockFileStream,
61
- // filename: "file.txt",
62
- // };
63
- // const req = mockReq(fileData);
64
- // const options:any = { dest: "/tmp" };
65
- // const result = await UploadFileFromRequest(req, options);
66
- // expect(fs.existsSync).toHaveBeenCalled();
67
- // expect(pipeline).toHaveBeenCalledWith(mockFileStream, expect.anything());
68
- // expect(result).toMatchObject({
69
- // ...fileData,
70
- // filename: "file.txt",
71
- // });
72
- // });
73
- it("should throw error if file already exists", async () => {
74
- fs_1.default.existsSync.mockReturnValue(true);
75
- const fileData = {
76
- file: mockFileStream,
77
- filename: "exists.txt",
78
- };
79
- const req = mockReq(fileData);
80
- await expect((0, multipart_1.UploadFileFromRequest)(req)).rejects.toThrow(exceptions_1.InternalErrorException);
81
- });
82
- it("should return undefined if no file is present", async () => {
83
- const req = mockReq(null);
84
- const result = await (0, multipart_1.UploadFileFromRequest)(req);
85
- expect(result).toBeUndefined();
86
- });
87
- });