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.
- package/CHANGELOG.md +30 -0
- package/README.md +1 -1
- package/dist/esm/apps/Helper/src/i18n.js +4 -4
- package/dist/esm/apps/Helper/src/lib/layers/project.js +7 -7
- package/dist/esm/apps/Helper/src/lib/layers/uc.js +1 -1
- package/dist/esm/apps/Helper/src/ucds/CreateAppUCD.js +5 -10
- package/dist/esm/apps/Helper/src/ucds/CreateProductUCD.js +5 -10
- package/dist/esm/apps/Helper/src/ucds/CreateTargetUCD.js +6 -11
- package/dist/esm/apps/Helper/src/ucds/TestAppUCD.js +5 -8
- package/dist/esm/convention.d.ts +1 -1
- package/dist/esm/convention.js +1 -1
- package/dist/esm/dt/DataType.d.ts +2 -1
- package/dist/esm/dt/DataTypes.d.ts +1 -1
- package/dist/esm/dt/DataTypes.js +1 -0
- package/dist/esm/dt/final/TErrorCode.d.ts +7 -0
- package/dist/esm/dt/final/TErrorCode.js +9 -0
- package/dist/esm/dt/index.d.ts +1 -0
- package/dist/esm/dt/index.js +1 -0
- package/dist/esm/error/CustomError.d.ts +1 -1
- package/dist/esm/error/CustomError.js +2 -2
- package/dist/esm/error/ForbiddenAsNotFoundError.js +1 -1
- package/dist/esm/error/ForbiddenError.js +1 -1
- package/dist/esm/error/IllegalArgumentError.js +2 -2
- package/dist/esm/error/InternalServerError.js +1 -1
- package/dist/esm/error/NotFoundError.js +1 -1
- package/dist/esm/error/UnauthorizedError.js +1 -1
- package/dist/esm/error/UnavailableError.d.ts +6 -0
- package/dist/esm/error/UnavailableError.js +9 -0
- package/dist/esm/error/funcs.js +2 -0
- package/dist/esm/error/index.d.ts +1 -0
- package/dist/esm/error/index.js +1 -0
- package/dist/esm/i18n/locales/de.js +8 -0
- package/dist/esm/i18n/locales/en.js +8 -0
- package/dist/esm/i18n/locales/es.js +8 -0
- package/dist/esm/i18n/locales/fr.js +8 -0
- package/dist/esm/i18n/types.d.ts +1 -1
- package/dist/esm/products/Helper/i18n.d.ts +8 -0
- package/dist/esm/std/impl/SimpleHTTPAPICaller.js +1 -1
- package/dist/esm/target/lib/cli/CommandExecutor.js +2 -2
- package/dist/esm/target/lib/cli/renderer.d.ts +2 -1
- package/dist/esm/target/lib/cli/renderer.js +10 -11
- package/dist/esm/target/lib/server/AuthenticationChecker.d.ts +3 -3
- package/dist/esm/target/lib/server/AuthenticationChecker.js +5 -5
- package/dist/esm/target/node-core-cli/NodeCoreCLIManager.js +1 -1
- package/dist/esm/target/react-web-pure/UCForm.d.ts +1 -1
- package/dist/esm/target/react-web-pure/UCForm.js +3 -2
- package/dist/esm/testing/workers/checkers/AppI18nChecker.js +4 -2
- package/dist/esm/uc/data-store.d.ts +9 -1
- package/dist/esm/uc/data-store.js +33 -1
- package/dist/esm/uc/impl/CloudflareD1UCDataStore.d.ts +2 -2
- package/dist/esm/uc/impl/CloudflareD1UCDataStore.js +7 -0
- package/dist/esm/uc/impl/InMemoryUCDataStore.d.ts +8 -3
- package/dist/esm/uc/impl/InMemoryUCDataStore.js +19 -3
- package/dist/esm/uc/impl/KnexUCDataStore.d.ts +2 -2
- package/dist/esm/uc/impl/KnexUCDataStore.js +10 -2
- package/dist/esm/uc/impl/SimpleUCManager.d.ts +4 -4
- package/dist/esm/uc/impl/SimpleUCManager.js +10 -10
- package/dist/esm/uc/settings/consts.js +1 -0
- package/dist/esm/uc/settings.d.ts +8 -1
- package/dist/esm/uc/workers/UCExecChecker.d.ts +3 -3
- package/dist/esm/uc/workers/UCExecChecker.js +5 -5
- package/dist/esm/utils/index.d.ts +1 -1
- package/dist/esm/utils/index.js +1 -1
- package/dist/esm/utils/ioc/bindCommon.js +4 -4
- package/dist/esm/utils/ioc/bindFactory.d.ts +2 -0
- package/dist/esm/utils/ioc/bindFactory.js +9 -0
- package/package.json +21 -20
- package/dist/esm/apps/Helper/src/lib/app.d.ts +0 -6
- package/dist/esm/apps/Helper/src/lib/app.js +0 -12
- package/dist/esm/apps/Helper/src/lib/project.d.ts +0 -3
- package/dist/esm/apps/Helper/src/lib/project.js +0 -163
- package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
- package/dist/esm/bundlers/vite/StripUCDLifecycleServerPlugin.js +0 -18
- package/dist/esm/products/Helper/cli-node-core/container.d.ts +0 -3
- package/dist/esm/products/Helper/cli-node-core/container.js +0 -26
- package/dist/esm/products/Helper/cli-node-core/index.d.ts +0 -1
- package/dist/esm/products/Helper/cli-node-core/index.js +0 -9
- package/dist/esm/products/Helper/container.d.ts +0 -3
- package/dist/esm/products/Helper/container.js +0 -26
- package/dist/esm/products/Helper/index.d.ts +0 -1
- package/dist/esm/products/Helper/index.js +0 -16
- package/dist/esm/target/lib/react/common.d.ts +0 -6
- package/dist/esm/target/lib/react/common.js +0 -1
- package/dist/esm/target/lib/server/RequestHandler.d.ts +0 -14
- package/dist/esm/target/lib/server/RequestHandler.js +0 -1
- package/dist/esm/target/lib/server-node/stop.d.ts +0 -2
- package/dist/esm/target/lib/server-node/stop.js +0 -18
- package/dist/esm/target/node-express-server/lib/AuthCookieCreator.d.ts +0 -21
- package/dist/esm/target/node-express-server/lib/AuthCookieCreator.js +0 -50
- package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.d.ts +0 -21
- package/dist/esm/target/node-express-server/middlewares/AuthenticationCheckerMiddlewareBuilder.js +0 -61
- package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.d.ts +0 -12
- package/dist/esm/target/node-express-server/middlewares/ErrorMiddlewareBuilder.js +0 -35
- package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.d.ts +0 -12
- package/dist/esm/target/node-express-server/middlewares/HelmetMiddlewareBuilder.js +0 -39
- package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.d.ts +0 -18
- package/dist/esm/target/node-express-server/middlewares/PublicApiKeyCheckerMiddlewareBuilder.js +0 -44
- package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.d.ts +0 -12
- package/dist/esm/target/node-express-server/middlewares/RequestCheckerMiddlewareBuilder.js +0 -36
- package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.d.ts +0 -23
- package/dist/esm/target/node-express-server/middlewares/RequestHandlerMiddlewareBuilder.js +0 -154
- package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.d.ts +0 -13
- package/dist/esm/target/node-express-server/middlewares/RequestLoggerMiddlewareBuilder.js +0 -46
- package/dist/esm/testing/impl/SimpleAppDocsEmitter.d.ts +0 -7
- package/dist/esm/testing/impl/SimpleAppDocsEmitter.js +0 -180
- package/dist/esm/testing/impl/SimpleAppTesterConfigurator.d.ts +0 -14
- package/dist/esm/testing/impl/SimpleAppTesterConfigurator.js +0 -35
- package/dist/esm/uc/utils/stripUCDLifecycleServer.d.ts +0 -15
- package/dist/esm/uc/utils/stripUCDLifecycleServer.js +0 -77
- package/dist/esm/uc/utils/ucifcoIsForArray.d.ts +0 -8
- package/dist/esm/uc/utils/ucifcoIsForArray.js +0 -13
- package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.d.ts +0 -2
- package/dist/esm/utils/bundling/vite/StripUCDLifecycleServerPlugin.js +0 -18
- package/dist/esm/utils/http/toFormData.d.ts +0 -3
- package/dist/esm/utils/http/toFormData.js +0 -4
- package/dist/esm/utils/http/toJSON.d.ts +0 -3
- package/dist/esm/utils/http/toJSON.js +0 -3
- package/dist/esm/utils/http/toQueryParams.d.ts +0 -2
- package/dist/esm/utils/http/toQueryParams.js +0 -4
- package/dist/esm/utils/ioc/ContainerPrinter.d.ts +0 -15
- package/dist/esm/utils/ioc/ContainerPrinter.js +0 -58
- package/dist/esm/utils/ioc/bindProvider.d.ts +0 -2
- package/dist/esm/utils/ioc/bindProvider.js +0 -9
|
@@ -3,18 +3,17 @@ export function print(line) {
|
|
|
3
3
|
// biome-ignore lint/suspicious/noConsole: we want it
|
|
4
4
|
console.info(line);
|
|
5
5
|
}
|
|
6
|
-
export function printError(err) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
// biome-ignore lint/suspicious/noConsole: we want it
|
|
12
|
-
console.error(err);
|
|
13
|
-
}
|
|
6
|
+
export function printError(i18nManager, err) {
|
|
7
|
+
if (typeof err === 'string') {
|
|
8
|
+
// biome-ignore lint/suspicious/noConsole: we want it
|
|
9
|
+
console.error(err);
|
|
10
|
+
return;
|
|
14
11
|
}
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
if (!(err instanceof CustomError)) {
|
|
13
|
+
// biome-ignore lint/suspicious/noConsole: we want it
|
|
14
|
+
console.error(err);
|
|
15
|
+
return;
|
|
17
16
|
}
|
|
18
17
|
// biome-ignore lint/suspicious/noConsole: we want it
|
|
19
|
-
console.error(message);
|
|
18
|
+
console.error(i18nManager.t(err.message));
|
|
20
19
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Factory } from 'inversify';
|
|
2
2
|
import type { AppManifest } from '../../../app/index.js';
|
|
3
3
|
import type { Logger, Worker } from '../../../std/index.js';
|
|
4
4
|
import { type UC, type UCAuth, type UCDef, type UCInput, type UCOPIBase, type UCPolicy } from '../../../uc/index.js';
|
|
@@ -23,8 +23,8 @@ export declare class AuthenticationChecker implements Worker<Input, Promise<Outp
|
|
|
23
23
|
private jwtAuthenticationChecker;
|
|
24
24
|
private privateApiKeyAuthenticationChecker;
|
|
25
25
|
private logger;
|
|
26
|
-
private
|
|
27
|
-
constructor(basicAuthenticationChecker: BasicAuthenticationChecker, jwtAuthenticationChecker: JWTAuthenticationChecker, privateApiKeyAuthenticationChecker: PrivateApiKeyAuthenticationChecker, logger: Logger,
|
|
26
|
+
private ucPolicyFactory;
|
|
27
|
+
constructor(basicAuthenticationChecker: BasicAuthenticationChecker, jwtAuthenticationChecker: JWTAuthenticationChecker, privateApiKeyAuthenticationChecker: PrivateApiKeyAuthenticationChecker, logger: Logger, ucPolicyFactory: Factory<UCPolicy>);
|
|
28
28
|
exec<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>({ authCookie, authorizationHeader, uc, }: Input<I, OPI0, OPI1>): Promise<Output>;
|
|
29
29
|
}
|
|
30
30
|
export {};
|
|
@@ -21,13 +21,13 @@ let AuthenticationChecker = class AuthenticationChecker {
|
|
|
21
21
|
jwtAuthenticationChecker;
|
|
22
22
|
privateApiKeyAuthenticationChecker;
|
|
23
23
|
logger;
|
|
24
|
-
|
|
25
|
-
constructor(basicAuthenticationChecker, jwtAuthenticationChecker, privateApiKeyAuthenticationChecker, logger,
|
|
24
|
+
ucPolicyFactory;
|
|
25
|
+
constructor(basicAuthenticationChecker, jwtAuthenticationChecker, privateApiKeyAuthenticationChecker, logger, ucPolicyFactory) {
|
|
26
26
|
this.basicAuthenticationChecker = basicAuthenticationChecker;
|
|
27
27
|
this.jwtAuthenticationChecker = jwtAuthenticationChecker;
|
|
28
28
|
this.privateApiKeyAuthenticationChecker = privateApiKeyAuthenticationChecker;
|
|
29
29
|
this.logger = logger;
|
|
30
|
-
this.
|
|
30
|
+
this.ucPolicyFactory = ucPolicyFactory;
|
|
31
31
|
}
|
|
32
32
|
async exec({ authCookie, authorizationHeader, uc, }) {
|
|
33
33
|
this.logger.trace('Checking auth', {
|
|
@@ -43,7 +43,7 @@ let AuthenticationChecker = class AuthenticationChecker {
|
|
|
43
43
|
return output;
|
|
44
44
|
}
|
|
45
45
|
const authType = sec?.authType ?? DEFAULT_UC_SEC_AT;
|
|
46
|
-
const policy = (await this.
|
|
46
|
+
const policy = (await this.ucPolicyFactory(server.policy));
|
|
47
47
|
const canBeExecutedPreAuth = await policy.canBeExecutedPreAuth();
|
|
48
48
|
if (canBeExecutedPreAuth) {
|
|
49
49
|
const { allowed } = await policy.exec({
|
|
@@ -101,7 +101,7 @@ AuthenticationChecker = __decorate([
|
|
|
101
101
|
__param(1, inject(JWTAuthenticationChecker)),
|
|
102
102
|
__param(2, inject(PrivateApiKeyAuthenticationChecker)),
|
|
103
103
|
__param(3, inject('Logger')),
|
|
104
|
-
__param(4, inject('
|
|
104
|
+
__param(4, inject('Factory<UCPolicy>')),
|
|
105
105
|
__metadata("design:paramtypes", [BasicAuthenticationChecker,
|
|
106
106
|
JWTAuthenticationChecker,
|
|
107
107
|
PrivateApiKeyAuthenticationChecker, Object, Function])
|
|
@@ -41,7 +41,7 @@ let NodeCoreCLIManager = class NodeCoreCLIManager {
|
|
|
41
41
|
uc.def.ext?.cmd?.mountAt ?? ucMountingPoint(uc),
|
|
42
42
|
uc,
|
|
43
43
|
]));
|
|
44
|
-
if (!command
|
|
44
|
+
if (!command?.trim() || command === '--help') {
|
|
45
45
|
showHelp(ucs, this.wordingManager);
|
|
46
46
|
}
|
|
47
47
|
else if (command === '--version') {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type ReactElement } from 'react';
|
|
2
|
-
import type
|
|
2
|
+
import { type UCInput, type UCOPIBase } from '../../uc/index.js';
|
|
3
3
|
import type { UCFormProps } from '../lib/react/form.js';
|
|
4
4
|
export declare function UCForm<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>({ clearAfterExec, disabled, execState, onSubmit: onSubmitBase, uc, }: UCFormProps<I, OPI0, OPI1>): ReactElement;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useRef } from 'react';
|
|
3
|
+
import { UCExecRes } from '../../uc/index.js';
|
|
3
4
|
import { useStyleContext } from '../lib/react/StyleContextProvider.js';
|
|
4
5
|
import { UCFormField } from './UCFormField.js';
|
|
5
6
|
import { UCFormSubmitControl } from './UCFormSubmitControl.js';
|
|
@@ -8,8 +9,8 @@ export function UCForm({ clearAfterExec, disabled, execState, onSubmit: onSubmit
|
|
|
8
9
|
const formRef = useRef(null);
|
|
9
10
|
const onSubmit = async (e) => {
|
|
10
11
|
e.preventDefault();
|
|
11
|
-
const
|
|
12
|
-
if (
|
|
12
|
+
const res = await onSubmitBase();
|
|
13
|
+
if (res === UCExecRes.SUCCEEDED && clearAfterExec) {
|
|
13
14
|
formRef.current?.reset();
|
|
14
15
|
}
|
|
15
16
|
};
|
|
@@ -16,7 +16,7 @@ const ERR_I18N_LABEL_NO_DOT = (key) => `The i18n key '${key}' is a label, thus i
|
|
|
16
16
|
const ERR_I18N_MISSING_TRANS = (key, lang) => `The i18n key '${key}' is missing for lang '${lang}'`;
|
|
17
17
|
let AppI18nChecker = class AppI18nChecker {
|
|
18
18
|
static { AppI18nChecker_1 = this; }
|
|
19
|
-
static I18N_KEY_PATTERN = /(dt_([A-Z][A-Za-z0-9]+)_([A-Za-z0-9]+)_(desc|label))|(err_([A-Za-z_]+))|(uc_([A-Z][A-Za-z0-9]+)_(client_confirm_(cancel|confirm|message|title)|desc|label|i_submit_(changing|idle|initializing|submitting)|op_(0|1)_(empty|label)))|(ucif_([a-z]([A-Za-z0-9]+)?)_(desc|label))|(ucof_([a-z]([A-Za-z0-9]+)?)_(desc|label))|(validation_([a-z]+)_([A-Z][A-Za-z0-9]+))/;
|
|
19
|
+
static I18N_KEY_PATTERN = /(dt_([A-Z][A-Za-z0-9]+)_constr_format)|(dt_([A-Z][A-Za-z0-9]+)_([A-Za-z0-9]+)_(desc|label))|(err_([A-Za-z_]+))|(uc_([A-Z][A-Za-z0-9]+)_(client_confirm_(cancel|confirm|message|title)|desc|label|i_submit_(changing|idle|initializing|submitting)|op_(0|1)_(empty|label)))|(ucif_([a-z]([A-Za-z0-9]+)?)_(desc|label))|(ucof_([a-z]([A-Za-z0-9]+)?)_(desc|label))|(validation_([a-z]+)_([A-Z][A-Za-z0-9]+))/;
|
|
20
20
|
output;
|
|
21
21
|
constructor() {
|
|
22
22
|
this.output = { errors: [] };
|
|
@@ -41,7 +41,9 @@ let AppI18nChecker = class AppI18nChecker {
|
|
|
41
41
|
if (!matches) {
|
|
42
42
|
this.output.errors.push(ERR_I18N_KEY_INVALID(key));
|
|
43
43
|
}
|
|
44
|
-
if (key.endsWith('_label') &&
|
|
44
|
+
if (key.endsWith('_label') &&
|
|
45
|
+
translation.endsWith('.') &&
|
|
46
|
+
!translation.endsWith('...')) {
|
|
45
47
|
this.output.errors.push(ERR_I18N_LABEL_NO_DOT(key));
|
|
46
48
|
}
|
|
47
49
|
}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import type { AppName } from '../app/index.js';
|
|
2
2
|
import type { UIntQuantity, UUID } from '../dt/index.js';
|
|
3
|
-
import type { Clearable, Initializable, StringKeys } from '../utils/index.js';
|
|
3
|
+
import type { Clearable, EnumOf, Initializable, StringKeys } from '../utils/index.js';
|
|
4
4
|
import type { UCData } from './data.js';
|
|
5
5
|
import type { UCExecMode } from './exec.js';
|
|
6
6
|
import type { UCInput } from './input.js';
|
|
7
7
|
import type { UCName } from './metadata.js';
|
|
8
8
|
export type UCDataStoreDatasetName = string;
|
|
9
|
+
export declare const UCDataStoreMode: {
|
|
10
|
+
readonly NONE: "NONE";
|
|
11
|
+
readonly READ: "READ";
|
|
12
|
+
readonly READ_WRITE: "READ_WRITE";
|
|
13
|
+
readonly WRITE: "WRITE";
|
|
14
|
+
};
|
|
15
|
+
export type UCDataStoreMode = EnumOf<typeof UCDataStoreMode>;
|
|
9
16
|
interface UCDataStoreQueryOpts {
|
|
10
17
|
}
|
|
11
18
|
export type UCDataStoreReadFilter<T> = T | T[];
|
|
@@ -67,4 +74,5 @@ export interface UCDataStore extends Clearable, Initializable {
|
|
|
67
74
|
writeBulk<I extends UCInput | undefined = undefined, D extends UCData | null = null>(records: UCDataStoreRecord<I, D>[], opts?: UCDataStoreWriteOpts): Promise<void>;
|
|
68
75
|
writeProjection<T extends object>(name: string, data: T, opts?: UCDataStoreWriteProjectionOpts): Promise<void>;
|
|
69
76
|
}
|
|
77
|
+
export declare function assertCan(op: 'read' | 'write', mode: UCDataStoreMode): void;
|
|
70
78
|
export {};
|
|
@@ -1 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
import { UnavailableError } from '../error/index.js';
|
|
2
|
+
export const UCDataStoreMode = {
|
|
3
|
+
NONE: 'NONE',
|
|
4
|
+
READ: 'READ',
|
|
5
|
+
READ_WRITE: 'READ_WRITE',
|
|
6
|
+
WRITE: 'WRITE',
|
|
7
|
+
};
|
|
8
|
+
export function assertCan(op, mode) {
|
|
9
|
+
switch (mode) {
|
|
10
|
+
case 'NONE':
|
|
11
|
+
if (op === 'read') {
|
|
12
|
+
throw new UnavailableError('err_uc_data_store_not_readable');
|
|
13
|
+
}
|
|
14
|
+
if (op === 'write') {
|
|
15
|
+
throw new UnavailableError('err_uc_data_store_not_writable');
|
|
16
|
+
}
|
|
17
|
+
break;
|
|
18
|
+
case 'READ':
|
|
19
|
+
if (op === 'write') {
|
|
20
|
+
throw new UnavailableError('err_uc_data_store_not_writable');
|
|
21
|
+
}
|
|
22
|
+
break;
|
|
23
|
+
case 'READ_WRITE':
|
|
24
|
+
break;
|
|
25
|
+
case 'WRITE':
|
|
26
|
+
if (op === 'read') {
|
|
27
|
+
throw new UnavailableError('err_uc_data_store_not_readable');
|
|
28
|
+
}
|
|
29
|
+
break;
|
|
30
|
+
default:
|
|
31
|
+
mode;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { D1Database } from '@cloudflare/workers-types';
|
|
2
2
|
import type { Configurable, SettingsManager } from '../../std/index.js';
|
|
3
3
|
import type { UCData } from '../data.js';
|
|
4
|
-
import type
|
|
4
|
+
import { type UCDataStore, type UCDataStoreReadOpts, type UCDataStoreReadProjectionOpts, type UCDataStoreReadResponse, type UCDataStoreRecord, type UCDataStoreTx, type UCDataStoreWriteOpts, type UCDataStoreWriteProjectionOpts, type UCDataStoreWriteProjectionSpecificBinding } from '../data-store.js';
|
|
5
5
|
import type { UCInput } from '../input.js';
|
|
6
6
|
import type { UCSettings } from '../settings.js';
|
|
7
|
-
type S = Pick<UCSettings, 'uc_data_store_ucs_dataset_name'>;
|
|
7
|
+
type S = Pick<UCSettings, 'uc_data_store_mode' | 'uc_data_store_ucs_dataset_name'>;
|
|
8
8
|
export declare const ROW_COLS: (keyof UCDataStoreRecord)[];
|
|
9
9
|
/**
|
|
10
10
|
* @alpha This implementation is still a WIP and needs improvement
|
|
@@ -12,6 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
};
|
|
13
13
|
import { inject, injectable } from 'inversify';
|
|
14
14
|
import { NotAvailableError, NotImplementedError } from '../../error/index.js';
|
|
15
|
+
import { assertCan, } from '../data-store.js';
|
|
15
16
|
export const ROW_COLS = [
|
|
16
17
|
'aggregateId',
|
|
17
18
|
'appName',
|
|
@@ -38,6 +39,7 @@ let CloudflareD1UCDataStore = class CloudflareD1UCDataStore {
|
|
|
38
39
|
}
|
|
39
40
|
s() {
|
|
40
41
|
return {
|
|
42
|
+
uc_data_store_mode: this.settingsManager.get()('uc_data_store_mode'),
|
|
41
43
|
uc_data_store_ucs_dataset_name: this.settingsManager.get()('uc_data_store_ucs_dataset_name'),
|
|
42
44
|
};
|
|
43
45
|
}
|
|
@@ -92,6 +94,7 @@ CREATE INDEX IF NOT EXISTS uc_executions_user_id_index ON uc_executions (userId)
|
|
|
92
94
|
}
|
|
93
95
|
async read(opts) {
|
|
94
96
|
this.assertClient();
|
|
97
|
+
assertCan('read', this.s().uc_data_store_mode);
|
|
95
98
|
// TODO : Consider using a query builder (or Google's pipe operator ?) when it gets too complicated or dangerous
|
|
96
99
|
const query = [
|
|
97
100
|
`select * from ${this.s().uc_data_store_ucs_dataset_name}`,
|
|
@@ -131,6 +134,7 @@ CREATE INDEX IF NOT EXISTS uc_executions_user_id_index ON uc_executions (userId)
|
|
|
131
134
|
};
|
|
132
135
|
}
|
|
133
136
|
async readProjection(_name, _opts) {
|
|
137
|
+
assertCan('read', this.s().uc_data_store_mode);
|
|
134
138
|
throw new NotImplementedError('readProjection');
|
|
135
139
|
}
|
|
136
140
|
async startTx() {
|
|
@@ -144,6 +148,7 @@ CREATE INDEX IF NOT EXISTS uc_executions_user_id_index ON uc_executions (userId)
|
|
|
144
148
|
}
|
|
145
149
|
async write(record, _opts) {
|
|
146
150
|
this.assertClient();
|
|
151
|
+
assertCan('write', this.s().uc_data_store_mode);
|
|
147
152
|
const cols = ROW_COLS.join(', ');
|
|
148
153
|
const placeholders = ROW_COLS.map(() => '?').join(', ');
|
|
149
154
|
// Use variables only for variables declared here => never for data coming from outside this method !
|
|
@@ -166,9 +171,11 @@ CREATE INDEX IF NOT EXISTS uc_executions_user_id_index ON uc_executions (userId)
|
|
|
166
171
|
.run();
|
|
167
172
|
}
|
|
168
173
|
async writeBulk(_records, _opts) {
|
|
174
|
+
assertCan('write', this.s().uc_data_store_mode);
|
|
169
175
|
throw new NotImplementedError('writeBulk');
|
|
170
176
|
}
|
|
171
177
|
async writeProjection(_name, _data, _opts) {
|
|
178
|
+
assertCan('write', this.s().uc_data_store_mode);
|
|
172
179
|
throw new NotImplementedError('writeProjection');
|
|
173
180
|
}
|
|
174
181
|
setClient(client) {
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import type { Configurable, SettingsManager } from '../../std/index.js';
|
|
1
2
|
import type { UCData } from '../data.js';
|
|
2
|
-
import type
|
|
3
|
+
import { type UCDataStore, type UCDataStoreReadOpts, type UCDataStoreReadResponse, type UCDataStoreRecord, type UCDataStoreTx, type UCDataStoreWriteProjectionSpecificBinding } from '../data-store.js';
|
|
3
4
|
import type { UCInput } from '../input.js';
|
|
5
|
+
import type { UCSettings } from '../settings.js';
|
|
4
6
|
type TxState = 'committed' | 'pending' | 'rollbacked';
|
|
5
|
-
|
|
7
|
+
type S = Pick<UCSettings, 'uc_data_store_mode'>;
|
|
8
|
+
export declare class InMemoryUCDataStore implements Configurable<S>, UCDataStore {
|
|
9
|
+
protected settingsManager: SettingsManager<S>;
|
|
6
10
|
entries: UCDataStoreRecord<any, any>[];
|
|
7
11
|
tx: TxState | undefined;
|
|
8
|
-
constructor();
|
|
12
|
+
constructor(settingsManager: SettingsManager<S>);
|
|
13
|
+
s(): S;
|
|
9
14
|
clear(): Promise<void>;
|
|
10
15
|
destroy(): Promise<void>;
|
|
11
16
|
exists(): Promise<boolean>;
|
|
@@ -7,8 +7,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
|
|
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';
|
|
11
14
|
import { NotImplementedError } from '../../error/index.js';
|
|
15
|
+
import { assertCan, } from '../data-store.js';
|
|
12
16
|
function predicate(key, filter) {
|
|
13
17
|
if (filter === null) {
|
|
14
18
|
return (r) => r[key] === null;
|
|
@@ -19,12 +23,19 @@ function predicate(key, filter) {
|
|
|
19
23
|
return (r) => r[key] === filter;
|
|
20
24
|
}
|
|
21
25
|
let InMemoryUCDataStore = class InMemoryUCDataStore {
|
|
26
|
+
settingsManager;
|
|
22
27
|
// biome-ignore lint/suspicious/noExplicitAny: can be anything
|
|
23
28
|
entries;
|
|
24
29
|
tx;
|
|
25
|
-
constructor() {
|
|
30
|
+
constructor(settingsManager) {
|
|
31
|
+
this.settingsManager = settingsManager;
|
|
26
32
|
this.entries = [];
|
|
27
33
|
}
|
|
34
|
+
s() {
|
|
35
|
+
return {
|
|
36
|
+
uc_data_store_mode: this.settingsManager.get()('uc_data_store_mode'),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
28
39
|
async clear() {
|
|
29
40
|
this.entries = [];
|
|
30
41
|
}
|
|
@@ -41,6 +52,7 @@ let InMemoryUCDataStore = class InMemoryUCDataStore {
|
|
|
41
52
|
// Nothing to do
|
|
42
53
|
}
|
|
43
54
|
async read(opts) {
|
|
55
|
+
assertCan('read', this.s().uc_data_store_mode);
|
|
44
56
|
let items = this
|
|
45
57
|
.entries;
|
|
46
58
|
// Filter
|
|
@@ -70,6 +82,7 @@ let InMemoryUCDataStore = class InMemoryUCDataStore {
|
|
|
70
82
|
};
|
|
71
83
|
}
|
|
72
84
|
async readProjection() {
|
|
85
|
+
assertCan('read', this.s().uc_data_store_mode);
|
|
73
86
|
return [];
|
|
74
87
|
}
|
|
75
88
|
async startTx() {
|
|
@@ -94,14 +107,17 @@ let InMemoryUCDataStore = class InMemoryUCDataStore {
|
|
|
94
107
|
this.writeBulk([record]);
|
|
95
108
|
}
|
|
96
109
|
async writeBulk(records) {
|
|
110
|
+
assertCan('write', this.s().uc_data_store_mode);
|
|
97
111
|
this.entries.push(...records);
|
|
98
112
|
}
|
|
99
113
|
async writeProjection() {
|
|
114
|
+
assertCan('write', this.s().uc_data_store_mode);
|
|
100
115
|
throw new NotImplementedError('writeProjection');
|
|
101
116
|
}
|
|
102
117
|
};
|
|
103
118
|
InMemoryUCDataStore = __decorate([
|
|
104
119
|
injectable(),
|
|
105
|
-
|
|
120
|
+
__param(0, inject('SettingsManager')),
|
|
121
|
+
__metadata("design:paramtypes", [Object])
|
|
106
122
|
], InMemoryUCDataStore);
|
|
107
123
|
export { InMemoryUCDataStore };
|
|
@@ -2,7 +2,7 @@ import { type Knex } from 'knex';
|
|
|
2
2
|
import type { FilePath, UIntQuantity } from '../../dt/index.js';
|
|
3
3
|
import type { Configurable, Settings, SettingsManager } from '../../std/index.js';
|
|
4
4
|
import type { UCData } from '../data.js';
|
|
5
|
-
import type
|
|
5
|
+
import { type UCDataStore, type UCDataStoreReadOpts, type UCDataStoreReadProjectionOpts, type UCDataStoreReadResponse, type UCDataStoreRecord, type UCDataStoreTx, type UCDataStoreWriteOpts, type UCDataStoreWriteProjectionOpts, type UCDataStoreWriteProjectionSpecificBinding } from '../data-store.js';
|
|
6
6
|
import type { UCInput } from '../input.js';
|
|
7
7
|
import type { UCSettings } from '../settings.js';
|
|
8
8
|
/**
|
|
@@ -16,7 +16,7 @@ export interface KnexUCDataStoreSettings extends Settings {
|
|
|
16
16
|
knex_uc_data_store_pool_min: UIntQuantity;
|
|
17
17
|
knex_uc_data_store_type: 'pg' | 'sqlite3';
|
|
18
18
|
}
|
|
19
|
-
type S = KnexUCDataStoreSettings & Pick<UCSettings, 'uc_data_store_ucs_dataset_name'>;
|
|
19
|
+
type S = KnexUCDataStoreSettings & Pick<UCSettings, 'uc_data_store_mode' | 'uc_data_store_ucs_dataset_name'>;
|
|
20
20
|
export declare class KnexUCDataStore implements Configurable<S>, UCDataStore {
|
|
21
21
|
protected settingsManager: SettingsManager<S>;
|
|
22
22
|
protected config: Knex.Config;
|
|
@@ -13,6 +13,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
import { inject, injectable } from 'inversify';
|
|
14
14
|
import knex, {} from 'knex';
|
|
15
15
|
import { NotAvailableError, NotCallableError } from '../../error/index.js';
|
|
16
|
+
import { assertCan, } from '../data-store.js';
|
|
16
17
|
const FILTERS_MAPPING = new Map([
|
|
17
18
|
['aggregateId', 'aggregate_id'],
|
|
18
19
|
['appName', 'app_name'],
|
|
@@ -37,6 +38,7 @@ let KnexUCDataStore = class KnexUCDataStore {
|
|
|
37
38
|
knex_uc_data_store_pool_max: this.settingsManager.get()('knex_uc_data_store_pool_max'),
|
|
38
39
|
knex_uc_data_store_pool_min: this.settingsManager.get()('knex_uc_data_store_pool_min'),
|
|
39
40
|
knex_uc_data_store_type: this.settingsManager.get()('knex_uc_data_store_type'),
|
|
41
|
+
uc_data_store_mode: this.settingsManager.get()('uc_data_store_mode'),
|
|
40
42
|
uc_data_store_ucs_dataset_name: this.settingsManager.get()('uc_data_store_ucs_dataset_name'),
|
|
41
43
|
};
|
|
42
44
|
}
|
|
@@ -58,6 +60,7 @@ let KnexUCDataStore = class KnexUCDataStore {
|
|
|
58
60
|
throw new NotCallableError('initSync', 'init', 'async-only');
|
|
59
61
|
}
|
|
60
62
|
async read(opts) {
|
|
63
|
+
assertCan('read', this.s().uc_data_store_mode);
|
|
61
64
|
const query = this.client(this.s().uc_data_store_ucs_dataset_name);
|
|
62
65
|
// Filter
|
|
63
66
|
if (opts?.filters) {
|
|
@@ -87,6 +90,7 @@ let KnexUCDataStore = class KnexUCDataStore {
|
|
|
87
90
|
};
|
|
88
91
|
}
|
|
89
92
|
async readProjection(name, opts) {
|
|
93
|
+
assertCan('read', this.s().uc_data_store_mode);
|
|
90
94
|
const query = this.client(name);
|
|
91
95
|
// Sort
|
|
92
96
|
if (opts?.orderBy) {
|
|
@@ -123,6 +127,7 @@ let KnexUCDataStore = class KnexUCDataStore {
|
|
|
123
127
|
await this.writeBulk([record], opts);
|
|
124
128
|
}
|
|
125
129
|
async writeBulk(records, opts) {
|
|
130
|
+
assertCan('write', this.s().uc_data_store_mode);
|
|
126
131
|
const query = this.client(this.s().uc_data_store_ucs_dataset_name).insert(records.map((r) => this.mapRecordToRow(r)));
|
|
127
132
|
if (opts?.tx) {
|
|
128
133
|
query.transacting(opts.tx.ref);
|
|
@@ -130,6 +135,7 @@ let KnexUCDataStore = class KnexUCDataStore {
|
|
|
130
135
|
await query;
|
|
131
136
|
}
|
|
132
137
|
async writeProjection(name, data, opts) {
|
|
138
|
+
assertCan('write', this.s().uc_data_store_mode);
|
|
133
139
|
const dataToInsert = {};
|
|
134
140
|
for (const [k, v] of Object.entries(data)) {
|
|
135
141
|
const specificBinding = opts?.specificBindings?.[k];
|
|
@@ -183,8 +189,10 @@ let KnexUCDataStore = class KnexUCDataStore {
|
|
|
183
189
|
return;
|
|
184
190
|
}
|
|
185
191
|
Array.isArray(value)
|
|
186
|
-
?
|
|
187
|
-
|
|
192
|
+
? // @ts-expect-error : https://github.com/knex/knex/pull/6428
|
|
193
|
+
query.whereIn(col, value)
|
|
194
|
+
: // @ts-expect-error : https://github.com/knex/knex/pull/6428
|
|
195
|
+
query.where(col, value);
|
|
188
196
|
}
|
|
189
197
|
mapRecordToRow(record) {
|
|
190
198
|
return {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Factory } from 'inversify';
|
|
2
2
|
import type { ClockManager, CryptoManager, Logger } from '../../std/index.js';
|
|
3
3
|
import type { UCClientConfirmManager } from '../client.js';
|
|
4
4
|
import type { UCData } from '../data.js';
|
|
@@ -23,10 +23,10 @@ export declare class SimpleUCManager implements UCManager {
|
|
|
23
23
|
private ucExecChecker;
|
|
24
24
|
private ucInputFilesProcessor;
|
|
25
25
|
private ucInputValidator;
|
|
26
|
-
private
|
|
27
|
-
private
|
|
26
|
+
private ucInitFactory;
|
|
27
|
+
private ucMainFactory;
|
|
28
28
|
private tx?;
|
|
29
|
-
constructor(ucClientConfirmManager: UCClientConfirmManager, clockManager: ClockManager, cryptoManager: CryptoManager, logger: Logger, ucDataStore: UCDataStore, ucExecChecker: UCExecChecker, ucInputFilesProcessor: UCInputFilesProcessor, ucInputValidator: UCInputValidator,
|
|
29
|
+
constructor(ucClientConfirmManager: UCClientConfirmManager, clockManager: ClockManager, cryptoManager: CryptoManager, logger: Logger, ucDataStore: UCDataStore, ucExecChecker: UCExecChecker, ucInputFilesProcessor: UCInputFilesProcessor, ucInputValidator: UCInputValidator, ucInitFactory: Factory<UCInit>, ucMainFactory: Factory<UCMain>);
|
|
30
30
|
commitTx(): Promise<void>;
|
|
31
31
|
confirmClient<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(uc: UC<I, OPI0, OPI1>): Promise<boolean>;
|
|
32
32
|
execClient<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(uc: UC<I, OPI0, OPI1>, opts?: UCManagerExecClientOpts<I, OPI0, OPI1>): Promise<UCOutputReader<I, OPI0, OPI1>>;
|
|
@@ -27,11 +27,11 @@ let SimpleUCManager = class SimpleUCManager {
|
|
|
27
27
|
ucExecChecker;
|
|
28
28
|
ucInputFilesProcessor;
|
|
29
29
|
ucInputValidator;
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
ucInitFactory;
|
|
31
|
+
ucMainFactory;
|
|
32
32
|
// WARNING : This property makes this class "thread unsafe". Be careful how you inject it into your components.
|
|
33
33
|
tx;
|
|
34
|
-
constructor(ucClientConfirmManager, clockManager, cryptoManager, logger, ucDataStore, ucExecChecker, ucInputFilesProcessor, ucInputValidator,
|
|
34
|
+
constructor(ucClientConfirmManager, clockManager, cryptoManager, logger, ucDataStore, ucExecChecker, ucInputFilesProcessor, ucInputValidator, ucInitFactory, ucMainFactory) {
|
|
35
35
|
this.ucClientConfirmManager = ucClientConfirmManager;
|
|
36
36
|
this.clockManager = clockManager;
|
|
37
37
|
this.cryptoManager = cryptoManager;
|
|
@@ -40,8 +40,8 @@ let SimpleUCManager = class SimpleUCManager {
|
|
|
40
40
|
this.ucExecChecker = ucExecChecker;
|
|
41
41
|
this.ucInputFilesProcessor = ucInputFilesProcessor;
|
|
42
42
|
this.ucInputValidator = ucInputValidator;
|
|
43
|
-
this.
|
|
44
|
-
this.
|
|
43
|
+
this.ucInitFactory = ucInitFactory;
|
|
44
|
+
this.ucMainFactory = ucMainFactory;
|
|
45
45
|
this.tx = undefined;
|
|
46
46
|
}
|
|
47
47
|
async commitTx() {
|
|
@@ -80,7 +80,7 @@ let SimpleUCManager = class SimpleUCManager {
|
|
|
80
80
|
if (server === undefined) {
|
|
81
81
|
await this.ucInputFilesProcessor.exec({ uc });
|
|
82
82
|
}
|
|
83
|
-
const main = (await this.
|
|
83
|
+
const main = (await this.ucMainFactory(client.main));
|
|
84
84
|
const streamOpts = opts?.stream;
|
|
85
85
|
const output = await main.exec({
|
|
86
86
|
opts: {
|
|
@@ -113,7 +113,7 @@ let SimpleUCManager = class SimpleUCManager {
|
|
|
113
113
|
}
|
|
114
114
|
this.ucInputValidator.exec({ uc });
|
|
115
115
|
await this.ucInputFilesProcessor.exec({ uc });
|
|
116
|
-
const main = (await this.
|
|
116
|
+
const main = (await this.ucMainFactory(server.main));
|
|
117
117
|
const output = main.exec({
|
|
118
118
|
opts: {
|
|
119
119
|
stream: opts?.stream,
|
|
@@ -132,7 +132,7 @@ let SimpleUCManager = class SimpleUCManager {
|
|
|
132
132
|
return;
|
|
133
133
|
}
|
|
134
134
|
this.logger.info('Initializing ucd', { name: metadata.name });
|
|
135
|
-
const init = (await this.
|
|
135
|
+
const init = (await this.ucInitFactory(server.init));
|
|
136
136
|
await init.exec();
|
|
137
137
|
}
|
|
138
138
|
async startTx() {
|
|
@@ -179,8 +179,8 @@ SimpleUCManager = __decorate([
|
|
|
179
179
|
__param(5, inject(UCExecChecker)),
|
|
180
180
|
__param(6, inject(UCInputFilesProcessor)),
|
|
181
181
|
__param(7, inject(UCInputValidator)),
|
|
182
|
-
__param(8, inject('
|
|
183
|
-
__param(9, inject('
|
|
182
|
+
__param(8, inject('Factory<UCInit>')),
|
|
183
|
+
__param(9, inject('Factory<UCMain>')),
|
|
184
184
|
__metadata("design:paramtypes", [Object, Object, Object, Object, Object, UCExecChecker,
|
|
185
185
|
UCInputFilesProcessor,
|
|
186
186
|
UCInputValidator, Function, Function])
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import type { FilePath } from '../dt/index.js';
|
|
2
2
|
import type { Settings } from '../std/index.js';
|
|
3
|
-
import type { UCDataStoreDatasetName } from './data-store.js';
|
|
3
|
+
import type { UCDataStoreDatasetName, UCDataStoreMode } from './data-store.js';
|
|
4
4
|
import type { UCFileInputFieldRefPrefix } from './file.js';
|
|
5
5
|
import type { UCName } from './metadata.js';
|
|
6
6
|
export interface UCSettings extends Settings {
|
|
7
|
+
/**
|
|
8
|
+
* The mode of the data store.
|
|
9
|
+
*
|
|
10
|
+
* @default UC_DEFAULT_SETTINGS.uc_data_store_mode
|
|
11
|
+
*/
|
|
12
|
+
uc_data_store_mode: UCDataStoreMode;
|
|
7
13
|
/**
|
|
8
14
|
* The name of the collection/table storing the persisted use cases in the data store
|
|
9
15
|
*
|
|
@@ -22,6 +28,7 @@ export interface UCSettings extends Settings {
|
|
|
22
28
|
uc_disabled_use_cases: UCName[];
|
|
23
29
|
/**
|
|
24
30
|
* The prefix of the file path when the use case has been processed, before storing
|
|
31
|
+
*
|
|
25
32
|
* @default UC_DEFAULT_SETTINGS.uc_file_ref_prefix
|
|
26
33
|
*/
|
|
27
34
|
uc_file_ref_prefix: UCFileInputFieldRefPrefix;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Factory } from 'inversify';
|
|
2
2
|
import type { ProductManifest } from '../../product/index.js';
|
|
3
3
|
import type { Configurable, SettingsManager, Worker } from '../../std/index.js';
|
|
4
4
|
import type { UCDefLifecycle } from '../def.js';
|
|
@@ -16,8 +16,8 @@ type S = Pick<UCSettings, 'uc_disabled_use_cases'>;
|
|
|
16
16
|
export declare class UCExecChecker implements Configurable<S>, Worker<Input, Promise<Output>> {
|
|
17
17
|
private productManifest;
|
|
18
18
|
private settingsManager;
|
|
19
|
-
private
|
|
20
|
-
constructor(productManifest: ProductManifest, settingsManager: SettingsManager<S>,
|
|
19
|
+
private ucPolicyFactory;
|
|
20
|
+
constructor(productManifest: ProductManifest, settingsManager: SettingsManager<S>, ucPolicyFactory: Factory<UCPolicy>);
|
|
21
21
|
s(): S;
|
|
22
22
|
exec<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>({ lifecycle, uc }: Input<I, OPI0, OPI1>): Promise<Output>;
|
|
23
23
|
}
|
|
@@ -14,11 +14,11 @@ import { inject, injectable } from 'inversify';
|
|
|
14
14
|
let UCExecChecker = class UCExecChecker {
|
|
15
15
|
productManifest;
|
|
16
16
|
settingsManager;
|
|
17
|
-
|
|
18
|
-
constructor(productManifest, settingsManager,
|
|
17
|
+
ucPolicyFactory;
|
|
18
|
+
constructor(productManifest, settingsManager, ucPolicyFactory) {
|
|
19
19
|
this.productManifest = productManifest;
|
|
20
20
|
this.settingsManager = settingsManager;
|
|
21
|
-
this.
|
|
21
|
+
this.ucPolicyFactory = ucPolicyFactory;
|
|
22
22
|
}
|
|
23
23
|
s() {
|
|
24
24
|
return {
|
|
@@ -47,7 +47,7 @@ let UCExecChecker = class UCExecChecker {
|
|
|
47
47
|
const ucds = app.ucds?.exclude ?? [];
|
|
48
48
|
output.allowed = !ucds.includes(metadata.name);
|
|
49
49
|
if (output.allowed) {
|
|
50
|
-
const policy = (await this.
|
|
50
|
+
const policy = (await this.ucPolicyFactory(client.policy));
|
|
51
51
|
const { allowed } = await policy.exec({ uc });
|
|
52
52
|
output.allowed = allowed;
|
|
53
53
|
}
|
|
@@ -68,7 +68,7 @@ UCExecChecker = __decorate([
|
|
|
68
68
|
injectable(),
|
|
69
69
|
__param(0, inject('ProductManifest')),
|
|
70
70
|
__param(1, inject('SettingsManager')),
|
|
71
|
-
__param(2, inject('
|
|
71
|
+
__param(2, inject('Factory<UCPolicy>')),
|
|
72
72
|
__metadata("design:paramtypes", [Object, Object, Function])
|
|
73
73
|
], UCExecChecker);
|
|
74
74
|
export { UCExecChecker };
|
|
@@ -12,7 +12,7 @@ export { SSEStreamManager } from './http/SSEStreamManager.js';
|
|
|
12
12
|
export { fmtSingleDataMsg, fmtSSEError, isSSEError, parseDataLine, SSE_HEADERS, } from './http/sse.js';
|
|
13
13
|
export { isClientError, isError, isServerError } from './http/status.js';
|
|
14
14
|
export type { HTTPDataEnvelope, HTTPReqData } from './http/types.js';
|
|
15
|
-
export {
|
|
15
|
+
export { bindFactory } from './ioc/bindFactory.js';
|
|
16
16
|
export { CONTAINER_OPTS } from './ioc/container.js';
|
|
17
17
|
export type { Class } from './ioc/types.js';
|
|
18
18
|
export { fmt as fmtNumber } from './numbers/fmt.js';
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export { fromQueryParams, toQueryParams } from './http/query-params.js';
|
|
|
7
7
|
export { SSEStreamManager } from './http/SSEStreamManager.js';
|
|
8
8
|
export { fmtSingleDataMsg, fmtSSEError, isSSEError, parseDataLine, SSE_HEADERS, } from './http/sse.js';
|
|
9
9
|
export { isClientError, isError, isServerError } from './http/status.js';
|
|
10
|
-
export {
|
|
10
|
+
export { bindFactory } from './ioc/bindFactory.js';
|
|
11
11
|
export { CONTAINER_OPTS } from './ioc/container.js';
|
|
12
12
|
export { fmt as fmtNumber } from './numbers/fmt.js';
|
|
13
13
|
export { baseFromSquareUnit, isSquareUnit, } from './numbers/units.js';
|