@my-devkit/firebase 1.0.192 → 1.0.194

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 (79) hide show
  1. package/.eslintrc.js +2 -4
  2. package/dist/app-factory.js +3 -3
  3. package/dist/app-factory.js.map +1 -1
  4. package/dist/bus.js +4 -1
  5. package/dist/bus.js.map +1 -1
  6. package/dist/context.js +18 -18
  7. package/dist/context.js.map +1 -1
  8. package/dist/decorators/controller/body.js.map +1 -1
  9. package/dist/decorators/controller/body.spec.js +1 -1
  10. package/dist/decorators/controller/body.spec.js.map +1 -1
  11. package/dist/decorators/controller/controller.spec.js.map +1 -1
  12. package/dist/decorators/controller/get.js +4 -1
  13. package/dist/decorators/controller/get.js.map +1 -1
  14. package/dist/decorators/controller/get.spec.js.map +1 -1
  15. package/dist/decorators/controller/param.js.map +1 -1
  16. package/dist/decorators/controller/param.spec.js +1 -1
  17. package/dist/decorators/controller/param.spec.js.map +1 -1
  18. package/dist/decorators/controller/post.js +4 -1
  19. package/dist/decorators/controller/post.js.map +1 -1
  20. package/dist/decorators/controller/post.spec.js.map +1 -1
  21. package/dist/decorators/controller/query.js.map +1 -1
  22. package/dist/decorators/controller/query.spec.js +1 -1
  23. package/dist/decorators/controller/query.spec.js.map +1 -1
  24. package/dist/decorators/handler/command-handler.js.map +1 -1
  25. package/dist/decorators/handler/command-handler.spec.js.map +1 -1
  26. package/dist/decorators/handler/event-handler.js.map +1 -1
  27. package/dist/decorators/handler/event-handler.spec.js.map +1 -1
  28. package/dist/firestore-client.js +47 -32
  29. package/dist/firestore-client.js.map +1 -1
  30. package/dist/handler-helper.js.map +1 -1
  31. package/dist/interfaces/type.d.ts +1 -1
  32. package/dist/reflect.js +0 -1
  33. package/dist/reflect.js.map +1 -1
  34. package/dist/sanity-check/controller.js.map +1 -1
  35. package/dist/sanity-check/module.js +1 -3
  36. package/dist/sanity-check/module.js.map +1 -1
  37. package/dist/server/middlewares/authentication-middleware.js +3 -1
  38. package/dist/server/middlewares/authentication-middleware.js.map +1 -1
  39. package/dist/server/middlewares/create-context-middleware.js.map +1 -1
  40. package/dist/server/middlewares/error-middleware.js.map +1 -1
  41. package/dist/server/middlewares/headers-middleware.js.map +1 -1
  42. package/dist/server/server.js.map +1 -1
  43. package/dist/zip-helper.js +1 -1
  44. package/dist/zip-helper.js.map +1 -1
  45. package/package.json +5 -5
  46. package/src/app-factory.ts +114 -59
  47. package/src/bus.ts +22 -5
  48. package/src/context.ts +2 -2
  49. package/src/decorators/controller/body.spec.ts +11 -5
  50. package/src/decorators/controller/body.ts +10 -4
  51. package/src/decorators/controller/controller.spec.ts +1 -3
  52. package/src/decorators/controller/get.spec.ts +0 -1
  53. package/src/decorators/controller/get.ts +5 -2
  54. package/src/decorators/controller/param.spec.ts +15 -5
  55. package/src/decorators/controller/param.ts +8 -3
  56. package/src/decorators/controller/post.spec.ts +0 -2
  57. package/src/decorators/controller/post.ts +5 -2
  58. package/src/decorators/controller/query.spec.ts +11 -4
  59. package/src/decorators/controller/query.ts +8 -3
  60. package/src/decorators/handler/command-handler.spec.ts +8 -13
  61. package/src/decorators/handler/command-handler.ts +10 -4
  62. package/src/decorators/handler/event-handler.spec.ts +8 -13
  63. package/src/decorators/handler/event-handler.ts +10 -4
  64. package/src/firestore-client.ts +131 -56
  65. package/src/handler-helper.ts +18 -5
  66. package/src/interfaces/app-config.ts +0 -1
  67. package/src/interfaces/from-array.ts +2 -1
  68. package/src/interfaces/newable.ts +1 -1
  69. package/src/interfaces/type.ts +2 -2
  70. package/src/reflect.ts +19 -10
  71. package/src/sanity-check/controller.ts +0 -1
  72. package/src/sanity-check/module.ts +2 -6
  73. package/src/server/middlewares/authentication-middleware.ts +14 -5
  74. package/src/server/middlewares/create-context-middleware.ts +5 -1
  75. package/src/server/middlewares/error-middleware.ts +5 -1
  76. package/src/server/middlewares/headers-middleware.ts +5 -1
  77. package/src/server/server.ts +32 -11
  78. package/src/zip-helper.ts +1 -1
  79. package/tsconfig.json +1 -4
