libmodulor 0.27.0 → 0.28.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 (120) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +1 -1
  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/final/TErrorCode.d.ts +7 -0
  13. package/dist/esm/dt/final/TErrorCode.js +9 -0
  14. package/dist/esm/dt/index.d.ts +1 -0
  15. package/dist/esm/dt/index.js +1 -0
  16. package/dist/esm/error/CustomError.d.ts +1 -1
  17. package/dist/esm/error/CustomError.js +2 -2
  18. package/dist/esm/error/ForbiddenAsNotFoundError.js +1 -1
  19. package/dist/esm/error/ForbiddenError.js +1 -1
  20. package/dist/esm/error/IllegalArgumentError.js +2 -2
  21. package/dist/esm/error/InternalServerError.js +1 -1
  22. package/dist/esm/error/NotFoundError.js +1 -1
  23. package/dist/esm/error/UnauthorizedError.js +1 -1
  24. package/dist/esm/error/UnavailableError.d.ts +6 -0
  25. package/dist/esm/error/UnavailableError.js +9 -0
  26. package/dist/esm/error/funcs.js +2 -0
  27. package/dist/esm/error/index.d.ts +1 -0
  28. package/dist/esm/error/index.js +1 -0
  29. package/dist/esm/i18n/locales/de.js +8 -0
  30. package/dist/esm/i18n/locales/en.js +8 -0
  31. package/dist/esm/i18n/locales/es.js +8 -0
  32. package/dist/esm/i18n/locales/fr.js +8 -0
  33. package/dist/esm/i18n/types.d.ts +1 -1
  34. package/dist/esm/products/Helper/i18n.d.ts +8 -0
  35. package/dist/esm/std/impl/SimpleHTTPAPICaller.js +1 -1
  36. package/dist/esm/target/lib/cli/CommandExecutor.js +2 -2
  37. package/dist/esm/target/lib/cli/renderer.d.ts +2 -1
  38. package/dist/esm/target/lib/cli/renderer.js +10 -11
  39. package/dist/esm/target/lib/server/AuthenticationChecker.d.ts +3 -3
  40. package/dist/esm/target/lib/server/AuthenticationChecker.js +5 -5
  41. package/dist/esm/target/node-core-cli/NodeCoreCLIManager.js +1 -1
  42. package/dist/esm/target/react-web-pure/UCForm.d.ts +1 -1
  43. package/dist/esm/target/react-web-pure/UCForm.js +3 -2
  44. package/dist/esm/testing/workers/checkers/AppI18nChecker.js +4 -2
  45. package/dist/esm/uc/data-store.d.ts +9 -1
  46. package/dist/esm/uc/data-store.js +33 -1
  47. package/dist/esm/uc/impl/CloudflareD1UCDataStore.d.ts +2 -2
  48. package/dist/esm/uc/impl/CloudflareD1UCDataStore.js +7 -0
  49. package/dist/esm/uc/impl/InMemoryUCDataStore.d.ts +8 -3
  50. package/dist/esm/uc/impl/InMemoryUCDataStore.js +19 -3
  51. package/dist/esm/uc/impl/KnexUCDataStore.d.ts +2 -2
  52. package/dist/esm/uc/impl/KnexUCDataStore.js +10 -2
  53. package/dist/esm/uc/impl/SimpleUCManager.d.ts +4 -4
  54. package/dist/esm/uc/impl/SimpleUCManager.js +10 -10
  55. package/dist/esm/uc/settings/consts.js +1 -0
  56. package/dist/esm/uc/settings.d.ts +8 -1
  57. package/dist/esm/uc/workers/UCExecChecker.d.ts +3 -3
  58. package/dist/esm/uc/workers/UCExecChecker.js +5 -5
  59. package/dist/esm/utils/index.d.ts +1 -1
  60. package/dist/esm/utils/index.js +1 -1
  61. package/dist/esm/utils/ioc/bindCommon.js +4 -4
  62. package/dist/esm/utils/ioc/bindFactory.d.ts +2 -0
  63. package/dist/esm/utils/ioc/bindFactory.js +9 -0
  64. package/package.json +20 -19
  65. package/dist/esm/apps/Helper/src/lib/app.d.ts +0 -6
  66. package/dist/esm/apps/Helper/src/lib/app.js +0 -12
  67. package/dist/esm/apps/Helper/src/lib/project.d.ts +0 -3
  68. package/dist/esm/apps/Helper/src/lib/project.js +0 -163
  69. package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
  70. package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.js +0 -18
  71. package/dist/esm/products/Helper/cli-node-core/container.d.ts +0 -3
  72. package/dist/esm/products/Helper/cli-node-core/container.js +0 -26
  73. package/dist/esm/products/Helper/cli-node-core/index.d.ts +0 -1
  74. package/dist/esm/products/Helper/cli-node-core/index.js +0 -9
  75. package/dist/esm/products/Helper/container.d.ts +0 -3
  76. package/dist/esm/products/Helper/container.js +0 -26
  77. package/dist/esm/products/Helper/index.d.ts +0 -1
  78. package/dist/esm/products/Helper/index.js +0 -16
  79. package/dist/esm/target/lib/react/common.d.ts +0 -6
  80. package/dist/esm/target/lib/react/common.js +0 -1
  81. package/dist/esm/target/lib/server/RequestHandler.d.ts +0 -14
  82. package/dist/esm/target/lib/server/RequestHandler.js +0 -1
  83. package/dist/esm/target/lib/server-node/stop.d.ts +0 -2
  84. package/dist/esm/target/lib/server-node/stop.js +0 -18
  85. package/dist/esm/target/node-express-server/lib/AuthCookieCreator.d.ts +0 -21
  86. package/dist/esm/target/node-express-server/lib/AuthCookieCreator.js +0 -50
  87. package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.d.ts +0 -21
  88. package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.js +0 -61
  89. package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.d.ts +0 -12
  90. package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.js +0 -35
  91. package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.d.ts +0 -12
  92. package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.js +0 -39
  93. package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.d.ts +0 -18
  94. package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.js +0 -44
  95. package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.d.ts +0 -12
  96. package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.js +0 -36
  97. package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.d.ts +0 -23
  98. package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.js +0 -154
  99. package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.d.ts +0 -13
  100. package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.js +0 -46
  101. package/dist/esm/testing/impl/SimpleAppDocsEmitter.d.ts +0 -7
  102. package/dist/esm/testing/impl/SimpleAppDocsEmitter.js +0 -180
  103. package/dist/esm/testing/impl/SimpleAppTesterConfigurator.d.ts +0 -14
  104. package/dist/esm/testing/impl/SimpleAppTesterConfigurator.js +0 -35
  105. package/dist/esm/uc/utils/stripUCDLifecycleServer.d.ts +0 -15
  106. package/dist/esm/uc/utils/stripUCDLifecycleServer.js +0 -77
  107. package/dist/esm/uc/utils/ucifcoIsForArray.d.ts +0 -8
  108. package/dist/esm/uc/utils/ucifcoIsForArray.js +0 -13
  109. package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
  110. package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.js +0 -18
  111. package/dist/esm/utils/http/toFormData.d.ts +0 -3
  112. package/dist/esm/utils/http/toFormData.js +0 -4
  113. package/dist/esm/utils/http/toJSON.d.ts +0 -3
  114. package/dist/esm/utils/http/toJSON.js +0 -3
  115. package/dist/esm/utils/http/toQueryParams.d.ts +0 -2
  116. package/dist/esm/utils/http/toQueryParams.js +0 -4
  117. package/dist/esm/utils/ioc/ContainerPrinter.d.ts +0 -15
  118. package/dist/esm/utils/ioc/ContainerPrinter.js +0 -58
  119. package/dist/esm/utils/ioc/bindProvider.d.ts +0 -2
  120. package/dist/esm/utils/ioc/bindProvider.js +0 -9
