fragment-ts 1.0.17 → 1.0.19

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.
Files changed (38) hide show
  1. package/SETUP.md +570 -0
  2. package/changes/1.md +469 -0
  3. package/dist/cli/commands/init.command.js +4 -4
  4. package/dist/cli/commands/init.command.js.map +1 -1
  5. package/dist/cli/commands/test.command.d.ts +6 -0
  6. package/dist/cli/commands/test.command.d.ts.map +1 -0
  7. package/dist/cli/commands/test.command.js +311 -0
  8. package/dist/cli/commands/test.command.js.map +1 -0
  9. package/dist/cli/index.js +6 -3
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/core/container/di-container.d.ts +5 -0
  12. package/dist/core/container/di-container.d.ts.map +1 -1
  13. package/dist/core/container/di-container.js +121 -21
  14. package/dist/core/container/di-container.js.map +1 -1
  15. package/dist/core/decorators/controller.decorator.js +5 -5
  16. package/dist/core/decorators/injection.decorators.d.ts +44 -1
  17. package/dist/core/decorators/injection.decorators.d.ts.map +1 -1
  18. package/dist/core/decorators/injection.decorators.js +92 -1
  19. package/dist/core/decorators/injection.decorators.js.map +1 -1
  20. package/dist/core/metadata/metadata-keys.d.ts +29 -17
  21. package/dist/core/metadata/metadata-keys.d.ts.map +1 -1
  22. package/dist/core/metadata/metadata-keys.js +35 -17
  23. package/dist/core/metadata/metadata-keys.js.map +1 -1
  24. package/dist/testing/runner.d.ts +10 -0
  25. package/dist/testing/runner.d.ts.map +1 -1
  26. package/dist/testing/runner.js +109 -16
  27. package/dist/testing/runner.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/cli/commands/init.command.ts +4 -4
  30. package/src/cli/commands/test.command.ts +289 -0
  31. package/src/cli/index.ts +16 -11
  32. package/src/core/container/di-container.ts +166 -31
  33. package/src/core/decorators/DECORATOR_USAGE.md +326 -0
  34. package/src/core/decorators/controller.decorator.ts +9 -9
  35. package/src/core/decorators/injection.decorators.ts +129 -5
  36. package/src/core/metadata/metadata-keys.ts +44 -18
  37. package/src/testing/TEST.md +321 -0
  38. package/src/testing/runner.ts +137 -24
@@ -1 +1 @@
1
- {"version":3,"file":"injection.decorators.d.ts","sourceRoot":"","sources":["../../../src/core/decorators/injection.decorators.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,IAAI,iBAAiB,CAK7C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAIvD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAIzD;AAED,wBAAgB,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAI3D"}
1
+ {"version":3,"file":"injection.decorators.d.ts","sourceRoot":"","sources":["../../../src/core/decorators/injection.decorators.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,SAAS,IAAI,iBAAiB,CAe7C;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,iBAAiB,CAIlE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,iBAAiB,CASpE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAIzD;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAS3D;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C;AAED;;;GAGG;AACH,wBAAgB,IAAI,IAAI,iBAAiB,CAwBxC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,eAAe,CAY/C;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,eAAe,CAY5C"}
@@ -2,28 +2,119 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Autowired = Autowired;
4
4
  exports.Inject = Inject;
5
+ exports.InjectRepository = InjectRepository;
5
6
  exports.Qualifier = Qualifier;
6
7
  exports.Value = Value;
8
+ exports.Optional = Optional;
9
+ exports.Lazy = Lazy;
10
+ exports.PostConstruct = PostConstruct;
11
+ exports.PreDestroy = PreDestroy;
7
12
  const metadata_keys_1 = require("../metadata/metadata-keys");
13
+ /**
14
+ * @Autowired - Automatically inject dependencies by type
15
+ * Usage: @Autowired() private myService: MyService;
16
+ */
8
17
  function Autowired() {
9
18
  return (target, propertyKey) => {
10
- const type = Reflect.getMetadata('design:type', target, propertyKey);
19
+ // Get the design type from TypeScript metadata
20
+ const type = Reflect.getMetadata("design:type", target, propertyKey);
21
+ if (!type || type === Object) {
22
+ throw new Error(`Cannot use @Autowired on property "${String(propertyKey)}" in ${target.constructor.name}. ` +
23
+ `Make sure TypeScript emitDecoratorMetadata is enabled and the type is explicitly declared.`);
24
+ }
25
+ // Store the type in metadata so DI container can resolve it
11
26
  Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.AUTOWIRED, type, target, propertyKey);
12
27
  };
13
28
  }
29
+ /**
30
+ * @Inject - Inject dependency by token (string or class)
31
+ * Usage: @Inject('MyService') private service: MyService;
32
+ * or: @Inject(MyService) private service: MyService;
33
+ */
14
34
  function Inject(token) {
15
35
  return (target, propertyKey) => {
16
36
  Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.INJECT, token, target, propertyKey);
17
37
  };
18
38
  }
