@webda/core 2.0.0-beta.3 → 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.
Files changed (276) hide show
  1. package/lib/application.d.ts +5 -5
  2. package/lib/application.js +71 -84
  3. package/lib/application.js.map +1 -1
  4. package/lib/application.spec.js +121 -140
  5. package/lib/application.spec.js.map +1 -1
  6. package/lib/core.d.ts +20 -24
  7. package/lib/core.js +222 -315
  8. package/lib/core.js.map +1 -1
  9. package/lib/core.spec.js +332 -406
  10. package/lib/core.spec.js.map +1 -1
  11. package/lib/index.d.ts +49 -48
  12. package/lib/index.js +53 -70
  13. package/lib/index.js.map +1 -1
  14. package/lib/models/aclmodel.d.ts +2 -2
  15. package/lib/models/aclmodel.js +63 -90
  16. package/lib/models/aclmodel.js.map +1 -1
  17. package/lib/models/aclmodel.spec.js +127 -152
  18. package/lib/models/aclmodel.spec.js.map +1 -1
  19. package/lib/models/coremodel.d.ts +7 -6
  20. package/lib/models/coremodel.js +65 -113
  21. package/lib/models/coremodel.js.map +1 -1
  22. package/lib/models/coremodel.spec.js +88 -107
  23. package/lib/models/coremodel.spec.js.map +1 -1
  24. package/lib/models/deployment.js +1 -2
  25. package/lib/models/ident.d.ts +3 -3
  26. package/lib/models/ident.js +4 -9
  27. package/lib/models/ident.js.map +1 -1
  28. package/lib/models/ident.spec.js +9 -11
  29. package/lib/models/ident.spec.js.map +1 -1
  30. package/lib/models/ownermodel.d.ts +2 -2
  31. package/lib/models/ownermodel.js +39 -62
  32. package/lib/models/ownermodel.js.map +1 -1
  33. package/lib/models/ownermodel.spec.js +126 -168
  34. package/lib/models/ownermodel.spec.js.map +1 -1
  35. package/lib/models/rolemodel.d.ts +1 -1
  36. package/lib/models/rolemodel.js +24 -40
  37. package/lib/models/rolemodel.js.map +1 -1
  38. package/lib/models/rolemodel.spec.js +44 -63
  39. package/lib/models/rolemodel.spec.js.map +1 -1
  40. package/lib/models/user.d.ts +3 -3
  41. package/lib/models/user.js +3 -8
  42. package/lib/models/user.js.map +1 -1
  43. package/lib/models/user.spec.js +14 -16
  44. package/lib/models/user.spec.js.map +1 -1
  45. package/lib/queues/filequeue.d.ts +2 -2
  46. package/lib/queues/filequeue.js +72 -93
  47. package/lib/queues/filequeue.js.map +1 -1
  48. package/lib/queues/filequeue.spec.js +53 -70
  49. package/lib/queues/filequeue.spec.js.map +1 -1
  50. package/lib/queues/memoryqueue.d.ts +2 -2
  51. package/lib/queues/memoryqueue.js +37 -61
  52. package/lib/queues/memoryqueue.js.map +1 -1
  53. package/lib/queues/memoryqueue.spec.js +142 -165
  54. package/lib/queues/memoryqueue.spec.js.map +1 -1
  55. package/lib/queues/pubsubservice.d.ts +2 -2
  56. package/lib/queues/pubsubservice.js +3 -7
  57. package/lib/queues/pubsubservice.js.map +1 -1
  58. package/lib/queues/queue.spec.d.ts +1 -1
  59. package/lib/queues/queue.spec.js +42 -56
  60. package/lib/queues/queue.spec.js.map +1 -1
  61. package/lib/queues/queueservice.d.ts +3 -3
  62. package/lib/queues/queueservice.js +51 -67
  63. package/lib/queues/queueservice.js.map +1 -1
  64. package/lib/router.d.ts +3 -3
  65. package/lib/router.js +46 -47
  66. package/lib/router.js.map +1 -1
  67. package/lib/router.spec.js +64 -61
  68. package/lib/router.spec.js.map +1 -1
  69. package/lib/services/asyncevents.d.ts +2 -2
  70. package/lib/services/asyncevents.js +44 -64
  71. package/lib/services/asyncevents.js.map +1 -1
  72. package/lib/services/asyncevents.spec.js +81 -98
  73. package/lib/services/asyncevents.spec.js.map +1 -1
  74. package/lib/services/authentication.d.ts +23 -13
  75. package/lib/services/authentication.js +537 -563
  76. package/lib/services/authentication.js.map +1 -1
  77. package/lib/services/authentication.spec.js +411 -447
  78. package/lib/services/authentication.spec.js.map +1 -1
  79. package/lib/services/binary.d.ts +7 -5
  80. package/lib/services/binary.js +211 -244
  81. package/lib/services/binary.js.map +1 -1
  82. package/lib/services/binary.spec.d.ts +3 -3
  83. package/lib/services/binary.spec.js +390 -443
  84. package/lib/services/binary.spec.js.map +1 -1
  85. package/lib/services/cloudbinary.d.ts +3 -3
  86. package/lib/services/cloudbinary.js +45 -70
  87. package/lib/services/cloudbinary.js.map +1 -1
  88. package/lib/services/cloudbinary.spec.d.ts +3 -3
  89. package/lib/services/cloudbinary.spec.js +133 -162
  90. package/lib/services/cloudbinary.spec.js.map +1 -1
  91. package/lib/services/configuration.d.ts +1 -1
  92. package/lib/services/configuration.js +78 -105
  93. package/lib/services/configuration.js.map +1 -1
  94. package/lib/services/configuration.spec.js +63 -83
  95. package/lib/services/configuration.spec.js.map +1 -1
  96. package/lib/services/cron.d.ts +3 -2
  97. package/lib/services/cron.js +9 -13
  98. package/lib/services/cron.js.map +1 -1
  99. package/lib/services/cron.spec.js +18 -21
  100. package/lib/services/cron.spec.js.map +1 -1
  101. package/lib/services/cryptoservice.d.ts +9 -4
  102. package/lib/services/cryptoservice.js +187 -221
  103. package/lib/services/cryptoservice.js.map +1 -1
  104. package/lib/services/cryptoservice.spec.js +88 -115
  105. package/lib/services/cryptoservice.spec.js.map +1 -1
  106. package/lib/services/debugmailer.d.ts +1 -1
  107. package/lib/services/debugmailer.js +13 -34
  108. package/lib/services/debugmailer.js.map +1 -1
  109. package/lib/services/debugmailer.spec.js +16 -29
  110. package/lib/services/debugmailer.spec.js.map +1 -1
  111. package/lib/services/echo.d.ts +2 -2
  112. package/lib/services/echo.js +15 -31
  113. package/lib/services/echo.js.map +1 -1
  114. package/lib/services/echo.spec.js +27 -40
  115. package/lib/services/echo.spec.js.map +1 -1
  116. package/lib/services/filebinary.d.ts +5 -5
  117. package/lib/services/filebinary.js +165 -210
  118. package/lib/services/filebinary.js.map +1 -1
  119. package/lib/services/filebinary.spec.d.ts +2 -1
  120. package/lib/services/filebinary.spec.js +106 -116
  121. package/lib/services/filebinary.spec.js.map +1 -1
  122. package/lib/services/fileconfiguration.d.ts +1 -1
  123. package/lib/services/fileconfiguration.js +25 -44
  124. package/lib/services/fileconfiguration.js.map +1 -1
  125. package/lib/services/fileconfiguration.spec.js +79 -109
  126. package/lib/services/fileconfiguration.spec.js.map +1 -1
  127. package/lib/services/invitationservice.d.ts +7 -7
  128. package/lib/services/invitationservice.js +274 -314
  129. package/lib/services/invitationservice.js.map +1 -1
  130. package/lib/services/invitationservice.spec.js +442 -448
  131. package/lib/services/invitationservice.spec.js.map +1 -1
  132. package/lib/services/kubernetesconfiguration.d.ts +1 -1
  133. package/lib/services/kubernetesconfiguration.js +41 -60
  134. package/lib/services/kubernetesconfiguration.js.map +1 -1
  135. package/lib/services/kubernetesconfiguration.spec.js +80 -98
  136. package/lib/services/kubernetesconfiguration.spec.js.map +1 -1
  137. package/lib/services/mailer.d.ts +4 -4
  138. package/lib/services/mailer.js +62 -86
  139. package/lib/services/mailer.js.map +1 -1
  140. package/lib/services/mailer.spec.js +86 -127
  141. package/lib/services/mailer.spec.js.map +1 -1
  142. package/lib/services/notificationservice.d.ts +3 -3
  143. package/lib/services/notificationservice.js +21 -42
  144. package/lib/services/notificationservice.js.map +1 -1
  145. package/lib/services/notificationservice.spec.js +47 -73
  146. package/lib/services/notificationservice.spec.js.map +1 -1
  147. package/lib/services/oauth.d.ts +4 -4
  148. package/lib/services/oauth.js +68 -83
  149. package/lib/services/oauth.js.map +1 -1
  150. package/lib/services/oauth.spec.js +130 -156
  151. package/lib/services/oauth.spec.js.map +1 -1
  152. package/lib/services/proxy.d.ts +2 -6
  153. package/lib/services/proxy.js +45 -58
  154. package/lib/services/proxy.js.map +1 -1
  155. package/lib/services/proxy.spec.js +34 -53
  156. package/lib/services/proxy.spec.js.map +1 -1
  157. package/lib/services/resource.d.ts +2 -2
  158. package/lib/services/resource.js +12 -18
  159. package/lib/services/resource.js.map +1 -1
  160. package/lib/services/resource.spec.js +67 -99
  161. package/lib/services/resource.spec.js.map +1 -1
  162. package/lib/services/service.d.ts +26 -3
  163. package/lib/services/service.js +68 -40
  164. package/lib/services/service.js.map +1 -1
  165. package/lib/services/service.spec.js +62 -67
  166. package/lib/services/service.spec.js.map +1 -1
  167. package/lib/services/version.d.ts +1 -1
  168. package/lib/services/version.js +3 -8
  169. package/lib/services/version.js.map +1 -1
  170. package/lib/services/version.spec.js +11 -24
  171. package/lib/services/version.spec.js.map +1 -1
  172. package/lib/stores/aggregator.d.ts +2 -2
  173. package/lib/stores/aggregator.js +37 -58
  174. package/lib/stores/aggregator.js.map +1 -1
  175. package/lib/stores/file.d.ts +3 -3
  176. package/lib/stores/file.js +93 -131
  177. package/lib/stores/file.js.map +1 -1
  178. package/lib/stores/file.spec.d.ts +2 -2
  179. package/lib/stores/file.spec.js +261 -289
  180. package/lib/stores/file.spec.js.map +1 -1
  181. package/lib/stores/mapper.d.ts +3 -3
  182. package/lib/stores/mapper.js +110 -137
  183. package/lib/stores/mapper.js.map +1 -1
  184. package/lib/stores/mapper.spec.js +131 -150
  185. package/lib/stores/mapper.spec.js.map +1 -1
  186. package/lib/stores/memory.d.ts +3 -3
  187. package/lib/stores/memory.js +98 -144
  188. package/lib/stores/memory.js.map +1 -1
  189. package/lib/stores/memory.spec.d.ts +2 -2
  190. package/lib/stores/memory.spec.js +124 -145
  191. package/lib/stores/memory.spec.js.map +1 -1
  192. package/lib/stores/store.d.ts +17 -13
  193. package/lib/stores/store.js +819 -847
  194. package/lib/stores/store.js.map +1 -1
  195. package/lib/stores/store.spec.d.ts +5 -4
  196. package/lib/stores/store.spec.js +624 -669
  197. package/lib/stores/store.spec.js.map +1 -1
  198. package/lib/stores/webdaql/WebdaQLLexer.d.ts +4 -4
  199. package/lib/stores/webdaql/WebdaQLLexer.js +9 -13
  200. package/lib/stores/webdaql/WebdaQLLexer.js.map +1 -1
  201. package/lib/stores/webdaql/WebdaQLParserLexer.d.ts +4 -4
  202. package/lib/stores/webdaql/WebdaQLParserLexer.js +9 -13
  203. package/lib/stores/webdaql/WebdaQLParserLexer.js.map +1 -1
  204. package/lib/stores/webdaql/WebdaQLParserListener.d.ts +2 -2
  205. package/lib/stores/webdaql/WebdaQLParserListener.js +1 -2
  206. package/lib/stores/webdaql/WebdaQLParserListener.js.map +1 -1
  207. package/lib/stores/webdaql/WebdaQLParserParser.d.ts +10 -10
  208. package/lib/stores/webdaql/WebdaQLParserParser.js +62 -91
  209. package/lib/stores/webdaql/WebdaQLParserParser.js.map +1 -1
  210. package/lib/stores/webdaql/WebdaQLParserVisitor.d.ts +2 -2
  211. package/lib/stores/webdaql/WebdaQLParserVisitor.js +1 -2
  212. package/lib/stores/webdaql/WebdaQLParserVisitor.js.map +1 -1
  213. package/lib/stores/webdaql/query.d.ts +4 -5
  214. package/lib/stores/webdaql/query.js +16 -19
  215. package/lib/stores/webdaql/query.js.map +1 -1
  216. package/lib/stores/webdaql/query.spec.js +30 -32
  217. package/lib/stores/webdaql/query.spec.js.map +1 -1
  218. package/lib/test.d.ts +3 -3
  219. package/lib/test.js +73 -100
  220. package/lib/test.js.map +1 -1
  221. package/lib/unpackedapplication.d.ts +1 -1
  222. package/lib/unpackedapplication.js +25 -31
  223. package/lib/unpackedapplication.js.map +1 -1
  224. package/lib/utils/abstractdeployer.js +1 -5
  225. package/lib/utils/abstractdeployer.js.map +1 -1
  226. package/lib/utils/abstractdeployer.spec.js +6 -8
  227. package/lib/utils/abstractdeployer.spec.js.map +1 -1
  228. package/lib/utils/context.d.ts +7 -5
  229. package/lib/utils/context.js +95 -103
  230. package/lib/utils/context.js.map +1 -1
  231. package/lib/utils/context.spec.js +139 -163
  232. package/lib/utils/context.spec.js.map +1 -1
  233. package/lib/utils/cookie.d.ts +3 -3
  234. package/lib/utils/cookie.js +42 -61
  235. package/lib/utils/cookie.js.map +1 -1
  236. package/lib/utils/cookie.spec.js +42 -64
  237. package/lib/utils/cookie.spec.js.map +1 -1
  238. package/lib/utils/esm.d.ts +4 -0
  239. package/lib/utils/esm.js +10 -0
  240. package/lib/utils/esm.js.map +1 -0
  241. package/lib/utils/httpcontext.d.ts +3 -0
  242. package/lib/utils/httpcontext.js +48 -65
  243. package/lib/utils/httpcontext.js.map +1 -1
  244. package/lib/utils/httpcontext.spec.js +37 -56
  245. package/lib/utils/httpcontext.spec.js.map +1 -1
  246. package/lib/utils/logger.d.ts +2 -2
  247. package/lib/utils/logger.js +15 -28
  248. package/lib/utils/logger.js.map +1 -1
  249. package/lib/utils/logger.spec.js +9 -11
  250. package/lib/utils/logger.spec.js.map +1 -1
  251. package/lib/utils/serializers.js +17 -20
  252. package/lib/utils/serializers.js.map +1 -1
  253. package/lib/utils/serializers.spec.js +43 -44
  254. package/lib/utils/serializers.spec.js.map +1 -1
  255. package/lib/utils/session.d.ts +6 -6
  256. package/lib/utils/session.js +37 -59
  257. package/lib/utils/session.js.map +1 -1
  258. package/lib/utils/session.spec.js +38 -51
  259. package/lib/utils/session.spec.js.map +1 -1
  260. package/lib/utils/waiter.d.ts +1 -1
  261. package/lib/utils/waiter.js +32 -52
  262. package/lib/utils/waiter.js.map +1 -1
  263. package/lib/utils/waiter.spec.js +75 -92
  264. package/lib/utils/waiter.spec.js.map +1 -1
  265. package/package.json +17 -12
  266. package/test/config-invitation.json +1 -3
  267. package/test/config.json +1 -2
  268. package/test/config.old.json +1 -2
  269. package/test/moddas/annotatedservice.js +5 -5
  270. package/test/moddas/debugmailer.js +2 -3
  271. package/test/moddas/fakeservice.js +2 -3
  272. package/test/moddas/voidstore.js +6 -4
  273. package/test/models/ident.js +2 -6
  274. package/test/models/task.js +3 -7
  275. package/test/package.json +2 -1
  276. package/webda.module.json +956 -189
