@things-factory/shell 4.0.36 → 4.0.40

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.
@@ -44,6 +44,29 @@ module.exports = {
44
44
  * ...
45
45
  * }
46
46
  * }
47
+ *
48
+ * pubsub: {
49
+ * middleware: 'kafka',
50
+ * topic: 'operato-app-graphql-pubsub'
51
+ * host: 'b-3.kafka-server:9092,b-1.kafka-server:9092,b-2.kafka-server:9092',
52
+ * options: {
53
+ * ...
54
+ * }
55
+ * }
56
+ *
57
+ * pubsub: {
58
+ * middleware: 'kafka',
59
+ * host: 'confluent.cloud:9092',
60
+ * topic: 'operato-app-graphql-pubsub',
61
+ * options: {
62
+ * globalConfig: {
63
+ * "sasl.mechanisms": "PLAIN",
64
+ * "security.protocol": "SASL_SSL",
65
+ * "sasl.username": "{CLOUD_KEY}",
66
+ * "sasl.password": "{CLOUD_SECRET_KEY}"
67
+ * }
68
+ * }
69
+ * }
47
70
  *
48
71
  * pubsub: {
49
72
  * middleware: 'mqtt',
@@ -30,6 +30,29 @@ module.exports = {
30
30
  * ...
31
31
  * }
32
32
  * }
33
+ *
34
+ * pubsub: {
35
+ * middleware: 'kafka',
36
+ * topic: 'operato-app-graphql-pubsub'
37
+ * host: 'b-3.kafka-server:9092,b-1.kafka-server:9092,b-2.kafka-server:9092',
38
+ * options: {
39
+ * ...
40
+ * }
41
+ * }
42
+ *
43
+ * pubsub: {
44
+ * middleware: 'kafka',
45
+ * host: 'confluent.cloud:9092',
46
+ * topic: 'operato-app-graphql-pubsub',
47
+ * options: {
48
+ * globalConfig: {
49
+ * "sasl.mechanisms": "PLAIN",
50
+ * "security.protocol": "SASL_SSL",
51
+ * "sasl.username": "{CLOUD_KEY}",
52
+ * "sasl.password": "{CLOUD_SECRET_KEY}"
53
+ * }
54
+ * }
55
+ * }
33
56
  *
34
57
  * pubsub: {
35
58
  * middleware: 'mqtt',
@@ -4,13 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.pubsub = void 0;
7
+ const graphql_kafka_subscriptions_1 = require("graphql-kafka-subscriptions");
7
8
  const graphql_mqtt_subscriptions_1 = require("graphql-mqtt-subscriptions");
8
9
  const graphql_redis_subscriptions_1 = require("graphql-redis-subscriptions");
9
10
  const graphql_subscriptions_1 = require("graphql-subscriptions");
10
11
  const ioredis_1 = __importDefault(require("ioredis"));
11
12
  const mqtt_1 = require("mqtt");
12
13
  const env_1 = require("@things-factory/env");
13
- const { middleware, host, port, nodes, options } = env_1.config.get('pubsub', {});
14
+ const { middleware, host, port, nodes, topic, options } = env_1.config.get('pubsub', {});
14
15
  const debug = require('debug')('things-factory:shell');
15
16
  let pubsub;
16
17
  exports.pubsub = pubsub;
@@ -38,8 +39,41 @@ switch (middleware) {
38
39
  subscriber: cluster
39
40
  });
40
41
  break;
42
+ case 'kafka':
43
+ // globalConfig: {} // options passed directly to the consumer and producer
44
+ exports.pubsub = pubsub = new graphql_kafka_subscriptions_1.KafkaPubSub(Object.assign({ topic,
45
+ host,
46
+ port }, options));
47
+ break;
41
48
  default:
42
49
  exports.pubsub = pubsub = new graphql_subscriptions_1.PubSub();
43
50
  break;
44
51
  }
