@venizia/ignis-kernel 0.2.0-5 → 0.2.0-6
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/dist/cjs/base/auth/authorize/common/constants.d.ts +25 -1
- package/dist/cjs/base/auth/authorize/common/constants.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/common/constants.js +12 -18
- package/dist/cjs/base/auth/authorize/common/constants.js.map +1 -1
- package/dist/cjs/base/auth/authorize/common/errors.d.ts +9 -0
- package/dist/cjs/base/auth/authorize/common/errors.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/common/errors.js +9 -0
- package/dist/cjs/base/auth/authorize/common/errors.js.map +1 -1
- package/dist/cjs/base/auth/authorize/common/types.d.ts +1 -1
- package/dist/cjs/base/auth/authorize/common/types.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/enforcers/enforcer-registry.d.ts +7 -0
- package/dist/cjs/base/auth/authorize/enforcers/enforcer-registry.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/enforcers/enforcer-registry.js +11 -0
- package/dist/cjs/base/auth/authorize/enforcers/enforcer-registry.js.map +1 -1
- package/dist/cjs/base/auth/authorize/providers/authorization.provider.d.ts.map +1 -1
- package/dist/cjs/base/auth/authorize/providers/authorization.provider.js +9 -2
- package/dist/cjs/base/auth/authorize/providers/authorization.provider.js.map +1 -1
- package/dist/cjs/base/events/common/constants.d.ts +5 -0
- package/dist/cjs/base/events/common/constants.d.ts.map +1 -0
- package/dist/cjs/base/events/common/constants.js +9 -0
- package/dist/cjs/base/events/common/constants.js.map +1 -0
- package/dist/cjs/base/events/common/index.d.ts +3 -0
- package/dist/cjs/base/events/common/index.d.ts.map +1 -0
- package/dist/cjs/base/events/common/index.js +19 -0
- package/dist/cjs/base/events/common/index.js.map +1 -0
- package/dist/cjs/base/events/common/types.d.ts +26 -0
- package/dist/cjs/base/events/common/types.d.ts.map +1 -0
- package/dist/cjs/base/events/common/types.js +3 -0
- package/dist/cjs/base/events/common/types.js.map +1 -0
- package/dist/cjs/base/events/event-bus.d.ts +41 -0
- package/dist/cjs/base/events/event-bus.d.ts.map +1 -0
- package/dist/cjs/base/events/event-bus.js +100 -0
- package/dist/cjs/base/events/event-bus.js.map +1 -0
- package/dist/cjs/base/events/index.d.ts +3 -0
- package/dist/cjs/base/events/index.d.ts.map +1 -0
- package/dist/cjs/base/events/index.js +19 -0
- package/dist/cjs/base/events/index.js.map +1 -0
- package/dist/cjs/base/index.d.ts +1 -0
- package/dist/cjs/base/index.d.ts.map +1 -1
- package/dist/cjs/base/index.js +1 -5
- package/dist/cjs/base/index.js.map +1 -1
- package/dist/esm/base/auth/authorize/common/constants.d.ts +25 -1
- package/dist/esm/base/auth/authorize/common/constants.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/common/constants.js +12 -18
- package/dist/esm/base/auth/authorize/common/constants.js.map +1 -1
- package/dist/esm/base/auth/authorize/common/errors.d.ts +9 -0
- package/dist/esm/base/auth/authorize/common/errors.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/common/errors.js +9 -0
- package/dist/esm/base/auth/authorize/common/errors.js.map +1 -1
- package/dist/esm/base/auth/authorize/common/types.d.ts +1 -1
- package/dist/esm/base/auth/authorize/common/types.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/enforcers/enforcer-registry.d.ts +7 -0
- package/dist/esm/base/auth/authorize/enforcers/enforcer-registry.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/enforcers/enforcer-registry.js +11 -0
- package/dist/esm/base/auth/authorize/enforcers/enforcer-registry.js.map +1 -1
- package/dist/esm/base/auth/authorize/providers/authorization.provider.d.ts.map +1 -1
- package/dist/esm/base/auth/authorize/providers/authorization.provider.js +9 -2
- package/dist/esm/base/auth/authorize/providers/authorization.provider.js.map +1 -1
- package/dist/esm/base/events/common/constants.d.ts +5 -0
- package/dist/esm/base/events/common/constants.d.ts.map +1 -0
- package/dist/esm/base/events/common/constants.js +5 -0
- package/dist/esm/base/events/common/constants.js.map +1 -0
- package/dist/esm/base/events/common/index.d.ts +3 -0
- package/dist/esm/base/events/common/index.d.ts.map +1 -0
- package/dist/esm/base/events/common/index.js +3 -0
- package/dist/esm/base/events/common/index.js.map +1 -0
- package/dist/esm/base/events/common/types.d.ts +26 -0
- package/dist/esm/base/events/common/types.d.ts.map +1 -0
- package/dist/esm/base/events/common/types.js +2 -0
- package/dist/esm/base/events/common/types.js.map +1 -0
- package/dist/esm/base/events/event-bus.d.ts +41 -0
- package/dist/esm/base/events/event-bus.d.ts.map +1 -0
- package/dist/esm/base/events/event-bus.js +93 -0
- package/dist/esm/base/events/event-bus.js.map +1 -0
- package/dist/esm/base/events/index.d.ts +3 -0
- package/dist/esm/base/events/index.d.ts.map +1 -0
- package/dist/esm/base/events/index.js +3 -0
- package/dist/esm/base/events/index.js.map +1 -0
- package/dist/esm/base/index.d.ts +1 -0
- package/dist/esm/base/index.d.ts.map +1 -1
- package/dist/esm/base/index.js +1 -5
- package/dist/esm/base/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { BaseHelper, executeWithRetry, getError, RetryBackoffStrategies, RetryJitterModes, } from '@venizia/ignis-helpers/core';
|
|
2
|
+
import isEmpty from 'lodash/isEmpty';
|
|
3
|
+
import { EventDispatchRetry } from './common/constants.js';
|
|
4
|
+
/** In-process, fire-and-forget domain event bus. `TPayloadMap` keys the event names, so a wrong name
|
|
5
|
+
* or payload shape is a compile error. Delivery is always async and retry is fixed - there is no
|
|
6
|
+
* knob for either, so "published" guarantees the same thing at every call site. Retry makes delivery
|
|
7
|
+
* at-least-once: handlers must be idempotent, see `IEventHandler`. */
|
|
8
|
+
export class EventBus extends BaseHelper {
|
|
9
|
+
constructor(opts) {
|
|
10
|
+
super({ scope: opts.scope ?? EventBus.name });
|
|
11
|
+
this.container = opts.container;
|
|
12
|
+
this.handlerBindingKeysByName = new Map();
|
|
13
|
+
}
|
|
14
|
+
register(opts) {
|
|
15
|
+
const { name, handlerBindingKey } = opts;
|
|
16
|
+
if (isEmpty(name) || isEmpty(handlerBindingKey)) {
|
|
17
|
+
throw getError({
|
|
18
|
+
message: `[EventBus][register] Invalid registration | name: ${String(name)} | handlerBindingKey: ${handlerBindingKey}`,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const existing = this.handlerBindingKeysByName.get(name);
|
|
22
|
+
if (existing) {
|
|
23
|
+
existing.push(handlerBindingKey);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
this.handlerBindingKeysByName.set(name, [handlerBindingKey]);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Never blocks and never throws back to the caller: dispatch runs outside this call's flow via
|
|
30
|
+
* `queueMicrotask`, and a handler failure is caught and logged where it happens (`dispatch`),
|
|
31
|
+
* never here.
|
|
32
|
+
*/
|
|
33
|
+
publish(opts) {
|
|
34
|
+
const { name, payload, traceId } = opts;
|
|
35
|
+
const event = {
|
|
36
|
+
name,
|
|
37
|
+
payload,
|
|
38
|
+
occurredAt: new Date().toISOString(),
|
|
39
|
+
traceId,
|
|
40
|
+
};
|
|
41
|
+
const handlerBindingKeys = this.handlerBindingKeysByName.get(name);
|
|
42
|
+
if (!handlerBindingKeys?.length) {
|
|
43
|
+
// A typo is already a compile error, so at runtime this only means nobody is listening yet -
|
|
44
|
+
// a legitimate state on a fire-and-forget bus, not an incident.
|
|
45
|
+
this.logger.debug('[publish] No handler registered | name: %s | traceId: %s', name, traceId);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
for (const handlerBindingKey of handlerBindingKeys) {
|
|
49
|
+
queueMicrotask(() => {
|
|
50
|
+
// `dispatch` catches every failure path itself and never rejects - this `.catch` is an
|
|
51
|
+
// unreachable backstop, kept (and logged) rather than left floating, for the day it isn't.
|
|
52
|
+
this.dispatch({ event, handlerBindingKey }).catch((error) => {
|
|
53
|
+
this.logger.error('[publish] Unexpected dispatch failure | name: %s | Error: %s', event.name, error);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Fixed 3 attempts / ~100ms exponential backoff, no jitter - see `EventDispatchRetry`. The
|
|
60
|
+
* handler is resolved fresh from the container on every attempt rather than once up front, so a
|
|
61
|
+
* rebind takes effect on the very next attempt of a dispatch already in flight.
|
|
62
|
+
*
|
|
63
|
+
* `executeWithRetry` is used without its own `logger` - its internal per-attempt/exhaustion
|
|
64
|
+
* logging knows nothing about the event name or `traceId`, so it cannot be the trace anyone
|
|
65
|
+
* relies on. The one line below, logged only on final failure, is.
|
|
66
|
+
*/
|
|
67
|
+
async dispatch(opts) {
|
|
68
|
+
const { event, handlerBindingKey } = opts;
|
|
69
|
+
let lastAttempt = 0;
|
|
70
|
+
try {
|
|
71
|
+
await executeWithRetry({
|
|
72
|
+
operation: `EventBus.dispatch:${event.name}`,
|
|
73
|
+
maxAttempts: EventDispatchRetry.MAX_ATTEMPTS,
|
|
74
|
+
backoff: {
|
|
75
|
+
strategy: RetryBackoffStrategies.EXPONENTIAL,
|
|
76
|
+
initialDelayMs: EventDispatchRetry.BASE_DELAY_MS,
|
|
77
|
+
jitter: RetryJitterModes.NONE,
|
|
78
|
+
},
|
|
79
|
+
execution: async ({ attempt }) => {
|
|
80
|
+
lastAttempt = attempt;
|
|
81
|
+
const handler = this.container.get({ key: handlerBindingKey });
|
|
82
|
+
await handler.handle({ event });
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
// The only trace this failure leaves: it is caught here and never reaches the publisher, so
|
|
88
|
+
// the event name, traceId and attempt count all have to be on this one line.
|
|
89
|
+
this.logger.error('[dispatch] Handler exhausted retries | name: %s | traceId: %s | attempts: %d | handlerBindingKey: %s | Error: %s', event.name, event.traceId, lastAttempt, handlerBindingKey, error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=event-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../../../src/base/events/event-bus.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;sEAGsE;AACtE,MAAM,OAAO,QAAqC,SAAQ,UAAU;IAOlE,YAAY,IAA8C;QACxD,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5C,CAAC;IAED,QAAQ,CAAuC,IAG9C;QACC,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;QAEzC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChD,MAAM,QAAQ,CAAC;gBACb,OAAO,EAAE,qDAAqD,MAAM,CAAC,IAAI,CAAC,yBAAyB,iBAAiB,EAAE;aACvH,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAuC,IAI7C;QACC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAExC,MAAM,KAAK,GAAiC;YAC1C,IAAI;YACJ,OAAO;YACP,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,OAAO;SACR,CAAC;QAEF,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;YAChC,6FAA6F;YAC7F,gEAAgE;YAChE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0DAA0D,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7F,OAAO;QACT,CAAC;QAED,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;YACnD,cAAc,CAAC,GAAG,EAAE;gBAClB,uFAAuF;gBACvF,2FAA2F;gBAC3F,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBACnE,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,8DAA8D,EAC9D,KAAK,CAAC,IAAI,EACV,KAAK,CACN,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,QAAQ,CAAC,IAGtB;QACC,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;QAC1C,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC;gBACrB,SAAS,EAAE,qBAAqB,KAAK,CAAC,IAAI,EAAE;gBAC5C,WAAW,EAAE,kBAAkB,CAAC,YAAY;gBAC5C,OAAO,EAAE;oBACP,QAAQ,EAAE,sBAAsB,CAAC,WAAW;oBAC5C,cAAc,EAAE,kBAAkB,CAAC,aAAa;oBAChD,MAAM,EAAE,gBAAgB,CAAC,IAAI;iBAC9B;gBACD,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;oBAC/B,WAAW,GAAG,OAAO,CAAC;oBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAgB,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;oBAC9E,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClC,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4FAA4F;YAC5F,6EAA6E;YAC7E,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,kHAAkH,EAClH,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,WAAW,EACX,iBAAiB,EACjB,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/base/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/base/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
package/dist/esm/base/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './auth/index.js';
|
|
|
3
3
|
export * from './components/index.js';
|
|
4
4
|
export * from './controllers/index.js';
|
|
5
5
|
export * from './datasources/index.js';
|
|
6
|
+
export * from './events/index.js';
|
|
6
7
|
export * from './metadata/index.js';
|
|
7
8
|
export * from './middlewares/index.js';
|
|
8
9
|
export * from './mixins/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
|
package/dist/esm/base/index.js
CHANGED
|
@@ -3,12 +3,8 @@ export * from './auth/index.js';
|
|
|
3
3
|
export * from './components/index.js';
|
|
4
4
|
export * from './controllers/index.js';
|
|
5
5
|
export * from './datasources/index.js';
|
|
6
|
+
export * from './events/index.js';
|
|
6
7
|
export * from './metadata/index.js';
|
|
7
|
-
// Deliberately public, not an accidental leak: core's own `base/applications/base.ts` (registers
|
|
8
|
-
// `emojiFavicon`/`notFoundHandler`) and `base/middlewares/request-spy/request-spy.middleware.ts`
|
|
9
|
-
// (reads `REQUEST_ID_KEY`, registers `RequestErrors`) both need these across the package boundary
|
|
10
|
-
// the split introduced - core did not export this barrel before the move, but two of its own files
|
|
11
|
-
// now depend on symbols that only live here.
|
|
12
8
|
export * from './middlewares/index.js';
|
|
13
9
|
export * from './mixins/index.js';
|
|
14
10
|
export * from './models/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ignis-kernel",
|
|
3
|
-
"version": "0.2.0-
|
|
3
|
+
"version": "0.2.0-6",
|
|
4
4
|
"description": "Browser-pure kernel of the IGNIS framework: dependency injection, lifecycle, REST controllers, repository and datasource abstractions, and the authentication and authorization seams. No node builtin and no server-only peer, so the same kernel serves a Bun server and a browser Worker.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"authentication",
|
|
@@ -79,9 +79,9 @@
|
|
|
79
79
|
"prepublishOnly": "bun run rebuild"
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
|
-
"@venizia/ignis-filter": "^0.2.0-
|
|
83
|
-
"@venizia/ignis-helpers": "^0.2.0-
|
|
84
|
-
"@venizia/ignis-inversion": "^0.2.0-
|
|
82
|
+
"@venizia/ignis-filter": "^0.2.0-2",
|
|
83
|
+
"@venizia/ignis-helpers": "^0.2.0-5",
|
|
84
|
+
"@venizia/ignis-inversion": "^0.2.0-1",
|
|
85
85
|
"lodash": "^4.18.1",
|
|
86
86
|
"reflect-metadata": "^0.2.2",
|
|
87
87
|
"zod": "^4.4.3"
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"devDependencies": {
|
|
108
108
|
"@types/bun": "^1.3.14",
|
|
109
109
|
"@types/lodash": "^4.17.23",
|
|
110
|
-
"@venizia/dev-configs": "^0.2.0-
|
|
110
|
+
"@venizia/dev-configs": "^0.2.0-1",
|
|
111
111
|
"casbin": "^5.51.1",
|
|
112
112
|
"eslint": "^10.7.0",
|
|
113
113
|
"prettier": "^3.9.5",
|