libmodulor 0.27.0 → 0.29.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 (208) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +2 -2
  3. package/dist/esm/apps/Helper/src/i18n.js +4 -4
  4. package/dist/esm/apps/Helper/src/lib/layers/project.js +6 -6
  5. package/dist/esm/apps/Helper/src/ucds/CreateAppUCD.js +5 -10
  6. package/dist/esm/apps/Helper/src/ucds/CreateProductUCD.js +5 -10
  7. package/dist/esm/apps/Helper/src/ucds/CreateTargetUCD.js +6 -11
  8. package/dist/esm/apps/Helper/src/ucds/TestAppUCD.js +5 -8
  9. package/dist/esm/dt/DataType.d.ts +2 -1
  10. package/dist/esm/dt/DataTypes.d.ts +1 -1
  11. package/dist/esm/dt/DataTypes.js +1 -0
  12. package/dist/esm/dt/base/TBase.d.ts +2 -0
  13. package/dist/esm/dt/base/TBase.js +5 -0
  14. package/dist/esm/dt/base/TBoolean.d.ts +2 -0
  15. package/dist/esm/dt/base/TBoolean.js +3 -0
  16. package/dist/esm/dt/base/TInt.d.ts +2 -0
  17. package/dist/esm/dt/base/TInt.js +3 -0
  18. package/dist/esm/dt/base/TNumber.d.ts +2 -0
  19. package/dist/esm/dt/base/TNumber.js +3 -0
  20. package/dist/esm/dt/base/TObject.d.ts +2 -0
  21. package/dist/esm/dt/base/TObject.js +29 -0
  22. package/dist/esm/dt/final/TApiKey.d.ts +2 -0
  23. package/dist/esm/dt/final/TApiKey.js +3 -0
  24. package/dist/esm/dt/final/TDateISO8601.d.ts +2 -0
  25. package/dist/esm/dt/final/TDateISO8601.js +3 -0
  26. package/dist/esm/dt/final/TDomainName.d.ts +2 -0
  27. package/dist/esm/dt/final/TDomainName.js +3 -0
  28. package/dist/esm/dt/final/TEmail.d.ts +2 -0
  29. package/dist/esm/dt/final/TEmail.js +3 -0
  30. package/dist/esm/dt/final/TEncryptionKey.d.ts +2 -0
  31. package/dist/esm/dt/final/TEncryptionKey.js +3 -0
  32. package/dist/esm/dt/final/TErrorCode.d.ts +7 -0
  33. package/dist/esm/dt/final/TErrorCode.js +9 -0
  34. package/dist/esm/dt/final/TFile.d.ts +2 -0
  35. package/dist/esm/dt/final/TFile.js +3 -0
  36. package/dist/esm/dt/final/TIPv4.d.ts +2 -0
  37. package/dist/esm/dt/final/TIPv4.js +3 -0
  38. package/dist/esm/dt/final/TIPv6.d.ts +2 -0
  39. package/dist/esm/dt/final/TIPv6.js +3 -0
  40. package/dist/esm/dt/final/TJWT.d.ts +2 -0
  41. package/dist/esm/dt/final/TJWT.js +3 -0
  42. package/dist/esm/dt/final/TPassword.d.ts +2 -0
  43. package/dist/esm/dt/final/TPassword.js +3 -0
  44. package/dist/esm/dt/final/TSSHPrivateKey.d.ts +2 -0
  45. package/dist/esm/dt/final/TSSHPrivateKey.js +3 -0
  46. package/dist/esm/dt/final/TTime.d.ts +2 -0
  47. package/dist/esm/dt/final/TTime.js +3 -0
  48. package/dist/esm/dt/final/TURL.d.ts +2 -0
  49. package/dist/esm/dt/final/TURL.js +3 -0
  50. package/dist/esm/dt/index.d.ts +2 -0
  51. package/dist/esm/dt/index.js +1 -0
  52. package/dist/esm/dt/targets/json-schema.d.ts +24 -0
  53. package/dist/esm/error/CustomError.d.ts +1 -1
  54. package/dist/esm/error/CustomError.js +2 -2
  55. package/dist/esm/error/ForbiddenAsNotFoundError.js +1 -1
  56. package/dist/esm/error/ForbiddenError.js +1 -1
  57. package/dist/esm/error/IllegalArgumentError.js +2 -2
  58. package/dist/esm/error/InternalServerError.js +1 -1
  59. package/dist/esm/error/NotFoundError.js +1 -1
  60. package/dist/esm/error/UnauthorizedError.js +1 -1
  61. package/dist/esm/error/UnavailableError.d.ts +6 -0
  62. package/dist/esm/error/UnavailableError.js +9 -0
  63. package/dist/esm/error/funcs.d.ts +3 -0
  64. package/dist/esm/error/funcs.js +3 -1
  65. package/dist/esm/error/index.d.ts +2 -1
  66. package/dist/esm/error/index.js +2 -1
  67. package/dist/esm/i18n/locales/de.js +8 -0
  68. package/dist/esm/i18n/locales/en.js +8 -0
  69. package/dist/esm/i18n/locales/es.js +8 -0
  70. package/dist/esm/i18n/locales/fr.js +8 -0
  71. package/dist/esm/i18n/types.d.ts +1 -1
  72. package/dist/esm/product/manifest.d.ts +2 -0
  73. package/dist/esm/products/Helper/i18n.d.ts +8 -0
  74. package/dist/esm/std/impl/SimpleHTTPAPICaller.js +1 -1
  75. package/dist/esm/std/impl/SimpleMapI18nManager.d.ts +1 -1
  76. package/dist/esm/std/impl/SimpleMapI18nManager.js +4 -2
  77. package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.d.ts +6 -2
  78. package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.js +17 -9
  79. package/dist/esm/target/index.d.ts +1 -0
  80. package/dist/esm/target/lib/cli/CommandExecutor.js +2 -2
  81. package/dist/esm/target/lib/cli/renderer.d.ts +2 -1
  82. package/dist/esm/target/lib/cli/renderer.js +10 -11
  83. package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.d.ts +25 -0
  84. package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.js +131 -0
  85. package/dist/esm/target/lib/openapi/consts.d.ts +2 -0
  86. package/dist/esm/target/lib/openapi/consts.js +1 -0
  87. package/dist/esm/target/lib/openapi/funcs.d.ts +16 -0
  88. package/dist/esm/target/lib/openapi/funcs.js +249 -0
  89. package/dist/esm/target/lib/openapi/input.d.ts +16 -0
  90. package/dist/esm/target/lib/openapi/input.js +33 -0
  91. package/dist/esm/target/lib/openapi/types.d.ts +109 -0
  92. package/dist/esm/target/lib/rn/input.d.ts +3 -0
  93. package/dist/esm/target/lib/server/AuthCookieCreator.d.ts +2 -1
  94. package/dist/esm/target/lib/server/AuthenticationChecker.d.ts +3 -3
  95. package/dist/esm/target/lib/server/AuthenticationChecker.js +5 -5
  96. package/dist/esm/target/lib/server/ServerBooter.d.ts +4 -2
  97. package/dist/esm/target/lib/server/ServerBooter.js +34 -11
  98. package/dist/esm/target/lib/server/ServerManager.d.ts +19 -9
  99. package/dist/esm/target/lib/server/ServerRequestHandler.d.ts +0 -1
  100. package/dist/esm/target/lib/server/ServerRequestHandler.js +2 -2
  101. package/dist/esm/target/lib/server/consts.d.ts +4 -0
  102. package/dist/esm/target/lib/server/consts.js +22 -0
  103. package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.d.ts +15 -0
  104. package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.js +55 -0
  105. package/dist/esm/target/lib/server-express/funcs.d.ts +2 -1
  106. package/dist/esm/target/lib/server-express/funcs.js +7 -2
  107. package/dist/esm/target/lib/server-hono/CORSMiddlewareBuilder.d.ts +14 -0
  108. package/dist/esm/target/{node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.js → lib/server-hono/CORSMiddlewareBuilder.js} +22 -20
  109. package/dist/esm/target/lib/server-hono/funcs.d.ts +2 -1
  110. package/dist/esm/target/lib/server-hono/funcs.js +2 -1
  111. package/dist/esm/target/lib/shared.d.ts +4 -0
  112. package/dist/esm/target/lib/shared.js +2 -1
  113. package/dist/esm/target/nextjs-server/NextJSServerManager.d.ts +3 -1
  114. package/dist/esm/target/nextjs-server/NextJSServerManager.js +3 -0
  115. package/dist/esm/target/node-core-cli/NodeCoreCLIManager.js +1 -1
  116. package/dist/esm/target/node-express-server/NodeExpressServerManager.d.ts +7 -3
  117. package/dist/esm/target/node-express-server/NodeExpressServerManager.js +24 -14
  118. package/dist/esm/target/node-hono-server/NodeHonoServerManager.d.ts +6 -2
  119. package/dist/esm/target/node-hono-server/NodeHonoServerManager.js +21 -11
  120. package/dist/esm/target/node-mcp-server/NodeLocalStdioMCPServerManager.d.ts +3 -1
  121. package/dist/esm/target/node-mcp-server/NodeLocalStdioMCPServerManager.js +19 -14
  122. package/dist/esm/target/node-mcp-server/types.d.ts +0 -4
  123. package/dist/esm/target/react-web-pure/UCForm.d.ts +1 -1
  124. package/dist/esm/target/react-web-pure/UCForm.js +3 -2
  125. package/dist/esm/testing/workers/checkers/AppI18nChecker.js +4 -2
  126. package/dist/esm/uc/UC.d.ts +2 -0
  127. package/dist/esm/uc/UC.js +16 -1
  128. package/dist/esm/uc/data-store.d.ts +9 -1
  129. package/dist/esm/uc/data-store.js +33 -1
  130. package/dist/esm/uc/impl/CloudflareD1UCDataStore.d.ts +2 -2
  131. package/dist/esm/uc/impl/CloudflareD1UCDataStore.js +7 -0
  132. package/dist/esm/uc/impl/InMemoryUCDataStore.d.ts +8 -3
  133. package/dist/esm/uc/impl/InMemoryUCDataStore.js +19 -3
  134. package/dist/esm/uc/impl/KnexUCDataStore.d.ts +2 -2
  135. package/dist/esm/uc/impl/KnexUCDataStore.js +10 -2
  136. package/dist/esm/uc/impl/SimpleUCManager.d.ts +4 -4
  137. package/dist/esm/uc/impl/SimpleUCManager.js +10 -10
  138. package/dist/esm/uc/metadata.d.ts +7 -0
  139. package/dist/esm/uc/metadata.js +10 -0
  140. package/dist/esm/uc/output-field.d.ts +1 -0
  141. package/dist/esm/uc/output-field.js +13 -1
  142. package/dist/esm/uc/settings/consts.js +1 -0
  143. package/dist/esm/uc/settings.d.ts +8 -1
  144. package/dist/esm/uc/utils/ucHTTPContract.js +1 -1
  145. package/dist/esm/uc/workers/UCExecChecker.d.ts +3 -3
  146. package/dist/esm/uc/workers/UCExecChecker.js +5 -5
  147. package/dist/esm/utils/http/types.d.ts +5 -0
  148. package/dist/esm/utils/index.d.ts +2 -2
  149. package/dist/esm/utils/index.js +1 -1
  150. package/dist/esm/utils/ioc/bindCommon.js +4 -4
  151. package/dist/esm/utils/ioc/bindFactory.d.ts +2 -0
  152. package/dist/esm/utils/ioc/bindFactory.js +9 -0
  153. package/package.json +21 -20
  154. package/dist/esm/apps/Helper/src/lib/app.d.ts +0 -6
  155. package/dist/esm/apps/Helper/src/lib/app.js +0 -12
  156. package/dist/esm/apps/Helper/src/lib/project.d.ts +0 -3
  157. package/dist/esm/apps/Helper/src/lib/project.js +0 -163
  158. package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
  159. package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.js +0 -18
  160. package/dist/esm/products/Helper/cli-node-core/container.d.ts +0 -3
  161. package/dist/esm/products/Helper/cli-node-core/container.js +0 -26
  162. package/dist/esm/products/Helper/cli-node-core/index.js +0 -9
  163. package/dist/esm/products/Helper/container.d.ts +0 -3
  164. package/dist/esm/products/Helper/container.js +0 -26
  165. package/dist/esm/products/Helper/index.js +0 -16
  166. package/dist/esm/target/lib/react/common.d.ts +0 -6
  167. package/dist/esm/target/lib/react/common.js +0 -1
  168. package/dist/esm/target/lib/server/RequestHandler.d.ts +0 -14
  169. package/dist/esm/target/lib/server/RequestHandler.js +0 -1
  170. package/dist/esm/target/lib/server-node/stop.d.ts +0 -2
  171. package/dist/esm/target/lib/server-node/stop.js +0 -18
  172. package/dist/esm/target/node-express-server/lib/AuthCookieCreator.d.ts +0 -21
  173. package/dist/esm/target/node-express-server/lib/AuthCookieCreator.js +0 -50
  174. package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.d.ts +0 -21
  175. package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.js +0 -61
  176. package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.d.ts +0 -12
  177. package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.js +0 -35
  178. package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.d.ts +0 -12
  179. package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.js +0 -39
  180. package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.d.ts +0 -18
  181. package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.d.ts +0 -12
  182. package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.js +0 -36
  183. package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.d.ts +0 -23
  184. package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.js +0 -154
  185. package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.d.ts +0 -13
  186. package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.js +0 -46
  187. package/dist/esm/testing/impl/SimpleAppDocsEmitter.d.ts +0 -7
  188. package/dist/esm/testing/impl/SimpleAppDocsEmitter.js +0 -180
  189. package/dist/esm/testing/impl/SimpleAppTesterConfigurator.d.ts +0 -14
  190. package/dist/esm/testing/impl/SimpleAppTesterConfigurator.js +0 -35
  191. package/dist/esm/uc/utils/stripUCDLifecycleServer.d.ts +0 -15
  192. package/dist/esm/uc/utils/stripUCDLifecycleServer.js +0 -77
  193. package/dist/esm/uc/utils/ucifcoIsForArray.d.ts +0 -8
  194. package/dist/esm/uc/utils/ucifcoIsForArray.js +0 -13
  195. package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
  196. package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.js +0 -18
  197. package/dist/esm/utils/http/toFormData.d.ts +0 -3
  198. package/dist/esm/utils/http/toFormData.js +0 -4
  199. package/dist/esm/utils/http/toJSON.d.ts +0 -3
  200. package/dist/esm/utils/http/toJSON.js +0 -3
  201. package/dist/esm/utils/http/toQueryParams.d.ts +0 -2
  202. package/dist/esm/utils/http/toQueryParams.js +0 -4
  203. package/dist/esm/utils/ioc/ContainerPrinter.d.ts +0 -15
  204. package/dist/esm/utils/ioc/ContainerPrinter.js +0 -58
  205. package/dist/esm/utils/ioc/bindProvider.d.ts +0 -2
  206. package/dist/esm/utils/ioc/bindProvider.js +0 -9
  207. /package/dist/esm/{products/Helper/cli-node-core/index.d.ts → dt/targets/json-schema.js} +0 -0
  208. /package/dist/esm/{products/Helper/index.d.ts → target/lib/openapi/types.js} +0 -0
