@hazeljs/pubsub 0.7.7
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 +192 -0
- package/README.md +187 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +48 -0
- package/dist/__tests__/pubsub-publisher.service.test.d.ts +2 -0
- package/dist/__tests__/pubsub-publisher.service.test.d.ts.map +1 -0
- package/dist/__tests__/pubsub-publisher.service.test.js +45 -0
- package/dist/__tests__/pubsub-subscriber.service.test.d.ts +2 -0
- package/dist/__tests__/pubsub-subscriber.service.test.d.ts.map +1 -0
- package/dist/__tests__/pubsub-subscriber.service.test.js +300 -0
- package/dist/__tests__/pubsub.decorator.test.d.ts +2 -0
- package/dist/__tests__/pubsub.decorator.test.d.ts.map +1 -0
- package/dist/__tests__/pubsub.decorator.test.js +90 -0
- package/dist/__tests__/pubsub.module.test.d.ts +2 -0
- package/dist/__tests__/pubsub.module.test.d.ts.map +1 -0
- package/dist/__tests__/pubsub.module.test.js +33 -0
- package/dist/decorators/pubsub-consumer.decorator.d.ts +7 -0
- package/dist/decorators/pubsub-consumer.decorator.d.ts.map +1 -0
- package/dist/decorators/pubsub-consumer.decorator.js +37 -0
- package/dist/decorators/pubsub-subscribe.decorator.d.ts +6 -0
- package/dist/decorators/pubsub-subscribe.decorator.d.ts.map +1 -0
- package/dist/decorators/pubsub-subscribe.decorator.js +29 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/pubsub-publisher.service.d.ts +13 -0
- package/dist/pubsub-publisher.service.d.ts.map +1 -0
- package/dist/pubsub-publisher.service.js +60 -0
- package/dist/pubsub-subscriber.service.d.ts +15 -0
- package/dist/pubsub-subscriber.service.d.ts.map +1 -0
- package/dist/pubsub-subscriber.service.js +153 -0
- package/dist/pubsub.module.d.ts +10 -0
- package/dist/pubsub.module.d.ts.map +1 -0
- package/dist/pubsub.module.js +65 -0
- package/dist/pubsub.types.d.ts +49 -0
- package/dist/pubsub.types.d.ts.map +1 -0
- package/dist/pubsub.types.js +5 -0
- package/package.json +54 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PubSub } from '@google-cloud/pubsub';
|
|
2
|
+
export declare class PubSubSubscriberService {
|
|
3
|
+
private readonly pubsub;
|
|
4
|
+
private runningSubscriptions;
|
|
5
|
+
constructor(pubsub: PubSub);
|
|
6
|
+
registerFromProvider(provider: object): Promise<void>;
|
|
7
|
+
private registerSubscription;
|
|
8
|
+
private mergeOptions;
|
|
9
|
+
private resolveSubscription;
|
|
10
|
+
private handleMessage;
|
|
11
|
+
private parseData;
|
|
12
|
+
onModuleDestroy(): Promise<void>;
|
|
13
|
+
getSubscriptionCount(): number;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=pubsub-subscriber.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubsub-subscriber.service.d.ts","sourceRoot":"","sources":["../src/pubsub-subscriber.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,MAAM,EAAgB,MAAM,sBAAsB,CAAC;AAmB1E,qBACa,uBAAuB;IAKhC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,oBAAoB,CAA6B;gBAItC,MAAM,EAAE,MAAM;IAG3B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAuB7C,oBAAoB;IAiDlC,OAAO,CAAC,YAAY;YAmBN,mBAAmB;YAwBnB,aAAa;IAyC3B,OAAO,CAAC,SAAS;IAUX,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IActC,oBAAoB,IAAI,MAAM;CAG/B"}
|
|
@@ -0,0 +1,153 @@
|
|
|
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 __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.PubSubSubscriberService = void 0;
|
|
19
|
+
const core_1 = require("@hazeljs/core");
|
|
20
|
+
const pubsub_consumer_decorator_1 = require("./decorators/pubsub-consumer.decorator");
|
|
21
|
+
const pubsub_subscribe_decorator_1 = require("./decorators/pubsub-subscribe.decorator");
|
|
22
|
+
const core_2 = __importDefault(require("@hazeljs/core"));
|
|
23
|
+
const pubsub_publisher_service_1 = require("./pubsub-publisher.service");
|
|
24
|
+
let PubSubSubscriberService = class PubSubSubscriberService {
|
|
25
|
+
constructor(pubsub) {
|
|
26
|
+
this.pubsub = pubsub;
|
|
27
|
+
this.runningSubscriptions = [];
|
|
28
|
+
}
|
|
29
|
+
async registerFromProvider(provider) {
|
|
30
|
+
const consumerOptions = (0, pubsub_consumer_decorator_1.getPubSubConsumerMetadata)(provider.constructor);
|
|
31
|
+
const subscribeMetadata = (0, pubsub_subscribe_decorator_1.getPubSubSubscribeMetadata)(provider.constructor);
|
|
32
|
+
if (!consumerOptions) {
|
|
33
|
+
core_2.default.warn(`Provider ${provider.constructor.name} has @PubSubSubscribe but no @PubSubConsumer decorator - skipping`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (!subscribeMetadata.length) {
|
|
37
|
+
core_2.default.warn(`Provider ${provider.constructor.name} has @PubSubConsumer but no @PubSubSubscribe - skipping`);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
for (const metadata of subscribeMetadata) {
|
|
41
|
+
await this.registerSubscription(provider, metadata, consumerOptions);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async registerSubscription(provider, metadata, consumerDefaults) {
|
|
45
|
+
const method = provider[metadata.methodName];
|
|
46
|
+
if (typeof method !== 'function') {
|
|
47
|
+
core_2.default.error(`Handler ${metadata.methodName} not found on ${provider.constructor.name}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const options = this.mergeOptions(consumerDefaults, metadata.options);
|
|
51
|
+
const subscription = await this.resolveSubscription(options);
|
|
52
|
+
const handler = async (message) => {
|
|
53
|
+
await this.handleMessage(provider, method, options, message);
|
|
54
|
+
};
|
|
55
|
+
subscription.on('message', handler);
|
|
56
|
+
subscription.on('error', (error) => {
|
|
57
|
+
core_2.default.error(`Pub/Sub subscription error on ${provider.constructor.name}.${metadata.methodName}:`, error);
|
|
58
|
+
});
|
|
59
|
+
this.runningSubscriptions.push({
|
|
60
|
+
provider,
|
|
61
|
+
subscriptionName: options.subscription,
|
|
62
|
+
subscription,
|
|
63
|
+
handler,
|
|
64
|
+
});
|
|
65
|
+
core_2.default.info(`Pub/Sub subscription started for ${provider.constructor.name}.${metadata.methodName} (${options.subscription})`);
|
|
66
|
+
}
|
|
67
|
+
mergeOptions(consumerDefaults, methodOptions) {
|
|
68
|
+
return {
|
|
69
|
+
...methodOptions,
|
|
70
|
+
parseJson: methodOptions.parseJson ?? consumerDefaults.parseJson ?? true,
|
|
71
|
+
ackOnSuccess: methodOptions.ackOnSuccess ?? consumerDefaults.ackOnSuccess ?? true,
|
|
72
|
+
nackOnError: methodOptions.nackOnError ?? consumerDefaults.nackOnError ?? true,
|
|
73
|
+
autoCreateSubscription: methodOptions.autoCreateSubscription ?? consumerDefaults.autoCreateSubscription ?? false,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
async resolveSubscription(options) {
|
|
77
|
+
const subscription = this.pubsub.subscription(options.subscription);
|
|
78
|
+
if (!options.autoCreateSubscription) {
|
|
79
|
+
return subscription;
|
|
80
|
+
}
|
|
81
|
+
const [exists] = await subscription.exists();
|
|
82
|
+
if (exists)
|
|
83
|
+
return subscription;
|
|
84
|
+
if (!options.topic) {
|
|
85
|
+
throw new Error(`Cannot auto-create subscription "${options.subscription}" without a topic. Add topic to @PubSubSubscribe options.`);
|
|
86
|
+
}
|
|
87
|
+
const topic = this.pubsub.topic(options.topic);
|
|
88
|
+
await topic.createSubscription(options.subscription);
|
|
89
|
+
core_2.default.info(`Auto-created Pub/Sub subscription "${options.subscription}" for topic "${options.topic}"`);
|
|
90
|
+
return this.pubsub.subscription(options.subscription);
|
|
91
|
+
}
|
|
92
|
+
async handleMessage(provider, method, options, message) {
|
|
93
|
+
const rawData = message.data;
|
|
94
|
+
const parsed = this.parseData(rawData, options.parseJson ?? true);
|
|
95
|
+
const payload = {
|
|
96
|
+
data: parsed,
|
|
97
|
+
rawData,
|
|
98
|
+
attributes: message.attributes ?? {},
|
|
99
|
+
id: message.id,
|
|
100
|
+
orderingKey: message.orderingKey,
|
|
101
|
+
publishTime: message.publishTime ? new Date(message.publishTime) : undefined,
|
|
102
|
+
ack: () => message.ack(),
|
|
103
|
+
nack: () => message.nack(),
|
|
104
|
+
};
|
|
105
|
+
try {
|
|
106
|
+
const result = await method.call(provider, payload);
|
|
107
|
+
if (result === 'nack') {
|
|
108
|
+
message.nack();
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (result === 'ack' || options.ackOnSuccess) {
|
|
112
|
+
message.ack();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
core_2.default.error(`Error in Pub/Sub handler ${provider.constructor.name}.${method.name || 'anonymous'}:`, error);
|
|
117
|
+
if (options.nackOnError) {
|
|
118
|
+
message.nack();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
parseData(data, parseJson) {
|
|
123
|
+
const content = data.toString();
|
|
124
|
+
if (!parseJson)
|
|
125
|
+
return content;
|
|
126
|
+
try {
|
|
127
|
+
return JSON.parse(content);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return content;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async onModuleDestroy() {
|
|
134
|
+
for (const item of this.runningSubscriptions) {
|
|
135
|
+
try {
|
|
136
|
+
item.subscription.removeListener('message', item.handler);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
core_2.default.error(`Failed removing Pub/Sub listener (${item.provider.constructor.name}, ${item.subscriptionName}):`, error);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
this.runningSubscriptions = [];
|
|
143
|
+
}
|
|
144
|
+
getSubscriptionCount() {
|
|
145
|
+
return this.runningSubscriptions.length;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
exports.PubSubSubscriberService = PubSubSubscriberService;
|
|
149
|
+
exports.PubSubSubscriberService = PubSubSubscriberService = __decorate([
|
|
150
|
+
(0, core_1.Service)(),
|
|
151
|
+
__param(0, (0, core_1.Inject)(pubsub_publisher_service_1.PUBSUB_CLIENT_TOKEN)),
|
|
152
|
+
__metadata("design:paramtypes", [Function])
|
|
153
|
+
], PubSubSubscriberService);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PubSubModuleOptions } from './pubsub.types';
|
|
2
|
+
export declare class PubSubModule {
|
|
3
|
+
static forRoot(options?: PubSubModuleOptions): typeof PubSubModule;
|
|
4
|
+
static forRootAsync(options: {
|
|
5
|
+
useFactory: (...args: unknown[]) => Promise<PubSubModuleOptions> | PubSubModuleOptions;
|
|
6
|
+
inject?: unknown[];
|
|
7
|
+
}): Promise<typeof PubSubModule>;
|
|
8
|
+
static registerSubscriptionsFromProvider(provider: object): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=pubsub.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubsub.module.d.ts","sourceRoot":"","sources":["../src/pubsub.module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAKrD,qBAIa,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,YAAY;WAazD,YAAY,CAAC,OAAO,EAAE;QACjC,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAAC;QACvF,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;KACpB,GAAG,OAAO,CAAC,OAAO,YAAY,CAAC;WAkBnB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBhF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
var PubSubModule_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.PubSubModule = void 0;
|
|
14
|
+
const core_1 = require("@hazeljs/core");
|
|
15
|
+
const pubsub_1 = require("@google-cloud/pubsub");
|
|
16
|
+
const pubsub_publisher_service_1 = require("./pubsub-publisher.service");
|
|
17
|
+
const pubsub_subscriber_service_1 = require("./pubsub-subscriber.service");
|
|
18
|
+
const core_2 = __importDefault(require("@hazeljs/core"));
|
|
19
|
+
let PubSubModule = PubSubModule_1 = class PubSubModule {
|
|
20
|
+
static forRoot(options = {}) {
|
|
21
|
+
core_2.default.info('Configuring Pub/Sub module...');
|
|
22
|
+
const pubsubClient = new pubsub_1.PubSub({
|
|
23
|
+
projectId: options.projectId,
|
|
24
|
+
keyFilename: options.keyFilename,
|
|
25
|
+
apiEndpoint: options.apiEndpoint,
|
|
26
|
+
});
|
|
27
|
+
core_1.Container.getInstance().register(pubsub_publisher_service_1.PUBSUB_CLIENT_TOKEN, pubsubClient);
|
|
28
|
+
return PubSubModule_1;
|
|
29
|
+
}
|
|
30
|
+
static async forRootAsync(options) {
|
|
31
|
+
const container = core_1.Container.getInstance();
|
|
32
|
+
const injectTokens = options.inject ?? [];
|
|
33
|
+
const deps = injectTokens.map((token) => container.resolve(token));
|
|
34
|
+
const pubsubOptions = await Promise.resolve(options.useFactory(...deps));
|
|
35
|
+
const pubsubClient = new pubsub_1.PubSub({
|
|
36
|
+
projectId: pubsubOptions.projectId,
|
|
37
|
+
keyFilename: pubsubOptions.keyFilename,
|
|
38
|
+
apiEndpoint: pubsubOptions.apiEndpoint,
|
|
39
|
+
});
|
|
40
|
+
container.register(pubsub_publisher_service_1.PUBSUB_CLIENT_TOKEN, pubsubClient);
|
|
41
|
+
return PubSubModule_1;
|
|
42
|
+
}
|
|
43
|
+
static async registerSubscriptionsFromProvider(provider) {
|
|
44
|
+
try {
|
|
45
|
+
const container = core_1.Container.getInstance();
|
|
46
|
+
const subscriberService = container.resolve(pubsub_subscriber_service_1.PubSubSubscriberService);
|
|
47
|
+
if (!subscriberService) {
|
|
48
|
+
core_2.default.warn('PubSubSubscriberService not found in DI container');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
await subscriberService.registerFromProvider(provider);
|
|
52
|
+
core_2.default.info(`Registered Pub/Sub subscriptions from provider: ${provider.constructor.name}`);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
core_2.default.error('Error registering Pub/Sub subscriptions from provider:', error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
exports.PubSubModule = PubSubModule;
|
|
60
|
+
exports.PubSubModule = PubSubModule = PubSubModule_1 = __decorate([
|
|
61
|
+
(0, core_1.HazelModule)({
|
|
62
|
+
providers: [pubsub_publisher_service_1.PubSubPublisherService, pubsub_subscriber_service_1.PubSubSubscriberService],
|
|
63
|
+
exports: [pubsub_publisher_service_1.PubSubPublisherService, pubsub_subscriber_service_1.PubSubSubscriberService],
|
|
64
|
+
})
|
|
65
|
+
], PubSubModule);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pub/Sub module types and interfaces
|
|
3
|
+
*/
|
|
4
|
+
export interface PubSubClientOptions {
|
|
5
|
+
projectId?: string;
|
|
6
|
+
keyFilename?: string;
|
|
7
|
+
apiEndpoint?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface PubSubModuleOptions extends PubSubClientOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Whether this is a global module.
|
|
12
|
+
* @default true
|
|
13
|
+
*/
|
|
14
|
+
isGlobal?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface PubSubPublishOptions {
|
|
17
|
+
attributes?: Record<string, string>;
|
|
18
|
+
orderingKey?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface PubSubSubscribeOptions {
|
|
21
|
+
subscription: string;
|
|
22
|
+
topic?: string;
|
|
23
|
+
autoCreateSubscription?: boolean;
|
|
24
|
+
ackOnSuccess?: boolean;
|
|
25
|
+
nackOnError?: boolean;
|
|
26
|
+
parseJson?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface PubSubConsumerOptions {
|
|
29
|
+
ackOnSuccess?: boolean;
|
|
30
|
+
nackOnError?: boolean;
|
|
31
|
+
parseJson?: boolean;
|
|
32
|
+
autoCreateSubscription?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface PubSubSubscribeMetadata {
|
|
35
|
+
methodName: string;
|
|
36
|
+
options: PubSubSubscribeOptions;
|
|
37
|
+
}
|
|
38
|
+
export interface PubSubSubscriptionHandlerPayload<T = unknown> {
|
|
39
|
+
data: T;
|
|
40
|
+
rawData: Buffer;
|
|
41
|
+
attributes: Record<string, string>;
|
|
42
|
+
id: string;
|
|
43
|
+
orderingKey?: string;
|
|
44
|
+
publishTime?: Date;
|
|
45
|
+
ack: () => void;
|
|
46
|
+
nack: () => void;
|
|
47
|
+
}
|
|
48
|
+
export type PubSubHandlerResult = void | 'ack' | 'nack';
|
|
49
|
+
//# sourceMappingURL=pubsub.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubsub.types.d.ts","sourceRoot":"","sources":["../src/pubsub.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,MAAM,WAAW,gCAAgC,CAAC,CAAC,GAAG,OAAO;IAC3D,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hazeljs/pubsub",
|
|
3
|
+
"version": "0.7.7",
|
|
4
|
+
"description": "Google Cloud Pub/Sub module for HazelJS framework with decorator-based consumers",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"test": "jest --coverage",
|
|
13
|
+
"lint": "eslint \"src/**/*.ts\"",
|
|
14
|
+
"lint:fix": "eslint \"src/**/*.ts\" --fix",
|
|
15
|
+
"clean": "rm -rf dist"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@google-cloud/pubsub": "^4.8.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/node": "^20.19.39",
|
|
22
|
+
"@typescript-eslint/eslint-plugin": "^8.58.0",
|
|
23
|
+
"@typescript-eslint/parser": "^8.58.0",
|
|
24
|
+
"eslint": "^8.57.1",
|
|
25
|
+
"jest": "^29.7.0",
|
|
26
|
+
"ts-jest": "^29.4.9",
|
|
27
|
+
"typescript": "^5.9.3"
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/hazel-js/hazeljs.git",
|
|
35
|
+
"directory": "packages/pubsub"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"hazeljs",
|
|
39
|
+
"google-pubsub",
|
|
40
|
+
"pubsub",
|
|
41
|
+
"messaging",
|
|
42
|
+
"event-driven"
|
|
43
|
+
],
|
|
44
|
+
"author": "Muhammad Arslan <muhammad.arslan@hazeljs.ai>",
|
|
45
|
+
"license": "Apache-2.0",
|
|
46
|
+
"bugs": {
|
|
47
|
+
"url": "https://github.com/hazeljs/hazel-js/issues"
|
|
48
|
+
},
|
|
49
|
+
"homepage": "https://hazeljs.ai",
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"@hazeljs/core": ">=0.2.0-beta.0"
|
|
52
|
+
},
|
|
53
|
+
"gitHead": "5fa18729312dd9d2abe5dee3801fbd0ac0f1c3c9"
|
|
54
|
+
}
|