@@ -7,11 +7,17 @@ export function Body(): ParameterDecorator {
7
7
  return (target, propertyKey, parameterIndex) => {
8
8
  const methodArguments = reflect(target, propertyKey).getParameters();
9
9
  if (!methodArguments.hasOwnProperty(parameterIndex)) {
10
- throw new Error(`Body: can't find argument ${parameterIndex} on ${target.constructor.name}.${propertyKey.toString()}`);
10
+ throw new Error(
11
+ `Body: can't find argument ${parameterIndex} on ${target.constructor.name}.${propertyKey.toString()}`
12
+ );
11
13
  }
12
14
 
13
- const injector: RequestArgumentInjector = (req: Server.Request) => deserialize(req.body, methodArguments[parameterIndex]);
15
+ const injector: RequestArgumentInjector = (req: Server.Request) =>
16
+ deserialize(req.body, methodArguments[parameterIndex]);
14
17
 
15
- reflect(target, propertyKey).registerControllerRouteArgumentInjector(injector, parameterIndex);
16
- }
18
+ reflect(target, propertyKey).registerControllerRouteArgumentInjector(
19
+ injector,
20
+ parameterIndex
21
+ );
22
+ };
17
23
  }
@@ -4,10 +4,8 @@ import { reflect } from '../../reflect';
4
4
  import { Controller } from './controller';
5
5
 
