Skip to content

Commit

Permalink
Merge pull request #11426 from voiceflow/feat/extend-microservice-extras
Browse files Browse the repository at this point in the history
feat: allow extension of microservice event and message extras
  • Loading branch information
kamilmysliwiec committed Apr 5, 2023
2 parents e990336 + daa215e commit 4be791f
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 6 deletions.
9 changes: 8 additions & 1 deletion packages/microservices/decorators/event-pattern.decorator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,14 @@ export const EventPattern: {
descriptor.value,
);
Reflect.defineMetadata(TRANSPORT_METADATA, transport, descriptor.value);
Reflect.defineMetadata(PATTERN_EXTRAS_METADATA, extras, descriptor.value);
Reflect.defineMetadata(
PATTERN_EXTRAS_METADATA,
{
...Reflect.getMetadata(PATTERN_EXTRAS_METADATA, descriptor.value),
...extras,
},
descriptor.value,
);
return descriptor;
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,14 @@ export const MessagePattern: {
descriptor.value,
);
Reflect.defineMetadata(TRANSPORT_METADATA, transport, descriptor.value);
Reflect.defineMetadata(PATTERN_EXTRAS_METADATA, extras, descriptor.value);
Reflect.defineMetadata(
PATTERN_EXTRAS_METADATA,
{
...Reflect.getMetadata(PATTERN_EXTRAS_METADATA, descriptor.value),
...extras,
},
descriptor.value,
);
return descriptor;
};
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ describe('@EventPattern', () => {
});

describe('decorator overloads', () => {
const additionalExtras = { foo: 'bar' };

class TestComponent1 {
@EventPattern(pattern)
public static test() {}
Expand All @@ -70,6 +72,18 @@ describe('@EventPattern', () => {
@EventPattern(pattern, Transport.TCP, extras)
public static test() {}
}
class TestComponent5 {
@EventPattern(pattern, Transport.TCP, extras)
@((
(): MethodDecorator => (_target, _key, descriptor) =>
Reflect.defineMetadata(
PATTERN_EXTRAS_METADATA,
additionalExtras,
descriptor.value,
)
)())
public static test() {}
}

it(`should enhance method with ${PATTERN_METADATA} metadata`, () => {
const [metadataArg] = Reflect.getMetadata(
Expand All @@ -86,7 +100,7 @@ describe('@EventPattern', () => {
);
expect(metadataArg).to.be.eql(pattern);
expect(transportArg).to.be.undefined;
expect(extrasArg).to.be.undefined;
expect(extrasArg).to.be.eql({});
});

it(`should enhance method with ${PATTERN_METADATA}, ${TRANSPORT_METADATA} metadata`, () => {
Expand All @@ -104,7 +118,7 @@ describe('@EventPattern', () => {
);
expect(metadataArg).to.be.eql(pattern);
expect(transportArg).to.be.eql(Transport.TCP);
expect(extrasArg).to.be.undefined;
expect(extrasArg).to.be.eql({});
});

it(`should enhance method with ${PATTERN_METADATA}, ${PATTERN_EXTRAS_METADATA} metadata`, () => {
Expand Down Expand Up @@ -143,5 +157,26 @@ ${PATTERN_EXTRAS_METADATA} metadata`, () => {
expect(transportArg).to.be.eql(Transport.TCP);
expect(extrasArg).to.be.eql(extras);
});

it(`should merge with existing ${PATTERN_EXTRAS_METADATA} metadata`, () => {
const [metadataArg] = Reflect.getMetadata(
PATTERN_METADATA,
TestComponent5.test,
);
const transportArg = Reflect.getMetadata(
TRANSPORT_METADATA,
TestComponent5.test,
);
const extrasArg = Reflect.getMetadata(
PATTERN_EXTRAS_METADATA,
TestComponent5.test,
);
expect(metadataArg).to.be.eql(pattern);
expect(transportArg).to.be.eql(Transport.TCP);
expect(extrasArg).to.be.eql({
...additionalExtras,
...extras,
});
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ describe('@MessagePattern', () => {
});

describe('decorator overloads', () => {
const additionalExtras = { foo: 'bar' };

class TestComponent1 {
@MessagePattern(pattern)
public static test() {}
Expand All @@ -52,6 +54,18 @@ describe('@MessagePattern', () => {
@MessagePattern(pattern, Transport.TCP, extras)
public static test() {}
}
class TestComponent5 {
@MessagePattern(pattern, Transport.TCP, extras)
@((
(): MethodDecorator => (_target, _key, descriptor) =>
Reflect.defineMetadata(
PATTERN_EXTRAS_METADATA,
additionalExtras,
descriptor.value,
)
)())
public static test() {}
}

it(`should enhance method with ${PATTERN_METADATA} metadata`, () => {
const [metadataArg] = Reflect.getMetadata(
Expand All @@ -68,7 +82,7 @@ describe('@MessagePattern', () => {
);
expect(metadataArg).to.be.eql(pattern);
expect(transportArg).to.be.undefined;
expect(extrasArg).to.be.undefined;
expect(extrasArg).to.be.eql({});
});

it(`should enhance method with ${PATTERN_METADATA}, ${TRANSPORT_METADATA} metadata`, () => {
Expand All @@ -86,7 +100,7 @@ describe('@MessagePattern', () => {
);
expect(metadataArg).to.be.eql(pattern);
expect(transportArg).to.be.eql(Transport.TCP);
expect(extrasArg).to.be.undefined;
expect(extrasArg).to.be.eql({});
});

it(`should enhance method with ${PATTERN_METADATA}, ${PATTERN_EXTRAS_METADATA} metadata`, () => {
Expand Down Expand Up @@ -125,6 +139,27 @@ ${PATTERN_EXTRAS_METADATA} metadata`, () => {
expect(transportArg).to.be.eql(Transport.TCP);
expect(extrasArg).to.be.eql(extras);
});

it(`should merge with existing ${PATTERN_EXTRAS_METADATA} metadata`, () => {
const [metadataArg] = Reflect.getMetadata(
PATTERN_METADATA,
TestComponent5.test,
);
const transportArg = Reflect.getMetadata(
TRANSPORT_METADATA,
TestComponent5.test,
);
const extrasArg = Reflect.getMetadata(
PATTERN_EXTRAS_METADATA,
TestComponent5.test,
);
expect(metadataArg).to.be.eql(pattern);
expect(transportArg).to.be.eql(Transport.TCP);
expect(extrasArg).to.be.eql({
...additionalExtras,
...extras,
});
});
});
});

Expand Down

0 comments on commit 4be791f

Please sign in to comment.