libmodulor 0.10.0 → 0.11.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.
- package/CHANGELOG.md +27 -3
- package/README.md +2 -2
- package/dist/esm/apps/Helper/src/lib/project.js +4 -4
- package/dist/esm/dt/base/TBoolean.js +3 -0
- package/dist/esm/dt/base/TInt.js +3 -0
- package/dist/esm/dt/base/TNumber.js +3 -0
- package/dist/esm/dt/base/TObject.js +3 -0
- package/dist/esm/dt/base/TString.js +3 -0
- package/dist/esm/dt/final/TDateISO8601.js +3 -0
- package/dist/esm/dt/final/TJSONString.js +3 -0
- package/dist/esm/dt/final/TJWT.js +3 -0
- package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.js +8 -14
- package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.js +6 -12
- package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.js +6 -12
- package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.js +39 -45
- package/dist/esm/testing/impl/VitestAppTestSuiteRunner.d.ts +4 -2
- package/dist/esm/testing/impl/VitestAppTestSuiteRunner.js +24 -15
- package/dist/esm/uc/utils/rInput.js +3 -1
- package/dist/esm/utils/index.d.ts +0 -1
- package/dist/esm/utils/index.js +0 -1
- package/dist/esm/utils/ioc/ContainerPrinter.d.ts +5 -2
- package/dist/esm/utils/ioc/ContainerPrinter.js +3 -0
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,39 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v0.11.0 (2025-04-03)
|
|
4
|
+
|
|
5
|
+
**BREAKING**
|
|
6
|
+
|
|
7
|
+
- Remove `ContainerPrinter` : It was using internals of inversify v6. These internals are not present anymore in v7 and the maintainers were not convinced about adding something to list the bindings of a container. In prevision of the upgrade to v7, unfortunately, we remove it to keep things simple
|
|
8
|
+
- Upgrade to express 5 : Unless you extended `NodeExpressServerManager` and did some special stuff, this should be transparent to you. Except bumping the version to `5.1.0`, there should be nothing to do. Otherwise, check the excellent [migration guide](https://expressjs.com/en/guide/migrating-5.html)
|
|
9
|
+
|
|
10
|
+
**Fixed**
|
|
11
|
+
|
|
12
|
+
- Return early when parent data type validation is not ok
|
|
13
|
+
- Adjust the `npx libmodulor CreateProject` command
|
|
14
|
+
|
|
15
|
+
**Misc**
|
|
16
|
+
|
|
17
|
+
- Analyze the web bundle of `examples/supertrader` (`(cd examples/supertrader && yarn build:analyze:web)`)
|
|
18
|
+
- Include data-types tables in `llms.txt`
|
|
19
|
+
- Update UC input field when forcing the value in `rInput` (e.g. boolean set to false or array set to empty)
|
|
20
|
+
|
|
3
21
|
## v0.10.0 (2025-03-28)
|
|
4
22
|
|
|
23
|
+
**Added**
|
|
24
|
+
|
|
25
|
+
- Introduce `UCOutputFieldValueFragment` in `target/react` and `UCOutputFieldValue` in `target/react-(native|web)-pure` to display uc values using the `fmt()` method of each data type. `TBoolean.fmt()` has been adapted to display `✔️` when `true`, instead of `true|false` which are not very user friendly in a UI
|
|
26
|
+
- Introduce `Year` data type
|
|
27
|
+
|
|
28
|
+
**Fixed**
|
|
29
|
+
|
|
30
|
+
- Adjust `fmt` of `THostPort` and `TTimestamp` (they shouldn't be formatted as numbers) and `tName` of `TEmbeddedObject`
|
|
31
|
+
|
|
5
32
|
**Misc**
|
|
6
33
|
|
|
7
34
|
- Update `examples/supertrader` to showcase type semantics and displaying UC output fields according to the definition
|
|
8
35
|
- In `target/react`, make `useUCOR` return a `Part0` always set : you can remove all the now obsolete patterns like `if (listItemsPart0)`, `listItemsPart0 &&`, `listItemsPart0?.`, `listItemsPart0!.` in your React components relying on `useUCOR`. Also expose the function signatures used by `useUC` and `useUCOR` to make them easily passable as children props
|
|
9
|
-
- Introduce `UCOutputFieldValueFragment` in `target/react` and `UCOutputFieldValue` in `target/react-(native|web)-pure` to display uc values using the `fmt()` method of each data type. `TBoolean.fmt()` has been adapted to display `✔️` when `true`, instead of `true|false` which are not very user friendly in a UI
|
|
10
36
|
- List base and final data types directly in the documentation => https://libmodulor.c100k.eu/docs/references/data-types
|
|
11
|
-
- Introduce `Year` data type
|
|
12
|
-
- Adjust `fmt` of `THostPort` and `TTimestamp` (they shouldn't be formatted as numbers) and `tName` of `TEmbeddedObject`
|
|
13
37
|
|
|
14
38
|
## v0.9.0 (2025-03-20)
|
|
15
39
|
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/libmodulor)
|
|
4
4
|
[](https://github.com/c100k/libmodulor/blob/master/LICENSE)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
A TypeScript library to create business oriented applications.
|
|
7
7
|
|
|
8
8
|
> [!WARNING]
|
|
9
9
|
> The project is still in active development. Although already used in pilot projects, it's not suitable for all production scenarios yet.
|
|
@@ -23,4 +23,4 @@ If you think you can help in any way, feel free to contact me (cf. `author` in `
|
|
|
23
23
|
|
|
24
24
|
## ⚖️ License
|
|
25
25
|
|
|
26
|
-
[LGPL-3.0](https://github.com/c100k/libmodulor/blob/v0.
|
|
26
|
+
[LGPL-3.0](https://github.com/c100k/libmodulor/blob/v0.11.0/LICENSE)
|
|
@@ -42,17 +42,17 @@ export const PACKAGE_JSON = (name) => `{
|
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@biomejs/biome": "^1.9.4",
|
|
45
|
-
"@types/node": "^22.13.
|
|
45
|
+
"@types/node": "^22.13.14",
|
|
46
46
|
"@vitest/coverage-v8": "^3.0.9",
|
|
47
47
|
"buffer": "^6.0.3",
|
|
48
48
|
"cookie-parser": "^1.4.7",
|
|
49
|
-
"express": "^
|
|
49
|
+
"express": "^5.1.0",
|
|
50
50
|
"express-fileupload": "^1.5.1",
|
|
51
|
-
"fast-check": "^4.0.
|
|
51
|
+
"fast-check": "^4.0.1",
|
|
52
52
|
"helmet": "^8.1.0",
|
|
53
53
|
"jose": "^6.0.10",
|
|
54
54
|
"typescript": "^5.8.2",
|
|
55
|
-
"vite": "^6.2.
|
|
55
|
+
"vite": "^6.2.3",
|
|
56
56
|
"vitest": "^3.0.9"
|
|
57
57
|
}
|
|
58
58
|
}
|
package/dist/esm/dt/base/TInt.js
CHANGED
|
@@ -45,6 +45,9 @@ export class TInt extends TNumber {
|
|
|
45
45
|
}
|
|
46
46
|
validate() {
|
|
47
47
|
const validation = super.validate();
|
|
48
|
+
if (!validation.isOK()) {
|
|
49
|
+
return validation;
|
|
50
|
+
}
|
|
48
51
|
if (typeof this.raw === 'number' && this.raw.toString().includes('.')) {
|
|
49
52
|
validation.add({
|
|
50
53
|
constraint: 'type',
|
|
@@ -60,6 +60,9 @@ export class TNumber extends TBase {
|
|
|
60
60
|
}
|
|
61
61
|
validate() {
|
|
62
62
|
const validation = super.validate();
|
|
63
|
+
if (!validation.isOK()) {
|
|
64
|
+
return validation;
|
|
65
|
+
}
|
|
63
66
|
if (typeof this.raw !== 'number' || Number.isNaN(this.raw)) {
|
|
64
67
|
validation.add({
|
|
65
68
|
constraint: 'type',
|
|
@@ -39,6 +39,9 @@ export class TObject extends TBase {
|
|
|
39
39
|
}
|
|
40
40
|
validate() {
|
|
41
41
|
const validation = super.validate();
|
|
42
|
+
if (!validation.isOK()) {
|
|
43
|
+
return validation;
|
|
44
|
+
}
|
|
42
45
|
// typeof this.raw is 'object', hence the check for nullity
|
|
43
46
|
if (this.raw === null || typeof this.raw !== 'object') {
|
|
44
47
|
validation.add({
|
package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.js
CHANGED
|
@@ -39,21 +39,15 @@ let AuthenticationCheckerMiddlewareBuilder = class AuthenticationCheckerMiddlewa
|
|
|
39
39
|
auth: null,
|
|
40
40
|
def: ucd,
|
|
41
41
|
});
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
req.auth = auth;
|
|
50
|
-
}
|
|
51
|
-
nextFn();
|
|
52
|
-
}
|
|
53
|
-
catch (err) {
|
|
54
|
-
// Always catch otherwise it breaks the middleware chain and hangs forever
|
|
55
|
-
nextFn(err);
|
|
42
|
+
const { auth } = await this.authenticationChecker.exec({
|
|
43
|
+
authCookie,
|
|
44
|
+
authorizationHeader,
|
|
45
|
+
uc,
|
|
46
|
+
});
|
|
47
|
+
if (auth) {
|
|
48
|
+
req.auth = auth;
|
|
56
49
|
}
|
|
50
|
+
nextFn();
|
|
57
51
|
};
|
|
58
52
|
}
|
|
59
53
|
};
|
package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.js
CHANGED
|
@@ -26,18 +26,12 @@ let PublicApiKeyCheckerMiddlewareBuilder = class PublicApiKeyCheckerMiddlewareBu
|
|
|
26
26
|
}
|
|
27
27
|
exec({ checkType }) {
|
|
28
28
|
return async (req, _res, nextFn) => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
nextFn();
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
// Always catch otherwise it breaks the middleware chain and hangs forever
|
|
39
|
-
nextFn(err);
|
|
40
|
-
}
|
|
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();
|
|
41
35
|
};
|
|
42
36
|
}
|
|
43
37
|
};
|
|
@@ -19,18 +19,12 @@ let RequestCheckerMiddlewareBuilder = class RequestCheckerMiddlewareBuilder {
|
|
|
19
19
|
}
|
|
20
20
|
exec(_input) {
|
|
21
21
|
return (req, _res, nextFn) => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
nextFn();
|
|
29
|
-
}
|
|
30
|
-
catch (err) {
|
|
31
|
-
// Always catch otherwise it breaks the middleware chain and hangs forever
|
|
32
|
-
nextFn(err);
|
|
33
|
-
}
|
|
22
|
+
this.requestChecker.exec({
|
|
23
|
+
secure: req.secure,
|
|
24
|
+
url: req.url,
|
|
25
|
+
xForwardedProtoHeader: req.get('X-Forwarded-Proto'),
|
|
26
|
+
});
|
|
27
|
+
nextFn();
|
|
34
28
|
};
|
|
35
29
|
}
|
|
36
30
|
};
|
|
@@ -29,56 +29,50 @@ let RequestHandlerMiddlewareBuilder = class RequestHandlerMiddlewareBuilder {
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
exec({ appManifest, envelope, ucd, ucManager, }) {
|
|
32
|
-
return async (req, res
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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;
|
|
41
50
|
}
|
|
42
|
-
this
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
await this.handleClearAuth(res);
|
|
59
|
-
break;
|
|
60
|
-
case UCOutputSideEffectType.REDIRECT:
|
|
61
|
-
await this.handleRedirect(res, item);
|
|
62
|
-
return;
|
|
63
|
-
case UCOutputSideEffectType.SET_AUTH:
|
|
64
|
-
await this.handleSetAuth(res, item);
|
|
65
|
-
break;
|
|
66
|
-
default:
|
|
67
|
-
((_) => { })(type);
|
|
68
|
-
}
|
|
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);
|
|
69
67
|
}
|
|
70
68
|
}
|
|
71
|
-
if (!output) {
|
|
72
|
-
res.status(204).send();
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const transform = ext?.http?.transform;
|
|
76
|
-
res.send(output && transform ? transform(output) : output);
|
|
77
69
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
70
|
+
if (!output) {
|
|
71
|
+
res.status(204).send();
|
|
72
|
+
return;
|
|
81
73
|
}
|
|
74
|
+
const transform = ext?.http?.transform;
|
|
75
|
+
res.send(output && transform ? transform(output) : output);
|
|
82
76
|
};
|
|
83
77
|
}
|
|
84
78
|
fillUCFromReq(req, envelope, uc) {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { FilePath } from '../../dt/index.js';
|
|
2
|
-
import type { FSManager } from '../../std/index.js';
|
|
2
|
+
import type { FSManager, Logger, ShellCommandExecutor } from '../../std/index.js';
|
|
3
3
|
import type { AppTestSuiteRunner, Input } from '../workers/AppTestSuiteRunner.js';
|
|
4
4
|
export declare class VitestAppTestSuiteRunner implements AppTestSuiteRunner {
|
|
5
5
|
private fsManager;
|
|
6
|
-
|
|
6
|
+
private logger;
|
|
7
|
+
private shellCommandExecutor;
|
|
8
|
+
constructor(fsManager: FSManager, logger: Logger, shellCommandExecutor: ShellCommandExecutor);
|
|
7
9
|
exec({ appPath, skipCoverage, updateSnapshots, }: Input): Promise<void>;
|
|
8
10
|
coverageReportEntrypointPath(appPath: FilePath): Promise<FilePath>;
|
|
9
11
|
private coverageReportPath;
|
|
@@ -11,29 +11,36 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
13
|
import { inject, injectable } from 'inversify';
|
|
14
|
-
import { createVitest } from 'vitest/node';
|
|
15
14
|
import { APP_TEST_DIR_NAME, APP_TEST_REPORTS_DIR_NAME, } from '../../convention.js';
|
|
16
15
|
let VitestAppTestSuiteRunner = class VitestAppTestSuiteRunner {
|
|
17
16
|
fsManager;
|
|
18
|
-
|
|
17
|
+
logger;
|
|
18
|
+
shellCommandExecutor;
|
|
19
|
+
constructor(fsManager, logger, shellCommandExecutor) {
|
|
19
20
|
this.fsManager = fsManager;
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
this.shellCommandExecutor = shellCommandExecutor;
|
|
20
23
|
}
|
|
21
24
|
async exec({ appPath, skipCoverage, updateSnapshots, }) {
|
|
22
25
|
const testPath = this.fsManager.path(appPath, APP_TEST_DIR_NAME);
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
const args = [
|
|
27
|
+
'run',
|
|
28
|
+
'--dir',
|
|
29
|
+
'./examples/apps/Spotify',
|
|
30
|
+
];
|
|
31
|
+
if (!skipCoverage) {
|
|
32
|
+
args.push('--coverage.enabled', '--coverage.exclude', testPath, '--coverage.include', appPath, '--coverage.reportsDirectory', this.coverageReportPath(appPath));
|
|
33
|
+
}
|
|
34
|
+
if (updateSnapshots) {
|
|
35
|
+
args.push('--update');
|
|
36
|
+
}
|
|
37
|
+
const output = await this.shellCommandExecutor.exec({
|
|
38
|
+
bin: './node_modules/.bin/vitest',
|
|
39
|
+
opts: {
|
|
40
|
+
args,
|
|
31
41
|
},
|
|
32
|
-
dir: appPath,
|
|
33
|
-
update: updateSnapshots,
|
|
34
|
-
watch: false,
|
|
35
42
|
});
|
|
36
|
-
|
|
43
|
+
this.logger.info(output);
|
|
37
44
|
}
|
|
38
45
|
async coverageReportEntrypointPath(appPath) {
|
|
39
46
|
return this.fsManager.path(this.coverageReportPath(appPath), 'index.html');
|
|
@@ -46,6 +53,8 @@ let VitestAppTestSuiteRunner = class VitestAppTestSuiteRunner {
|
|
|
46
53
|
VitestAppTestSuiteRunner = __decorate([
|
|
47
54
|
injectable(),
|
|
48
55
|
__param(0, inject('FSManager')),
|
|
49
|
-
|
|
56
|
+
__param(1, inject('Logger')),
|
|
57
|
+
__param(2, inject('ShellCommandExecutor')),
|
|
58
|
+
__metadata("design:paramtypes", [Object, Object, Object])
|
|
50
59
|
], VitestAppTestSuiteRunner);
|
|
51
60
|
export { VitestAppTestSuiteRunner };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TBoolean } from '../../dt/index.js';
|
|
2
|
-
import { ucifIsMandatory, ucifRepeatability } from '../input-field.js';
|
|
2
|
+
import { UCInputFieldChangeOperator, ucifIsMandatory, ucifRepeatability, } from '../input-field.js';
|
|
3
3
|
const DEFAULT_OPTS = {
|
|
4
4
|
forceArrayAsEmpty: false,
|
|
5
5
|
forceBooleanAsFalse: true,
|
|
@@ -24,12 +24,14 @@ export function rInput(uc, opts) {
|
|
|
24
24
|
ucifIsMandatory(f.def) &&
|
|
25
25
|
(value === null || value === undefined)) {
|
|
26
26
|
value = false;
|
|
27
|
+
f.setValue(UCInputFieldChangeOperator.SET, value);
|
|
27
28
|
}
|
|
28
29
|
const [isRepeatable] = ucifRepeatability(f.def);
|
|
29
30
|
if (forceArrayAsEmpty &&
|
|
30
31
|
isRepeatable &&
|
|
31
32
|
(value === null || value === undefined)) {
|
|
32
33
|
value = [];
|
|
34
|
+
f.setValue(UCInputFieldChangeOperator.SET, value);
|
|
33
35
|
}
|
|
34
36
|
if (!ignoreUndefined || (ignoreUndefined && value !== undefined)) {
|
|
35
37
|
// Useful when we get the input before persisting for example.
|
|
@@ -6,7 +6,6 @@ export { HTTPRequestBuilder } from './http/HTTPRequestBuilder.js';
|
|
|
6
6
|
export type { HTTPDataEnvelope, HTTPReqData } from './http/types.js';
|
|
7
7
|
export { bindProvider } from './ioc/bindProvider.js';
|
|
8
8
|
export { CONTAINER_OPTS } from './ioc/container.js';
|
|
9
|
-
export { ContainerPrinter } from './ioc/ContainerPrinter.js';
|
|
10
9
|
export type { Class } from './ioc/types.js';
|
|
11
10
|
export { fmt as fmtNumber } from './numbers/fmt.js';
|
|
12
11
|
export { type CoreUnit, type SquareUnit, type SquareableUnit, type Unit, baseFromSquareUnit, isSquareUnit, } from './numbers/units.js';
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -2,7 +2,6 @@ export { sleep } from './async/sleep.js';
|
|
|
2
2
|
export { HTTPRequestBuilder } from './http/HTTPRequestBuilder.js';
|
|
3
3
|
export { bindProvider } from './ioc/bindProvider.js';
|
|
4
4
|
export { CONTAINER_OPTS } from './ioc/container.js';
|
|
5
|
-
export { ContainerPrinter } from './ioc/ContainerPrinter.js';
|
|
6
5
|
export { fmt as fmtNumber } from './numbers/fmt.js';
|
|
7
6
|
export { baseFromSquareUnit, isSquareUnit, } from './numbers/units.js';
|
|
8
7
|
export { capitalize, isCapitalized } from './strings/capitalize.js';
|
|
@@ -3,10 +3,13 @@ import type { Logger, Worker } from '../../std/index.js';
|
|
|
3
3
|
interface Input {
|
|
4
4
|
container: Container;
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
interface Output {
|
|
7
|
+
bindingLines: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare class ContainerPrinter implements Worker<Input, Promise<Output>> {
|
|
7
10
|
private logger;
|
|
8
11
|
constructor(logger: Logger);
|
|
9
|
-
exec({ container }: Input): Promise<
|
|
12
|
+
exec({ container }: Input): Promise<Output>;
|
|
10
13
|
private symToString;
|
|
11
14
|
}
|
|
12
15
|
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "libmodulor",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "0.
|
|
3
|
+
"description": "A TypeScript library to create business oriented applications",
|
|
4
|
+
"version": "0.11.0",
|
|
5
5
|
"license": "LGPL-3.0",
|
|
6
6
|
"author": "Chafik H'nini <chafik.hnini@gmail.com>",
|
|
7
7
|
"homepage": "https://github.com/c100k/libmodulor#readme",
|
|
@@ -76,26 +76,26 @@
|
|
|
76
76
|
},
|
|
77
77
|
"peerDependencies": {
|
|
78
78
|
"@hono/node-server": "^1.14.0",
|
|
79
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
80
|
-
"@stricli/core": "^1.1.
|
|
79
|
+
"@modelcontextprotocol/sdk": "^1.8.0",
|
|
80
|
+
"@stricli/core": "^1.1.2",
|
|
81
81
|
"buffer": "^6.0.3",
|
|
82
82
|
"cookie-parser": "^1.4.7",
|
|
83
|
-
"express": "^
|
|
83
|
+
"express": "^5.1.0",
|
|
84
84
|
"express-fileupload": "^1.5.1",
|
|
85
|
-
"fast-check": "^4.0.
|
|
85
|
+
"fast-check": "^4.0.1",
|
|
86
86
|
"helmet": "^8.1.0",
|
|
87
87
|
"hono": "^4.7.5",
|
|
88
88
|
"inversify": "^6.2.2",
|
|
89
89
|
"jose": "^6.0.10",
|
|
90
90
|
"knex": "^3.1.0",
|
|
91
91
|
"pg": "^8.14.1",
|
|
92
|
-
"react": "^19.
|
|
93
|
-
"react-dom": "^19.
|
|
92
|
+
"react": "^19.1.0",
|
|
93
|
+
"react-dom": "^19.1.0",
|
|
94
94
|
"react-native": "^0.78.1",
|
|
95
95
|
"reflect-metadata": "^0.2.2",
|
|
96
96
|
"sqlite3": "^5.1.7",
|
|
97
97
|
"typescript": "^5.8.2",
|
|
98
|
-
"vite": "^6.2.
|
|
98
|
+
"vite": "^6.2.3",
|
|
99
99
|
"vitest": "^3.0.9"
|
|
100
100
|
},
|
|
101
101
|
"peerDependenciesMeta": {
|