package/lib/core.js CHANGED
@@ -1,37 +1,34 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Core = exports.Route = exports.Bean = exports.WebsiteOriginFilter = exports.OriginFilter = exports.WebdaError = exports.RegistryEntry = void 0;
13
- const ajv_1 = require("ajv");
14
- const ajv_formats_1 = require("ajv-formats");
15
- const validation_error_1 = require("ajv/dist/runtime/validation_error");
16
- const deepmerge_ts_1 = require("deepmerge-ts");
17
- const events = require("events");
18
- const jsonpath = require("jsonpath");
19
- const node_machine_id_1 = require("node-machine-id");
20
- const uuid_1 = require("uuid");
21
- const vm = require("vm");
22
- const index_1 = require("./index");
23
- const coremodel_1 = require("./models/coremodel");
24
- const router_1 = require("./router");
1
+ import Ajv from "ajv";
2
+ import addFormats from "ajv-formats";
3
+ import { deepmerge } from "deepmerge-ts";
4
+ import * as events from "events";
5
+ import jsonpath from "jsonpath";
6
+ import pkg from "node-machine-id";
7
+ import { v4 as uuidv4 } from "uuid";
8
+ import { Context, Logger, Store } from "./index.js";
9
+ import { CoreModel } from "./models/coremodel.js";
10
+ import { Router } from "./router.js";
11
+ const { machineIdSync } = pkg;
12
+ /**
13
+ * Copy from https://github.com/ajv-validator/ajv/blob/master/lib/runtime/validation_error.ts
14
+ * It is not exported by ajv
15
+ */
16
+ export class ValidationError extends Error {
17
+ constructor(errors) {
18
+ super("validation failed");
19
+ this.errors = errors;
20
+ this.ajv = this.validation = true;
21
+ }
22
+ }
25
23
  /**
26
24
  *
27
25
  */