39
+ /**
40
+ * @InjectRepository - Inject TypeORM repository for an entity
41
+ * Usage: @InjectRepository(User) private userRepo: Repository<User>;
42
+ */
43
+ function InjectRepository(entity) {
44
+ return (target, propertyKey) => {
45
+ Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.INJECT_REPOSITORY, entity, target, propertyKey);
46
+ };
47
+ }
48
+ /**
49
+ * @Qualifier - Specify which bean to inject when multiple exist
50
+ * Usage: @Qualifier('primary') @Autowired() private service: MyService;
51
+ */
19
52
  function Qualifier(name) {
20
53
  return (target, propertyKey) => {
21
54
  Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.QUALIFIER, name, target, propertyKey);
22
55
  };
23
56
  }
57
+ /**
58
+ * @Value - Inject configuration value from environment or config
59
+ * Usage: @Value('${PORT}') private port: number;
60
+ * or: @Value('${DB_HOST:localhost}') private host: string;
61
+ */
24
62
  function Value(expression) {
25
63
  return (target, propertyKey) => {
26
64
  Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.VALUE, expression, target, propertyKey);
27
65
  };
28
66
  }
67
+ /**
68
+ * @Optional - Mark dependency as optional (won't throw if not found)
69
+ * Usage: @Optional() @Autowired() private service?: MyService;
70
+ */
71
+ function Optional() {
72
+ return (target, propertyKey) => {
73
+ Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.OPTIONAL, true, target, propertyKey);
74
+ };
75
+ }
76
+ /**
77
+ * @Lazy - Lazy load dependency (create on first access)
78
+ * Usage: @Lazy() @Autowired() private service: MyService;
79
+ */
80
+ function Lazy() {
81
+ return (target, propertyKey) => {
82
+ Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.LAZY, true, target, propertyKey);
83
+ const type = Reflect.getMetadata("design:type", target, propertyKey);
84
+ // Create a getter that resolves on first access
85
+ let cached = null;
86
+ let resolved = false;
87
+ Object.defineProperty(target, propertyKey, {
88
+ get() {
89
+ if (!resolved) {
90
+ const { DIContainer } = require("../container/di-container");
91
+ const container = DIContainer.getInstance();
92
+ cached = container.resolve(type);
93
+ resolved = true;
94
+ }
95
+ return cached;
96
+ },
97
+ enumerable: true,
98
+ configurable: true,
99
+ });
100
+ };
101
+ }
102
+ /**
103
+ * @PostConstruct - Method called after dependency injection is complete
104
+ * Usage: @PostConstruct() init() { ... }
105
+ */
106
+ function PostConstruct() {
107
+ return (target, propertyKey, descriptor) => {
108
+ Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.POST_CONSTRUCT, propertyKey, target.constructor);
109
+ };
110
+ }
111
+ /**
112
+ * @PreDestroy - Method called before bean is destroyed
113
+ * Usage: @PreDestroy() cleanup() { ... }
114
+ */
115
+ function PreDestroy() {
116
+ return (target, propertyKey, descriptor) => {
117
+ Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.PRE_DESTROY, propertyKey, target.constructor);
118
+ };
119
+ }
29
120
  //# sourceMappingURL=injection.decorators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"injection.decorators.js","sourceRoot":"","sources":["../../../src/core/decorators/injection.decorators.ts"],"names":[],"mappings":";;AAEA,8BAKC;AAED,wBAIC;AAED,8BAIC;AAED,sBAIC;AAzBD,6DAA0D;AAE1D,SAAgB,SAAS;IACvB,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACrE,OAAO,CAAC,cAAc,CAAC,6BAAa,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,MAAM,CAAC,KAAa;IAClC,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACnD,OAAO,CAAC,cAAc,CAAC,6BAAa,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,IAAY;IACpC,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACnD,OAAO,CAAC,cAAc,CAAC,6BAAa,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,KAAK,CAAC,UAAkB;IACtC,OAAO,CAAC,MAAW,EAAE,WAA4B,EAAE,EAAE;QACnD,OAAO,CAAC,cAAc,CAAC,6BAAa,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/E,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"injection.decorators.js","sourceRoot":"","sources":["../../../src/core/decorators/injection.decorators.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,32 @@
