@apollo/gateway 2.4.4 → 2.4.6

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 (176) hide show
  1. package/dist/__generated__/graphqlTypes.d.ts +178 -0
  2. package/dist/__generated__/graphqlTypes.d.ts.map +1 -0
  3. package/dist/__generated__/graphqlTypes.js +31 -0
  4. package/dist/__generated__/graphqlTypes.js.map +1 -0
  5. package/dist/config.d.ts +138 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +60 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/dataRewrites.d.ts +5 -0
  10. package/dist/dataRewrites.d.ts.map +1 -0
  11. package/dist/dataRewrites.js +103 -0
  12. package/dist/dataRewrites.js.map +1 -0
  13. package/dist/datasources/LocalGraphQLDataSource.d.ts +10 -0
  14. package/dist/datasources/LocalGraphQLDataSource.d.ts.map +1 -0
  15. package/dist/datasources/LocalGraphQLDataSource.js +31 -0
  16. package/dist/datasources/LocalGraphQLDataSource.js.map +1 -0
  17. package/dist/datasources/RemoteGraphQLDataSource.d.ts +24 -0
  18. package/dist/datasources/RemoteGraphQLDataSource.d.ts.map +1 -0
  19. package/dist/datasources/RemoteGraphQLDataSource.js +180 -0
  20. package/dist/datasources/RemoteGraphQLDataSource.js.map +1 -0
  21. package/dist/datasources/index.d.ts +4 -0
  22. package/dist/datasources/index.d.ts.map +1 -0
  23. package/dist/datasources/index.js +8 -0
  24. package/dist/datasources/index.js.map +1 -0
  25. package/dist/datasources/parseCacheControlHeader.d.ts +2 -0
  26. package/dist/datasources/parseCacheControlHeader.d.ts.map +1 -0
  27. package/dist/datasources/parseCacheControlHeader.js +16 -0
  28. package/dist/datasources/parseCacheControlHeader.js.map +1 -0
  29. package/dist/datasources/types.d.ts +23 -0
  30. package/dist/datasources/types.d.ts.map +1 -0
  31. package/dist/datasources/types.js +10 -0
  32. package/dist/datasources/types.js.map +1 -0
  33. package/dist/executeQueryPlan.d.ts +15 -0
  34. package/dist/executeQueryPlan.d.ts.map +1 -0
  35. package/dist/executeQueryPlan.js +539 -0
  36. package/dist/executeQueryPlan.js.map +1 -0
  37. package/dist/index.d.ts +113 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +590 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/logger.d.ts +3 -0
  42. package/dist/logger.d.ts.map +1 -0
  43. package/dist/logger.js +15 -0
  44. package/dist/logger.js.map +1 -0
  45. package/dist/operationContext.d.ts +17 -0
  46. package/dist/operationContext.d.ts.map +1 -0
  47. package/dist/operationContext.js +38 -0
  48. package/dist/operationContext.js.map +1 -0
  49. package/dist/resultShaping.d.ts +12 -0
  50. package/dist/resultShaping.d.ts.map +1 -0
  51. package/dist/resultShaping.js +229 -0
  52. package/dist/resultShaping.js.map +1 -0
  53. package/dist/schema-helper/addExtensions.d.ts +3 -0
  54. package/dist/schema-helper/addExtensions.d.ts.map +1 -0
  55. package/dist/schema-helper/addExtensions.js +23 -0
  56. package/dist/schema-helper/addExtensions.js.map +1 -0
  57. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts +31 -0
  58. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts.map +1 -0
  59. package/dist/supergraphManagers/IntrospectAndCompose/index.js +112 -0
  60. package/dist/supergraphManagers/IntrospectAndCompose/index.js.map +1 -0
  61. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts +12 -0
  62. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts.map +1 -0
  63. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js +57 -0
  64. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js.map +1 -0
  65. package/dist/supergraphManagers/LegacyFetcher/index.d.ts +33 -0
  66. package/dist/supergraphManagers/LegacyFetcher/index.d.ts.map +1 -0
  67. package/dist/supergraphManagers/LegacyFetcher/index.js +149 -0
  68. package/dist/supergraphManagers/LegacyFetcher/index.js.map +1 -0
  69. package/dist/supergraphManagers/LocalCompose/index.d.ts +19 -0
  70. package/dist/supergraphManagers/LocalCompose/index.d.ts.map +1 -0
  71. package/dist/supergraphManagers/LocalCompose/index.js +55 -0
  72. package/dist/supergraphManagers/LocalCompose/index.js.map +1 -0
  73. package/dist/supergraphManagers/UplinkSupergraphManager/index.d.ts +63 -0
  74. package/dist/supergraphManagers/UplinkSupergraphManager/index.d.ts.map +1 -0
  75. package/dist/supergraphManagers/UplinkSupergraphManager/index.js +210 -0
  76. package/dist/supergraphManagers/UplinkSupergraphManager/index.js.map +1 -0
  77. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.d.ts +30 -0
  78. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.d.ts.map +1 -0
  79. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.js +145 -0
  80. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.js.map +1 -0
  81. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.d.ts +14 -0
  82. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.d.ts.map +1 -0
  83. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.js +85 -0
  84. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.js.map +1 -0
  85. package/dist/supergraphManagers/index.d.ts +6 -0
  86. package/dist/supergraphManagers/index.d.ts.map +1 -0
  87. package/dist/supergraphManagers/index.js +27 -0
  88. package/dist/supergraphManagers/index.js.map +1 -0
  89. package/dist/typings/graphql.d.ts +11 -0
  90. package/dist/typings/graphql.d.ts.map +1 -0
  91. package/dist/typings/graphql.js +3 -0
  92. package/dist/typings/graphql.js.map +1 -0
  93. package/dist/utilities/array.d.ts +5 -0
  94. package/dist/utilities/array.d.ts.map +1 -0
  95. package/dist/utilities/array.js +46 -0
  96. package/dist/utilities/array.js.map +1 -0
  97. package/dist/utilities/assert.d.ts +2 -0
  98. package/dist/utilities/assert.d.ts.map +1 -0
  99. package/dist/utilities/assert.js +10 -0
  100. package/dist/utilities/assert.js.map +1 -0
  101. package/dist/utilities/deepMerge.d.ts +2 -0
  102. package/dist/utilities/deepMerge.d.ts.map +1 -0
  103. package/dist/utilities/deepMerge.js +34 -0
  104. package/dist/utilities/deepMerge.js.map +1 -0
  105. package/dist/utilities/graphql.d.ts +5 -0
  106. package/dist/utilities/graphql.d.ts.map +1 -0
  107. package/dist/utilities/graphql.js +28 -0
  108. package/dist/utilities/graphql.js.map +1 -0
  109. package/dist/utilities/opentelemetry.d.ts +10 -0
  110. package/dist/utilities/opentelemetry.d.ts.map +1 -0
  111. package/dist/utilities/opentelemetry.js +19 -0
  112. package/dist/utilities/opentelemetry.js.map +1 -0
  113. package/dist/utilities/predicates.d.ts +2 -0
  114. package/dist/utilities/predicates.d.ts.map +1 -0
  115. package/dist/utilities/predicates.js +11 -0
  116. package/dist/utilities/predicates.js.map +1 -0
  117. package/package.json +4 -4
  118. package/src/__generated__/graphqlTypes.ts +33 -2
  119. package/src/__mocks__/tsconfig.json +0 -7
  120. package/src/__tests__/.gitkeep +0 -0
  121. package/src/__tests__/CucumberREADME.md +0 -96
  122. package/src/__tests__/build-query-plan.feature +0 -1471
  123. package/src/__tests__/buildQueryPlan.test.ts +0 -1225
  124. package/src/__tests__/executeQueryPlan.conditions.test.ts +0 -1488
  125. package/src/__tests__/executeQueryPlan.introspection.test.ts +0 -140
  126. package/src/__tests__/executeQueryPlan.test.ts +0 -6140
  127. package/src/__tests__/execution-utils.ts +0 -124
  128. package/src/__tests__/gateway/__snapshots__/opentelemetry.test.ts.snap +0 -195
  129. package/src/__tests__/gateway/buildService.test.ts +0 -249
  130. package/src/__tests__/gateway/endToEnd.test.ts +0 -486
  131. package/src/__tests__/gateway/executor.test.ts +0 -96
  132. package/src/__tests__/gateway/extensions.test.ts +0 -37
  133. package/src/__tests__/gateway/lifecycle-hooks.test.ts +0 -239
  134. package/src/__tests__/gateway/opentelemetry.test.ts +0 -123
  135. package/src/__tests__/gateway/queryPlanCache.test.ts +0 -231
  136. package/src/__tests__/gateway/queryPlannerConfig.test.ts +0 -101
  137. package/src/__tests__/gateway/reporting.test.ts +0 -616
  138. package/src/__tests__/gateway/supergraphSdl.test.ts +0 -396
  139. package/src/__tests__/gateway/testUtils.ts +0 -89
  140. package/src/__tests__/integration/abstract-types.test.ts +0 -1861
  141. package/src/__tests__/integration/aliases.test.ts +0 -180
  142. package/src/__tests__/integration/boolean.test.ts +0 -279
  143. package/src/__tests__/integration/complex-key.test.ts +0 -197
  144. package/src/__tests__/integration/configuration.test.ts +0 -404
  145. package/src/__tests__/integration/custom-directives.test.ts +0 -174
  146. package/src/__tests__/integration/execution-style.test.ts +0 -35
  147. package/src/__tests__/integration/fragments.test.ts +0 -237
  148. package/src/__tests__/integration/list-key.test.ts +0 -128
  149. package/src/__tests__/integration/logger.test.ts +0 -122
  150. package/src/__tests__/integration/managed.test.ts +0 -319
  151. package/src/__tests__/integration/merge-arrays.test.ts +0 -34
  152. package/src/__tests__/integration/multiple-key.test.ts +0 -327
  153. package/src/__tests__/integration/mutations.test.ts +0 -287
  154. package/src/__tests__/integration/networkRequests.test.ts +0 -542
  155. package/src/__tests__/integration/nockMocks.ts +0 -157
  156. package/src/__tests__/integration/provides.test.ts +0 -77
  157. package/src/__tests__/integration/requires.test.ts +0 -359
  158. package/src/__tests__/integration/scope.test.ts +0 -557
  159. package/src/__tests__/integration/single-service.test.ts +0 -119
  160. package/src/__tests__/integration/unions.test.ts +0 -79
  161. package/src/__tests__/integration/value-types.test.ts +0 -382
  162. package/src/__tests__/integration/variables.test.ts +0 -120
  163. package/src/__tests__/nockAssertions.ts +0 -20
  164. package/src/__tests__/queryPlanCucumber.test.ts +0 -55
  165. package/src/__tests__/resultShaping.test.ts +0 -605
  166. package/src/__tests__/testSetup.ts +0 -1
  167. package/src/__tests__/tsconfig.json +0 -8
  168. package/src/core/__tests__/core.test.ts +0 -412
  169. package/src/datasources/__tests__/LocalGraphQLDataSource.test.ts +0 -51
  170. package/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +0 -574
  171. package/src/schema-helper/__tests__/addExtensions.test.ts +0 -70
  172. package/src/supergraphManagers/IntrospectAndCompose/__tests__/IntrospectAndCompose.test.ts +0 -364
  173. package/src/supergraphManagers/IntrospectAndCompose/__tests__/loadServicesFromRemoteEndpoint.test.ts +0 -40
  174. package/src/supergraphManagers/UplinkSupergraphManager/__tests__/UplinkSupergraphManager.test.ts +0 -65
  175. package/src/supergraphManagers/UplinkSupergraphManager/__tests__/loadSupergraphSdlFromStorage.test.ts +0 -511
  176. package/src/utilities/__tests__/deepMerge.test.ts +0 -77