52
+ debug(middleware || 'default', 'pubsub initialized.');
53
+ // kafka pubsub keeps connection and app port with 'ctrl+c' termination.
54
+ const exitHandler = async (evt) => {
55
+ if (pubsub.close) {
56
+ try {
57
+ await pubsub.close();
58
+ }
59
+ catch (err) {
60
+ console.error(err);
61
+ }
62
+ }
63
+ debug('exit on', evt.name);
64
+ if (evt.exit)
65
+ process.exit();
66
+ };
67
+ /*
68
+ * exit events hint from https://stackoverflow.com/a/14032965/14539284
69
+ */
70
+ //do something when app is closing
71
+ process.on('exit', exitHandler.bind(null, { name: 'exit', exit: true }));
72
+ //catches ctrl+c event
73
+ process.on('SIGINT', exitHandler.bind(null, { name: 'SIGINT', exit: true }));
74
+ // catches "kill pid" (for example: nodemon restart)
75
+ process.on('SIGUSR1', exitHandler.bind(null, { name: 'SIGUSR1', exit: true }));
76
+ process.on('SIGUSR2', exitHandler.bind(null, { name: 'SIGUSR2', exit: true }));
77
+ //catches uncaught exceptions
78
+ process.on('uncaughtException', exitHandler.bind(null, { name: 'uncaughtException', exit: true }));
45
79
  //# sourceMappingURL=pubsub.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../server/pubsub.ts"],"names":[],"mappings":";;;;;;AAAA,2EAAuD;AACvD,6EAAyD;AACzD,iEAA8C;AAC9C,sDAA2B;AAC3B,+BAA8B;AAE9B,6CAA4C;AAE5C,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AAE3E,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAA;AAEtD,IAAI,MAAW,CAAA;AAsCN,wBAAM;AApCf,QAAQ,UAAU,EAAE;IAClB,KAAK,MAAM;QACT,iBAAA,MAAM,GAAG,IAAI,uCAAU,CAAC;YACtB,MAAM,EAAE,IAAA,cAAO,EAAC,SAAS,GAAG,IAAI,kBAC9B,eAAe,EAAE,IAAI,IAClB,OAAO,EACH;SACV,CAAC,CAAA;QACF,MAAK;IACP,KAAK,OAAO;QACV,MAAM,WAAW,mBACf,IAAI;YACJ,IAAI,EACJ,aAAa,EAAE,KAAK,CAAC,EAAE;gBACrB,kBAAkB;gBAClB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,CAAA;YACnC,CAAC,IACE,OAAO,CACX,CAAA;QACD,iBAAA,MAAM,GAAG,IAAI,yCAAW,CAAC;YACvB,SAAS,EAAE,IAAI,iBAAK,CAAC,WAAW,CAAC;YACjC,UAAU,EAAE,IAAI,iBAAK,CAAC,WAAW,CAAC;SACnC,CAAC,CAAA;QACF,MAAK;IACP,KAAK,cAAc;QACjB,MAAM,OAAO,GAAG,IAAI,iBAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACjD,iBAAA,MAAM,GAAG,IAAI,yCAAW,CAAC;YACvB,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,OAAO;SACpB,CAAC,CAAA;QACF,MAAK;IACP;QACE,iBAAA,MAAM,GAAG,IAAI,8BAAM,EAAE,CAAA;QACrB,MAAK;CACR"}
