@things-factory/reference-app 5.0.14 → 5.0.16

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 (73) hide show
  1. package/Dockerfile +1 -45
  2. package/README.md +4 -0
  3. package/client/menu.js +5 -0
  4. package/client/pages/data-set/data-set-list-page.js +10 -1
  5. package/dist-server/controllers/create-data-sample-mockup.js +2 -1
  6. package/dist-server/controllers/create-data-sample-mockup.js.map +1 -1
  7. package/dist-server/service/data-sample-mockup/data-sample-mockup-mutation.js.map +1 -1
  8. package/dist-server/service/data-sample-mockup/data-sample-mockup-type.js.map +1 -1
  9. package/dist-server/service/reference/reference-mutation.js.map +1 -1
  10. package/dist-server/service/reference/reference-query.js.map +1 -1
  11. package/dist-server/tsconfig.tsbuildinfo +1 -1
  12. package/package.json +34 -33
  13. package/server/controllers/create-data-sample-mockup.ts +2 -0
  14. package/translations/ko.json +8 -1
  15. package/attachments/1aa35791-259f-42f3-9bab-faf4dc81c54a.png +0 -0
  16. package/attachments/39e79f93-f50c-4d0d-9016-12ef6fc72d04.pptx +0 -0
  17. package/attachments/5705d276-f428-44d6-a0b8-9667671fc011.png +0 -0
  18. package/attachments/5f63a469-132c-4ddd-a7a8-37d01f693c9d.png +0 -0
  19. package/attachments/69808491-8e6b-45e2-9bf8-dccea1c5b52e.png +0 -0
  20. package/attachments/6c3b55e5-8a42-4afa-a456-9f540972a4b5.png +0 -0
  21. package/attachments/7927fe8e-2246-453d-9869-7072b983437c.png +0 -0
  22. package/attachments/7d150574-01b8-4439-96a0-d57299f3ffcf.png +0 -0
  23. package/attachments/8bacec9a-bd5d-4dbf-bbcb-9f08dd7b60d5.png +0 -0
  24. package/attachments/a1cf142c-f3c2-442c-b8d5-a7f9cc6a59b3.png +0 -0
  25. package/attachments/aedcc3d7-a4ab-4ada-98bd-0db6fa5061ba.png +0 -0
  26. package/attachments/c1cd9051-bcf4-4711-89a2-63dfefbd969a.png +0 -0
  27. package/attachments/cb3ac834-ece0-4802-bef0-dfdc0fcd93bd.png +0 -0
  28. package/attachments/fb06c90b-df44-4ac7-b71c-056278439290.png +0 -0
  29. package/config.development.js +0 -21
  30. package/db.sqlite +0 -0
  31. package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +0 -20
  32. package/logs/.33a2b6820ab05dbb0f8bea4849090e12685d0b36-audit.json +0 -14
  33. package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +0 -80
  34. package/logs/application-2022-06-16-13.log +0 -4
  35. package/logs/application-2022-06-16-20.log +0 -4
  36. package/logs/application-2022-06-16-21.log +0 -7
  37. package/logs/application-2022-08-09-08.log +0 -8
  38. package/logs/application-2022-08-10-23.log +0 -5
  39. package/logs/connections-2022-01-01-00.log +0 -0
  40. package/logs/connections-2022-06-05-11.log +0 -0
  41. package/logs/connections-2022-06-08-11.log +0 -0
  42. package/logs/connections-2022-06-08-12.log +0 -0
  43. package/logs/connections-2022-06-08-13.log +0 -0
  44. package/logs/connections-2022-06-08-15.log +0 -0
  45. package/logs/connections-2022-06-08-16.log +0 -0
  46. package/logs/connections-2022-06-08-17.log +0 -0
  47. package/logs/connections-2022-06-08-18.log +0 -0
  48. package/logs/connections-2022-06-09-00.log +0 -0
  49. package/logs/connections-2022-06-10-10.log +0 -0
  50. package/logs/connections-2022-06-10-15.log +0 -0
  51. package/logs/connections-2022-06-12-17.log +0 -0
  52. package/logs/connections-2022-06-12-19.log +0 -0
  53. package/logs/connections-2022-06-16-13.log +0 -0
  54. package/logs/connections-2022-06-16-20.log +0 -0
  55. package/logs/connections-2022-06-16-21.log +0 -0
  56. package/logs/connections-2022-07-28-08.log +0 -0
  57. package/logs/connections-2022-07-28-14.log +0 -0
  58. package/logs/connections-2022-07-28-15.log +0 -0
  59. package/logs/connections-2022-07-29-07.log +0 -0
  60. package/logs/connections-2022-07-29-16.log +0 -0
  61. package/logs/connections-2022-07-29-17.log +0 -0
  62. package/logs/connections-2022-08-05-00.log +0 -0
  63. package/logs/connections-2022-08-05-01.log +0 -0
  64. package/logs/connections-2022-08-05-06.log +0 -0
  65. package/logs/connections-2022-08-05-07.log +0 -0
  66. package/logs/connections-2022-08-08-16.log +0 -0
  67. package/logs/connections-2022-08-08-17.log +0 -0
  68. package/logs/connections-2022-08-09-08.log +0 -0
  69. package/logs/connections-2022-08-10-23.log +0 -0
  70. package/logs/system/.6da447827b9a5ea2ccd1f5f28a0b784317582531-audit.json +0 -15
  71. package/logs/system/.de213bae5e079f641b78bdb917979b79dcc8e501-audit.json +0 -15
  72. package/logs/system/scenario-1-2022-04-15-16.log +0 -176
  73. package/logs/system/scenario-pubsub-2-2022-08-08-17.log +0 -36
package/Dockerfile CHANGED
@@ -1,49 +1,5 @@
1
1
  # Use an official ubuntu image
