libmodulor 0.26.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 (123) hide show
  1. package/CHANGELOG.md +30 -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 +7 -7
  5. package/dist/esm/apps/Helper/src/lib/layers/uc.js +1 -1
  6. package/dist/esm/apps/Helper/src/ucds/CreateAppUCD.js +5 -10
  7. package/dist/esm/apps/Helper/src/ucds/CreateProductUCD.js +5 -10
  8. package/dist/esm/apps/Helper/src/ucds/CreateTargetUCD.js +6 -11
  9. package/dist/esm/apps/Helper/src/ucds/TestAppUCD.js +5 -8
  10. package/dist/esm/convention.d.ts +1 -1
  11. package/dist/esm/convention.js +1 -1
  12. package/dist/esm/dt/DataType.d.ts +2 -1
  13. package/dist/esm/dt/DataTypes.d.ts +1 -1
  14. package/dist/esm/dt/DataTypes.js +1 -0
  15. package/dist/esm/dt/final/TErrorCode.d.ts +7 -0
  16. package/dist/esm/dt/final/TErrorCode.js +9 -0
  17. package/dist/esm/dt/index.d.ts +1 -0
  18. package/dist/esm/dt/index.js +1 -0
  19. package/dist/esm/error/CustomError.d.ts +1 -1
  20. package/dist/esm/error/CustomError.js +2 -2
  21. package/dist/esm/error/ForbiddenAsNotFoundError.js +1 -1
  22. package/dist/esm/error/ForbiddenError.js +1 -1
  23. package/dist/esm/error/IllegalArgumentError.js +2 -2
  24. package/dist/esm/error/InternalServerError.js +1 -1
  25. package/dist/esm/error/NotFoundError.js +1 -1
  26. package/dist/esm/error/UnauthorizedError.js +1 -1
  27. package/dist/esm/error/UnavailableError.d.ts +6 -0
  28. package/dist/esm/error/UnavailableError.js +9 -0
  29. package/dist/esm/error/funcs.js +2 -0
  30. package/dist/esm/error/index.d.ts +1 -0
  31. package/dist/esm/error/index.js +1 -0
  32. package/dist/esm/i18n/locales/de.js +8 -0
  33. package/dist/esm/i18n/locales/en.js +8 -0
  34. package/dist/esm/i18n/locales/es.js +8 -0
  35. package/dist/esm/i18n/locales/fr.js +8 -0
  36. package/dist/esm/i18n/types.d.ts +1 -1
  37. package/dist/esm/products/Helper/i18n.d.ts +8 -0
  38. package/dist/esm/std/impl/SimpleHTTPAPICaller.js +1 -1
  39. package/dist/esm/target/lib/cli/CommandExecutor.js +2 -2
  40. package/dist/esm/target/lib/cli/renderer.d.ts +2 -1
  41. package/dist/esm/target/lib/cli/renderer.js +10 -11
  42. package/dist/esm/target/lib/server/AuthenticationChecker.d.ts +3 -3
  43. package/dist/esm/target/lib/server/AuthenticationChecker.js +5 -5
  44. package/dist/esm/target/node-core-cli/NodeCoreCLIManager.js +1 -1
  45. package/dist/esm/target/react-web-pure/UCForm.d.ts +1 -1
  46. package/dist/esm/target/react-web-pure/UCForm.js +3 -2
  47. package/dist/esm/testing/workers/checkers/AppI18nChecker.js +4 -2
  48. package/dist/esm/uc/data-store.d.ts +9 -1
  49. package/dist/esm/uc/data-store.js +33 -1
  50. package/dist/esm/uc/impl/CloudflareD1UCDataStore.d.ts +2 -2
  51. package/dist/esm/uc/impl/CloudflareD1UCDataStore.js +7 -0
  52. package/dist/esm/uc/impl/InMemoryUCDataStore.d.ts +8 -3
  53. package/dist/esm/uc/impl/InMemoryUCDataStore.js +19 -3
  54. package/dist/esm/uc/impl/KnexUCDataStore.d.ts +2 -2
  55. package/dist/esm/uc/impl/KnexUCDataStore.js +10 -2
  56. package/dist/esm/uc/impl/SimpleUCManager.d.ts +4 -4
  57. package/dist/esm/uc/impl/SimpleUCManager.js +10 -10
  58. package/dist/esm/uc/settings/consts.js +1 -0
  59. package/dist/esm/uc/settings.d.ts +8 -1
  60. package/dist/esm/uc/workers/UCExecChecker.d.ts +3 -3
  61. package/dist/esm/uc/workers/UCExecChecker.js +5 -5
  62. package/dist/esm/utils/index.d.ts +1 -1
  63. package/dist/esm/utils/index.js +1 -1
  64. package/dist/esm/utils/ioc/bindCommon.js +4 -4
  65. package/dist/esm/utils/ioc/bindFactory.d.ts +2 -0
  66. package/dist/esm/utils/ioc/bindFactory.js +9 -0
  67. package/package.json +21 -20
  68. package/dist/esm/apps/Helper/src/lib/app.d.ts +0 -6
  69. package/dist/esm/apps/Helper/src/lib/app.js +0 -12
  70. package/dist/esm/apps/Helper/src/lib/project.d.ts +0 -3
  71. package/dist/esm/apps/Helper/src/lib/project.js +0 -163
  72. package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
  73. package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.js +0 -18
  74. package/dist/esm/products/Helper/cli-node-core/container.d.ts +0 -3
  75. package/dist/esm/products/Helper/cli-node-core/container.js +0 -26
  76. package/dist/esm/products/Helper/cli-node-core/index.d.ts +0 -1
  77. package/dist/esm/products/Helper/cli-node-core/index.js +0 -9
  78. package/dist/esm/products/Helper/container.d.ts +0 -3
  79. package/dist/esm/products/Helper/container.js +0 -26
  80. package/dist/esm/products/Helper/index.d.ts +0 -1
  81. package/dist/esm/products/Helper/index.js +0 -16
  82. package/dist/esm/target/lib/react/common.d.ts +0 -6
  83. package/dist/esm/target/lib/react/common.js +0 -1
  84. package/dist/esm/target/lib/server/RequestHandler.d.ts +0 -14
  85. package/dist/esm/target/lib/server/RequestHandler.js +0 -1
  86. package/dist/esm/target/lib/server-node/stop.d.ts +0 -2
  87. package/dist/esm/target/lib/server-node/stop.js +0 -18
  88. package/dist/esm/target/node-express-server/lib/AuthCookieCreator.d.ts +0 -21
  89. package/dist/esm/target/node-express-server/lib/AuthCookieCreator.js +0 -50
  90. package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.d.ts +0 -21
  91. package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.js +0 -61
  92. package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.d.ts +0 -12
  93. package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.js +0 -35
  94. package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.d.ts +0 -12
  95. package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.js +0 -39
  96. package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.d.ts +0 -18
  97. package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.js +0 -44
  98. package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.d.ts +0 -12
  99. package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.js +0 -36
  100. package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.d.ts +0 -23
  101. package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.js +0 -154
  102. package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.d.ts +0 -13
  103. package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.js +0 -46
  104. package/dist/esm/testing/impl/SimpleAppDocsEmitter.d.ts +0 -7
  105. package/dist/esm/testing/impl/SimpleAppDocsEmitter.js +0 -180
  106. package/dist/esm/testing/impl/SimpleAppTesterConfigurator.d.ts +0 -14
  107. package/dist/esm/testing/impl/SimpleAppTesterConfigurator.js +0 -35
  108. package/dist/esm/uc/utils/stripUCDLifecycleServer.d.ts +0 -15
  109. package/dist/esm/uc/utils/stripUCDLifecycleServer.js +0 -77
  110. package/dist/esm/uc/utils/ucifcoIsForArray.d.ts +0 -8
  111. package/dist/esm/uc/utils/ucifcoIsForArray.js +0 -13
  112. package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
  113. package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.js +0 -18
  114. package/dist/esm/utils/http/toFormData.d.ts +0 -3
  115. package/dist/esm/utils/http/toFormData.js +0 -4
  116. package/dist/esm/utils/http/toJSON.d.ts +0 -3
  117. package/dist/esm/utils/http/toJSON.js +0 -3
  118. package/dist/esm/utils/http/toQueryParams.d.ts +0 -2
  119. package/dist/esm/utils/http/toQueryParams.js +0 -4
  120. package/dist/esm/utils/ioc/ContainerPrinter.d.ts +0 -15
  121. package/dist/esm/utils/ioc/ContainerPrinter.js +0 -58
  122. package/dist/esm/utils/ioc/bindProvider.d.ts +0 -2
  123. package/dist/esm/utils/ioc/bindProvider.js +0 -9