1
1
  export declare const METADATA_KEYS: {
2
- INJECTABLE: string;
3
- SCOPE: string;
4
- SERVICE: string;
5
- CONTROLLER: string;
6
- REPOSITORY: string;
7
- AUTO_CONFIGURATION: string;
8
- CONDITIONAL_ON_CLASS: string;
9
- CONDITIONAL_ON_MISSING_BEAN: string;
10
- CONDITIONAL_ON_PROPERTY: string;
11
- AUTOWIRED: string;
12
- INJECT: string;
13
- QUALIFIER: string;
14
- VALUE: string;
15
- HTTP_METHOD: string;
16
- ROUTE_PATH: string;
17
- PARAM_METADATA: string;
18
- APPLICATION: string;
2
+ readonly APPLICATION: "fragment:application";
3
+ readonly INJECTABLE: "fragment:injectable";
4
+ readonly CONTROLLER: "fragment:controller";
5
+ readonly SERVICE: "fragment:service";
6
+ readonly REPOSITORY: "fragment:repository";
7
+ readonly AUTO_CONFIGURATION: "fragment:auto-configuration";
8
+ readonly SCOPE: "fragment:scope";
9
+ readonly AUTOWIRED: "fragment:autowired";
10
+ readonly INJECT: "fragment:inject";
11
+ readonly INJECT_REPOSITORY: "fragment:inject-repository";
12
+ readonly QUALIFIER: "fragment:qualifier";
13
+ readonly VALUE: "fragment:value";
14
+ readonly OPTIONAL: "fragment:optional";
15
+ readonly LAZY: "fragment:lazy";
16
+ readonly HTTP_METHOD: "fragment:http-method";
17
+ readonly ROUTE_PATH: "fragment:route-path";
18
+ readonly POST_CONSTRUCT: "fragment:post-construct";
19
+ readonly PRE_DESTROY: "fragment:pre-destroy";
20
+ readonly PARAM_METADATA: "fragment:param-metadata";
21
+ readonly CONDITIONAL_ON_CLASS: "fragment:conditional-on-class";
22
+ readonly CONDITIONAL_ON_MISSING_BEAN: "fragment:conditional-on-missing-bean";
23
+ readonly CONDITIONAL_ON_PROPERTY: "fragment:conditional-on-property";
24
+ readonly CONDITIONAL_ON_BEAN: "fragment:conditional-on-bean";
25
+ readonly USE_GUARDS: "fragment:use-guards";
26
+ readonly USE_INTERCEPTORS: "fragment:use-interceptors";
27
+ readonly USE_FILTERS: "fragment:use-filters";
28
+ readonly VALIDATE: "fragment:validate";
29
+ readonly TRANSFORM: "fragment:transform";
19
30
  };
31
+ export type MetadataKey = (typeof METADATA_KEYS)[keyof typeof METADATA_KEYS];
20
32
  //# sourceMappingURL=metadata-keys.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-keys.d.ts","sourceRoot":"","sources":["../../../src/core/metadata/metadata-keys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;CAkBzB,CAAC"}
