Skip to content

Commit 8b4a478

Browse files
authored
Merge pull request #26 from code0-tech/feat/#25
Order of parameters and settings annotations is inverted
2 parents 2bab8a1 + b274022 commit 8b4a478

3 files changed

Lines changed: 43 additions & 8 deletions

File tree

ts/src/decorators/event.dec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ import {EventSettingProps} from "../models/event.model";
33
export const EventSetting = (setting: EventSettingProps): ClassDecorator =>
44
(target) => {
55
const settings = Reflect.getMetadata('hercules:flow_settings', target) || [];
6-
settings.push(setting);
6+
settings.unshift(setting);
77
Reflect.defineMetadata('hercules:flow_settings', settings, target);
88
}

ts/src/decorators/function.dec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ export const ThrowsError = (throwsError: boolean = true): ClassDecorator =>
1212
export const Parameter = (parameter: FunctionParameterProps): ClassDecorator =>
1313
(target) => {
1414
const parameters = Reflect.getMetadata('hercules:function_parameters', target) || [];
15-
parameters.push(parameter);
15+
parameters.unshift(parameter);
1616
Reflect.defineMetadata('hercules:function_parameters', parameters, target);
1717
}

ts/test/index.test.ts

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,44 @@
1+
import "reflect-metadata";
12
import { describe, expect, it } from "vitest";
3+
import { Parameter } from "../src/decorators/function.dec";
4+
import { EventSetting } from "../src/decorators/event.dec";
25

3-
describe("index", () => {
4-
// mock test
5-
it("should pass", () => {
6-
// compare true to true
7-
expect(true).toBe(true);
6+
describe("Parameter decorator", () => {
7+
it("preserves source order across multiple decorators", () => {
8+
@Parameter({ runtimeName: "first" })
9+
@Parameter({ runtimeName: "second" })
10+
@Parameter({ runtimeName: "third" })
11+
class Foo {}
12+
13+
const parameters = Reflect.getMetadata("hercules:function_parameters", Foo);
14+
expect(parameters.map((p: { runtimeName: string }) => p.runtimeName)).toEqual([
15+
"first",
16+
"second",
17+
"third",
18+
]);
19+
});
20+
21+
it("works for a single parameter", () => {
22+
@Parameter({ runtimeName: "only" })
23+
class Bar {}
24+
25+
const parameters = Reflect.getMetadata("hercules:function_parameters", Bar);
26+
expect(parameters.map((p: { runtimeName: string }) => p.runtimeName)).toEqual(["only"]);
27+
});
28+
});
29+
30+
describe("EventSetting decorator", () => {
31+
it("preserves source order across multiple decorators", () => {
32+
@EventSetting({ identifier: "first" })
33+
@EventSetting({ identifier: "second" })
34+
@EventSetting({ identifier: "third" })
35+
class Event {}
36+
37+
const settings = Reflect.getMetadata("hercules:flow_settings", Event);
38+
expect(settings.map((s: { identifier: string }) => s.identifier)).toEqual([
39+
"first",
40+
"second",
41+
"third",
42+
]);
843
});
9-
});
44+
});

0 commit comments

Comments
 (0)