@beignet/core 0.0.1 → 0.0.2
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 +11 -0
- package/README.md +149 -4
- package/dist/application/index.d.ts +93 -9
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +11 -11
- package/dist/application/index.js.map +1 -1
- package/dist/client/client.d.ts +73 -12
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +37 -12
- package/dist/client/client.js.map +1 -1
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/types.d.ts +69 -8
- package/dist/client/types.d.ts.map +1 -1
- package/dist/config/index.d.ts +84 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +36 -0
- package/dist/config/index.js.map +1 -1
- package/dist/contracts/contract-builder.d.ts +49 -22
- package/dist/contracts/contract-builder.d.ts.map +1 -1
- package/dist/contracts/contract-builder.js +48 -21
- package/dist/contracts/contract-builder.js.map +1 -1
- package/dist/contracts/contract-group.d.ts +35 -19
- package/dist/contracts/contract-group.d.ts.map +1 -1
- package/dist/contracts/contract-group.js +35 -19
- package/dist/contracts/contract-group.js.map +1 -1
- package/dist/contracts/contract-like.d.ts +4 -4
- package/dist/contracts/contract-like.d.ts.map +1 -1
- package/dist/contracts/contract-like.js +2 -1
- package/dist/contracts/contract-like.js.map +1 -1
- package/dist/contracts/index.d.ts +28 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +12 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/openapi-meta.d.ts +8 -8
- package/dist/contracts/openapi-meta.d.ts.map +1 -1
- package/dist/contracts/path-template.d.ts +27 -0
- package/dist/contracts/path-template.d.ts.map +1 -1
- package/dist/contracts/path-template.js +6 -0
- package/dist/contracts/path-template.js.map +1 -1
- package/dist/contracts/types.d.ts +104 -10
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/contracts/types.js +15 -0
- package/dist/contracts/types.js.map +1 -1
- package/dist/contracts/utils.d.ts +6 -0
- package/dist/contracts/utils.d.ts.map +1 -1
- package/dist/contracts/utils.js +6 -0
- package/dist/contracts/utils.js.map +1 -1
- package/dist/domain/entity.d.ts +22 -11
- package/dist/domain/entity.d.ts.map +1 -1
- package/dist/domain/entity.js +5 -1
- package/dist/domain/entity.js.map +1 -1
- package/dist/domain/events.d.ts +5 -2
- package/dist/domain/events.d.ts.map +1 -1
- package/dist/domain/events.js +4 -1
- package/dist/domain/events.js.map +1 -1
- package/dist/domain/value-object.d.ts +19 -9
- package/dist/domain/value-object.d.ts.map +1 -1
- package/dist/domain/value-object.js +5 -1
- package/dist/domain/value-object.js.map +1 -1
- package/dist/errors/catalog.d.ts +40 -16
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/catalog.js +18 -7
- package/dist/errors/catalog.js.map +1 -1
- package/dist/errors/response.d.ts +16 -4
- package/dist/errors/response.d.ts.map +1 -1
- package/dist/errors/response.js +3 -3
- package/dist/errors/response.js.map +1 -1
- package/dist/errors/validation.d.ts +10 -1
- package/dist/errors/validation.d.ts.map +1 -1
- package/dist/errors/validation.js +3 -0
- package/dist/errors/validation.js.map +1 -1
- package/dist/events/index.d.ts +133 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +30 -0
- package/dist/events/index.js.map +1 -1
- package/dist/idempotency/index.d.ts +355 -0
- package/dist/idempotency/index.d.ts.map +1 -0
- package/dist/idempotency/index.js +360 -0
- package/dist/idempotency/index.js.map +1 -0
- package/dist/jobs/index.d.ts +110 -0
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +22 -0
- package/dist/jobs/index.js.map +1 -1
- package/dist/mail/index.d.ts +149 -0
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +30 -0
- package/dist/mail/index.js.map +1 -1
- package/dist/notifications/index.d.ts +369 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +310 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/openapi/index.d.ts +132 -16
- package/dist/openapi/index.d.ts.map +1 -1
- package/dist/openapi/index.js +1 -1
- package/dist/openapi/index.js.map +1 -1
- package/dist/outbox/index.d.ts +469 -0
- package/dist/outbox/index.d.ts.map +1 -0
- package/dist/outbox/index.js +482 -0
- package/dist/outbox/index.js.map +1 -0
- package/dist/pagination/index.d.ts +166 -0
- package/dist/pagination/index.d.ts.map +1 -0
- package/dist/pagination/index.js +96 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/ports/audit.d.ts +271 -0
- package/dist/ports/audit.d.ts.map +1 -1
- package/dist/ports/audit.js +128 -0
- package/dist/ports/audit.js.map +1 -1
- package/dist/ports/auth.d.ts +70 -0
- package/dist/ports/auth.d.ts.map +1 -1
- package/dist/ports/auth.js +30 -0
- package/dist/ports/auth.js.map +1 -1
- package/dist/ports/cache.d.ts +41 -0
- package/dist/ports/cache.d.ts.map +1 -1
- package/dist/ports/cache.js +10 -0
- package/dist/ports/cache.js.map +1 -1
- package/dist/ports/clock.d.ts +38 -0
- package/dist/ports/clock.d.ts.map +1 -1
- package/dist/ports/clock.js +20 -0
- package/dist/ports/clock.js.map +1 -1
- package/dist/ports/id-generator.d.ts +37 -0
- package/dist/ports/id-generator.d.ts.map +1 -1
- package/dist/ports/id-generator.js +22 -0
- package/dist/ports/id-generator.js.map +1 -1
- package/dist/ports/index.d.ts +83 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +41 -5
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/logger.d.ts +56 -0
- package/dist/ports/logger.d.ts.map +1 -1
- package/dist/ports/logger.js +17 -0
- package/dist/ports/logger.js.map +1 -1
- package/dist/ports/policy.d.ts +132 -0
- package/dist/ports/policy.d.ts.map +1 -1
- package/dist/ports/policy.js +45 -0
- package/dist/ports/policy.js.map +1 -1
- package/dist/ports/rate-limit.d.ts +25 -0
- package/dist/ports/rate-limit.d.ts.map +1 -1
- package/dist/ports/rate-limit.js +10 -0
- package/dist/ports/rate-limit.js.map +1 -1
- package/dist/ports/redaction.d.ts +101 -0
- package/dist/ports/redaction.d.ts.map +1 -1
- package/dist/ports/redaction.js +59 -0
- package/dist/ports/redaction.js.map +1 -1
- package/dist/ports/storage.d.ts +100 -0
- package/dist/ports/storage.d.ts.map +1 -1
- package/dist/ports/storage.js +10 -0
- package/dist/ports/storage.js.map +1 -1
- package/dist/ports/testing.d.ts +47 -0
- package/dist/ports/testing.d.ts.map +1 -1
- package/dist/ports/testing.js +23 -0
- package/dist/ports/testing.js.map +1 -1
- package/dist/ports/unit-of-work.d.ts +60 -3
- package/dist/ports/unit-of-work.d.ts.map +1 -1
- package/dist/ports/unit-of-work.js +11 -2
- package/dist/ports/unit-of-work.js.map +1 -1
- package/dist/providers/instrumentation.d.ts +204 -0
- package/dist/providers/instrumentation.d.ts.map +1 -1
- package/dist/providers/instrumentation.js +14 -0
- package/dist/providers/instrumentation.js.map +1 -1
- package/dist/providers/provider.d.ts +14 -1
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/provider.js.map +1 -1
- package/dist/schedules/index.d.ts +246 -0
- package/dist/schedules/index.d.ts.map +1 -1
- package/dist/schedules/index.js +27 -0
- package/dist/schedules/index.js.map +1 -1
- package/dist/server/health.d.ts +14 -5
- package/dist/server/health.d.ts.map +1 -1
- package/dist/server/health.js +5 -2
- package/dist/server/health.js.map +1 -1
- package/dist/server/hooks/auth.d.ts +57 -0
- package/dist/server/hooks/auth.d.ts.map +1 -1
- package/dist/server/hooks/auth.js.map +1 -1
- package/dist/server/hooks/cors.d.ts +27 -0
- package/dist/server/hooks/cors.d.ts.map +1 -1
- package/dist/server/hooks/cors.js +12 -0
- package/dist/server/hooks/cors.js.map +1 -1
- package/dist/server/hooks/errors.d.ts +15 -6
- package/dist/server/hooks/errors.d.ts.map +1 -1
- package/dist/server/hooks/errors.js.map +1 -1
- package/dist/server/hooks/index.d.ts +3 -0
- package/dist/server/hooks/index.d.ts.map +1 -1
- package/dist/server/hooks/index.js +3 -0
- package/dist/server/hooks/index.js.map +1 -1
- package/dist/server/hooks/logging.d.ts +36 -0
- package/dist/server/hooks/logging.d.ts.map +1 -1
- package/dist/server/hooks/logging.js +6 -0
- package/dist/server/hooks/logging.js.map +1 -1
- package/dist/server/hooks/rate-limit.d.ts +33 -0
- package/dist/server/hooks/rate-limit.d.ts.map +1 -1
- package/dist/server/hooks/rate-limit.js +11 -0
- package/dist/server/hooks/rate-limit.js.map +1 -1
- package/dist/server/http.d.ts +170 -0
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/index.d.ts +18 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +6 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/openapi.d.ts +5 -3
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/openapi.js +4 -2
- package/dist/server/openapi.js.map +1 -1
- package/dist/server/providers/loadProviderConfig.d.ts +9 -0
- package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
- package/dist/server/providers/loadProviderConfig.js +9 -0
- package/dist/server/providers/loadProviderConfig.js.map +1 -1
- package/dist/server/server.d.ts +107 -8
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +27 -7
- package/dist/server/server.js.map +1 -1
- package/dist/testing/index.d.ts +167 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +119 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +21 -1
- package/src/application/index.ts +85 -22
- package/src/client/client.ts +73 -12
- package/src/client/index.ts +12 -0
- package/src/client/types.ts +70 -9
- package/src/config/index.ts +86 -0
- package/src/contracts/contract-builder.ts +49 -22
- package/src/contracts/contract-group.ts +35 -19
- package/src/contracts/contract-like.ts +4 -4
- package/src/contracts/index.ts +28 -1
- package/src/contracts/openapi-meta.ts +8 -8
- package/src/contracts/path-template.ts +27 -0
- package/src/contracts/types.ts +111 -10
- package/src/contracts/utils.ts +6 -0
- package/src/domain/entity.ts +22 -11
- package/src/domain/events.ts +5 -2
- package/src/domain/value-object.ts +19 -9
- package/src/errors/catalog.ts +40 -16
- package/src/errors/response.ts +16 -4
- package/src/errors/validation.ts +10 -1
- package/src/events/index.ts +134 -0
- package/src/idempotency/index.ts +767 -0
- package/src/jobs/index.ts +111 -0
- package/src/mail/index.ts +149 -0
- package/src/notifications/index.ts +771 -0
- package/src/openapi/index.ts +133 -16
- package/src/outbox/index.ts +1024 -0
- package/src/pagination/index.ts +278 -0
- package/src/ports/audit.ts +271 -0
- package/src/ports/auth.ts +70 -0
- package/src/ports/cache.ts +41 -0
- package/src/ports/clock.ts +38 -0
- package/src/ports/id-generator.ts +37 -0
- package/src/ports/index.ts +106 -11
- package/src/ports/logger.ts +56 -0
- package/src/ports/policy.ts +133 -0
- package/src/ports/rate-limit.ts +25 -0
- package/src/ports/redaction.ts +101 -0
- package/src/ports/storage.ts +100 -0
- package/src/ports/testing.ts +47 -0
- package/src/ports/unit-of-work.ts +60 -3
- package/src/providers/instrumentation.ts +204 -0
- package/src/providers/provider.ts +14 -1
- package/src/schedules/index.ts +247 -0
- package/src/server/health.ts +14 -5
- package/src/server/hooks/auth.ts +58 -0
- package/src/server/hooks/cors.ts +27 -0
- package/src/server/hooks/errors.ts +15 -6
- package/src/server/hooks/index.ts +3 -0
- package/src/server/hooks/logging.ts +36 -0
- package/src/server/hooks/rate-limit.ts +33 -0
- package/src/server/http.ts +170 -1
- package/src/server/index.ts +18 -1
- package/src/server/openapi.ts +5 -3
- package/src/server/providers/loadProviderConfig.ts +9 -0
- package/src/server/server.ts +107 -9
- package/src/testing/index.ts +337 -0
package/dist/ports/redaction.js
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default replacement used when a sensitive field is redacted.
|
|
3
|
+
*/
|
|
1
4
|
export const DEFAULT_REDACTED_VALUE = "[redacted]";
|
|
5
|
+
/**
|
|
6
|
+
* Default replacement used when recursive redaction exceeds `maxDepth`.
|
|
7
|
+
*/
|
|
2
8
|
export const DEFAULT_TRUNCATED_VALUE = "[truncated]";
|
|
9
|
+
/**
|
|
10
|
+
* Default replacement used when recursive redaction finds a circular object.
|
|
11
|
+
*/
|
|
3
12
|
export const DEFAULT_CIRCULAR_VALUE = "[circular]";
|
|
13
|
+
/**
|
|
14
|
+
* Exact header/object keys redacted by default.
|
|
15
|
+
*/
|
|
4
16
|
export const DEFAULT_SENSITIVE_KEYS = [
|
|
5
17
|
"authorization",
|
|
6
18
|
"cookie",
|
|
@@ -12,6 +24,11 @@ export const DEFAULT_SENSITIVE_KEYS = [
|
|
|
12
24
|
"refresh-token",
|
|
13
25
|
"credentials",
|
|
14
26
|
];
|
|
27
|
+
/**
|
|
28
|
+
* Key substrings redacted by default.
|
|
29
|
+
*
|
|
30
|
+
* Matching is case-insensitive.
|
|
31
|
+
*/
|
|
15
32
|
export const DEFAULT_SENSITIVE_KEY_TERMS = [
|
|
16
33
|
"token",
|
|
17
34
|
"password",
|
|
@@ -23,6 +40,17 @@ export const DEFAULT_SENSITIVE_KEY_TERMS = [
|
|
|
23
40
|
function normalizeKey(key) {
|
|
24
41
|
return key.toLowerCase();
|
|
25
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Return whether a key should be redacted.
|
|
45
|
+
*
|
|
46
|
+
* Checks default exact keys, default key terms, user-provided exact keys,
|
|
47
|
+
* user-provided key terms, and finally `shouldRedactKey`.
|
|
48
|
+
*
|
|
49
|
+
* @param key - Object or header key to evaluate.
|
|
50
|
+
* @param options - Optional redaction behavior.
|
|
51
|
+
* @param context - Optional path/value context for custom decisions.
|
|
52
|
+
* @returns `true` when the key should be replaced.
|
|
53
|
+
*/
|
|
26
54
|
export function isSensitiveKey(key, options = {}, context) {
|
|
27
55
|
const normalized = normalizeKey(key);
|
|
28
56
|
const exactKeys = new Set([...DEFAULT_SENSITIVE_KEYS, ...(options.sensitiveKeys ?? [])].map(normalizeKey));
|
|
@@ -91,6 +119,20 @@ function redactUnknown(value, options, path, seen) {
|
|
|
91
119
|
seen.delete(objectValue);
|
|
92
120
|
return output;
|
|
93
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Recursively redact a value using Beignet's default sensitive-key rules plus
|
|
124
|
+
* any custom rules in `options`.
|
|
125
|
+
*
|
|
126
|
+
* This returns a copy for objects and arrays. Primitive values are returned as
|
|
127
|
+
* is unless they are under a sensitive key. Some runtime shapes are normalized:
|
|
128
|
+
* `bigint` becomes a string, `Error` becomes a plain object with `name`,
|
|
129
|
+
* `message`, and `stack`, and class instances are copied from enumerable
|
|
130
|
+
* entries.
|
|
131
|
+
*
|
|
132
|
+
* @param value - Value to redact.
|
|
133
|
+
* @param options - Optional redaction behavior.
|
|
134
|
+
* @returns A redacted value typed as the input type for caller convenience.
|
|
135
|
+
*/
|
|
94
136
|
export function redactValue(value, options = {}) {
|
|
95
137
|
return redactUnknown(value, options, [], new WeakSet());
|
|
96
138
|
}
|
|
@@ -108,6 +150,17 @@ function headerEntries(headers) {
|
|
|
108
150
|
}
|
|
109
151
|
return Object.entries(headers);
|
|
110
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Redact headers into a plain object.
|
|
155
|
+
*
|
|
156
|
+
* Sensitive header names such as `authorization`, `cookie`, and token-like keys
|
|
157
|
+
* are replaced. Non-sensitive values are passed through `redactValue(...)` so
|
|
158
|
+
* nested object values are still sanitized.
|
|
159
|
+
*
|
|
160
|
+
* @param headers - Headers object, iterable entries, or plain object.
|
|
161
|
+
* @param options - Optional redaction behavior.
|
|
162
|
+
* @returns A plain object with redacted header values.
|
|
163
|
+
*/
|
|
111
164
|
export function redactHeaders(headers, options = {}) {
|
|
112
165
|
const output = {};
|
|
113
166
|
for (const [key, value] of headerEntries(headers)) {
|
|
@@ -120,6 +173,12 @@ export function redactHeaders(headers, options = {}) {
|
|
|
120
173
|
}
|
|
121
174
|
return output;
|
|
122
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Create a reusable redactor function from options.
|
|
178
|
+
*
|
|
179
|
+
* @param options - Redaction behavior to apply on each call.
|
|
180
|
+
* @returns A function that redacts values with the provided options.
|
|
181
|
+
*/
|
|
123
182
|
export function createRedactor(options = {}) {
|
|
124
183
|
return (value) => redactValue(value, options);
|
|
125
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/ports/redaction.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AACnD,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AACrD,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAEnD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,eAAe;IACf,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,SAAS;IACT,QAAQ;IACR,cAAc;IACd,eAAe;IACf,aAAa;CACL,CAAC;AAEX,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,OAAO;IACP,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,YAAY;CACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/ports/redaction.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AACnD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AACrD;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,eAAe;IACf,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,SAAS;IACT,QAAQ;IACR,cAAc;IACd,eAAe;IACf,aAAa;CACL,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,OAAO;IACP,UAAU;IACV,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,YAAY;CACJ,CAAC;AAmEX,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,UAA4B,EAAE,EAC9B,OAA+C;IAE/C,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,CAAC,GAAG,sBAAsB,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAC/D,YAAY,CACb,CACF,CAAC;IACF,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,MAAM,KAAK,GAAG;QACZ,GAAG,2BAA2B;QAC9B,GAAG,CAAC,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAC;KACrC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACpB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjE,OAAO,CACL,OAAO,CAAC,eAAe,EAAE,CAAC;QACxB,GAAG;QACH,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE;QACzB,KAAK,EAAE,OAAO,EAAE,KAAK;KACtB,CAAC,IAAI,KAAK,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,KAAc,EACd,OAAyB,EACzB,IAAuB,EACvB,IAAqB;IAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,cAAc,IAAI,uBAAuB,CAAC;IAC3D,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAExD,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;IAC/B,IACE,SAAS,KAAK,QAAQ;QACtB,SAAS,KAAK,QAAQ;QACtB,SAAS,KAAK,SAAS,EACvB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,WAAW,GAAG,KAAe,CAAC;IACpC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,aAAa,IAAI,sBAAsB,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAEtB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACvC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAC7D,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;YACzC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC;YACpB,KAAK,EAAE,WAAW;SACnB,CAAC;YACA,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,sBAAsB,CAAC;YACjD,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CACzB,KAAQ,EACR,UAA4B,EAAE;IAE9B,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,OAAO,EAAE,CAAM,CAAC;AAC/D,CAAC;AAED,SAAS,aAAa,CACpB,OAA0B;IAE1B,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,YAAY,OAAO,EAAE,CAAC;QACjE,MAAM,OAAO,GAAsC,EAAE,CAAC;QACtD,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IACE,OAAQ,OAA2C,CAAC,MAAM,CAAC,QAAQ,CAAC;QACpE,UAAU,EACV,CAAC;QACD,OAAO,OAA+C,CAAC;IACzD,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA0B,EAC1B,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE;YACzC,IAAI,EAAE,CAAC,GAAG,CAAC;YACX,KAAK;SACN,CAAC;YACA,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,sBAAsB,CAAC;YACjD,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,UAA4B,EAAE;IAE9B,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/ports/storage.d.ts
CHANGED
|
@@ -1,21 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Object visibility understood by storage ports.
|
|
3
|
+
*/
|
|
1
4
|
export type StorageVisibility = "private" | "public";
|
|
5
|
+
/**
|
|
6
|
+
* String metadata stored alongside an object.
|
|
7
|
+
*/
|
|
2
8
|
export type StorageMetadata = Record<string, string>;
|
|
9
|
+
/**
|
|
10
|
+
* Body types accepted by `StoragePort.put(...)`.
|
|
11
|
+
*/
|
|
3
12
|
export type StorageBody = string | ArrayBuffer | Uint8Array | Blob | ReadableStream<Uint8Array>;
|
|
13
|
+
/**
|
|
14
|
+
* Options for writing an object to storage.
|
|
15
|
+
*/
|
|
4
16
|
export interface StoragePutOptions {
|
|
17
|
+
/**
|
|
18
|
+
* MIME content type stored with the object.
|
|
19
|
+
*/
|
|
5
20
|
contentType?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Cache-Control value stored with the object.
|
|
23
|
+
*/
|
|
6
24
|
cacheControl?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Provider metadata stored with the object.
|
|
27
|
+
*/
|
|
7
28
|
metadata?: StorageMetadata;
|
|
29
|
+
/**
|
|
30
|
+
* Whether the object may receive a public URL.
|
|
31
|
+
*/
|
|
8
32
|
visibility?: StorageVisibility;
|
|
9
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Metadata for an object in storage.
|
|
36
|
+
*/
|
|
10
37
|
export interface StorageObject {
|
|
38
|
+
/**
|
|
39
|
+
* Object key. Keys are relative object-store paths, not filesystem paths or
|
|
40
|
+
* public URLs.
|
|
41
|
+
*/
|
|
11
42
|
key: string;
|
|
43
|
+
/**
|
|
44
|
+
* Object size in bytes.
|
|
45
|
+
*/
|
|
12
46
|
size: number;
|
|
13
47
|
contentType?: string;
|
|
14
48
|
cacheControl?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Provider metadata stored with the object.
|
|
51
|
+
*/
|
|
15
52
|
metadata: StorageMetadata;
|
|
53
|
+
/**
|
|
54
|
+
* Object visibility.
|
|
55
|
+
*/
|
|
16
56
|
visibility: StorageVisibility;
|
|
57
|
+
/**
|
|
58
|
+
* Last modification timestamp.
|
|
59
|
+
*/
|
|
17
60
|
lastModified: Date;
|
|
18
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Object metadata plus a one-shot readable body.
|
|
64
|
+
*
|
|
65
|
+
* Like Fetch response bodies, storage bodies can be consumed once. Call `get`
|
|
66
|
+
* again if you need another reader.
|
|
67
|
+
*/
|
|
19
68
|
export interface StorageObjectBody extends StorageObject {
|
|
20
69
|
/**
|
|
21
70
|
* Whether this object body has already been consumed. Like Fetch response
|
|
@@ -23,19 +72,60 @@ export interface StorageObjectBody extends StorageObject {
|
|
|
23
72
|
* buffering them.
|
|
24
73
|
*/
|
|
25
74
|
readonly bodyUsed: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Consume the object as a readable byte stream.
|
|
77
|
+
*/
|
|
26
78
|
stream(): ReadableStream<Uint8Array>;
|
|
79
|
+
/**
|
|
80
|
+
* Consume the object as bytes.
|
|
81
|
+
*/
|
|
27
82
|
bytes(): Promise<Uint8Array>;
|
|
83
|
+
/**
|
|
84
|
+
* Consume the object as an ArrayBuffer.
|
|
85
|
+
*/
|
|
28
86
|
arrayBuffer(): Promise<ArrayBuffer>;
|
|
87
|
+
/**
|
|
88
|
+
* Consume the object as UTF-8 text.
|
|
89
|
+
*/
|
|
29
90
|
text(): Promise<string>;
|
|
30
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* App-facing object storage port.
|
|
94
|
+
*
|
|
95
|
+
* Implement this with S3, R2, local disk, or a test adapter. Application code
|
|
96
|
+
* should depend on this interface instead of provider-specific SDKs.
|
|
97
|
+
*/
|
|
31
98
|
export interface StoragePort {
|
|
99
|
+
/**
|
|
100
|
+
* Store an object and return its metadata.
|
|
101
|
+
*/
|
|
32
102
|
put(key: string, body: StorageBody, options?: StoragePutOptions): Promise<StorageObject>;
|
|
103
|
+
/**
|
|
104
|
+
* Return object metadata and body, or `null` when missing.
|
|
105
|
+
*/
|
|
33
106
|
get(key: string): Promise<StorageObjectBody | null>;
|
|
107
|
+
/**
|
|
108
|
+
* Return object metadata without its body, or `null` when missing.
|
|
109
|
+
*/
|
|
34
110
|
stat(key: string): Promise<StorageObject | null>;
|
|
111
|
+
/**
|
|
112
|
+
* Delete an object.
|
|
113
|
+
*
|
|
114
|
+
* @returns `true` when the object existed.
|
|
115
|
+
*/
|
|
35
116
|
delete(key: string): Promise<boolean>;
|
|
117
|
+
/**
|
|
118
|
+
* Return whether an object exists.
|
|
119
|
+
*/
|
|
36
120
|
exists(key: string): Promise<boolean>;
|
|
121
|
+
/**
|
|
122
|
+
* Return a public URL when the object is public and the adapter can build one.
|
|
123
|
+
*/
|
|
37
124
|
publicUrl(key: string): Promise<string | null>;
|
|
38
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Options for `createMemoryStorage(...)`.
|
|
128
|
+
*/
|
|
39
129
|
export interface MemoryStorageOptions {
|
|
40
130
|
/**
|
|
41
131
|
* Base URL used by `publicUrl(...)` for objects written with
|
|
@@ -43,5 +133,15 @@ export interface MemoryStorageOptions {
|
|
|
43
133
|
*/
|
|
44
134
|
publicBaseUrl?: string;
|
|
45
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Create an in-memory object storage adapter for tests, examples, and
|
|
138
|
+
* single-process development.
|
|
139
|
+
*
|
|
140
|
+
* This adapter validates object keys using Beignet's storage key rules. It is
|
|
141
|
+
* not durable and does not share objects across processes.
|
|
142
|
+
*
|
|
143
|
+
* @param options - Optional public URL base for public objects.
|
|
144
|
+
* @returns A storage port backed by a local `Map`.
|
|
145
|
+
*/
|
|
46
146
|
export declare function createMemoryStorage(options?: MemoryStorageOptions): StoragePort;
|
|
47
147
|
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/ports/storage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,WAAW,GACX,UAAU,GACV,IAAI,GACJ,cAAc,CAAC,UAAU,CAAC,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CACD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAiKD,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,WAAW,CA0Db"}
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/ports/storage.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,WAAW,GACX,UAAU,GACV,IAAI,GACJ,cAAc,CAAC,UAAU,CAAC,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,UAAU,EAAE,iBAAiB,CAAC;IAC9B;;OAEG;IACH,YAAY,EAAE,IAAI,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,CACD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACpD;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACjD;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAiKD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,WAAW,CA0Db"}
|
package/dist/ports/storage.js
CHANGED
|
@@ -127,6 +127,16 @@ function joinPublicUrl(baseUrl, key) {
|
|
|
127
127
|
.join("/");
|
|
128
128
|
return `${base}/${encodedKey}`;
|
|
129
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Create an in-memory object storage adapter for tests, examples, and
|
|
132
|
+
* single-process development.
|
|
133
|
+
*
|
|
134
|
+
* This adapter validates object keys using Beignet's storage key rules. It is
|
|
135
|
+
* not durable and does not share objects across processes.
|
|
136
|
+
*
|
|
137
|
+
* @param options - Optional public URL base for public objects.
|
|
138
|
+
* @returns A storage port backed by a local `Map`.
|
|
139
|
+
*/
|
|
130
140
|
export function createMemoryStorage(options = {}) {
|
|
131
141
|
const objects = new Map();
|
|
132
142
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/ports/storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/ports/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/ports/testing.d.ts
CHANGED
|
@@ -30,12 +30,18 @@ export declare function createRecordingEventBus(): {
|
|
|
30
30
|
bus: EventBusPort;
|
|
31
31
|
events: RecordedEvent[];
|
|
32
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* Expected outcome for one policy matrix case.
|
|
35
|
+
*/
|
|
33
36
|
export type PolicyMatrixExpectation = "allow" | "deny";
|
|
34
37
|
type PolicyMatrixSubject<TResolver> = PolicySubjectArgs<TResolver> extends [subject: infer Subject] ? {
|
|
35
38
|
subject: Subject;
|
|
36
39
|
} : {
|
|
37
40
|
subject?: never;
|
|
38
41
|
};
|
|
42
|
+
/**
|
|
43
|
+
* One typed authorization matrix case for a policy ability.
|
|
44
|
+
*/
|
|
39
45
|
export type PolicyMatrixCase<TContext, TPolicies extends readonly PolicyDefinition[] = readonly PolicyDefinition[]> = {
|
|
40
46
|
[TAbility in keyof PolicyMapFromDefinitions<TPolicies> & string]: {
|
|
41
47
|
name: string;
|
|
@@ -46,6 +52,9 @@ export type PolicyMatrixCase<TContext, TPolicies extends readonly PolicyDefiniti
|
|
|
46
52
|
code?: string;
|
|
47
53
|
} & PolicyMatrixSubject<PolicyMapFromDefinitions<TPolicies>[TAbility]>;
|
|
48
54
|
}[keyof PolicyMapFromDefinitions<TPolicies> & string];
|
|
55
|
+
/**
|
|
56
|
+
* Untyped policy matrix case used internally for failure reporting.
|
|
57
|
+
*/
|
|
49
58
|
export type UntypedPolicyMatrixCase<TContext> = {
|
|
50
59
|
name: string;
|
|
51
60
|
ctx: TContext;
|
|
@@ -55,19 +64,57 @@ export type UntypedPolicyMatrixCase<TContext> = {
|
|
|
55
64
|
reason?: string;
|
|
56
65
|
code?: string;
|
|
57
66
|
};
|
|
67
|
+
/**
|
|
68
|
+
* Result for one evaluated policy matrix case.
|
|
69
|
+
*/
|
|
58
70
|
export type PolicyMatrixResult<TContext, TPolicies extends readonly PolicyDefinition[] = readonly PolicyDefinition[]> = {
|
|
59
71
|
case: PolicyMatrixCase<TContext, TPolicies>;
|
|
60
72
|
decision: GateDecision;
|
|
61
73
|
passed: boolean;
|
|
62
74
|
message?: string;
|
|
63
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* Test helper for evaluating authorization policies.
|
|
78
|
+
*/
|
|
64
79
|
export type PolicyTester<TContext, TPolicies extends readonly PolicyDefinition[]> = {
|
|
80
|
+
/**
|
|
81
|
+
* Gate created from the same policies, useful for direct assertions.
|
|
82
|
+
*/
|
|
65
83
|
gate: GatePort<TContext, TPolicies>;
|
|
84
|
+
/**
|
|
85
|
+
* Evaluate cases and return structured pass/fail results.
|
|
86
|
+
*/
|
|
66
87
|
evaluateMatrix(cases: readonly PolicyMatrixCase<TContext, TPolicies>[]): Promise<PolicyMatrixResult<TContext, TPolicies>[]>;
|
|
88
|
+
/**
|
|
89
|
+
* Evaluate cases and throw a combined assertion error when any fail.
|
|
90
|
+
*/
|
|
67
91
|
assertMatrix(cases: readonly PolicyMatrixCase<TContext, TPolicies>[]): Promise<void>;
|
|
68
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* Create a policy tester from the same options used by `createGate(...)`.
|
|
95
|
+
*
|
|
96
|
+
* Use this for table-driven authorization tests that document who can perform
|
|
97
|
+
* each ability against which subject.
|
|
98
|
+
*
|
|
99
|
+
* @param options - Policy definitions and optional denial mapper.
|
|
100
|
+
* @returns A policy tester with a gate plus matrix helpers.
|
|
101
|
+
*/
|
|
69
102
|
export declare function createPolicyTester<const TPolicies extends readonly PolicyDefinition[]>(options: CreateGateOptions<PolicyContextFromDefinitions<TPolicies>, TPolicies>): PolicyTester<PolicyContextFromDefinitions<TPolicies>, TPolicies>;
|
|
103
|
+
/**
|
|
104
|
+
* Evaluate a table of policy cases without throwing.
|
|
105
|
+
*
|
|
106
|
+
* @param gate - Gate under test.
|
|
107
|
+
* @param cases - Matrix cases to evaluate.
|
|
108
|
+
* @returns Structured result for each case.
|
|
109
|
+
*/
|
|
70
110
|
export declare function evaluatePolicyMatrix<TContext, TPolicies extends readonly PolicyDefinition[]>(gate: GatePort<TContext, TPolicies>, cases: readonly PolicyMatrixCase<TContext, TPolicies>[]): Promise<PolicyMatrixResult<TContext, TPolicies>[]>;
|
|
111
|
+
/**
|
|
112
|
+
* Assert that all policy matrix cases pass.
|
|
113
|
+
*
|
|
114
|
+
* @param gate - Gate under test.
|
|
115
|
+
* @param cases - Matrix cases to evaluate.
|
|
116
|
+
* @throws Combined error listing every failed case.
|
|
117
|
+
*/
|
|
71
118
|
export declare function assertPolicyMatrix<TContext, TPolicies extends readonly PolicyDefinition[]>(gate: GatePort<TContext, TPolicies>, cases: readonly PolicyMatrixCase<TContext, TPolicies>[]): Promise<void>;
|
|
72
119
|
export {};
|
|
73
120
|
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/ports/testing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/ports/testing.ts"],"names":[],"mappings":"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"}
|
package/dist/ports/testing.js
CHANGED
|
@@ -30,6 +30,15 @@ export function createRecordingEventBus() {
|
|
|
30
30
|
};
|
|
31
31
|
return { bus, events };
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a policy tester from the same options used by `createGate(...)`.
|
|
35
|
+
*
|
|
36
|
+
* Use this for table-driven authorization tests that document who can perform
|
|
37
|
+
* each ability against which subject.
|
|
38
|
+
*
|
|
39
|
+
* @param options - Policy definitions and optional denial mapper.
|
|
40
|
+
* @returns A policy tester with a gate plus matrix helpers.
|
|
41
|
+
*/
|
|
33
42
|
export function createPolicyTester(options) {
|
|
34
43
|
const gate = createGate(options);
|
|
35
44
|
return {
|
|
@@ -38,6 +47,13 @@ export function createPolicyTester(options) {
|
|
|
38
47
|
assertMatrix: (cases) => assertPolicyMatrix(gate, cases),
|
|
39
48
|
};
|
|
40
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Evaluate a table of policy cases without throwing.
|
|
52
|
+
*
|
|
53
|
+
* @param gate - Gate under test.
|
|
54
|
+
* @param cases - Matrix cases to evaluate.
|
|
55
|
+
* @returns Structured result for each case.
|
|
56
|
+
*/
|
|
41
57
|
export async function evaluatePolicyMatrix(gate, cases) {
|
|
42
58
|
const results = [];
|
|
43
59
|
for (const matrixCase of cases) {
|
|
@@ -54,6 +70,13 @@ export async function evaluatePolicyMatrix(gate, cases) {
|
|
|
54
70
|
}
|
|
55
71
|
return results;
|
|
56
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Assert that all policy matrix cases pass.
|
|
75
|
+
*
|
|
76
|
+
* @param gate - Gate under test.
|
|
77
|
+
* @param cases - Matrix cases to evaluate.
|
|
78
|
+
* @throws Combined error listing every failed case.
|
|
79
|
+
*/
|
|
57
80
|
export async function assertPolicyMatrix(gate, cases) {
|
|
58
81
|
const results = await evaluatePolicyMatrix(gate, cases);
|
|
59
82
|
const failures = results.filter((result) => !result.passed);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/ports/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,UAAU,GAOX,MAAM,UAAU,CAAC;AAUlB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,uBAAuB;IAIrC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,GAAG,GAAiB;QACxB,OAAO,CAAC,KAAK,EAAE,OAAO;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,SAAS;YACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/ports/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,UAAU,GAOX,MAAM,UAAU,CAAC;AAUlB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,uBAAuB;IAIrC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,GAAG,GAAiB;QACxB,OAAO,CAAC,KAAK,EAAE,OAAO;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,SAAS;YACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC;AAgFD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAGhC,OAGC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAEjC,OAAO;QACL,IAAI;QACJ,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;QAC5D,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC;KACzD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAIxC,IAAmC,EACnC,KAAuD;IAEvD,MAAM,OAAO,GAA8C,EAAE,CAAC;IAE9D,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE5D,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,QAAQ;YACR,MAAM;YACN,OAAO,EAAE,MAAM;gBACb,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,0BAA0B,CAAC,UAAU,EAAE,QAAQ,CAAC;SACrD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAItC,IAAmC,EACnC,KAAuD;IAEvD,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,MAAM,IAAI,KAAK,CACb;QACE,4BAA4B,QAAQ,CAAC,MAAM,QACzC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC/B,GAAG;QACH,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;KACrD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,uBAAuB,CAIpC,IAAmC,EACnC,UAAiD;IAEjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAuC,CAAC;IAE7D,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,sBAAsB,CAC7B,UAA6C,EAC7C,QAAsB;IAEtB,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACvE,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,QAAQ,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAElC,OAAO,CACL,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC;QAC7D,CAAC,CAAC,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,CACxD,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,UAA6C,EAC7C,QAAsB;IAEtB,MAAM,QAAQ,GAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IACtE,IAAI,UAAU,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO;QAC7B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC;YACE,MAAM;YACN,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS;YAC3D,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS;SACtD;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAElB,OAAO,GAAG,UAAU,CAAC,IAAI,cAAc,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,MAAM,GAAG,CAAC;AACpF,CAAC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { DomainEventDef, EventBusPort, InferEventPayload } from "./events";
|
|
2
2
|
type MaybePromise<T> = T | Promise<T>;
|
|
3
|
+
/**
|
|
4
|
+
* Work function executed inside a Unit of Work.
|
|
5
|
+
*
|
|
6
|
+
* `tx` contains transaction-scoped app ports, usually repositories plus
|
|
7
|
+
* side-effect recorders such as `events`, `jobs`, or `audit`.
|
|
8
|
+
*/
|
|
3
9
|
export type UnitOfWorkCallback<TxPorts, Result> = (tx: TxPorts) => MaybePromise<Result>;
|
|
4
10
|
/**
|
|
5
11
|
* A transaction boundary for application workflows.
|
|
@@ -9,8 +15,16 @@ export type UnitOfWorkCallback<TxPorts, Result> = (tx: TxPorts) => MaybePromise<
|
|
|
9
15
|
* `createNoopUnitOfWork`.
|
|
10
16
|
*/
|
|
11
17
|
export interface UnitOfWorkPort<TxPorts> {
|
|
18
|
+
/**
|
|
19
|
+
* Run application work with transaction-scoped ports.
|
|
20
|
+
*
|
|
21
|
+
* Durable implementations should commit only if this callback resolves.
|
|
22
|
+
*/
|
|
12
23
|
transaction<Result>(work: UnitOfWorkCallback<TxPorts, Result>): Promise<Result>;
|
|
13
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Hooks for `createNoopUnitOfWork(...)`.
|
|
27
|
+
*/
|
|
14
28
|
export interface NoopUnitOfWorkOptions<TxPorts> {
|
|
15
29
|
/**
|
|
16
30
|
* Runs after the callback completes successfully.
|
|
@@ -26,17 +40,51 @@ export interface NoopUnitOfWorkOptions<TxPorts> {
|
|
|
26
40
|
*/
|
|
27
41
|
afterRollback?: (error: unknown, tx: TxPorts) => MaybePromise<void>;
|
|
28
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Domain event captured by a buffered event recorder.
|
|
45
|
+
*/
|
|
29
46
|
export interface RecordedDomainEvent {
|
|
47
|
+
/**
|
|
48
|
+
* Event definition used to validate the payload before publishing.
|
|
49
|
+
*/
|
|
30
50
|
event: DomainEventDef;
|
|
51
|
+
/**
|
|
52
|
+
* Stable event name.
|
|
53
|
+
*/
|
|
31
54
|
eventName: string;
|
|
55
|
+
/**
|
|
56
|
+
* Unparsed payload recorded during the transaction.
|
|
57
|
+
*/
|
|
32
58
|
payload: unknown;
|
|
33
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Transaction-scoped port used to record domain events.
|
|
62
|
+
*
|
|
63
|
+
* Use cases record events here during the Unit of Work. The adapter decides
|
|
64
|
+
* whether to publish after commit, enqueue through an outbox, or buffer for a
|
|
65
|
+
* test assertion.
|
|
66
|
+
*/
|
|
34
67
|
export interface DomainEventRecorderPort {
|
|
35
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Record a domain event payload.
|
|
70
|
+
*/
|
|
71
|
+
record<E extends DomainEventDef>(event: E, payload: InferEventPayload<E>): Promise<void> | void;
|
|
36
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* In-memory event recorder that can be inspected, cleared, or flushed.
|
|
75
|
+
*/
|
|
37
76
|
export interface BufferedDomainEventRecorder extends DomainEventRecorderPort {
|
|
77
|
+
/**
|
|
78
|
+
* Return recorded events without clearing them.
|
|
79
|
+
*/
|
|
38
80
|
entries(): readonly RecordedDomainEvent[];
|
|
81
|
+
/**
|
|
82
|
+
* Remove all recorded events.
|
|
83
|
+
*/
|
|
39
84
|
clear(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Validate and publish all recorded events to an event bus in FIFO order.
|
|
87
|
+
*/
|
|
40
88
|
flush(eventBus: EventBusPort): Promise<void>;
|
|
41
89
|
}
|
|
42
90
|
/**
|
|
@@ -45,11 +93,20 @@ export interface BufferedDomainEventRecorder extends DomainEventRecorderPort {
|
|
|
45
93
|
*
|
|
46
94
|
* This helper does not create database transactions. It gives applications the
|
|
47
95
|
* same UOW shape everywhere and runs commit/rollback hooks around the callback.
|
|
96
|
+
*
|
|
97
|
+
* @param txPortsOrFactory - Transaction-scoped ports or a factory that creates
|
|
98
|
+
* them per transaction call.
|
|
99
|
+
* @param options - Optional commit and rollback hooks.
|
|
100
|
+
* @returns A Unit of Work port with no durable transaction semantics.
|
|
48
101
|
*/
|
|
49
102
|
export declare function createNoopUnitOfWork<TxPorts>(txPortsOrFactory: TxPorts | (() => TxPorts), options?: NoopUnitOfWorkOptions<TxPorts>): UnitOfWorkPort<TxPorts>;
|
|
50
103
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
104
|
+
* Create a recorder that buffers domain events until the caller flushes them.
|
|
105
|
+
*
|
|
106
|
+
* Unit of Work adapters commonly flush this recorder from an `afterCommit`
|
|
107
|
+
* hook so events are not published when the work rolls back.
|
|
108
|
+
*
|
|
109
|
+
* @returns A buffered domain event recorder for tests or Unit of Work adapters.
|
|
53
110
|
*/
|
|
54
111
|
export declare function createDomainEventRecorder(): BufferedDomainEventRecorder;
|
|
55
112
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-of-work.d.ts","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEhF,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,MAAM,MAAM,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,CAChD,EAAE,EAAE,OAAO,KACR,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC,WAAW,CAAC,MAAM,EAChB,IAAI,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAElD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,CAAC,SAAS,cAAc,EAC7B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"unit-of-work.d.ts","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEhF,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,CAChD,EAAE,EAAE,OAAO,KACR,YAAY,CAAC,MAAM,CAAC,CAAC;AAE1B;;;;;;GAMG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO;IACrC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAChB,IAAI,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,OAAO;IAC5C;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAElD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CACrE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,CAAC,CAAC,SAAS,cAAc,EAC7B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,uBAAuB;IAC1E;;OAEG;IACH,OAAO,IAAI,SAAS,mBAAmB,EAAE,CAAC;IAC1C;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAC1C,gBAAgB,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,EAC3C,OAAO,GAAE,qBAAqB,CAAC,OAAO,CAAM,GAC3C,cAAc,CAAC,OAAO,CAAC,CA8BzB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,IAAI,2BAA2B,CA6BvE"}
|
|
@@ -5,6 +5,11 @@ import { parseEventPayload } from "../events";
|
|
|
5
5
|
*
|
|
6
6
|
* This helper does not create database transactions. It gives applications the
|
|
7
7
|
* same UOW shape everywhere and runs commit/rollback hooks around the callback.
|
|
8
|
+
*
|
|
9
|
+
* @param txPortsOrFactory - Transaction-scoped ports or a factory that creates
|
|
10
|
+
* them per transaction call.
|
|
11
|
+
* @param options - Optional commit and rollback hooks.
|
|
12
|
+
* @returns A Unit of Work port with no durable transaction semantics.
|
|
8
13
|
*/
|
|
9
14
|
export function createNoopUnitOfWork(txPortsOrFactory, options = {}) {
|
|
10
15
|
const createTxPorts = typeof txPortsOrFactory === "function"
|
|
@@ -32,8 +37,12 @@ export function createNoopUnitOfWork(txPortsOrFactory, options = {}) {
|
|
|
32
37
|
};
|
|
33
38
|
}
|
|
34
39
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
40
|
+
* Create a recorder that buffers domain events until the caller flushes them.
|
|
41
|
+
*
|
|
42
|
+
* Unit of Work adapters commonly flush this recorder from an `afterCommit`
|
|
43
|
+
* hook so events are not published when the work rolls back.
|
|
44
|
+
*
|
|
45
|
+
* @returns A buffered domain event recorder for tests or Unit of Work adapters.
|
|
37
46
|
*/
|
|
38
47
|
export function createDomainEventRecorder() {
|
|
39
48
|
const records = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-of-work.js","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"unit-of-work.js","sourceRoot":"","sources":["../../src/ports/unit-of-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AA0G9C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,gBAA2C,EAC3C,UAA0C,EAAE;IAE5C,MAAM,aAAa,GACjB,OAAO,gBAAgB,KAAK,UAAU;QACpC,CAAC,CAAE,gBAAkC;QACrC,CAAC,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC;IAE7B,OAAO;QACL,KAAK,CAAC,WAAW,CACf,IAAyC;YAEzC,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAE3B,IAAI,MAAc,CAAC;YAEnB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBAAC,MAAM,CAAC;oBACP,gEAAgE;gBAClE,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,OAAO;QACL,MAAM,CAAC,KAAK,EAAE,OAAO;YACnB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,KAAK;YACH,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,QAAQ;YAClB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtE,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|