1
+ {"version":3,"file":"metadata-keys.d.ts","sourceRoot":"","sources":["../../../src/core/metadata/metadata-keys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0ChB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC"}
@@ -2,22 +2,40 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.METADATA_KEYS = void 0;
4
4
  exports.METADATA_KEYS = {
5
- INJECTABLE: 'fragment:injectable',
6
- SCOPE: 'fragment:scope',
7
- SERVICE: 'fragment:service',
8
- CONTROLLER: 'fragment:controller',
9
- REPOSITORY: 'fragment:repository',
10
- AUTO_CONFIGURATION: 'fragment:auto-configuration',
11
- CONDITIONAL_ON_CLASS: 'fragment:conditional-class',
12
- CONDITIONAL_ON_MISSING_BEAN: 'fragment:conditional-missing-bean',
13
- CONDITIONAL_ON_PROPERTY: 'fragment:conditional-property',
14
- AUTOWIRED: 'fragment:autowired',
15
- INJECT: 'fragment:inject',
16
- QUALIFIER: 'fragment:qualifier',
17
- VALUE: 'fragment:value',
18
- HTTP_METHOD: 'fragment:http-method',
19
- ROUTE_PATH: 'fragment:route-path',
20
- PARAM_METADATA: 'fragment:param-metadata',
21
- APPLICATION: 'fragment:application'
5
+ // Class decorators
6
+ APPLICATION: "fragment:application",
7
+ INJECTABLE: "fragment:injectable",
8
+ CONTROLLER: "fragment:controller",
9
+ SERVICE: "fragment:service",
10
+ REPOSITORY: "fragment:repository",
11
+ AUTO_CONFIGURATION: "fragment:auto-configuration",
12
+ SCOPE: "fragment:scope",
13
+ // Property decorators
14
+ AUTOWIRED: "fragment:autowired",
15
+ INJECT: "fragment:inject",
16
+ INJECT_REPOSITORY: "fragment:inject-repository",
17
+ QUALIFIER: "fragment:qualifier",
18
+ VALUE: "fragment:value",
19
+ OPTIONAL: "fragment:optional",
20
+ LAZY: "fragment:lazy",
21
+ // Method decorators
22
+ HTTP_METHOD: "fragment:http-method",
23
+ ROUTE_PATH: "fragment:route-path",
24
+ POST_CONSTRUCT: "fragment:post-construct",
25
+ PRE_DESTROY: "fragment:pre-destroy",
26
+ // Parameter decorators
27
+ PARAM_METADATA: "fragment:param-metadata",
28
+ // Conditional decorators
29
+ CONDITIONAL_ON_CLASS: "fragment:conditional-on-class",
30
+ CONDITIONAL_ON_MISSING_BEAN: "fragment:conditional-on-missing-bean",
31
+ CONDITIONAL_ON_PROPERTY: "fragment:conditional-on-property",
32
+ CONDITIONAL_ON_BEAN: "fragment:conditional-on-bean",
33
+ // Middleware & Guards
34
+ USE_GUARDS: "fragment:use-guards",
35
+ USE_INTERCEPTORS: "fragment:use-interceptors",
36
+ USE_FILTERS: "fragment:use-filters",
37
+ // Validation
38
+ VALIDATE: "fragment:validate",
39
+ TRANSFORM: "fragment:transform",
22
40
  };
23
41
  //# sourceMappingURL=metadata-keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-keys.js","sourceRoot":"","sources":["../../../src/core/metadata/metadata-keys.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IAC3B,UAAU,EAAE,qBAAqB;IACjC,KAAK,EAAE,gBAAgB;IACvB,OAAO,EAAE,kBAAkB;IAC3B,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,qBAAqB;IACjC,kBAAkB,EAAE,6BAA6B;IACjD,oBAAoB,EAAE,4BAA4B;IAClD,2BAA2B,EAAE,mCAAmC;IAChE,uBAAuB,EAAE,+BAA+B;IACxD,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,iBAAiB;IACzB,SAAS,EAAE,oBAAoB;IAC/B,KAAK,EAAE,gBAAgB;IACvB,WAAW,EAAE,sBAAsB;IACnC,UAAU,EAAE,qBAAqB;IACjC,cAAc,EAAE,yBAAyB;IACzC,WAAW,EAAE,sBAAsB;CACpC,CAAC"}
1
+ {"version":3,"file":"metadata-keys.js","sourceRoot":"","sources":["../../../src/core/metadata/metadata-keys.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IAC3B,mBAAmB;IACnB,WAAW,EAAE,sBAAsB;IACnC,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,qBAAqB;IACjC,OAAO,EAAE,kBAAkB;IAC3B,UAAU,EAAE,qBAAqB;IACjC,kBAAkB,EAAE,6BAA6B;IACjD,KAAK,EAAE,gBAAgB;IAEvB,sBAAsB;IACtB,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,iBAAiB;IACzB,iBAAiB,EAAE,4BAA4B;IAC/C,SAAS,EAAE,oBAAoB;IAC/B,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,mBAAmB;IAC7B,IAAI,EAAE,eAAe;IAErB,oBAAoB;IACpB,WAAW,EAAE,sBAAsB;IACnC,UAAU,EAAE,qBAAqB;IACjC,cAAc,EAAE,yBAAyB;IACzC,WAAW,EAAE,sBAAsB;IAEnC,uBAAuB;IACvB,cAAc,EAAE,yBAAyB;IAEzC,yBAAyB;IACzB,oBAAoB,EAAE,+BAA+B;IACrD,2BAA2B,EAAE,sCAAsC;IACnE,uBAAuB,EAAE,kCAAkC;IAC3D,mBAAmB,EAAE,8BAA8B;IAEnD,sBAAsB;IACtB,UAAU,EAAE,qBAAqB;IACjC,gBAAgB,EAAE,2BAA2B;IAC7C,WAAW,EAAE,sBAAsB;IAEnC,aAAa;IACb,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,oBAAoB;CACvB,CAAC"}
@@ -1,6 +1,8 @@
1
1
  export interface TestSuite {
2
2
  name: string;
3
3
  tests: Test[];
4
+ beforeEachHooks: Array<() => void | Promise<void>>;
5
+ afterEachHooks: Array<() => void | Promise<void>>;
4
6
  }
5
7
  export interface Test {
6
8
  name: string;
@@ -16,11 +18,19 @@ export declare class TestRunner {
16
18
  }
17
19
  export declare function describe(name: string, fn: () => void): void;
18
20
  export declare function it(name: string, fn: () => void | Promise<void>): void;
21
+ export declare function beforeEach(fn: () => void | Promise<void>): void;
22
+ export declare function afterEach(fn: () => void | Promise<void>): void;
19
23
  export declare function expect(actual: any): {
20
24
  toBe(expected: any): void;
21
25
  toEqual(expected: any): void;
22
26
  toBeTruthy(): void;
23
27
  toBeFalsy(): void;
24
28
  toThrow(): void;
29
+ toBeInstanceOf(expected: any): void;
30
+ toContain(expected: any): void;
31
+ toHaveProperty(prop: string): void;
32
+ toBeNull(): void;
33
+ toBeUndefined(): void;
34
+ toHaveLength(expected: number): void;
25
35
  };
26
36
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/testing/runner.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAKD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IAEnB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAgBtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BpB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOpD;AAKD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAE3D;AAED,wBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAErE;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,GAAG;mBAEf,GAAG;sBAKA,GAAG;;;;EA0BxB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/testing/runner.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,eAAe,EAAE,KAAK,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,cAAc,EAAE,KAAK,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAKD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IAEnB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAiCtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCpB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOpD;AAKD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAK3D;AAED,wBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAKrE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAK/D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAK9D;AAKD,wBAAgB,MAAM,CAAC,MAAM,EAAE,GAAG;mBAEf,GAAG;sBAMA,GAAG;;;;6BAqCI,GAAG;wBAMR,GAAG;yBAUF,MAAM;;;2BAkBJ,MAAM;EAUhC"}
@@ -36,6 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.TestRunner = void 0;
37
37
  exports.describe = describe;
38
38
  exports.it = it;
39
+ exports.beforeEach = beforeEach;
40
+ exports.afterEach = afterEach;
39
41
  exports.expect = expect;
40
42
  const path = __importStar(require("path"));
41
43
  const glob_1 = require("glob");
@@ -50,34 +52,54 @@ class TestRunner {
50
52
  this.failed = 0;
51
53
  }
52
54
  describe(name, fn) {
53
- const suite = { name, tests: [] };
55
+ const suite = {
56
+ name,
57
+ tests: [],
58
+ beforeEachHooks: [],
59
+ afterEachHooks: [],
60
+ };
54
61
  this.suites.push(suite);
55
- const currentSuite = suite;
56
62
  const originalIt = G.it;
63
+ const originalBeforeEach = G.beforeEach;
64
+ const originalAfterEach = G.afterEach;
57
65
  G.it = (testName, testFn) => {
58
- currentSuite.tests.push({ name: testName, fn: testFn });
66
+ suite.tests.push({ name: testName, fn: testFn });
67
+ };
68
+ G.beforeEach = (hook) => {
69
+ suite.beforeEachHooks.push(hook);
70
+ };
71
+ G.afterEach = (hook) => {
72
+ suite.afterEachHooks.push(hook);
59
73
  };
60
74
  fn();
61
75
  G.it = originalIt;
76
+ G.beforeEach = originalBeforeEach;
77
+ G.afterEach = originalAfterEach;
62
78
  }
63
79
  async run() {
64
- console.log('\n🧪 Running Fragment Tests\n');
80
+ console.log("\nRunning Fragment Tests\n");
65
81
  for (const suite of this.suites) {
66
- console.log(`\n📦 ${suite.name}`);
82
+ console.log(`\nSuite: ${suite.name}`);
67
83
  for (const test of suite.tests) {
68
84
  try {
85
+ for (const hook of suite.beforeEachHooks) {
86
+ await hook();
87
+ }
69
88
  await test.fn();
70
- console.log(` ✓ ${test.name}`);
89
+ for (const hook of suite.afterEachHooks) {
90
+ await hook();
91
+ }
92
+ console.log(` PASS ${test.name}`);
71
93
  this.passed++;
72
94
  }
73
95
  catch (error) {
74
- console.log(` ${test.name}`);
75
- console.error(` ${error}`);
96
+ console.log(` FAIL ${test.name}`);
97
+ console.error(` ${error?.message ?? error}`);
76
98
  this.failed++;
77
99
  }
78
100
  }
79
101
  }
80
- console.log(`\n\n📊 Results: ${this.passed} passed, ${this.failed} failed\n`);
102
+ console.log(`\nResults: ${this.passed} passed, ${this.failed} failed\n`);
81
103
  if (this.failed > 0) {
82
104
  process.exit(1);
83
105
  }
@@ -94,11 +116,32 @@ exports.TestRunner = TestRunner;
94
116
  * Global test helpers
95
117
  * ====================================================== */
96
118
  function describe(name, fn) {
97
- G.__testRunner?.describe(name, fn);
119
+ if (!G.__testRunner) {
120
+ throw new Error("TestRunner not initialized");
121
+ }
122
+ G.__testRunner.describe(name, fn);
98
123
  }
99
124
  function it(name, fn) {
100
- // Implemented dynamically by TestRunner.describe
125
+ if (!G.it) {
126
+ throw new Error('"it" must be called inside describe()');
127
+ }
128
+ G.it(name, fn);
129
+ }
130
+ function beforeEach(fn) {
131
+ if (!G.beforeEach) {
132
+ throw new Error('"beforeEach" must be called inside describe()');
133
+ }
134
+ G.beforeEach(fn);
101
135
  }
136
+ function afterEach(fn) {
137
+ if (!G.afterEach) {
138
+ throw new Error('"afterEach" must be called inside describe()');
139
+ }
140
+ G.afterEach(fn);
141
+ }
142
+ /* ======================================================
143
+ * Expect / Assertions
144
+ * ====================================================== */
102
145
  function expect(actual) {
103
146
  return {
104
147
  toBe(expected) {
@@ -107,8 +150,10 @@ function expect(actual) {
107
150
  }
108
151
  },
109
152
  toEqual(expected) {
110
- if (JSON.stringify(actual) !== JSON.stringify(expected)) {
111
- throw new Error(`Expected ${JSON.stringify(actual)} to equal ${JSON.stringify(expected)}`);
153
+ const a = JSON.stringify(actual);
154
+ const e = JSON.stringify(expected);
155
+ if (a !== e) {
156
+ throw new Error(`Expected ${a} to equal ${e}`);
112
157
  }
113
158
  },
114
159
  toBeTruthy() {
@@ -122,12 +167,54 @@ function expect(actual) {
122
167
  }
123
168
  },
124
169
  toThrow() {
170
+ if (typeof actual !== "function") {
171
+ throw new Error("toThrow expects a function");
172
+ }
173
+ let threw = false;
125
174
  try {
126
175
  actual();
127
- throw new Error('Expected function to throw');
128
176
  }
129
177
  catch {
130
- /* expected */
178
+ threw = true;
179
+ }
180
+ if (!threw) {
181
+ throw new Error("Expected function to throw an error");
182
+ }
183
+ },
184
+ toBeInstanceOf(expected) {
185
+ if (!(actual instanceof expected)) {
186
+ throw new Error(`Expected object to be instance of ${expected?.name}`);
187
+ }
188
+ },
189
+ toContain(expected) {
190
+ if (!Array.isArray(actual) && typeof actual !== "string") {
191
+ throw new Error("toContain works only on arrays or strings");
192
+ }
193
+ if (!actual.includes(expected)) {
194
+ throw new Error(`Expected ${actual} to contain ${expected}`);
195
+ }
196
+ },
197
+ toHaveProperty(prop) {
198
+ if (actual == null || !(prop in actual)) {
199
+ throw new Error(`Expected object to have property "${prop}"`);
200
+ }
201
+ },
202
+ toBeNull() {
203
+ if (actual !== null) {
204
+ throw new Error(`Expected ${actual} to be null`);
205
+ }
206
+ },
207
+ toBeUndefined() {
208
+ if (actual !== undefined) {
209
+ throw new Error(`Expected ${actual} to be undefined`);
210
+ }
211
+ },
212
+ toHaveLength(expected) {
213
+ if (actual == null || typeof actual.length !== "number") {
214
+ throw new Error("toHaveLength works only on arrays or strings");
215
+ }
216
+ if (actual.length !== expected) {
217
+ throw new Error(`Expected length ${expected}, got ${actual.length}`);
131
218
  }
132
219
  },
133
220
  };
@@ -138,6 +225,12 @@ function expect(actual) {
138
225
  if (require.main === module) {
139
226
  const runner = new TestRunner();
140
227
  G.__testRunner = runner;
141
- runner.loadTestFiles('dist/**/*.spec.js').then(() => runner.run());
228
+ runner
229
+ .loadTestFiles("dist/**/*.spec.js")
230
+ .then(() => runner.run())
231
+ .catch((err) => {
232
+ console.error("Failed to run tests:", err);
233
+ process.exit(1);
234
+ });
142
235
  }
143
236
  //# sourceMappingURL=runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/testing/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/testing/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fragment-ts",
3
- "version": "1.0.17",
3
+ "version": "1.0.19",
4
4
  "description": "Spring Boot-style framework for TypeScript with Express and TypeORM",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -169,12 +169,14 @@ export class InitCommand {
169
169
  "migrate:revert": "fragment migrate:revert",
170
170
  },
171
171
  dependencies: {
172
- "fragment-ts": "^1.0.17",
172
+ "fragment-ts": "^1.0.19",
173
173
  "reflect-metadata": "^0.1.13",
174
174
  },
175
175
  devDependencies: {
176
176
  typescript: "^5.3.3",
177
177
  "@types/node": "^20.10.5",
178
+ "ts-node": "^10.9.2",
179
+ "tsconfig-paths": "^4.2.0",
178
180
  },
179
181
  };
180
182
 
@@ -214,9 +216,7 @@ export class InitCommand {
214
216
  database: process.env.DATABASE_FILE || "database.sqlite",
215
217
  synchronize: true,
216
218
  logging: false,
217
- entities: isProd
218
- ? ["dist/**/*.entity.js"]
219
- : ["src/**/*.entity.ts"],
219
+ entities: isProd ? ["dist/**/*.entity.js"] : ["src/**/*.entity.ts"],
220
220
  migrations: isProd
221
221
  ? ["dist/migrations/**/*.js"]
222
222
  : ["src/migrations/**/*.ts"],