@@ -1,237 +0,0 @@
1
- import { disableFragmentWarnings } from 'graphql-tag';
2
- import { execute } from '../execution-utils';
3
-
4
- beforeAll(() => {
5
- disableFragmentWarnings();
6
- });
7
- it('supports inline fragments (one level)', async () => {
8
- const query = `#graphql
9
- query GetUser {
10
- me {
11
- ... on User {
12
- username
13
- }
14
- }
15
- }
16
- `;
17
-
18
- const { data, queryPlan } = await execute({
19
- query,
20
- });
21
-
22
- expect(data).toEqual({
23
- me: {
24
- username: '@ada',
25
- },
26
- });
27
-
28
- expect(queryPlan).toCallService('accounts');
29
- });
30
-
31
- it('supports inline fragments (multi level)', async () => {
32
- const query = `#graphql
33
- query GetUser {
34
- me {
35
- ... on User {
36
- username
37
- reviews {
38
- ... on Review {
39
- body
40
- product {
41
- ... on Product {
42
- ... on Book {
43
- title
44
- }
45
- ... on Furniture {
46
- name
47
- }
48
- }
49
- }
50
- }
51
- }
52
- }
53
- }
54
- }
55
- `;
56
-
57
- const { data, queryPlan } = await execute({
58
- query,
59
- });
60
-
61
- expect(data).toEqual({
62
- me: {
63
- username: '@ada',
64
- reviews: [
65
- { body: 'Love it!', product: { name: 'Table' } },
66
- { body: 'Too expensive.', product: { name: 'Couch' } },
67
- { body: 'A classic.', product: { title: 'Design Patterns' } },
68
- ],
69
- },
70
- });
71
-
72
- expect(queryPlan).toCallService('accounts');
73
- expect(queryPlan).toCallService('reviews');
74
- expect(queryPlan).toCallService('product');
75
- expect(queryPlan).toCallService('books');
76
- });
77
-
78
- it('supports named fragments (one level)', async () => {
79
- const query = `#graphql
80
- query GetUser {
81
- me {
82
- ...userDetails
83
- }
84
- }
85
-
86
- fragment userDetails on User {
87
- username
88
- }
89
- `;
90
-
91
- const { data, queryPlan } = await execute({
92
- query,
93
- });
94
-
95
- expect(data).toEqual({
96
- me: {
97
- username: '@ada',
98
- },
99
- });
100
-
101
- expect(queryPlan).toCallService('accounts');
102
- });
103
-
104
- it('supports multiple named fragments (one level, mixed ordering)', async () => {
105
- const query = `#graphql
106
- fragment userInfo on User {
107
- name {
108
- first
109
- last
110
- }
111
- }
112
- query GetUser {
113
- me {
114
- ...userDetails
115
- ...userInfo
116
- }
117
- }
118
-
119
- fragment userDetails on User {
120
- username
121
- }
122
- `;
123
-
124
- const { data, queryPlan } = await execute({
125
- query,
126
- });
127
-
128
- expect(data).toEqual({
129
- me: {
130
- username: '@ada',
131
- name: {
132
- first: 'Ada',
133
- last: 'Lovelace',
134
- }
135
- },
136
- });
137
-
138
- expect(queryPlan).toCallService('accounts');
139
- });
140
-
141
- it('supports multiple named fragments (multi level, mixed ordering)', async () => {
142
- const query = `#graphql
143
- fragment reviewDetails on Review {
144
- body
145
- }
146
- query GetUser {
147
- me {
148
- ...userDetails
149
- }
150
- }
151
-
152
- fragment userDetails on User {
153
- username
154
- reviews {
155
- ...reviewDetails
156
- }
157
- }
158
- `;
159
-
160
- const { data, queryPlan } = await execute({
161
- query,
162
- });
163
-
164
- expect(data).toEqual({
165
- me: {
166
- reviews: [
167
- { body: 'Love it!' },
168
- { body: 'Too expensive.' },
169
- { body: 'A classic.' },
170
- ],
171
- username: '@ada',
172
- },
173
- });
174
-
175
- expect(queryPlan).toCallService('accounts');
176
- });
177
-
178
- it('supports variables within fragments', async () => {
179
- const query = `#graphql
180
- query GetUser($format: Boolean) {
181
- me {
182
- ...userDetails
183
- }
184
- }
185
-
186
- fragment userDetails on User {
187
- username
188
- reviews {
189
- body(format: $format)
190
- }
191
- }
192
- `;
193
-
194
- const format = true;
195
- const { data, queryPlan } = await execute({
196
- query,
197
- variables: { format },
198
- });
199
-
200
- expect(data).toEqual({
201
- me: {
202
- username: '@ada',
203
- reviews: [
204
- { body: 'Love it!' },
205
- { body: 'Too expensive.' },
206
- { body: 'A classic.' },
207
- ],
208
- },
209
- });
210
-
211
- expect(queryPlan).toCallService('accounts');
212
- expect(queryPlan).toCallService('reviews');
213
- });
214
-
215
- it('supports root fragments', async () => {
216
- const query = `#graphql
217
- query GetUser {
218
- ... on Query {
219
- me {
220
- username
221
- }
222
- }
223
- }
224
- `;
225
-
226
- const { data, queryPlan } = await execute({
227
- query,
228
- });
229
-
230
- expect(data).toEqual({
231
- me: {
232
- username: '@ada',
233
- },
234
- });
235
-
236
- expect(queryPlan).toCallService('accounts');
237
- });
@@ -1,128 +0,0 @@
1
- import gql from 'graphql-tag';
2
- import { execute, ServiceDefinitionModule } from '../execution-utils';
3
- import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite';
4
-
5
- expect.addSnapshotSerializer(astSerializer);
6
- expect.addSnapshotSerializer(queryPlanSerializer);
7
-
8
- const users = [
9
- { id: ['1', '1'], name: 'Trevor', __typename: 'User' },
10
- { id: ['2', '2'], name: 'James Baxley', __typename: 'User' },
11
- ];
12
-
13
- const reviews = [
14
- { id: '1', authorId: ['1', '1'], body: 'Good', __typename: 'Review' },
15
- { id: '2', authorId: ['2', '2'], body: 'Bad', __typename: 'Review' },
16
- ];
17
-
18
- const reviewService: ServiceDefinitionModule = {
19
- name: 'review',
20
- typeDefs: gql`
21
- type Query {
22
- reviews: [Review!]!
23
- }
24
-
25
- type Review {
26
- id: ID!
27
- author: User!
28
- body: String!
29
- }
30
-
31
- extend type User @key(fields: "id") {
32
- id: [ID!]! @external
33
- }
34
- `,
35
- resolvers: {
36
- Query: {
37
- reviews() {
38
- return reviews;
39
- },
40
- },
41
- Review: {
42
- author(review) {
43
- return {
44
- id: review.authorId,
45
- };
46
- },
47
- },
48
- },
49
- };
50
-
51
- const listsAreEqual = <T>(as: T[], bs: T[]) =>
52
- as.length === bs.length && as.every((_, i) => bs[i] === as[i]);
53
-
54
- const userService: ServiceDefinitionModule = {
55
- name: 'user',
56
- typeDefs: gql`
57
- type User @key(fields: "id") {
58
- id: [ID!]!
59
- name: String!
60
- }
61
- `,
62
- resolvers: {
63
- User: {
64
- __resolveReference(reference) {
65
- return users.find(user => listsAreEqual(user.id, reference.id));
66
- },
67
- },
68
- },
69
- };
70
-
71
- it('fetches data correctly list type @key fields', async () => {
72
- const query = `#graphql
73
- query Reviews {
74
- reviews {
75
- body
76
- author {
77
- name
78
- }
79
- }
80
- }
81
- `;
82
-
83
- const { data, queryPlan } = await execute(
84
- {
85
- query,
86
- },
87
- [userService, reviewService],
88
- );
89
-
90
- expect(data).toEqual({
91
- reviews: [
92
- { body: 'Good', author: { name: 'Trevor' } },
93
- { body: 'Bad', author: { name: 'James Baxley' } },
94
- ],
95
- });
96
- expect(queryPlan).toMatchInlineSnapshot(`
97
- QueryPlan {
98
- Sequence {
99
- Fetch(service: "review") {
100
- {
101
- reviews {
102
- body
103
- author {
104
- __typename
105
- id
106
- }
107
- }
108
- }
109
- },
110
- Flatten(path: "reviews.@.author") {
111
- Fetch(service: "user") {
112
- {
113
- ... on User {
114
- __typename
115
- id
116
- }
117
- } =>
118
- {
119
- ... on User {
120
- name
121
- }
122
- }
123
- },
124
- },
125
- },
126
- }
127
- `);
128
- });
@@ -1,122 +0,0 @@
1
- import { ApolloGateway } from '../..';
2
- import type { Logger } from '@apollo/utils.logger';
3
- import { PassThrough } from "stream";
4
-
5
- import * as winston from "winston";
6
- import WinstonTransport from 'winston-transport';
7
- import * as bunyan from "bunyan";
8
- import * as loglevel from "loglevel";
9
- import * as log4js from "log4js";
10
-
11
- const LOWEST_LOG_LEVEL = "debug";
12
-
13
- const KNOWN_DEBUG_MESSAGE = "Gateway successfully initialized (but not yet loaded)";
14
-
15
- async function triggerKnownDebugMessage(logger: Logger) {
16
- // Trigger a known error.
17
- // This is a bit brittle since it merely leverages a known debug log
18
- // message outside of the constructor, but it seemed worth testing
19
- // the compatibility with `ApolloGateway` itself rather than generically.
20
- // The error does not matter, so it is caught and ignored.
21
- await new ApolloGateway({ logger }).load().catch(_e => undefined);
22
- }
23
-
24
- describe("logger", () => {
25
- it("works with 'winston'", async () => {
26
- const sink = jest.fn();
27
- const transport = new class extends WinstonTransport {
28
- constructor() {
29
- super({
30
- format: winston.format.json(),
31
- });
32
- }
33
-
34
- log(info: any) {
35
- sink(info);
36
- }
37
- };
38
-
39
- const logger = winston.createLogger({ level: 'debug' }).add(transport);
40
-
41
- await triggerKnownDebugMessage(logger);
42
-
43
- expect(sink).toHaveBeenCalledWith(expect.objectContaining({
44
- level: LOWEST_LOG_LEVEL,
45
- message: KNOWN_DEBUG_MESSAGE,
46
- }));
47
- });
48
-
49
- it("works with 'bunyan'", async () => {
50
- const sink = jest.fn();
51
-
52
- // Bunyan uses streams for its logging implementations.
53
- const writable = new PassThrough();
54
- writable.on("data", data => sink(JSON.parse(data.toString())));
55
-
56
- const logger = bunyan.createLogger({
57
- name: "test-logger-bunyan",
58
- streams: [{
59
- level: LOWEST_LOG_LEVEL,
60
- stream: writable,
61
- }]
62
- });
63
-
64
- await triggerKnownDebugMessage(logger);
65
-
66
- expect(sink).toHaveBeenCalledWith(expect.objectContaining({
67
- level: bunyan.DEBUG,
68
- msg: KNOWN_DEBUG_MESSAGE,
69
- }));
70
- });
71
-
72
- it("works with 'loglevel'", async () => {
73
- const sink = jest.fn();
74
-
75
- const logger = loglevel.getLogger("test-logger-loglevel")
76
- logger.methodFactory = (_methodName, level): loglevel.LoggingMethod =>
77
- (message) => sink({ level, message });
78
-
79
- // The `setLevel` method must be called after overwriting `methodFactory`.
80
- // This is an intentional API design pattern of the loglevel package:
81
- // https://www.npmjs.com/package/loglevel#writing-plugins
82
- logger.setLevel(loglevel.levels.DEBUG);
83
-
84
- await triggerKnownDebugMessage(logger);
85
-
86
- expect(sink).toHaveBeenCalledWith({
87
- level: loglevel.levels.DEBUG,
88
- message: KNOWN_DEBUG_MESSAGE,
89
- });
90
- });
91
-
92
- it("works with 'log4js'", async () => {
93
- const sink = jest.fn();
94
-
95
- log4js.configure({
96
- appenders: {
97
- custom: {
98
- type: {
99
- configure: () =>
100
- (loggingEvent: log4js.LoggingEvent) => sink(loggingEvent)
101
- }
102
- }
103
- },
104
- categories: {
105
- default: {
106
- appenders: ['custom'],
107
- level: LOWEST_LOG_LEVEL,
108
- }
109
- }
110
- });
111
-
112
- const logger = log4js.getLogger();
113
- logger.level = LOWEST_LOG_LEVEL;
114
-
115
- await triggerKnownDebugMessage(logger);
116
-
117
- expect(sink).toHaveBeenCalledWith(expect.objectContaining({
118
- level: log4js.levels.DEBUG,
119
- data: [KNOWN_DEBUG_MESSAGE],
120
- }));
121
- });
122
- });