taon 21.0.51 → 21.0.53

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 (226) hide show
  1. package/bin/taon +5 -5
  2. package/bin/taon-debug +5 -5
  3. package/bin/taon-debug-brk +4 -4
  4. package/browser/fesm2022/taon-browser.mjs +11 -1
  5. package/browser/fesm2022/taon-browser.mjs.map +1 -1
  6. package/browser/package.json +1 -1
  7. package/browser-prod/fesm2022/taon-browser.mjs +11 -1
  8. package/browser-prod/fesm2022/taon-browser.mjs.map +1 -1
  9. package/browser-prod/package.json +1 -1
  10. package/icon-menu-taon.svg +15 -15
  11. package/lib/build-info._auto-generated_.d.ts +1 -1
  12. package/lib/build-info._auto-generated_.js +1 -1
  13. package/lib/endpoint-context.d.ts +1 -1
  14. package/lib/endpoint-context.js +11 -6
  15. package/lib/endpoint-context.js.map +1 -1
  16. package/lib/package.json +1 -1
  17. package/lib/ui/index.js +2 -2
  18. package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
  19. package/lib-prod/base-classes/base-abstract-entity.js +33 -0
  20. package/lib-prod/base-classes/base-angular-service.js +56 -0
  21. package/lib-prod/base-classes/base-class.js +37 -0
  22. package/lib-prod/base-classes/base-context.js +21 -0
  23. package/lib-prod/base-classes/base-controller.js +162 -0
  24. package/lib-prod/base-classes/base-crud-controller.js +235 -0
  25. package/lib-prod/base-classes/base-custom-repository.js +20 -0
  26. package/lib-prod/base-classes/base-electron-service.js +0 -0
  27. package/lib-prod/base-classes/base-entity.js +32 -0
  28. package/lib-prod/base-classes/base-file-upload.middleware.js +78 -0
  29. package/lib-prod/base-classes/base-injector.js +202 -0
  30. package/lib-prod/base-classes/base-middleware.js +6 -0
  31. package/lib-prod/base-classes/base-migration.js +23 -0
  32. package/lib-prod/base-classes/base-provider.js +6 -0
  33. package/lib-prod/base-classes/base-repository.js +589 -0
  34. package/lib-prod/base-classes/base-subscriber-for-entity.js +154 -0
  35. package/lib-prod/base-classes/base.js +0 -0
  36. package/lib-prod/build-info._auto-generated_.js +14 -0
  37. package/lib-prod/config/controller-config.js +28 -0
  38. package/lib-prod/config/controller-options.js +6 -0
  39. package/lib-prod/config/method-config.js +9 -0
  40. package/lib-prod/config/param-config.js +9 -0
  41. package/lib-prod/constants.js +29 -0
  42. package/lib-prod/context-db-migrations.js +339 -0
  43. package/lib-prod/create-context.js +152 -0
  44. package/lib-prod/decorators/classes/controller-decorator.js +21 -0
  45. package/lib-prod/decorators/classes/entity-decorator.js +49 -0
  46. package/lib-prod/decorators/classes/middleware-decorator.js +26 -0
  47. package/lib-prod/decorators/classes/migration-decorator.js +24 -0
  48. package/lib-prod/decorators/classes/provider-decorator.js +25 -0
  49. package/lib-prod/decorators/classes/repository-decorator.js +24 -0
  50. package/lib-prod/decorators/classes/subscriber-decorator.js +25 -0
  51. package/lib-prod/decorators/decorator-abstract-opt.js +5 -0
  52. package/lib-prod/decorators/http/http-decorators.js +5 -0
  53. package/lib-prod/decorators/http/http-methods-decorators.js +144 -0
  54. package/lib-prod/decorators/http/http-params-decorators.js +68 -0
  55. package/lib-prod/dependency-injection/di-container.js +31 -0
  56. package/lib-prod/endpoint-context-storage.js +36 -0
  57. package/lib-prod/endpoint-context.js +2033 -0
  58. package/lib-prod/entity-process.js +214 -0
  59. package/lib-prod/env/env.angular-node-app.js +130 -0
  60. package/lib-prod/env/env.docs-webapp.js +130 -0
  61. package/lib-prod/env/env.electron-app.js +130 -0
  62. package/lib-prod/env/env.mobile-app.js +130 -0
  63. package/lib-prod/env/env.npm-lib-and-cli-tool.js +130 -0
  64. package/lib-prod/env/env.vscode-plugin.js +130 -0
  65. package/lib-prod/env/index.js +6 -0
  66. package/lib-prod/express-types.js +0 -0
  67. package/lib-prod/formly/formly.models.js +0 -0
  68. package/lib-prod/formly/fromly.js +184 -0
  69. package/lib-prod/formly/type-from-entity.js +58 -0
  70. package/lib-prod/get-response-value.js +19 -0
  71. package/lib-prod/global-state/taon-global-state/index.js +5 -0
  72. package/lib-prod/global-state/taon-global-state/taon-global-state.abstract.context.js +20 -0
  73. package/lib-prod/global-state/taon-global-state/taon-global-state.constants.js +10 -0
  74. package/lib-prod/global-state/taon-global-state/taon-global-state.controller.js +48 -0
  75. package/lib-prod/global-state/taon-global-state/taon-global-state.entity.js +48 -0
  76. package/lib-prod/global-state/taon-global-state/taon-global-state.middleware.js +22 -0
  77. package/lib-prod/global-state/taon-global-state/taon-global-state.models.js +34 -0
  78. package/lib-prod/global-state/taon-global-state/taon-global-state.provider.js +22 -0
  79. package/lib-prod/global-state/taon-global-state/taon-global-state.repository.js +47 -0
  80. package/lib-prod/global-state/taon-global-state/taon-global-state.subscriber.js +29 -0
  81. package/lib-prod/global-state/taon-global-state/taon-global-state.utils.js +11 -0
  82. package/lib-prod/global-state/taon-transaction-registry/index.js +10 -0
  83. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.abstract.context.js +22 -0
  84. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.constants.js +8 -0
  85. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.controller.js +41 -0
  86. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.entity.js +56 -0
  87. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.middleware.js +22 -0
  88. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.models.js +10 -0
  89. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.provider.js +22 -0
  90. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.repository.js +36 -0
  91. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.subscriber.js +29 -0
  92. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.utils.js +6 -0
  93. package/lib-prod/helpers/class-helpers.js +195 -0
  94. package/lib-prod/helpers/clone-obj.js +21 -0
  95. package/lib-prod/helpers/taon-helpers.js +129 -0
  96. package/lib-prod/index._auto-generated_.js +0 -0
  97. package/lib-prod/index.js +231 -0
  98. package/lib-prod/inject.js +34 -0
  99. package/lib-prod/migrations/index.js +1 -0
  100. package/lib-prod/migrations/migrations_index._auto-generated_.js +0 -0
  101. package/lib-prod/models.js +109 -0
  102. package/lib-prod/orm/columns.js +124 -0
  103. package/lib-prod/orm/index.js +1 -0
  104. package/lib-prod/package.json +1 -1
  105. package/lib-prod/realtime/realtime-client.js +196 -0
  106. package/lib-prod/realtime/realtime-core.js +82 -0
  107. package/lib-prod/realtime/realtime-server.js +252 -0
  108. package/lib-prod/realtime/realtime-strategy/index.js +4 -0
  109. package/lib-prod/realtime/realtime-strategy/realtime-strategy-ipc.js +226 -0
  110. package/lib-prod/realtime/realtime-strategy/realtime-strategy-mock.js +262 -0
  111. package/lib-prod/realtime/realtime-strategy/realtime-strategy-socket-io.js +21 -0
  112. package/lib-prod/realtime/realtime-strategy/realtime-strategy.js +14 -0
  113. package/lib-prod/realtime/realtime-subs-manager.js +96 -0
  114. package/lib-prod/realtime/realtime.models.js +0 -0
  115. package/lib-prod/symbols.js +109 -0
  116. package/lib-prod/ui/index.js +5 -0
  117. package/lib-prod/ui/taon-admin-mode-configuration/index.js +5 -0
  118. package/lib-prod/validators.js +74 -0
  119. package/package.json +1 -1
  120. package/websql/fesm2022/taon-websql.mjs +11 -1
  121. package/websql/fesm2022/taon-websql.mjs.map +1 -1
  122. package/websql/package.json +1 -1
  123. package/websql-prod/fesm2022/taon-websql.mjs +11 -1
  124. package/websql-prod/fesm2022/taon-websql.mjs.map +1 -1
  125. package/websql-prod/package.json +1 -1
  126. package/lib-prod/base-classes/base-abstract-entity.ts +0 -34
  127. package/lib-prod/base-classes/base-angular-service.ts +0 -107
  128. package/lib-prod/base-classes/base-class.ts +0 -46
  129. package/lib-prod/base-classes/base-context.ts +0 -21
  130. package/lib-prod/base-classes/base-controller.ts +0 -240
  131. package/lib-prod/base-classes/base-crud-controller.ts +0 -298
  132. package/lib-prod/base-classes/base-custom-repository.ts +0 -10
  133. package/lib-prod/base-classes/base-electron-service.ts +0 -60
  134. package/lib-prod/base-classes/base-entity.ts +0 -28
  135. package/lib-prod/base-classes/base-file-upload.middleware.ts +0 -92
  136. package/lib-prod/base-classes/base-injector.ts +0 -278
  137. package/lib-prod/base-classes/base-middleware.ts +0 -71
  138. package/lib-prod/base-classes/base-migration.ts +0 -26
  139. package/lib-prod/base-classes/base-provider.ts +0 -8
  140. package/lib-prod/base-classes/base-repository.ts +0 -942
  141. package/lib-prod/base-classes/base-subscriber-for-entity.ts +0 -196
  142. package/lib-prod/base-classes/base.ts +0 -31
  143. package/lib-prod/build-info._auto-generated_.ts +0 -27
  144. package/lib-prod/config/controller-config.ts +0 -58
  145. package/lib-prod/config/controller-options.ts +0 -19
  146. package/lib-prod/config/method-config.ts +0 -55
  147. package/lib-prod/config/param-config.ts +0 -16
  148. package/lib-prod/constants.ts +0 -63
  149. package/lib-prod/context-db-migrations.ts +0 -488
  150. package/lib-prod/create-context.ts +0 -345
  151. package/lib-prod/decorators/classes/controller-decorator.ts +0 -25
  152. package/lib-prod/decorators/classes/entity-decorator.ts +0 -57
  153. package/lib-prod/decorators/classes/middleware-decorator.ts +0 -29
  154. package/lib-prod/decorators/classes/migration-decorator.ts +0 -27
  155. package/lib-prod/decorators/classes/provider-decorator.ts +0 -28
  156. package/lib-prod/decorators/classes/repository-decorator.ts +0 -26
  157. package/lib-prod/decorators/classes/subscriber-decorator.ts +0 -28
  158. package/lib-prod/decorators/decorator-abstract-opt.ts +0 -4
  159. package/lib-prod/decorators/http/http-decorators.ts +0 -26
  160. package/lib-prod/decorators/http/http-methods-decorators.ts +0 -275
  161. package/lib-prod/decorators/http/http-params-decorators.ts +0 -105
  162. package/lib-prod/dependency-injection/di-container.ts +0 -39
  163. package/lib-prod/endpoint-context-storage.ts +0 -47
  164. package/lib-prod/endpoint-context.ts +0 -3105
  165. package/lib-prod/entity-process.ts +0 -286
  166. package/lib-prod/env/env.angular-node-app.ts +0 -66
  167. package/lib-prod/env/env.docs-webapp.ts +0 -66
  168. package/lib-prod/env/env.electron-app.ts +0 -66
  169. package/lib-prod/env/env.mobile-app.ts +0 -66
  170. package/lib-prod/env/env.npm-lib-and-cli-tool.ts +0 -66
  171. package/lib-prod/env/env.vscode-plugin.ts +0 -66
  172. package/lib-prod/env/index.ts +0 -6
  173. package/lib-prod/express-types.ts +0 -4
  174. package/lib-prod/formly/formly.models.ts +0 -7
  175. package/lib-prod/formly/fromly.ts +0 -261
  176. package/lib-prod/formly/type-from-entity.ts +0 -80
  177. package/lib-prod/get-response-value.ts +0 -30
  178. package/lib-prod/global-state/taon-global-state/index.ts +0 -6
  179. package/lib-prod/global-state/taon-global-state/taon-global-state.abstract.context.ts +0 -21
  180. package/lib-prod/global-state/taon-global-state/taon-global-state.constants.ts +0 -9
  181. package/lib-prod/global-state/taon-global-state/taon-global-state.controller.ts +0 -44
  182. package/lib-prod/global-state/taon-global-state/taon-global-state.entity.ts +0 -40
  183. package/lib-prod/global-state/taon-global-state/taon-global-state.middleware.ts +0 -12
  184. package/lib-prod/global-state/taon-global-state/taon-global-state.models.ts +0 -48
  185. package/lib-prod/global-state/taon-global-state/taon-global-state.provider.ts +0 -16
  186. package/lib-prod/global-state/taon-global-state/taon-global-state.repository.ts +0 -47
  187. package/lib-prod/global-state/taon-global-state/taon-global-state.subscriber.ts +0 -18
  188. package/lib-prod/global-state/taon-global-state/taon-global-state.utils.ts +0 -21
  189. package/lib-prod/global-state/taon-transaction-registry/index.ts +0 -11
  190. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.abstract.context.ts +0 -23
  191. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.constants.ts +0 -7
  192. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.controller.ts +0 -38
  193. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.entity.ts +0 -54
  194. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.middleware.ts +0 -12
  195. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.models.ts +0 -6
  196. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.provider.ts +0 -16
  197. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.repository.ts +0 -29
  198. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.subscriber.ts +0 -20
  199. package/lib-prod/global-state/taon-transaction-registry/taon-transaction-registry.utils.ts +0 -9
  200. package/lib-prod/helpers/class-helpers.ts +0 -315
  201. package/lib-prod/helpers/clone-obj.ts +0 -24
  202. package/lib-prod/helpers/taon-helpers.ts +0 -181
  203. package/lib-prod/index._auto-generated_.ts +0 -5
  204. package/lib-prod/index.ts +0 -323
  205. package/lib-prod/inject.ts +0 -111
  206. package/lib-prod/lib-info.md +0 -8
  207. package/lib-prod/migrations/index.ts +0 -2
  208. package/lib-prod/migrations/migrations-info.md +0 -6
  209. package/lib-prod/migrations/migrations_index._auto-generated_.ts +0 -5
  210. package/lib-prod/models.ts +0 -427
  211. package/lib-prod/orm/columns.ts +0 -121
  212. package/lib-prod/orm/index.ts +0 -62
  213. package/lib-prod/realtime/realtime-client.ts +0 -288
  214. package/lib-prod/realtime/realtime-core.ts +0 -134
  215. package/lib-prod/realtime/realtime-server.ts +0 -398
  216. package/lib-prod/realtime/realtime-strategy/index.ts +0 -4
  217. package/lib-prod/realtime/realtime-strategy/realtime-strategy-ipc.ts +0 -344
  218. package/lib-prod/realtime/realtime-strategy/realtime-strategy-mock.ts +0 -349
  219. package/lib-prod/realtime/realtime-strategy/realtime-strategy-socket-io.ts +0 -30
  220. package/lib-prod/realtime/realtime-strategy/realtime-strategy.ts +0 -21
  221. package/lib-prod/realtime/realtime-subs-manager.ts +0 -127
  222. package/lib-prod/realtime/realtime.models.ts +0 -33
  223. package/lib-prod/symbols.ts +0 -136
  224. package/lib-prod/ui/index.ts +0 -1
  225. package/lib-prod/ui/taon-admin-mode-configuration/index.ts +0 -1
  226. package/lib-prod/validators.ts +0 -103
