@things-factory/shell 6.2.79 → 6.2.88
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.
- package/dist-server/graphql-local-client.d.ts +19 -0
- package/dist-server/graphql-local-client.js +14 -0
- package/dist-server/graphql-local-client.js.map +1 -1
- package/dist-server/initializers/database.d.ts +26 -0
- package/dist-server/initializers/database.js +26 -0
- package/dist-server/initializers/database.js.map +1 -1
- package/dist-server/pubsub-log-transport.d.ts +27 -0
- package/dist-server/pubsub-log-transport.js +15 -0
- package/dist-server/pubsub-log-transport.js.map +1 -1
- package/dist-server/pubsub.d.ts +7 -0
- package/dist-server/pubsub.js +12 -0
- package/dist-server/pubsub.js.map +1 -1
- package/dist-server/schema.d.ts +4 -0
- package/dist-server/schema.js +4 -0
- package/dist-server/schema.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/typeorm/encrypt-transform.d.ts +5 -0
- package/dist-server/typeorm/encrypt-transform.js +25 -0
- package/dist-server/typeorm/encrypt-transform.js.map +1 -1
- package/dist-server/utils/condition-builder.d.ts +11 -0
- package/dist-server/utils/condition-builder.js +11 -0
- package/dist-server/utils/condition-builder.js.map +1 -1
- package/dist-server/utils/get-domain.d.ts +46 -0
- package/dist-server/utils/get-domain.js +70 -0
- package/dist-server/utils/get-domain.js.map +1 -1
- package/dist-server/utils/get-query-builder-from-list-params.d.ts +12 -2
- package/dist-server/utils/get-query-builder-from-list-params.js +24 -8
- package/dist-server/utils/get-query-builder-from-list-params.js.map +1 -1
- package/dist-server/utils/get-times-for-period.d.ts +14 -0
- package/dist-server/utils/get-times-for-period.js +14 -0
- package/dist-server/utils/get-times-for-period.js.map +1 -1
- package/dist-server/utils/list-param-adjuster.d.ts +9 -0
- package/dist-server/utils/list-param-adjuster.js +9 -0
- package/dist-server/utils/list-param-adjuster.js.map +1 -1
- package/dist-server/utils/list-params-converter.d.ts +6 -0
- package/dist-server/utils/list-params-converter.js +27 -0
- package/dist-server/utils/list-params-converter.js.map +1 -1
- package/dist-server/utils/list-query-builder.d.ts +10 -1
- package/dist-server/utils/list-query-builder.js +10 -1
- package/dist-server/utils/list-query-builder.js.map +1 -1
- package/dist-server/utils/publish-progress.d.ts +9 -0
- package/dist-server/utils/publish-progress.js +9 -0
- package/dist-server/utils/publish-progress.js.map +1 -1
- package/package.json +3 -3
- package/server/graphql-local-client.ts +20 -0
- package/server/initializers/database.ts +26 -0
- package/server/pubsub-log-transport.ts +29 -0
- package/server/pubsub.ts +13 -0
- package/server/schema.ts +4 -0
- package/server/typeorm/encrypt-transform.ts +26 -0
- package/server/utils/condition-builder.ts +12 -8
- package/server/utils/get-domain.ts +70 -0
- package/server/utils/get-query-builder-from-list-params.ts +26 -16
- package/server/utils/get-times-for-period.ts +15 -4
- package/server/utils/list-param-adjuster.ts +9 -0
- package/server/utils/list-params-converter.ts +28 -4
- package/server/utils/list-query-builder.ts +13 -17
- package/server/utils/publish-progress.ts +9 -0
- package/dist-server/webpack/koa-webpack/client.d.ts +0 -1
- package/dist-server/webpack/koa-webpack/client.js +0 -24
- package/dist-server/webpack/koa-webpack/client.js.map +0 -1
- package/dist-server/webpack/koa-webpack/index.d.ts +0 -2
- package/dist-server/webpack/koa-webpack/index.js +0 -58
- package/dist-server/webpack/koa-webpack/index.js.map +0 -1
- package/dist-server/webpack/koa-webpack/middleware.d.ts +0 -0
- package/dist-server/webpack/koa-webpack/middleware.js +0 -42
- package/dist-server/webpack/koa-webpack/middleware.js.map +0 -1
- package/dist-server/webpack/koa-webpack/validate.d.ts +0 -1
- package/dist-server/webpack/koa-webpack/validate.js +0 -26
- package/dist-server/webpack/koa-webpack/validate.js.map +0 -1
- package/server/webpack/koa-webpack/client.ts +0 -26
- package/server/webpack/koa-webpack/index.ts +0 -71
- package/server/webpack/koa-webpack/middleware.ts +0 -47
- package/server/webpack/koa-webpack/validate.ts +0 -27
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-times-for-period.js","sourceRoot":"","sources":["../../server/utils/get-times-for-period.ts"],"names":[],"mappings":";;;;AAAA,8EAAoC;
|
1
|
+
{"version":3,"file":"get-times-for-period.js","sourceRoot":"","sources":["../../server/utils/get-times-for-period.ts"],"names":[],"mappings":"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","sourcesContent":["import moment from 'moment-timezone'\n\n/**\n * Get the time range for the specified period relative to the current moment in a specific domain's timezone.\n *\n * @param {string} period - The time period to calculate the range for. Valid options are 'today', 'this month', '30 days', 'this year', '12 months'.\n * @param {Object} context - The context object containing domain information.\n * @returns {Promise<{ from: string; to: string }>} - A Promise that resolves to an object containing 'from' and 'to' ISO date strings representing the time range.\n */\nexport async function getTimesForPeriod(period: 'today' | 'this month' | '30 days' | 'this year' | '12 months', context: any): Promise<{ from: string; to: string }> {\n const { domain } = context.state\n const theDate = moment.tz(new Date(), domain.timezone)\n\n if (period == 'today') {\n const from = theDate.clone().format('YYYY-MM-DD')\n const to = theDate.clone().add(1, 'day').startOf('day').format('YYYY-MM-DD')\n\n return { from, to }\n } else if (period == 'this month') {\n const from = theDate.clone().startOf('month').format('YYYY-MM-DD')\n const to = theDate.clone().add(1, 'month').startOf('month').format('YYYY-MM-DD')\n\n return { from, to }\n } else if (period == '30 days') {\n const from = theDate.clone().subtract(30, 'day').format('YYYY-MM-DD')\n const to = theDate.clone().add(1, 'day').startOf('day').format('YYYY-MM-DD')\n\n return { from, to }\n } else if (period == 'this year') {\n const from = theDate.clone().startOf('year').format('YYYY-MM-DD')\n const to = theDate.clone().add(1, 'year').startOf('year').format('YYYY-MM-DD')\n\n return { from, to }\n } else if (period == '12 months') {\n const from = theDate.clone().subtract(12, 'month').startOf('month').format('YYYY-MM-DD')\n const to = theDate.clone().add(1, 'month').startOf('month').format('YYYY-MM-DD')\n\n return { from, to }\n }\n}\n\n/**\n * Get the ISO date strings for the specified period relative to the current moment in a specific domain's timezone.\n *\n * @param {string} period - The time period to calculate the range for. Valid options are 'today', 'this month', '30 days', 'this year', '12 months'.\n * @param {Object} context - The context object containing domain information.\n * @returns {Promise<{ from: string; to: string }>} - A Promise that resolves to an object containing 'from' and 'to' ISO date strings representing the time range.\n */\nexport async function getISOStringsForPeriod(\n period: 'today' | 'this month' | '30 days' | 'this year' | '12 months',\n context: any\n): Promise<{ from: string; to: string }> {\n const { domain } = context.state\n const { from, to } = await getTimesForPeriod(period, context)\n\n return {\n from: moment.tz(from, domain.timezone).toISOString(),\n to: moment.tz(to, domain.timezone).toISOString()\n }\n}\n"]}
|
@@ -1,2 +1,11 @@
|
|
1
1
|
import { Filter } from '../service/common-types';
|
2
|
+
/**
|
3
|
+
* Adjust the given array of filters based on the provided changes.
|
4
|
+
* If a filter with the same name exists in the original array, it will be replaced with the new filter;
|
5
|
+
* otherwise, the new filter will be added to the array.
|
6
|
+
*
|
7
|
+
* @param {Filter[]} filters - The original array of filters to be adjusted.
|
8
|
+
* @param {Filter[]} filtersChange - The array of filter changes to be applied.
|
9
|
+
* @returns {Filter[]} - The adjusted array of filters.
|
10
|
+
*/
|
2
11
|
export declare function adjustFilters(filters: Filter[], filtersChange: Filter[]): Filter[];
|
@@ -1,6 +1,15 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.adjustFilters = void 0;
|
4
|
+
/**
|
5
|
+
* Adjust the given array of filters based on the provided changes.
|
6
|
+
* If a filter with the same name exists in the original array, it will be replaced with the new filter;
|
7
|
+
* otherwise, the new filter will be added to the array.
|
8
|
+
*
|
9
|
+
* @param {Filter[]} filters - The original array of filters to be adjusted.
|
10
|
+
* @param {Filter[]} filtersChange - The array of filter changes to be applied.
|
11
|
+
* @returns {Filter[]} - The adjusted array of filters.
|
12
|
+
*/
|
4
13
|
function adjustFilters(filters, filtersChange) {
|
5
14
|
var filtersNew = [...filters];
|
6
15
|
filtersChange.forEach(change => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"list-param-adjuster.js","sourceRoot":"","sources":["../../server/utils/list-param-adjuster.ts"],"names":[],"mappings":";;;AAEA,SAAgB,aAAa,CAAC,OAAiB,EAAE,aAAuB;IACtE,IAAI,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,CAAA;IAE7B,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC7B,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAA;QACrE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AATD,sCASC","sourcesContent":["import { Filter } from '../service/common-types'\n\nexport function adjustFilters(filters: Filter[], filtersChange: Filter[]): Filter[] {\n var filtersNew = [...filters]\n\n filtersChange.forEach(change => {\n const idx = (filtersNew || []).findIndex(f => f.name === change.name)\n idx !== -1 ? filtersNew.splice(idx, 1, change) : filtersNew.push(change)\n })\n\n return filtersNew\n}\n"]}
|
1
|
+
{"version":3,"file":"list-param-adjuster.js","sourceRoot":"","sources":["../../server/utils/list-param-adjuster.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAAC,OAAiB,EAAE,aAAuB;IACtE,IAAI,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,CAAA;IAE7B,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC7B,MAAM,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAA;QACrE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AATD,sCASC","sourcesContent":["import { Filter } from '../service/common-types'\n\n/**\n * Adjust the given array of filters based on the provided changes.\n * If a filter with the same name exists in the original array, it will be replaced with the new filter;\n * otherwise, the new filter will be added to the array.\n *\n * @param {Filter[]} filters - The original array of filters to be adjusted.\n * @param {Filter[]} filtersChange - The array of filter changes to be applied.\n * @returns {Filter[]} - The adjusted array of filters.\n */\nexport function adjustFilters(filters: Filter[], filtersChange: Filter[]): Filter[] {\n var filtersNew = [...filters]\n\n filtersChange.forEach(change => {\n const idx = (filtersNew || []).findIndex(f => f.name === change.name)\n idx !== -1 ? filtersNew.splice(idx, 1, change) : filtersNew.push(change)\n })\n\n return filtersNew\n}\n"]}
|
@@ -1,6 +1,12 @@
|
|
1
1
|
import { FindOperator } from 'typeorm';
|
2
2
|
import { ListParam } from '../service/common-types';
|
3
3
|
import { Domain } from '../service/domain/domain';
|
4
|
+
/**
|
5
|
+
* Convert ListParam object to TypeORM query parameters.
|
6
|
+
* @param {ListParam} params - The ListParam object containing pagination, sorting, and filtering options.
|
7
|
+
* @param {string | { domain?: string | Domain; searchables?: string[] }} options - Optional domain and searchables parameters.
|
8
|
+
* @returns {{ where?: { [name: string]: FindOperator<any> }; order?: { [name: string]: 'DESC' | 'ASC' }; skip?: number; take?: number }} - The TypeORM query parameters.
|
9
|
+
*/
|
4
10
|
export declare function convertListParams(params: ListParam, options?: string | {
|
5
11
|
domain?: string | Domain;
|
6
12
|
searchables?: string[];
|
@@ -27,9 +27,19 @@ const OPERATION_FUNCTION_MAP = {
|
|
27
27
|
is_empty_num_id: () => (0, typeorm_1.Raw)(alias => `${alias} IS EMPTY NUMERIC ID`),
|
28
28
|
between: value => (0, typeorm_1.Between)(value[0], value[1])
|
29
29
|
};
|
30
|
+
/**
|
31
|
+
* Get the TypeORM FindOperator function for a given filter.
|
32
|
+
* @param {Filter} filter - The filter object containing operator and value.
|
33
|
+
* @returns {FindOperator<any>} - The corresponding FindOperator function.
|
34
|
+
*/
|
30
35
|
function getOperatorFunction({ operator, value }) {
|
31
36
|
return OPERATION_FUNCTION_MAP[operator](value);
|
32
37
|
}
|
38
|
+
/**
|
39
|
+
* Create pagination parameters for a TypeORM query.
|
40
|
+
* @param {Pagination} pagination - The pagination object.
|
41
|
+
* @returns {{ skip?: number; take?: number }} - The pagination parameters.
|
42
|
+
*/
|
33
43
|
function makePaginationParams(pagination) {
|
34
44
|
var result = {};
|
35
45
|
if (pagination) {
|
@@ -47,6 +57,11 @@ function makePaginationParams(pagination) {
|
|
47
57
|
}
|
48
58
|
return result;
|
49
59
|
}
|
60
|
+
/**
|
61
|
+
* Create sorting parameters for a TypeORM query.
|
62
|
+
* @param {Sorting[]} sortings - The array of sorting objects.
|
63
|
+
* @returns {{ order?: { [name: string]: 'DESC' | 'ASC' } }} - The sorting parameters.
|
64
|
+
*/
|
50
65
|
function makeSortingParams(sortings) {
|
51
66
|
var result = {};
|
52
67
|
if (sortings) {
|
@@ -60,6 +75,12 @@ function makeSortingParams(sortings) {
|
|
60
75
|
}
|
61
76
|
return result;
|
62
77
|
}
|
78
|
+
/**
|
79
|
+
* Create filter parameters for a TypeORM query.
|
80
|
+
* @param {Filter[]} filters - The array of filter objects.
|
81
|
+
* @param {string[]} searchables - The array of searchable field names.
|
82
|
+
* @returns {{ where: { [name: string]: FindOperator<any> } | { [name: string]: FindOperator<any> }[] }} - The filter parameters.
|
83
|
+
*/
|
63
84
|
function makeFilterParams(filters, searchables) {
|
64
85
|
/* for where AND clauses */
|
65
86
|
const columnFilters = (filters === null || filters === void 0 ? void 0 : filters.filter(filter => {
|
@@ -100,6 +121,12 @@ function makeFilterParams(filters, searchables) {
|
|
100
121
|
where: searchWheres
|
101
122
|
};
|
102
123
|
}
|
124
|
+
/**
|
125
|
+
* Convert ListParam object to TypeORM query parameters.
|
126
|
+
* @param {ListParam} params - The ListParam object containing pagination, sorting, and filtering options.
|
127
|
+
* @param {string | { domain?: string | Domain; searchables?: string[] }} options - Optional domain and searchables parameters.
|
128
|
+
* @returns {{ where?: { [name: string]: FindOperator<any> }; order?: { [name: string]: 'DESC' | 'ASC' }; skip?: number; take?: number }} - The TypeORM query parameters.
|
129
|
+
*/
|
103
130
|
function convertListParams(params, options) {
|
104
131
|
var domainId;
|
105
132
|
if (options) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"list-params-converter.js","sourceRoot":"","sources":["../../server/utils/list-params-converter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Between, Equal, FindOperator, ILike, In, IsNull, Like, Not, Raw } from 'typeorm'\n\nimport { Filter, ListParam, Pagination, Sorting } from '../service/common-types'\nimport { Domain } from '../service/domain/domain'\nimport { adjustFilters } from './list-param-adjuster'\n\nconst OPERATION_FUNCTION_MAP: { [operator: string]: (value: any) => FindOperator<any> } = {\n search: value => ILike(value),\n eq: value => Equal(value),\n noteq: value => Not(Equal(value)),\n like: value => Like(value),\n i_like: value => ILike(value),\n nlike: value => Not(Like(value)),\n i_nlike: value => Not(ILike(value)),\n lt: value => Raw(alias => `${alias} < ${typeof value === 'string' ? \"'\" + value + \"'\" : value}`),\n gt: value => Raw(alias => `${alias} > ${typeof value === 'string' ? \"'\" + value + \"'\" : value}`),\n lte: value => Raw(alias => `${alias} <= ${typeof value === 'string' ? \"'\" + value + \"'\" : value}`),\n gte: value => Raw(alias => `${alias} >= ${typeof value === 'string' ? \"'\" + value + \"'\" : value}`),\n in: value => In(value),\n notin: value => Not(In(value)),\n is_null: () => IsNull(),\n is_not_null: () => Not(IsNull()),\n is_false: () => Raw(alias => `${alias} IS FALSE`),\n in_true: () => Raw(alias => `${alias} IS TRUE`),\n is_not_true: () => Raw(alias => `${alias} IS NOT TRUE`),\n is_present: () => Raw(alias => `${alias} IS PRESENT`),\n is_blank: () => Raw(alias => `${alias} IS BLANK`),\n is_empty_num_id: () => Raw(alias => `${alias} IS EMPTY NUMERIC ID`),\n between: value => Between(value[0], value[1])\n}\n\nfunction getOperatorFunction({ operator, value }: Filter): FindOperator<any> {\n return OPERATION_FUNCTION_MAP[operator](value)\n}\n\nfunction makePaginationParams(pagination: Pagination): { skip?: number; take?: number } {\n var result = {} as { skip?: number; take?: number }\n if (pagination) {\n var { page = 0, limit = 0 } = pagination\n var skip = 0\n var take = 0\n\n if (limit > 0) {\n skip = Math.max(page - 1, 0) * limit\n take = limit\n Object.assign(result, {\n skip,\n take\n })\n }\n }\n\n return result\n}\n\nfunction makeSortingParams(sortings: Sorting[]): { order?: { [name: string]: 'DESC' | 'ASC' } } {\n var result = {} as { order?: { [name: string]: 'DESC' | 'ASC' } }\n if (sortings) {\n var order = {} as { [name: string]: 'DESC' | 'ASC' }\n sortings.forEach(s => {\n order[s.name] = s.desc ? 'DESC' : 'ASC'\n })\n\n Object.assign(result, {\n order\n })\n }\n\n return result\n}\n\nfunction makeFilterParams(\n filters: Filter[],\n searchables?: string[]\n): {\n where: { [name: string]: FindOperator<any> } | { [name: string]: FindOperator<any> }[]\n} {\n /* for where AND clauses */\n const columnFilters =\n filters?.filter(filter => {\n if (filter.operator === 'search') {\n return false\n }\n if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {\n return false\n }\n return true\n }) || []\n\n const searchFilters =\n searchables instanceof Array\n ? filters?.filter(filter => {\n if (filter.operator !== 'search') {\n return false\n }\n if (!searchables.includes(filter.name)) {\n console.warn(\n '\"searchables\" setting is required for like searches with a heavy database query load',\n filter.name\n )\n return false\n }\n return true\n }) || []\n : []\n\n const columnWhere = columnFilters.reduce((where, f) => {\n where[f.name] = getOperatorFunction(f)\n return where\n }, {} as { [name: string]: FindOperator<any> })\n\n if (searchFilters.length === 0) {\n return {\n where: columnWhere\n }\n }\n\n /* for fulltext searching ... OR-AND composition */\n const searchWheres = searchFilters.map(f => {\n return {\n [f.name]: getOperatorFunction(f),\n ...columnWhere\n }\n })\n\n return {\n where: searchWheres\n }\n}\n\nexport function convertListParams(\n params: ListParam,\n options?:\n | string\n | {\n domain?: string | Domain\n searchables?: string[]\n }\n): {\n where?: { [name: string]: FindOperator<any> }\n order?: {\n [name: string]: 'DESC' | 'ASC'\n }\n skip?: number\n take?: number\n} {\n var domainId: string | undefined\n\n if (options) {\n if (typeof options === 'string' /* for 하위 호환성 */) {\n var domainId = options\n } else {\n var { domain, searchables } = options\n var domainId = typeof domain === 'string' ? domain : domain?.id\n }\n }\n\n var { pagination, filters = [], sortings } = params\n var result = {}\n\n if (domainId) {\n filters = adjustFilters(filters, [\n {\n name: 'domain',\n operator: 'eq',\n value: domainId\n }\n ])\n }\n\n if (pagination) Object.assign(result, makePaginationParams(pagination))\n if (sortings) Object.assign(result, makeSortingParams(sortings))\n if (filters) Object.assign(result, makeFilterParams(filters, searchables))\n\n return result\n}\n"]}
|
1
|
+
{"version":3,"file":"list-params-converter.js","sourceRoot":"","sources":["../../server/utils/list-params-converter.ts"],"names":[],"mappings":"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","sourcesContent":["import { Between, Equal, FindOperator, ILike, In, IsNull, Like, Not, Raw } from 'typeorm'\n\nimport { Filter, ListParam, Pagination, Sorting } from '../service/common-types'\nimport { Domain } from '../service/domain/domain'\nimport { adjustFilters } from './list-param-adjuster'\n\nconst OPERATION_FUNCTION_MAP: { [operator: string]: (value: any) => FindOperator<any> } = {\n search: value => ILike(value),\n eq: value => Equal(value),\n noteq: value => Not(Equal(value)),\n like: value => Like(value),\n i_like: value => ILike(value),\n nlike: value => Not(Like(value)),\n i_nlike: value => Not(ILike(value)),\n lt: value => Raw(alias => `${alias} < ${typeof value === 'string' ? \"'\" + value + \"'\" : value}`),\n gt: value => Raw(alias => `${alias} > ${typeof value === 'string' ? \"'\" + value + \"'\" : value}`),\n lte: value => Raw(alias => `${alias} <= ${typeof value === 'string' ? \"'\" + value + \"'\" : value}`),\n gte: value => Raw(alias => `${alias} >= ${typeof value === 'string' ? \"'\" + value + \"'\" : value}`),\n in: value => In(value),\n notin: value => Not(In(value)),\n is_null: () => IsNull(),\n is_not_null: () => Not(IsNull()),\n is_false: () => Raw(alias => `${alias} IS FALSE`),\n in_true: () => Raw(alias => `${alias} IS TRUE`),\n is_not_true: () => Raw(alias => `${alias} IS NOT TRUE`),\n is_present: () => Raw(alias => `${alias} IS PRESENT`),\n is_blank: () => Raw(alias => `${alias} IS BLANK`),\n is_empty_num_id: () => Raw(alias => `${alias} IS EMPTY NUMERIC ID`),\n between: value => Between(value[0], value[1])\n}\n\n/**\n * Get the TypeORM FindOperator function for a given filter.\n * @param {Filter} filter - The filter object containing operator and value.\n * @returns {FindOperator<any>} - The corresponding FindOperator function.\n */\nfunction getOperatorFunction({ operator, value }: Filter): FindOperator<any> {\n return OPERATION_FUNCTION_MAP[operator](value)\n}\n\n/**\n * Create pagination parameters for a TypeORM query.\n * @param {Pagination} pagination - The pagination object.\n * @returns {{ skip?: number; take?: number }} - The pagination parameters.\n */\nfunction makePaginationParams(pagination: Pagination): { skip?: number; take?: number } {\n var result = {} as { skip?: number; take?: number }\n if (pagination) {\n var { page = 0, limit = 0 } = pagination\n var skip = 0\n var take = 0\n\n if (limit > 0) {\n skip = Math.max(page - 1, 0) * limit\n take = limit\n Object.assign(result, {\n skip,\n take\n })\n }\n }\n\n return result\n}\n\n/**\n * Create sorting parameters for a TypeORM query.\n * @param {Sorting[]} sortings - The array of sorting objects.\n * @returns {{ order?: { [name: string]: 'DESC' | 'ASC' } }} - The sorting parameters.\n */\nfunction makeSortingParams(sortings: Sorting[]): { order?: { [name: string]: 'DESC' | 'ASC' } } {\n var result = {} as { order?: { [name: string]: 'DESC' | 'ASC' } }\n if (sortings) {\n var order = {} as { [name: string]: 'DESC' | 'ASC' }\n sortings.forEach(s => {\n order[s.name] = s.desc ? 'DESC' : 'ASC'\n })\n\n Object.assign(result, {\n order\n })\n }\n\n return result\n}\n\n/**\n * Create filter parameters for a TypeORM query.\n * @param {Filter[]} filters - The array of filter objects.\n * @param {string[]} searchables - The array of searchable field names.\n * @returns {{ where: { [name: string]: FindOperator<any> } | { [name: string]: FindOperator<any> }[] }} - The filter parameters.\n */\nfunction makeFilterParams(\n filters: Filter[],\n searchables?: string[]\n): {\n where: { [name: string]: FindOperator<any> } | { [name: string]: FindOperator<any> }[]\n} {\n /* for where AND clauses */\n const columnFilters =\n filters?.filter(filter => {\n if (filter.operator === 'search') {\n return false\n }\n if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {\n return false\n }\n return true\n }) || []\n\n const searchFilters =\n searchables instanceof Array\n ? filters?.filter(filter => {\n if (filter.operator !== 'search') {\n return false\n }\n if (!searchables.includes(filter.name)) {\n console.warn('\"searchables\" setting is required for like searches with a heavy database query load', filter.name)\n return false\n }\n return true\n }) || []\n : []\n\n const columnWhere = columnFilters.reduce((where, f) => {\n where[f.name] = getOperatorFunction(f)\n return where\n }, {} as { [name: string]: FindOperator<any> })\n\n if (searchFilters.length === 0) {\n return {\n where: columnWhere\n }\n }\n\n /* for fulltext searching ... OR-AND composition */\n const searchWheres = searchFilters.map(f => {\n return {\n [f.name]: getOperatorFunction(f),\n ...columnWhere\n }\n })\n\n return {\n where: searchWheres\n }\n}\n\n/**\n * Convert ListParam object to TypeORM query parameters.\n * @param {ListParam} params - The ListParam object containing pagination, sorting, and filtering options.\n * @param {string | { domain?: string | Domain; searchables?: string[] }} options - Optional domain and searchables parameters.\n * @returns {{ where?: { [name: string]: FindOperator<any> }; order?: { [name: string]: 'DESC' | 'ASC' }; skip?: number; take?: number }} - The TypeORM query parameters.\n */\nexport function convertListParams(\n params: ListParam,\n options?:\n | string\n | {\n domain?: string | Domain\n searchables?: string[]\n }\n): {\n where?: { [name: string]: FindOperator<any> }\n order?: {\n [name: string]: 'DESC' | 'ASC'\n }\n skip?: number\n take?: number\n} {\n var domainId: string | undefined\n\n if (options) {\n if (typeof options === 'string' /* for 하위 호환성 */) {\n var domainId = options\n } else {\n var { domain, searchables } = options\n var domainId = typeof domain === 'string' ? domain : domain?.id\n }\n }\n\n var { pagination, filters = [], sortings } = params\n var result = {}\n\n if (domainId) {\n filters = adjustFilters(filters, [\n {\n name: 'domain',\n operator: 'eq',\n value: domainId\n }\n ])\n }\n\n if (pagination) Object.assign(result, makePaginationParams(pagination))\n if (sortings) Object.assign(result, makeSortingParams(sortings))\n if (filters) Object.assign(result, makeFilterParams(filters, searchables))\n\n return result\n}\n"]}
|
@@ -1,6 +1,15 @@
|
|
1
1
|
import { ListParam } from '../service/common-types/list-param';
|
2
2
|
/**
|
3
|
-
* @deprecated
|
3
|
+
* @deprecated This function is recommended to be replaced with the `getQueryBuilderFromListParams` function.
|
4
|
+
*
|
5
|
+
* Builds a TypeORM query using the provided parameters to filter, paginate, and sort the data.
|
6
|
+
*
|
7
|
+
* @param {QueryBuilder} queryBuilder - The TypeORM query builder to build the query on.
|
8
|
+
* @param {ListParam} params - The list parameters to apply to the query.
|
9
|
+
* @param {Object} context - The context object, typically containing information about the user's domain.
|
10
|
+
* @param {boolean|Object} options - Additional options for the query builder.
|
11
|
+
* @param {boolean} options.domainRef - Indicates whether to include domain reference in the query.
|
12
|
+
* @param {string[]} options.searchables - An array of searchable field names.
|
4
13
|
*/
|
5
14
|
export declare const buildQuery: (queryBuilder: any, params: ListParam, context: any, options?: boolean | {
|
6
15
|
domainRef?: boolean;
|
@@ -5,7 +5,16 @@ const typeorm_1 = require("typeorm");
|
|
5
5
|
const condition_builder_1 = require("./condition-builder");
|
6
6
|
const list_param_1 = require("../service/common-types/list-param");
|
7
7
|
/**
|
8
|
-
* @deprecated
|
8
|
+
* @deprecated This function is recommended to be replaced with the `getQueryBuilderFromListParams` function.
|
9
|
+
*
|
10
|
+
* Builds a TypeORM query using the provided parameters to filter, paginate, and sort the data.
|
11
|
+
*
|
12
|
+
* @param {QueryBuilder} queryBuilder - The TypeORM query builder to build the query on.
|
13
|
+
* @param {ListParam} params - The list parameters to apply to the query.
|
14
|
+
* @param {Object} context - The context object, typically containing information about the user's domain.
|
15
|
+
* @param {boolean|Object} options - Additional options for the query builder.
|
16
|
+
* @param {boolean} options.domainRef - Indicates whether to include domain reference in the query.
|
17
|
+
* @param {string[]} options.searchables - An array of searchable field names.
|
9
18
|
*/
|
10
19
|
const buildQuery = function (queryBuilder, params, context, options) {
|
11
20
|
var _a, _b;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"list-query-builder.js","sourceRoot":"","sources":["../../server/utils/list-query-builder.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAElC,2DAAoD;AACpD,mEAA0F;AAE1F
|
1
|
+
{"version":3,"file":"list-query-builder.js","sourceRoot":"","sources":["../../server/utils/list-query-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Brackets } from 'typeorm'\n\nimport { buildCondition } from './condition-builder'\nimport { Filter, ListParam, InheritedValueType } from '../service/common-types/list-param'\n\n/**\n * @deprecated This function is recommended to be replaced with the `getQueryBuilderFromListParams` function.\n *\n * Builds a TypeORM query using the provided parameters to filter, paginate, and sort the data.\n *\n * @param {QueryBuilder} queryBuilder - The TypeORM query builder to build the query on.\n * @param {ListParam} params - The list parameters to apply to the query.\n * @param {Object} context - The context object, typically containing information about the user's domain.\n * @param {boolean|Object} options - Additional options for the query builder.\n * @param {boolean} options.domainRef - Indicates whether to include domain reference in the query.\n * @param {string[]} options.searchables - An array of searchable field names.\n */\nexport const buildQuery = function (\n queryBuilder: any,\n params: ListParam,\n context: any,\n options?:\n | boolean\n | {\n domainRef?: boolean\n searchables?: string[]\n }\n) {\n /* default value of domainRef is 'true' */\n var domainRef = typeof options === 'boolean' ? options : true\n\n /* for backwards compatibility of function spec */\n if (typeof options === 'object') {\n var { domainRef = true, searchables } = options\n }\n\n const columnFilters: Filter[] =\n params.filters?.filter(filter => {\n if (filter.operator === 'search') {\n return false\n }\n if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {\n console.warn('\"searchables\" setting is required for like searches with a heavy database query load', filter.name)\n return false\n }\n return true\n }) || []\n\n const searchFilters =\n searchables instanceof Array\n ? params.filters?.filter(filter => {\n if (filter.operator !== 'search') {\n return false\n }\n if (!searchables.includes(filter.name)) {\n console.warn('\"searchables\" setting is required for like searches with a heavy database query load', filter.name)\n return false\n }\n return true\n }) || []\n : []\n\n const pagination = params.pagination\n const sortings = params.sortings\n const domain = context?.state.domain\n\n if (columnFilters && columnFilters.length > 0) {\n columnFilters.forEach(filter => {\n const condition = buildCondition(queryBuilder.alias, filter.name, filter.operator, filter.value, filter.relation, Object.keys(queryBuilder.getParameters()).length)\n\n if (condition?.clause) queryBuilder.andWhere(condition.clause)\n if (condition?.parameters) queryBuilder.setParameters(condition.parameters)\n })\n }\n\n if (searchFilters.length > 0) {\n queryBuilder.andWhere(\n new Brackets(qb => {\n searchFilters.forEach((filter, index) => {\n const clause = `${queryBuilder.alias}.${filter.name} LIKE :${filter.name}`\n const parameters = { [filter.name]: filter.value }\n\n index === 0 ? qb.where(clause, parameters) : qb.orWhere(clause, parameters)\n })\n })\n )\n }\n\n if (domainRef) {\n const inherited = params?.inherited || InheritedValueType.None\n\n if (!inherited || inherited == InheritedValueType.None) {\n queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: domain.id })\n } else if (inherited == InheritedValueType.Include) {\n queryBuilder.andWhere(`${queryBuilder.alias}.domain In(:...domains)`, {\n domains: [domain.id, domain.parentId].filter(Boolean)\n })\n } else if (inherited == InheritedValueType.Only) {\n queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: domain.parentId || 'Impossible' })\n } else {\n queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: 'Impossible' })\n }\n }\n\n if (pagination && pagination.page > 0 && pagination.limit > 0) {\n queryBuilder.skip(pagination.limit * (pagination.page - 1))\n queryBuilder.take(pagination.limit)\n }\n\n if (sortings && sortings.length > 0) {\n sortings.forEach((sorting, index) => {\n const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${queryBuilder.alias}.${sorting.name}`\n if (index === 0) {\n queryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n } else {\n queryBuilder.addOrderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n }\n })\n }\n}\n"]}
|
@@ -1,3 +1,12 @@
|
|
1
|
+
/**
|
2
|
+
* Publishes a progress update message to the 'data' channel in the Pub/Sub system.
|
3
|
+
*
|
4
|
+
* @param {Object} param - The progress update parameters.
|
5
|
+
* @param {string} param.domain - The domain or category of the progress update.
|
6
|
+
* @param {string} param.tag - The tag or identifier for the progress update.
|
7
|
+
* @param {number} param.progress - The progress value indicating the completion percentage.
|
8
|
+
* @param {string} param.message - A message or description of the progress update.
|
9
|
+
*/
|
1
10
|
export declare function publishProgress({ domain, tag, progress, message }: {
|
2
11
|
domain: any;
|
3
12
|
tag: any;
|
@@ -2,6 +2,15 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.publishProgress = void 0;
|
4
4
|
const pubsub_1 = require("../pubsub");
|
5
|
+
/**
|
6
|
+
* Publishes a progress update message to the 'data' channel in the Pub/Sub system.
|
7
|
+
*
|
8
|
+
* @param {Object} param - The progress update parameters.
|
9
|
+
* @param {string} param.domain - The domain or category of the progress update.
|
10
|
+
* @param {string} param.tag - The tag or identifier for the progress update.
|
11
|
+
* @param {number} param.progress - The progress value indicating the completion percentage.
|
12
|
+
* @param {string} param.message - A message or description of the progress update.
|
13
|
+
*/
|
5
14
|
function publishProgress({ domain, tag, progress, message }) {
|
6
15
|
pubsub_1.pubsub.publish('data', {
|
7
16
|
data: {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"publish-progress.js","sourceRoot":"","sources":["../../server/utils/publish-progress.ts"],"names":[],"mappings":";;;AAAA,sCAAkC;AAElC,SAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE;IAChE,eAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE;YACJ,MAAM;YACN,GAAG;YACH,IAAI,EAAE;gBACJ,QAAQ;gBACR,OAAO;aACR;SACF;KACF,CAAC,CAAA;AACJ,CAAC;AAXD,0CAWC","sourcesContent":["import { pubsub } from '../pubsub'\n\nexport function publishProgress({ domain, tag, progress, message }) {\n pubsub.publish('data', {\n data: {\n domain,\n tag,\n data: {\n progress,\n message\n }\n }\n })\n}\n"]}
|
1
|
+
{"version":3,"file":"publish-progress.js","sourceRoot":"","sources":["../../server/utils/publish-progress.ts"],"names":[],"mappings":";;;AAAA,sCAAkC;AAElC;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE;IAChE,eAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE;YACJ,MAAM;YACN,GAAG;YACH,IAAI,EAAE;gBACJ,QAAQ;gBACR,OAAO;aACR;SACF;KACF,CAAC,CAAA;AACJ,CAAC;AAXD,0CAWC","sourcesContent":["import { pubsub } from '../pubsub'\n\n/**\n * Publishes a progress update message to the 'data' channel in the Pub/Sub system.\n *\n * @param {Object} param - The progress update parameters.\n * @param {string} param.domain - The domain or category of the progress update.\n * @param {string} param.tag - The tag or identifier for the progress update.\n * @param {number} param.progress - The progress value indicating the completion percentage.\n * @param {string} param.message - A message or description of the progress update.\n */\nexport function publishProgress({ domain, tag, progress, message }) {\n pubsub.publish('data', {\n data: {\n domain,\n tag,\n data: {\n progress,\n message\n }\n }\n })\n}\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@things-factory/shell",
|
3
|
-
"version": "6.2.
|
3
|
+
"version": "6.2.88",
|
4
4
|
"description": "Core module for framework",
|
5
5
|
"bin": {
|
6
6
|
"things-factory": "bin/things-factory",
|
@@ -120,7 +120,7 @@
|
|
120
120
|
"scrollbooster": "^3.0.2",
|
121
121
|
"sweetalert2": "^11.7.3",
|
122
122
|
"type-graphql": "2.0.0-beta.3",
|
123
|
-
"typeorm": "
|
123
|
+
"typeorm": "0.3.17",
|
124
124
|
"uuid": "^3.4.0",
|
125
125
|
"web-animations-js": "^2.3.2",
|
126
126
|
"web-push": "^3.5.0",
|
@@ -134,5 +134,5 @@
|
|
134
134
|
"pg": "^8.7.3",
|
135
135
|
"sqlite3": "^5.0.8"
|
136
136
|
},
|
137
|
-
"gitHead": "
|
137
|
+
"gitHead": "700ee6ac193bb6b6bc4f1a569c3ca046a7a049ee"
|
138
138
|
}
|
@@ -1,3 +1,7 @@
|
|
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
|
+
*/
|
1
5
|
import { ApolloClient, InMemoryCache, NormalizedCacheObject } from '@apollo/client'
|
2
6
|
import { SchemaLink } from '@apollo/client/link/schema'
|
3
7
|
|
@@ -18,9 +22,25 @@ const defaultOptions: any = {
|
|
18
22
|
const cache = new InMemoryCache({
|
19
23
|
addTypename: false
|
20
24
|
})
|
25
|
+
|
26
|
+
/**
|
27
|
+
* GraphqlLocalClient is a utility class for initializing an Apollo Client for a local GraphQL schema.
|
28
|
+
* It provides a static `init` method for setting up the client with a schema and an app context.
|
29
|
+
*/
|
21
30
|
export class GraphqlLocalClient {
|
31
|
+
/**
|
32
|
+
* Apollo Client instance for local GraphQL schema.
|
33
|
+
* @static
|
34
|
+
* @type {ApolloClient<NormalizedCacheObject>}
|
35
|
+
*/
|
22
36
|
static client: ApolloClient<NormalizedCacheObject>
|
23
37
|
|
38
|
+
/**
|
39
|
+
* Initializes the Apollo Client for a local GraphQL schema.
|
40
|
+
* @static
|
41
|
+
* @param {object} schema - The GraphQL schema to use.
|
42
|
+
* @param {object} app - The application context to be passed in as part of the execution context.
|
43
|
+
*/
|
24
44
|
static init(schema, app) {
|
25
45
|
GraphqlLocalClient.client = new ApolloClient({
|
26
46
|
defaultOptions,
|
@@ -13,26 +13,52 @@ try {
|
|
13
13
|
|
14
14
|
const dataSources: { [name: string]: DataSource } = {}
|
15
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
|
+
*/
|
16
21
|
export function getDataSource(name?: string): DataSource {
|
17
22
|
return dataSources[name || 'default']
|
18
23
|
}
|
19
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
|
+
*/
|
20
30
|
export function addDataSource(name: string, dataSource: DataSource) {
|
21
31
|
dataSources[name] = dataSource
|
22
32
|
}
|
23
33
|
|
34
|
+
/**
|
35
|
+
* Removes a DataSource with the specified name.
|
36
|
+
* @param {string} name - The name of the DataSource to remove.
|
37
|
+
*/
|
24
38
|
export function removeDataSource(name: string) {
|
25
39
|
delete dataSources[name]
|
26
40
|
}
|
27
41
|
|
42
|
+
/**
|
43
|
+
* Returns an array of all registered DataSource names.
|
44
|
+
* @returns {string[]} - An array of DataSource names.
|
45
|
+
*/
|
28
46
|
export function getDataSourceNames() {
|
29
47
|
return Object.keys(dataSources)
|
30
48
|
}
|
31
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
|
+
*/
|
32
55
|
export function getRepository<X>(target: EntityTarget<X>): Repository<X> {
|
33
56
|
return getDataSource('default').getRepository<X>(target)
|
34
57
|
}
|
35
58
|
|
59
|
+
/**
|
60
|
+
* Initializes the database connections and data sources.
|
61
|
+
*/
|
36
62
|
export const databaseInitializer = async () => {
|
37
63
|
try {
|
38
64
|
const readConnectionConfig = config.get('ormconfig')
|
@@ -2,11 +2,35 @@ import camelCase from 'lodash/camelCase'
|
|
2
2
|
import Transport from 'winston-transport'
|
3
3
|
import { pubsub } from './pubsub'
|
4
4
|
|
5
|
+
/**
|
6
|
+
* PubSubLogTransport is a custom Winston transport that publishes log messages to a GraphQL Pub/Sub topic.
|
7
|
+
*/
|
5
8
|
export class PubSubLogTransport extends Transport {
|
9
|
+
/**
|
10
|
+
* The source object providing the log messages.
|
11
|
+
* @type {object}
|
12
|
+
*/
|
6
13
|
source: object
|
14
|
+
|
15
|
+
/**
|
16
|
+
* The Pub/Sub topic to which log messages will be published.
|
17
|
+
* @type {string}
|
18
|
+
*/
|
7
19
|
topic: string
|
20
|
+
|
21
|
+
/**
|
22
|
+
* The name of the field resolver for log messages.
|
23
|
+
* @type {string}
|
24
|
+
*/
|
8
25
|
resolver: string /* field resolver name */
|
9
26
|
|
27
|
+
/**
|
28
|
+
* Creates an instance of PubSubLogTransport.
|
29
|
+
* @param {object} opts - Options for configuring the transport.
|
30
|
+
* @param {string} opts.topic - The Pub/Sub topic to which log messages will be published.
|
31
|
+
* @param {object} opts.source - The source object providing the log messages.
|
32
|
+
* @param {string} opts.resolver - The name of the field resolver for log messages (default: derived from the topic).
|
33
|
+
*/
|
10
34
|
constructor(opts) {
|
11
35
|
super(opts)
|
12
36
|
|
@@ -15,6 +39,11 @@ export class PubSubLogTransport extends Transport {
|
|
15
39
|
this.resolver = opts.resolver || camelCase(this.topic)
|
16
40
|
}
|
17
41
|
|
42
|
+
/**
|
43
|
+
* Publishes a log message to the configured Pub/Sub topic.
|
44
|
+
* @param {object} info - The log message information.
|
45
|
+
* @param {Function} callback - The callback function to be called after publishing the message.
|
46
|
+
*/
|
18
47
|
log(info, callback) {
|
19
48
|
setImmediate(() => {
|
20
49
|
pubsub.publish(this.topic, {
|
package/server/pubsub.ts
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
/**
|
2
|
+
* @module pubsub
|
3
|
+
* @description
|
4
|
+
* This module provides a Pub/Sub (Publish/Subscribe) mechanism for handling messages and events.
|
5
|
+
* Developers can use various middleware options such as MQTT, Redis, Redis Cluster, or Kafka
|
6
|
+
* to implement Pub/Sub functionality.
|
7
|
+
*/
|
8
|
+
|
1
9
|
import { MQTTPubSub } from 'graphql-mqtt-subscriptions'
|
2
10
|
import { RedisPubSub } from 'graphql-redis-subscriptions'
|
3
11
|
import { PubSub } from 'graphql-subscriptions'
|
@@ -12,6 +20,7 @@ let pubsub: any
|
|
12
20
|
|
13
21
|
switch (middleware) {
|
14
22
|
case 'mqtt':
|
23
|
+
//@ts-ignore
|
15
24
|
pubsub = new MQTTPubSub({
|
16
25
|
client: connect('mqtt://' + host, {
|
17
26
|
reconnectPeriod: 1000,
|
@@ -29,6 +38,7 @@ switch (middleware) {
|
|
29
38
|
},
|
30
39
|
...options
|
31
40
|
}
|
41
|
+
//@ts-ignore
|
32
42
|
pubsub = new RedisPubSub({
|
33
43
|
publisher: new Redis(redisOption),
|
34
44
|
subscriber: new Redis(redisOption)
|
@@ -36,6 +46,7 @@ switch (middleware) {
|
|
36
46
|
break
|
37
47
|
case 'redisCluster':
|
38
48
|
const cluster = new Redis.Cluster(nodes, options)
|
49
|
+
//@ts-ignore
|
39
50
|
pubsub = new RedisPubSub({
|
40
51
|
publisher: cluster,
|
41
52
|
subscriber: cluster
|
@@ -65,8 +76,10 @@ switch (middleware) {
|
|
65
76
|
|
66
77
|
// kafka pubsub keeps connection and app port with 'ctrl+c' termination.
|
67
78
|
const exitHandler = async evt => {
|
79
|
+
//@ts-ignore
|
68
80
|
if (pubsub.close) {
|
69
81
|
try {
|
82
|
+
//@ts-ignore
|
70
83
|
await pubsub.close()
|
71
84
|
} catch (err) {
|
72
85
|
logger.error(err)
|
package/server/schema.ts
CHANGED
@@ -9,6 +9,10 @@ import { deepMerge } from '@things-factory/utils'
|
|
9
9
|
|
10
10
|
const path = require('path')
|
11
11
|
|
12
|
+
/**
|
13
|
+
* Generates and returns a GraphQL schema by merging schemas and resolvers from various modules.
|
14
|
+
* @returns {GraphQLSchema} The merged GraphQL schema.
|
15
|
+
*/
|
12
16
|
export async function schema() {
|
13
17
|
const schemas = orderedModuleNames
|
14
18
|
.map(dep => loader(dep).schema)
|
@@ -8,11 +8,32 @@ const KEY_LENGTH = 32
|
|
8
8
|
const SALT_LENGTH = 16
|
9
9
|
const IV_LENGTH = 16
|
10
10
|
|
11
|
+
/**
|
12
|
+
* ValueTransformer object for encrypting and decrypting database entity field values.
|
13
|
+
* Used in TypeORM entities to encrypt field values before storing them in the database
|
14
|
+
* and decrypt values when retrieving them from the database.
|
15
|
+
*/
|
11
16
|
export const encryptTransformer: ValueTransformer = {
|
17
|
+
/**
|
18
|
+
* Encrypts the entity field value before storing it in the database.
|
19
|
+
* @param {string} entityValue - Unencrypted entity field value
|
20
|
+
* @returns {string} - Encrypted string
|
21
|
+
*/
|
12
22
|
to: (entityValue: string) => encrypt(entityValue), // DB에 저장하기 전에 암호화
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Decrypts the encrypted database value when retrieving it from the database.
|
26
|
+
* @param {string} databaseValue - Encrypted database field value
|
27
|
+
* @returns {string} - Decrypted string
|
28
|
+
*/
|
13
29
|
from: (databaseValue: string) => decrypt(databaseValue) // DB에서 값을 가져올 때 복호화
|
14
30
|
}
|
15
31
|
|
32
|
+
/**
|
33
|
+
* Encrypts the given text using the AES-256-CBC algorithm.
|
34
|
+
* @param {string} text - Text to encrypt
|
35
|
+
* @returns {string} - Encrypted string
|
36
|
+
*/
|
16
37
|
function encrypt(text: string): string {
|
17
38
|
if (!text) {
|
18
39
|
return null
|
@@ -25,6 +46,11 @@ function encrypt(text: string): string {
|
|
25
46
|
return `${iv.toString('hex')}:${encrypted.toString('hex')}`
|
26
47
|
}
|
27
48
|
|
49
|
+
/**
|
50
|
+
* Decrypts the given encrypted text.
|
51
|
+
* @param {string} text - Encrypted text to decrypt
|
52
|
+
* @returns {string} - Decrypted string
|
53
|
+
*/
|
28
54
|
function decrypt(text: string): string {
|
29
55
|
if (!text) {
|
30
56
|
return null
|
@@ -1,13 +1,17 @@
|
|
1
1
|
import _ from 'lodash'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
/**
|
4
|
+
* Generates and returns a condition clause based on the provided parameters.
|
5
|
+
*
|
6
|
+
* @param alias {string} Alias or table name of the entity.
|
7
|
+
* @param fieldName {string} Field or column name.
|
8
|
+
* @param operator {string} Comparison operator.
|
9
|
+
* @param value {any} Value or an array of values to compare.
|
10
|
+
* @param relation {boolean | string} Indicates if it's a related field or the name of the relation (optional).
|
11
|
+
* @param seq {number} Integer representing the order of condition generation (internal use).
|
12
|
+
* @returns {Object} An object containing the generated condition clause and parameters.
|
13
|
+
*/
|
14
|
+
export const buildCondition = function (alias: string, fieldName: string, operator: string, value: any, relation: boolean | string, seq: number) {
|
11
15
|
seq++
|
12
16
|
|
13
17
|
fieldName = _.snakeCase(fieldName)
|