@@ -1,12 +0,0 @@
1
- import type { RequestHandler } from 'express';
2
- import type { Worker } from '../../../std/index.js';
3
- import { CSPDirectivesBuilder } from '../../lib/server/CSPDirectivesBuilder.js';
4
- interface Input {
5
- }
6
- type Output = RequestHandler;
7
- export declare class HelmetMiddlewareBuilder implements Worker<Input, Output> {
8
- private cspDirectivesBuilder;
9
- constructor(cspDirectivesBuilder: CSPDirectivesBuilder);
10
- exec(_input: Input): Output;
11
- }
12
- export {};
@@ -1,39 +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 helmet from 'helmet';
14
- import { inject, injectable } from 'inversify';
15
- import { CSPDirectivesBuilder, } from '../../lib/server/CSPDirectivesBuilder.js';
16
- let HelmetMiddlewareBuilder = class HelmetMiddlewareBuilder {
17
- cspDirectivesBuilder;
18
- constructor(cspDirectivesBuilder) {
19
- this.cspDirectivesBuilder = cspDirectivesBuilder;
20
- }
21
- exec(_input) {
22
- const defaultDirectives = helmet.contentSecurityPolicy.getDefaultDirectives();
23
- const { directives } = this.cspDirectivesBuilder.exec({
24
- defaultDirectives,
25
- });
26
- return helmet({
27
- contentSecurityPolicy: {
28
- directives,
29
- useDefaults: false,
30
- },
31
- });
32
- }
33
- };
34
- HelmetMiddlewareBuilder = __decorate([
35
- injectable(),
36
- __param(0, inject(CSPDirectivesBuilder)),
37
- __metadata("design:paramtypes", [CSPDirectivesBuilder])
38
- ], HelmetMiddlewareBuilder);
39
- export { HelmetMiddlewareBuilder };
@@ -1,18 +0,0 @@
1
- import type { RequestHandler } from 'express';
2
- import type { Configurable, SettingsManager, Worker } from '../../../std/index.js';
3
- import type { UCSec } from '../../../uc/index.js';
4
- import { PublicApiKeyChecker } from '../../lib/server/PublicApiKeyChecker.js';
5
- import type { ServerManagerSettings } from '../../lib/server/ServerManager.js';
6
- interface Input {
7
- checkType: UCSec['publicApiKeyCheckType'];
8
- }
9
- type Output = RequestHandler;
10
- type S = Pick<ServerManagerSettings, 'server_public_api_key_header_name'>;
11
- export declare class PublicApiKeyCheckerMiddlewareBuilder implements Configurable<S>, Worker<Input, Output> {
12
- private publicApiKeyChecker;
13
- private settingsManager;
14
- constructor(publicApiKeyChecker: PublicApiKeyChecker, settingsManager: SettingsManager<S>);
15
- s(): S;
16
- exec({ checkType }: Input): Output;
17
- }
18
- export {};
@@ -1,44 +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 { PublicApiKeyChecker } from '../../lib/server/PublicApiKeyChecker.js';
15
- let PublicApiKeyCheckerMiddlewareBuilder = class PublicApiKeyCheckerMiddlewareBuilder {
16
- publicApiKeyChecker;
17
- settingsManager;
18
- constructor(publicApiKeyChecker, settingsManager) {
19
- this.publicApiKeyChecker = publicApiKeyChecker;
20
- this.settingsManager = settingsManager;
21
- }
22
- s() {
23
- return {
24
- server_public_api_key_header_name: this.settingsManager.get()('server_public_api_key_header_name'),
25
- };
26
- }
27
- exec({ checkType }) {
28
- return async (req, _res, nextFn) => {
29
- const value = req.header(this.s().server_public_api_key_header_name);
30
- await this.publicApiKeyChecker.exec({
31
- checkType,
32
- value,
33
- });
34
- nextFn();
35
- };
36
- }
37
- };
38
- PublicApiKeyCheckerMiddlewareBuilder = __decorate([
39
- injectable(),
40
- __param(0, inject(PublicApiKeyChecker)),
41
- __param(1, inject('SettingsManager')),
42
- __metadata("design:paramtypes", [PublicApiKeyChecker, Object])
43
- ], PublicApiKeyCheckerMiddlewareBuilder);
44
- export { PublicApiKeyCheckerMiddlewareBuilder };
@@ -1,12 +0,0 @@
1
- import type { RequestHandler } from 'express';
2
- import type { Worker } from '../../../std/index.js';
3
- import { RequestChecker } from '../../lib/server/RequestChecker.js';
4
- interface Input {
5
- }
6
- type Output = RequestHandler;
7
- export declare class RequestCheckerMiddlewareBuilder implements Worker<Input, Output> {
8
- private requestChecker;
9
- constructor(requestChecker: RequestChecker);
10
- exec(_input: Input): Output;
11
- }
12
- export {};
@@ -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;