28
- class RegistryEntry extends coremodel_1.CoreModel {
26
+ export class RegistryEntry extends CoreModel {
29
27
  }
30
- exports.RegistryEntry = RegistryEntry;
31
28
  /**
32
29
  * Error with a code
33
30
  */
34
- class WebdaError extends Error {
31
+ export class WebdaError extends Error {
35
32
  /**
36
33
  *
37
34
  * @param code
@@ -48,13 +45,12 @@ class WebdaError extends Error {
48
45
  return this.code;
49
46
  }
50
47
  }
51
- exports.WebdaError = WebdaError;
52
48
  /**
53
49
  * Filter request based on their origin
54
50
  *
55
51
  * @category CoreFeatures
56
52
  */
57
- class OriginFilter {
53
+ export class OriginFilter {
58
54
  constructor(origins) {
59
55
  this.regexs = origins.map(origin => {
60
56
  if (!origin.endsWith("$")) {
@@ -71,26 +67,23 @@ class OriginFilter {
71
67
  * @param context
72
68
  * @returns
73
69
  */
74
- checkRequest(context) {
75
- return __awaiter(this, void 0, void 0, function* () {
76
- let httpContext = context.getHttpContext();
77
- for (let regexp of this.regexs) {
78
- if (httpContext.hostname.match(regexp)) {
79
- return true;
80
- }
81
- if (httpContext.origin.match(regexp)) {
82
- return true;
83
- }
70
+ async checkRequest(context) {
71
+ let httpContext = context.getHttpContext();
72
+ for (let regexp of this.regexs) {
73
+ if (httpContext.hostname.match(regexp)) {
74
+ return true;
84
75
  }
85
- return false;
86
- });
76
+ if (httpContext.origin.match(regexp)) {
77
+ return true;
78
+ }
79
+ }
80
+ return false;
87
81
  }
88
82
  }
89
- exports.OriginFilter = OriginFilter;
90
83
  /**
91
84
  * Authorize requests based on the website
92
85
  */
93
- class WebsiteOriginFilter {
86
+ export class WebsiteOriginFilter {
94
87
  constructor(website) {
95
88
  this.websites = [];
96
89
  if (!Array.isArray(website)) {
@@ -105,58 +98,35 @@ class WebsiteOriginFilter {
105
98
  this.websites = [...website];
106
99
  }
107
100
  }
108
- checkRequest(context) {
109
- return __awaiter(this, void 0, void 0, function* () {
110
- let httpContext = context.getHttpContext();
111
- if (this.websites.indexOf(httpContext.origin) >= 0 ||
112
- this.websites.indexOf(httpContext.host) >= 0 ||
113
- this.websites.indexOf("*") >= 0) {
114
- return true;
115
- }
116
- return false;
117
- });
101
+ async checkRequest(context) {
102
+ let httpContext = context.getHttpContext();
103
+ if (this.websites.indexOf(httpContext.origin) >= 0 ||
104
+ this.websites.indexOf(httpContext.host) >= 0 ||
105
+ this.websites.indexOf("*") >= 0) {
106
+ return true;
107
+ }
108
+ return false;
118
109
  }
119
110
  }
120
- exports.WebsiteOriginFilter = WebsiteOriginFilter;
121
111
  const beans = {};
122
112
  // @Bean to declare as a Singleton service
123
- function Bean(constructor) {
113
+ export function Bean(constructor) {
124
114
  let name = constructor.name.toLowerCase();
125
115
  beans[name] = beans[name] || { constructor };
126
- beans[name] = Object.assign(Object.assign({}, beans[name]), { bean: true });
116
+ beans[name] = { ...beans[name], bean: true };
127
117
  }
128
- exports.Bean = Bean;
129
- // @Route to declare route on Bean
130
- function Route(route, methods = ["GET"], allowPath = false, openapi = {}) {
131
- return function (target, executor) {
132
- let targetName = target.constructor.name.toLowerCase();
133
- beans[targetName] = beans[targetName] || {
134
- constructor: target.constructor
135
- };
136
- beans[targetName].routes = beans[targetName].routes || {};
137
- beans[targetName].routes[route] = beans[targetName].routes[route] || [];
138
- beans[targetName].routes[route].push({
139
- methods: Array.isArray(methods) ? methods : [methods],
140
- executor,
141
- allowPath,
142
- openapi
143
- });
144
- };
145
- }
146
- exports.Route = Route;
147
118
  /**
148
119
  * This is the main class of the framework, it handles the routing, the services initialization and resolution
149
120
  *
150
121
  * @class Core
151
122
  * @category CoreFeatures
152
123
  */
153
- class Core extends events.EventEmitter {
124
+ export class Core extends events.EventEmitter {
154
125
  /**
155
126
  * @params {Object} config - The configuration Object, if undefined will load the configuration file
156
127
  */
157
128
  constructor(application) {
158
129
  var _a, _b, _c;
159
- var _d, _e, _f;
160
130
  /** @ignore */
161
131
  super();
162
132
  /**
@@ -167,7 +137,7 @@ class Core extends events.EventEmitter {
167
137
  /**
168
138
  * Router that will route http request in
169
139
  */
170
- this.router = new router_1.Router(this);
140
+ this.router = new Router(this);
171
141
  /**
172
142
  * If Core is already initiated
173
143
  */
@@ -191,21 +161,21 @@ class Core extends events.EventEmitter {
191
161
  */
192
162
  this._requestCORSFilters = [];
193
163
  this.workerOutput = application.getWorkerOutput();
194
- this.logger = new index_1.Logger(this.workerOutput, "@webda/core/lib/core.js");
164
+ this.logger = new Logger(this.workerOutput, "@webda/core/lib/core.js");
195
165
  this.application = application;
196
166
  this._initTime = new Date().getTime();
197
167
  // Schema validations
198
- this._ajv = new ajv_1.default();
199
- (0, ajv_formats_1.default)(this._ajv);
168
+ this._ajv = new Ajv();
169
+ addFormats(this._ajv);
200
170
  this._ajvSchemas = {};
201
171
  // Load the configuration and migrate
202
172
  this.configuration = this.application.getCurrentConfiguration();
203
173
  // Set the global context
204
- index_1.Context.setGlobalContext(new (this.getModel(this.parameter("contextModel") || "Webda/Context"))(this));
174
+ Context.setGlobalContext(new (this.getModel(this.parameter("contextModel") || "Webda/Context"))(this));
205
175
  // Init default values for configuration
206
- (_a = (_d = this.configuration).parameters) !== null && _a !== void 0 ? _a : (_d.parameters = {});
207
- (_b = (_e = this.configuration.parameters).apiUrl) !== null && _b !== void 0 ? _b : (_e.apiUrl = "http://localhost:18080");
208
- (_c = (_f = this.configuration).services) !== null && _c !== void 0 ? _c : (_f.services = {});
176
+ (_a = this.configuration).parameters ?? (_a.parameters = {});
177
+ (_b = this.configuration.parameters).apiUrl ?? (_b.apiUrl = "http://localhost:18080");
178
+ (_c = this.configuration).services ?? (_c.services = {});
209
179
  // Add CSRF origins filtering
210
180
  if (this.configuration.parameters.csrfOrigins) {
211
181
  this.registerCORSFilter(new OriginFilter(this.configuration.parameters.csrfOrigins));
@@ -221,8 +191,7 @@ class Core extends events.EventEmitter {
221
191
  * It is a random generated string
222
192
  */
223
193
  getInstanceId() {
224
- var _a;
225
- (_a = this.instanceId) !== null && _a !== void 0 ? _a : (this.instanceId = this.getUuid());
194
+ this.instanceId ?? (this.instanceId = this.getUuid());
226
195
  return this.instanceId;
227
196
  }
228
197
  /**
@@ -246,21 +215,6 @@ class Core extends events.EventEmitter {
246
215
  getAppPath(subpath = "") {
247
216
  return this.application.getAppPath(subpath);
248
217
  }
249
- /**
250
- * Reinit the @Route
251
- */
252
- reinitResolvedRoutes() {
253
- for (let i in beans) {
254
- if (beans[i].routes) {
255
- for (let j in beans[i].routes) {
256
- beans[i].routes[j].forEach(r => {
257
- r.resolved = false;
258
- this.router.removeRoute(j, r.info);
259
- });
260
- }
261
- }
262
- }
263
- }
264
218
  /**
265
219
  * Retrieve all detected modules definition
266
220
  */
@@ -283,109 +237,83 @@ class Core extends events.EventEmitter {
283
237
  * Init one service
284
238
  * @param service
285
239
  */
286
- initService(service) {
287
- return __awaiter(this, void 0, void 0, function* () {
288
- try {
289
- // TODO Define parralel initialization
290
- this.log("TRACE", "Initializing service", service);
291
- this.initBeanRoutes(this.services[service]);
292
- this.services[service]._initTime = Date.now();
293
- yield this.services[service].init();
294
- }
295
- catch (err) {
296
- this.services[service]._initException = err;
297
- this.failedServices[service] = { _initException: err };
298
- this.log("ERROR", "Init service " + service + " failed: " + err.message);
299
- this.log("TRACE", err.stack);
300
- }
301
- });
240
+ async initService(service) {
241
+ try {
242
+ // TODO Define parralel initialization
243
+ this.log("TRACE", "Initializing service", service);
244
+ this.services[service]._initTime = Date.now();
245
+ await this.services[service].init();
246
+ }
247
+ catch (err) {
248
+ this.services[service]._initException = err;
249
+ this.failedServices[service] = { _initException: err };
250
+ this.log("ERROR", "Init service " + service + " failed: " + err.message);
251
+ this.log("TRACE", err.stack);
252
+ }
302
253
  }
303
254
  /**
304
255
  * Get an object from the application based on its full uuid
305
256
  * @param fullUuid
306
257
  * @param partials
307
258
  */
308
- getModelObject(fullUuid, partials) {
309
- return __awaiter(this, void 0, void 0, function* () {
310
- return coremodel_1.CoreModel.fromFullUuid(this, fullUuid, partials);
311
- });
259
+ async getModelObject(fullUuid, partials) {
260
+ return CoreModel.fromFullUuid(this, fullUuid, partials);
312
261
  }
313
262
  /**
314
263
  * Init Webda
315
264
  *
316
265
  * It will resolve Services init method and autolink
317
266
  */
318
- init() {
319
- var _a, _b, _c, _d, _e;
320
- var _f, _g, _h, _j, _k;
321
- return __awaiter(this, void 0, void 0, function* () {
322
- if (this._init) {
323
- return this._init;
324
- }
325
- if (this.configuration.parameters.configurationService) {
326
- try {
327
- this.log("INFO", "Create and init ConfigurationService", this.configuration.parameters.configurationService);
328
- // Create the configuration service
329
- this.createService(this.configuration.services, this.configuration.parameters.configurationService);
330
- let cfg = yield this.getService(this.configuration.parameters.configurationService).initConfiguration();
331
- if (cfg.webda) {
332
- (_a = (_f = cfg.webda).parameters) !== null && _a !== void 0 ? _a : (_f.parameters = {});
333
- (_b = (_g = cfg.webda).services) !== null && _b !== void 0 ? _b : (_g.services = {});
334
- this.configuration.parameters = Object.assign(Object.assign({}, this.configuration.parameters), cfg.webda.parameters);
335
- for (let i in this.configuration.services) {
336
- this.configuration.services[i] = Object.assign(Object.assign({}, (0, deepmerge_ts_1.deepmerge)(this.configuration.services[i], cfg.webda.services[i] || {})), { type: this.configuration.services[i].type });
337
- }
267
+ async init() {
268
+ var _a, _b;
269
+ if (this._init) {
270
+ return this._init;
271
+ }
272
+ if (this.configuration.parameters.configurationService) {
273
+ try {
274
+ this.log("INFO", "Create and init ConfigurationService", this.configuration.parameters.configurationService);
275
+ // Create the configuration service
276
+ this.createService(this.configuration.services, this.configuration.parameters.configurationService);
277
+ let cfg = await this.getService(this.configuration.parameters.configurationService).initConfiguration();
278
+ if (cfg.webda) {
279
+ (_a = cfg.webda).parameters ?? (_a.parameters = {});
280
+ (_b = cfg.webda).services ?? (_b.services = {});
281
+ this.configuration.parameters = { ...this.configuration.parameters, ...cfg.webda.parameters };
282
+ for (let i in this.configuration.services) {
283
+ this.configuration.services[i] = {
284
+ ...deepmerge(this.configuration.services[i], cfg.webda.services[i] || {}),
285
+ type: this.configuration.services[i].type
286
+ };
338
287
  }
339
- yield this.getService(this.configuration.parameters.configurationService).init();
340
- }
341
- catch (err) {
342
- this.log("ERROR", "Cannot use ConfigurationService", this.configuration.parameters.configurationService, err);
343
- this.services = {};
344
288
  }
289
+ await this.getService(this.configuration.parameters.configurationService).init();
345
290
  }
346
- // Init the registry
347
- const autoRegistry = this.configuration.services["Registry"] === undefined;
348
- (_c = (_h = this.configuration.services)["Registry"]) !== null && _c !== void 0 ? _c : (_h["Registry"] = {
349
- type: "webda/memorystore",
350
- persistence: {
351
- path: ".registry",
352
- key: (0, node_machine_id_1.machineIdSync)()
353
- }
354
- });
355
- this.createService(this.configuration.services, "Registry");
356
- this.registry = yield this.getService("Registry").resolve().init();
357
- // Init the key service
358
- (_d = (_j = this.configuration.services)["CryptoService"]) !== null && _d !== void 0 ? _d : (_j["CryptoService"] = {
359
- type: "webda/cryptoservice",
360
- autoRotate: autoRegistry ? 86400 : undefined
361
- });
362
- this.createService(this.configuration.services, "CryptoService");
363
- this.cryptoService = yield this.getService("CryptoService").resolve().init();
364
- // Session Manager
365
- (_e = (_k = this.configuration.services)["SessionManager"]) !== null && _e !== void 0 ? _e : (_k["SessionManager"] = {
366
- type: "webda/cookiesessionmanager"
367
- });
368
- // Init the other services
369
- this.initStatics();
370
- this.reinitResolvedRoutes();
371
- this.log("TRACE", "Create Webda init promise");
372
- this._init = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
373
- // Init services
374
- let service;
375
- let inits = [];
376
- for (service in this.services) {
377
- if (this.services[service].init !== undefined &&
378
- !this.services[service]._createException &&
379
- !this.services[service]._initTime) {
380
- inits.push(this.initService(service));
381
- }
291
+ catch (err) {
292
+ this.log("ERROR", "Cannot use ConfigurationService", this.configuration.parameters.configurationService, err);
293
+ this.services = {};
294
+ }
295
+ }
296
+ // Init the other services
297
+ this.initStatics();
298
+ this.log("TRACE", "Create Webda init promise");
299
+ this._init = new Promise(async (resolve) => {
300
+ await this.initService("registry");
301
+ await this.initService("cryptoservice");
302
+ // Init services
303
+ let service;
304
+ let inits = [];
305
+ for (service in this.services) {
306
+ if (this.services[service].init !== undefined &&
307
+ !this.services[service]._createException &&
308
+ !this.services[service]._initTime) {
309
+ inits.push(this.initService(service));
382
310
  }
383
- yield Promise.all(inits);
384
- yield this.emitSync("Webda.Init.Services", this.services);
385
- resolve();
386
- }));
387
- return this._init;
311
+ }
312
+ await Promise.all(inits);
313
+ await this.emitSync("Webda.Init.Services", this.services);
314
+ resolve();
388
315
  });
316
+ return this._init;
389
317
  }
390
318
  /**
391
319
  * Register a request filtering
@@ -405,23 +333,6 @@ class Core extends events.EventEmitter {
405
333
  registerCORSFilter(filter) {
406
334
  this._requestCORSFilters.push(filter);
407
335
  }
408
- /**
409
- *
410
- * @param {Object} executor The executor to expose as executor
411
- * @param {String} code to execute
412
- */
413
- sandbox(code, context) {
414
- context !== null && context !== void 0 ? context : (context = {
415
- require: () => {
416
- throw Error("not allowed");
417
- }
418
- });
419
- context.module = {
420
- exports: {}
421
- };
422
- vm.runInNewContext(code, context);
423
- return context.module.exports();
424
- }
425
336
  /**
426
337
  * Validate the object with schema
427
338
  *
@@ -444,7 +355,7 @@ class Core extends events.EventEmitter {
444
355
  if (this._ajv.validate(name, object)) {
445
356
  return true;
446
357
  }
447
- throw new validation_error_1.default(this._ajv.errors);
358
+ throw new ValidationError(this._ajv.errors);
448
359
  }
449
360
  /**
450
361
  * Return webda current version
@@ -481,7 +392,7 @@ class Core extends events.EventEmitter {
481
392
  }
482
393
  }
483
394
  }
484
- return new index_1.Logger(this.workerOutput, className);
395
+ return new Logger(this.workerOutput, className);
485
396
  }
486
397
  /**
487
398
  * Add a route dynamicaly
@@ -545,7 +456,7 @@ class Core extends events.EventEmitter {
545
456
  * @returns {{}}
546
457
  */
547
458
  getStores() {
548
- return this.getServicesOfType(index_1.Store);
459
+ return this.getServicesOfType(Store);
549
460
  }
550
461
  /**
551
462
  * Return a map of defined models
@@ -568,11 +479,11 @@ class Core extends events.EventEmitter {
568
479
  updateContextWithRoute(ctx) {
569
480
  let http = ctx.getHttpContext();
570
481
  // Check mapping
571
- var route = this.router.getRouteFromUrl(ctx, http.getMethod(), http.getRelativeUri());
482
+ let route = this.router.getRouteFromUrl(ctx, http.getMethod(), http.getRelativeUri());
572
483
  if (route === undefined) {
573
484
  return false;
574
485
  }
575
- ctx.setRoute(Object.assign(Object.assign({}, this.configuration), route));
486
+ ctx.setRoute({ ...this.configuration, ...route });
576
487
  ctx.setExecutor(this.getService(route.executor));
577
488
  return true;
578
489
  }
@@ -608,41 +519,37 @@ class Core extends events.EventEmitter {
608
519
  * Reinit one service
609
520
  * @param service
610
521
  */
611
- reinitService(service) {
612
- return __awaiter(this, void 0, void 0, function* () {
613
- try {
614
- this.log("TRACE", "Re-Initializing service", service);
615
- let serviceBean = this.services[service];
616
- yield serviceBean.reinit(this.getServiceParams(serviceBean.getName()));
617
- }
618
- catch (err) {
619
- this.log("ERROR", "Re-Init service " + service + " failed", err);
620
- this.log("TRACE", err.stack);
621
- }
622
- });
522
+ async reinitService(service) {
523
+ try {
524
+ this.log("TRACE", "Re-Initializing service", service);
525
+ let serviceBean = this.services[service];
526
+ await serviceBean.reinit(this.getServiceParams(serviceBean.getName()));
527
+ }
528
+ catch (err) {
529
+ this.log("ERROR", "Re-Init service " + service + " failed", err);
530
+ this.log("TRACE", err.stack);
531
+ }
623
532
  }
624
533
  /**
625
534
  * Reinit all services with updated parameters
626
535
  * @param updates
627
536
  * @returns
628
537
  */
629
- reinit(updates) {
630
- return __awaiter(this, void 0, void 0, function* () {
631
- let configuration = JSON.parse(JSON.stringify(this.configuration.services));
632
- for (let service in updates) {
633
- jsonpath.value(configuration, service, updates[service]);
634
- }
635
- if (JSON.stringify(Object.keys(configuration)) !== JSON.stringify(Object.keys(this.configuration.services))) {
636
- this.log("ERROR", "Configuration update cannot modify services");
637
- throw new WebdaError("REINIT_SERVICE_INJECTION", "Configuration is not designed to add dynamically services");
638
- }
639
- this.configuration.services = configuration;
640
- let inits = [];
641
- for (let service in this.services) {
642
- inits.push(this.reinitService(service));
643
- }
644
- yield Promise.all(inits);
645
- });
538
+ async reinit(updates) {
539
+ let configuration = JSON.parse(JSON.stringify(this.configuration.services));
540
+ for (let service in updates) {
541
+ jsonpath.value(configuration, service, updates[service]);
542
+ }
543
+ if (JSON.stringify(Object.keys(configuration)) !== JSON.stringify(Object.keys(this.configuration.services))) {
544
+ this.log("ERROR", "Configuration update cannot modify services");
545
+ throw new WebdaError("REINIT_SERVICE_INJECTION", "Configuration is not designed to add dynamically services");
546
+ }
547
+ this.configuration.services = configuration;
548
+ let inits = [];
549
+ for (let service in this.services) {
550
+ inits.push(this.reinitService(service));
551
+ }
552
+ await Promise.all(inits);
646
553
  }
647
554
  /**
648
555
  * Get a full resolved service parameter
@@ -652,21 +559,20 @@ class Core extends events.EventEmitter {
652
559
  * @returns
653
560
  */
654
561
  getServiceParams(service, configuration = { parameters: {}, services: {} }) {
655
- var _a, _b, _c;
656
- var _d;
657
- (_a = configuration.parameters) !== null && _a !== void 0 ? _a : (configuration.parameters = {});
658
- (_b = configuration.services) !== null && _b !== void 0 ? _b : (configuration.services = {});
659
- (_c = (_d = configuration.services)[service]) !== null && _c !== void 0 ? _c : (_d[service] = {});
660
- const params = (0, deepmerge_ts_1.deepmerge)(this.configuration.parameters || {}, configuration.parameters || {}, this.configuration.services[service] || {}, configuration.services[service] || {});
562
+ var _a;
563
+ configuration.parameters ?? (configuration.parameters = {});
564
+ configuration.services ?? (configuration.services = {});
565
+ (_a = configuration.services)[service] ?? (_a[service] = {});
566
+ const params = deepmerge(this.configuration.parameters || {}, configuration.parameters || {}, this.configuration.services[service] || {}, configuration.services[service] || {});
661
567
  delete params.require;
662
568
  return params;
663
569
  }
664
570
  createService(services, service) {
665
- var type = services[service].type;
571
+ let type = services[service].type;
666
572
  if (type === undefined) {
667
573
  type = service;
668
574
  }
669
- var serviceConstructor = undefined;
575
+ let serviceConstructor = undefined;
670
576
  try {
671
577
  serviceConstructor = this.application.getModda(type);
672
578
  }
@@ -693,9 +599,6 @@ class Core extends events.EventEmitter {
693
599
  const services = this.configuration.services;
694
600
  this.log("DEBUG", beans);
695
601
  for (let i in beans) {
696
- if (!beans[i].bean) {
697
- this.log("DEBUG", "Implicit @Bean due to a @Route", beans[i].constructor.name);
698
- }
699
602
  let name = beans[i].constructor.name;
700
603
  if (!services[name]) {
701
604
  services[name] = {};
@@ -732,7 +635,7 @@ class Core extends events.EventEmitter {
732
635
  * @returns
733
636
  */
734
637
  getRegistry() {
735
- return this.getService("Registry");
638
+ return this.registry;
736
639
  }
737
640
  /**
738
641
  * Return the crypto service
@@ -777,39 +680,42 @@ class Core extends events.EventEmitter {
777
680
  * Init services and Beans along with Routes
778
681
  */
779
682
  initStatics() {
683
+ var _a, _b, _c;
684
+ // Init the registry
685
+ const autoRegistry = this.configuration.services["Registry"] === undefined;
686
+ (_a = this.configuration.services)["Registry"] ?? (_a["Registry"] = {
687
+ type: "webda/memorystore",
688
+ persistence: {
689
+ path: ".registry",
690
+ key: machineIdSync()
691
+ }
692
+ });
693
+ this.createService(this.configuration.services, "Registry");
694
+ this.registry = this.getService("Registry").resolve();
695
+ // Init the key service
696
+ (_b = this.configuration.services)["CryptoService"] ?? (_b["CryptoService"] = {
697
+ type: "webda/cryptoservice",
698
+ autoRotate: autoRegistry ? 30 : undefined,
699
+ autoCreate: true
700
+ });
701
+ this.createService(this.configuration.services, "CryptoService");
702
+ this.cryptoService = this.getService("CryptoService").resolve();
703
+ // Session Manager
704
+ (_c = this.configuration.services)["SessionManager"] ?? (_c["SessionManager"] = {
705
+ type: "webda/cookiesessionmanager"
706
+ });
780
707
  if (this.configuration.services !== undefined) {
708
+ let excludes = ["registry", "cryptoservice"];
709
+ if (this.configuration.parameters.configurationService) {
710
+ excludes.push(this.configuration.parameters.configurationService.toLowerCase());
711
+ }
781
712
  // Do not recreate the configuration services
782
- this.createServices(Object.keys(this.services).filter(k => k !== this.configuration.parameters.configurationService && k !== "registry" && k !== "keyservice"));
713
+ this.createServices(excludes);
783
714
  }
784
715
  this.router.remapRoutes();
785
716
  this._initiated = true;
786
717
  this.emit("Webda.Init", this.configuration);
787
718
  }
788
- /**
789
- * Init Routes declare by @Route annotation
790
- */
791
- initBeanRoutes(serviceBean) {
792
- let service = serviceBean.getName().toLowerCase();
793
- if (beans[service] !== undefined && beans[service].routes) {
794
- for (let j in beans[service].routes) {
795
- this.log("TRACE", "Adding route", j, "for bean", service);
796
- beans[service].routes[j].forEach(route => {
797
- if (route.resolved) {
798
- return;
799
- }
800
- route.info = {
801
- methods: route.methods,
802
- _method: this.services[service][route.executor],
803
- allowPath: route.allowPath || false,
804
- openapi: route.openapi,
805
- executor: beans[service].constructor.name // Name of the service
806
- };
807
- this.addRoute(j, route.info);
808
- route.resolved = true;
809
- });
810
- }
811
- }
812
- }
813
719
  /**
814
720
  * Create a new context for a request
815
721
  *
@@ -818,15 +724,13 @@ class Core extends events.EventEmitter {
818
724
  * @param stream - The request output stream if any
819
725
  * @return A new context object to pass along
820
726
  */
821
- newContext(httpContext, stream = undefined, noInit = false) {
822
- return __awaiter(this, void 0, void 0, function* () {
823
- let res = (new (this.getModel(this.parameter("contextModel") || "Webda/Context"))(this, httpContext, stream));
824
- if (!noInit) {
825
- yield res.init();
826
- }
827
- yield this.emitSync("Webda.NewContext", res);
828
- return res;
829
- });
727
+ async newContext(httpContext, stream = undefined, noInit = false) {
728
+ let res = (new (this.getModel(this.parameter("contextModel") || "Webda/Context"))(this, httpContext, stream));
729
+ if (!noInit) {
730
+ await res.init();
731
+ }
732
+ await this.emitSync("Webda.NewContext", res);
733
+ return res;
830
734
  }
831
735
  /**
832
736
  * Convert an object to JSON using the Webda json filter
@@ -846,10 +750,10 @@ class Core extends events.EventEmitter {
846
750
  */
847
751
  getUuid(format = "uuid") {
848
752
  if (format === "uuid") {
849
- return (0, uuid_1.v4)().toString();
753
+ return uuidv4().toString();
850
754
  }
851
755
  let buffer = Buffer.alloc(16);
852
- (0, uuid_1.v4)(undefined, buffer);
756
+ uuidv4(undefined, buffer);
853
757
  if (format === "base64") {
854
758
  // Remove useless = we won't transfer back to original value or could just add ==
855
759
  // https://datatracker.ietf.org/doc/html/rfc4648#page-7
@@ -867,9 +771,9 @@ class Core extends events.EventEmitter {
867
771
  * Emit the event with data and wait for Promise to finish if listener returned a Promise
868
772
  */
869
773
  emitSync(eventType, event, ...data) {
870
- var result;
871
- var promises = [];
872
- var listeners = this.listeners(eventType);
774
+ let result;
775
+ let promises = [];
776
+ let listeners = this.listeners(eventType);
873
777
  for (let listener of listeners) {
874
778
  result = listener(event, ...data);
875
779
  if (result instanceof Promise) {
@@ -908,28 +812,23 @@ class Core extends events.EventEmitter {
908
812
  *
909
813
  * @param context Context of the request
910
814
  */
911
- checkRequest(ctx) {
912
- return __awaiter(this, void 0, void 0, function* () {
913
- // Do not need to filter on OPTIONS as CORS is for that
914
- if (ctx.getHttpContext().getMethod() === "OPTIONS") {
915
- return true;
916
- }
917
- return (yield Promise.all(this._requestFilters.map(filter => filter.checkRequest(ctx)))).some(v => v);
918
- });
815
+ async checkRequest(ctx) {
816
+ // Do not need to filter on OPTIONS as CORS is for that
817
+ if (ctx.getHttpContext().getMethod() === "OPTIONS") {
818
+ return true;
819
+ }
820
+ return (await Promise.all(this._requestFilters.map(filter => filter.checkRequest(ctx)))).some(v => v);
919
821
  }
920
822
  /**
921
823
  * Verify if an origin is allowed to do request on the API
922
824
  *
923
825
  * @param context Context of the request
924
826
  */
925
- checkCORSRequest(ctx) {
926
- return __awaiter(this, void 0, void 0, function* () {
927
- return (yield Promise.all(this._requestCORSFilters.map(filter => filter.checkRequest(ctx)))).some(v => v);
928
- });
827
+ async checkCORSRequest(ctx) {
828
+ return (await Promise.all(this._requestCORSFilters.map(filter => filter.checkRequest(ctx)))).some(v => v);
929
829
  }
930
830
  exportOpenAPI(skipHidden = true) {
931
831
  var _a;
932
- var _b;
933
832
  let packageInfo = this.application.getPackageDescription();
934
833
  let contact;
935
834
  if (typeof packageInfo.author === "string") {
@@ -949,7 +848,7 @@ class Core extends events.EventEmitter {
949
848
  else if (packageInfo.license) {
950
849
  license = packageInfo.license;
951
850
  }
952
- let openapi = (0, deepmerge_ts_1.deepmerge)({
851
+ let openapi = deepmerge({
953
852
  openapi: "3.0.3",
954
853
  info: {
955
854
  description: packageInfo.description,
@@ -959,11 +858,11 @@ class Core extends events.EventEmitter {
959
858
  contact,
960
859
  license
961
860
  },
962
- schemes: ["https"],
963
- basePath: "/",
964
- definitions: {
965
- Object: {
966
- type: "object"
861
+ components: {
862
+ schemas: {
863
+ Object: {
864
+ type: "object"
865
+ }
967
866
  }
968
867
  },
969
868
  paths: {},
@@ -976,21 +875,30 @@ class Core extends events.EventEmitter {
976
875
  type: "object"
977
876
  };
978
877
  let modelDescription = this.getModel(i);
878
+ let modelName = model.name || i.split("/").pop();
979
879
  // Only export CoreModel info
980
- if (!this.application.extends(modelDescription, coremodel_1.CoreModel)) {
880
+ if (!this.application.extends(modelDescription, CoreModel)) {
981
881
  continue;
982
882
  }
983
883
  let schema = this.application.getSchema(i);
984
884
  if (schema) {
985
885
  for (let j in schema.definitions) {
986
886
  // @ts-ignore
987
- (_a = (_b = openapi.definitions)[j]) !== null && _a !== void 0 ? _a : (_b[j] = schema.definitions[j]);
887
+ (_a = openapi.components.schemas)[j] ?? (_a[j] = schema.definitions[j]);
988
888
  }
989
889
  delete schema.definitions;
990
890
  desc = schema;
991
891
  }
992
- // @ts-ignore
993
- openapi.definitions[model.name.split("/").pop()] = desc;
892
+ // Remove empty required as openapi does not like that
893
+ // Our compiler is not generating this anymore but it is additional protection
894
+ /* c8 ignore next 3 */
895
+ if (desc.required && desc.required.length === 0) {
896
+ delete desc.required;
897
+ }
898
+ // Remove $schema
899
+ delete desc.$schema;
900
+ // Rename all #/definitions/ by #/components/schemas/
901
+ openapi.components.schemas[modelName] = JSON.parse(JSON.stringify(desc).replace(/#\/definitions\//g, "#/components/schemas/"));
994
902
  }
995
903
  this.router.completeOpenAPI(openapi, skipHidden);
996
904
  openapi.tags.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
@@ -1002,5 +910,4 @@ class Core extends events.EventEmitter {
1002
910
  return openapi;
1003
911
  }
1004
912
  }
1005
- exports.Core = Core;
1006
913
  //# sourceMappingURL=core.js.map