libmodulor 0.28.0 → 0.30.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 +57 -0
- package/README.md +3 -3
- package/dist/esm/apps/Helper/src/lib/layers/product.js +1 -1
- package/dist/esm/apps/Helper/src/lib/layers/project.js +7 -7
- package/dist/esm/apps/Helper/src/lib/layers/target.js +27 -11
- package/dist/esm/convention.d.ts +2 -0
- package/dist/esm/convention.js +1 -0
- package/dist/esm/dt/base/TBase.d.ts +2 -0
- package/dist/esm/dt/base/TBase.js +5 -0
- package/dist/esm/dt/base/TBoolean.d.ts +2 -0
- package/dist/esm/dt/base/TBoolean.js +3 -0
- package/dist/esm/dt/base/TInt.d.ts +2 -0
- package/dist/esm/dt/base/TInt.js +3 -0
- package/dist/esm/dt/base/TNumber.d.ts +2 -0
- package/dist/esm/dt/base/TNumber.js +3 -0
- package/dist/esm/dt/base/TObject.d.ts +2 -0
- package/dist/esm/dt/base/TObject.js +37 -0
- package/dist/esm/dt/final/TApiKey.d.ts +2 -0
- package/dist/esm/dt/final/TApiKey.js +3 -0
- package/dist/esm/dt/final/TDateISO8601.d.ts +2 -0
- package/dist/esm/dt/final/TDateISO8601.js +3 -0
- package/dist/esm/dt/final/TDomainName.d.ts +2 -0
- package/dist/esm/dt/final/TDomainName.js +3 -0
- package/dist/esm/dt/final/TEmail.d.ts +2 -0
- package/dist/esm/dt/final/TEmail.js +3 -0
- package/dist/esm/dt/final/TEncryptionKey.d.ts +2 -0
- package/dist/esm/dt/final/TEncryptionKey.js +3 -0
- package/dist/esm/dt/final/TFile.d.ts +2 -0
- package/dist/esm/dt/final/TFile.js +3 -0
- package/dist/esm/dt/final/TIPv4.d.ts +2 -0
- package/dist/esm/dt/final/TIPv4.js +3 -0
- package/dist/esm/dt/final/TIPv6.d.ts +2 -0
- package/dist/esm/dt/final/TIPv6.js +3 -0
- package/dist/esm/dt/final/TJWT.d.ts +2 -0
- package/dist/esm/dt/final/TJWT.js +3 -0
- package/dist/esm/dt/final/TPassword.d.ts +2 -0
- package/dist/esm/dt/final/TPassword.js +3 -0
- package/dist/esm/dt/final/TSSHPrivateKey.d.ts +2 -0
- package/dist/esm/dt/final/TSSHPrivateKey.js +3 -0
- package/dist/esm/dt/final/TTime.d.ts +2 -0
- package/dist/esm/dt/final/TTime.js +3 -0
- package/dist/esm/dt/final/TURL.d.ts +2 -0
- package/dist/esm/dt/final/TURL.js +3 -0
- package/dist/esm/dt/index.d.ts +1 -0
- package/dist/esm/dt/targets/json-schema.d.ts +36 -0
- package/dist/esm/error/funcs.d.ts +4 -0
- package/dist/esm/error/funcs.js +5 -1
- package/dist/esm/error/index.d.ts +1 -1
- package/dist/esm/error/index.js +1 -1
- package/dist/esm/i18n/locales/de.js +2 -0
- package/dist/esm/i18n/locales/en.js +2 -0
- package/dist/esm/i18n/locales/es.js +2 -0
- package/dist/esm/i18n/locales/fr.js +2 -0
- package/dist/esm/i18n/types.d.ts +1 -1
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.node-express.d.ts +2 -0
- package/dist/esm/index.node-express.js +1 -0
- package/dist/esm/index.node-hono.d.ts +2 -0
- package/dist/esm/index.node-hono.js +1 -0
- package/dist/esm/index.node-mcp-express.d.ts +3 -0
- package/dist/esm/index.node-mcp-express.js +2 -0
- package/dist/esm/index.node-mcp-hono.d.ts +3 -0
- package/dist/esm/index.node-mcp-hono.js +2 -0
- package/dist/esm/index.node-mcp.d.ts +3 -1
- package/dist/esm/index.node-mcp.js +3 -1
- package/dist/esm/product/manifest.d.ts +2 -0
- package/dist/esm/products/Helper/i18n.d.ts +2 -0
- package/dist/esm/std/impl/SimpleMapI18nManager.d.ts +1 -1
- package/dist/esm/std/impl/SimpleMapI18nManager.js +4 -2
- package/dist/esm/std/lib/settings.js +4 -5
- package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.d.ts +8 -2
- package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.js +20 -9
- package/dist/esm/target/index.d.ts +2 -1
- package/dist/esm/target/index.js +1 -1
- package/dist/esm/target/lib/client/AuthDataStore.d.ts +5 -0
- package/dist/esm/target/lib/client/AuthDataStore.js +1 -0
- package/dist/esm/target/lib/client/impl/InMemoryAuthDataStore.d.ts +7 -0
- package/dist/esm/target/lib/client/impl/InMemoryAuthDataStore.js +20 -0
- package/dist/esm/target/lib/client/impl/MixedServerClientManager.d.ts +15 -0
- package/dist/esm/target/lib/client/impl/MixedServerClientManager.js +44 -0
- package/dist/esm/target/lib/json-schema/error.d.ts +3 -0
- package/dist/esm/target/lib/json-schema/error.js +14 -0
- package/dist/esm/target/lib/json-schema/input.d.ts +16 -0
- package/dist/esm/target/lib/json-schema/input.js +67 -0
- package/dist/esm/target/lib/json-schema/output.d.ts +19 -0
- package/dist/esm/target/lib/json-schema/output.js +128 -0
- package/dist/esm/target/lib/manifest.d.ts +32 -1
- package/dist/esm/target/lib/manifest.js +22 -1
- package/dist/esm/target/lib/mcp-server/MCPServerRequestHandler.d.ts +16 -0
- package/dist/esm/target/lib/mcp-server/MCPServerRequestHandler.js +54 -0
- package/dist/esm/target/lib/mcp-server/consts.d.ts +1 -0
- package/dist/esm/target/lib/mcp-server/consts.js +1 -0
- package/dist/esm/target/lib/mcp-server/funcs.d.ts +13 -0
- package/dist/esm/target/lib/mcp-server/funcs.js +84 -0
- package/dist/esm/target/lib/mcp-server/http/MCPHTTPRequestHandlerBuilder.d.ts +14 -0
- package/dist/esm/target/lib/mcp-server/http/MCPHTTPRequestHandlerBuilder.js +1 -0
- package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressFakeRequestHandlerBuilder.d.ts +5 -0
- package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressFakeRequestHandlerBuilder.js +18 -0
- package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressProtocolRequestHandlerBuilder.d.ts +15 -0
- package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressProtocolRequestHandlerBuilder.js +88 -0
- package/dist/esm/target/lib/mcp-server/http/express/types.d.ts +3 -0
- package/dist/esm/target/lib/mcp-server/http/express/types.js +1 -0
- package/dist/esm/target/lib/mcp-server/http/funcs.d.ts +6 -0
- package/dist/esm/target/lib/mcp-server/http/funcs.js +50 -0
- package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoFakeRequestHandlerBuilder.d.ts +5 -0
- package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoFakeRequestHandlerBuilder.js +18 -0
- package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoProtocolRequestHandlerBuilder.d.ts +15 -0
- package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoProtocolRequestHandlerBuilder.js +88 -0
- package/dist/esm/target/lib/mcp-server/http/hono/types.d.ts +3 -0
- package/dist/esm/target/lib/mcp-server/http/hono/types.js +1 -0
- package/dist/esm/target/lib/mcp-server/stdio/MCPStdioRequestHandler.d.ts +31 -0
- package/dist/esm/target/lib/mcp-server/stdio/MCPStdioRequestHandler.js +108 -0
- package/dist/esm/target/lib/mcp-server/stdio/MCPStdioUCClientConfirmManager.d.ts +7 -0
- package/dist/esm/target/lib/mcp-server/stdio/MCPStdioUCClientConfirmManager.js +36 -0
- package/dist/esm/target/lib/mcp-server/stdio/consts.d.ts +2 -0
- package/dist/esm/target/lib/mcp-server/stdio/consts.js +3 -0
- package/dist/esm/target/lib/mcp-server/stdio/funcs.d.ts +2 -0
- package/dist/esm/target/lib/mcp-server/stdio/funcs.js +10 -0
- package/dist/esm/target/lib/mcp-server/stdio/input.d.ts +10 -0
- package/dist/esm/target/lib/mcp-server/stdio/input.js +15 -0
- package/dist/esm/target/lib/mcp-server/types.d.ts +2 -0
- package/dist/esm/target/lib/mcp-server/types.js +1 -0
- package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.d.ts +25 -0
- package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.js +135 -0
- package/dist/esm/target/lib/openapi/funcs.d.ts +11 -0
- package/dist/esm/target/lib/openapi/funcs.js +148 -0
- package/dist/esm/target/lib/openapi/types.d.ts +98 -0
- package/dist/esm/target/lib/openapi/types.js +1 -0
- package/dist/esm/target/lib/rn/input.d.ts +3 -0
- package/dist/esm/target/lib/server/AuthCookieCreator.d.ts +2 -1
- package/dist/esm/target/lib/server/ServerBooter.d.ts +4 -2
- package/dist/esm/target/lib/server/ServerBooter.js +44 -11
- package/dist/esm/target/lib/server/ServerManager.d.ts +29 -9
- package/dist/esm/target/lib/server/ServerRequestHandler.d.ts +10 -6
- package/dist/esm/target/lib/server/ServerRequestHandler.js +35 -25
- package/dist/esm/target/lib/server/consts.d.ts +4 -0
- package/dist/esm/target/lib/server/consts.js +26 -0
- package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.d.ts +15 -0
- package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.js +55 -0
- package/dist/esm/target/lib/server-express/funcs.d.ts +2 -1
- package/dist/esm/target/lib/server-express/funcs.js +6 -5
- package/dist/esm/target/lib/server-hono/CORSMiddlewareBuilder.d.ts +14 -0
- package/dist/esm/target/lib/server-hono/CORSMiddlewareBuilder.js +46 -0
- package/dist/esm/target/lib/server-hono/funcs.d.ts +2 -1
- package/dist/esm/target/lib/server-hono/funcs.js +6 -3
- package/dist/esm/target/lib/shared.d.ts +5 -0
- package/dist/esm/target/lib/shared.js +3 -1
- package/dist/esm/target/nextjs-server/NextJSServerManager.d.ts +5 -1
- package/dist/esm/target/nextjs-server/NextJSServerManager.js +6 -0
- package/dist/esm/target/node-express-server/NodeExpressServerManager.d.ts +12 -4
- package/dist/esm/target/node-express-server/NodeExpressServerManager.js +34 -15
- package/dist/esm/target/node-hono-server/NodeHonoServerManager.d.ts +11 -3
- package/dist/esm/target/node-hono-server/NodeHonoServerManager.js +31 -12
- package/dist/esm/target/{node-mcp-server/NodeLocalStdioMCPServerManager.d.ts → node-mcp-server-stdio/NodeMCPStdioServerManager.d.ts} +12 -21
- package/dist/esm/target/node-mcp-server-stdio/NodeMCPStdioServerManager.js +108 -0
- package/dist/esm/testing/impl/newNodeAppTester.js +5 -0
- package/dist/esm/uc/UC.d.ts +2 -0
- package/dist/esm/uc/UC.js +16 -1
- package/dist/esm/uc/cardinality.d.ts +7 -0
- package/dist/esm/uc/cardinality.js +14 -0
- package/dist/esm/uc/examples.d.ts +2 -0
- package/dist/esm/uc/examples.js +12 -0
- package/dist/esm/uc/helpers/UCOutputReader.d.ts +2 -2
- package/dist/esm/uc/helpers/UCOutputReader.js +2 -2
- package/dist/esm/uc/index.d.ts +2 -0
- package/dist/esm/uc/index.js +2 -0
- package/dist/esm/uc/input-field.d.ts +3 -6
- package/dist/esm/uc/input-field.js +5 -21
- package/dist/esm/uc/metadata.d.ts +7 -0
- package/dist/esm/uc/metadata.js +10 -0
- package/dist/esm/uc/opi.d.ts +3 -1
- package/dist/esm/uc/opi.js +4 -1
- package/dist/esm/uc/output-field.d.ts +14 -1
- package/dist/esm/uc/output-field.js +11 -1
- package/dist/esm/uc/utils/ucHTTPContract.js +1 -1
- package/dist/esm/utils/bundling/funcs.js +1 -1
- package/dist/esm/utils/bundling/vite/plugin.d.ts +1 -1
- package/dist/esm/utils/http/types.d.ts +5 -0
- package/dist/esm/utils/index.d.ts +2 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/streams/funcs.d.ts +2 -0
- package/dist/esm/utils/streams/funcs.js +10 -0
- package/package.json +25 -14
- package/dist/esm/target/node-mcp-server/NodeLocalStdioMCPServerManager.js +0 -183
- package/dist/esm/target/node-mcp-server/funcs.d.ts +0 -7
- package/dist/esm/target/node-mcp-server/funcs.js +0 -45
- package/dist/esm/target/node-mcp-server/types.d.ts +0 -19
- /package/dist/esm/{target/node-mcp-server/types.js → dt/targets/json-schema.js} +0 -0
|
@@ -19,27 +19,32 @@ import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBui
|
|
|
19
19
|
import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
|
|
20
20
|
import { ServerRequestHandler } from '../lib/server/ServerRequestHandler.js';
|
|
21
21
|
import { ServerSSLCertLoader } from '../lib/server/ServerSSLCertLoader.js';
|
|
22
|
+
import { CORSMiddlewareBuilder } from '../lib/server-express/CORSMiddlewareBuilder.js';
|
|
22
23
|
import { buildHandler, init, mountHandler, postInit, } from '../lib/server-express/funcs.js';
|
|
23
24
|
import { HelmetMiddlewareBuilder } from '../lib/server-express/HelmetMiddlewareBuilder.js';
|
|
24
25
|
import { listen, stop } from '../lib/server-node/funcs.js';
|
|
25
26
|
let NodeExpressServerManager = class NodeExpressServerManager {
|
|
27
|
+
corsMiddlewareBuilder;
|
|
26
28
|
customerFacingErrorBuilder;
|
|
27
29
|
entrypointsBuilder;
|
|
28
30
|
environmentManager;
|
|
29
|
-
|
|
31
|
+
helmetMiddlewareBuilder;
|
|
30
32
|
logger;
|
|
33
|
+
mcpHTTPRequestHandlerBuilder;
|
|
31
34
|
serverRequestHandler;
|
|
32
35
|
serverSSLCertLoader;
|
|
33
36
|
settingsManager;
|
|
34
37
|
ucManager;
|
|
35
38
|
runtime;
|
|
36
39
|
server;
|
|
37
|
-
constructor(customerFacingErrorBuilder, entrypointsBuilder, environmentManager,
|
|
40
|
+
constructor(corsMiddlewareBuilder, customerFacingErrorBuilder, entrypointsBuilder, environmentManager, helmetMiddlewareBuilder, logger, mcpHTTPRequestHandlerBuilder, serverRequestHandler, serverSSLCertLoader, settingsManager, ucManager) {
|
|
41
|
+
this.corsMiddlewareBuilder = corsMiddlewareBuilder;
|
|
38
42
|
this.customerFacingErrorBuilder = customerFacingErrorBuilder;
|
|
39
43
|
this.entrypointsBuilder = entrypointsBuilder;
|
|
40
44
|
this.environmentManager = environmentManager;
|
|
41
|
-
this.
|
|
45
|
+
this.helmetMiddlewareBuilder = helmetMiddlewareBuilder;
|
|
42
46
|
this.logger = logger;
|
|
47
|
+
this.mcpHTTPRequestHandlerBuilder = mcpHTTPRequestHandlerBuilder;
|
|
43
48
|
this.serverRequestHandler = serverRequestHandler;
|
|
44
49
|
this.serverSSLCertLoader = serverSSLCertLoader;
|
|
45
50
|
this.settingsManager = settingsManager;
|
|
@@ -64,7 +69,7 @@ let NodeExpressServerManager = class NodeExpressServerManager {
|
|
|
64
69
|
this.ucManager = ucManager;
|
|
65
70
|
}
|
|
66
71
|
async init() {
|
|
67
|
-
this.runtime = init(this.
|
|
72
|
+
this.runtime = init(this.corsMiddlewareBuilder, this.helmetMiddlewareBuilder, this.s().logger_level, this.s().server_tmp_path);
|
|
68
73
|
await this.createServer();
|
|
69
74
|
}
|
|
70
75
|
initSync() {
|
|
@@ -76,6 +81,17 @@ let NodeExpressServerManager = class NodeExpressServerManager {
|
|
|
76
81
|
mountSync(appManifest, ucd, contract) {
|
|
77
82
|
this.mountCommon(appManifest, ucd, contract);
|
|
78
83
|
}
|
|
84
|
+
async mountMCP(ucs, at) {
|
|
85
|
+
this.runtime.post(at, this.mcpHTTPRequestHandlerBuilder.exec({
|
|
86
|
+
ucManager: this.ucManager,
|
|
87
|
+
ucs,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
async mountOpenAPISpec(spec, at) {
|
|
91
|
+
this.runtime.get(at, (_req, res) => {
|
|
92
|
+
res.send(spec);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
79
95
|
async mountStaticDir(dirPath) {
|
|
80
96
|
this.runtime.use(express.static(dirPath));
|
|
81
97
|
}
|
|
@@ -105,17 +121,20 @@ let NodeExpressServerManager = class NodeExpressServerManager {
|
|
|
105
121
|
};
|
|
106
122
|
NodeExpressServerManager = __decorate([
|
|
107
123
|
injectable(),
|
|
108
|
-
__param(0, inject(
|
|
109
|
-
__param(1, inject(
|
|
110
|
-
__param(2, inject(
|
|
111
|
-
__param(3, inject(
|
|
112
|
-
__param(4, inject(
|
|
113
|
-
__param(5, inject(
|
|
114
|
-
__param(6, inject(
|
|
115
|
-
__param(7, inject(
|
|
116
|
-
__param(8, inject(
|
|
117
|
-
|
|
118
|
-
|
|
124
|
+
__param(0, inject(CORSMiddlewareBuilder)),
|
|
125
|
+
__param(1, inject(CustomerFacingErrorBuilder)),
|
|
126
|
+
__param(2, inject(EntrypointsBuilder)),
|
|
127
|
+
__param(3, inject('EnvironmentManager')),
|
|
128
|
+
__param(4, inject(HelmetMiddlewareBuilder)),
|
|
129
|
+
__param(5, inject('Logger')),
|
|
130
|
+
__param(6, inject('MCPHTTPRequestHandlerBuilder')),
|
|
131
|
+
__param(7, inject(ServerRequestHandler)),
|
|
132
|
+
__param(8, inject(ServerSSLCertLoader)),
|
|
133
|
+
__param(9, inject('SettingsManager')),
|
|
134
|
+
__param(10, inject('UCManager')),
|
|
135
|
+
__metadata("design:paramtypes", [CORSMiddlewareBuilder,
|
|
136
|
+
CustomerFacingErrorBuilder,
|
|
137
|
+
EntrypointsBuilder, Object, HelmetMiddlewareBuilder, Object, Object, ServerRequestHandler,
|
|
119
138
|
ServerSSLCertLoader, Object, Object])
|
|
120
139
|
], NodeExpressServerManager);
|
|
121
140
|
export { NodeExpressServerManager };
|
|
@@ -1,27 +1,33 @@
|
|
|
1
|
-
import type { Hono } from 'hono';
|
|
1
|
+
import type { Hono, MiddlewareHandler } from 'hono';
|
|
2
2
|
import type { AppManifest } from '../../app/index.js';
|
|
3
|
-
import type { DirPath } from '../../dt/index.js';
|
|
3
|
+
import type { DirPath, URLPath } from '../../dt/index.js';
|
|
4
|
+
import type { ProductUCsLoaderOutput } from '../../product/index.js';
|
|
4
5
|
import type { Configurable, EnvironmentManager, Logger, SettingsManager } from '../../std/index.js';
|
|
5
6
|
import type { UCDef, UCHTTPContract, UCInput, UCManager, UCOPIBase } from '../../uc/index.js';
|
|
7
|
+
import type { MCPHTTPRequestHandlerBuilder } from '../lib/mcp-server/http/MCPHTTPRequestHandlerBuilder.js';
|
|
8
|
+
import type { OpenAPISpec } from '../lib/openapi/types.js';
|
|
6
9
|
import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBuilder.js';
|
|
7
10
|
import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
|
|
8
11
|
import type { ServerManager } from '../lib/server/ServerManager.js';
|
|
9
12
|
import { ServerRequestHandler } from '../lib/server/ServerRequestHandler.js';
|
|
10
13
|
import { ServerSSLCertLoader } from '../lib/server/ServerSSLCertLoader.js';
|
|
14
|
+
import { CORSMiddlewareBuilder } from '../lib/server-hono/CORSMiddlewareBuilder.js';
|
|
11
15
|
import type { ListenSettings, StopSettings } from '../lib/server-node/types.js';
|
|
12
16
|
type S = ListenSettings & StopSettings;
|
|
13
17
|
export declare class NodeHonoServerManager implements Configurable<S>, ServerManager {
|
|
18
|
+
private corsMiddlewareBuilder;
|
|
14
19
|
private customerFacingErrorBuilder;
|
|
15
20
|
private entrypointsBuilder;
|
|
16
21
|
protected environmentManager: EnvironmentManager;
|
|
17
22
|
private logger;
|
|
23
|
+
private mcpHTTPRequestHandlerBuilder;
|
|
18
24
|
private serverRequestHandler;
|
|
19
25
|
private serverSSLCertLoader;
|
|
20
26
|
private settingsManager;
|
|
21
27
|
private ucManager;
|
|
22
28
|
protected runtime: Hono;
|
|
23
29
|
private server;
|
|
24
|
-
constructor(customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, logger: Logger, serverRequestHandler: ServerRequestHandler, serverSSLCertLoader: ServerSSLCertLoader, settingsManager: SettingsManager<S>, ucManager: UCManager);
|
|
30
|
+
constructor(corsMiddlewareBuilder: CORSMiddlewareBuilder, customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, logger: Logger, mcpHTTPRequestHandlerBuilder: MCPHTTPRequestHandlerBuilder<MiddlewareHandler>, serverRequestHandler: ServerRequestHandler, serverSSLCertLoader: ServerSSLCertLoader, settingsManager: SettingsManager<S>, ucManager: UCManager);
|
|
25
31
|
s(): S;
|
|
26
32
|
getRuntime(): Hono;
|
|
27
33
|
overrideUCManager(ucManager: UCManager): void;
|
|
@@ -29,6 +35,8 @@ export declare class NodeHonoServerManager implements Configurable<S>, ServerMan
|
|
|
29
35
|
initSync(): void;
|
|
30
36
|
mount<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): Promise<void>;
|
|
31
37
|
mountSync<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): void;
|
|
38
|
+
mountMCP(ucs: ProductUCsLoaderOutput, at: URLPath): Promise<void>;
|
|
39
|
+
mountOpenAPISpec(spec: OpenAPISpec, at: URLPath): Promise<void>;
|
|
32
40
|
mountStaticDir(dirPath: DirPath): Promise<void>;
|
|
33
41
|
start(): Promise<void>;
|
|
34
42
|
stop(): Promise<void>;
|
|
@@ -20,24 +20,29 @@ import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBui
|
|
|
20
20
|
import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
|
|
21
21
|
import { ServerRequestHandler } from '../lib/server/ServerRequestHandler.js';
|
|
22
22
|
import { ServerSSLCertLoader } from '../lib/server/ServerSSLCertLoader.js';
|
|
23
|
+
import { CORSMiddlewareBuilder } from '../lib/server-hono/CORSMiddlewareBuilder.js';
|
|
23
24
|
import { buildHandler, init, mountHandler } from '../lib/server-hono/funcs.js';
|
|
24
25
|
import { listen, stop } from '../lib/server-node/funcs.js';
|
|
25
26
|
let NodeHonoServerManager = class NodeHonoServerManager {
|
|
27
|
+
corsMiddlewareBuilder;
|
|
26
28
|
customerFacingErrorBuilder;
|
|
27
29
|
entrypointsBuilder;
|
|
28
30
|
environmentManager;
|
|
29
31
|
logger;
|
|
32
|
+
mcpHTTPRequestHandlerBuilder;
|
|
30
33
|
serverRequestHandler;
|
|
31
34
|
serverSSLCertLoader;
|
|
32
35
|
settingsManager;
|
|
33
36
|
ucManager;
|
|
34
37
|
runtime;
|
|
35
38
|
server;
|
|
36
|
-
constructor(customerFacingErrorBuilder, entrypointsBuilder, environmentManager, logger, serverRequestHandler, serverSSLCertLoader, settingsManager, ucManager) {
|
|
39
|
+
constructor(corsMiddlewareBuilder, customerFacingErrorBuilder, entrypointsBuilder, environmentManager, logger, mcpHTTPRequestHandlerBuilder, serverRequestHandler, serverSSLCertLoader, settingsManager, ucManager) {
|
|
40
|
+
this.corsMiddlewareBuilder = corsMiddlewareBuilder;
|
|
37
41
|
this.customerFacingErrorBuilder = customerFacingErrorBuilder;
|
|
38
42
|
this.entrypointsBuilder = entrypointsBuilder;
|
|
39
43
|
this.environmentManager = environmentManager;
|
|
40
44
|
this.logger = logger;
|
|
45
|
+
this.mcpHTTPRequestHandlerBuilder = mcpHTTPRequestHandlerBuilder;
|
|
41
46
|
this.serverRequestHandler = serverRequestHandler;
|
|
42
47
|
this.serverSSLCertLoader = serverSSLCertLoader;
|
|
43
48
|
this.settingsManager = settingsManager;
|
|
@@ -60,7 +65,7 @@ let NodeHonoServerManager = class NodeHonoServerManager {
|
|
|
60
65
|
this.ucManager = ucManager;
|
|
61
66
|
}
|
|
62
67
|
async init() {
|
|
63
|
-
this.runtime = init(this.customerFacingErrorBuilder);
|
|
68
|
+
this.runtime = init(this.corsMiddlewareBuilder, this.customerFacingErrorBuilder);
|
|
64
69
|
await this.createServer();
|
|
65
70
|
}
|
|
66
71
|
initSync() {
|
|
@@ -72,6 +77,17 @@ let NodeHonoServerManager = class NodeHonoServerManager {
|
|
|
72
77
|
mountSync(appManifest, ucd, contract) {
|
|
73
78
|
this.mountCommon(appManifest, ucd, contract);
|
|
74
79
|
}
|
|
80
|
+
async mountMCP(ucs, at) {
|
|
81
|
+
this.runtime.post(at, this.mcpHTTPRequestHandlerBuilder.exec({
|
|
82
|
+
ucManager: this.ucManager,
|
|
83
|
+
ucs,
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
async mountOpenAPISpec(spec, at) {
|
|
87
|
+
this.runtime.get(at, (c) => {
|
|
88
|
+
return c.json(spec);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
75
91
|
async mountStaticDir(dirPath) {
|
|
76
92
|
this.runtime.use(serveStatic({ root: dirPath }));
|
|
77
93
|
}
|
|
@@ -109,16 +125,19 @@ let NodeHonoServerManager = class NodeHonoServerManager {
|
|
|
109
125
|
};
|
|
110
126
|
NodeHonoServerManager = __decorate([
|
|
111
127
|
injectable(),
|
|
112
|
-
__param(0, inject(
|
|
113
|
-
__param(1, inject(
|
|
114
|
-
__param(2, inject(
|
|
115
|
-
__param(3, inject('
|
|
116
|
-
__param(4, inject(
|
|
117
|
-
__param(5, inject(
|
|
118
|
-
__param(6, inject(
|
|
119
|
-
__param(7, inject(
|
|
120
|
-
|
|
121
|
-
|
|
128
|
+
__param(0, inject(CORSMiddlewareBuilder)),
|
|
129
|
+
__param(1, inject(CustomerFacingErrorBuilder)),
|
|
130
|
+
__param(2, inject(EntrypointsBuilder)),
|
|
131
|
+
__param(3, inject('EnvironmentManager')),
|
|
132
|
+
__param(4, inject('Logger')),
|
|
133
|
+
__param(5, inject('MCPHTTPRequestHandlerBuilder')),
|
|
134
|
+
__param(6, inject(ServerRequestHandler)),
|
|
135
|
+
__param(7, inject(ServerSSLCertLoader)),
|
|
136
|
+
__param(8, inject('SettingsManager')),
|
|
137
|
+
__param(9, inject('UCManager')),
|
|
138
|
+
__metadata("design:paramtypes", [CORSMiddlewareBuilder,
|
|
139
|
+
CustomerFacingErrorBuilder,
|
|
140
|
+
EntrypointsBuilder, Object, Object, Object, ServerRequestHandler,
|
|
122
141
|
ServerSSLCertLoader, Object, Object])
|
|
123
142
|
], NodeHonoServerManager);
|
|
124
143
|
export { NodeHonoServerManager };
|
|
@@ -1,46 +1,37 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import type { AppManifest } from '../../app/index.js';
|
|
3
|
-
import type { DirPath } from '../../dt/index.js';
|
|
3
|
+
import type { DirPath, URLPath } from '../../dt/index.js';
|
|
4
4
|
import { WordingManager } from '../../i18n/index.js';
|
|
5
|
-
import type { ProductManifest } from '../../product/index.js';
|
|
5
|
+
import type { ProductManifest, ProductUCsLoaderOutput } from '../../product/index.js';
|
|
6
6
|
import type { Configurable, LoggerSettings, SettingsManager } from '../../std/index.js';
|
|
7
7
|
import { UCBuilder, type UCDef, type UCHTTPContract, type UCInput, type UCManager, type UCOPIBase } from '../../uc/index.js';
|
|
8
|
+
import { MCPStdioRequestHandler } from '../lib/mcp-server/stdio/MCPStdioRequestHandler.js';
|
|
9
|
+
import type { OpenAPISpec } from '../lib/openapi/types.js';
|
|
8
10
|
import type { ServerManager } from '../lib/server/ServerManager.js';
|
|
9
11
|
type S = Pick<LoggerSettings, 'logger_level'>;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
*
|
|
13
|
-
* Although it implements {@link ServerManager}, this implementation is not necessarily a "server".
|
|
14
|
-
* Indeed, it uses a local `Transport` so it must be considered the same as a {@link NodeCoreCLIManager}.
|
|
15
|
-
* Therefore, it calls `execClient` and not `execServer`.
|
|
16
|
-
* This way, Claude AI, or any other client is just a wrapper on top of it.
|
|
17
|
-
*
|
|
18
|
-
* @alpha This implementation still has lots of TODOs and has not been tested in real conditions. It needs to be stabilized before usage.
|
|
19
|
-
*/
|
|
20
|
-
export declare class NodeLocalStdioMCPServerManager implements Configurable<S>, ServerManager {
|
|
12
|
+
export declare class NodeMCPStdioServerManager implements Configurable<S>, ServerManager {
|
|
13
|
+
private requestHandler;
|
|
21
14
|
private productManifest;
|
|
22
15
|
private settingsManager;
|
|
23
16
|
private ucBuilder;
|
|
24
17
|
private ucManager;
|
|
25
18
|
private wordingManager;
|
|
26
|
-
protected runtime:
|
|
19
|
+
protected runtime: McpServer;
|
|
27
20
|
private transport;
|
|
28
|
-
|
|
29
|
-
private tools;
|
|
30
|
-
constructor(productManifest: ProductManifest, settingsManager: SettingsManager<S>, ucBuilder: UCBuilder, ucManager: UCManager, wordingManager: WordingManager);
|
|
21
|
+
constructor(requestHandler: MCPStdioRequestHandler, productManifest: ProductManifest, settingsManager: SettingsManager<S>, ucBuilder: UCBuilder, ucManager: UCManager, wordingManager: WordingManager);
|
|
31
22
|
s(): S;
|
|
32
23
|
overrideUCManager(ucManager: UCManager): void;
|
|
33
24
|
init(): Promise<void>;
|
|
34
25
|
initSync(): void;
|
|
35
26
|
mount<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): Promise<void>;
|
|
36
27
|
mountSync<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): void;
|
|
28
|
+
mountMCP(_ucs: ProductUCsLoaderOutput, _at: URLPath): Promise<void>;
|
|
29
|
+
mountOpenAPISpec(_spec: OpenAPISpec, _at: URLPath): Promise<void>;
|
|
37
30
|
mountStaticDir(_dirPath: DirPath): Promise<void>;
|
|
38
31
|
start(): Promise<void>;
|
|
39
32
|
stop(): Promise<void>;
|
|
40
33
|
warmUp(): Promise<void>;
|
|
41
|
-
private buildInputSchema;
|
|
42
|
-
private execRequest;
|
|
43
34
|
private initCommon;
|
|
44
|
-
mountCommon
|
|
35
|
+
private mountCommon;
|
|
45
36
|
}
|
|
46
37
|
export {};
|
|
@@ -0,0 +1,108 @@
|
|
|
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 { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
14
|
+
import { inject, injectable } from 'inversify';
|
|
15
|
+
import { WordingManager } from '../../i18n/index.js';
|
|
16
|
+
import { UCBuilder, } from '../../uc/index.js';
|
|
17
|
+
import { init, toolConfig } from '../lib/mcp-server/funcs.js';
|
|
18
|
+
import { assertLoggerLevel } from '../lib/mcp-server/stdio/funcs.js';
|
|
19
|
+
import { MCPStdioRequestHandler } from '../lib/mcp-server/stdio/MCPStdioRequestHandler.js';
|
|
20
|
+
let NodeMCPStdioServerManager = class NodeMCPStdioServerManager {
|
|
21
|
+
requestHandler;
|
|
22
|
+
productManifest;
|
|
23
|
+
settingsManager;
|
|
24
|
+
ucBuilder;
|
|
25
|
+
ucManager;
|
|
26
|
+
wordingManager;
|
|
27
|
+
runtime;
|
|
28
|
+
transport;
|
|
29
|
+
constructor(requestHandler, productManifest, settingsManager, ucBuilder, ucManager, wordingManager) {
|
|
30
|
+
this.requestHandler = requestHandler;
|
|
31
|
+
this.productManifest = productManifest;
|
|
32
|
+
this.settingsManager = settingsManager;
|
|
33
|
+
this.ucBuilder = ucBuilder;
|
|
34
|
+
this.ucManager = ucManager;
|
|
35
|
+
this.wordingManager = wordingManager;
|
|
36
|
+
}
|
|
37
|
+
s() {
|
|
38
|
+
return {
|
|
39
|
+
logger_level: this.settingsManager.get()('logger_level'),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
overrideUCManager(ucManager) {
|
|
43
|
+
this.ucManager = ucManager;
|
|
44
|
+
}
|
|
45
|
+
async init() {
|
|
46
|
+
this.initCommon();
|
|
47
|
+
}
|
|
48
|
+
initSync() {
|
|
49
|
+
this.initCommon();
|
|
50
|
+
}
|
|
51
|
+
async mount(appManifest, ucd, contract) {
|
|
52
|
+
this.mountCommon(appManifest, ucd, contract);
|
|
53
|
+
}
|
|
54
|
+
mountSync(appManifest, ucd, contract) {
|
|
55
|
+
this.mountCommon(appManifest, ucd, contract);
|
|
56
|
+
}
|
|
57
|
+
async mountMCP(_ucs, _at) {
|
|
58
|
+
// Nothing to do
|
|
59
|
+
}
|
|
60
|
+
async mountOpenAPISpec(_spec, _at) {
|
|
61
|
+
// Nothing to do
|
|
62
|
+
}
|
|
63
|
+
async mountStaticDir(_dirPath) {
|
|
64
|
+
// Nothing to do
|
|
65
|
+
}
|
|
66
|
+
async start() {
|
|
67
|
+
await this.runtime.connect(this.transport);
|
|
68
|
+
}
|
|
69
|
+
async stop() {
|
|
70
|
+
await this.runtime.close();
|
|
71
|
+
await this.transport.close();
|
|
72
|
+
}
|
|
73
|
+
async warmUp() {
|
|
74
|
+
// Nothing to do
|
|
75
|
+
}
|
|
76
|
+
initCommon() {
|
|
77
|
+
this.runtime = init(this.productManifest);
|
|
78
|
+
assertLoggerLevel(this.s().logger_level);
|
|
79
|
+
this.transport = new StdioServerTransport();
|
|
80
|
+
}
|
|
81
|
+
mountCommon(appManifest, ucd, contract) {
|
|
82
|
+
const uc = this.ucBuilder.exec({
|
|
83
|
+
appManifest,
|
|
84
|
+
auth: null,
|
|
85
|
+
def: ucd,
|
|
86
|
+
});
|
|
87
|
+
const mountingPoint = uc.def.ext?.cmd?.mountAt ?? contract.mountingPoint;
|
|
88
|
+
const wording = this.wordingManager.uc(uc.def);
|
|
89
|
+
const config = toolConfig(uc, 'client', wording);
|
|
90
|
+
this.runtime.registerTool(mountingPoint, config, (toolInput) => this.requestHandler.exec({
|
|
91
|
+
appManifest,
|
|
92
|
+
toolInput,
|
|
93
|
+
ucd,
|
|
94
|
+
ucManager: this.ucManager,
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
NodeMCPStdioServerManager = __decorate([
|
|
99
|
+
injectable(),
|
|
100
|
+
__param(0, inject(MCPStdioRequestHandler)),
|
|
101
|
+
__param(1, inject('ProductManifest')),
|
|
102
|
+
__param(2, inject('SettingsManager')),
|
|
103
|
+
__param(3, inject(UCBuilder)),
|
|
104
|
+
__param(4, inject('UCManager')),
|
|
105
|
+
__param(5, inject(WordingManager)),
|
|
106
|
+
__metadata("design:paramtypes", [MCPStdioRequestHandler, Object, Object, UCBuilder, Object, WordingManager])
|
|
107
|
+
], NodeMCPStdioServerManager);
|
|
108
|
+
export { NodeMCPStdioServerManager };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Container } from 'inversify';
|
|
2
2
|
import { TApiKey, TPassword, TUsername, } from '../../dt/index.js';
|
|
3
3
|
import { STD_DEFAULT_JWT_MANAGER_SETTINGS, } from '../../std/index.js';
|
|
4
|
+
import { MCPHTTPExpressFakeRequestHandlerBuilder } from '../../target/lib/mcp-server/http/express/MCPHTTPExpressFakeRequestHandlerBuilder.js';
|
|
4
5
|
import { TARGET_DEFAULT_SERVER_MANAGER_SETTINGS } from '../../target/lib/server/consts.js';
|
|
5
6
|
import { NodeExpressServerManager } from '../../target/node-express-server/NodeExpressServerManager.js';
|
|
6
7
|
import { FAKE_USER_ADMIN, FAKE_USER_REGULAR } from '../../uc/index.js';
|
|
@@ -38,6 +39,10 @@ export async function newNodeAppTester(serverPortRangeStart, idx, args) {
|
|
|
38
39
|
.bind('ServerManager')
|
|
39
40
|
.to(NodeExpressServerManager)
|
|
40
41
|
.inSingletonScope();
|
|
42
|
+
container
|
|
43
|
+
.bind('MCPHTTPRequestHandlerBuilder')
|
|
44
|
+
.to(MCPHTTPExpressFakeRequestHandlerBuilder)
|
|
45
|
+
.inSingletonScope();
|
|
41
46
|
container
|
|
42
47
|
.bind('UCDefASTParser')
|
|
43
48
|
.to(TypeScriptLibUCDefASTParser);
|
package/dist/esm/uc/UC.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export declare class UC<I extends UCInput | undefined = undefined, OPI0 extends
|
|
|
21
21
|
clear(): void;
|
|
22
22
|
clearSensitiveInputFields(): void;
|
|
23
23
|
fill(input: UCInputPartial<I>): this;
|
|
24
|
+
hasInput(): boolean;
|
|
24
25
|
hasInputField(key: UCFieldKey): boolean;
|
|
25
26
|
hasMediaInInput(): boolean;
|
|
26
27
|
hasOutputParts(): boolean;
|
|
@@ -29,6 +30,7 @@ export declare class UC<I extends UCInput | undefined = undefined, OPI0 extends
|
|
|
29
30
|
inputFieldsOrdered(): UCInputField<any>[];
|
|
30
31
|
inputFieldsInsensitive(): UCInputField<any>[];
|
|
31
32
|
inputFieldsSensitive(): UCInputField<any>[];
|
|
33
|
+
inputFieldsRepeatable(): UCInputField<any>[];
|
|
32
34
|
needsInputFilling(): boolean;
|
|
33
35
|
needsOutputDisplay(): boolean;
|
|
34
36
|
operatesOnAggregate(): boolean;
|
package/dist/esm/uc/UC.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TFile, Validation } from '../dt/index.js';
|
|
2
2
|
import { isBlank } from '../utils/index.js';
|
|
3
|
-
import { ucifIsMandatory, ucifIsSensitive, ucifMustBeFilledManually, } from './input-field.js';
|
|
3
|
+
import { ucifIsMandatory, ucifIsSensitive, ucifMustBeFilledManually, ucifRepeatability, } from './input-field.js';
|
|
4
4
|
import { AggregateInputDef } from './io/input/AggregateInput.js';
|
|
5
5
|
import { ListInputDef } from './io/input/ListInput.js';
|
|
6
6
|
import { UCInputField } from './UCInputField.js';
|
|
@@ -44,6 +44,9 @@ export class UC {
|
|
|
44
44
|
}
|
|
45
45
|
return this;
|
|
46
46
|
}
|
|
47
|
+
hasInput() {
|
|
48
|
+
return this.inputFields.length > 0;
|
|
49
|
+
}
|
|
47
50
|
hasInputField(key) {
|
|
48
51
|
return this.inputFields.find((f) => f.key === key) !== undefined;
|
|
49
52
|
}
|
|
@@ -104,6 +107,18 @@ export class UC {
|
|
|
104
107
|
inputFieldsSensitive() {
|
|
105
108
|
return this.inputFields.filter((f) => ucifIsSensitive(f.def));
|
|
106
109
|
}
|
|
110
|
+
// biome-ignore lint/suspicious/noExplicitAny: can be anything
|
|
111
|
+
inputFieldsRepeatable() {
|
|
112
|
+
const res = [];
|
|
113
|
+
for (const f of this.inputFields) {
|
|
114
|
+
const [isRepeatable] = ucifRepeatability(f.def);
|
|
115
|
+
if (!isRepeatable) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
res.push(f);
|
|
119
|
+
}
|
|
120
|
+
return res;
|
|
121
|
+
}
|
|
107
122
|
needsInputFilling() {
|
|
108
123
|
const fields = this.inputFields;
|
|
109
124
|
if (fields.length === 0) {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { UIntQuantity } from '../dt/index.js';
|
|
2
|
+
export interface UCFieldDefCardinality {
|
|
3
|
+
max?: UIntQuantity;
|
|
4
|
+
min?: UIntQuantity;
|
|
5
|
+
}
|
|
6
|
+
export declare function ucfIsMandatory(cardinality?: UCFieldDefCardinality): boolean;
|
|
7
|
+
export declare function ucfRepeatability(cardinality?: UCFieldDefCardinality): [boolean, UIntQuantity];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function ucfIsMandatory(cardinality) {
|
|
2
|
+
const min = cardinality?.min;
|
|
3
|
+
if (min === undefined) {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
return min > 0;
|
|
7
|
+
}
|
|
8
|
+
export function ucfRepeatability(cardinality) {
|
|
9
|
+
const max = cardinality?.max;
|
|
10
|
+
if (max === undefined) {
|
|
11
|
+
return [false, 0];
|
|
12
|
+
}
|
|
13
|
+
return [max > 1, max];
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function ucfExamples(type) {
|
|
2
|
+
const examples = type.getExamples();
|
|
3
|
+
// Leaving the value `undefined` means you want the default value
|
|
4
|
+
if (examples === undefined) {
|
|
5
|
+
return [type.example()];
|
|
6
|
+
}
|
|
7
|
+
// Setting the examples to `[]` means you don't want them
|
|
8
|
+
if (examples.length === 0) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
return examples;
|
|
12
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DataType } from '../../dt/index.js';
|
|
2
2
|
import type { StringKeys } from '../../utils/index.js';
|
|
3
3
|
import type { UCDef } from '../def.js';
|
|
4
4
|
import type { UCInput } from '../input.js';
|
|
5
|
-
import type
|
|
5
|
+
import { type UCOPIBase } from '../opi.js';
|
|
6
6
|
import type { UCOutput, UCOutputPartIdx, UCOutputPartKey } from '../output.js';
|
|
7
7
|
import type { UCOutputPart, UCOutputPartDef } from '../output-part.js';
|
|
8
8
|
import type { UC } from '../UC.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { UCOPIBaseDefFields } from '../opi.js';
|
|
2
2
|
import { UCOutputField } from '../UCOutputField.js';
|
|
3
3
|
const ERR_NO_FIELD = (key) => `No field ${key} is defined for this use case`;
|
|
4
4
|
const ERR_NO_IO_OUTPUT = 'No output is defined for this use case';
|
|
@@ -65,7 +65,7 @@ export class UCOutputReader {
|
|
|
65
65
|
return undefined;
|
|
66
66
|
}
|
|
67
67
|
const { fields, layout, order, related } = partDef;
|
|
68
|
-
const allFields = {
|
|
68
|
+
const allFields = { ...UCOPIBaseDefFields, ...fields };
|
|
69
69
|
const allFieldsKeys = order ?? Object.keys(allFields);
|
|
70
70
|
let items = [];
|
|
71
71
|
let total = 0;
|
package/dist/esm/uc/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export * from './auth/consts.js';
|
|
2
2
|
export * from './auth.js';
|
|
3
|
+
export * from './cardinality.js';
|
|
3
4
|
export * from './client.js';
|
|
4
5
|
export * from './data.js';
|
|
5
6
|
export * from './data-store.js';
|
|
6
7
|
export * from './def.js';
|
|
8
|
+
export * from './examples.js';
|
|
7
9
|
export * from './exec.js';
|
|
8
10
|
export * from './ext.js';
|
|
9
11
|
export * from './file.js';
|
package/dist/esm/uc/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export * from './auth/consts.js';
|
|
2
2
|
export * from './auth.js';
|
|
3
|
+
export * from './cardinality.js';
|
|
3
4
|
export * from './client.js';
|
|
4
5
|
export * from './data.js';
|
|
5
6
|
export * from './data-store.js';
|
|
6
7
|
export * from './def.js';
|
|
8
|
+
export * from './examples.js';
|
|
7
9
|
export * from './exec.js';
|
|
8
10
|
export * from './ext.js';
|
|
9
11
|
export * from './file.js';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DataType, TBase, UIntQuantity } from '../dt/index.js';
|
|
2
2
|
import type { EnumOf } from '../utils/index.js';
|
|
3
|
+
import { type UCFieldDefCardinality } from './cardinality.js';
|
|
3
4
|
import type { UCFieldKey } from './def.js';
|
|
4
5
|
import type { Value } from './value.js';
|
|
5
6
|
export declare const UCInputFieldFillingMode: {
|
|
@@ -13,23 +14,19 @@ export declare const UCInputFieldFillingMode: {
|
|
|
13
14
|
readonly MANUAL: "MANUAL";
|
|
14
15
|
};
|
|
15
16
|
export type UCInputFieldFillingMode = EnumOf<typeof UCInputFieldFillingMode>;
|
|
16
|
-
export interface UCInputFieldDefCardinality {
|
|
17
|
-
max?: UIntQuantity;
|
|
18
|
-
min?: UIntQuantity;
|
|
19
|
-
}
|
|
20
17
|
/**
|
|
21
18
|
* Definition of a use case input field
|
|
22
19
|
*/
|
|
23
20
|
export interface UCInputFieldDef<T extends DataType> {
|
|
24
21
|
/**
|
|
25
|
-
* A field can have 0, 1 or n values.
|
|
22
|
+
* A field can have 0, 1 or n values.
|
|
26
23
|
*
|
|
27
24
|
* @defaultValue { max: 1, min: 1 } => the user must absolutely provide one value only
|
|
28
25
|
*
|
|
29
26
|
* @example { max: 5, min: 0 } => the user must provide at most 5 values or none
|
|
30
27
|
* @example { min: 0 } => the user must provide 0 values or none
|
|
31
28
|
*/
|
|
32
|
-
cardinality?:
|
|
29
|
+
cardinality?: UCFieldDefCardinality;
|
|
33
30
|
/**
|
|
34
31
|
* @defaultValue {@link UCInputFieldFillingMode.MANUAL}
|
|
35
32
|
*/
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ucfIsMandatory, ucfRepeatability, } from './cardinality.js';
|
|
2
|
+
import { ucfExamples } from './examples.js';
|
|
1
3
|
export const UCInputFieldFillingMode = {
|
|
2
4
|
/**
|
|
3
5
|
* Set programmatically on behalf of the user (e.g. a foreign key id for a given object)
|
|
@@ -9,17 +11,7 @@ export const UCInputFieldFillingMode = {
|
|
|
9
11
|
MANUAL: 'MANUAL',
|
|
10
12
|
};
|
|
11
13
|
export function ucifExamples(def) {
|
|
12
|
-
|
|
13
|
-
const examples = type.getExamples();
|
|
14
|
-
// Leaving the value `undefined` means you want the default value
|
|
15
|
-
if (examples === undefined) {
|
|
16
|
-
return [type.example()];
|
|
17
|
-
}
|
|
18
|
-
// Setting the examples to `[]` means you don't want them
|
|
19
|
-
if (examples.length === 0) {
|
|
20
|
-
return undefined;
|
|
21
|
-
}
|
|
22
|
-
return examples;
|
|
14
|
+
return ucfExamples(def.type);
|
|
23
15
|
}
|
|
24
16
|
export function ucifHint(def) {
|
|
25
17
|
if (ucifIsSensitive(def)) {
|
|
@@ -52,18 +44,10 @@ export function ucifId(key, prefix = 'inputfield', separator = '-') {
|
|
|
52
44
|
return `${prefix}${separator}${key}`;
|
|
53
45
|
}
|
|
54
46
|
export function ucifIsMandatory(def) {
|
|
55
|
-
|
|
56
|
-
if (min === undefined) {
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
return min > 0;
|
|
47
|
+
return ucfIsMandatory(def.cardinality);
|
|
60
48
|
}
|
|
61
49
|
export function ucifRepeatability(def) {
|
|
62
|
-
|
|
63
|
-
if (max === undefined) {
|
|
64
|
-
return [false, 0];
|
|
65
|
-
}
|
|
66
|
-
return [max > 1, max];
|
|
50
|
+
return ucfRepeatability(def.cardinality);
|
|
67
51
|
}
|
|
68
52
|
export function ucifIsSensitive(def) {
|
|
69
53
|
const { sensitive, type } = def;
|