6
6
  describe('Given a Controller decorator', () => {
7
-
8
7
  @Controller('test')
9
- class TestClass {
10
- }
8
+ class TestClass {}
11
9
 
12
10
  describe('When decorator is called', () => {
13
11
  it('Then we should retrieve information via reflect', async () => {
@@ -7,7 +7,6 @@ import { RequestMethod } from '../../request-method.enum';
7
7
  import { Controller } from './controller';
8
8
 
9
9
  describe('Given a Get decorator', () => {
10
-
11
10
  @Controller('test')
12
11
  class TestClass {
13
12
  public test = guid();
@@ -3,6 +3,9 @@ import { RequestMethod } from '../../request-method.enum';
3
3
 
4
4
  export function Get(path: string): MethodDecorator {
5
5
  return (target, propertyKey) => {
6
- reflect(target.constructor, propertyKey).registerControllerRoute({ path, requestMethod: RequestMethod.GET });
7
- }
6
+ reflect(target.constructor, propertyKey).registerControllerRoute({
7
+ path,
8
+ requestMethod: RequestMethod.GET
9
+ });
10
+ };
8
11
  }
@@ -6,7 +6,6 @@ import { Get } from './get';
6
6
  import { Param } from './param';
7
7
 
8
8
  describe('Given a Param decorator', () => {
9
-
10
9
  enum Gender {
11
10
  Male = 0,
12
11
  Female = 'Female'
@@ -20,7 +19,10 @@ describe('Given a Param decorator', () => {
20
19
  }
21
20
 
22
21
  @Get(':gender/:minDate')
23
- public getByGenderOlderThan(@Param('minDate') minDate: Date, @Param('gender') gender: Gender): string {
22
+ public getByGenderOlderThan(
23
+ @Param('minDate') minDate: Date,
24
+ @Param('gender') gender: Gender
25
+ ): string {
24
26
  return `getByGenderOlderThan: ${gender} ${minDate.toISOString()}`;
25
27
  }
26
28
  }
@@ -31,16 +33,24 @@ describe('Given a Param decorator', () => {
31
33
  expect(config.routes.length).equal(2, 'Wrong route count detected');
32
34
 
33
35
  const request1 = <any>{ params: { id: 'guid 1' } };
34
- expect(config.routes[0].argumentInjectors.length).equal(1, 'Wrong argumentInjectors length for getById');
36
+ expect(config.routes[0].argumentInjectors.length).equal(
37
+ 1,
38
+ 'Wrong argumentInjectors length for getById'
39
+ );
35
40
  expect(config.routes[0].argumentInjectors[0](request1)).to.be.a('string');
36
41
  expect(config.routes[0].argumentInjectors[0](request1)).equals('guid 1');
37
42
 
38
43
  const request2 = <any>{ params: { gender: 0, minDate: '2021-02-15T14:23:00.318Z' } };
39
44
 
40
- expect(config.routes[1].argumentInjectors.length).equal(2, 'Wrong argumentInjectors length for getByGenderOlderThan');
45
+ expect(config.routes[1].argumentInjectors.length).equal(
46
+ 2,
47
+ 'Wrong argumentInjectors length for getByGenderOlderThan'
48
+ );
41
49
 
42
50
  expect(config.routes[1].argumentInjectors[0](request2)).to.be.a('Date');
43
- expect(config.routes[1].argumentInjectors[0](request2).toISOString()).equals((new Date('2021-02-15T14:23:00.318Z')).toISOString());
51
+ expect(config.routes[1].argumentInjectors[0](request2).toISOString()).equals(
52
+ new Date('2021-02-15T14:23:00.318Z').toISOString()
53
+ );
44
54
 
45
55
  expect(config.routes[1].argumentInjectors[1](request2)).equals(Gender.Male);
46
56
 
@@ -7,7 +7,9 @@ export function Param(key: string): ParameterDecorator {
7
7
  return (target, propertyKey, parameterIndex) => {
8
8
  const methodArguments = reflect(target, propertyKey).getParameters();
9
9
  if (!methodArguments.hasOwnProperty(parameterIndex)) {
10
- throw new Error(`Param: can't find argument ${parameterIndex} on ${target.constructor.name}.${propertyKey.toString()}`);
10
+ throw new Error(
11
+ `Param: can't find argument ${parameterIndex} on ${target.constructor.name}.${propertyKey.toString()}`
12
+ );
11
13
  }
12
14
 
13
15
  const injector: RequestArgumentInjector = (req: Server.Request) => {
@@ -16,6 +18,9 @@ export function Param(key: string): ParameterDecorator {
16
18
  }
17
19
  };
18
20
 
19
- reflect(target, propertyKey).registerControllerRouteArgumentInjector(injector, parameterIndex);
20
- }
21
+ reflect(target, propertyKey).registerControllerRouteArgumentInjector(
22
+ injector,
23
+ parameterIndex
24
+ );
25
+ };
21
26
  }
@@ -8,7 +8,6 @@ import { Controller } from './controller';
8
8
  import { Post } from './post';
9
9
 
10
10
  describe('Given a Post decorator', () => {
11
-
12
11
  class Command {
13
12
  @autoserializeAs(String)
14
13
  public testString: string = null;
@@ -17,7 +16,6 @@ describe('Given a Post decorator', () => {
17
16
  public testDate: Date = null;
18
17
  }
19
18
 
20
-
21
19
  @Controller('test')
22
20
  class TestClass {
23
21
  public test = guid();
@@ -3,6 +3,9 @@ import { RequestMethod } from '../../request-method.enum';
3
3
 
4
4
  export function Post(path: string): MethodDecorator {
5
5
  return (target, propertyKey) => {
6
- reflect(target.constructor, propertyKey).registerControllerRoute({ path, requestMethod: RequestMethod.POST });
7
- }
6
+ reflect(target.constructor, propertyKey).registerControllerRoute({
7
+ path,
8
+ requestMethod: RequestMethod.POST
9
+ });
10
+ };
8
11
  }
@@ -6,7 +6,6 @@ import { Get } from './get';
6
6
  import { Query } from './query';
7
7
 
8
8
  describe('Given a Query decorator', () => {
9
-
10
9
  enum Gender {
11
10
  Male = 0,
12
11
  Female = 'Female'
@@ -31,16 +30,24 @@ describe('Given a Query decorator', () => {
31
30
  expect(config.routes.length).equal(2, 'Wrong route count detected');
32
31
 
33
32
  const request1 = <any>{ query: { id: 'guid 1' } };
34
- expect(config.routes[0].argumentInjectors.length).equal(1, 'Wrong argumentInjectors length for getById');
33
+ expect(config.routes[0].argumentInjectors.length).equal(
34
+ 1,
35
+ 'Wrong argumentInjectors length for getById'
36
+ );
35
37
  expect(config.routes[0].argumentInjectors[0](request1)).to.be.a('string');
36
38
  expect(config.routes[0].argumentInjectors[0](request1)).equals('guid 1');
37
39
 
38
40
  const request2 = <any>{ query: { gender: 0, minDate: '2021-02-15T14:23:00.318Z' } };
39
41
 
40
- expect(config.routes[1].argumentInjectors.length).equal(2, 'Wrong argumentInjectors length for getByGenderOlderThan');
42
+ expect(config.routes[1].argumentInjectors.length).equal(
43
+ 2,
44
+ 'Wrong argumentInjectors length for getByGenderOlderThan'
45
+ );
41
46
 
42
47
  expect(config.routes[1].argumentInjectors[0](request2)).to.be.a('Date');
43
- expect(config.routes[1].argumentInjectors[0](request2).toISOString()).equals((new Date('2021-02-15T14:23:00.318Z')).toISOString());
48
+ expect(config.routes[1].argumentInjectors[0](request2).toISOString()).equals(
49
+ new Date('2021-02-15T14:23:00.318Z').toISOString()
50
+ );
44
51
 
45
52
  expect(config.routes[1].argumentInjectors[1](request2)).equals(Gender.Male);
46
53
 
@@ -7,7 +7,9 @@ export function Query(key: string): ParameterDecorator {
7
7
  return (target, propertyKey, parameterIndex) => {
8
8
  const methodArguments = reflect(target, propertyKey).getParameters();
9
9
  if (!methodArguments.hasOwnProperty(parameterIndex)) {
10
- throw new Error(`Query: can't find argument ${parameterIndex} on ${target.constructor.name}.${propertyKey.toString()}`);
10
+ throw new Error(
11
+ `Query: can't find argument ${parameterIndex} on ${target.constructor.name}.${propertyKey.toString()}`
12
+ );
11
13
  }
12
14
 
13
15
  const injector: RequestArgumentInjector = (req: Server.Request) => {
@@ -16,6 +18,9 @@ export function Query(key: string): ParameterDecorator {
16
18
  }
17
19
  };
18
20
 
19
- reflect(target, propertyKey).registerControllerRouteArgumentInjector(injector, parameterIndex);
20
- }
21
+ reflect(target, propertyKey).registerControllerRouteArgumentInjector(
22
+ injector,
23
+ parameterIndex
24
+ );
25
+ };
21
26
  }
@@ -5,12 +5,9 @@ import { reflect } from '../../reflect';
5
5
  import { CommandHandler } from './command-handler';
6
6
 
7
7
  describe('Given a CommandHandler decorator', () => {
8
-
9
8
  describe('When decorator is called', () => {
10
-
11
9
  describe('And decorated method has no parameter', () => {
12
10
  it('Then we should retrieve information via reflect', async () => {
13
-
14
11
  try {
15
12
  class TestClass {
16
13
  @CommandHandler()
@@ -28,7 +25,6 @@ describe('Given a CommandHandler decorator', () => {
28
25
 
29
26
  describe('And decorated method has more than 1 parameter', () => {
30
27
  it('Then we should retrieve information via reflect', async () => {
31
-
32
28
  try {
33
29
  class TestClass {
34
30
  @CommandHandler()
@@ -46,7 +42,6 @@ describe('Given a CommandHandler decorator', () => {
46
42
 
47
43
  describe('And decorated method parameter is not a command', () => {
48
44
  it('Then we should retrieve information via reflect', async () => {
49
-
50
45
  try {
51
46
  class FakeCommand {
52
47
  test: string;
@@ -61,18 +56,17 @@ describe('Given a CommandHandler decorator', () => {
61
56
 
62
57
  reflect(TestClass).getHandlerConfiguration();
63
58
  } catch (error) {
64
- expect(error.message).equal('TestClass.create should have a command as argument!');
59
+ expect(error.message).equal(
60
+ 'TestClass.create should have a command as argument!'
61
+ );
65
62
  }
66
63
  });
67
64
  });
68
65
 
69
66
  describe('And handler is correctly implemented', () => {
67
+ class CreateCommand extends Command {}
70
68
 
71
- class CreateCommand extends Command {
72
- }
73
-
74
- class UpdateCommand extends Command {
75
- }
69
+ class UpdateCommand extends Command {}
76
70
 
77
71
  class TestClass {
78
72
  @CommandHandler()
@@ -86,7 +80,9 @@ describe('Given a CommandHandler decorator', () => {
86
80
  }
87
81
  }
88
82
  it('Then we should retrieve information via reflect', async () => {
89
- const commandHandlers = Array.from(reflect(TestClass).getHandlerConfiguration().commandHandlers.values());
83
+ const commandHandlers = Array.from(
84
+ reflect(TestClass).getHandlerConfiguration().commandHandlers.values()
85
+ );
90
86
 
91
87
  expect(commandHandlers.length).equal(2, 'Wrong route count detected');
92
88
 
@@ -95,7 +91,6 @@ describe('Given a CommandHandler decorator', () => {
95
91
 
96
92
  expect(commandHandlers[1].methodName).equal('update');
97
93
  expect(commandHandlers[1].command.constructor.name).equal('UpdateCommand');
98
-
99
94
  });
100
95
  });
101
96
  });
@@ -7,17 +7,23 @@ export function CommandHandler(): MethodDecorator {
7
7
  const paramTypes = reflect(target, propertyKey).getParameters();
8
8
 
9
9
  if (paramTypes.length === 0) {
10
- throw new Error(`${target.constructor.name}.${propertyKey.toString()} should have one argument!`);
10
+ throw new Error(
11
+ `${target.constructor.name}.${propertyKey.toString()} should have one argument!`
12
+ );
11
13
  }
12
14
 
13
15
  if (paramTypes.length > 1) {
14
- throw new Error(`${target.constructor.name}.${propertyKey.toString()} should have only one argument!`);
16
+ throw new Error(
17
+ `${target.constructor.name}.${propertyKey.toString()} should have only one argument!`
18
+ );
15
19
  }
16
20
 
17
21
  if (!(paramTypes[0].prototype instanceof Command)) {
18
- throw new Error(`${target.constructor.name}.${propertyKey.toString()} should have a command as argument!`);
22
+ throw new Error(
23
+ `${target.constructor.name}.${propertyKey.toString()} should have a command as argument!`
24
+ );
19
25
  }
20
26
 
21
27
  reflect(target, propertyKey).registerCommandHandler(<any>paramTypes[0].prototype);
22
- }
28
+ };
23
29
  }
@@ -6,12 +6,9 @@ import { reflect } from '../../reflect';
6
6
  import { EventHandler } from './event-handler';
7
7
 
8
8
  describe('Given a EventHandler decorator', () => {
9
-
10
9
  describe('When decorator is called', () => {
11
-
12
10
  describe('And decorated method has no parameter', () => {
13
11
  it('Then we should retrieve information via reflect', async () => {
14
-
15
12
  try {
16
13
  class TestClass {
17
14
  @EventHandler(ExecutionMode.Asynchronous)
@@ -29,7 +26,6 @@ describe('Given a EventHandler decorator', () => {
29
26
 
30
27
  describe('And decorated method has more than 1 parameter', () => {
31
28
  it('Then we should retrieve information via reflect', async () => {
32
-
33
29
  try {
34
30
  class TestClass {
35
31
  @EventHandler(ExecutionMode.Asynchronous)
@@ -47,7 +43,6 @@ describe('Given a EventHandler decorator', () => {
47
43
 
48
44
  describe('And decorated method parameter is not a command', () => {
49
45
  it('Then we should retrieve information via reflect', async () => {
50
-
51
46
  try {
52
47
  class FakeEvent {
53
48
  test: string;
@@ -62,18 +57,17 @@ describe('Given a EventHandler decorator', () => {
62
57
 
63
58
  reflect(TestClass).getHandlerConfiguration();
64
59
  } catch (error) {
65
- expect(error.message).equal('TestClass.created should have an event as argument!');
60
+ expect(error.message).equal(
61
+ 'TestClass.created should have an event as argument!'
62
+ );
66
63
  }
67
64
  });
68
65
  });
69
66
 
70
67
  describe('And handler is correctly implemented', () => {
68
+ class CreatedEvent extends Event {}
71
69
 
72
- class CreatedEvent extends Event {
73
- }
74
-
75
- class UpdatedEvent extends Event {
76
- }
70
+ class UpdatedEvent extends Event {}
77
71
 
78
72
  class TestClass {
79
73
  @EventHandler(ExecutionMode.Asynchronous)
@@ -87,7 +81,9 @@ describe('Given a EventHandler decorator', () => {
87
81
  }
88
82
  }
89
83
  it('Then we should retrieve information via reflect', async () => {
90
- const eventHandlers = Array.from(reflect(TestClass).getHandlerConfiguration().eventHandlers.values());
84
+ const eventHandlers = Array.from(
85
+ reflect(TestClass).getHandlerConfiguration().eventHandlers.values()
86
+ );
91
87
 
92
88
  expect(eventHandlers.length).equal(2, 'Wrong route count detected');
93
89
 
@@ -98,7 +94,6 @@ describe('Given a EventHandler decorator', () => {
98
94
  expect(eventHandlers[1].methodName).equal('updated');
99
95
  expect(eventHandlers[1].executionMode).equal(ExecutionMode.Synchronous);
100
96
  expect(eventHandlers[1].event.constructor.name).equal('UpdatedEvent');
101
-
102
97
  });
103
98
  });
104
99
  });
@@ -8,17 +8,23 @@ export function EventHandler(mode: ExecutionMode): MethodDecorator {
8
8
  const paramTypes = reflect(target, propertyKey).getParameters();
9
9
 
10
10
  if (paramTypes.length === 0) {
11
- throw new Error(`${target.constructor.name}.${propertyKey.toString()} should have one argument!`);
11
+ throw new Error(
12
+ `${target.constructor.name}.${propertyKey.toString()} should have one argument!`
13
+ );
12
14
  }
13
15
 
14
16
  if (paramTypes.length > 1) {
15
- throw new Error(`${target.constructor.name}.${propertyKey.toString()} should have only one argument!`);
17
+ throw new Error(
18
+ `${target.constructor.name}.${propertyKey.toString()} should have only one argument!`
19
+ );
16
20
  }
17
21
 
18
22
  if (!(paramTypes[0].prototype instanceof Event)) {
19
- throw new Error(`${target.constructor.name}.${propertyKey.toString()} should have an event as argument!`);
23
+ throw new Error(
24
+ `${target.constructor.name}.${propertyKey.toString()} should have an event as argument!`
25
+ );
20
26
  }
21
27
 
22
28
  reflect(target, propertyKey).registerEventHandler(<any>paramTypes[0].prototype, mode);
23
- }
29
+ };
24
30
  }