@@ -0,0 +1,162 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+ var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
12
+ import * as FormData from "form-data";
13
+ import {
14
+ HttpResponseError
15
+ } from "ng2-rest/lib-prod";
16
+ import { crossPlatformPath, fse, path, CoreModels__NS__TaonHttpErrorCustomProp, UtilsTerminal__NS__waitMilliseconds } from "tnp-core/lib-prod";
17
+ import { TaonController } from "../decorators/classes/controller-decorator";
18
+ import { POST } from "../decorators/http/http-methods-decorators";
19
+ import { Body, Query } from "../decorators/http/http-params-decorators";
20
+ import { TaonBaseFileUploadMiddleware } from "./base-file-upload.middleware";
21
+ import { TaonBaseInjector } from "./base-injector";
22
+ let TaonBaseController = class extends TaonBaseInjector {
23
+ /**
24
+ * Hook that is called when taon app is inited
25
+ * (all contexts are created and inited)
26
+ */
27
+ async afterAllCtxInited(options) {
28
+ }
29
+ uploadFormDataToServer(formData, queryParams) {
30
+ return async (req, res) => {
31
+ const files = req.files;
32
+ if (!files) {
33
+ throw "No file(s) received";
34
+ }
35
+ const responseArr = files.map((f) => {
36
+ const savedAbs = crossPlatformPath(path.resolve(f.path));
37
+ return {
38
+ ok: true,
39
+ originalName: f.originalname,
40
+ savedAs: path.basename(savedAbs),
41
+ // savedPath: void 0, // not needed
42
+ size: f.size,
43
+ mimetype: f.mimetype
44
+ };
45
+ });
46
+ for (const res2 of responseArr) {
47
+ await this.afterFileUploadAction(res2, queryParams || {});
48
+ }
49
+ return responseArr;
50
+ };
51
+ }
52
+ //#endregion
53
+ //#region after file upload hook
54
+ /**
55
+ * Hook after file is uploaded
56
+ * through `uploadFormDataToServer` or `uploadLocalFileToServer`
57
+ */
58
+ afterFileUploadAction(file, queryParams) {
59
+ }
60
+ //#region upload local file to server
61
+ async uploadLocalFileToServer(absFilePath, options, queryParams) {
62
+ const stat = fse.statSync(absFilePath);
63
+ const stream = fse.createReadStream(absFilePath);
64
+ const form = new FormData();
65
+ form.append("file", stream, {
66
+ filename: path.basename(absFilePath),
67
+ knownLength: stat.size
68
+ });
69
+ const data = await this.uploadFormDataToServer(form, queryParams).request(
70
+ options || {}
71
+ );
72
+ return data.body.json;
73
+ }
74
+ //#endregion
75
+ // async check() {
76
+ // await this._waitForProperStatusChange({
77
+ // request: () => this.uploadFormDataToServer(void 0, void 0).request(),
78
+ // statusCheck: resp => resp.body.json[0].ok,
79
+ // });
80
+ // }
81
+ /**
82
+ * Easy way to wait for status change with http (1s default) pooling.
83
+ *
84
+ * example (in sub class):
85
+ * ```ts
86
+ async check() {
87
+ await this.waitForProperStatusChange({
88
+ request: () => this.uploadFormDataToServer(void 0, void 0).request(),
89
+ statusCheck: resp => resp.body.json[0].ok,
90
+ });
91
+ }
92
+ * ```
93
+ */
94
+ async _waitForProperStatusChange(options) {
95
+ const poolingInterval = options.poolingInterval || 1e3;
96
+ const taonRequest = options.request;
97
+ let maxTries = options.maxTries || Number.POSITIVE_INFINITY;
98
+ let i = 0;
99
+ let httpErrorsCount = 0;
100
+ while (true) {
101
+ await UtilsTerminal__NS__waitMilliseconds(poolingInterval);
102
+ try {
103
+ const resp = await taonRequest({
104
+ reqIndexNum: i,
105
+ httpErrorsCount
106
+ });
107
+ if (options.statusCheck && options.statusCheck(resp)) {
108
+ return;
109
+ }
110
+ } catch (error) {
111
+ httpErrorsCount++;
112
+ if (options.loopRequestsOnBackendError) {
113
+ const isProperTaonError = error instanceof HttpResponseError && error.body.json[CoreModels__NS__TaonHttpErrorCustomProp];
114
+ const isHttpError = error instanceof HttpResponseError && !isProperTaonError;
115
+ const isUnknownError = !(error instanceof HttpResponseError);
116
+ const resBool = await options.loopRequestsOnBackendError({
117
+ taonError: isProperTaonError ? error : void 0,
118
+ unknownHttpError: isHttpError ? error : void 0,
119
+ unknownError: isUnknownError ? error : void 0,
120
+ reqIndexNum: i,
121
+ httpErrorsCount
122
+ });
123
+ if (resBool) {
124
+ i++;
125
+ continue;
126
+ } else {
127
+ return;
128
+ }
129
+ }
130
+ if (httpErrorsCount > (options.allowedHttpErrors || Number.POSITIVE_INFINITY)) {
131
+ throw new Error(
132
+ `Too many http errors (${httpErrorsCount}) for "${options.actionName}".`
133
+ );
134
+ }
135
+ }
136
+ if (i++ > maxTries) {
137
+ throw new Error(
138
+ `Timeout waiting for "${options.actionName}" to be finished. Waited for ${maxTries} seconds`
139
+ );
140
+ }
141
+ }
142
+ }
143
+ };
144
+ __decorateClass([
145
+ POST({
146
+ overrideContentType: "multipart/form-data",
147
+ middlewares: ({ parentMiddlewares }) => ({
148
+ ...parentMiddlewares,
149
+ TaonBaseFileUploadMiddleware
150
+ })
151
+ }),
152
+ __decorateParam(0, Body()),
153
+ __decorateParam(1, Query())
154
+ ], TaonBaseController.prototype, "uploadFormDataToServer", 1);
155
+ TaonBaseController = __decorateClass([
156
+ TaonController({
157
+ className: "TaonBaseController"
158
+ })
159
+ ], TaonBaseController);
160
+ export {
161
+ TaonBaseController
162
+ };
@@ -0,0 +1,235 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+ var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
12
+ import { ___NS__isArray, ___NS__isFunction, ___NS__isString, Helpers__NS__error, Helpers__NS__warn } from "tnp-core/lib-prod";
13
+ import { TaonController } from "../decorators/classes/controller-decorator";
14
+ import {
15
+ GET,
16
+ PUT,
17
+ DELETE,
18
+ POST,
19
+ PATCH
20
+ } from "../decorators/http/http-methods-decorators";
21
+ import { Query, Body } from "../decorators/http/http-params-decorators";
22
+ import { ClassHelpers__NS__getClassFnFromObject, ClassHelpers__NS__getName } from "../helpers/class-helpers";
23
+ import { Symbols__NS__metadata, Symbols__NS__old } from "../symbols";
24
+ import { Validators__NS__preventUndefinedModel } from "../validators";
25
+ import { TaonBaseController } from "./base-controller";
26
+ let TaonBaseCrudController = class extends TaonBaseController {
27
+ //#region fields
28
+ db;
29
+ //#endregion
30
+ //#region init
31
+ async _() {
32
+ if (!___NS__isFunction(this.entityClassResolveFn)) {
33
+ Helpers__NS__warn(
34
+ `Skipping initing CRUD controller ${ClassHelpers__NS__getName(
35
+ this
36
+ )} because entityClassResolveFn is not provided.`
37
+ );
38
+ return;
39
+ }
40
+ let entityClassFn = this.entityClassResolveFn();
41
+ this.db = this.injectRepo(entityClassFn);
42
+ if (entityClassFn) {
43
+ const configEntity = Reflect.getMetadata(
44
+ Symbols__NS__metadata.options.entity,
45
+ ClassHelpers__NS__getClassFnFromObject(this)
46
+ );
47
+ if (configEntity?.createTable === false) {
48
+ Helpers__NS__warn(
49
+ `Table for entity ${ClassHelpers__NS__getName(
50
+ entityClassFn
51
+ )} will not be created. Crud will not work properly.`
52
+ );
53
+ }
54
+ } else {
55
+ Helpers__NS__error(`Entity class not provided for controller ${ClassHelpers__NS__getName(
56
+ this
57
+ )}.
58
+
59
+ Please provide entity as class property entityClassFn:
60
+
61
+ class ${ClassHelpers__NS__getName(this)} extends TaonBaseCrudController<Entity> {
62
+ // ...
63
+ entityClassResolveFn = ()=> MyEntityClass;
64
+ // ...
65
+ }
66
+
67
+ `);
68
+ }
69
+ await super._();
70
+ }
71
+ bufforedChanges(id, property, alreadyLength) {
72
+ return async (request, response) => {
73
+ const model = await this.db.getBy(id);
74
+ if (model === void 0) {
75
+ return;
76
+ }
77
+ Validators__NS__preventUndefinedModel(model, id);
78
+ let value = model[property];
79
+ let result;
80
+ if (___NS__isString(value) || ___NS__isArray(value)) {
81
+ result = value.slice(alreadyLength);
82
+ }
83
+ return result;
84
+ };
85
+ }
86
+ pagination(pageNumber = 1, pageSize = 10, search = "") {
87
+ return async (request, response) => {
88
+ if (this.db.repositoryExists) {
89
+ const query = {
90
+ page: pageNumber,
91
+ take: pageSize,
92
+ keyword: search
93
+ };
94
+ const take = query.take || 10;
95
+ const page = query.page || 1;
96
+ const skip = (page - 1) * take;
97
+ const keyword = query.keyword || "";
98
+ const [result, total] = await this.db.findAndCount({
99
+ // where: { name: Like('%' + keyword + '%') },
100
+ // order: { name: "DESC" },
101
+ take,
102
+ skip
103
+ });
104
+ response?.setHeader(Symbols__NS__old.X_TOTAL_COUNT, total);
105
+ return result;
106
+ }
107
+ return [];
108
+ };
109
+ }
110
+ getAll() {
111
+ return async (request, response) => {
112
+ if (this.db.repositoryExists) {
113
+ const { models, totalCount } = await this.db.getAll();
114
+ response?.setHeader(Symbols__NS__old.X_TOTAL_COUNT, totalCount);
115
+ return models;
116
+ }
117
+ return [];
118
+ };
119
+ }
120
+ getBy(id) {
121
+ return async () => {
122
+ const model = await this.db.getBy(id);
123
+ return model;
124
+ };
125
+ }
126
+ updateById(id, item) {
127
+ return async () => {
128
+ const model = await this.db.updateById(id, item);
129
+ return model;
130
+ };
131
+ }
132
+ patchById(id, item) {
133
+ return async () => {
134
+ const model = await this.db.updateById(id, item);
135
+ return model;
136
+ };
137
+ }
138
+ bulkUpdate(items) {
139
+ return async () => {
140
+ if (!Array.isArray(items) || items?.length === 0) {
141
+ return [];
142
+ }
143
+ const { models } = await this.db.bulkUpdate(items);
144
+ return models;
145
+ };
146
+ }
147
+ deleteById(id) {
148
+ return async () => {
149
+ const model = await this.db.deleteById(id);
150
+ return model;
151
+ };
152
+ }
153
+ bulkDelete(ids) {
154
+ return async () => {
155
+ const models = await this.db.bulkDelete(ids);
156
+ return models;
157
+ };
158
+ }
159
+ clearTable() {
160
+ return async () => {
161
+ await this.db.clear();
162
+ };
163
+ }
164
+ save(item) {
165
+ return async () => {
166
+ const model = await this.db.save(item);
167
+ return model;
168
+ };
169
+ }
170
+ bulkCreate(items) {
171
+ return async () => {
172
+ const models = await this.db.bulkCreate(items);
173
+ return models;
174
+ };
175
+ }
176
+ //#endregion
177
+ };
178
+ __decorateClass([
179
+ GET(),
180
+ __decorateParam(0, Query(`id`)),
181
+ __decorateParam(1, Query(`property`)),
182
+ __decorateParam(2, Query("alreadyLength"))
183
+ ], TaonBaseCrudController.prototype, "bufforedChanges", 1);
184
+ __decorateClass([
185
+ GET(),
186
+ __decorateParam(0, Query("pageNumber")),
187
+ __decorateParam(1, Query("pageSize")),
188
+ __decorateParam(2, Query("search"))
189
+ ], TaonBaseCrudController.prototype, "pagination", 1);
190
+ __decorateClass([
191
+ GET()
192
+ ], TaonBaseCrudController.prototype, "getAll", 1);
193
+ __decorateClass([
194
+ GET(),
195
+ __decorateParam(0, Query(`id`))
196
+ ], TaonBaseCrudController.prototype, "getBy", 1);
197
+ __decorateClass([
198
+ PUT(),
199
+ __decorateParam(0, Query(`id`)),
200
+ __decorateParam(1, Body())
201
+ ], TaonBaseCrudController.prototype, "updateById", 1);
202
+ __decorateClass([
203
+ PATCH(),
204
+ __decorateParam(0, Query(`id`)),
205
+ __decorateParam(1, Body())
206
+ ], TaonBaseCrudController.prototype, "patchById", 1);
207
+ __decorateClass([
208
+ PUT(),
209
+ __decorateParam(0, Body())
210
+ ], TaonBaseCrudController.prototype, "bulkUpdate", 1);
211
+ __decorateClass([
212
+ DELETE(),
213
+ __decorateParam(0, Query(`id`))
214
+ ], TaonBaseCrudController.prototype, "deleteById", 1);
215
+ __decorateClass([
216
+ DELETE(),
217
+ __decorateParam(0, Query(`ids`))
218
+ ], TaonBaseCrudController.prototype, "bulkDelete", 1);
219
+ __decorateClass([
220
+ DELETE()
221
+ ], TaonBaseCrudController.prototype, "clearTable", 1);
222
+ __decorateClass([
223
+ POST(),
224
+ __decorateParam(0, Body())
225
+ ], TaonBaseCrudController.prototype, "save", 1);
226
+ __decorateClass([
227
+ POST(),
228
+ __decorateParam(0, Body())
229
+ ], TaonBaseCrudController.prototype, "bulkCreate", 1);
230
+ TaonBaseCrudController = __decorateClass([
231
+ TaonController({ className: "TaonBaseCrudController" })
232
+ ], TaonBaseCrudController);
233
+ export {
234
+ TaonBaseCrudController
235
+ };
@@ -0,0 +1,20 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+ import { TaonRepository } from "../decorators/classes/repository-decorator";
12
+ import { TaonBaseInjector } from "./base-injector";
13
+ let TaonBaseCustomRepository = class extends TaonBaseInjector {
14
+ };
15
+ TaonBaseCustomRepository = __decorateClass([
16
+ TaonRepository({ className: "TaonBaseCustomRepository" })
17
+ ], TaonBaseCustomRepository);
18
+ export {
19
+ TaonBaseCustomRepository
20
+ };
File without changes
@@ -0,0 +1,32 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+ import { Entity } from "taon-typeorm/lib-prod";
12
+ import { TaonBaseClass } from "./base-class";
13
+ let TaonBaseEntity = class extends TaonBaseClass {
14
+ /**
15
+ * simple check if relation is ok
16
+ */
17
+ relation(relationName) {
18
+ return relationName;
19
+ }
20
+ /**
21
+ * simple check if relation is ok
22
+ */
23
+ relations(relationNames) {
24
+ return relationNames;
25
+ }
26
+ };
27
+ TaonBaseEntity = __decorateClass([
28
+ Entity()
29
+ ], TaonBaseEntity);
30
+ export {
31
+ TaonBaseEntity
32
+ };
@@ -0,0 +1,78 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+ import * as crypto from "crypto";
12
+ import * as multer from "multer";
13
+ import { crossPlatformPath, fse, path } from "tnp-core/lib-prod";
14
+ import { TaonMiddleware } from "../decorators/classes/middleware-decorator";
15
+ import {
16
+ TaonBaseMiddleware
17
+ } from "./base-middleware";
18
+ let TaonBaseFileUploadMiddleware = class extends TaonBaseMiddleware {
19
+ async interceptServerMethod({ req, res, next }, { methodName, expressPath }) {
20
+ return this.middleware()(req, res, next);
21
+ }
22
+ //#region upload Dir
23
+ uploadDir() {
24
+ return crossPlatformPath([this.ctx.cwd, "uploaded-files"]);
25
+ }
26
+ //#endregion
27
+ //#region storage
28
+ storage() {
29
+ const uploadDir = this.uploadDir();
30
+ if (!fse.existsSync(uploadDir)) {
31
+ try {
32
+ fse.mkdirSync(uploadDir, { recursive: true });
33
+ } catch (error) {
34
+ }
35
+ }
36
+ return multer.diskStorage({
37
+ destination: (_req, _file, cb) => cb(null, uploadDir),
38
+ filename: (_req, file, cb) => {
39
+ const ext = path.extname(file.originalname).toLowerCase();
40
+ const base = path.basename(file.originalname, ext).replace(/[^\w.-]/g, "_");
41
+ const uniq = `${Date.now()}-${crypto.randomBytes(6).toString("hex")}`;
42
+ const filenameToProcess = `${base}-${uniq}${ext}`;
43
+ cb(null, filenameToProcess);
44
+ }
45
+ });
46
+ }
47
+ //#endregion
48
+ //#region upload
49
+ upload() {
50
+ return multer({
51
+ storage: this.storage(),
52
+ limits: { fileSize: 1024 * 1024 * 1024 }
53
+ // 1 GiB cap; tweak as needed
54
+ // TODO implement file filter if needed
55
+ // fileFilter: (_req, file, cb) => {
56
+ // // accept only .zip by filename extension
57
+ // if (path.extname(file.originalname).toLowerCase() !== '.zip') {
58
+ // return cb(new Error('Only .zip files are allowed'));
59
+ // }
60
+ // cb(null, true);
61
+ // },
62
+ });
63
+ }
64
+ //#endregion
65
+ //#region middleware
66
+ middleware() {
67
+ return this.upload().any();
68
+ }
69
+ //#endregion
70
+ };
71
+ TaonBaseFileUploadMiddleware = __decorateClass([
72
+ TaonMiddleware({
73
+ className: "TaonBaseFileUploadMiddleware"
74
+ })
75
+ ], TaonBaseFileUploadMiddleware);
76
+ export {
77
+ TaonBaseFileUploadMiddleware
78
+ };