@xemahq/realtime-stream 0.1.1
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/LICENSE +201 -0
- package/README.md +67 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cached-membership-resolver.d.ts +25 -0
- package/dist/lib/cached-membership-resolver.d.ts.map +1 -0
- package/dist/lib/cached-membership-resolver.js +69 -0
- package/dist/lib/cached-membership-resolver.js.map +1 -0
- package/dist/lib/connection-lifecycle.d.ts +14 -0
- package/dist/lib/connection-lifecycle.d.ts.map +1 -0
- package/dist/lib/connection-lifecycle.js +3 -0
- package/dist/lib/connection-lifecycle.js.map +1 -0
- package/dist/lib/control-frame.d.ts +54 -0
- package/dist/lib/control-frame.d.ts.map +1 -0
- package/dist/lib/control-frame.js +14 -0
- package/dist/lib/control-frame.js.map +1 -0
- package/dist/lib/cursor.d.ts +11 -0
- package/dist/lib/cursor.d.ts.map +1 -0
- package/dist/lib/cursor.js +101 -0
- package/dist/lib/cursor.js.map +1 -0
- package/dist/lib/default-hub-stream-source.d.ts +9 -0
- package/dist/lib/default-hub-stream-source.d.ts.map +1 -0
- package/dist/lib/default-hub-stream-source.js +43 -0
- package/dist/lib/default-hub-stream-source.js.map +1 -0
- package/dist/lib/frame-authz.d.ts +17 -0
- package/dist/lib/frame-authz.d.ts.map +1 -0
- package/dist/lib/frame-authz.js +49 -0
- package/dist/lib/frame-authz.js.map +1 -0
- package/dist/lib/hub-stream-source.d.ts +4 -0
- package/dist/lib/hub-stream-source.d.ts.map +1 -0
- package/dist/lib/hub-stream-source.js +3 -0
- package/dist/lib/hub-stream-source.js.map +1 -0
- package/dist/lib/membership-resolver.d.ts +15 -0
- package/dist/lib/membership-resolver.d.ts.map +1 -0
- package/dist/lib/membership-resolver.js +13 -0
- package/dist/lib/membership-resolver.js.map +1 -0
- package/dist/lib/module-options.d.ts +17 -0
- package/dist/lib/module-options.d.ts.map +1 -0
- package/dist/lib/module-options.js +3 -0
- package/dist/lib/module-options.js.map +1 -0
- package/dist/lib/realtime-fanout.service.d.ts +57 -0
- package/dist/lib/realtime-fanout.service.d.ts.map +1 -0
- package/dist/lib/realtime-fanout.service.js +384 -0
- package/dist/lib/realtime-fanout.service.js.map +1 -0
- package/dist/lib/realtime-stream.controller.d.ts +19 -0
- package/dist/lib/realtime-stream.controller.d.ts.map +1 -0
- package/dist/lib/realtime-stream.controller.js +185 -0
- package/dist/lib/realtime-stream.controller.js.map +1 -0
- package/dist/lib/realtime-stream.module.d.ts +14 -0
- package/dist/lib/realtime-stream.module.d.ts.map +1 -0
- package/dist/lib/realtime-stream.module.js +80 -0
- package/dist/lib/realtime-stream.module.js.map +1 -0
- package/dist/lib/role-based-fetcher.d.ts +14 -0
- package/dist/lib/role-based-fetcher.d.ts.map +1 -0
- package/dist/lib/role-based-fetcher.js +23 -0
- package/dist/lib/role-based-fetcher.js.map +1 -0
- package/dist/lib/tokens.d.ts +5 -0
- package/dist/lib/tokens.d.ts.map +1 -0
- package/dist/lib/tokens.js +8 -0
- package/dist/lib/tokens.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var RealtimeStreamModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.RealtimeStreamModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const default_hub_stream_source_1 = require("./default-hub-stream-source");
|
|
13
|
+
const realtime_fanout_service_1 = require("./realtime-fanout.service");
|
|
14
|
+
const realtime_stream_controller_1 = require("./realtime-stream.controller");
|
|
15
|
+
const tokens_1 = require("./tokens");
|
|
16
|
+
let RealtimeStreamModule = RealtimeStreamModule_1 = class RealtimeStreamModule {
|
|
17
|
+
static forRoot(options) {
|
|
18
|
+
const providers = [
|
|
19
|
+
{ provide: tokens_1.REALTIME_STREAM_OPTIONS, useValue: options },
|
|
20
|
+
{ provide: tokens_1.MEMBERSHIP_RESOLVER, useValue: options.membershipResolver },
|
|
21
|
+
{ provide: tokens_1.HUB_STREAM_SOURCE, useValue: options.hubStreamSource },
|
|
22
|
+
{
|
|
23
|
+
provide: tokens_1.CALLER_IDENTITY_EXTRACTOR,
|
|
24
|
+
useValue: options.callerIdentityExtractor,
|
|
25
|
+
},
|
|
26
|
+
realtime_fanout_service_1.RealtimeFanoutService,
|
|
27
|
+
];
|
|
28
|
+
return {
|
|
29
|
+
module: RealtimeStreamModule_1,
|
|
30
|
+
controllers: [realtime_stream_controller_1.RealtimeStreamController],
|
|
31
|
+
providers,
|
|
32
|
+
exports: [realtime_fanout_service_1.RealtimeFanoutService],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
static defaultSourceProvider() {
|
|
36
|
+
return default_hub_stream_source_1.DefaultHubStreamSource;
|
|
37
|
+
}
|
|
38
|
+
static forRootAsync(options) {
|
|
39
|
+
const optionsProvider = {
|
|
40
|
+
provide: tokens_1.REALTIME_STREAM_OPTIONS,
|
|
41
|
+
useFactory: options.useFactory,
|
|
42
|
+
inject: options.inject ?? [],
|
|
43
|
+
};
|
|
44
|
+
const membershipProvider = {
|
|
45
|
+
provide: tokens_1.MEMBERSHIP_RESOLVER,
|
|
46
|
+
useFactory: (resolved) => resolved.membershipResolver,
|
|
47
|
+
inject: [tokens_1.REALTIME_STREAM_OPTIONS],
|
|
48
|
+
};
|
|
49
|
+
const hubProvider = {
|
|
50
|
+
provide: tokens_1.HUB_STREAM_SOURCE,
|
|
51
|
+
useFactory: (resolved) => resolved.hubStreamSource,
|
|
52
|
+
inject: [tokens_1.REALTIME_STREAM_OPTIONS],
|
|
53
|
+
};
|
|
54
|
+
const extractorProvider = {
|
|
55
|
+
provide: tokens_1.CALLER_IDENTITY_EXTRACTOR,
|
|
56
|
+
useFactory: (resolved) => resolved.callerIdentityExtractor,
|
|
57
|
+
inject: [tokens_1.REALTIME_STREAM_OPTIONS],
|
|
58
|
+
};
|
|
59
|
+
const extra = options.extraProviders ?? [];
|
|
60
|
+
return {
|
|
61
|
+
module: RealtimeStreamModule_1,
|
|
62
|
+
imports: options.imports ?? [],
|
|
63
|
+
controllers: [realtime_stream_controller_1.RealtimeStreamController],
|
|
64
|
+
providers: [
|
|
65
|
+
optionsProvider,
|
|
66
|
+
membershipProvider,
|
|
67
|
+
hubProvider,
|
|
68
|
+
extractorProvider,
|
|
69
|
+
...extra,
|
|
70
|
+
realtime_fanout_service_1.RealtimeFanoutService,
|
|
71
|
+
],
|
|
72
|
+
exports: [realtime_fanout_service_1.RealtimeFanoutService],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
exports.RealtimeStreamModule = RealtimeStreamModule;
|
|
77
|
+
exports.RealtimeStreamModule = RealtimeStreamModule = RealtimeStreamModule_1 = __decorate([
|
|
78
|
+
(0, common_1.Module)({})
|
|
79
|
+
], RealtimeStreamModule);
|
|
80
|
+
//# sourceMappingURL=realtime-stream.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-stream.module.js","sourceRoot":"","sources":["../../src/lib/realtime-stream.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAMwB;AACxB,2EAAqE;AACrE,uEAAkE;AAClE,6EAAwE;AACxE,qCAKkB;AA8BX,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAC/B,MAAM,CAAC,OAAO,CAAC,OAAoC;QACjD,MAAM,SAAS,GAAe;YAC5B,EAAE,OAAO,EAAE,gCAAuB,EAAE,QAAQ,EAAE,OAAO,EAAE;YACvD,EAAE,OAAO,EAAE,4BAAmB,EAAE,QAAQ,EAAE,OAAO,CAAC,kBAAkB,EAAE;YACtE,EAAE,OAAO,EAAE,0BAAiB,EAAE,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAE;YACjE;gBACE,OAAO,EAAE,kCAAyB;gBAClC,QAAQ,EAAE,OAAO,CAAC,uBAAuB;aAC1C;YACD,+CAAqB;SACtB,CAAC;QACF,OAAO;YACL,MAAM,EAAE,sBAAoB;YAC5B,WAAW,EAAE,CAAC,qDAAwB,CAAC;YACvC,SAAS;YACT,OAAO,EAAE,CAAC,+CAAqB,CAAC;SACjC,CAAC;IACJ,CAAC;IAGD,MAAM,CAAC,qBAAqB;QAC1B,OAAO,kDAAsB,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAyC;QAC3D,MAAM,eAAe,GAAa;YAChC,OAAO,EAAE,gCAAuB;YAChC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;SAC7B,CAAC;QACF,MAAM,kBAAkB,GAAa;YACnC,OAAO,EAAE,4BAAmB;YAC5B,UAAU,EAAE,CAAC,QAAqC,EAAE,EAAE,CACpD,QAAQ,CAAC,kBAAkB;YAC7B,MAAM,EAAE,CAAC,gCAAuB,CAAC;SAClC,CAAC;QACF,MAAM,WAAW,GAAa;YAC5B,OAAO,EAAE,0BAAiB;YAC1B,UAAU,EAAE,CAAC,QAAqC,EAAE,EAAE,CACpD,QAAQ,CAAC,eAAe;YAC1B,MAAM,EAAE,CAAC,gCAAuB,CAAC;SAClC,CAAC;QACF,MAAM,iBAAiB,GAAa;YAClC,OAAO,EAAE,kCAAyB;YAClC,UAAU,EAAE,CAAC,QAAqC,EAAE,EAAE,CACpD,QAAQ,CAAC,uBAAuB;YAClC,MAAM,EAAE,CAAC,gCAAuB,CAAC;SAClC,CAAC;QACF,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QAC3C,OAAO;YACL,MAAM,EAAE,sBAAoB;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,WAAW,EAAE,CAAC,qDAAwB,CAAC;YACvC,SAAS,EAAE;gBACT,eAAe;gBACf,kBAAkB;gBAClB,WAAW;gBACX,iBAAiB;gBACjB,GAAG,KAAK;gBACR,+CAAqB;aACR;YACf,OAAO,EAAE,CAAC,+CAAqB,CAAC;SACjC,CAAC;IACJ,CAAC;CACF,CAAA;AAjEY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,oBAAoB,CAiEhC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CallerIdentity } from './membership-resolver';
|
|
2
|
+
import type { MembershipFetcher } from './cached-membership-resolver';
|
|
3
|
+
export interface RoleBasedFetcherOptions {
|
|
4
|
+
projectRoleMatcher?: (roles: ReadonlyArray<string>, projectId: string) => boolean;
|
|
5
|
+
sessionRoleMatcher?: (roles: ReadonlyArray<string>, sessionId: string) => boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class RoleBasedMembershipFetcher implements MembershipFetcher {
|
|
8
|
+
private readonly projectMatcher;
|
|
9
|
+
private readonly sessionMatcher;
|
|
10
|
+
constructor(options?: RoleBasedFetcherOptions);
|
|
11
|
+
fetchProjectMembership(caller: CallerIdentity, projectId: string): Promise<boolean>;
|
|
12
|
+
fetchSessionMembership(caller: CallerIdentity, sessionId: string): Promise<boolean>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=role-based-fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-based-fetcher.d.ts","sourceRoot":"","sources":["../../src/lib/role-based-fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAiBtE,MAAM,WAAW,uBAAuB;IACtC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAClF,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CACnF;AAgBD,qBAAa,0BAA2B,YAAW,iBAAiB;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6D;IAC5F,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6D;gBAEhF,OAAO,GAAE,uBAA4B;IAK3C,sBAAsB,CAC1B,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;IAIb,sBAAsB,CAC1B,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC;CAGpB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RoleBasedMembershipFetcher = void 0;
|
|
4
|
+
const DEFAULT_PROJECT_MATCHER = (roles, projectId) => roles.includes(`project:${projectId}:member`) ||
|
|
5
|
+
roles.includes(`project:${projectId}:admin`);
|
|
6
|
+
const DEFAULT_SESSION_MATCHER = (roles, sessionId) => roles.includes(`session:${sessionId}:member`) ||
|
|
7
|
+
roles.includes(`session:${sessionId}:owner`);
|
|
8
|
+
class RoleBasedMembershipFetcher {
|
|
9
|
+
projectMatcher;
|
|
10
|
+
sessionMatcher;
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
this.projectMatcher = options.projectRoleMatcher ?? DEFAULT_PROJECT_MATCHER;
|
|
13
|
+
this.sessionMatcher = options.sessionRoleMatcher ?? DEFAULT_SESSION_MATCHER;
|
|
14
|
+
}
|
|
15
|
+
async fetchProjectMembership(caller, projectId) {
|
|
16
|
+
return this.projectMatcher(caller.roles ?? [], projectId);
|
|
17
|
+
}
|
|
18
|
+
async fetchSessionMembership(caller, sessionId) {
|
|
19
|
+
return this.sessionMatcher(caller.roles ?? [], sessionId);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.RoleBasedMembershipFetcher = RoleBasedMembershipFetcher;
|
|
23
|
+
//# sourceMappingURL=role-based-fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-based-fetcher.js","sourceRoot":"","sources":["../../src/lib/role-based-fetcher.ts"],"names":[],"mappings":";;;AAuBA,MAAM,uBAAuB,GAAG,CAC9B,KAA4B,EAC5B,SAAiB,EACR,EAAE,CACX,KAAK,CAAC,QAAQ,CAAC,WAAW,SAAS,SAAS,CAAC;IAC7C,KAAK,CAAC,QAAQ,CAAC,WAAW,SAAS,QAAQ,CAAC,CAAC;AAE/C,MAAM,uBAAuB,GAAG,CAC9B,KAA4B,EAC5B,SAAiB,EACR,EAAE,CACX,KAAK,CAAC,QAAQ,CAAC,WAAW,SAAS,SAAS,CAAC;IAC7C,KAAK,CAAC,QAAQ,CAAC,WAAW,SAAS,QAAQ,CAAC,CAAC;AAE/C,MAAa,0BAA0B;IACpB,cAAc,CAA6D;IAC3E,cAAc,CAA6D;IAE5F,YAAY,UAAmC,EAAE;QAC/C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;QAC5E,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,MAAsB,EACtB,SAAiB;QAEjB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,MAAsB,EACtB,SAAiB;QAEjB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;CACF;AAtBD,gEAsBC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const REALTIME_STREAM_OPTIONS: unique symbol;
|
|
2
|
+
export declare const MEMBERSHIP_RESOLVER: unique symbol;
|
|
3
|
+
export declare const HUB_STREAM_SOURCE: unique symbol;
|
|
4
|
+
export declare const CALLER_IDENTITY_EXTRACTOR: unique symbol;
|
|
5
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/lib/tokens.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,uBAAuB,eAAoC,CAAC;AACzE,eAAO,MAAM,mBAAmB,eAAgC,CAAC;AACjE,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAC7D,eAAO,MAAM,yBAAyB,eAAsC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CALLER_IDENTITY_EXTRACTOR = exports.HUB_STREAM_SOURCE = exports.MEMBERSHIP_RESOLVER = exports.REALTIME_STREAM_OPTIONS = void 0;
|
|
4
|
+
exports.REALTIME_STREAM_OPTIONS = Symbol('REALTIME_STREAM_OPTIONS');
|
|
5
|
+
exports.MEMBERSHIP_RESOLVER = Symbol('MEMBERSHIP_RESOLVER');
|
|
6
|
+
exports.HUB_STREAM_SOURCE = Symbol('HUB_STREAM_SOURCE');
|
|
7
|
+
exports.CALLER_IDENTITY_EXTRACTOR = Symbol('CALLER_IDENTITY_EXTRACTOR');
|
|
8
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/lib/tokens.ts"],"names":[],"mappings":";;;AAGa,QAAA,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAC5D,QAAA,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AACpD,QAAA,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAChD,QAAA,yBAAyB,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xemahq/realtime-stream",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"registry": "https://npm.pkg.github.com"
|
|
6
|
+
},
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"peerDependencies": {
|
|
13
|
+
"@nestjs/common": ">=10",
|
|
14
|
+
"@nestjs/core": ">=10",
|
|
15
|
+
"@nestjs/swagger": ">=7",
|
|
16
|
+
"@xemahq/event-hub-client": "^8.3.1",
|
|
17
|
+
"class-transformer": ">=0.5",
|
|
18
|
+
"class-validator": ">=0.14",
|
|
19
|
+
"rxjs": ">=7"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@xemahq/events": "^0.1.1"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@nestjs/common": "11.1.13",
|
|
26
|
+
"@nestjs/core": "11.1.13",
|
|
27
|
+
"@nestjs/swagger": "11.2.6",
|
|
28
|
+
"@nestjs/testing": "11.1.13",
|
|
29
|
+
"@xemahq/event-hub-client": "^8.3.1",
|
|
30
|
+
"@types/jest": "^30.0.0",
|
|
31
|
+
"@types/node": "25.2.3",
|
|
32
|
+
"class-transformer": "0.5.1",
|
|
33
|
+
"class-validator": "0.14.4",
|
|
34
|
+
"jest": "^30.3.0",
|
|
35
|
+
"prettier": "3.6.2",
|
|
36
|
+
"reflect-metadata": "0.2.2",
|
|
37
|
+
"rxjs": "7.8.2",
|
|
38
|
+
"ts-jest": "^29.4.9",
|
|
39
|
+
"typescript": "5.9.3"
|
|
40
|
+
},
|
|
41
|
+
"exports": {
|
|
42
|
+
".": {
|
|
43
|
+
"types": "./dist/index.d.ts",
|
|
44
|
+
"xema-source": "./src/index.ts",
|
|
45
|
+
"default": "./dist/index.js"
|
|
46
|
+
},
|
|
47
|
+
"./dist/lib/*": {
|
|
48
|
+
"types": "./dist/lib/*.d.ts",
|
|
49
|
+
"default": "./dist/lib/*.js"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"clean": "rm -rf dist",
|
|
54
|
+
"build": "tsc -p tsconfig.json",
|
|
55
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
56
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
57
|
+
"test": "jest --config jest.config.ts"
|
|
58
|
+
}
|
|
59
|
+
}
|