1
+ {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../server/pubsub.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ const buildCondition = function (alias, fieldName, operator, value, relation, se
19
19
  clause: `${alias}.${fieldName} LIKE :args${seq}`,
20
20
  parameters: { [`args${seq}`]: `${value}` }
21
21
  };
22
+ case 'search':
22
23
  case 'i_like':
23
24
  return {
24
25
  clause: `LOWER(${alias}.${fieldName}) LIKE :args${seq}`,
@@ -1 +1 @@
1
- {"version":3,"file":"condition-builder.js","sourceRoot":"","sources":["../../server/utils/condition-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"condition-builder.js","sourceRoot":"","sources":["../../server/utils/condition-builder.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertListParams = void 0;
4
4
  const typeorm_1 = require("typeorm");
5
5
  const OPERATION_FUNCTION_MAP = {
6
+ search: value => (0, typeorm_1.ILike)(value),
6
7
  eq: value => (0, typeorm_1.Equal)(value),
7
8
  noteq: value => (0, typeorm_1.Not)((0, typeorm_1.Equal)(value)),
8
9
  like: value => (0, typeorm_1.Like)(value),
9
- i_like: value => (0, typeorm_1.Raw)(alias => `LOWER(${alias}) LIKE '${String(value).toLowerCase()}'`),
10
+ i_like: value => (0, typeorm_1.ILike)(value),
10
11
  nlike: value => (0, typeorm_1.Not)((0, typeorm_1.Like)(value)),
11
- i_nlike: value => (0, typeorm_1.Raw)(alias => `LOWER(${alias}) NOT LIKE '${String(value).toLowerCase()}'`),
12
+ i_nlike: value => (0, typeorm_1.Not)((0, typeorm_1.ILike)(value)),
12
13
  lt: value => (0, typeorm_1.Raw)(alias => `${alias} < ${typeof value === 'string' ? "'" + value + "'" : value}`),
13
14
  gt: value => (0, typeorm_1.Raw)(alias => `${alias} > ${typeof value === 'string' ? "'" + value + "'" : value}`),
14
15
  lte: value => (0, typeorm_1.Raw)(alias => `${alias} <= ${typeof value === 'string' ? "'" + value + "'" : value}`),
@@ -25,50 +26,6 @@ const OPERATION_FUNCTION_MAP = {
25
26
  is_empty_num_id: () => (0, typeorm_1.Raw)(alias => `${alias} IS EMPTY NUMERIC ID`),
26
27
  between: value => (0, typeorm_1.Between)(value[0], value[1])
27
28
  };
28
- // function getOperatorFunction({ operator, name, value, dataType }) {
29
- // switch (operator) {
30
- // case 'eq':
31
- // return Equal(value)
32
- // case 'noteq':
33
- // return Not(Equal(value))
34
- // case 'like':
35
- // return Like(value)
36
- // case 'nlike':
37
- // return Not(Like(value))
38
- // case 'lt':
39
- // return Raw(alias => `${alias} < ${value}`)
40
- // case 'gt':
41
- // return Raw(alias => `${alias} > ${value}`)
42
- // case 'lte':
43
- // return Raw(alias => `${alias} <= ${value}`)
44
- // case 'gte':
45
- // return Raw(alias => `${alias} >= ${value}`)
46
- // case 'in':
47
- // return In(value)
48
- // case 'notin':
49
- // return Not(In(value))
50
- // case 'is_null':
51
- // return IsNull()
52
- // case 'is_not_null':
53
- // return Not(IsNull())
54
- // case 'is_false':
55
- // return Raw(alias => `${alias} IS FALSE`)
56
- // case 'is_true':
57
- // return Raw(alias => `${alias} IS TRUE`)
58
- // case 'is_not_false':
59
- // return Raw(alias => `${alias} IS NOT FALSE`)
60
- // case 'is_not_true':
61
- // return Raw(alias => `${alias} IS NOT TRUE`)
62
- // case 'is_present':
63
- // return Raw(alias => `${alias} IS PRESENT`)
64
- // case 'is_blank':
65
- // return Raw(alias => `${alias} IS BLANK`)
66
- // case 'is_empty_num_id':
67
- // return Raw(alias => `${alias} IS EMPTY NUMERIC ID`)
68
- // case 'between':
69
- // return Between(value[0], value[1])
70
- // }
71
- // }
72
29
  function getOperatorFunction({ operator, name, value, dataType }) {
73
30
  return OPERATION_FUNCTION_MAP[operator](value);
74
31
  }
@@ -103,16 +60,25 @@ function makeSortingParams(sortings) {
103
60
  return jsonParams;
104
61
  }
105
62
  function makeFilterParams(filters) {
106
- var jsonParams = {};
107
- if (filters) {
108
- var where = {};
109
- filters.forEach(f => {
110
- var operationFunc = getOperatorFunction(f);
111
- where[f.name] = operationFunc;
112
- });
113
- Object.assign(jsonParams, { where });
63
+ /* for where AND clauses */
64
+ const columnFilters = filters.filter(filter => filter.operator !== 'search');
65
+ const columnWhere = columnFilters.reduce((where, f) => {
66
+ where[f.name] = getOperatorFunction(f);
67
+ return where;
68
+ }, {});
69
+ const searchFilters = filters.filter(filter => filter.operator === 'search');
70
+ if (searchFilters.length === 0) {
71
+ return {
72
+ where: columnWhere
73
+ };
114
74
  }
115
- return jsonParams;
75
+ /* for fulltext searching ... OR-AND composition */
76
+ const searchWheres = searchFilters.map(f => {
77
+ return Object.assign({ [f.name]: getOperatorFunction(f) }, columnWhere);
78
+ });
79
+ return {
80
+ where: searchWheres
81
+ };
116
82
  }
117
83
  function convertListParams(params, domain) {
118
84
  var { pagination, filters = [], sortings } = params;
@@ -1 +1 @@
1
- {"version":3,"file":"list-params-converter.js","sourceRoot":"","sources":["../../server/utils/list-params-converter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-params-converter.js","sourceRoot":"","sources":["../../server/utils/list-params-converter.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildQuery = void 0;
4
+ const typeorm_1 = require("typeorm");
4
5
  const condition_builder_1 = require("./condition-builder");
5
6
  const buildQuery = function (queryBuilder, params, context, domainRef = true) {
6
- const filters = params.filters;
7
+ var _a, _b;
8
+ const columnFilters = ((_a = params.filters) === null || _a === void 0 ? void 0 : _a.filter(filter => filter.operator !== 'search')) || [];
9
+ const searchFilters = ((_b = params.filters) === null || _b === void 0 ? void 0 : _b.filter(filter => filter.operator === 'search')) || [];
7
10
  const pagination = params.pagination;
8
11
  const sortings = params.sortings;
9
12
  const domainId = context && context.state.domain && context.state.domain.id;
10
- if (filters && filters.length > 0) {
11
- filters.forEach(filter => {
13
+ if (columnFilters && columnFilters.length > 0) {
14
+ columnFilters.forEach(filter => {
12
15
  const condition = (0, condition_builder_1.buildCondition)(queryBuilder.alias, filter.name, filter.operator, filter.value, filter.relation, Object.keys(queryBuilder.getParameters()).length);
13
16
  if (condition === null || condition === void 0 ? void 0 : condition.clause)
14
17
  queryBuilder.andWhere(condition.clause);
@@ -16,6 +19,15 @@ const buildQuery = function (queryBuilder, params, context, domainRef = true) {
16
19
  queryBuilder.setParameters(condition.parameters);
17
20
  });
18
21
  }
22
+ if (searchFilters.length > 0) {
23
+ queryBuilder.andWhere(new typeorm_1.Brackets(qb => {
24
+ searchFilters.forEach((filter, index) => {
25
+ const clause = `${queryBuilder.alias}.${filter.name} LIKE :${filter.name}`;
26
+ const parameters = { [filter.name]: filter.value };
27
+ index === 0 ? qb.where(clause, parameters) : qb.orWhere(clause, parameters);
28
+ });
29
+ }));
30
+ }
19
31
  if (domainRef) {
20
32
  queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domainId`, { domainId });
21
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list-query-builder.js","sourceRoot":"","sources":["../../server/utils/list-query-builder.ts"],"names":[],"mappings":";;;AAAA,2DAAoD;AAE7C,MAAM,UAAU,GAAG,UAAU,YAAiB,EAAE,MAAW,EAAE,OAAY,EAAE,YAAqB,IAAI;IACzG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;IAChC,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAA;IAE3E,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACjC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,MAAM,SAAS,GAAG,IAAA,kCAAc,EAC9B,YAAY,CAAC,KAAK,EAClB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM,CACjD,CAAA;YAED,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM;gBAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YAC9D,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU;gBAAE,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAA;KACH;IAED,IAAI,SAAS,EAAE;QACb,YAAY,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,KAAK,qBAAqB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;KAChF;IAED,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE;QAC7D,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3D,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;KACpC;IAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACnC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAClC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAA;YAC7G,IAAI,KAAK,KAAK,CAAC,EAAE;gBACf,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;aAC/D;iBAAM;gBACL,YAAY,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;aAClE;QACH,CAAC,CAAC,CAAA;KACH;AACH,CAAC,CAAA;AAzCY,QAAA,UAAU,cAyCtB"}
1
+ {"version":3,"file":"list-query-builder.js","sourceRoot":"","sources":["../../server/utils/list-query-builder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/shell",
3
- "version": "4.0.36",
3
+ "version": "4.0.40",
4
4
  "description": "Core module for framework",
5
5
  "bin": {
6
6
  "things-factory": "bin/things-factory",
@@ -36,7 +36,7 @@
36
36
  "@graphql-tools/schema": "^8.2.0",
37
37
  "@graphql-tools/utils": "^8.3.0",
38
38
  "@hatiolab/koa-webpack": "^6.0.0",
39
- "@hatiolab/things-scene": "^2.7.31",
39
+ "@hatiolab/things-scene": "^2.7.33",
40
40
  "@koa/cors": "^3.1.0",
41
41
  "@material/mwc-button": "^0.25.3",
42
42
  "@material/mwc-fab": "^0.25.3",
@@ -44,13 +44,13 @@
44
44
  "@material/mwc-icon-button": "^0.25.3",
45
45
  "@material/mwc-slider": "^0.25.3",
46
46
  "@material/mwc-textfield": "^0.25.3",
47
- "@operato/board": "^0.3.16",
48
- "@operato/graphql": "^0.3.16",
49
- "@operato/utils": "^0.3.16",
50
- "@things-factory/ejs-remote": "^4.0.36",
51
- "@things-factory/env": "^4.0.36",
52
- "@things-factory/styles": "^4.0.36",
53
- "@things-factory/utils": "^4.0.36",
47
+ "@operato/board": "^0.3.20",
48
+ "@operato/graphql": "^0.3.20",
49
+ "@operato/utils": "^0.3.20",
50
+ "@things-factory/ejs-remote": "^4.0.40",
51
+ "@things-factory/env": "^4.0.40",
52
+ "@things-factory/styles": "^4.0.40",
53
+ "@things-factory/utils": "^4.0.40",
54
54
  "@webcomponents/webcomponentsjs": "^2.6.0",
55
55
  "@webpack-contrib/schema-utils": "^1.0.0-beta.0",
56
56
  "apollo-server-core": "^3.5.0",
@@ -68,6 +68,7 @@
68
68
  "fs-extra": "^9.0.1",
69
69
  "glob": "^7.1.6",
70
70
  "graphql": "^15.7.2",
71
+ "graphql-kafka-subscriptions": "^0.4.0",
71
72
  "graphql-mqtt-subscriptions": "^1.2.0",
72
73
  "graphql-redis-subscriptions": "^2.4.2",
73
74
  "graphql-subscriptions": "^2.0.0",
@@ -93,7 +94,7 @@
93
94
  "loader-utils": "^2.0.0",
94
95
  "lodash": "^4.17.15",
95
96
  "mkdirp": "^1.0.3",
96
- "mqtt": "^4.2.6",
97
+ "mqtt": "^4.3.4",
97
98
  "node-fetch": "^2.6.0",
98
99
  "node-sass": "^6.0.1",
99
100
  "nodemon": "^2.0.2",
@@ -124,5 +125,5 @@
124
125
  "resolutions": {
125
126
  "core-js": "^3.16.0"
126
127
  },
127
- "gitHead": "132ab9f8af8c34f73bcd81a9776769a6929e13ee"
128
+ "gitHead": "f0697b5ab411e4aa1a52de19a6c135f39686eca1"
128
129
  }
package/server/pubsub.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { KafkaPubSub } from 'graphql-kafka-subscriptions'
1
2
  import { MQTTPubSub } from 'graphql-mqtt-subscriptions'
2
3
  import { RedisPubSub } from 'graphql-redis-subscriptions'
3
4
  import { PubSub } from 'graphql-subscriptions'
@@ -6,7 +7,7 @@ import { connect } from 'mqtt'
6
7
 
7
8
  import { config } from '@things-factory/env'
8
9
 
9
- const { middleware, host, port, nodes, options } = config.get('pubsub', {})
10
+ const { middleware, host, port, nodes, topic, options } = config.get('pubsub', {})
10
11
 
11
12
  const debug = require('debug')('things-factory:shell')
12
13
 
@@ -43,9 +44,50 @@ switch (middleware) {
43
44
  subscriber: cluster
44
45
  })
45
46
  break
47
+ case 'kafka':
48
+ // globalConfig: {} // options passed directly to the consumer and producer
49
+ pubsub = new KafkaPubSub({
50
+ topic,
51
+ host,
52
+ port,
53
+ ...options
54
+ })
55
+ break
46
56
  default:
47
57
  pubsub = new PubSub()
48
58
  break
49
59
  }
50
60
 
61
+ debug(middleware || 'default', 'pubsub initialized.')
62
+
63
+ // kafka pubsub keeps connection and app port with 'ctrl+c' termination.
64
+ const exitHandler = async (evt) => {
65
+ if (pubsub.close) {
66
+ try {
67
+ await pubsub.close()
68
+ } catch (err) {
69
+ console.error(err)
70
+ }
71
+ }
72
+ debug('exit on', evt.name)
73
+ if (evt.exit) process.exit()
74
+ }
75
+
76
+ /*
77
+ * exit events hint from https://stackoverflow.com/a/14032965/14539284
78
+ */
79
+
80
+ //do something when app is closing
81
+ process.on('exit', exitHandler.bind(null, { name: 'exit', exit: true } ))
82
+
83
+ //catches ctrl+c event
84
+ process.on('SIGINT', exitHandler.bind(null, { name: 'SIGINT', exit: true } ))
85
+
86
+ // catches "kill pid" (for example: nodemon restart)
87
+ process.on('SIGUSR1', exitHandler.bind(null, { name: 'SIGUSR1', exit: true } ))
88
+ process.on('SIGUSR2', exitHandler.bind(null, { name: 'SIGUSR2', exit: true } ))
89
+
90
+ //catches uncaught exceptions
91
+ process.on('uncaughtException', exitHandler.bind(null, { name: 'uncaughtException', exit: true } ))
92
+
51
93
  export { pubsub }
@@ -25,6 +25,7 @@ export const buildCondition = function (
25
25
  parameters: { [`args${seq}`]: `${value}` }
26
26
  }
27
27
 
28
+ case 'search':
28
29
  case 'i_like':
29
30
  return {
30
31
  clause: `LOWER(${alias}.${fieldName}) LIKE :args${seq}`,
@@ -1,13 +1,15 @@
1
- import { Equal, Not, Like, Raw, In, IsNull, Between } from 'typeorm'
1
+ import { Between, Equal, ILike, In, IsNull, Like, Not, Raw } from 'typeorm'
2
+
2
3
  import { ListParam } from '../service/common-types'
3
4
 
4
5
  const OPERATION_FUNCTION_MAP = {
6
+ search: value => ILike(value),
5
7
  eq: value => Equal(value),
6
8
  noteq: value => Not(Equal(value)),
7
9
  like: value => Like(value),
8
- i_like: value => Raw(alias => `LOWER(${alias}) LIKE '${String(value).toLowerCase()}'`),
10
+ i_like: value => ILike(value),
9
11
  nlike: value => Not(Like(value)),
10
- i_nlike: value => Raw(alias => `LOWER(${alias}) NOT LIKE '${String(value).toLowerCase()}'`),
12
+ i_nlike: value => Not(ILike(value)),
11
13
  lt: value => Raw(alias => `${alias} < ${typeof value === 'string' ? "'" + value + "'" : value}`),
12
14
  gt: value => Raw(alias => `${alias} > ${typeof value === 'string' ? "'" + value + "'" : value}`),
13
15
  lte: value => Raw(alias => `${alias} <= ${typeof value === 'string' ? "'" + value + "'" : value}`),
@@ -25,51 +27,6 @@ const OPERATION_FUNCTION_MAP = {
25
27
  between: value => Between(value[0], value[1])
26
28
  }
27
29
 
28
- // function getOperatorFunction({ operator, name, value, dataType }) {
29
- // switch (operator) {
30
- // case 'eq':
31
- // return Equal(value)
32
- // case 'noteq':
33
- // return Not(Equal(value))
34
- // case 'like':
35
- // return Like(value)
36
- // case 'nlike':
37
- // return Not(Like(value))
38
- // case 'lt':
39
- // return Raw(alias => `${alias} < ${value}`)
40
- // case 'gt':
41
- // return Raw(alias => `${alias} > ${value}`)
42
- // case 'lte':
43
- // return Raw(alias => `${alias} <= ${value}`)
44
- // case 'gte':
45
- // return Raw(alias => `${alias} >= ${value}`)
46
- // case 'in':
47
- // return In(value)
48
- // case 'notin':
49
- // return Not(In(value))
50
- // case 'is_null':
51
- // return IsNull()
52
- // case 'is_not_null':
53
- // return Not(IsNull())
54
- // case 'is_false':
55
- // return Raw(alias => `${alias} IS FALSE`)
56
- // case 'is_true':
57
- // return Raw(alias => `${alias} IS TRUE`)
58
- // case 'is_not_false':
59
- // return Raw(alias => `${alias} IS NOT FALSE`)
60
- // case 'is_not_true':
61
- // return Raw(alias => `${alias} IS NOT TRUE`)
62
- // case 'is_present':
63
- // return Raw(alias => `${alias} IS PRESENT`)
64
- // case 'is_blank':
65
- // return Raw(alias => `${alias} IS BLANK`)
66
- // case 'is_empty_num_id':
67
- // return Raw(alias => `${alias} IS EMPTY NUMERIC ID`)
68
- // case 'between':
69
- // return Between(value[0], value[1])
70
- // }
71
- // }
72
-
73
30
  function getOperatorFunction({ operator, name, value, dataType }) {
74
31
  return OPERATION_FUNCTION_MAP[operator](value)
75
32
  }
@@ -111,17 +68,31 @@ function makeSortingParams(sortings) {
111
68
  }
112
69
 
113
70
  function makeFilterParams(filters) {
114
- var jsonParams = {}
115
- if (filters) {
116
- var where = {}
117
- filters.forEach(f => {
118
- var operationFunc = getOperatorFunction(f)
119
- where[f.name] = operationFunc
120
- })
121
- Object.assign(jsonParams, { where })
71
+ /* for where AND clauses */
72
+ const columnFilters = filters.filter(filter => filter.operator !== 'search')
73
+ const columnWhere = columnFilters.reduce((where, f) => {
74
+ where[f.name] = getOperatorFunction(f)
75
+ return where
76
+ }, {})
77
+
78
+ const searchFilters = filters.filter(filter => filter.operator === 'search')
79
+ if (searchFilters.length === 0) {
80
+ return {
81
+ where: columnWhere
82
+ }
122
83
  }
123
84
 
124
- return jsonParams
85
+ /* for fulltext searching ... OR-AND composition */
86
+ const searchWheres = searchFilters.map(f => {
87
+ return {
88
+ [f.name]: getOperatorFunction(f),
89
+ ...columnWhere
90
+ }
91
+ })
92
+
93
+ return {
94
+ where: searchWheres
95
+ }
125
96
  }
126
97
 
127
98
  export function convertListParams(params: typeof ListParam, domain?: String) {
@@ -1,13 +1,16 @@
1
+ import { Brackets } from 'typeorm'
2
+
1
3
  import { buildCondition } from './condition-builder'
2
4
 
3
5
  export const buildQuery = function (queryBuilder: any, params: any, context: any, domainRef: Boolean = true) {
4
- const filters = params.filters
6
+ const columnFilters = params.filters?.filter(filter => filter.operator !== 'search') || []
7
+ const searchFilters = params.filters?.filter(filter => filter.operator === 'search') || []
5
8
  const pagination = params.pagination
6
9
  const sortings = params.sortings
7
10
  const domainId = context && context.state.domain && context.state.domain.id
8
11
 
9
- if (filters && filters.length > 0) {
10
- filters.forEach(filter => {
12
+ if (columnFilters && columnFilters.length > 0) {
13
+ columnFilters.forEach(filter => {
11
14
  const condition = buildCondition(
12
15
  queryBuilder.alias,
13
16
  filter.name,
@@ -22,6 +25,19 @@ export const buildQuery = function (queryBuilder: any, params: any, context: any
22
25
  })
23
26
  }
24
27
 
28
+ if (searchFilters.length > 0) {
29
+ queryBuilder.andWhere(
30
+ new Brackets(qb => {
31
+ searchFilters.forEach((filter, index) => {
32
+ const clause = `${queryBuilder.alias}.${filter.name} LIKE :${filter.name}`
33
+ const parameters = { [filter.name]: filter.value }
34
+
35
+ index === 0 ? qb.where(clause, parameters) : qb.orWhere(clause, parameters)
36
+ })
37
+ })
38
+ )
39
+ }
40
+
25
41
  if (domainRef) {
26
42
  queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domainId`, { domainId })
27
43
  }