@things-factory/shell 8.0.2 → 9.0.0-beta.12

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 (174) hide show
  1. package/_index.html +0 -1
  2. package/bin/things-factory-migration +6 -3
  3. package/client/themes/calendar-theme.css +3 -1
  4. package/client/themes/index.css +2 -1
  5. package/dist-server/index.d.ts +12 -12
  6. package/dist-server/index.js +12 -12
  7. package/dist-server/index.js.map +1 -1
  8. package/dist-server/initializers/database.js +4 -10
  9. package/dist-server/initializers/database.js.map +1 -1
  10. package/dist-server/initializers/ormconfig.d.ts +2 -0
  11. package/dist-server/initializers/ormconfig.js +30 -0
  12. package/dist-server/initializers/ormconfig.js.map +1 -0
  13. package/dist-server/middlewares/domain-middleware.js +2 -2
  14. package/dist-server/middlewares/domain-middleware.js.map +1 -1
  15. package/dist-server/middlewares/index.d.ts +1 -1
  16. package/dist-server/middlewares/index.js +3 -3
  17. package/dist-server/middlewares/index.js.map +1 -1
  18. package/dist-server/migrations/1000000000000-SeedDomain.js +4 -4
  19. package/dist-server/migrations/1000000000000-SeedDomain.js.map +1 -1
  20. package/dist-server/migrations/index.js.map +1 -1
  21. package/dist-server/process-cleaner.d.ts +1 -0
  22. package/dist-server/process-cleaner.js +92 -0
  23. package/dist-server/process-cleaner.js.map +1 -0
  24. package/dist-server/routers/domain-router.js +3 -3
  25. package/dist-server/routers/domain-router.js.map +1 -1
  26. package/dist-server/routers/global-router.js +6 -6
  27. package/dist-server/routers/global-router.js.map +1 -1
  28. package/dist-server/routers/index.d.ts +3 -3
  29. package/dist-server/routers/index.js +3 -3
  30. package/dist-server/routers/index.js.map +1 -1
  31. package/dist-server/schema.js +5 -4
  32. package/dist-server/schema.js.map +1 -1
  33. package/dist-server/server-dev.js +37 -39
  34. package/dist-server/server-dev.js.map +1 -1
  35. package/dist-server/server.js +33 -35
  36. package/dist-server/server.js.map +1 -1
  37. package/dist-server/service/attribute-set/attribute-set-item-type.js +3 -3
  38. package/dist-server/service/attribute-set/attribute-set-item-type.js.map +1 -1
  39. package/dist-server/service/attribute-set/attribute-set-mutation.d.ts +2 -2
  40. package/dist-server/service/attribute-set/attribute-set-mutation.js +16 -16
  41. package/dist-server/service/attribute-set/attribute-set-mutation.js.map +1 -1
  42. package/dist-server/service/attribute-set/attribute-set-query.d.ts +3 -3
  43. package/dist-server/service/attribute-set/attribute-set-query.js +15 -15
  44. package/dist-server/service/attribute-set/attribute-set-query.js.map +1 -1
  45. package/dist-server/service/attribute-set/attribute-set-type.d.ts +2 -2
  46. package/dist-server/service/attribute-set/attribute-set-type.js +5 -5
  47. package/dist-server/service/attribute-set/attribute-set-type.js.map +1 -1
  48. package/dist-server/service/attribute-set/attribute-set.d.ts +1 -1
  49. package/dist-server/service/attribute-set/attribute-set.js +2 -2
  50. package/dist-server/service/attribute-set/attribute-set.js.map +1 -1
  51. package/dist-server/service/attribute-set/index.d.ts +3 -3
  52. package/dist-server/service/attribute-set/index.js +5 -5
  53. package/dist-server/service/attribute-set/index.js.map +1 -1
  54. package/dist-server/service/common-types/index.d.ts +6 -6
  55. package/dist-server/service/common-types/index.js +6 -6
  56. package/dist-server/service/common-types/index.js.map +1 -1
  57. package/dist-server/service/common-types/list-param.js +2 -2
  58. package/dist-server/service/common-types/list-param.js.map +1 -1
  59. package/dist-server/service/common-types/log.js +2 -2
  60. package/dist-server/service/common-types/log.js.map +1 -1
  61. package/dist-server/service/common-types/scalar-object.d.ts +2 -1
  62. package/dist-server/service/common-types/scalar-object.js +2 -2
  63. package/dist-server/service/common-types/scalar-object.js.map +1 -1
  64. package/dist-server/service/directive-transaction/index.d.ts +1 -1
  65. package/dist-server/service/directive-transaction/index.js +1 -1
  66. package/dist-server/service/directive-transaction/index.js.map +1 -1
  67. package/dist-server/service/directive-transaction/transaction.js +2 -2
  68. package/dist-server/service/directive-transaction/transaction.js.map +1 -1
  69. package/dist-server/service/domain/domain-mutation.d.ts +2 -2
  70. package/dist-server/service/domain/domain-mutation.js +21 -21
  71. package/dist-server/service/domain/domain-mutation.js.map +1 -1
  72. package/dist-server/service/domain/domain-query.d.ts +3 -3
  73. package/dist-server/service/domain/domain-query.js +18 -18
  74. package/dist-server/service/domain/domain-query.js.map +1 -1
  75. package/dist-server/service/domain/domain-types.d.ts +2 -2
  76. package/dist-server/service/domain/domain-types.js +6 -6
  77. package/dist-server/service/domain/domain-types.js.map +1 -1
  78. package/dist-server/service/domain/domain.js +3 -3
  79. package/dist-server/service/domain/domain.js.map +1 -1
  80. package/dist-server/service/domain/index.d.ts +3 -3
  81. package/dist-server/service/domain/index.js +5 -5
  82. package/dist-server/service/domain/index.js.map +1 -1
  83. package/dist-server/service/index.d.ts +7 -7
  84. package/dist-server/service/index.js +16 -16
  85. package/dist-server/service/index.js.map +1 -1
  86. package/dist-server/service/subscription-data/data-resolver.d.ts +1 -1
  87. package/dist-server/service/subscription-data/data-resolver.js +4 -4
  88. package/dist-server/service/subscription-data/data-resolver.js.map +1 -1
  89. package/dist-server/service/subscription-data/data-types.d.ts +1 -1
  90. package/dist-server/service/subscription-data/data-types.js +5 -5
  91. package/dist-server/service/subscription-data/data-types.js.map +1 -1
  92. package/dist-server/service/subscription-data/index.d.ts +1 -1
  93. package/dist-server/service/subscription-data/index.js +2 -2
  94. package/dist-server/service/subscription-data/index.js.map +1 -1
  95. package/dist-server/tsconfig.tsbuildinfo +1 -1
  96. package/dist-server/typeorm/encrypt-transform.js +3 -3
  97. package/dist-server/typeorm/encrypt-transform.js.map +1 -1
  98. package/dist-server/utils/get-query-builder-from-list-params.d.ts +2 -2
  99. package/dist-server/utils/get-query-builder-from-list-params.js +5 -5
  100. package/dist-server/utils/get-query-builder-from-list-params.js.map +1 -1
  101. package/dist-server/utils/index.d.ts +8 -8
  102. package/dist-server/utils/index.js +8 -8
  103. package/dist-server/utils/index.js.map +1 -1
  104. package/dist-server/utils/list-param-adjuster.d.ts +1 -1
  105. package/dist-server/utils/list-param-adjuster.js.map +1 -1
  106. package/dist-server/utils/list-params-converter.d.ts +2 -2
  107. package/dist-server/utils/list-params-converter.js +2 -2
  108. package/dist-server/utils/list-params-converter.js.map +1 -1
  109. package/dist-server/utils/list-query-builder.d.ts +1 -1
  110. package/dist-server/utils/list-query-builder.js +7 -7
  111. package/dist-server/utils/list-query-builder.js.map +1 -1
  112. package/dist-server/utils/publish-progress.js +2 -2
  113. package/dist-server/utils/publish-progress.js.map +1 -1
  114. package/package.json +16 -19
  115. package/views/public/home.html +0 -1
  116. package/client/hot-client/hot.js +0 -140
  117. package/client/hot-client/index.js +0 -103
  118. package/client/hot-client/log.js +0 -44
  119. package/client/hot-client/socket.js +0 -63
  120. package/ormconfig.js +0 -31
  121. package/server/graphql-local-client.ts +0 -59
  122. package/server/index.ts +0 -13
  123. package/server/initializers/database.ts +0 -96
  124. package/server/initializers/naming-strategy.ts +0 -14
  125. package/server/middlewares/domain-middleware.ts +0 -60
  126. package/server/middlewares/index.ts +0 -43
  127. package/server/migrations/1000000000000-SeedDomain.ts +0 -37
  128. package/server/migrations/index.ts +0 -9
  129. package/server/pubsub-log-transport.ts +0 -59
  130. package/server/pubsub.ts +0 -84
  131. package/server/routers/domain-router.ts +0 -13
  132. package/server/routers/global-router.ts +0 -76
  133. package/server/routers/graphql-router.ts +0 -3
  134. package/server/routers/index.ts +0 -3
  135. package/server/schema.ts +0 -163
  136. package/server/server-dev.ts +0 -305
  137. package/server/server.ts +0 -296
  138. package/server/service/attribute-set/attribute-set-item-type.ts +0 -65
  139. package/server/service/attribute-set/attribute-set-mutation.ts +0 -125
  140. package/server/service/attribute-set/attribute-set-query.ts +0 -36
  141. package/server/service/attribute-set/attribute-set-type.ts +0 -46
  142. package/server/service/attribute-set/attribute-set.ts +0 -35
  143. package/server/service/attribute-set/index.ts +0 -6
  144. package/server/service/common-types/index.ts +0 -6
  145. package/server/service/common-types/list-param.ts +0 -61
  146. package/server/service/common-types/log.ts +0 -17
  147. package/server/service/common-types/object-ref.ts +0 -13
  148. package/server/service/common-types/scalar-any.ts +0 -44
  149. package/server/service/common-types/scalar-date.ts +0 -22
  150. package/server/service/common-types/scalar-object.ts +0 -15
  151. package/server/service/directive-transaction/index.ts +0 -1
  152. package/server/service/directive-transaction/transaction.ts +0 -40
  153. package/server/service/domain/domain-mutation.ts +0 -120
  154. package/server/service/domain/domain-query.ts +0 -48
  155. package/server/service/domain/domain-types.ts +0 -63
  156. package/server/service/domain/domain.ts +0 -147
  157. package/server/service/domain/index.ts +0 -6
  158. package/server/service/index.ts +0 -32
  159. package/server/service/subscription-data/data-resolver.ts +0 -37
  160. package/server/service/subscription-data/data-types.ts +0 -16
  161. package/server/service/subscription-data/index.ts +0 -4
  162. package/server/typeorm/encrypt-transform.ts +0 -70
  163. package/server/typeorm/get-data-encryption-key.ts +0 -13
  164. package/server/typeorm/json5-transform.ts +0 -26
  165. package/server/typeorm/round-transform.ts +0 -20
  166. package/server/utils/condition-builder.ts +0 -145
  167. package/server/utils/get-domain.ts +0 -226
  168. package/server/utils/get-query-builder-from-list-params.ts +0 -469
  169. package/server/utils/get-times-for-period.ts +0 -60
  170. package/server/utils/index.ts +0 -8
  171. package/server/utils/list-param-adjuster.ts +0 -21
  172. package/server/utils/list-params-converter.ts +0 -200
  173. package/server/utils/list-query-builder.ts +0 -120
  174. package/server/utils/publish-progress.ts +0 -23