2
- FROM ubuntu:18.04
3
-
4
- # Use an official node image
5
- FROM node:14.18
6
-
7
- ARG DEBIAN_FRONTEND=noninteractive
8
-
9
- # Install the required packages
10
- RUN apt-get update -o Acquire::CompressionTypes::Order::=gz
11
- RUN apt-get upgrade -y
12
-
13
- RUN echo "deb http://ftp.de.debian.org/debian stable main" > /etc/apt/sources.list
14
-
15
- RUN apt-get update
16
-
17
- RUN apt-get install -y --no-install-recommends apt-utils
18
- RUN apt-get install -y chromium
19
- RUN apt-get install -y libcups2-dev
20
- RUN apt-get install -y libavahi-compat-libdnssd-dev
21
- RUN apt-get install -y gconf-service libasound2 libatk1.0-0 libcairo2 libcups2 libfontconfig1 libgdk-pixbuf2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libxss1 fonts-liberation libnss3 lsb-release xdg-utils libaio1
22
-
23
- RUN apt update
24
- RUN apt-get install -y ghostscript
25
- RUN apt-get install -y curl
26
- RUN apt-get install -y git
27
-
28
- # install chrome
29
- RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
30
- RUN dpkg -i google-chrome-stable_current_amd64.deb; apt-get -fy install
31
- RUN rm google-chrome-stable_current_amd64.deb
32
-
33
-
34
-
35
- # make oracle path
36
- RUN mkdir -p /opt/oracle
37
- WORKDIR /opt/oracle
38
-
39
- # download newest oracle cilent for connect to Oracle Database
40
- RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip && \
41
- unzip instantclient-basiclite-linuxx64.zip && \
42
- rm -f instantclient-basiclite-linuxx64.zip && \
43
- cd /opt/oracle/instantclient* && \
44
- rm -f *jdbc* *occi* *mysql* *mql1* *ipc1* *jar uidrvci genezi adrci && \
45
- echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf &&\
46
- ldconfig
2
+ FROM hatiolab/operato-env:16
47
3
 
48
4
  # Set the working directory to /app
49
5
  WORKDIR /app
package/README.md CHANGED
@@ -5,3 +5,7 @@
5
5
  - 파일 첨부
6
6
  - 레이아웃팅
7
7
  - 그리드 활용
8
+
9
+ ## DataSet
10
+ - DataSet 모듈을 테스트 할 수 있는 기능을 추가했다.
11
+ - 데이타 셋 조회 - 데이타 입력에서 '테스트 데이타 생성' 버튼으로 테스트 데이타를 생성할 수 있다.
package/client/menu.js CHANGED
@@ -184,6 +184,11 @@ export function getMenuTemplate() {
184
184
  icon: 'newspaper',
185
185
  name: 'Data Report',
186
186
  path: 'data-report-list'
187
+ },
188
+ {
189
+ icon: 'archive',
190
+ name: 'Data Archive',
191
+ path: 'data-archive-list'
187
192
  }
188
193
  ]
189
194
  }
@@ -86,6 +86,14 @@ const REPORT_TYPES = [
86
86
  {
87
87
  display: 'External URL',
88
88
  value: 'external'
89
+ },
90
+ {
91
+ display: 'Jasper',
92
+ value: 'jasper'
93
+ },
94
+ {
95
+ display: 'Shiny',
96
+ value: 'shiny'
89
97
  }
90
98
  ]
91
99
 
@@ -217,7 +225,7 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
217
225
  if (!record.id) return
218
226
  const popup = openPopup(html` <data-item-list .dataSet=${record}></data-item-list> `, {
219
227
  backdrop: true,
220
- help: 'data-set/ui/data-item-list',
228
+ help: 'dataset/ui/data-item-list',
221
229
  size: 'large',
222
230
  title: i18next.t('title.data-item list')
223
231
  })
@@ -598,6 +606,7 @@ export class DataSetListPage extends connect(store)(localize(i18next)(PageView))
598
606
  name
599
607
  description
600
608
  active
609
+ hidden
601
610
  tag
602
611
  type
603
612
  unit
@@ -7,6 +7,7 @@ const dataset_1 = require("@things-factory/dataset");
7
7
  const product_base_1 = require("@things-factory/product-base");
8
8
  const routing_base_1 = require("@things-factory/routing-base");
9
9
  const work_shift_1 = require("@things-factory/work-shift");
10
+ process.env.TZ = 'UTC';
10
11
  const randomWords = require('random-words');