@@ -16,7 +16,7 @@ import { InMemoryUCDataStore } from '../../uc/impl/InMemoryUCDataStore.js';
16
16
  import { SimpleUCManager } from '../../uc/impl/SimpleUCManager.js';
17
17
  import { StaticUCClientConfirmManager } from '../../uc/impl/StaticUCClientConfirmManager.js';
18
18
  import { UC_DEFAULT_SETTINGS, } from '../../uc/index.js';
19
- import { bindProvider } from './bindProvider.js';
19
+ import { bindFactory } from './bindFactory.js';
20
20
  export function bindCommon(container) {
21
21
  // settings
22
22
  container.bind('Settings').toConstantValue({
@@ -55,9 +55,9 @@ export function bindCommon(container) {
55
55
  .to(SettingsServerClientManager);
56
56
  container.bind('XMLManager').to(NoopXMLManager);
57
57
  // uc
58
- bindProvider(container, 'UCInit');
59
- bindProvider(container, 'UCMain');
60
- bindProvider(container, 'UCPolicy');
58
+ bindFactory(container, 'UCInit');
59
+ bindFactory(container, 'UCMain');
60
+ bindFactory(container, 'UCPolicy');
61
61
  container
62
62
  .bind('UCClientConfirmManager')
63
63
  .to(StaticUCClientConfirmManager);
@@ -0,0 +1,2 @@
1
+ import type { Container } from 'inversify';
2
+ export declare function bindFactory<T>(container: Container, identifier: string): void;
@@ -0,0 +1,9 @@
1
+ export function bindFactory(container, identifier) {
2
+ container
3
+ .bind(`Factory<${identifier}>`)
4
+ .toFactory((context) => {
5
+ return async (clazz) => {
6
+ return context.get(clazz);
7
+ };
8
+ });
9
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "libmodulor",
3
3
  "description": "A TypeScript library to create platform-agnostic applications",
4
- "version": "0.26.0",
4
+ "version": "0.28.0",
5
5
  "license": "LGPL-3.0",
6
6
  "author": "Chafik H'nini <chafik.hnini@gmail.com>",
7
7
  "homepage": "https://libmodulor.c100k.eu",
@@ -97,40 +97,41 @@
97
97
  "test": "tsc && vitest run"
98
98
  },
99
99
  "devDependencies": {
100
- "@biomejs/biome": "^2.3.10",
100
+ "@biomejs/biome": "^2.4.13",
101
101
  "@react-native-community/slider": "^4.5.7",
102
- "@types/react": "^19.2.7",
102
+ "@types/react": "^19.2.14",
103
103
  "@types/react-dom": "^19.2.3",
104
104
  "babel-plugin-parameter-decorator": "^1.0.16",
105
105
  "babel-plugin-transform-typescript-metadata": "^0.3.2",
106
- "expo": "^54.0.30",
106
+ "expo": "55.0.11",
107
107
  "expo-document-picker": "~14.0.8",
108
108
  "expo-image-picker": "^17.0.10",
109
- "wrangler": "^4.56.0"
109
+ "react-native-safe-area-context": "^5.7.0",
110
+ "wrangler": "^4.84.1"
110
111
  },
111
112
  "peerDependencies": {
112
- "@hono/node-server": "^1.19.7",
113
- "@modelcontextprotocol/sdk": "^1.25.1",
114
- "@stricli/core": "^1.2.4",
113
+ "@hono/node-server": "^1.19.14",
114
+ "@modelcontextprotocol/sdk": "^1.29.0",
115
+ "@stricli/core": "^1.2.6",
115
116
  "buffer": "^6.0.3",
116
117
  "cookie-parser": "^1.4.7",
117
118
  "express": "^5.2.1",
118
119
  "express-fileupload": "^1.5.2",
119
- "fast-check": "^4.5.2",
120
+ "fast-check": "^4.7.0",
120
121
  "helmet": "^8.1.0",
121
- "hono": "^4.11.2",
122
- "inversify": "^7.10.8",
123
- "jose": "^6.1.3",
124
- "knex": "^3.1.0",
125
- "next": "^15.5.9",
126
- "pg": "^8.16.3",
127
- "react": "^19.2.3",
128
- "react-dom": "^19.2.3",
129
- "react-native": "^0.81.5",
122
+ "hono": "^4.12.15",
123
+ "inversify": "^7.11.0",
124
+ "jose": "^6.2.2",
125
+ "knex": "^3.2.9",
126
+ "next": "^15.5.15",
127
+ "pg": "^8.20.0",
128
+ "react": "19.2.3",
129
+ "react-dom": "19.2.3",
130
+ "react-native": "^0.84.1",
130
131
  "reflect-metadata": "^0.2.2",
131
132
  "sqlite3": "^5.1.7",
132
- "typescript": "^5.9.3",
133
- "vite": "^6.4.1",
133
+ "typescript": "^6.0.3",
134
+ "vite": "^6.4.2",
134
135
  "vitest": "^3.2.4"
135
136
  },
136
137
  "peerDependenciesMeta": {
@@ -1,6 +0,0 @@
1
- import { type DirPath } from '../../../../dt/index.js';
2
- import type { UCInput, UCInputDef, UCInputFieldValue } from '../../../../uc/index.js';
3
- export interface AppInput extends UCInput {
4
- appsPath: UCInputFieldValue<DirPath>;
5
- }
6
- export declare const AppInputFieldsDef: UCInputDef<AppInput>['fields'];
@@ -1,12 +0,0 @@
1
- import { APPS_ROOT_PATH } from '../../../../convention.js';
2
- import { TDirPath } from '../../../../dt/index.js';
3
- export const AppInputFieldsDef = {
4
- appsPath: {
5
- cardinality: {
6
- min: 0,
7
- },
8
- type: new TDirPath()
9
- .setDefaultValue(APPS_ROOT_PATH.join('/'))
10
- .setExamples([APPS_ROOT_PATH.join('/')]),
11
- },
12
- };
@@ -1,3 +0,0 @@
1
- import type { FileName, Slug } from '../../../../dt/index.js';
2
- export declare const PACKAGE_JSON: (name: Slug) => string;
3
- export declare function projectFiles(name: Slug): Map<FileName, string>;
@@ -1,163 +0,0 @@
1
- const GITIGNORE = `coverage
2
- dist
3
- node_modules
4
- src/apps/**/test/reports
5
- src/apps/**/test/*.test.ts
6
- src/products/**/rn/.expo
7
- .env
8
- `;
9
- const BIOME_JSON = `{
10
- "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
11
- "assist": {
12
- "actions": {
13
- "source": {
14
- "organizeImports": {
15
- "level": "on",
16
- "options": {
17
- "groups": [
18
- [":NODE:"],
19
- ":BLANK_LINE:",
20
- [":PACKAGE:"],
21
- ":BLANK_LINE:",
22
- [":PATH:"]
23
- ]
24
- }
25
- },
26
- "useSortedAttributes": "on",
27
- "useSortedKeys": "on"
28
- }
29
- }
30
- },
31
- "files": {
32
- "ignoreUnknown": true,
33
- "includes": [
34
- "**",
35
- "!**/coverage",
36
- "!**/dist",
37
- "!**/node_modules",
38
- "!**/package.json",
39
- "!**/src/**/test/reports"
40
- ]
41
- },
42
- "formatter": {
43
- "indentStyle": "space",
44
- "indentWidth": 4
45
- },
46
- "javascript": {
47
- "formatter": {
48
- "quoteStyle": "single"
49
- },
50
- "parser": {
51
- "unsafeParameterDecoratorsEnabled": true
52
- }
53
- },
54
- "linter": {
55
- "rules": {
56
- "style": {
57
- "noInferrableTypes": "error",
58
- "noParameterAssign": "error",
59
- "noUnusedTemplateLiteral": "error",
60
- "noUselessElse": "error",
61
- "useAsConstAssertion": "error",
62
- "useDefaultParameterLast": "error",
63
- "useEnumInitializers": "error",
64
- "useNumberNamespace": "error",
65
- "useSelfClosingElements": "error",
66
- "useSingleVarDeclarator": "error"
67
- },
68
- "suspicious": {
69
- "noConsole": "error"
70
- }
71
- }
72
- }
73
- }
74
- `;
75
- export const PACKAGE_JSON = (name) => `{
76
- "name": "${name}",
77
- "version": "0.1.0",
78
- "type": "module",
79
- "private": true,
80
- "scripts": {
81
- "lint": "biome check --write .",
82
- "test": "tsc && vitest run --passWithNoTests"
83
- },
84
- "dependencies": {
85
- "inversify": "^7.10.7",
86
- "libmodulor": "latest",
87
- "reflect-metadata": "^0.2.2"
88
- },
89
- "devDependencies": {
90
- "@biomejs/biome": "^2.3.10",
91
- "@types/node": "^25.0.3",
92
- "@vitest/coverage-v8": "^3.2.4",
93
- "buffer": "^6.0.3",
94
- "cookie-parser": "^1.4.7",
95
- "express": "^5.2.1",
96
- "express-fileupload": "^1.5.2",
97
- "fast-check": "^4.4.0",
98
- "helmet": "^8.1.0",
99
- "jose": "^6.1.3",
100
- "typescript": "^5.9.3",
101
- "vite": "^6.4.1",
102
- "vitest": "^3.2.4"
103
- }
104
- }
105
- `;
106
- const README_MD = (name) => `# ${name}
107
-
108
- 🚀🚀🚀
109
- `;
110
- const TSCONFIG_JSON = `{
111
- "compilerOptions": {
112
- "allowSyntheticDefaultImports": true,
113
- "allowUnreachableCode": false,
114
- "allowUnusedLabels": false,
115
- "declaration": true,
116
- "emitDecoratorMetadata": true,
117
- "exactOptionalPropertyTypes": true,
118
- "experimentalDecorators": true,
119
- "jsx": "react-jsx",
120
- "lib": ["dom", "esnext"],
121
- "module": "NodeNext",
122
- "moduleResolution": "NodeNext",
123
- "noEmit": true,
124
- "noFallthroughCasesInSwitch": true,
125
- "noImplicitOverride": true,
126
- "noImplicitReturns": true,
127
- "noPropertyAccessFromIndexSignature": true,
128
- "noUncheckedIndexedAccess": true,
129
- "noUnusedLocals": true,
130
- "noUnusedParameters": true,
131
- "removeComments": true,
132
- "skipLibCheck": true,
133
- "sourceMap": true,
134
- "strict": true,
135
- "target": "ESNext",
136
- "verbatimModuleSyntax": true
137
- }
138
- }
139
- `;
140
- const VITEST_CONFIG_TS = `import { defineConfig } from 'vitest/config';
141
-
142
- export default defineConfig({
143
- test: {
144
- coverage: {
145
- enabled: true,
146
- exclude: ['src/apps/**/test', 'src/**/*.test.ts'],
147
- include: ['src'],
148
- reporter: ['html', 'lcov', 'text'],
149
- },
150
- reporters: ['verbose'],
151
- },
152
- });
153
- `;
154
- export function projectFiles(name) {
155
- return new Map([
156
- ['.gitignore', GITIGNORE],
157
- ['biome.json', BIOME_JSON],
158
- ['package.json', PACKAGE_JSON(name)],
159
- ['README.md', README_MD(name)],
160
- ['tsconfig.json', TSCONFIG_JSON],
161
- ['vitest.config.ts', VITEST_CONFIG_TS],
162
- ]);
163
- }
@@ -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 { Container } from 'inversify';
2
- declare const container: Container;
3
- export default container;
@@ -1,26 +0,0 @@
1
- import { Container } from 'inversify';
2
- import { NodeSpawnShellCommandExecutor } from '../../../std/impl/NodeSpawnShellCommandExecutor.js';
3
- import { VitestAppTestSuiteEmitter } from '../../../testing/impl/VitestAppTestSuiteEmitter.js';
4
- import { VitestAppTestSuiteRunner } from '../../../testing/impl/VitestAppTestSuiteRunner.js';
5
- import { CONTAINER_OPTS } from '../../../utils/index.js';
6
- import { bindCommon } from '../../../utils/ioc/bindCommon.js';
7
- import { bindNodeCLI } from '../../../utils/ioc/bindNodeCLI.js';
8
- import { bindNodeCore } from '../../../utils/ioc/bindNodeCore.js';
9
- import { bindProduct } from '../../../utils/ioc/bindProduct.js';
10
- import { I18n } from '../i18n.js';
11
- import { Manifest } from '../manifest.js';
12
- const container = new Container(CONTAINER_OPTS);
13
- bindCommon(container);
14
- bindNodeCore(container);
15
- bindNodeCLI(container);
16
- bindProduct(container, Manifest, I18n);
17
- container
18
- .bind('AppTestSuiteEmitter')
19
- .to(VitestAppTestSuiteEmitter);
20
- container
21
- .bind('AppTestSuiteRunner')
22
- .to(VitestAppTestSuiteRunner);
23
- container
24
- .bind('ShellCommandExecutor')
25
- .to(NodeSpawnShellCommandExecutor);
26
- export default container;
@@ -1 +0,0 @@
1
- export {};
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { NodeCoreCLIManager } from '../../../target/node-core-cli/NodeCoreCLIManager.js';
4
- import container from './container.js';
5
- const i18nManager = container.get('I18nManager');
6
- await i18nManager.init();
7
- await container.get(NodeCoreCLIManager).handleCommand({
8
- srcImporter: (path) => import(path),
9
- });
@@ -1,3 +0,0 @@
1
- import { Container } from 'inversify';
2
- declare const container: Container;
3
- export default container;
@@ -1,26 +0,0 @@
1
- import { Container } from 'inversify';
2
- import { NodeSpawnShellCommandExecutor } from '../../std/impl/NodeSpawnShellCommandExecutor.js';
3
- import { VitestAppTestSuiteEmitter } from '../../testing/impl/VitestAppTestSuiteEmitter.js';
4
- import { VitestAppTestSuiteRunner } from '../../testing/impl/VitestAppTestSuiteRunner.js';
5
- import { CONTAINER_OPTS } from '../../utils/index.js';
6
- import { bindCommon } from '../../utils/ioc/bindCommon.js';
7
- import { bindNodeCLI } from '../../utils/ioc/bindNodeCLI.js';
8
- import { bindNodeCore } from '../../utils/ioc/bindNodeCore.js';
9
- import { bindProduct } from '../../utils/ioc/bindProduct.js';
10
- import { I18n } from './i18n.js';
11
- import { Manifest } from './manifest.js';
12
- const container = new Container(CONTAINER_OPTS);
13
- bindCommon(container);
14
- bindNodeCore(container);
15
- bindNodeCLI(container);
16
- bindProduct(container, Manifest, I18n);
17
- container
18
- .bind('AppTestSuiteEmitter')
19
- .to(VitestAppTestSuiteEmitter);
20
- container
21
- .bind('AppTestSuiteRunner')
22
- .to(VitestAppTestSuiteRunner);
23
- container
24
- .bind('ShellCommandExecutor')
25
- .to(NodeSpawnShellCommandExecutor);
26
- export default container;
@@ -1 +0,0 @@
1
- export {};
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { APPS_ROOT_DIR_NAME } from '../../convention.js';
4
- import { NodeCoreCLIManager } from '../../target/node-core-cli/NodeCoreCLIManager.js';
5
- import container from './container.js';
6
- const i18nManager = container.get('I18nManager');
7
- await i18nManager.init();
8
- // Before screaming, yes, this is not using any powerful CLI library.
9
- // The goal is to reduce the usage of dependencies as much as possible.
10
- // As long as the built-in Node.js API allows to build it without too many workarounds, let's keep it this way.
11
- await container.get(NodeCoreCLIManager).handleCommand({
12
- appsRootPath: container
13
- .get('FSManager')
14
- .path('..', '..', APPS_ROOT_DIR_NAME),
15
- srcImporter: (path) => import(path),
16
- });
@@ -1,6 +0,0 @@
1
- export interface Stylable {
2
- /**
3
- * Although it's not applicable to all the targets (e.g. React Native), we generalize `className` to make it more convenient for targets that accept it as it is a pretty common and standard property
4
- */
5
- className?: string;
6
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,14 +0,0 @@
1
- import type { AppManifest } from '../../../app/index.js';
2
- import type { UCDef, UCInput, UCManager, UCOPIBase } from '../../../uc/index.js';
3
- import type { HTTPDataEnvelope } from '../../../utils/index.js';
4
- export interface RequestHandlerInputRaw<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> {
5
- appManifest: AppManifest;
6
- envelope: HTTPDataEnvelope;
7
- ucd: UCDef<I, OPI0, OPI1>;
8
- /**
9
- * It is not injected in the handler constructor because it must be the same as the one used in ServerManager.
10
- *
11
- * And in some cases, this latter is specific to a context : for instance in automated tests.
12
- */
13
- ucManager: UCManager;
14
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- import type { Server } from './types.js';
2
- export declare function stop(server: Server): Promise<void>;
@@ -1,18 +0,0 @@
1
- export async function stop(server) {
2
- if (!server?.listening) {
3
- return;
4
- }
5
- // As stated in the docs of `close`, only awaiting `.close` is not enough to make sure all the connections are closed.
6
- // Hence the wrapping in a promise, where the callback is called when the 'close' event is emitted.
7
- return new Promise((resolve, reject) => {
8
- if (!server) {
9
- return resolve();
10
- }
11
- server.close((err) => {
12
- if (err) {
13
- return reject(err);
14
- }
15
- resolve();
16
- });
17
- });
18
- }
@@ -1,21 +0,0 @@
1
- import type { CookieOptions } from 'express';
2
- import type { JWT } from '../../../dt/index.js';
3
- import type { JWTManager, SettingsManager, Worker } from '../../../std/index.js';
4
- import type { ServerManagerSettings } from '../../lib/server/ServerManager.js';
5
- interface Input {
6
- jwt: JWT;
7
- }
8
- interface Output {
9
- name: string;
10
- opts: CookieOptions;
11
- val: JWT;
12
- }
13
- type S = Pick<ServerManagerSettings, 'server_cookies_http_only' | 'server_cookies_name_auth' | 'server_cookies_same_site' | 'server_cookies_secure'>;
14
- export declare class AuthCookieCreator implements Worker<Input, Promise<Output>> {
15
- private jwtManager;
16
- private settingsManager;
17
- constructor(jwtManager: JWTManager, settingsManager: SettingsManager<S>);
18
- s(): S;
19
- exec({ jwt }: Input): Promise<Output>;
20
- }
21
- export {};
@@ -1,50 +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
- let AuthCookieCreator = class AuthCookieCreator {
15
- jwtManager;
16
- settingsManager;
17
- constructor(jwtManager, settingsManager) {
18
- this.jwtManager = jwtManager;
19
- this.settingsManager = settingsManager;
20
- }
21
- s() {
22
- return {
23
- server_cookies_http_only: this.settingsManager.get()('server_cookies_http_only'),
24
- server_cookies_name_auth: this.settingsManager.get()('server_cookies_name_auth'),
25
- server_cookies_same_site: this.settingsManager.get()('server_cookies_same_site'),
26
- server_cookies_secure: this.settingsManager.get()('server_cookies_secure'),
27
- };
28
- }
29
- async exec({ jwt }) {
30
- const { exp } = await this.jwtManager.decode(jwt);
31
- return {
32
- name: this.s().server_cookies_name_auth,
33
- opts: {
34
- expires: exp ? new Date(exp * 1000) : undefined,
35
- httpOnly: this.s().server_cookies_http_only,
36
- sameSite: this.s().server_cookies_same_site,
37
- secure: this.s().server_cookies_secure,
38
- signed: false, // Not signing to keep it simple and btw, the JWT is already signed
39
- },
40
- val: jwt,
41
- };
42
- }
43
- };
44
- AuthCookieCreator = __decorate([
45
- injectable(),
46
- __param(0, inject('JWTManager')),
47
- __param(1, inject('SettingsManager')),
48
- __metadata("design:paramtypes", [Object, Object])
49
- ], AuthCookieCreator);
50
- export { AuthCookieCreator };
@@ -1,21 +0,0 @@
1
- import type { Request, RequestHandler } from 'express';
2
- import type { Configurable, SettingsManager, Worker } from '../../../std/index.js';
3
- import { type UCAuth, UCBuilder, type UCInput, type UCOPIBase } from '../../../uc/index.js';
4
- import { AuthenticationChecker, type AuthenticationCheckerInputRaw } from '../../lib/server/AuthenticationChecker.js';
5
- import type { ServerManagerSettings } from '../../lib/server/ServerManager.js';
6
- type Input<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> = AuthenticationCheckerInputRaw<I, OPI0, OPI1>;
7
- type Output = RequestHandler;
8
- interface ReqAuthenticated extends Request {
9
- auth: UCAuth;
10
- }
11
- export declare function isReqAuthenticated(req: Request): req is ReqAuthenticated;
12
- type S = Pick<ServerManagerSettings, 'server_cookies_name_auth'>;
13
- export declare class AuthenticationCheckerMiddlewareBuilder<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> implements Configurable<S>, Worker<Input<I, OPI0, OPI1>, Output> {
14
- private authenticationChecker;
15
- private settingsManager;
16
- private ucBuilder;
17
- constructor(authenticationChecker: AuthenticationChecker, settingsManager: SettingsManager<S>, ucBuilder: UCBuilder);
18
- s(): S;
19
- exec({ appManifest, ucd }: Input<I, OPI0, OPI1>): Output;
20
- }
21
- export {};
@@ -1,61 +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, } from '../../../uc/index.js';
15
- import { AuthenticationChecker, } from '../../lib/server/AuthenticationChecker.js';
16
- export function isReqAuthenticated(req) {
17
- return !!req.auth;
18
- }
19
- let AuthenticationCheckerMiddlewareBuilder = class AuthenticationCheckerMiddlewareBuilder {
20
- authenticationChecker;
21
- settingsManager;
22
- ucBuilder;
23
- constructor(authenticationChecker, settingsManager, ucBuilder) {
24
- this.authenticationChecker = authenticationChecker;
25
- this.settingsManager = settingsManager;
26
- this.ucBuilder = ucBuilder;
27
- }
28
- s() {
29
- return {
30
- server_cookies_name_auth: this.settingsManager.get()('server_cookies_name_auth'),
31
- };
32
- }
33
- exec({ appManifest, ucd }) {
34
- return async (req, _res, nextFn) => {
35
- const authCookie = req.cookies[this.s().server_cookies_name_auth];
36
- const authorizationHeader = req.headers.authorization;
37
- const uc = this.ucBuilder.exec({
38
- appManifest,
39
- auth: null,
40
- def: ucd,
41
- });
42
- const { auth } = await this.authenticationChecker.exec({
43
- authCookie,
44
- authorizationHeader,
45
- uc,
46
- });
47
- if (auth) {
48
- req.auth = auth;
49
- }
50
- nextFn();
51
- };
52
- }
53
- };
54
- AuthenticationCheckerMiddlewareBuilder = __decorate([
55
- injectable(),
56
- __param(0, inject(AuthenticationChecker)),
57
- __param(1, inject('SettingsManager')),
58
- __param(2, inject(UCBuilder)),
59
- __metadata("design:paramtypes", [AuthenticationChecker, Object, UCBuilder])
60
- ], AuthenticationCheckerMiddlewareBuilder);
61
- export { AuthenticationCheckerMiddlewareBuilder };
@@ -1,12 +0,0 @@
1
- import type { ErrorRequestHandler } from 'express';
2
- import type { Worker } from '../../../std/index.js';
3
- import { CustomerFacingErrorBuilder } from '../../lib/server/CustomerFacingErrorBuilder.js';
4
- interface Input {
5
- }
6
- type Output = ErrorRequestHandler;
7
- export declare class ErrorMiddlewareBuilder implements Worker<Input, Output> {
8
- private customerFacingErrorBuilder;
9
- constructor(customerFacingErrorBuilder: CustomerFacingErrorBuilder);
10
- exec(_input: Input): Output;
11
- }
12
- export {};