@@ -1,36 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- 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;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
- import { inject, injectable } from 'inversify';
14
- import { RequestChecker } from '../../lib/server/RequestChecker.js';
15
- let RequestCheckerMiddlewareBuilder = class RequestCheckerMiddlewareBuilder {
16
- requestChecker;
17
- constructor(requestChecker) {
18
- this.requestChecker = requestChecker;
19
- }
20
- exec(_input) {
21
- return (req, _res, nextFn) => {
22
- this.requestChecker.exec({
23
- secure: req.secure,
24
- url: req.url,
25
- xForwardedProtoHeader: req.get('X-Forwarded-Proto'),
26
- });
27
- nextFn();
28
- };
29
- }
30
- };
31
- RequestCheckerMiddlewareBuilder = __decorate([
32
- injectable(),
33
- __param(0, inject(RequestChecker)),
34
- __metadata("design:paramtypes", [RequestChecker])
35
- ], RequestCheckerMiddlewareBuilder);
36
- export { RequestCheckerMiddlewareBuilder };
@@ -1,23 +0,0 @@
1
- import type { RequestHandler } from 'express';
2
- import type { Configurable, SettingsManager, Worker } from '../../../std/index.js';
3
- import { UCBuilder, type UCInput, type UCOPIBase } from '../../../uc/index.js';
4
- import type { RequestHandlerInputRaw } from '../../lib/server/RequestHandler.js';
5
- import type { ServerManagerSettings } from '../../lib/server/ServerManager.js';
6
- import { AuthCookieCreator } from '../lib/AuthCookieCreator.js';
7
- type Input<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> = RequestHandlerInputRaw<I, OPI0, OPI1>;
8
- type Output = RequestHandler;
9
- type S = Pick<ServerManagerSettings, 'server_cookies_name_auth'>;
10
- export declare class RequestHandlerMiddlewareBuilder<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> implements Configurable<S>, Worker<Input<I, OPI0, OPI1>, Output> {
11
- private authCookieCreator;
12
- private settingsManager;
13
- private ucBuilder;
14
- constructor(authCookieCreator: AuthCookieCreator, settingsManager: SettingsManager<S>, ucBuilder: UCBuilder);
15
- s(): S;
16
- exec({ appManifest, envelope, ucd, ucManager, }: Input<I, OPI0, OPI1>): Output;
17
- private fillUCFromReq;
18
- private handleClearAuth;
19
- private handleRedirect;
20
- private handleSetAuth;
21
- private toFile;
22
- }
23
- export {};
@@ -1,154 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- 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;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
- import { inject, injectable } from 'inversify';
14
- import { UCBuilder, UCOutputReader, UCOutputSideEffectType, } from '../../../uc/index.js';
15
- import { AuthCookieCreator } from '../lib/AuthCookieCreator.js';
16
- import { isReqAuthenticated } from './AuthenticationCheckerMiddlewareBuilder.js';
17
- let RequestHandlerMiddlewareBuilder = class RequestHandlerMiddlewareBuilder {
18
- authCookieCreator;
19
- settingsManager;
20
- ucBuilder;
21
- constructor(authCookieCreator, settingsManager, ucBuilder) {
22
- this.authCookieCreator = authCookieCreator;
23
- this.settingsManager = settingsManager;
24
- this.ucBuilder = ucBuilder;
25
- }
26
- s() {
27
- return {
28
- server_cookies_name_auth: this.settingsManager.get()('server_cookies_name_auth'),
29
- };
30
- }
31
- exec({ appManifest, envelope, ucd, ucManager, }) {
32
- return async (req, res) => {
33
- const uc = this.ucBuilder.exec({
34
- appManifest,
35
- auth: null,
36
- def: ucd,
37
- });
38
- if (isReqAuthenticated(req)) {
39
- uc.auth = req.auth;
40
- }
41
- this.fillUCFromReq(req, envelope, uc);
42
- const output = await ucManager.execServer(uc);
43
- const { ext, io } = ucd;
44
- const sideEffects = io.o?.sideEffects;
45
- if (sideEffects) {
46
- const ucor = new UCOutputReader(uc.def, output ?? undefined);
47
- let item;
48
- if (ucor.canItem00()) {
49
- item = ucor.item00().item;
50
- }
51
- // Be careful with this, as some are incompatible.
52
- // For instance, if there is a REDIRECT and then a CLEAR_AUTH, the latter won't be executed as we return after the redirect.
53
- for (const se of sideEffects) {
54
- const { type } = se;
55
- switch (type) {
56
- case UCOutputSideEffectType.CLEAR_AUTH:
57
- await this.handleClearAuth(res);
58
- break;
59
- case UCOutputSideEffectType.REDIRECT:
60
- await this.handleRedirect(res, item);
61
- return;
62
- case UCOutputSideEffectType.SET_AUTH:
63
- await this.handleSetAuth(res, item);
64
- break;
65
- default:
66
- ((_) => { })(type);
67
- }
68
- }
69
- }
70
- if (!output) {
71
- res.status(204).send();
72
- return;
73
- }
74
- const transform = ext?.http?.transform;
75
- res.send(output && transform ? transform(output) : output);
76
- };
77
- }
78
- fillUCFromReq(req, envelope, uc) {
79
- switch (envelope) {
80
- case 'form-data': {
81
- // Since express v5, if the request contains only a file, the `req.body` returns `undefined`
82
- const input = req.body ?? {};
83
- // files is present when using express-fileupload
84
- if ('files' in req && req.files) {
85
- for (const [field, value] of Object.entries(req.files)) {
86
- input[field] = Array.isArray(value)
87
- ? value.map(this.toFile)
88
- : this.toFile(value);
89
- }
90
- }
91
- // TODO : Change this ugly code
92
- // When a field has multiple values, they key is `field[]` and not `field`
93
- const sanitized = {};
94
- for (const [k, v] of Object.entries(input)) {
95
- const sanitizedKey = k.split('[')[0];
96
- if (!sanitizedKey) {
97
- continue;
98
- }
99
- sanitized[sanitizedKey] = v;
100
- // For some reason, when there is only one value, it is received as scalar and not as an array
101
- // Even if there is only one, we want an array
102
- if (k.includes('[') && !Array.isArray(v)) {
103
- sanitized[sanitizedKey] = [v];
104
- }
105
- }
106
- uc.fill(sanitized);
107
- break;
108
- }
109
- case 'json':
110
- uc.fill(req.body);
111
- break;
112
- case 'query-params':
113
- uc.fill(req.query);
114
- break;
115
- }
116
- }
117
- async handleClearAuth(res) {
118
- res.clearCookie(this.s().server_cookies_name_auth);
119
- }
120
- async handleRedirect(res, item) {
121
- if (!item ||
122
- !('redirect' in item) ||
123
- typeof item['redirect'] !== 'string') {
124
- return;
125
- }
126
- const { redirect } = item;
127
- res.redirect(redirect);
128
- }
129
- async handleSetAuth(res, item) {
130
- if (!item || !('jwt' in item) || typeof item['jwt'] !== 'string') {
131
- return;
132
- }
133
- const { jwt } = item;
134
- const { name, opts, val } = await this.authCookieCreator.exec({
135
- jwt,
136
- });
137
- res.cookie(name, val, opts);
138
- }
139
- toFile(f) {
140
- return {
141
- name: f.name,
142
- path: f.tempFilePath,
143
- type: f.mimetype,
144
- };
145
- }
146
- };
147
- RequestHandlerMiddlewareBuilder = __decorate([
148
- injectable(),
149
- __param(0, inject(AuthCookieCreator)),
150
- __param(1, inject('SettingsManager')),
151
- __param(2, inject(UCBuilder)),
152
- __metadata("design:paramtypes", [AuthCookieCreator, Object, UCBuilder])
153
- ], RequestHandlerMiddlewareBuilder);
154
- export { RequestHandlerMiddlewareBuilder };
@@ -1,13 +0,0 @@
1
- import type { RequestHandler } from 'express';
2
- import type { Logger, Worker } from '../../../std/index.js';
3
- import { RequestLogger } from '../../lib/server/RequestLogger.js';
4
- interface Input {
5
- }
6
- type Output = RequestHandler;
7
- export declare class RequestLoggerMiddlewareBuilder implements Worker<Input, Output> {
8
- private logger;
9
- private requestLogger;
10
- constructor(logger: Logger, requestLogger: RequestLogger);
11
- exec(_input: Input): Output;
12
- }
13
- export {};
@@ -1,46 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- 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;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
- import { inject, injectable } from 'inversify';
14
- import { RequestLogger } from '../../lib/server/RequestLogger.js';
15
- let RequestLoggerMiddlewareBuilder = class RequestLoggerMiddlewareBuilder {
16
- logger;
17
- requestLogger;
18
- constructor(logger, requestLogger) {
19
- this.logger = logger;
20
- this.requestLogger = requestLogger;
21
- }
22
- exec(_input) {
23
- return (req, _, nextFn) => {
24
- try {
25
- this.requestLogger.exec({
26
- body: req.body,
27
- method: req.method,
28
- url: req.url,
29
- });
30
- nextFn();
31
- }
32
- catch (err) {
33
- this.logger.error(err);
34
- // Continue as usual : the user shouldn't be impacted if we have issues logging the requests
35
- nextFn();
36
- }
37
- };
38
- }
39
- };
40
- RequestLoggerMiddlewareBuilder = __decorate([
41
- injectable(),
42
- __param(0, inject('Logger')),
43
- __param(1, inject(RequestLogger)),
44
- __metadata("design:paramtypes", [Object, RequestLogger])
45
- ], RequestLoggerMiddlewareBuilder);
46
- export { RequestLoggerMiddlewareBuilder };
@@ -1,7 +0,0 @@
1
- import type { FSManager } from '../../std/index.js';
2
- import type { AppDocsEmitter, Input, Output } from '../workers/AppDocsEmitter.js';
3
- export declare class SimpleAppDocsEmitter implements AppDocsEmitter {
4
- private fsManager;
5
- constructor(fsManager: FSManager);
6
- exec({ appPath, ucDefSourcesCheckerOutput, }: Input): Promise<Output>;
7
- }
@@ -1,180 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- 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;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
- import { inject, injectable } from 'inversify';
14
- import { APP_DOCS_FILE_NAME, UC_MAIN_STEP_PREFIX_REGULAR, } from '../../convention.js';
15
- import { OUTPUT_ITEM_FIELDS, } from '../UCDefASTParser.js';
16
- let SimpleAppDocsEmitter = class SimpleAppDocsEmitter {
17
- fsManager;
18
- constructor(fsManager) {
19
- this.fsManager = fsManager;
20
- }
21
- async exec({ appPath, ucDefSourcesCheckerOutput, }) {
22
- const outPath = this.fsManager.path(appPath, APP_DOCS_FILE_NAME);
23
- const tpl = template(OUTPUT_ITEM_FIELDS, ucDefSourcesCheckerOutput.items);
24
- await this.fsManager.touch(outPath, tpl);
25
- return {
26
- outPath,
27
- };
28
- }
29
- };
30
- SimpleAppDocsEmitter = __decorate([
31
- injectable(),
32
- __param(0, inject('FSManager')),
33
- __metadata("design:paramtypes", [Object])
34
- ], SimpleAppDocsEmitter);
35
- export { SimpleAppDocsEmitter };
36
- // For now, we can have it here. When it becomes harder to maintain, we can introduce some kind of template engine.
37
- // Be aware that this will introduce complexities on building the lib.
38
- // We'll need to include these templates in the build and make them accessible via package.json "exports" or any other mechanism.
39
- // Hence the choice to keep it simple for now.
40
- // Defined it as function in case we need to pass args.
41
- // Using --- for the comment to make it compatible with pandoc
42
- // See https://stackoverflow.com/a/4829998/1259118
43
- const template = (cols, items) => `<!---
44
- All this code has been auto generated.
45
- DO NOT EDIT.
46
- Or be prepared to see all your changes erased at the next generation.
47
- -->
48
-
49
- # App
50
-
51
- ## Use Cases
52
-
53
- ${items
54
- .map((item) => `### ${item.metadataName?.value}
55
-
56
- ${diagram(item)}`)
57
- .join('\n\n')}
58
-
59
- ## Technical Summary
60
-
61
- |#|${cols.map((c) => c).join('|')}|
62
- |---|${cols.map((_c) => '---').join('|')}|
63
- ${items.map((item, idx) => ['', idx + 1, ...cols.map((c) => fmtTechSummaryField(item[c])), ''].join('|')).join('\n')}
64
- `;
65
- /*
66
- * Diagram
67
- */
68
- const CHECK_POLICY = '🔐 Check policy';
69
- const CHECK_POLICY_COND = 'when any validation fails';
70
- const CHECK_POLICY_COND_ACTION = 'show failure';
71
- const CLIENT_CONFIRM_N_COND = 'when does not confirm';
72
- const CLIENT_CONFIRM_N_COND_ACTION = 'stop everything';
73
- const CLIENT_CONFIRM_Q = '❓ Sure';
74
- const CLIENT_CONFIRM_Y = 'Yes';
75
- const FILL = '✏️ Fill';
76
- const LB = '<br/>';
77
- const OK = '👍 OK';
78
- const SEND = '📤 Send';
79
- const SUBMIT = '↩️ Submit';
80
- const TRIGGER = '⤴️ Trigger';
81
- function diagram(item) {
82
- // Debugger : https://mermaid.live/edit
83
- // Messages : https://mermaid.js.org/syntax/sequenceDiagram.html#messages
84
- const client = 'Client';
85
- const server = 'Server';
86
- const user = 'User';
87
- const lines = [`actor ${user}`];
88
- const { ioIFields, ioOPI0Fields, ioOPI1Fields, lifecycleClientPolicy, lifecycleClientSteps, lifecycleServerPolicy, lifecycleServerSteps, metadataSensitive, } = item;
89
- let req = TRIGGER;
90
- if (ioIFields && ioIFields.length > 0) {
91
- // TODO : Include only fields to fill manually
92
- // Not sure though, as for CLI for example (i.e. noContext), one needs to provide all of them
93
- req = `${FILL}${LB}${diagramUCFields(item.ioIFields)}`;
94
- }
95
- lines.push(`${user}->>+${client}: ${req}`);
96
- lines.push(`${user}->>${client}: ${SUBMIT}`);
97
- if (metadataSensitive?.value) {
98
- lines.push(...diagramUCClientConfirm(client, user));
99
- }
100
- if (lifecycleClientPolicy) {
101
- lines.push(...diagramUCPolicy(client, user, lifecycleClientPolicy));
102
- }
103
- if (lifecycleClientSteps) {
104
- lines.push(...diagramUCMainSteps(client, lifecycleClientSteps));
105
- }
106
- // This is an approximation. Might need to improve it.
107
- const hasServer = item.lifecycleServerPolicy?.value;
108
- if (hasServer) {
109
- req = SEND;
110
- if (ioIFields && ioIFields.length > 0) {
111
- req = `${req}${LB}${diagramUCFields(item.ioIFields)}`;
112
- }
113
- lines.push(`${client}->>+${server}: ${req}`);
114
- if (lifecycleServerPolicy) {
115
- lines.push(...diagramUCPolicy(server, user, lifecycleServerPolicy));
116
- }
117
- if (lifecycleServerSteps) {
118
- lines.push(...diagramUCMainSteps(server, lifecycleServerSteps));
119
- }
120
- let res = '';
121
- if (ioOPI0Fields && ioOPI0Fields.length > 0) {
122
- res += `${res}${LB}${diagramUCFields(item.ioOPI0Fields)}`;
123
- }
124
- if (ioOPI1Fields && ioOPI1Fields?.length > 0) {
125
- res += `${res}${LB}${diagramUCFields(item.ioOPI1Fields)}`;
126
- }
127
- lines.push(`${server}-->>-${client}: ${OK}${res}`);
128
- }
129
- lines.push(`${client}-->>-${user}: ${OK}`);
130
- return `\`\`\`mermaid
131
- sequenceDiagram
132
- ${lines.join('\n ')}
133
- \`\`\``;
134
- }
135
- function diagramUCClientConfirm(participant, caller) {
136
- return [
137
- `${participant}->>${caller}: ${CLIENT_CONFIRM_Q}`,
138
- `${caller}->>${participant}: ${CLIENT_CONFIRM_Y}`,
139
- `break ${CLIENT_CONFIRM_N_COND}`,
140
- ` ${participant}-->${caller}: ${CLIENT_CONFIRM_N_COND_ACTION}`,
141
- 'end',
142
- ];
143
- }
144
- function diagramUCFields(fields) {
145
- return (fields?.map((f) => `${f.value.name}: ${f.value.dataType}`).join(LB) ||
146
- '');
147
- }
148
- function diagramUCMainSteps(participant, field) {
149
- return field.map((f) => `${participant}->>${participant}: ${f.value.replace(UC_MAIN_STEP_PREFIX_REGULAR, '').trim()}`);
150
- }
151
- function diagramUCPolicy(participant, caller, lifecyclePolicyField) {
152
- return [
153
- `${participant}->>${participant}: ${CHECK_POLICY} "${lifecyclePolicyField.value}"`,
154
- `break ${CHECK_POLICY_COND}`,
155
- ` ${participant}-->${caller}: ${CHECK_POLICY_COND_ACTION}`,
156
- 'end',
157
- ];
158
- }
159
- /*
160
- * Technical Summary
161
- */
162
- function fmtTechSummaryField(field) {
163
- if (!field) {
164
- return '';
165
- }
166
- const values = Array.isArray(field) ? field : [field];
167
- // NOTE : <br> won't work for every markdown renderer.
168
- // See https://stackoverflow.com/questions/11700487/how-do-i-add-a-newline-in-a-markdown-table
169
- return values.map(fmtTechSummaryFieldVal).join('<br>');
170
- }
171
- function fmtTechSummaryFieldVal(field) {
172
- const { err, value } = field;
173
- let res = (typeof value === 'string' ? value : value.raw) ?? '';
174
- if (err) {
175
- res += `❌ ${err}`;
176
- }
177
- res = res.replace(/[\u00A0-\u9999<>&]/g, (i) => `&#${i.charCodeAt(0)};`); // TS generics considered as HTML
178
- res = res.replaceAll('|', '\\|'); // TS intersection vs Markdown table column
179
- return res;
180
- }
@@ -1,14 +0,0 @@
1
- import type { AppTesterConfigurator, AppTesterConfiguratorAuthSettersConfig, AppTesterConfiguratorInputFillers, AppTesterConfiguratorSideEffects, AppTesterConfiguratorSpecificAssertions } from '../AppTesterConfigurator.js';
2
- import type { AppTesterCtx } from '../ctx.js';
3
- import type { AppTesterFlow } from '../flow.js';
4
- export declare class SimpleAppTesterConfigurator implements AppTesterConfigurator {
5
- authSettersConfig(): Promise<AppTesterConfiguratorAuthSettersConfig | undefined>;
6
- bindImplementations(ctx: AppTesterCtx): Promise<void>;
7
- clearExecution(ctx: AppTesterCtx): Promise<void>;
8
- flows(): Promise<AppTesterFlow[]>;
9
- inputFillers(): Promise<AppTesterConfiguratorInputFillers | undefined>;
10
- opts(): Promise<AppTesterCtx['opts']>;
11
- seed(_ctx: AppTesterCtx): Promise<void>;
12
- sideEffects(_ctx: AppTesterCtx): Promise<AppTesterConfiguratorSideEffects | undefined>;
13
- specificAssertions(): Promise<AppTesterConfiguratorSpecificAssertions | undefined>;
14
- }
@@ -1,35 +0,0 @@
1
- import { PRODUCT_NAME_PLACEHOLDER } from '../../convention.js';
2
- export class SimpleAppTesterConfigurator {
3
- async authSettersConfig() {
4
- return undefined;
5
- }
6
- async bindImplementations(ctx) {
7
- const { container } = ctx;
8
- container.bind('ProductManifest').toConstantValue({
9
- appReg: [{ name: ctx.appManifest.name }],
10
- name: PRODUCT_NAME_PLACEHOLDER,
11
- });
12
- }
13
- async clearExecution(ctx) {
14
- const { container } = ctx;
15
- await container.get('UCDataStore').clear();
16
- }
17
- async flows() {
18
- return [];
19
- }
20
- async inputFillers() {
21
- return undefined;
22
- }
23
- async opts() {
24
- return undefined;
25
- }
26
- async seed(_ctx) {
27
- // Nothing to do
28
- }
29
- async sideEffects(_ctx) {
30
- return undefined;
31
- }
32
- async specificAssertions() {
33
- return undefined;
34
- }
35
- }
@@ -1,15 +0,0 @@
1
- import type { UCDefSourceRaw } from '../def.js';
2
- /**
3
- * Strip the server part of the UCD
4
- *
5
- * To be used by bundlers when building for the web for example, or any other clients (e.g. React Native).
6
- *
7
- * WARNING : This implementation is very naive and will have unexpected behaviors when the UCD has a specific shape.
8
- * For instance, if there is another `server: {` occurence than the lifecycle.server definition, it will be wrongly replaced.
9
- *
10
- * TODO : Make this implementation more robust (let's try not to use an AST parser though, to keep things fast and simple).
11
- *
12
- * @param source
13
- * @returns
14
- */
15
- export declare function stripUCDLifecycleServer(source: UCDefSourceRaw): UCDefSourceRaw;
@@ -1,77 +0,0 @@
1
- import { UC_MAIN_SERVER_SUFFIX } from '../../convention.js';
2
- const CORE_SERVER_MAINS = ['IdleServerMain'];
3
- const TOKEN_IMPORT = 'import';
4
- const TOKEN_IMPORT_END = ';';
5
- const TOKEN_LIFECYCLE_SERVER = 'server: {';
6
- const TOKEN_LIFECYCLE_SERVER_END = '},';
7
- const TOKEN_LIFECYCLE_SERVER_REPLACE = 'server: true,';
8
- /**
9
- * Strip the server part of the UCD
10
- *
11
- * To be used by bundlers when building for the web for example, or any other clients (e.g. React Native).
12
- *
13
- * WARNING : This implementation is very naive and will have unexpected behaviors when the UCD has a specific shape.
14
- * For instance, if there is another `server: {` occurence than the lifecycle.server definition, it will be wrongly replaced.
15
- *
16
- * TODO : Make this implementation more robust (let's try not to use an AST parser though, to keep things fast and simple).
17
- *
18
- * @param source
19
- * @returns
20
- */
21
- export function stripUCDLifecycleServer(source) {
22
- const occurrences = [
23
- ...source.matchAll(new RegExp(UC_MAIN_SERVER_SUFFIX, 'g')),
24
- ];
25
- const count = occurrences.length;
26
- const toReplace = [];
27
- let occIdx = 0;
28
- for (const occ of occurrences) {
29
- if (count === 3 && occIdx === 1) {
30
- // Skip the 2nd occurrence as it is part of the import of the 1st (Rrrrh very hacky...)
31
- occIdx += 1;
32
- continue;
33
- }
34
- const toRep = { end: 0, start: 0, str: '' };
35
- let cursor = occ.index;
36
- let expr = '';
37
- while (!expr.startsWith(TOKEN_IMPORT) &&
38
- !expr.startsWith(TOKEN_LIFECYCLE_SERVER)) {
39
- expr = `${source[cursor]}${expr}`;
40
- cursor -= 1;
41
- }
42
- toRep.start = cursor;
43
- cursor = occ.index;
44
- while (!expr.endsWith(TOKEN_IMPORT_END) &&
45
- !expr.endsWith(TOKEN_LIFECYCLE_SERVER_END)) {
46
- expr = `${expr}${source[cursor]}`;
47
- cursor += 1;
48
- }
49
- toRep.end = cursor;
50
- toRep.str = source.substring(toRep.start, toRep.end).trim();
51
- toReplace.push(toRep);
52
- occIdx += 1;
53
- }
54
- // Flip the items to replace in order to remove the usage before the imports
55
- // This is related to the edge case of IdleServerMain that we remove from the imports list,
56
- // while for specific ServerMain, we remove the entire import instruction.
57
- toReplace.reverse();
58
- let cleaned = source;
59
- for (const { str } of toReplace) {
60
- if (str.startsWith(TOKEN_LIFECYCLE_SERVER)) {
61
- cleaned = cleaned.replaceAll(str, TOKEN_LIFECYCLE_SERVER_REPLACE);
62
- continue;
63
- }
64
- if (str.startsWith(TOKEN_IMPORT)) {
65
- for (const coreServerMain of CORE_SERVER_MAINS) {
66
- if (str.includes(coreServerMain)) {
67
- cleaned = cleaned.replace(new RegExp(`${coreServerMain},?`), '');
68
- }
69
- }
70
- cleaned = cleaned.replaceAll(str, '');
71
- }
72
- }
73
- if (cleaned.includes(UC_MAIN_SERVER_SUFFIX)) {
74
- throw new Error(`Stripping UCD server lifecycle did not complete successfully. The output still contains references to ${UC_MAIN_SERVER_SUFFIX} : ${cleaned}`);
75
- }
76
- return cleaned;
77
- }
@@ -1,8 +0,0 @@
1
- import { UCInputFieldChangeOperator } from '../input-field.js';
2
- /**
3
- * Check whether a {@link UCInputFieldChangeOperator} is for an array or not.
4
- *
5
- * @param op
6
- * @returns
7
- */
8
- export declare function ucifcoIsForArray(op: UCInputFieldChangeOperator): op is UCInputFieldChangeOperator.ADD | UCInputFieldChangeOperator.REMOVE;
@@ -1,13 +0,0 @@
1
- import { UCInputFieldChangeOperator } from '../input-field.js';
2
- /**
3
- * Check whether a {@link UCInputFieldChangeOperator} is for an array or not.
4
- *
5
- * @param op
6
- * @returns
7
- */
8
- export function ucifcoIsForArray(op) {
9
- return [
10
- UCInputFieldChangeOperator.ADD,
11
- UCInputFieldChangeOperator.REMOVE,
12
- ].includes(op);
13
- }
@@ -1,2 +0,0 @@
1
- import type { PluginOption } from 'vite';
2
- export declare const StripUCDLifecycleServerPlugin: PluginOption;
@@ -1,18 +0,0 @@
1
- import { UC_DEF_FILE_NAME_SUFFIX } from '../../../convention.js';
2
- import { stripUCDLifecycleServer } from '../../../uc/index.js';
3
- export const StripUCDLifecycleServerPlugin = {
4
- // Why enforce ?
5
- // Otherwise Rollup parses the file and strips trailing commas.
6
- // We need them to strip correctly (although the implementation will be made more robust).
7
- enforce: 'pre',
8
- name: 'strip-ucd-lifecycle-server',
9
- transform: (src, id) => {
10
- if (id.match(new RegExp(`${UC_DEF_FILE_NAME_SUFFIX}$`)) === null) {
11
- return;
12
- }
13
- const code = stripUCDLifecycleServer(src);
14
- return {
15
- code,
16
- };
17
- },
18
- };
@@ -1,3 +0,0 @@
1
- import type { FormDataBuilder } from '../../std/index.js';
2
- import type { HTTPReqData } from './types.js';
3
- export declare function toFormData<T extends HTTPReqData>(data: T | undefined | null, fd: FormData, formDataBuilder: FormDataBuilder): Promise<void>;
@@ -1,4 +0,0 @@
1
- import { appendData } from './appendData.js';
2
- export async function toFormData(data, fd, formDataBuilder) {
3
- await appendData(data, (k, v) => formDataBuilder.append(fd, k, v));
4
- }