11
12
  const fillDataKeys = (dataKeySet, data) => {
12
13
  const keys = (dataKeySet === null || dataKeySet === void 0 ? void 0 : dataKeySet.dataKeyItems) || [];
@@ -194,7 +195,7 @@ async function _generateMockupData(dataSources, tx) {
194
195
  partitionKeys = replaceVariables(partitionKeys, Object.assign({}, sample));
195
196
  const dataKeys = fillDataKeys(dataSet === null || dataSet === void 0 ? void 0 : dataSet.dataKeySet, sample);
196
197
  const { ooc, oos, judgment } = dataset_1.DataUseCase.evaluate(dataSet, dataSet.dataItems, sample) || {};
197
- const result = await tx.getRepository(dataset_1.DataSample).save(Object.assign(Object.assign({ name: dataSet.name, description: dataSet.description, useCase: dataSet.useCase, dataSet: dataSet, dataSetVersion: dataSet.version, data: sample, domain,
198
+ const result = await tx.getRepository(dataset_1.DataSample).save(Object.assign(Object.assign({ name: dataSet.name, description: dataSet.description, useCase: dataSet.useCase, type: dataSet.type, dataSet: dataSet, dataSetVersion: dataSet.version, data: sample, domain,
198
199
  partitionKeys }, dataKeys), { spec,
199
200
  ooc,
200
201
  oos,
@@ -1 +1 @@
1
- {"version":3,"file":"create-data-sample-mockup.js","sourceRoot":"","sources":["../../server/controllers/create-data-sample-mockup.ts"],"names":[],"mappings":"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","sourcesContent":["import moment from 'moment-timezone'\nimport { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { DataSample, DataSet, DataUseCase } from '@things-factory/dataset'\nimport { Product } from '@things-factory/product-base'\nimport { Operation } from '@things-factory/routing-base'\nimport { Domain } from '@things-factory/shell'\nimport { getWorkDateAndShift } from '@things-factory/work-shift'\n\nimport { DataSampleMockupInfo } from '../service/data-sample-mockup/data-sample-mockup-type'\n\nconst randomWords = require('random-words')\n\nconst fillDataKeys = (dataKeySet, data) => {\n const keys = dataKeySet?.dataKeyItems || []\n return keys.reduce((sum, key, index) => {\n const value = data[key.dataKey]\n if (value != null) {\n sum[`key0${index + 1}`] = value instanceof Array ? value[0] : value\n }\n return sum\n }, {})\n}\n\n// parse variable javascript string pattern\nconst replaceVariables = (keys, dic) => {\n for (const k in keys) {\n const matches = keys[k].match(/\\$\\{\\w*\\}/g)\n matches &&\n matches.forEach(m => {\n keys[k] = keys[k].replace(m, dic[m.slice(2, -1)])\n })\n }\n return keys\n}\n\n// It is required UTC date for Partitioning File System like AWS S3 from Athena.\n// ex) %YYYY, %MM, %DD\nconst formatDate = (keys, _moment) => {\n for (const k in keys) {\n const matches = keys[k].match(/%\\w*/g)\n matches &&\n matches.forEach(m => {\n keys[k] = keys[k].replace(m, _moment.format(m.substr(1)))\n })\n }\n return keys\n}\n\n/**\n * Normal Distribution\n * https://stackoverflow.com/questions/25582882/javascript-math-random-normal-distribution-gaussian-bell-curve\n */\nfunction normal_dist(min, max, skew) {\n let u = 0,\n v = 0\n while (u === 0) u = Math.random() //Converting [0,1) to (0,1)\n while (v === 0) v = Math.random()\n let num = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v)\n\n num = num / 10.0 + 0.5 // Translate to 0 -> 1\n if (num > 1 || num < 0) num = normal_dist(min, max, skew) // resample between 0 and 1 if out of range\n else {\n num = Math.pow(num, skew) // Skew\n num *= max - min // Stretch to fill range\n num += min // offset to min\n }\n return num\n}\n\nfunction randomIndex(max = 2) {\n return Math.floor(Math.random() * max)\n}\n\nfunction fillColumns(prev, next, dict) {\n let values = []\n try {\n const gap = 20\n const timeFormat = 'HH:mm'\n const dateFormat = 'YYYY-MM-DD'\n const atFormat = 'YYYY-MM-DD HH:mm:ss'\n const now = moment()\n const { type, spec, quota } = next\n const isValidSpec = spec && Object.keys(spec).length\n const arr = Array.from(Array(quota).keys())\n\n if (type == 'number') {\n if (isValidSpec) {\n /* generate values refer to spec info. */\n const {\n CCP: {\n criticalLimits: { minimum, maximum }\n }\n } = spec\n while (values.length < quota) {\n let value = 0\n if (typeof minimum === 'number' && typeof maximum === 'number') {\n value = Math.floor(normal_dist(minimum, maximum, 1))\n } else if (typeof minimum === 'number' && typeof maximum !== 'number') {\n const max = minimum + gap\n value = Math.floor(normal_dist(minimum, max, 1))\n } else if (typeof minimum !== 'number' && typeof maximum === 'number') {\n const min = maximum - gap\n value = Math.floor(normal_dist(min, maximum, 1))\n }\n values.push(value)\n }\n } else {\n /* random number */\n const p = Math.random()\n const q = () => randomIndex(10) + 1\n // fixed\n if (p > 0.33) {\n values = Array(quota).fill(q())\n } else if (p > 0.66) {\n /* or random */\n values = arr.map(i => q())\n } else {\n /* or incremental */\n values = arr.reduce((prev, i) => {\n prev.push(!!prev.length ? prev[0] + i : q())\n return prev\n }, [])\n }\n }\n } else if (type == 'select') {\n const options = next['options']['options']\n values = arr.map(i => options[randomIndex(options.length)]['value'])\n } else if (type == 'boolean') {\n values = arr.map(i => !!randomIndex())\n } else if (next['tag'].toLowerCase().indexOf('time') >= 0) {\n /* ex) startTime => 09:21 */\n arr.reduce(curr => {\n values.push(curr.format(timeFormat))\n curr.add(randomIndex(60), 'minutes')\n return curr\n }, now)\n } else if (next['tag'].indexOf('edAt') > 0) {\n /* ex) createdAt => '2022-06-15 09:21:30 */\n arr.reduce(curr => {\n values.push(curr.format(atFormat))\n curr.add(randomIndex(12), 'hours')\n return curr\n }, now)\n } else if (next['tag'].toLowerCase().indexOf('date') > 0) {\n /* ex) startDate => '2022-06-15 */\n arr.reduce(curr => {\n values.push(curr.format(dateFormat))\n curr.add(randomIndex(7), 'days')\n return curr\n }, now)\n } else if (dict.hasOwnProperty(next['tag'])) {\n values = Array(quota).fill(dict[next['tag']])\n } else {\n if (type == 'text') {\n values = randomWords(quota)\n }\n }\n } finally {\n prev[next['tag']] = values\n return prev\n }\n}\n\nasync function _generateMockupData(dataSources: any, tx: EntityManager) {\n const { user, domain, dataSet, spec, products, operations } = dataSources\n\n const collectedAt = new Date()\n\n const timezone = dataSet.timezone || domain.timezone || 'UTC'\n const format = 'YYYY-MM-DD'\n\n // workDate ex) 2022-04-04\n const { workDate, workShift } = await getWorkDateAndShift(domain, collectedAt, { timezone, format })\n\n // local time dataSet timezone or domain timezone or default 'UTC'\n\n // const collectedAt = dataSample.collectedAt || new Date()\n const localDateTz = moment(collectedAt).tz(timezone)\n const defaultPartitionKeys = {\n domain: domain.subdomain,\n datasetid: dataSet.id /* It should not be 'data_set_id' as column name duplicated for Glue */,\n date: localDateTz.format(format) /* local time date */,\n workdate: workDate /* working date */,\n workshift: workShift\n }\n\n var partitionKeys = {\n ...defaultPartitionKeys,\n ...dataSet.partitionKeys\n }\n\n // get product, operation as a map\n const oper = operations[Math.floor(Math.random() * operations.length)]\n const prod = products[Math.floor(Math.random() * products.length)]\n const dict = {\n operation: oper['name'],\n operationId: oper['id'],\n product: prod['name'],\n productId: prod['id']\n }\n\n const sample = dataSet.dataItems.reduce((prev, next) => fillColumns(prev, next, dict), {})\n\n partitionKeys = formatDate(partitionKeys, localDateTz)\n partitionKeys = replaceVariables(partitionKeys, {\n ...sample\n })\n\n const dataKeys = fillDataKeys(dataSet?.dataKeySet, sample)\n\n const { ooc, oos, judgment } = DataUseCase.evaluate(dataSet, dataSet.dataItems, sample) || {}\n const result = await tx.getRepository(DataSample).save({\n name: dataSet.name,\n description: dataSet.description,\n useCase: dataSet.useCase,\n dataSet: dataSet,\n dataSetVersion: dataSet.version,\n data: sample,\n domain,\n partitionKeys,\n ...dataKeys,\n spec,\n ooc,\n oos,\n judgment,\n collectedAt,\n workDate,\n workShift,\n creator: user,\n updater: user\n })\n\n return true\n}\n\nexport async function generateMockupData(\n params: DataSampleMockupInfo,\n context: {\n state: {\n domain: Domain\n user: User\n tx: EntityManager\n }\n }\n): Promise<Boolean> {\n const { domain, user, tx } = context.state\n\n const dataSet: DataSet = await tx.getRepository(DataSet).findOne({\n where: { id: params.dataSetId },\n relations: ['dataKeySet']\n })\n\n const products = await tx.getRepository(Product).find({\n select: ['id', 'name', 'description'],\n where: {\n domain\n }\n })\n\n const operations = await tx.getRepository(Operation).find({\n select: ['id', 'name', 'description'],\n where: {\n domain\n }\n })\n\n const dataItems = dataSet.dataItems\n\n const spec = dataItems.reduce((spec, dataItem) => {\n spec[dataItem.tag] = {\n ...dataItem.spec,\n name: dataItem.name /* do we need ? */,\n hidden: dataItem.hidden\n }\n\n return spec\n }, {})\n\n const promises = Array(params.numSamples)\n .fill(0)\n .map(x => {\n return _generateMockupData({ domain, user, dataSet, products, operations, spec }, tx)\n })\n\n await Promise.all(promises)\n return true\n}\n"]}
1
+ {"version":3,"file":"create-data-sample-mockup.js","sourceRoot":"","sources":["../../server/controllers/create-data-sample-mockup.ts"],"names":[],"mappings":"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","sourcesContent":["import moment from 'moment-timezone'\nimport { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { DataSample, DataSet, DataUseCase } from '@things-factory/dataset'\nimport { Product } from '@things-factory/product-base'\nimport { Operation } from '@things-factory/routing-base'\nimport { Domain } from '@things-factory/shell'\nimport { getWorkDateAndShift } from '@things-factory/work-shift'\n\nimport { DataSampleMockupInfo } from '../service/data-sample-mockup/data-sample-mockup-type'\n\nprocess.env.TZ = 'UTC'\nconst randomWords = require('random-words')\n\nconst fillDataKeys = (dataKeySet, data) => {\n const keys = dataKeySet?.dataKeyItems || []\n return keys.reduce((sum, key, index) => {\n const value = data[key.dataKey]\n if (value != null) {\n sum[`key0${index + 1}`] = value instanceof Array ? value[0] : value\n }\n return sum\n }, {})\n}\n\n// parse variable javascript string pattern\nconst replaceVariables = (keys, dic) => {\n for (const k in keys) {\n const matches = keys[k].match(/\\$\\{\\w*\\}/g)\n matches &&\n matches.forEach(m => {\n keys[k] = keys[k].replace(m, dic[m.slice(2, -1)])\n })\n }\n return keys\n}\n\n// It is required UTC date for Partitioning File System like AWS S3 from Athena.\n// ex) %YYYY, %MM, %DD\nconst formatDate = (keys, _moment) => {\n for (const k in keys) {\n const matches = keys[k].match(/%\\w*/g)\n matches &&\n matches.forEach(m => {\n keys[k] = keys[k].replace(m, _moment.format(m.substr(1)))\n })\n }\n return keys\n}\n\n/**\n * Normal Distribution\n * https://stackoverflow.com/questions/25582882/javascript-math-random-normal-distribution-gaussian-bell-curve\n */\nfunction normal_dist(min, max, skew) {\n let u = 0,\n v = 0\n while (u === 0) u = Math.random() //Converting [0,1) to (0,1)\n while (v === 0) v = Math.random()\n let num = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v)\n\n num = num / 10.0 + 0.5 // Translate to 0 -> 1\n if (num > 1 || num < 0) num = normal_dist(min, max, skew) // resample between 0 and 1 if out of range\n else {\n num = Math.pow(num, skew) // Skew\n num *= max - min // Stretch to fill range\n num += min // offset to min\n }\n return num\n}\n\nfunction randomIndex(max = 2) {\n return Math.floor(Math.random() * max)\n}\n\nfunction fillColumns(prev, next, dict) {\n let values = []\n try {\n const gap = 20\n const timeFormat = 'HH:mm'\n const dateFormat = 'YYYY-MM-DD'\n const atFormat = 'YYYY-MM-DD HH:mm:ss'\n const now = moment()\n const { type, spec, quota } = next\n const isValidSpec = spec && Object.keys(spec).length\n const arr = Array.from(Array(quota).keys())\n\n if (type == 'number') {\n if (isValidSpec) {\n /* generate values refer to spec info. */\n const {\n CCP: {\n criticalLimits: { minimum, maximum }\n }\n } = spec\n while (values.length < quota) {\n let value = 0\n if (typeof minimum === 'number' && typeof maximum === 'number') {\n value = Math.floor(normal_dist(minimum, maximum, 1))\n } else if (typeof minimum === 'number' && typeof maximum !== 'number') {\n const max = minimum + gap\n value = Math.floor(normal_dist(minimum, max, 1))\n } else if (typeof minimum !== 'number' && typeof maximum === 'number') {\n const min = maximum - gap\n value = Math.floor(normal_dist(min, maximum, 1))\n }\n values.push(value)\n }\n } else {\n /* random number */\n const p = Math.random()\n const q = () => randomIndex(10) + 1\n // fixed\n if (p > 0.33) {\n values = Array(quota).fill(q())\n } else if (p > 0.66) {\n /* or random */\n values = arr.map(i => q())\n } else {\n /* or incremental */\n values = arr.reduce((prev, i) => {\n prev.push(!!prev.length ? prev[0] + i : q())\n return prev\n }, [])\n }\n }\n } else if (type == 'select') {\n const options = next['options']['options']\n values = arr.map(i => options[randomIndex(options.length)]['value'])\n } else if (type == 'boolean') {\n values = arr.map(i => !!randomIndex())\n } else if (next['tag'].toLowerCase().indexOf('time') >= 0) {\n /* ex) startTime => 09:21 */\n arr.reduce(curr => {\n values.push(curr.format(timeFormat))\n curr.add(randomIndex(60), 'minutes')\n return curr\n }, now)\n } else if (next['tag'].indexOf('edAt') > 0) {\n /* ex) createdAt => '2022-06-15 09:21:30 */\n arr.reduce(curr => {\n values.push(curr.format(atFormat))\n curr.add(randomIndex(12), 'hours')\n return curr\n }, now)\n } else if (next['tag'].toLowerCase().indexOf('date') > 0) {\n /* ex) startDate => '2022-06-15 */\n arr.reduce(curr => {\n values.push(curr.format(dateFormat))\n curr.add(randomIndex(7), 'days')\n return curr\n }, now)\n } else if (dict.hasOwnProperty(next['tag'])) {\n values = Array(quota).fill(dict[next['tag']])\n } else {\n if (type == 'text') {\n values = randomWords(quota)\n }\n }\n } finally {\n prev[next['tag']] = values\n return prev\n }\n}\n\nasync function _generateMockupData(dataSources: any, tx: EntityManager) {\n const { user, domain, dataSet, spec, products, operations } = dataSources\n\n const collectedAt = new Date()\n\n const timezone = dataSet.timezone || domain.timezone || 'UTC'\n const format = 'YYYY-MM-DD'\n\n // workDate ex) 2022-04-04\n const { workDate, workShift } = await getWorkDateAndShift(domain, collectedAt, { timezone, format })\n\n // local time dataSet timezone or domain timezone or default 'UTC'\n\n // const collectedAt = dataSample.collectedAt || new Date()\n const localDateTz = moment(collectedAt).tz(timezone)\n const defaultPartitionKeys = {\n domain: domain.subdomain,\n datasetid: dataSet.id /* It should not be 'data_set_id' as column name duplicated for Glue */,\n date: localDateTz.format(format) /* local time date */,\n workdate: workDate /* working date */,\n workshift: workShift\n }\n\n var partitionKeys = {\n ...defaultPartitionKeys,\n ...dataSet.partitionKeys\n }\n\n // get product, operation as a map\n const oper = operations[Math.floor(Math.random() * operations.length)]\n const prod = products[Math.floor(Math.random() * products.length)]\n const dict = {\n operation: oper['name'],\n operationId: oper['id'],\n product: prod['name'],\n productId: prod['id']\n }\n\n const sample = dataSet.dataItems.reduce((prev, next) => fillColumns(prev, next, dict), {})\n\n partitionKeys = formatDate(partitionKeys, localDateTz)\n partitionKeys = replaceVariables(partitionKeys, {\n ...sample\n })\n\n const dataKeys = fillDataKeys(dataSet?.dataKeySet, sample)\n\n const { ooc, oos, judgment } = DataUseCase.evaluate(dataSet, dataSet.dataItems, sample) || {}\n const result = await tx.getRepository(DataSample).save({\n name: dataSet.name,\n description: dataSet.description,\n useCase: dataSet.useCase,\n type: dataSet.type,\n dataSet: dataSet,\n dataSetVersion: dataSet.version,\n data: sample,\n domain,\n partitionKeys,\n ...dataKeys,\n spec,\n ooc,\n oos,\n judgment,\n collectedAt,\n workDate,\n workShift,\n creator: user,\n updater: user\n })\n\n return true\n}\n\nexport async function generateMockupData(\n params: DataSampleMockupInfo,\n context: {\n state: {\n domain: Domain\n user: User\n tx: EntityManager\n }\n }\n): Promise<Boolean> {\n const { domain, user, tx } = context.state\n\n const dataSet: DataSet = await tx.getRepository(DataSet).findOne({\n where: { id: params.dataSetId },\n relations: ['dataKeySet']\n })\n\n const products = await tx.getRepository(Product).find({\n select: ['id', 'name', 'description'],\n where: {\n domain\n }\n })\n\n const operations = await tx.getRepository(Operation).find({\n select: ['id', 'name', 'description'],\n where: {\n domain\n }\n })\n\n const dataItems = dataSet.dataItems\n\n const spec = dataItems.reduce((spec, dataItem) => {\n spec[dataItem.tag] = {\n ...dataItem.spec,\n name: dataItem.name /* do we need ? */,\n hidden: dataItem.hidden\n }\n\n return spec\n }, {})\n\n const promises = Array(params.numSamples)\n .fill(0)\n .map(x => {\n return _generateMockupData({ domain, user, dataSet, products, operations, spec }, tx)\n })\n\n await Promise.all(promises)\n return true\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"data-sample-mockup-mutation.js","sourceRoot":"","sources":["../../../server/service/data-sample-mockup/data-sample-mockup-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAAsE;AAEtE,qDAAoD;AAEpD,2FAAgF;AAChF,uEAAgE;AAGhE,IAAa,wBAAwB,GAArC,MAAa,wBAAwB;IAInC,KAAK,CAAC,kBAAkB,CAAgB,MAA4B,EAAS,OAAY;QACvF,OAAO,MAAM,IAAA,8CAAkB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClD,CAAC;CACF,CAAA;AAHC;IAHC,IAAA,wBAAS,EAAC,sFAAsF,CAAC;IACjG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IACnD,mBAAA,IAAA,kBAAG,EAAC,QAAQ,CAAC,CAAA;IAAgC,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAA5B,8CAAoB;;kEAEnE;AANU,wBAAwB;IADpC,IAAA,uBAAQ,EAAC,oBAAU,CAAC;GACR,wBAAwB,CAOpC;AAPY,4DAAwB","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\n\nimport { DataSample } from '@things-factory/dataset'\n\nimport { generateMockupData } from '../../controllers/create-data-sample-mockup'\nimport { DataSampleMockupInfo } from './data-sample-mockup-type'\n\n@Resolver(DataSample)\nexport class DataSampleMockupMutation {\n @Directive('@privilege(category: \"data-sample\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To generate data sample one' })\n async generateMockupData(@Arg('params') params: DataSampleMockupInfo, @Ctx() context: any): Promise<Boolean> {\n return await generateMockupData(params, context)\n }\n}\n"]}
1
+ {"version":3,"file":"data-sample-mockup-mutation.js","sourceRoot":"","sources":["../../../server/service/data-sample-mockup/data-sample-mockup-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAAsE;AAEtE,qDAAoD;AAEpD,2FAAgF;AAChF,uEAAgE;AAGzD,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAI7B,AAAN,KAAK,CAAC,kBAAkB,CAAgB,MAA4B,EAAS,OAAY;QACvF,OAAO,MAAM,IAAA,8CAAkB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClD,CAAC;CACF,CAAA;AAHO;IAHL,IAAA,wBAAS,EAAC,sFAAsF,CAAC;IACjG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IACnD,mBAAA,IAAA,kBAAG,EAAC,QAAQ,CAAC,CAAA;IAAgC,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAA5B,8CAAoB;;kEAEnE;AANU,wBAAwB;IADpC,IAAA,uBAAQ,EAAC,oBAAU,CAAC;GACR,wBAAwB,CAOpC;AAPY,4DAAwB","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\n\nimport { DataSample } from '@things-factory/dataset'\n\nimport { generateMockupData } from '../../controllers/create-data-sample-mockup'\nimport { DataSampleMockupInfo } from './data-sample-mockup-type'\n\n@Resolver(DataSample)\nexport class DataSampleMockupMutation {\n @Directive('@privilege(category: \"data-sample\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => Boolean, { description: 'To generate data sample one' })\n async generateMockupData(@Arg('params') params: DataSampleMockupInfo, @Ctx() context: any): Promise<Boolean> {\n return await generateMockupData(params, context)\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"data-sample-mockup-type.js","sourceRoot":"","sources":["../../../server/service/data-sample-mockup/data-sample-mockup-type.ts"],"names":[],"mappings":";;;;AAAA,+CAA+C;AAG/C,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;CAMhC,CAAA;AAJC;IADC,IAAA,oBAAK,GAAE;;uDACU;AAGlB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wDACP;AALR,oBAAoB;IADhC,IAAA,wBAAS,GAAE;GACC,oBAAoB,CAMhC;AANY,oDAAoB","sourcesContent":["import { Field, InputType } from 'type-graphql'\n\n@InputType()\nexport class DataSampleMockupInfo {\n @Field()\n dataSetId?: string\n\n @Field({ nullable: true })\n numSamples?: number\n}"]}
1
+ {"version":3,"file":"data-sample-mockup-type.js","sourceRoot":"","sources":["../../../server/service/data-sample-mockup/data-sample-mockup-type.ts"],"names":[],"mappings":";;;;AAAA,+CAA+C;AAGxC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAMhC,CAAA;AALC;IAAC,IAAA,oBAAK,GAAE;;uDACU;AAElB;IAAC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wDACP;AALR,oBAAoB;IADhC,IAAA,wBAAS,GAAE;GACC,oBAAoB,CAMhC;AANY,oDAAoB","sourcesContent":["import { Field, InputType } from 'type-graphql'\n\n@InputType()\nexport class DataSampleMockupInfo {\n @Field()\n dataSetId?: string\n\n @Field({ nullable: true })\n numSamples?: number\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reference-mutation.js","sourceRoot":"","sources":["../../../server/service/reference/reference-mutation.ts"],"names":[],"mappings":";;;;AACA,+FAA2D;AAC3D,+CAAiE;AAEjE,qEAA+E;AAC/E,iDAAuD;AACvD,iDAA6C;AAG7C,IAAa,iBAAiB,GAA9B,MAAa,iBAAiB;IAE5B,KAAK,CAAC,eAAe,CACX,CAAC,EAET,KAAmB,EACZ,OAAY;QAEnB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAE9B,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,IAAG,CAAC,EAAE;YACrB,MAAM,WAAW,GAAiB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;gBACvD,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,WAAW;oBACpB,KAAK,EAAE,GAAG;oBACV,QAAQ,EAAE,WAAW;iBACf,CAAA;YACV,CAAC,CAAC,CAAA;YACF,MAAM,IAAA,mCAAiB,EAAC,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,CAAA;SACrD;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAGD,KAAK,CAAC,mBAAmB,CAAS,CAAC,EAAc,GAAW,EAAS,OAAY;QAC/E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;YAC7B,MAAM,IAAA,aAAK,EAAC,GAAG,CAAC,CAAA;YAEhB,IAAA,uBAAe,EAAC;gBACd,MAAM;gBACN,GAAG;gBACH,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,SAAS;aAC5B,CAAC,CAAA;SACH;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;CACF,CAAA;AAzCC;IADC,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAEzE,mBAAA,IAAA,mBAAI,GAAE,CAAA;IACN,mBAAA,IAAA,kBAAG,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,0BAAa,CAAC,CAAC,CAAA;IAEnC,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;wDAkBP;AAGD;IADC,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC;IAC1D,mBAAA,IAAA,mBAAI,GAAE,CAAA;IAAK,mBAAA,IAAA,kBAAG,EAAC,KAAK,CAAC,CAAA;IAAe,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;4DAenE;AA1CU,iBAAiB;IAD7B,IAAA,uBAAQ,GAAE;GACE,iBAAiB,CA2C7B;AA3CY,8CAAiB","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Arg, Ctx, Mutation, Resolver, Root } from 'type-graphql'\n\nimport { Attachment, createAttachments } from '@things-factory/attachment-base'\nimport { publishProgress } from '@things-factory/shell'\nimport { sleep } from '@things-factory/utils'\n\n@Resolver()\nexport class ReferenceMutation {\n @Mutation(returns => String, { description: 'To reference of file upload' })\n async referenceUpload(\n @Root() _,\n @Arg('files', () => [GraphQLUpload])\n files: FileUpload[],\n @Ctx() context: any\n ): Promise<string> {\n const { domain, user, tx } = context.state\n const all = Promise.all(files)\n\n if (files?.length > 0) {\n const attachments: Attachment[] = files.map(attachment => {\n return {\n file: attachment,\n refType: 'Reference',\n refBy: 100,\n category: 'Reference'\n } as any\n })\n await createAttachments(_, { attachments }, context)\n }\n\n return 'success'\n }\n\n @Mutation(returns => String, { description: 'To reference of pending job progress' })\n async referencePendingJob(@Root() _, @Arg('tag') tag: string, @Ctx() context: any): Promise<string> {\n const { domain } = context.state\n\n for (var i = 0; i <= 100; i++) {\n await sleep(100)\n\n publishProgress({\n domain,\n tag,\n progress: i,\n message: `${i * 10} / 1000`\n })\n }\n\n return 'success'\n }\n}\n"]}
1
+ {"version":3,"file":"reference-mutation.js","sourceRoot":"","sources":["../../../server/service/reference/reference-mutation.ts"],"names":[],"mappings":";;;;AACA,+FAA2D;AAC3D,+CAAiE;AAEjE,qEAA+E;AAC/E,iDAAuD;AACvD,iDAA6C;AAGtC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAEtB,AAAN,KAAK,CAAC,eAAe,CACX,CAAC,EAET,KAAmB,EACZ,OAAY;QAEnB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAE9B,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,IAAG,CAAC,EAAE;YACrB,MAAM,WAAW,GAAiB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;gBACvD,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,WAAW;oBACpB,KAAK,EAAE,GAAG;oBACV,QAAQ,EAAE,WAAW;iBACf,CAAA;YACV,CAAC,CAAC,CAAA;YACF,MAAM,IAAA,mCAAiB,EAAC,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,CAAA;SACrD;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAGK,AAAN,KAAK,CAAC,mBAAmB,CAAS,CAAC,EAAc,GAAW,EAAS,OAAY;QAC/E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;YAC7B,MAAM,IAAA,aAAK,EAAC,GAAG,CAAC,CAAA;YAEhB,IAAA,uBAAe,EAAC;gBACd,MAAM;gBACN,GAAG;gBACH,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,SAAS;aAC5B,CAAC,CAAA;SACH;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;CACF,CAAA;AAzCO;IADL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;IAEzE,mBAAA,IAAA,mBAAI,GAAE,CAAA;IACN,mBAAA,IAAA,kBAAG,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,0BAAa,CAAC,CAAC,CAAA;IAEnC,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;wDAkBP;AAGK;IADL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC;IAC1D,mBAAA,IAAA,mBAAI,GAAE,CAAA;IAAK,mBAAA,IAAA,kBAAG,EAAC,KAAK,CAAC,CAAA;IAAe,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;4DAenE;AA1CU,iBAAiB;IAD7B,IAAA,uBAAQ,GAAE;GACE,iBAAiB,CA2C7B;AA3CY,8CAAiB","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Arg, Ctx, Mutation, Resolver, Root } from 'type-graphql'\n\nimport { Attachment, createAttachments } from '@things-factory/attachment-base'\nimport { publishProgress } from '@things-factory/shell'\nimport { sleep } from '@things-factory/utils'\n\n@Resolver()\nexport class ReferenceMutation {\n @Mutation(returns => String, { description: 'To reference of file upload' })\n async referenceUpload(\n @Root() _,\n @Arg('files', () => [GraphQLUpload])\n files: FileUpload[],\n @Ctx() context: any\n ): Promise<string> {\n const { domain, user, tx } = context.state\n const all = Promise.all(files)\n\n if (files?.length > 0) {\n const attachments: Attachment[] = files.map(attachment => {\n return {\n file: attachment,\n refType: 'Reference',\n refBy: 100,\n category: 'Reference'\n } as any\n })\n await createAttachments(_, { attachments }, context)\n }\n\n return 'success'\n }\n\n @Mutation(returns => String, { description: 'To reference of pending job progress' })\n async referencePendingJob(@Root() _, @Arg('tag') tag: string, @Ctx() context: any): Promise<string> {\n const { domain } = context.state\n\n for (var i = 0; i <= 100; i++) {\n await sleep(100)\n\n publishProgress({\n domain,\n tag,\n progress: i,\n message: `${i * 10} / 1000`\n })\n }\n\n return 'success'\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reference-query.js","sourceRoot":"","sources":["../../../server/service/reference/reference-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { GraphQLScalarType } from 'graphql'\nimport type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Arg, Ctx, Query, Resolver, Root } from 'type-graphql'\n\nimport { Attachment, createAttachments } from '@things-factory/attachment-base'\nimport { publishProgress, ScalarAny } from '@things-factory/shell'\nimport { sleep } from '@things-factory/utils'\n\nimport { extractInfos } from './lambda-call'\n\n@Resolver()\nexport class ReferenceQuery {\n @Query(returns => [ScalarAny], { description: 'To reference of ocr request' })\n async ocrRequest(\n @Root() _,\n @Arg('images', () => [GraphQLUpload])\n images: FileUpload[],\n @Ctx() context: any\n ): Promise<GraphQLScalarType[]> {\n const { domain, user, tx } = context.state\n const all = Promise.all(images)\n\n if (images?.length > 0) {\n const attachments: Attachment[] = images.map(attachment => {\n return {\n file: attachment,\n refType: 'Reference',\n refBy: 100,\n category: 'Reference'\n } as any\n })\n await createAttachments(_, { attachments }, context)\n\n const files = await Promise.all(\n images.map(async file => {\n const { createReadStream, filename, mimetype } = await file\n const readStream = createReadStream()\n const image = await this.streamToString(readStream)\n // format is 'image/jpeg'\n const formatArr = mimetype.split('/')\n return { data: image, name: filename, format: formatArr[formatArr.length - 1] }\n })\n )\n const res: any = await extractInfos(files)\n console.log('interpretImages response', JSON.stringify(res, null, ' '))\n return res.data?.extractInfos\n }\n\n return []\n }\n\n streamToString(stream) {\n const chunks = []\n return new Promise((resolve, reject) => {\n stream.on('data', chunk => chunks.push(Buffer.from(chunk)))\n stream.on('error', err => reject(err))\n stream.on('end', () => resolve(Buffer.concat(chunks).toString('base64')))\n })\n }\n\n @Query(returns => String, { description: 'To reference of pending job progress' })\n async ocrPendingJob(@Root() _, @Arg('tag') tag: string, @Ctx() context: any): Promise<string> {\n const { domain } = context.state\n\n for (var i = 0; i <= 100; i++) {\n await sleep(100)\n\n publishProgress({\n domain,\n tag,\n progress: i,\n message: `${i * 10} / 1000`\n })\n }\n\n return 'success'\n }\n}\n"]}
1
+ {"version":3,"file":"reference-query.js","sourceRoot":"","sources":["../../../server/service/reference/reference-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { GraphQLScalarType } from 'graphql'\nimport type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Arg, Ctx, Query, Resolver, Root } from 'type-graphql'\n\nimport { Attachment, createAttachments } from '@things-factory/attachment-base'\nimport { publishProgress, ScalarAny } from '@things-factory/shell'\nimport { sleep } from '@things-factory/utils'\n\nimport { extractInfos } from './lambda-call'\n\n@Resolver()\nexport class ReferenceQuery {\n @Query(returns => [ScalarAny], { description: 'To reference of ocr request' })\n async ocrRequest(\n @Root() _,\n @Arg('images', () => [GraphQLUpload])\n images: FileUpload[],\n @Ctx() context: any\n ): Promise<GraphQLScalarType[]> {\n const { domain, user, tx } = context.state\n const all = Promise.all(images)\n\n if (images?.length > 0) {\n const attachments: Attachment[] = images.map(attachment => {\n return {\n file: attachment,\n refType: 'Reference',\n refBy: 100,\n category: 'Reference'\n } as any\n })\n await createAttachments(_, { attachments }, context)\n\n const files = await Promise.all(\n images.map(async file => {\n const { createReadStream, filename, mimetype } = await file\n const readStream = createReadStream()\n const image = await this.streamToString(readStream)\n // format is 'image/jpeg'\n const formatArr = mimetype.split('/')\n return { data: image, name: filename, format: formatArr[formatArr.length - 1] }\n })\n )\n const res: any = await extractInfos(files)\n console.log('interpretImages response', JSON.stringify(res, null, ' '))\n return res.data?.extractInfos\n }\n\n return []\n }\n\n streamToString(stream) {\n const chunks = []\n return new Promise((resolve, reject) => {\n stream.on('data', chunk => chunks.push(Buffer.from(chunk)))\n stream.on('error', err => reject(err))\n stream.on('end', () => resolve(Buffer.concat(chunks).toString('base64')))\n })\n }\n\n @Query(returns => String, { description: 'To reference of pending job progress' })\n async ocrPendingJob(@Root() _, @Arg('tag') tag: string, @Ctx() context: any): Promise<string> {\n const { domain } = context.state\n\n for (var i = 0; i <= 100; i++) {\n await sleep(100)\n\n publishProgress({\n domain,\n tag,\n progress: i,\n message: `${i * 10} / 1000`\n })\n }\n\n return 'success'\n }\n}\n"]}