@common-stack/generate-plugin 5.0.6-alpha.3 → 5.0.6-alpha.5

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 (141) hide show
  1. package/.eslintrc.json +1 -1
  2. package/CHANGELOG.md +8 -0
  3. package/executors.json +14 -0
  4. package/generators.json +15 -0
  5. package/lib/executors/sort-package-json/executor.cjs +46 -0
  6. package/lib/executors/sort-package-json/executor.cjs.map +1 -0
  7. package/lib/executors/sort-package-json/executor.d.ts +4 -0
  8. package/lib/executors/sort-package-json/executor.mjs +46 -0
  9. package/lib/executors/sort-package-json/executor.mjs.map +1 -0
  10. package/lib/executors/sort-package-json/executor.spec.d.ts +1 -0
  11. package/lib/executors/sort-package-json/schema.json +9 -0
  12. package/lib/executors/update-deploy-version/executor.cjs +22 -0
  13. package/lib/executors/update-deploy-version/executor.cjs.map +1 -0
  14. package/lib/executors/update-deploy-version/executor.d.ts +4 -0
  15. package/lib/executors/update-deploy-version/executor.mjs +22 -0
  16. package/lib/executors/update-deploy-version/executor.mjs.map +1 -0
  17. package/lib/executors/update-deploy-version/executor.spec.d.ts +1 -0
  18. package/lib/executors/update-deploy-version/schema.json +14 -0
  19. package/lib/generators/add-backend/files/package.json +5 -5
  20. package/lib/generators/add-backend/files/tsconfig.json +1 -1
  21. package/lib/generators/add-backend/files/webpack.config.js +6 -10
  22. package/lib/generators/add-browser-package/files/package.json +1 -1
  23. package/lib/generators/add-client-package/files/CHANGELOG.md +807 -0
  24. package/lib/generators/add-client-package/files/LICENSE +674 -0
  25. package/lib/generators/add-client-package/files/jest.config.js +13 -0
  26. package/lib/generators/add-client-package/files/package.json +31 -0
  27. package/lib/generators/add-client-package/files/rollup.config.mjs +29 -0
  28. package/lib/generators/add-client-package/files/src/components/index.tsx.template +1 -0
  29. package/lib/generators/add-client-package/files/src/index.ts.template +1 -0
  30. package/lib/generators/add-client-package/files/tsconfig.json +27 -0
  31. package/lib/generators/add-client-package/files/webpack.config.js +72 -0
  32. package/lib/generators/add-client-package/generator.cjs +19 -0
  33. package/lib/generators/add-client-package/generator.cjs.map +1 -0
  34. package/lib/generators/add-client-package/generator.d.ts +4 -0
  35. package/lib/generators/add-client-package/generator.mjs +19 -0
  36. package/lib/generators/add-client-package/generator.mjs.map +1 -0
  37. package/lib/generators/add-client-package/generator.spec.d.ts +1 -0
  38. package/lib/generators/add-client-package/schema.json +19 -0
  39. package/lib/generators/add-core-package/files/CHANGELOG.md +1076 -0
  40. package/lib/generators/add-core-package/files/LICENSE +39 -0
  41. package/lib/generators/add-core-package/files/jest.config.js +3 -0
  42. package/lib/generators/add-core-package/files/package.json +31 -0
  43. package/lib/generators/add-core-package/files/rollup.config.mjs +65 -0
  44. package/lib/generators/add-core-package/files/src/constants/index.ts.template +1 -0
  45. package/lib/generators/add-core-package/files/src/constants/types.ts.template +3 -0
  46. package/lib/generators/add-core-package/files/src/index.ts.template +2 -0
  47. package/lib/generators/add-core-package/files/src/types/index.ts.template +1 -0
  48. package/lib/generators/add-core-package/files/src/types/types.ts.template +17 -0
  49. package/lib/generators/add-core-package/files/tsconfig.json +22 -0
  50. package/lib/generators/add-core-package/files/webpack.config.js +53 -0
  51. package/lib/generators/add-core-package/generator.cjs +19 -0
  52. package/lib/generators/add-core-package/generator.cjs.map +1 -0
  53. package/lib/generators/add-core-package/generator.d.ts +4 -0
  54. package/lib/generators/add-core-package/generator.mjs +19 -0
  55. package/lib/generators/add-core-package/generator.mjs.map +1 -0
  56. package/lib/generators/add-core-package/generator.spec.d.ts +1 -0
  57. package/lib/generators/add-core-package/schema.json +19 -0
  58. package/lib/generators/add-frontend/templates/package.json +8 -8
  59. package/lib/generators/add-fullstack/files/package.json +1 -1
  60. package/lib/generators/add-moleculer/files/package.json +5 -5
  61. package/lib/generators/add-server-package/files/CHANGELOG.md +2599 -0
  62. package/lib/generators/add-server-package/files/LICENSE +674 -0
  63. package/lib/generators/add-server-package/files/jest.config.js +32 -0
  64. package/lib/generators/add-server-package/files/package.json +78 -0
  65. package/lib/generators/add-server-package/files/rollup.config.mjs +30 -0
  66. package/lib/generators/add-server-package/files/src/constants/constants.ts.template +62 -0
  67. package/lib/generators/add-server-package/files/src/constants/index.ts.template +1 -0
  68. package/lib/generators/add-server-package/files/src/constants/types.ts.template +21 -0
  69. package/lib/generators/add-server-package/files/src/index.ts.template +6 -0
  70. package/lib/generators/add-server-package/files/src/module.ts.template +6 -0
  71. package/lib/generators/add-server-package/files/tsconfig.json +27 -0
  72. package/lib/generators/add-server-package/generator.cjs +19 -0
  73. package/lib/generators/add-server-package/generator.cjs.map +1 -0
  74. package/lib/generators/add-server-package/generator.d.ts +4 -0
  75. package/lib/generators/add-server-package/generator.mjs +19 -0
  76. package/lib/generators/add-server-package/generator.mjs.map +1 -0
  77. package/lib/generators/add-server-package/generator.spec.d.ts +1 -0
  78. package/lib/generators/add-server-package/schema.json +19 -0
  79. package/lib/index.cjs +1 -1
  80. package/lib/index.d.ts +5 -0
  81. package/lib/index.mjs +1 -1
  82. package/package.json +3 -2
  83. package/project.json +12 -1
  84. package/rollup.config.mjs +8 -0
  85. package/src/executors/sort-package-json/executor.spec.ts +18 -0
  86. package/src/executors/sort-package-json/executor.ts +53 -0
  87. package/src/executors/sort-package-json/schema.d.ts +1 -0
  88. package/src/executors/sort-package-json/schema.json +9 -0
  89. package/src/executors/update-deploy-version/executor.spec.ts +18 -0
  90. package/src/executors/update-deploy-version/executor.ts +36 -0
  91. package/src/executors/update-deploy-version/schema.d.ts +3 -0
  92. package/src/executors/update-deploy-version/schema.json +14 -0
  93. package/src/generators/add-client-package/generator.spec.ts +20 -0
  94. package/src/generators/add-client-package/generator.ts +23 -0
  95. package/src/generators/add-client-package/schema.d.ts +4 -0
  96. package/src/generators/add-client-package/schema.json +19 -0
  97. package/src/generators/add-core-package/generator.spec.ts +20 -0
  98. package/src/generators/add-core-package/generator.ts +23 -0
  99. package/src/generators/add-core-package/schema.d.ts +4 -0
  100. package/src/generators/add-core-package/schema.json +19 -0
  101. package/src/generators/add-fullstack/files/package.json +1 -1
  102. package/src/generators/add-moleculer/files/package.json +5 -5
  103. package/src/generators/add-server-package/generator.spec.ts +20 -0
  104. package/src/generators/add-server-package/generator.ts +23 -0
  105. package/src/generators/add-server-package/schema.d.ts +4 -0
  106. package/src/generators/add-server-package/schema.json +19 -0
  107. package/src/index.ts +5 -0
  108. package/lib/generators/add-backend/files/knexfile.js +0 -63
  109. package/lib/generators/add-backend/files/src/api/remote-config.ts.template +0 -11
  110. package/lib/generators/add-backend/files/src/api/resolver.ts.template +0 -15
  111. package/lib/generators/add-backend/files/src/api/scalar.ts.template +0 -16
  112. package/lib/generators/add-backend/files/src/api/schema-builder.ts.template +0 -189
  113. package/lib/generators/add-backend/files/src/api/utils.ts.template +0 -44
  114. package/lib/generators/add-backend/files/src/config/moleculer.config.ts.template +0 -228
  115. package/lib/generators/add-backend/files/src/connectors/connection-broker.ts.template +0 -80
  116. package/lib/generators/add-backend/files/src/connectors/graphql-pubsub-connector.ts.template +0 -43
  117. package/lib/generators/add-backend/files/src/connectors/mongo-connector.ts.template +0 -78
  118. package/lib/generators/add-backend/files/src/connectors/nats-connector.ts.template +0 -82
  119. package/lib/generators/add-backend/files/src/connectors/redis-connector.ts.template +0 -73
  120. package/lib/generators/add-backend/files/src/express-app.ts.template +0 -67
  121. package/lib/generators/add-backend/files/src/interfaces/index.ts.template +0 -1
  122. package/lib/generators/add-backend/files/src/interfaces/module-interface.ts.template +0 -16
  123. package/lib/generators/add-backend/files/src/main.spec.ts.template +0 -129
  124. package/lib/generators/add-backend/files/src/middleware/__tests__/cors.test.ts.template +0 -12
  125. package/lib/generators/add-backend/files/src/middleware/cors.ts.template +0 -31
  126. package/lib/generators/add-backend/files/src/middleware/error.ts.template +0 -63
  127. package/lib/generators/add-backend/files/src/middleware/moleculer-inter-namespace.ts.template +0 -60
  128. package/lib/generators/add-backend/files/src/middleware/persistedQuery.ts.template +0 -40
  129. package/lib/generators/add-backend/files/src/middleware/sentry.ts.template +0 -9
  130. package/lib/generators/add-backend/files/src/middleware/services.ts.template +0 -16
  131. package/lib/generators/add-backend/files/src/middleware/tracer.ts.template +0 -24
  132. package/lib/generators/add-backend/files/src/modules/auth/schema/auth-schema.graphql +0 -25
  133. package/lib/generators/add-backend/files/src/server-setup/graphql-server.ts.template +0 -185
  134. package/lib/generators/add-backend/files/src/server-setup/graphql-subscription-server.ts.template +0 -113
  135. package/lib/generators/add-backend/files/src/server-setup/graphql-ws.ts.template +0 -158
  136. package/lib/generators/add-backend/files/src/server-setup/mongodb-migration-update.ts.template +0 -47
  137. package/lib/generators/add-backend/files/src/server-setup/utils.ts.template +0 -43
  138. package/lib/generators/add-backend/files/src/server-setup/websocket-multipath-update.ts.template +0 -88
  139. package/lib/generators/add-backend/files/src/stack-server.ts.template +0 -277
  140. package/lib/generators/add-backend/files/src/utils/migrations.ts.template +0 -32
  141. package/lib/generators/add-backend/files/uploads/3986781.ppt +0 -0