@@ -51,7 +51,6 @@
51
51
 
52
52
  <!-- Performance tip: hint to the browser to start the handshake for the fonts site -->
53
53
  <link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin />
54
- <link href="/node_modules/@material-design-icons/font/index.css" rel="stylesheet" />
55
54
  <link href="/node_modules/material-symbols/index.css" rel="stylesheet" />
56
55
  <link href="/node_modules/@fontsource/roboto/index.css" rel="stylesheet" />
57
56
  <link rel="stylesheet" href="/theme.css" />
@@ -1,140 +0,0 @@
1
- const log = require('./log');
2
-
3
- const refresh = 'Please refresh the page.';
4
- const hotOptions = {
5
- ignoreUnaccepted: true,
6
- ignoreDeclined: true,
7
- ignoreErrored: true,
8
- onUnaccepted(data) {
9
- const chain = [].concat(data.chain);
10
- const last = chain[chain.length - 1];
11
-
12
- if (last === 0) {
13
- chain.pop();
14
- }
15
-
16
- log.warn(`Ignored an update to unaccepted module ${chain.join(' ➭ ')}`);
17
- },
18
- onDeclined(data) {
19
- log.warn(`Ignored an update to declined module ${data.chain.join(' ➭ ')}`);
20
- },
21
- onErrored(data) {
22
- log.warn(`Ignored an error while updating module ${data.moduleId} <${data.type}>`);
23
- log.warn(data.error);
24
- }
25
- };
26
-
27
- let lastHash;
28
-
29
- function upToDate() {
30
- return lastHash.indexOf(__webpack_hash__) >= 0;
31
- }
32
-
33
- function result(modules, appliedModules) {
34
- const unaccepted = modules.filter(
35
- (moduleId) => appliedModules && appliedModules.indexOf(moduleId) < 0
36
- );
37
-
38
- if (unaccepted.length > 0) {
39
- let message = 'The following modules could not be updated:';
40
-
41
- for (const moduleId of unaccepted) {
42
- message += `\n ⦻ ${moduleId}`;
43
- }
44
- log.warn(message);
45
- }
46
-
47
- if (!(appliedModules || []).length) {
48
- log.info('No Modules Updated.');
49
- } else {
50
- const message = ['The following modules were updated:'];
51
-
52
- for (const moduleId of appliedModules) {
53
- message.push(` ↻ ${moduleId}`);
54
- }
55
-
56
- log.info(message.join('\n'));
57
-
58
- const numberIds = appliedModules.every((moduleId) => typeof moduleId === 'number');
59
- if (numberIds) {
60
- log.info('Please consider using the NamedModulesPlugin for module names.');
61
- }
62
- }
63
- }
64
-
65
- function check(options) {
66
- module.hot
67
- .check()
68
- .then((modules) => {
69
- if (!modules) {
70
- log.warn(`Cannot find update. The server may have been restarted. ${refresh}`);
71
- if (options.reload) {
72
- window.location.reload();
73
- }
74
- return null;
75
- }
76
-
77
- const hotOpts = options.reload ? {} : hotOptions;
78
-
79
- return module.hot
80
- .apply(hotOpts)
81
- .then((appliedModules) => {
82
- if (!upToDate()) {
83
- check(options);
84
- }
85
-
86
- result(modules, appliedModules);
87
-
88
- if (upToDate()) {
89
- log.info('App is up to date.');
90
- }
91
- })
92
- .catch((err) => {
93
- const status = module.hot.status();
94
- if (['abort', 'fail'].indexOf(status) >= 0) {
95
- log.warn(`Cannot apply update. ${refresh}`);
96
- log.warn(err.stack || err.message);
97
- if (options.reload) {
98
- window.location.reload();
99
- }
100
- } else {
101
- log.warn(`Update failed: ${err.stack}` || err.message);
102
- }
103
- });
104
- })
105
- .catch((err) => {
106
- const status = module.hot.status();
107
- if (['abort', 'fail'].indexOf(status) >= 0) {
108
- log.warn(`Cannot check for update. ${refresh}`);
109
- log.warn(err.stack || err.message);
110
- if (options.reload) {
111
- window.location.reload();
112
- }
113
- } else {
114
- log.warn(`Update check failed: ${err.stack}` || err.message);
115
- }
116
- });
117
- }
118
-
119
- if (module.hot) {
120
- log.info('Hot Module Replacement Enabled. Waiting for signal.');
121
- } else {
122
- log.error('Hot Module Replacement is disabled.');
123
- }
124
-
125
- module.exports = function update(currentHash, options) {
126
- lastHash = currentHash;
127
- if (!upToDate()) {
128
- const status = module.hot.status();
129
-
130
- if (status === 'idle') {
131
- log.info('Checking for updates to the bundle.');
132
- check(options);
133
- } else if (['abort', 'fail'].indexOf(status) >= 0) {
134
- log.warn(`Cannot apply update. A previous update ${status}ed. ${refresh}`);
135
- if (options.reload) {
136
- window.location.reload();
137
- }
138
- }
139
- }
140
- };
@@ -1,103 +0,0 @@
1
- /* eslint-disable global-require, consistent-return */
2
-
3
- (function hotClientEntry() {
4
- // eslint-disable-next-line no-underscore-dangle
5
- if (window.__webpackHotClient__) {
6
- return;
7
- }
8
-
9
- // eslint-disable-next-line no-underscore-dangle
10
- window.__webpackHotClient__ = {};
11
-
12
- // this is piped in at runtime build via DefinePlugin in /lib/plugins.js
13
- // eslint-disable-next-line no-unused-vars, no-undef
14
- const options = __hotClientOptions__;
15
-
16
- const log = require('./log'); // eslint-disable-line import/order
17
-
18
- log.level = options.logLevel;
19
-
20
- const update = require('./hot');
21
- const socket = require('./socket');
22
-
23
- if (!options) {
24
- throw new Error(
25
- 'Something went awry and __hotClientOptions__ is undefined. Possible bad build. HMR cannot be enabled.'
26
- );
27
- }
28
-
29
- let currentHash;
30
- let initial = true;
31
- let isUnloading;
32
-
33
- window.addEventListener('beforeunload', () => {
34
- isUnloading = true;
35
- });
36
-
37
- function reload() {
38
- if (isUnloading) {
39
- return;
40
- }
41
-
42
- if (options.hmr) {
43
- log.info('App Updated, Reloading Modules');
44
- update(currentHash, options);
45
- } else if (options.reload) {
46
- log.info('Refreshing Page');
47
- window.location.reload();
48
- } else {
49
- log.warn('Please refresh the page manually.');
50
- log.info('The `hot` and `reload` options are set to false.');
51
- }
52
- }
53
-
54
- socket(options, {
55
- compile({ compilerName }) {
56
- log.info(`webpack: Compiling (${compilerName})`);
57
- },
58
-
59
- errors({ errors }) {
60
- log.error('webpack: Encountered errors while compiling. Reload prevented.');
61
-
62
- for (let i = 0; i < errors.length; i++) {
63
- log.error(errors[i]);
64
- }
65
- },
66
-
67
- hash({ hash }) {
68
- currentHash = hash;
69
- },
70
-
71
- invalid({ fileName }) {
72
- log.info(`App updated. Recompiling ${fileName}`);
73
- },
74
-
75
- ok() {
76
- if (initial) {
77
- initial = false;
78
- return initial;
79
- }
80
-
81
- reload();
82
- },
83
-
84
- 'window-reload': () => {
85
- window.location.reload();
86
- },
87
-
88
- warnings({ warnings }) {
89
- log.warn('Warnings while compiling.');
90
-
91
- for (let i = 0; i < warnings.length; i++) {
92
- log.warn(warnings[i]);
93
- }
94
-
95
- if (initial) {
96
- initial = false;
97
- return initial;
98
- }
99
-
100
- reload();
101
- }
102
- });
103
- })();
@@ -1,44 +0,0 @@
1
- // eslint-disable-next-line import/no-extraneous-dependencies
2
- const loglevel = require('loglevelnext/dist/loglevelnext');
3
-
4
- const { MethodFactory } = loglevel.factories;
5
- const css = {
6
- prefix:
7
- 'color: #999; padding: 0 0 0 20px; line-height: 16px; background: url(https://webpack.js.org/6bc5d8cf78d442a984e70195db059b69.svg) no-repeat; background-size: 16px 16px; background-position: 0 -2px;',
8
- reset: 'color: #444'
9
- };
10
- const log = loglevel.getLogger({ name: 'hot', id: 'hot-middleware/client' });
11
-
12
- function IconFactory(logger) {
13
- MethodFactory.call(this, logger);
14
- }
15
-
16
- IconFactory.prototype = Object.create(MethodFactory.prototype);
17
- IconFactory.prototype.constructor = IconFactory;
18
-
19
- IconFactory.prototype.make = function make(methodName) {
20
- const og = MethodFactory.prototype.make.call(this, methodName);
21
-
22
- return function _(...params) {
23
- const args = [].concat(params);
24
- const prefix = '%c「hot」 %c';
25
- const [first] = args;
26
-
27
- if (typeof first === 'string') {
28
- args[0] = prefix + first;
29
- } else {
30
- args.unshift(prefix);
31
- }
32
-
33
- args.splice(1, 0, css.prefix, css.reset);
34
- og(...args);
35
- };
36
- };
37
-
38
- log.factory = new IconFactory(log, {});
39
-
40
- log.group = console.group; // eslint-disable-line no-console
41
- log.groupCollapsed = console.groupCollapsed; // eslint-disable-line no-console
42
- log.groupEnd = console.groupEnd; // eslint-disable-line no-console
43
-
44
- module.exports = log;
@@ -1,63 +0,0 @@
1
- const url = require('url');
2
-
3
- const log = require('./log');
4
-
5
- const maxRetries = 10;
6
- let retry = maxRetries;
7
-
8
- module.exports = function connect(options, handler) {
9
- const { host } = options.webSocket;
10
- const socketUrl = url.format({
11
- protocol: options.https ? 'wss' : 'ws',
12
- hostname: host === '*' ? window.location.hostname : host,
13
- port: options.webSocket.port,
14
- slashes: true
15
- });
16
-
17
- let open = false;
18
- let socket = new WebSocket(socketUrl);
19
-
20
- socket.addEventListener('open', () => {
21
- open = true;
22
- retry = maxRetries;
23
- log.info('WebSocket connected');
24
- });
25
-
26
- socket.addEventListener('close', () => {
27
- log.warn('WebSocket closed');
28
-
29
- open = false;
30
- socket = null;
31
-
32
- // exponentation operator ** isn't supported by IE at all
33
- const timeout =
34
- // eslint-disable-next-line no-restricted-properties
35
- 1000 * Math.pow(maxRetries - retry, 2) + Math.random() * 100;
36
-
37
- if (open || retry <= 0) {
38
- log.warn(`WebSocket: ending reconnect after ${maxRetries} attempts`);
39
- return;
40
- }
41
-
42
- log.info(`WebSocket: attempting reconnect in ${parseInt(timeout / 1000, 10)}s`);
43
-
44
- setTimeout(() => {
45
- retry -= 1;
46
-
47
- connect(
48
- options,
49
- handler
50
- );
51
- }, timeout);
52
- });
53
-
54
- socket.addEventListener('message', (event) => {
55
- log.debug('WebSocket: message:', event.data);
56
-
57
- const message = JSON.parse(event.data);
58
-
59
- if (handler[message.type]) {
60
- handler[message.type](message.data);
61
- }
62
- });
63
- };
package/ormconfig.js DELETED
@@ -1,31 +0,0 @@
1
- const { orderedModuleNames, loader } = require('@things-factory/env')
2
- const { NamingStrategy } = require('@things-factory/shell')
3
-
4
- const debug = require('debug')('things-factory:shell:ormconfig')
5
-
6
- function flattenDeep(arr) {
7
- return arr.reduce((acc, val) => (Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val)), [])
8
- }
9
-
10
- /*
11
- dependencies list를 받아서, entities, migrations, subscribers 폴더 어레이를 빌드한다.
12
- */
13
- var entities = orderedModuleNames.map(dep => loader(dep).entities).filter(entity => entity && entity.length > 0)
14
- entities = flattenDeep(entities)
15
-
16
- var migrations = orderedModuleNames.map(dep => loader(dep).migrations).filter(entity => entity && entity.length > 0)
17
- migrations = flattenDeep(migrations)
18
-
19
- var subscribers = orderedModuleNames.map(dep => loader(dep).subscribers).filter(entity => entity && entity.length > 0)
20
- subscribers = flattenDeep(subscribers)
21
-
22
- debug('entities', entities)
23
- debug('migrations', migrations)
24
- debug('subscribers', subscribers)
25
-
26
- module.exports = {
27
- namingStrategy: new NamingStrategy(),
28
- entities,
29
- migrations,
30
- subscribers
31
- }
@@ -1,59 +0,0 @@
1
- /**
2
- * Apollo Client configuration for a local GraphQL schema.
3
- * This class provides a static method `init` to initialize the client with a schema and an app context.
4
- */
5
- import { ApolloClient, InMemoryCache, NormalizedCacheObject } from '@apollo/client'
6
- import { SchemaLink } from '@apollo/client/link/schema'
7
-
8
- const defaultOptions: any = {
9
- watchQuery: {
10
- fetchPolicy: 'no-cache',
11
- errorPolicy: 'ignore'
12
- },
13
- query: {
14
- fetchPolicy: 'no-cache',
15
- errorPolicy: 'all'
16
- },
17
- mutate: {
18
- errorPolicy: 'all'
19
- }
20
- }
21
-
22
- /**
23
- * GraphqlLocalClient is a utility class for initializing an Apollo Client for a local GraphQL schema.
24
- * It provides a static `init` method for setting up the client with a schema and an app context.
25
- */
26
- export class GraphqlLocalClient {
27
- /**
28
- * Apollo Client instance for local GraphQL schema.
29
- * @static
30
- * @type {ApolloClient<NormalizedCacheObject>}
31
- */
32
- static client: ApolloClient<NormalizedCacheObject>
33
-
34
- /**
35
- * Initializes the Apollo Client for a local GraphQL schema.
36
- * @static
37
- * @param {object} schema - The GraphQL schema to use.
38
- * @param {object} app - The application context to be passed in as part of the execution context.
39
- */
40
- static init(schema, app) {
41
- const cache = new InMemoryCache({
42
- addTypename: false
43
- })
44
-
45
- GraphqlLocalClient.client = new ApolloClient({
46
- defaultOptions,
47
- cache,
48
- link: new SchemaLink({
49
- schema,
50
- context: (obj, args, context, info) => {
51
- return {
52
- ...obj.getContext(),
53
- app
54
- }
55
- }
56
- })
57
- })
58
- }
59
- }
package/server/index.ts DELETED
@@ -1,13 +0,0 @@
1
- export * from './migrations'
2
- export * from './initializers/naming-strategy'
3
- export * from './initializers/database'
4
- export * from './utils'
5
- export * from './pubsub'
6
- export * from './pubsub-log-transport'
7
- export * from './middlewares'
8
- export * from './graphql-local-client'
9
- export * from './service'
10
-
11
- export * from './typeorm/encrypt-transform'
12
- export * from './typeorm/json5-transform'
13
- export * from './typeorm/round-transform'
@@ -1,96 +0,0 @@
1
- import { createConnection, DataSource, EntityManager, EntityTarget, Repository } from 'typeorm'
2
-
3
- import { appRootPath, config, logger } from '@things-factory/env'
4
-
5
- const path = require('path')
6
-
7
- var ormconfig
8
- try {
9
- ormconfig = require(path.resolve(appRootPath, 'ormconfig'))
10
- } catch (e) {
11
- ormconfig = require('@things-factory/shell/ormconfig')
12
- }
13
-
14
- const dataSources: { [name: string]: DataSource } = {}
15
-
16
- /**
17
- * Returns the specified DataSource by name.
18
- * @param {string} name - The name of the DataSource.
19
- * @returns {DataSource} - The DataSource with the specified name.
20
- */
21
- export function getDataSource(name?: string): DataSource {
22
- return dataSources[name || 'default']
23
- }
24
-
25
- /**
26
- * Adds a new DataSource with the specified name.
27
- * @param {string} name - The name of the DataSource to add.
28
- * @param {DataSource} dataSource - The DataSource to add.
29
- */
30
- export function addDataSource(name: string, dataSource: DataSource) {
31
- dataSources[name] = dataSource
32
- }
33
-
34
- /**
35
- * Removes a DataSource with the specified name.
36
- * @param {string} name - The name of the DataSource to remove.
37
- */
38
- export function removeDataSource(name: string) {
39
- delete dataSources[name]
40
- }
41
-
42
- /**
43
- * Returns an array of all registered DataSource names.
44
- * @returns {string[]} - An array of DataSource names.
45
- */
46
- export function getDataSourceNames() {
47
- return Object.keys(dataSources)
48
- }
49
-
50
- /**
51
- * Returns a repository for the specified entity.
52
- * @param {EntityTarget<X>} target - The target entity for which to get the repository.
53
- * @returns {Repository<X>} - The repository for the specified entity.
54
- */
55
- export function getRepository<X>(target: EntityTarget<X>, tx?: EntityManager): Repository<X> {
56
- return tx ? tx.getRepository<X>(target) : getDataSource('default').getRepository<X>(target)
57
- }
58
-
59
- /**
60
- * Initializes the database connections and data sources.
61
- */
62
- export const databaseInitializer = async () => {
63
- try {
64
- const readConnectionConfig = config.get('ormconfig')
65
-
66
- const dataSource = await createConnection({
67
- ...ormconfig,
68
- ...readConnectionConfig
69
- })
70
-
71
- addDataSource('default', dataSource)
72
-
73
- logger.info('Default DataSource established')
74
-
75
- if (readConnectionConfig.type == 'sqlite' && readConnectionConfig.synchronize == false) {
76
- await dataSource.query('PRAGMA foreign_keys=OFF')
77
- await dataSource.synchronize()
78
- await dataSource.query('PRAGMA foreign_keys=ON')
79
- }
80
-
81
- if (config.get('ormconfig4Tx')) {
82
- const dataSource4Tx = new DataSource({
83
- ...ormconfig,
84
- ...config.get('ormconfig4Tx')
85
- })
86
- await dataSource4Tx.initialize()
87
- addDataSource('tx', dataSource4Tx)
88
-
89
- logger.info('Transaction DataSource established')
90
- } else {
91
- addDataSource('tx', dataSource)
92
- }
93
- } catch (e) {
94
- logger.error(e)
95
- }
96
- }
@@ -1,14 +0,0 @@
1
- import { NamingStrategyInterface } from 'typeorm'
2
- import { DefaultNamingStrategy } from 'typeorm'
3
- import pluralize from 'pluralize'
4
- import _ from 'lodash'
5
-
6
- export class NamingStrategy extends DefaultNamingStrategy implements NamingStrategyInterface {
7
- tableName(targetName: string, userSpecifiedName: string): string {
8
- return userSpecifiedName || pluralize(_.snakeCase(targetName))
9
- }
10
-
11
- columnName(propertyName: string, customName: string, embeddedPrefixes: string[]): string {
12
- return _.snakeCase(embeddedPrefixes.concat(customName || propertyName).join('_'))
13
- }
14
- }
@@ -1,60 +0,0 @@
1
- import requestIp from 'request-ip'
2
- import { getDomainFromURL } from '../utils'
3
-
4
- export async function domainMiddleware(context: any, next: any) {
5
- var { domain } = context.state
6
- if (!domain) {
7
- /*
8
- * The domainType should be checked only when signin and checkin.
9
- * For purposes such as API calls, the target domainType may be different from the system domainType.
10
- * So, we don't check domainType here.
11
- */
12
- domain = await getDomainFromURL(context)
13
- }
14
-
15
- if (domain) {
16
- const ip = requestIp.getClientIp(context.req)
17
- const { whitelist = [], blacklist = [], protectedlist = [], privileges = [] } = domain.iplist || {}
18
-
19
- if (Array.isArray(whitelist) && whitelist.length > 0) {
20
- /* whitelist 우선 */
21
- const whitelisted =
22
- Array.isArray(whitelist) &&
23
- whitelist.some(item => {
24
- return new RegExp(item).test(ip)
25
- })
26
-
27
- if (!whitelisted) {
28
- context.status = 403
29
- return
30
- }
31
- } else {
32
- const blacklisted =
33
- Array.isArray(blacklist) &&
34
- blacklist.some(item => {
35
- return new RegExp(item).test(ip)
36
- })
37
-
38
- if (blacklisted) {
39
- context.status = 403
40
- return
41
- }
42
- }
43
-
44
- if (Array.isArray(protectedlist) && protectedlist.length > 0) {
45
- const safe = protectedlist.some(item => {
46
- return new RegExp(item).test(ip)
47
- })
48
-
49
- context.state.unsafeIP = !safe
50
-
51
- if (!safe) {
52
- context.state.prohibitedPrivileges = privileges
53
- }
54
- }
55
- }
56
-
57
- context.state.domain = domain
58
-
59
- return next()
60
- }
@@ -1,43 +0,0 @@
1
- import { config, logger } from '@things-factory/env'
2
-
3
- import { domainMiddleware } from './domain-middleware'
4
-
5
- export function initMiddlewares(app) {
6
- app.subdomainOffset = config.get('subdomainOffset', 2)
7
-
8
- app.on('error', (err, context) => {
9
- logger.error(err)
10
- })
11
-
12
- /*
13
- * Catching downstream errors
14
- * - recommend to use context.throw, context.assert
15
- */
16
- app.use(async (context, next) => {
17
- try {
18
- await next()
19
- } catch (err) {
20
- context.status = err?.status || 500
21
- context.body = err?.message
22
-
23
- // emitting error to app.on('error', ...)
24
- context.app.emit('error', err, context)
25
- }
26
- })
27
-
28
- /*
29
- * post:graphql 에 대해서는 domain을 확인한다.
30
- * graphql app을 router에 적용하지 못하기 때문임.
31
- */
32
- app.use(async (context, next) => {
33
- const { method, path } = context
34
-
35
- if (method == 'POST' && path.startsWith('/graphql')) {
36
- return await domainMiddleware(context, next)
37
- }
38
-
39
- await next()
40
- })
41
- }
42
-
43
- export * from './domain-middleware'