@@ -1,228 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-empty-function */
2
- import { BrokerOptions, Errors } from 'moleculer';
3
- import { config } from './env-config';
4
-
5
- /**
6
- * Moleculer ServiceBroker configuration file
7
- *
8
- * More info about options:
9
- * https://moleculer.services/docs/0.14/configuration.html
10
- *
11
- *
12
- * Overwrite options in production:
13
- * ================================
14
- * You can overwrite any option with environment variables.
15
- * For example to overwrite the 'logLevel', use `LOGLEVEL=warn` env var.
16
- * To overwrite a nested parameter, e.g. retryPolicy.retries, use `RETRYPOLICY_RETRIES=10` env var.
17
- *
18
- * To overwrite broker’s deeply nested default options, which are not presented in 'moleculer.config.ts',
19
- * via environment variables, use the `MOL_` prefix and double underscore `__` for nested properties in .env file.
20
- * For example, to set the cacher prefix to `MYCACHE`, you should declare an env var as `MOL_CACHER__OPTIONS__PREFIX=MYCACHE`.
21
- */
22
- const brokerConfig: BrokerOptions = {
23
- // Namespace of nodes to segment your nodes on the same network.
24
- namespace: config.NAMESPACE,
25
- // namespace: null,
26
- // Unique node identifier. Must be unique in a namespace.
27
- // nodeID: config.CONNECTION_ID,
28
-
29
- // Enable/disable logging or use custom logger. More info: https://moleculer.services/docs/0.14/logging.html
30
- // Available logger types: 'Console', 'File', 'Pino', 'Winston', 'Bunyan', 'debug', 'Log4js', 'Datadog'
31
- logger: {
32
- type: 'Console',
33
- options: {
34
- // Using colors on the output
35
- colors: true,
36
- // Print module names with different colors (like docker-compose for containers)
37
- moduleColors: false,
38
- // Line formatter. It can be 'json', 'short',
39
- // 'simple', 'full', a `Function` or a template string like '{timestamp} {level} {nodeID}/{mod}: {msg}'
40
- formatter: 'full',
41
- // Custom object printer. If not defined, it uses the `util.inspect` method.
42
- objectPrinter: null,
43
- // Auto-padding the module name in order to messages begin at the same column.
44
- autoPadding: false,
45
- },
46
- },
47
- // Default log level for built-in console logger. It can be overwritten in logger options above.
48
- // Available values: trace, debug, info, warn, error, fatal
49
- logLevel: config.HEMERA_LOG_LEVEL as any,
50
-
51
- // Define transporter.
52
- // More info: https://moleculer.services/docs/0.14/networking.html
53
- // Note: During the development, you don't need to define it because all services will be loaded locally.
54
- // In production you can set it via `TRANSPORTER=nats://localhost:4222` environment variable.
55
- transporter:
56
- config.NODE_ENV === 'development'
57
- ? 'TCP'
58
- : {
59
- type: 'NATS',
60
- options: {
61
- url: config.NATS_URL,
62
- user: config.NATS_USER,
63
- pass: config.NATS_PW,
64
- reconnectTimeWait: 1000,
65
- },
66
- },
67
-
68
- // Define a cacher.
69
- // More info: https://moleculer.services/docs/0.14/caching.html
70
- // cacher: {
71
- // type: 'Redis',
72
- // enabled: false,
73
- // options: {
74
-
75
- // // Redis settings
76
- // redis: {
77
-
78
- // }
79
- // }
80
- // },
81
-
82
- // Define a serializer.
83
- // Available values: 'JSON', 'Avro', 'ProtoBuf', 'MsgPack', 'Notepack', 'Thrift'.
84
- // More info: https://moleculer.services/docs/0.13/networking.html
85
- serializer: 'JSON',
86
-
87
- // Number of milliseconds to wait before reject a request with a RequestTimeout error. Disabled: 0
88
- requestTimeout: 10 * 1000,
89
-
90
- // Retry policy settings. More info: https://moleculer.services/docs/0.13/fault-tolerance.html#Retry
91
- retryPolicy: {
92
- // Enable feature
93
- enabled: false,
94
- // Count of retries
95
- retries: 5,
96
- // First delay in milliseconds.
97
- delay: 100,
98
- // Maximum delay in milliseconds.
99
- maxDelay: 1000,
100
- // Backoff factor for delay. 2 means exponential backoff.
101
- factor: 2,
102
- // A function to check failed requests.
103
- check: (err: Errors.MoleculerRetryableError) => err && !!err.retryable,
104
- },
105
-
106
- // Limit of calling level. If it reaches the limit, broker will throw an MaxCallLevelError error. (Infinite loop protection)
107
- maxCallLevel: 100,
108
-
109
- // Number of seconds to send heartbeat packet to other nodes.
110
- heartbeatInterval: 5,
111
- // Number of seconds to wait before setting node to unavailable status.
112
- heartbeatTimeout: 15,
113
-
114
- // tslint:disable-next-line:max-line-length
115
- // Tracking requests and waiting for running requests before shutdowning. More info: https://moleculer.services/docs/0.13/fault-tolerance.html
116
- tracking: {
117
- // Enable feature
118
- enabled: false,
119
- // Number of milliseconds to wait before shutdowning the process
120
- shutdownTimeout: 5000,
121
- },
122
-
123
- // Disable built-in request & emit balancer. (Transporter must support it, as well.)
124
- disableBalancer: false,
125
-
126
- // Settings of Service Registry. More info: https://moleculer.services/docs/0.14/registry.html
127
- registry: {
128
- // Define balancing strategy. More info: https://moleculer.services/docs/0.14/balancing.html
129
- // Available values: 'RoundRobin', 'Random', 'CpuUsage', 'Latency'
130
- strategy: 'RoundRobin',
131
- // Enable local action call preferring.
132
- preferLocal: true,
133
- },
134
-
135
- // Settings of Circuit Breaker. More info: https://moleculer.services/docs/0.14/fault-tolerance.html#Circuit-Breaker
136
- circuitBreaker: {
137
- // Enable feature
138
- enabled: false,
139
- // Threshold value. 0.5 means that 50% should be failed for tripping.
140
- threshold: 0.5,
141
- // Minimum request count. Below it, CB does not trip.
142
- minRequestCount: 20,
143
- // Number of seconds for time window.
144
- windowTime: 60,
145
- // Number of milliseconds to switch from open to half-open state
146
- halfOpenTime: 10 * 1000,
147
- // A function to check failed requests.
148
- check: (err: Errors.MoleculerRetryableError) => err && err.code >= 500,
149
- },
150
-
151
- // Settings of bulkhead feature. More info: https://moleculer.services/docs/0.14/fault-tolerance.html#Bulkhead
152
- bulkhead: {
153
- // Enable feature.
154
- enabled: false,
155
- // Maximum concurrent executions.
156
- concurrency: 10,
157
- // Maximum size of queue
158
- maxQueueSize: 100,
159
- },
160
-
161
- // Enable action & event parameter validation. More info: https://moleculer.services/docs/0.14/validating.html
162
- validator: true,
163
-
164
- errorHandler: null,
165
-
166
- // Enable/disable built-in metrics function. More info: https://moleculer.services/docs/0.14/metrics.html
167
- metrics: {
168
- enabled: false,
169
- // Available built-in reporters: 'Console', 'CSV', 'Event', 'Prometheus', 'Datadog', 'StatsD'
170
- reporter: {
171
- type: 'Prometheus',
172
- options: {
173
- // HTTP port
174
- port: 3030,
175
- // HTTP URL path
176
- path: '/metrics',
177
- // Default labels which are appended to all metrics labels
178
- defaultLabels: (registry) => ({
179
- namespace: registry.broker.namespace,
180
- nodeID: registry.broker.nodeID,
181
- }),
182
- },
183
- },
184
- },
185
-
186
- // Enable built-in tracing function. More info: https://moleculer.services/docs/0.14/tracing.html
187
- tracing: {
188
- enabled: true,
189
- // Available built-in exporters: 'Console', 'Datadog', 'Event', 'EventLegacy', 'Jaeger', 'Zipkin'
190
- exporter: {
191
- type: 'Console', // Console exporter is only for development!
192
- options: {
193
- // Custom logger
194
- logger: null,
195
- // Using colors
196
- colors: true,
197
- // Width of row
198
- width: 100,
199
- // Gauge width in the row
200
- gaugeWidth: 40,
201
- },
202
- },
203
- },
204
-
205
- // Register internal services ('$node'). More info: https://moleculer.services/docs/0.13/services.html#Internal-services
206
- internalServices: true,
207
- // Register internal middlewares. More info: https://moleculer.services/docs/0.13/middlewares.html#Internal-middlewares
208
- internalMiddlewares: true,
209
-
210
- // Watch the loaded services and hot reload if they changed.
211
- // You can also enable it in Moleculer Runner with `--hot` argument
212
- hotReload: false,
213
-
214
- // Register custom middlewares
215
- middlewares: [],
216
-
217
-
218
- // Called after broker created.
219
- created(broker) {},
220
-
221
- // Called after broker starte.
222
- started(broker) {},
223
-
224
- // Called after broker stopped.
225
- stopped(broker) {},
226
- };
227
-
228
- export { brokerConfig };
@@ -1,80 +0,0 @@
1
- /* eslint-disable import/no-extraneous-dependencies */
2
- /* eslint-disable no-unused-expressions */
3
- /* eslint-disable no-underscore-dangle */
4
-
5
- import { Transporter, GenericObject } from 'moleculer';
6
- import { CdmLogger } from '@cdm-logger/core';
7
- import { MongoConnector } from './mongo-connector';
8
- import { NatsConnector } from './nats-connector';
9
- import { RedisConnector } from './redis-connector';
10
- import { config } from '../config';
11
- import { GraphqlPubSubConnector } from './graphql-pubsub-connector';
12
-
13
- type ILogger = CdmLogger.ILogger;
14
-
15
- /**
16
- * Connection broker class
17
- *
18
- * @class ConnectionBroker
19
- */
20
- export class ConnectionBroker {
21
- private _mongoConnector: MongoConnector;
22
-
23
- private _redisConnector: RedisConnector;
24
-
25
- private _natsConnector: NatsConnector;
26
-
27
- private _graphqlPubsubConnector: GraphqlPubSubConnector;
28
-
29
- /**
30
- * Creates an instance of ConnectionBroker.
31
- * @param {*} options
32
- * @memberof ConnectionBroker
33
- */
34
- constructor(transporter: string | GenericObject, logger: ILogger) {
35
- if (typeof transporter === 'string') {
36
- if (transporter === 'TCP') {
37
- this._graphqlPubsubConnector = new GraphqlPubSubConnector({ logger, type: 'TCP' });
38
- } else if (transporter === 'NATS') {
39
- this._natsConnector = new NatsConnector({});
40
- this._graphqlPubsubConnector = new GraphqlPubSubConnector({
41
- logger,
42
- type: 'NATS',
43
- client: this._natsConnector,
44
- });
45
- }
46
- } else if (transporter.type === 'NATS') {
47
- this._natsConnector = new NatsConnector(transporter.options);
48
- this._graphqlPubsubConnector = new GraphqlPubSubConnector({
49
- logger,
50
- ...transporter,
51
- client: this._natsConnector,
52
- });
53
- }
54
-
55
- this._mongoConnector = new MongoConnector(config.MONGO_URL);
56
- this._redisConnector = new RedisConnector(); // TODO pass constructor options
57
- }
58
-
59
- public get mongoConnection() {
60
- return this._mongoConnector.connect();
61
- }
62
-
63
- public get redisDataloaderClient() {
64
- return this._redisConnector.getRedisDataloaderClient();
65
- }
66
-
67
- public get natsConnection() {
68
- return this._natsConnector.connect();
69
- }
70
-
71
- public get graphqlPubsub() {
72
- return this._graphqlPubsubConnector.getClient();
73
- }
74
-
75
- public async stop() {
76
- this._mongoConnector && (await this._mongoConnector.disconnect());
77
- this._redisConnector && (await this._redisConnector.disconnect());
78
- this._natsConnector && (await this._natsConnector.disconnect());
79
- }
80
- }
@@ -1,43 +0,0 @@
1
- /* eslint-disable no-return-assign */
2
- import { PubSub, PubSubEngine } from 'graphql-subscriptions';
3
- import { NatsPubSub } from 'graphql-nats-subscriptions';
4
- import { logger } from '@cdm-logger/server';
5
- import { GenericObject } from 'moleculer';
6
- import { CdmLogger } from '@cdm-logger/core';
7
-
8
- type ILogger = CdmLogger.ILogger;
9
-
10
- type PubSubOptions = {
11
- logger: ILogger;
12
- } & GenericObject;
13
-
14
- export class GraphqlPubSubConnector {
15
- private client: PubSubEngine | NatsPubSub;
16
-
17
- private opts: PubSubOptions;
18
-
19
- private logger: ILogger;
20
-
21
- /**
22
- * Creates an instance of GraphqlPubSubConnector.
23
- * @param {*} opts
24
- * @memberof GraphqlPubSubConnector
25
- */
26
- constructor(opts?: PubSubOptions) {
27
- this.opts = opts;
28
- this.logger = opts.logger.child({ className: 'GraphqlPubSubConnector' });
29
- }
30
-
31
- public async getClient() {
32
- if (this.opts.type === 'TCP') {
33
- return (this.client = new PubSub());
34
- }
35
- if (this.opts.type === 'NATS') {
36
- // console.log('--this.copts', this.opts.client)
37
- const natsClient = await this.opts.client.connect();
38
- return (this.client = new NatsPubSub({ client: natsClient, logger }));
39
- }
40
- this.logger.warn('Did not defined known transporter [%s], return default pubsub', this.opts.type);
41
- return (this.client = new PubSub());
42
- }
43
- }
@@ -1,78 +0,0 @@
1
- import { connection, Connection, ConnectOptions, createConnection, plugin } from 'mongoose';
2
- import { defaultsDeep } from 'lodash-es';
3
- import { Db } from 'mongodb';
4
- import { logExecutionTime, LoggerVerbosity } from 'mongoose-execution-time';
5
- import { logger } from '@cdm-logger/server';
6
- import { CdmLogger } from '@cdm-logger/core';
7
- import { config } from '../config';
8
-
9
- type ILogger = CdmLogger.ILogger;
10
-
11
- export class MongoConnector {
12
- private client: Connection;
13
-
14
- private db: Db;
15
-
16
- private opts: ConnectOptions;
17
-
18
- private uri: string;
19
-
20
- private logger: ILogger;
21
-
22
- constructor(uri: string, opts?: ConnectOptions) {
23
- this.opts = defaultsDeep(opts, {});
24
- this.uri = uri;
25
- this.logger = logger.child({ className: 'MongoConnector' });
26
- }
27
-
28
- /**
29
- * Connect to database
30
- *
31
- * @memberof MongoConnector
32
- */
33
- public async connect(): Promise<Connection> {
34
- if (this.client) {
35
- return this.client;
36
- }
37
- const conn = createConnection(this.uri, this.opts).asPromise();
38
-
39
- conn.then((result) => {
40
- this.client = result;
41
- this.db = result.db;
42
- this.logger.info(' MongoDB has connected successfully.');
43
- result.on('disconnected', () => this.logger.warn('Mongoose has disconnected.'));
44
- result.on('error', (err) => this.logger.error('MongoDB error.', err));
45
- result.on('reconnect', () => this.logger.info('Mongoose has reconnected.'));
46
- });
47
- if (
48
- config.NODE_ENV === 'development' ||
49
- __DEBUGGING__ ||
50
- config.LOG_LEVEL === 'debug' ||
51
- config.LOG_LEVEL === 'trace'
52
- ) {
53
- plugin(logExecutionTime, {
54
- logger: this.logger,
55
- loggerVerbosity: LoggerVerbosity.High,
56
- loggerLevel: config.LOG_LEVEL,
57
- });
58
- }
59
-
60
- // eslint-disable-next-line @typescript-eslint/no-var-requires,global-require
61
- // plugin(require('@kolinalabs/mongoose-consistent'), {
62
- // actionDefault: 'no_action',
63
- // });
64
- return conn;
65
- }
66
-
67
- /**
68
- * Disconnect from database
69
- *
70
- * @memberof MongoConnector
71
- */
72
- public async disconnect() {
73
- if (!this.client) {
74
- return;
75
- }
76
- await connection.close();
77
- }
78
- }
@@ -1,82 +0,0 @@
1
- import * as nats from 'nats';
2
- import { defaultsDeep } from 'lodash-es';
3
- import { logger } from '@cdm-logger/server';
4
- import { CdmLogger } from '@cdm-logger/core';
5
-
6
- type ILogger = CdmLogger.ILogger;
7
-
8
- export class NatsConnector {
9
- private opts: nats.ClientOpts;
10
-
11
- private client: nats.Client;
12
-
13
- private logger: ILogger;
14
-
15
- private connected: boolean;
16
-
17
- constructor(opts: nats.ClientOpts) {
18
- this.opts = defaultsDeep(opts, {});
19
- this.logger = logger.child({ className: 'NatsConnector' });
20
- }
21
-
22
- /**
23
- * Connect to a NATS server
24
- *
25
- * @memberof NatsConnector
26
- */
27
- public connect() {
28
- if (this.client) {
29
- return this.client;
30
- }
31
- return new Promise<nats.Client>((resolve, reject) => {
32
- const client = nats.connect(this.opts);
33
-
34
- client.on('connect', () => {
35
- this.client = client;
36
- this.connected = true;
37
- this.logger.info('NATS client is connected.');
38
- resolve(client);
39
- });
40
-
41
- client.on('reconnect', () => {
42
- this.logger.info('NATS client is reconnected.');
43
- this.connected = true;
44
- });
45
-
46
- client.on('reconnecting', () => {
47
- this.logger.warn('NATS client is reconnecting...');
48
- });
49
-
50
- client.on('disconnect', () => {
51
- if (this.connected) {
52
- this.logger.warn('NATS client is disconnected.');
53
- this.connected = false;
54
- }
55
- });
56
-
57
- client.on('error', (e) => {
58
- this.logger.error('NATS error.', e.message);
59
- this.logger.debug(e);
60
- reject(e);
61
- });
62
-
63
- client.on('close', () => {
64
- this.logger.fatal('NATS connection close.');
65
- });
66
- });
67
- }
68
-
69
- /**
70
- * Disconnect from a NATS server
71
- *
72
- * @memberof NatsTransporter
73
- */
74
- public disconnect() {
75
- if (this.client) {
76
- this.client.flush(() => {
77
- this.client.close();
78
- this.client = null;
79
- });
80
- }
81
- }
82
- }
@@ -1,73 +0,0 @@
1
-
2
-
3
- import { defaultsDeep } from 'lodash-es';
4
- import { RedisClusterCache, RedisCache } from 'apollo-server-cache-redis';
5
- import * as IORedis from 'ioredis';
6
- import { logger } from '@cdm-logger/server';
7
- import { config } from '../config';
8
- import { CdmLogger } from '@cdm-logger/core';
9
- type ILogger = CdmLogger.ILogger;
10
-
11
- export class RedisConnector {
12
-
13
-
14
- private client: RedisClusterCache | RedisCache;
15
- private opts: IORedis.ClusterOptions | IORedis.RedisOptions;
16
- private logger: ILogger;
17
-
18
- /**
19
- * Creats an instance of Redis.
20
- *
21
- * @param {object} opts
22
- */
23
- constructor(opts?: IORedis.ClusterOptions | IORedis.RedisOptions) {
24
- this.opts = defaultsDeep(opts, {
25
- prefix: null,
26
- });
27
- this.logger = logger.child({ className: 'RedisConnector' });
28
- }
29
-
30
- /**
31
- * Connect to the server
32
- *
33
- * @memberof RedisConnector
34
- */
35
- public connect() {
36
- return new Promise((resolve, reject) => {
37
- reject('this method not implemented');
38
- });
39
- }
40
-
41
-
42
- /**
43
- * Return redis or redis.cluster Dataloader Client
44
- *
45
- * @memberof RedisConnection
46
- */
47
- public getRedisDataloaderClient() {
48
- let client: RedisClusterCache | RedisCache;
49
- if (config.REDIS_CLUSTER_ENABLED) {
50
- if (!config.REDIS_CLUSTER_URL) {
51
- throw new Error(`No nodes defined for cluster, ${config.REDIS_CLUSTER_URL}`);
52
- }
53
- this.logger.info('Setting Redis.Cluster connection');
54
- client = new RedisClusterCache(config.REDIS_CLUSTER_URL as any, this.opts);
55
- } else {
56
- this.logger.info('Setting Redis connection');
57
- client = new RedisCache(config.REDIS_URL as any || this.opts);
58
- }
59
- return client;
60
- }
61
-
62
- /**
63
- * Close Redis client connection.
64
- *
65
- * @memberof RedisConnection
66
- */
67
- public disconnect() {
68
- if (!this.client) {
69
- return;
70
- }
71
- return this.client.close();
72
- }
73
- }
@@ -1,67 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-var-requires */
2
- import * as express from 'express';
3
- import * as bodyParser from 'body-parser';
4
- import modules from './modules';
5
- import { errorMiddleware } from './middleware/error';
6
- import { contextServicesMiddleware } from './middleware/services';
7
- import { sentryMiddleware, sentryErrorHandlerMiddleware } from './middleware/sentry';
8
- import { IModuleService } from './interfaces';
9
- import { corsMiddleware } from './middleware/cors';
10
-
11
- const cookiesMiddleware = require('universal-cookie-express');
12
-
13
- export function expressApp(options: IModuleService, middlewares, http?) {
14
- const app: express.Express = express();
15
-
16
-
17
- for (const applyBeforeware of modules.beforewares) {
18
- applyBeforeware(app);
19
- }
20
- app.use(cookiesMiddleware());
21
- app.use(contextServicesMiddleware(options.createContext, options.serviceContext));
22
-
23
- // Don't rate limit heroku
24
- app.enable('trust proxy');
25
-
26
- app.use(sentryMiddleware);
27
-
28
- if (middlewares !== null) {
29
- app.use(middlewares);
30
- }
31
-
32
- app.use('/', express.static(__FRONTEND_BUILD_DIR__, { maxAge: '180 days' }));
33
-
34
- app.use(corsMiddleware);
35
- app.use((req, res, next) => {
36
- res.header('Access-Control-Allow-Credentials', JSON.stringify(true));
37
- res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
38
- res.header(
39
- 'Access-Control-Allow-Headers',
40
- 'X-Requested-With, X-HTTP-Method-Override, X-CSP-Nonce, Content-Type, Accept',
41
- );
42
- next();
43
- });
44
-
45
- app.use(
46
- bodyParser.json({
47
- limit: '50mb',
48
- verify: (req, res, buf) => {
49
- // #Todo: Find some proper solution for it
50
- (req as any).rawBody = buf;
51
- },
52
- }),
53
- );
54
- app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit: 50000 }));
55
-
56
- for (const applyMiddleware of modules.middlewares) {
57
- applyMiddleware(app);
58
- }
59
-
60
- if (__DEV__) {
61
- app.use(errorMiddleware);
62
- }
63
-
64
- app.use(sentryErrorHandlerMiddleware);
65
-
66
- return app;
67
- }
@@ -1 +0,0 @@
1
- export * from './module-interface';
@@ -1,16 +0,0 @@
1
- import { GraphQLSchema } from 'graphql';
2
- import { CdmLogger } from '@cdm-logger/core';
3
- type ILogger = CdmLogger.ILogger;
4
-
5
-
6
- export interface IModuleService {
7
- serviceContainer: any;
8
- serviceContext: any;
9
- dataSource: any;
10
- defaultPreferences: any;
11
- createContext: any;
12
- schema: GraphQLSchema;
13
- logger: ILogger;
14
- }
15
-
16
-