@things-factory/board-service 9.0.0-beta.24 → 9.0.0-beta.27

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 (179) hide show
  1. package/package.json +6 -6
  2. package/dist-server/constants/error-code.d.ts +0 -2
  3. package/dist-server/constants/error-code.js +0 -6
  4. package/dist-server/constants/error-code.js.map +0 -1
  5. package/dist-server/controllers/analyzer/analyze-integration.d.ts +0 -5
  6. package/dist-server/controllers/analyzer/analyze-integration.js +0 -117
  7. package/dist-server/controllers/analyzer/analyze-integration.js.map +0 -1
  8. package/dist-server/controllers/fonts.d.ts +0 -9
  9. package/dist-server/controllers/fonts.js +0 -76
  10. package/dist-server/controllers/fonts.js.map +0 -1
  11. package/dist-server/controllers/headless-model.d.ts +0 -6
  12. package/dist-server/controllers/headless-model.js +0 -55
  13. package/dist-server/controllers/headless-model.js.map +0 -1
  14. package/dist-server/controllers/headless-pdf-to-image.d.ts +0 -12
  15. package/dist-server/controllers/headless-pdf-to-image.js +0 -106
  16. package/dist-server/controllers/headless-pdf-to-image.js.map +0 -1
  17. package/dist-server/controllers/headless-playlist.d.ts +0 -5
  18. package/dist-server/controllers/headless-playlist.js +0 -71
  19. package/dist-server/controllers/headless-playlist.js.map +0 -1
  20. package/dist-server/controllers/headless-pool-for-board.d.ts +0 -1
  21. package/dist-server/controllers/headless-pool-for-board.js +0 -64
  22. package/dist-server/controllers/headless-pool-for-board.js.map +0 -1
  23. package/dist-server/controllers/headless-pool-for-label.d.ts +0 -1
  24. package/dist-server/controllers/headless-pool-for-label.js +0 -133
  25. package/dist-server/controllers/headless-pool-for-label.js.map +0 -1
  26. package/dist-server/controllers/index.d.ts +0 -34
  27. package/dist-server/controllers/index.js +0 -14
  28. package/dist-server/controllers/index.js.map +0 -1
  29. package/dist-server/controllers/label-command.d.ts +0 -19
  30. package/dist-server/controllers/label-command.js +0 -52
  31. package/dist-server/controllers/label-command.js.map +0 -1
  32. package/dist-server/controllers/pdf.d.ts +0 -9
  33. package/dist-server/controllers/pdf.js +0 -102
  34. package/dist-server/controllers/pdf.js.map +0 -1
  35. package/dist-server/controllers/screenshot.d.ts +0 -11
  36. package/dist-server/controllers/screenshot.js +0 -101
  37. package/dist-server/controllers/screenshot.js.map +0 -1
  38. package/dist-server/controllers/thumbnail.d.ts +0 -7
  39. package/dist-server/controllers/thumbnail.js +0 -16
  40. package/dist-server/controllers/thumbnail.js.map +0 -1
  41. package/dist-server/errors/index.d.ts +0 -1
  42. package/dist-server/errors/index.js +0 -5
  43. package/dist-server/errors/index.js.map +0 -1
  44. package/dist-server/errors/license-error.d.ts +0 -11
  45. package/dist-server/errors/license-error.js +0 -18
  46. package/dist-server/errors/license-error.js.map +0 -1
  47. package/dist-server/index.d.ts +0 -5
  48. package/dist-server/index.js +0 -35
  49. package/dist-server/index.js.map +0 -1
  50. package/dist-server/migrations/1556862253000-SeedGroup.d.ts +0 -5
  51. package/dist-server/migrations/1556862253000-SeedGroup.js +0 -43
  52. package/dist-server/migrations/1556862253000-SeedGroup.js.map +0 -1
  53. package/dist-server/migrations/index.d.ts +0 -1
  54. package/dist-server/migrations/index.js +0 -12
  55. package/dist-server/migrations/index.js.map +0 -1
  56. package/dist-server/routers/internal-board-view-router.d.ts +0 -1
  57. package/dist-server/routers/internal-board-view-router.js +0 -32
  58. package/dist-server/routers/internal-board-view-router.js.map +0 -1
  59. package/dist-server/routers/standalone-board-service-router.d.ts +0 -1
  60. package/dist-server/routers/standalone-board-service-router.js +0 -250
  61. package/dist-server/routers/standalone-board-service-router.js.map +0 -1
  62. package/dist-server/routes.d.ts +0 -1
  63. package/dist-server/routes.js +0 -23
  64. package/dist-server/routes.js.map +0 -1
  65. package/dist-server/service/analysis/analysis-query.d.ts +0 -3
  66. package/dist-server/service/analysis/analysis-query.js +0 -25
  67. package/dist-server/service/analysis/analysis-query.js.map +0 -1
  68. package/dist-server/service/analysis/index.d.ts +0 -2
  69. package/dist-server/service/analysis/index.js +0 -6
  70. package/dist-server/service/analysis/index.js.map +0 -1
  71. package/dist-server/service/board/board-history.d.ts +0 -28
  72. package/dist-server/service/board/board-history.js +0 -155
  73. package/dist-server/service/board/board-history.js.map +0 -1
  74. package/dist-server/service/board/board-mutation.d.ts +0 -12
  75. package/dist-server/service/board/board-mutation.js +0 -377
  76. package/dist-server/service/board/board-mutation.js.map +0 -1
  77. package/dist-server/service/board/board-query.d.ts +0 -20
  78. package/dist-server/service/board/board-query.js +0 -220
  79. package/dist-server/service/board/board-query.js.map +0 -1
  80. package/dist-server/service/board/board-subscription.d.ts +0 -6
  81. package/dist-server/service/board/board-subscription.js +0 -49
  82. package/dist-server/service/board/board-subscription.js.map +0 -1
  83. package/dist-server/service/board/board-type.d.ts +0 -24
  84. package/dist-server/service/board/board-type.js +0 -88
  85. package/dist-server/service/board/board-type.js.map +0 -1
  86. package/dist-server/service/board/board.d.ts +0 -25
  87. package/dist-server/service/board/board.js +0 -140
  88. package/dist-server/service/board/board.js.map +0 -1
  89. package/dist-server/service/board/event-subscriber.d.ts +0 -15
  90. package/dist-server/service/board/event-subscriber.js +0 -63
  91. package/dist-server/service/board/event-subscriber.js.map +0 -1
  92. package/dist-server/service/board/index.d.ts +0 -9
  93. package/dist-server/service/board/index.js +0 -13
  94. package/dist-server/service/board/index.js.map +0 -1
  95. package/dist-server/service/board-favorite/board-favorite-query.d.ts +0 -5
  96. package/dist-server/service/board-favorite/board-favorite-query.js +0 -56
  97. package/dist-server/service/board-favorite/board-favorite-query.js.map +0 -1
  98. package/dist-server/service/board-favorite/board-favorite-type.d.ts +0 -8
  99. package/dist-server/service/board-favorite/board-favorite-type.js +0 -31
  100. package/dist-server/service/board-favorite/board-favorite-type.js.map +0 -1
  101. package/dist-server/service/board-favorite/index.d.ts +0 -3
  102. package/dist-server/service/board-favorite/index.js +0 -7
  103. package/dist-server/service/board-favorite/index.js.map +0 -1
  104. package/dist-server/service/board-template/board-template-mutation.d.ts +0 -8
  105. package/dist-server/service/board-template/board-template-mutation.js +0 -146
  106. package/dist-server/service/board-template/board-template-mutation.js.map +0 -1
  107. package/dist-server/service/board-template/board-template-query.d.ts +0 -13
  108. package/dist-server/service/board-template/board-template-query.js +0 -147
  109. package/dist-server/service/board-template/board-template-query.js.map +0 -1
  110. package/dist-server/service/board-template/board-template-type.d.ts +0 -21
  111. package/dist-server/service/board-template/board-template-type.js +0 -81
  112. package/dist-server/service/board-template/board-template-type.js.map +0 -1
  113. package/dist-server/service/board-template/board-template.d.ts +0 -23
  114. package/dist-server/service/board-template/board-template.js +0 -123
  115. package/dist-server/service/board-template/board-template.js.map +0 -1
  116. package/dist-server/service/board-template/index.d.ts +0 -6
  117. package/dist-server/service/board-template/index.js +0 -10
  118. package/dist-server/service/board-template/index.js.map +0 -1
  119. package/dist-server/service/group/group-mutation.d.ts +0 -8
  120. package/dist-server/service/group/group-mutation.js +0 -89
  121. package/dist-server/service/group/group-mutation.js.map +0 -1
  122. package/dist-server/service/group/group-query.d.ts +0 -13
  123. package/dist-server/service/group/group-query.js +0 -92
  124. package/dist-server/service/group/group-query.js.map +0 -1
  125. package/dist-server/service/group/group-type.d.ts +0 -13
  126. package/dist-server/service/group/group-type.js +0 -49
  127. package/dist-server/service/group/group-type.js.map +0 -1
  128. package/dist-server/service/group/group.d.ts +0 -17
  129. package/dist-server/service/group/group.js +0 -77
  130. package/dist-server/service/group/group.js.map +0 -1
  131. package/dist-server/service/group/index.d.ts +0 -5
  132. package/dist-server/service/group/index.js +0 -9
  133. package/dist-server/service/group/index.js.map +0 -1
  134. package/dist-server/service/index.d.ts +0 -10
  135. package/dist-server/service/index.js +0 -49
  136. package/dist-server/service/index.js.map +0 -1
  137. package/dist-server/service/permission/domain-permission-subscriber.d.ts +0 -9
  138. package/dist-server/service/permission/domain-permission-subscriber.js +0 -30
  139. package/dist-server/service/permission/domain-permission-subscriber.js.map +0 -1
  140. package/dist-server/service/permission/index.d.ts +0 -2
  141. package/dist-server/service/permission/index.js +0 -6
  142. package/dist-server/service/permission/index.js.map +0 -1
  143. package/dist-server/service/play-group/event-subscriber.d.ts +0 -6
  144. package/dist-server/service/play-group/event-subscriber.js +0 -58
  145. package/dist-server/service/play-group/event-subscriber.js.map +0 -1
  146. package/dist-server/service/play-group/index.d.ts +0 -8
  147. package/dist-server/service/play-group/index.js +0 -12
  148. package/dist-server/service/play-group/index.js.map +0 -1
  149. package/dist-server/service/play-group/play-group-mutation.d.ts +0 -10
  150. package/dist-server/service/play-group/play-group-mutation.js +0 -146
  151. package/dist-server/service/play-group/play-group-mutation.js.map +0 -1
  152. package/dist-server/service/play-group/play-group-query.d.ts +0 -14
  153. package/dist-server/service/play-group/play-group-query.js +0 -129
  154. package/dist-server/service/play-group/play-group-query.js.map +0 -1
  155. package/dist-server/service/play-group/play-group-subscription.d.ts +0 -6
  156. package/dist-server/service/play-group/play-group-subscription.js +0 -49
  157. package/dist-server/service/play-group/play-group-subscription.js.map +0 -1
  158. package/dist-server/service/play-group/play-group-type.d.ts +0 -13
  159. package/dist-server/service/play-group/play-group-type.js +0 -49
  160. package/dist-server/service/play-group/play-group-type.js.map +0 -1
  161. package/dist-server/service/play-group/play-group.d.ts +0 -18
  162. package/dist-server/service/play-group/play-group.js +0 -82
  163. package/dist-server/service/play-group/play-group.js.map +0 -1
  164. package/dist-server/service/theme/index.d.ts +0 -6
  165. package/dist-server/service/theme/index.js +0 -10
  166. package/dist-server/service/theme/index.js.map +0 -1
  167. package/dist-server/service/theme/theme-mutation.d.ts +0 -10
  168. package/dist-server/service/theme/theme-mutation.js +0 -125
  169. package/dist-server/service/theme/theme-mutation.js.map +0 -1
  170. package/dist-server/service/theme/theme-query.d.ts +0 -11
  171. package/dist-server/service/theme/theme-query.js +0 -79
  172. package/dist-server/service/theme/theme-query.js.map +0 -1
  173. package/dist-server/service/theme/theme-type.d.ts +0 -21
  174. package/dist-server/service/theme/theme-type.js +0 -82
  175. package/dist-server/service/theme/theme-type.js.map +0 -1
  176. package/dist-server/service/theme/theme.d.ts +0 -25
  177. package/dist-server/service/theme/theme.js +0 -101
  178. package/dist-server/service/theme/theme.js.map +0 -1
  179. package/dist-server/tsconfig.tsbuildinfo +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/board-service",
3
- "version": "9.0.0-beta.24",
3
+ "version": "9.0.0-beta.27",
4
4
  "main": "dist-server/index.js",
5
5
  "things-factory": true,
6
6
  "author": "",
@@ -23,15 +23,15 @@
23
23
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create ./server/migrations/migration"
24
24
  },
25
25
  "dependencies": {
26
- "@things-factory/auth-base": "^9.0.0-beta.24",
26
+ "@things-factory/auth-base": "^9.0.0-beta.25",
27
27
  "@things-factory/env": "^9.0.0-beta.19",
28
- "@things-factory/fav-base": "^9.0.0-beta.24",
29
- "@things-factory/font-base": "^9.0.0-beta.24",
30
- "@things-factory/integration-base": "^9.0.0-beta.24",
28
+ "@things-factory/fav-base": "^9.0.0-beta.25",
29
+ "@things-factory/font-base": "^9.0.0-beta.25",
30
+ "@things-factory/integration-base": "^9.0.0-beta.27",
31
31
  "@things-factory/operato-license-checker": "^4.0.4",
32
32
  "content-disposition": "^0.5.3",
33
33
  "generic-pool": "^3.8.2",
34
34
  "puppeteer": "^23.0.0"
35
35
  },
36
- "gitHead": "b86b4a0b6a8355b33d8729fb7908ed33d6751ec2"
36
+ "gitHead": "3038f56087036b06717f8e4910383c6b1320218d"
37
37
  }
@@ -1,2 +0,0 @@
1
- export declare const VERIFICATION_ERROR = "error.license token not valid";
2
- export declare const OVER_LIMIT = "error.count over license limit";
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OVER_LIMIT = exports.VERIFICATION_ERROR = void 0;
4
- exports.VERIFICATION_ERROR = 'error.license token not valid';
5
- exports.OVER_LIMIT = 'error.count over license limit';
6
- //# sourceMappingURL=error-code.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-code.js","sourceRoot":"","sources":["../../server/constants/error-code.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG,+BAA+B,CAAA;AACpD,QAAA,UAAU,GAAG,gCAAgC,CAAA","sourcesContent":["export const VERIFICATION_ERROR = 'error.license token not valid'\nexport const OVER_LIMIT = 'error.count over license limit'\n"]}
@@ -1,5 +0,0 @@
1
- import { Domain } from '@things-factory/shell';
2
- export declare function analyzeBoardIntegration(domain: Domain): Promise<{
3
- nodes: any[];
4
- relationships: any[];
5
- }>;
@@ -1,117 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyzeBoardIntegration = analyzeBoardIntegration;
4
- const tslib_1 = require("tslib");
5
- const uniq_1 = tslib_1.__importDefault(require("lodash/uniq"));
6
- const shell_1 = require("@things-factory/shell");
7
- const integration_base_1 = require("@things-factory/integration-base");
8
- const board_js_1 = require("../../service/board/board.js");
9
- function findObjectsWithCondition(container, condition) {
10
- let result = [];
11
- if (condition(container)) {
12
- result.push(container);
13
- }
14
- if (container.components) {
15
- for (const component of container.components) {
16
- result = result.concat(findObjectsWithCondition(component, condition));
17
- }
18
- }
19
- return result;
20
- }
21
- function getRelationsInBoard(board) {
22
- try {
23
- const model = JSON.parse(board.model) || {};
24
- const scenarioNames = findObjectsWithCondition(model, component => component.scenarioName).map(component => component.scenarioName);
25
- const tags = findObjectsWithCondition(model, component => component.tag).map(component => component.tag);
26
- return {
27
- scenarioNames: (0, uniq_1.default)(scenarioNames.filter(Boolean)),
28
- tags: (0, uniq_1.default)(tags.filter(Boolean))
29
- };
30
- }
31
- catch (err) {
32
- console.error('analyze-integration::getRelationsInBoard error', err);
33
- return {
34
- scenarioNames: [],
35
- tags: []
36
- };
37
- }
38
- }
39
- async function analyzeBoardIntegration(domain) {
40
- const model = await (0, integration_base_1.analyzeIntegration)(domain);
41
- var id = 0;
42
- const boards = await (0, shell_1.getRepository)(board_js_1.Board).find({
43
- where: { domain: { id: domain.id } }
44
- });
45
- model.nodes = model.nodes.concat(boards.map(board => {
46
- return {
47
- id: board.id,
48
- labels: ['Board'],
49
- text: board.name,
50
- icon: 'dashboard',
51
- properties: {
52
- name: board.name,
53
- description: board.description
54
- }
55
- };
56
- }));
57
- boards.forEach(board => {
58
- const { scenarioNames, tags } = getRelationsInBoard(board);
59
- var scenarioNodes = scenarioNames.map(name => model.nodes.find(node => { var _a; return node.labels.includes('Scenario') && ((_a = node.properties) === null || _a === void 0 ? void 0 : _a.name) == name; }));
60
- var tagNodes = tags.map(tag => model.nodes.find(node => { var _a; return node.labels.includes('Tag') && ((_a = node.properties) === null || _a === void 0 ? void 0 : _a.tag) == tag; }));
61
- const missingScenarioNodes = scenarioNodes
62
- .filter(node => !node)
63
- .map((_, i) => scenarioNames[i])
64
- .map(missingScenario => {
65
- return {
66
- id: `missing-scenario-${missingScenario}`,
67
- labels: ['Scenario'],
68
- text: missingScenario,
69
- icon: 'settings',
70
- properties: {
71
- name: missingScenario,
72
- missing: true
73
- }
74
- };
75
- });
76
- model.nodes = model.nodes.concat(missingScenarioNodes);
77
- const missingTagNodes = tagNodes
78
- .filter(node => !node)
79
- .map((_, i) => tags[i])
80
- .map(missingTag => {
81
- return {
82
- id: `missing-tag-${missingTag}`,
83
- labels: ['Tag'],
84
- text: missingTag,
85
- icon: 'label',
86
- properties: {
87
- name: missingTag,
88
- missing: true
89
- }
90
- };
91
- });
92
- model.nodes = model.nodes.concat(missingTagNodes);
93
- tagNodes.filter(node => !node).map((_, i) => tags[i]);
94
- var relationships = [...scenarioNodes.filter(Boolean), ...missingScenarioNodes].map(node => {
95
- return {
96
- id: `bsce-${++id}`,
97
- type: 'call',
98
- startNode: board.id,
99
- endNode: node.id,
100
- properties: {}
101
- };
102
- });
103
- model.relationships = model.relationships.concat(relationships);
104
- relationships = [...tagNodes.filter(Boolean), ...missingTagNodes].map(node => {
105
- return {
106
- id: `btag-${++id}`,
107
- type: 'subscribe',
108
- startNode: board.id,
109
- endNode: node.id,
110
- properties: {}
111
- };
112
- });
113
- model.relationships = model.relationships.concat(relationships);
114
- });
115
- return model;
116
- }
117
- //# sourceMappingURL=analyze-integration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze-integration.js","sourceRoot":"","sources":["../../../server/controllers/analyzer/analyze-integration.ts"],"names":[],"mappings":"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","sourcesContent":["import uniq from 'lodash/uniq'\n\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { analyzeIntegration } from '@things-factory/integration-base'\nimport { Board } from '../../service/board/board.js'\n\nfunction findObjectsWithCondition(container, condition: (component: any) => boolean) {\n let result = []\n\n if (condition(container)) {\n result.push(container)\n }\n\n if (container.components) {\n for (const component of container.components) {\n result = result.concat(findObjectsWithCondition(component, condition))\n }\n }\n\n return result\n}\n\nfunction getRelationsInBoard(board: Board) {\n try {\n const model = JSON.parse(board.model) || {}\n\n const scenarioNames = findObjectsWithCondition(model, component => component.scenarioName).map(\n component => component.scenarioName\n )\n\n const tags = findObjectsWithCondition(model, component => component.tag).map(component => component.tag)\n\n return {\n scenarioNames: uniq(scenarioNames.filter(Boolean)),\n tags: uniq(tags.filter(Boolean))\n }\n } catch (err) {\n console.error('analyze-integration::getRelationsInBoard error', err)\n return {\n scenarioNames: [],\n tags: []\n }\n }\n}\n\nexport async function analyzeBoardIntegration(domain: Domain) {\n const model = await analyzeIntegration(domain)\n\n var id = 0\n\n const boards = await getRepository(Board).find({\n where: { domain: { id: domain.id } }\n })\n\n model.nodes = model.nodes.concat(\n boards.map(board => {\n return {\n id: board.id,\n labels: ['Board'],\n text: board.name,\n icon: 'dashboard',\n properties: {\n name: board.name,\n description: board.description\n }\n }\n })\n )\n\n boards.forEach(board => {\n const { scenarioNames, tags } = getRelationsInBoard(board)\n\n var scenarioNodes = scenarioNames.map(name =>\n model.nodes.find(node => node.labels.includes('Scenario') && node.properties?.name == name)\n )\n var tagNodes = tags.map(tag => model.nodes.find(node => node.labels.includes('Tag') && node.properties?.tag == tag))\n\n const missingScenarioNodes = scenarioNodes\n .filter(node => !node)\n .map((_, i) => scenarioNames[i])\n .map(missingScenario => {\n return {\n id: `missing-scenario-${missingScenario}`,\n labels: ['Scenario'],\n text: missingScenario,\n icon: 'settings',\n properties: {\n name: missingScenario,\n missing: true\n }\n }\n })\n\n model.nodes = model.nodes.concat(missingScenarioNodes)\n\n const missingTagNodes = tagNodes\n .filter(node => !node)\n .map((_, i) => tags[i])\n .map(missingTag => {\n return {\n id: `missing-tag-${missingTag}`,\n labels: ['Tag'],\n text: missingTag,\n icon: 'label',\n properties: {\n name: missingTag,\n missing: true\n }\n }\n })\n\n model.nodes = model.nodes.concat(missingTagNodes)\n\n tagNodes.filter(node => !node).map((_, i) => tags[i])\n\n var relationships = [...scenarioNodes.filter(Boolean), ...missingScenarioNodes].map(node => {\n return {\n id: `bsce-${++id}`,\n type: 'call',\n startNode: board.id,\n endNode: node.id,\n properties: {}\n }\n })\n\n model.relationships = model.relationships.concat(relationships)\n\n relationships = [...tagNodes.filter(Boolean), ...missingTagNodes].map(node => {\n return {\n id: `btag-${++id}`,\n type: 'subscribe',\n startNode: board.id,\n endNode: node.id,\n properties: {}\n }\n })\n\n model.relationships = model.relationships.concat(relationships)\n })\n\n return model\n}\n"]}
@@ -1,9 +0,0 @@
1
- import { Domain } from '@things-factory/shell';
2
- export declare const fonts: (domain?: Domain) => Promise<(string | {
3
- custom: {
4
- families: any[];
5
- };
6
- google: {
7
- families: any[];
8
- };
9
- })[]>;
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fonts = void 0;
4
- const font_base_1 = require("@things-factory/font-base");
5
- const attachment_base_1 = require("@things-factory/attachment-base");
6
- const shell_1 = require("@things-factory/shell");
7
- const fonts = async (domain) => {
8
- const qb = await (0, shell_1.getRepository)(font_base_1.Font).createQueryBuilder('FONT');
9
- var fonts = domain
10
- ? await qb
11
- .select('FONT.name', 'name')
12
- .distinct(true)
13
- .addSelect('FONT.provider', 'provider')
14
- .addSelect('FONT.id', 'id')
15
- .addSelect('FONT.uri', 'uri')
16
- .where({ domain: { id: domain.id }, active: true })
17
- .getRawMany()
18
- : await qb
19
- .select('FONT.name', 'name')
20
- .distinct(true)
21
- .addSelect('FONT.provider', 'provider')
22
- .addSelect('FONT.id', 'id')
23
- .addSelect('FONT.uri', 'uri')
24
- .where({ active: true })
25
- .getRawMany();
26
- var googleFonts = fonts.filter(({ provider }) => provider == 'google');
27
- var customFonts = fonts.filter(({ provider }) => provider == 'custom');
28
- var customFontCSS = '';
29
- for (const font of customFonts) {
30
- var files = domain
31
- ? await (0, shell_1.getRepository)(attachment_base_1.Attachment).findBy({
32
- domain: { id: domain.id },
33
- refBy: font.id
34
- })
35
- : await (0, shell_1.getRepository)(attachment_base_1.Attachment).findBy({
36
- refBy: font.id
37
- });
38
- if (files && files.length > 0) {
39
- customFontCSS += files
40
- .map(file => {
41
- const { name: filename, fullpath } = file;
42
- const bold = filename.toUpperCase().indexOf('BOLD') !== -1;
43
- return `@font-face {
44
- font-family: '${font.name}';
45
- src: local('${font.name}'), url(${fullpath});
46
- font-weight: ${bold ? 'bold' : 'normal'};
47
- }
48
- `;
49
- })
50
- .join('\n');
51
- }
52
- else {
53
- customFontCSS += `@font-face {
54
- font-family: '${font.name}';
55
- src: local('${font.name}')${font.uri ? `, url(${font.uri})` : ''};
56
- }
57
- `;
58
- }
59
- }
60
- return googleFonts.length > 0 || customFonts.length > 0
61
- ? [
62
- Object.assign(Object.assign({}, (googleFonts.length > 0 && {
63
- google: {
64
- families: googleFonts.map(({ name }) => name)
65
- }
66
- })), (customFonts.length > 0 && {
67
- custom: {
68
- families: customFonts.map(({ name }) => name)
69
- }
70
- })),
71
- customFonts.length > 0 ? customFontCSS : null
72
- ]
73
- : [];
74
- };
75
- exports.fonts = fonts;
76
- //# sourceMappingURL=fonts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../server/controllers/fonts.ts"],"names":[],"mappings":";;;AAEA,yDAAgD;AAChD,qEAA4D;AAC5D,iDAA6D;AAEtD,MAAM,KAAK,GAAG,KAAK,EAAE,MAAe,EAAE,EAAE;IAC7C,MAAM,EAAE,GAA6B,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAEzF,IAAI,KAAK,GAAG,MAAM;QAChB,CAAC,CAAC,MAAM,EAAE;aACL,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;aAC3B,QAAQ,CAAC,IAAI,CAAC;aACd,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC;aACtC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC;aAC1B,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC;aAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aAClD,UAAU,EAAE;QACjB,CAAC,CAAC,MAAM,EAAE;aACL,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;aAC3B,QAAQ,CAAC,IAAI,CAAC;aACd,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC;aACtC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC;aAC1B,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC;aAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aACvB,UAAU,EAAE,CAAA;IAEnB,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAA;IACtE,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAA;IAEtE,IAAI,aAAa,GAAW,EAAE,CAAA;IAE9B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAiB,MAAM;YAC9B,CAAC,CAAC,MAAM,IAAA,qBAAa,EAAC,4BAAU,CAAC,CAAC,MAAM,CAAC;gBACrC,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;gBACzB,KAAK,EAAE,IAAI,CAAC,EAAE;aACf,CAAC;YACJ,CAAC,CAAC,MAAM,IAAA,qBAAa,EAAC,4BAAU,CAAC,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,IAAI,CAAC,EAAE;aACf,CAAC,CAAA;QAEN,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,aAAa,IAAI,KAAK;iBACnB,GAAG,CAAC,IAAI,CAAC,EAAE;gBACV,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;gBACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBAE1D,OAAO;4BACW,IAAI,CAAC,IAAI;0BACX,IAAI,CAAC,IAAI,WAAW,QAAQ;2BAC3B,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;;WAExC,CAAA;YACH,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,CAAC;aAAM,CAAC;YACN,aAAa,IAAI;0BACG,IAAI,CAAC,IAAI;wBACX,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;;SAEjE,CAAA;QACL,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QACrD,CAAC,CAAC;4CAEO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI;gBAC5B,MAAM,EAAE;oBACN,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;iBAC9C;aACF,CAAC,GACC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI;gBAC5B,MAAM,EAAE;oBACN,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;iBAC9C;aACF,CAAC;YAEJ,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;SAC9C;QACH,CAAC,CAAC,EAAE,CAAA;AACR,CAAC,CAAA;AA5EY,QAAA,KAAK,SA4EjB","sourcesContent":["import { SelectQueryBuilder } from 'typeorm'\n\nimport { Font } from '@things-factory/font-base'\nimport { Attachment } from '@things-factory/attachment-base'\nimport { getRepository, Domain } from '@things-factory/shell'\n\nexport const fonts = async (domain?: Domain) => {\n const qb: SelectQueryBuilder<Font> = await getRepository(Font).createQueryBuilder('FONT')\n\n var fonts = domain\n ? await qb\n .select('FONT.name', 'name')\n .distinct(true)\n .addSelect('FONT.provider', 'provider')\n .addSelect('FONT.id', 'id')\n .addSelect('FONT.uri', 'uri')\n .where({ domain: { id: domain.id }, active: true })\n .getRawMany()\n : await qb\n .select('FONT.name', 'name')\n .distinct(true)\n .addSelect('FONT.provider', 'provider')\n .addSelect('FONT.id', 'id')\n .addSelect('FONT.uri', 'uri')\n .where({ active: true })\n .getRawMany()\n\n var googleFonts = fonts.filter(({ provider }) => provider == 'google')\n var customFonts = fonts.filter(({ provider }) => provider == 'custom')\n\n var customFontCSS: string = ''\n\n for (const font of customFonts) {\n var files: Attachment[] = domain\n ? await getRepository(Attachment).findBy({\n domain: { id: domain.id },\n refBy: font.id\n })\n : await getRepository(Attachment).findBy({\n refBy: font.id\n })\n\n if (files && files.length > 0) {\n customFontCSS += files\n .map(file => {\n const { name: filename, fullpath } = file\n const bold = filename.toUpperCase().indexOf('BOLD') !== -1\n\n return `@font-face {\n font-family: '${font.name}';\n src: local('${font.name}'), url(${fullpath});\n font-weight: ${bold ? 'bold' : 'normal'};\n }\n `\n })\n .join('\\n')\n } else {\n customFontCSS += `@font-face {\n font-family: '${font.name}';\n src: local('${font.name}')${font.uri ? `, url(${font.uri})` : ''};\n }\n `\n }\n }\n\n return googleFonts.length > 0 || customFonts.length > 0\n ? [\n {\n ...(googleFonts.length > 0 && {\n google: {\n families: googleFonts.map(({ name }) => name)\n }\n }),\n ...(customFonts.length > 0 && {\n custom: {\n families: customFonts.map(({ name }) => name)\n }\n })\n },\n customFonts.length > 0 ? customFontCSS : null\n ]\n : []\n}\n"]}
@@ -1,6 +0,0 @@
1
- import { Board } from '../service/board/board.js';
2
- export declare const headlessModel: (target: any, draft?: boolean) => Promise<{
3
- base: string;
4
- model: any;
5
- board: Board;
6
- }>;
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.headlessModel = void 0;
4
- const typeorm_1 = require("typeorm");
5
- const shell_1 = require("@things-factory/shell");
6
- const board_js_1 = require("../service/board/board.js");
7
- const board_history_js_1 = require("../service/board/board-history.js");
8
- const headlessModel = async (target, draft = false) => {
9
- var { domain, id, model, name } = target || {};
10
- if (model) {
11
- if (typeof model == 'string') {
12
- model = JSON.parse(model);
13
- }
14
- else if (typeof model !== 'object') {
15
- throw 'model should be a string or object';
16
- }
17
- }
18
- else {
19
- if (id) {
20
- var board = await (0, shell_1.getRepository)(board_js_1.Board).findOne({
21
- where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, id }
22
- });
23
- }
24
- else if (name) {
25
- var board = await (0, shell_1.getRepository)(board_js_1.Board).findOne({
26
- where: { domain: { id: (0, typeorm_1.In)([domain.id, domain.parentId].filter(Boolean)) }, name }
27
- });
28
- }
29
- else {
30
- throw 'parameter model or id mandatory';
31
- }
32
- if (!draft && board) {
33
- const latestReleased = board.state == 'released'
34
- ? board
35
- : await (0, shell_1.getRepository)(board_history_js_1.BoardHistory)
36
- .createQueryBuilder('history')
37
- .where('history.originalId = :originalId', { originalId: board.id })
38
- .orderBy('history.version', 'DESC')
39
- .limit(1)
40
- .getOne();
41
- model = (latestReleased || board).model;
42
- }
43
- else {
44
- model = board.model;
45
- }
46
- model = JSON.parse(model);
47
- }
48
- return {
49
- base: (0, shell_1.getContextPath)(domain),
50
- model,
51
- board
52
- };
53
- };
54
- exports.headlessModel = headlessModel;
55
- //# sourceMappingURL=headless-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"headless-model.js","sourceRoot":"","sources":["../../server/controllers/headless-model.ts"],"names":[],"mappings":";;;AAAA,qCAA4B;AAC5B,iDAAqE;AAErE,wDAAiD;AACjD,wEAAgE;AAEzD,MAAM,aAAa,GAAG,KAAK,EAAE,MAAM,EAAE,QAAiB,KAAK,EAAE,EAAE;IACpE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAE9C,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,oCAAoC,CAAA;QAC5C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,gBAAK,CAAC,CAAC,OAAO,CAAC;gBAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;aAChF,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,IAAI,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,gBAAK,CAAC,CAAC,OAAO,CAAC;gBAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE;aAClF,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,iCAAiC,CAAA;QACzC,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC;YACpB,MAAM,cAAc,GAClB,KAAK,CAAC,KAAK,IAAI,UAAU;gBACvB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,MAAM,IAAA,qBAAa,EAAC,+BAAY,CAAC;qBAC9B,kBAAkB,CAAC,SAAS,CAAC;qBAC7B,KAAK,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;qBACnE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC;qBAClC,KAAK,CAAC,CAAC,CAAC;qBACR,MAAM,EAAE,CAAA;YAEjB,KAAK,GAAG,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC,KAAK,CAAA;QACzC,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACrB,CAAC;QAED,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAA,sBAAc,EAAC,MAAM,CAAC;QAC5B,KAAK;QACL,KAAK;KACN,CAAA;AACH,CAAC,CAAA;AA9CY,QAAA,aAAa,iBA8CzB","sourcesContent":["import { In } from 'typeorm'\nimport { getContextPath, getRepository } from '@things-factory/shell'\n\nimport { Board } from '../service/board/board.js'\nimport { BoardHistory } from '../service/board/board-history.js'\n\nexport const headlessModel = async (target, draft: boolean = false) => {\n var { domain, id, model, name } = target || {}\n\n if (model) {\n if (typeof model == 'string') {\n model = JSON.parse(model)\n } else if (typeof model !== 'object') {\n throw 'model should be a string or object'\n }\n } else {\n if (id) {\n var board = await getRepository(Board).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, id }\n })\n } else if (name) {\n var board = await getRepository(Board).findOne({\n where: { domain: { id: In([domain.id, domain.parentId].filter(Boolean)) }, name }\n })\n } else {\n throw 'parameter model or id mandatory'\n }\n\n if (!draft && board) {\n const latestReleased =\n board.state == 'released'\n ? board\n : await getRepository(BoardHistory)\n .createQueryBuilder('history')\n .where('history.originalId = :originalId', { originalId: board.id })\n .orderBy('history.version', 'DESC')\n .limit(1)\n .getOne()\n\n model = (latestReleased || board).model\n } else {\n model = board.model\n }\n\n model = JSON.parse(model)\n }\n\n return {\n base: getContextPath(domain),\n model,\n board\n }\n}\n"]}
@@ -1,12 +0,0 @@
1
- export declare const pdfToImage: ({ pdfPath, fileName, extension, quality, defaultViewport }: {
2
- pdfPath: any;
3
- fileName: any;
4
- extension?: string;
5
- quality?: number;
6
- defaultViewport?: any;
7
- }) => Promise<{
8
- filename: string;
9
- mimetype: string;
10
- encoding: string;
11
- createReadStream: () => any;
12
- }>;
@@ -1,106 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pdfToImage = void 0;
4
- const tslib_1 = require("tslib");
5
- const crypto_1 = tslib_1.__importDefault(require("crypto"));
6
- const puppeteer = require('puppeteer');
7
- const { Readable } = require('stream');
8
- const ejs = require('ejs');
9
- const pdfToImage = async ({ pdfPath, fileName, extension = 'png', quality = 2, defaultViewport = null }) => {
10
- const browser = await puppeteer.launch({
11
- headless: true,
12
- args: [
13
- '--disable-web-security',
14
- '--disable-features=IsolateOrigins',
15
- '--disable-site-isolation-trials',
16
- '--no-sandbox'
17
- ],
18
- defaultViewport
19
- });
20
- try {
21
- const protocol = 'http';
22
- const host = 'localhost';
23
- const port = process.env.PORT;
24
- const pdfUrl = `${protocol}://${host}:${port}${pdfPath}`;
25
- const page = await browser.newPage();
26
- const html = await ejs.render(getPdfHtmlTemplate(), {
27
- data: { pdfUrl, quality },
28
- nonce: crypto_1.default.randomBytes(16).toString('hex')
29
- });
30
- // 페이지 로딩시 까지 기다리고 스크린샷
31
- await page.setContent(html, { waitUntil: 'networkidle0' });
32
- await page.waitForNetworkIdle();
33
- await page.$('#page');
34
- const screenshot = await page.screenshot({
35
- type: extension,
36
- omitBackground: true
37
- });
38
- // graphql fileupload형태로 return을 위해 stream 생성
39
- const stream = new Readable();
40
- stream.push(screenshot);
41
- stream.push(null);
42
- await browser.close();
43
- // file upload 형태로 return
44
- return {
45
- filename: `${fileName}.${extension}`,
46
- mimetype: `image/${extension}`,
47
- encoding: '7bit',
48
- createReadStream: () => stream
49
- };
50
- }
51
- catch (e) {
52
- await browser.close();
53
- console.log('Error creating thumbnail', e);
54
- throw new Error('Error creating thumbnail');
55
- }
56
- };
57
- exports.pdfToImage = pdfToImage;
58
- function getPdfHtmlTemplate() {
59
- return `
60
- <html lang="en">
61
- <head>
62
- <meta charset="UTF-8" />
63
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
64
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
65
-
66
- <style nonce="<%= nonce %>">
67
- body {
68
- width: 100vw;
69
- height: 100vh;
70
- margin: 0;
71
- }
72
- #page {
73
- display: flex;
74
- width: 100%;
75
- height: 100%;
76
- }
77
- </style>
78
-
79
- </head>
80
- <body>
81
- <canvas id="page"></canvas>
82
- <script src="https://unpkg.com/pdfjs-dist@2.0.489/build/pdf.min.js"></script>
83
- <script nonce="<%= nonce %>">
84
- ;(async () => {
85
- const pdf = await pdfjsLib.getDocument('<%= data.pdfUrl %>')
86
- const page = await pdf.getPage(1)
87
- const viewport = page.getViewport('<%= data.quality %>')
88
- const canvas = document.getElementById('page')
89
- const context = canvas.getContext('2d')
90
-
91
- canvas.height = viewport.height
92
- canvas.width = viewport.width
93
-
94
- const renderContext = {
95
- canvasContext: context,
96
- viewport: viewport
97
- }
98
-
99
- page.render(renderContext)
100
- })()
101
- </script>
102
- </body>
103
- </html>
104
- `;
105
- }
106
- //# sourceMappingURL=headless-pdf-to-image.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"headless-pdf-to-image.js","sourceRoot":"","sources":["../../server/controllers/headless-pdf-to-image.ts"],"names":[],"mappings":";;;;AAAA,4DAA2B;AAE3B,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;AACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;AACtC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAEnB,MAAM,UAAU,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,eAAe,GAAG,IAAI,EAAE,EAAE,EAAE;IAChH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;QACrC,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE;YACJ,wBAAwB;YACxB,mCAAmC;YACnC,iCAAiC;YACjC,cAAc;SACf;QACD,eAAe;KAChB,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAA;QACvB,MAAM,IAAI,GAAG,WAAW,CAAA;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAA;QAC7B,MAAM,MAAM,GAAG,GAAG,QAAQ,MAAM,IAAI,IAAI,IAAI,GAAG,OAAO,EAAE,CAAA;QAExD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE;YAClD,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;YACzB,KAAK,EAAE,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;SAC9C,CAAC,CAAA;QAEF,uBAAuB;QACvB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;QAC1D,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC/B,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACrB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;YACvC,IAAI,EAAE,SAAS;YACf,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;QAEF,6CAA6C;QAC7C,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEjB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QAErB,yBAAyB;QACzB,OAAO;YACL,QAAQ,EAAE,GAAG,QAAQ,IAAI,SAAS,EAAE;YACpC,QAAQ,EAAE,SAAS,SAAS,EAAE;YAC9B,QAAQ,EAAE,MAAM;YAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM;SAC/B,CAAA;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QACrB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAA;QAC1C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC,CAAA;AApDY,QAAA,UAAU,cAoDtB;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CN,CAAA;AACH,CAAC","sourcesContent":["import crypto from 'crypto'\n\nconst puppeteer = require('puppeteer')\nconst { Readable } = require('stream')\nconst ejs = require('ejs')\n\nexport const pdfToImage = async ({ pdfPath, fileName, extension = 'png', quality = 2, defaultViewport = null }) => {\n const browser = await puppeteer.launch({\n headless: true,\n args: [\n '--disable-web-security',\n '--disable-features=IsolateOrigins',\n '--disable-site-isolation-trials',\n '--no-sandbox'\n ],\n defaultViewport\n })\n\n try {\n const protocol = 'http'\n const host = 'localhost'\n const port = process.env.PORT\n const pdfUrl = `${protocol}://${host}:${port}${pdfPath}`\n\n const page = await browser.newPage()\n const html = await ejs.render(getPdfHtmlTemplate(), {\n data: { pdfUrl, quality },\n nonce: crypto.randomBytes(16).toString('hex')\n })\n\n // 페이지 로딩시 까지 기다리고 스크린샷\n await page.setContent(html, { waitUntil: 'networkidle0' })\n await page.waitForNetworkIdle()\n await page.$('#page')\n const screenshot = await page.screenshot({\n type: extension,\n omitBackground: true\n })\n\n // graphql fileupload형태로 return을 위해 stream 생성\n const stream = new Readable()\n stream.push(screenshot)\n stream.push(null)\n\n await browser.close()\n\n // file upload 형태로 return\n return {\n filename: `${fileName}.${extension}`,\n mimetype: `image/${extension}`,\n encoding: '7bit',\n createReadStream: () => stream\n }\n } catch (e) {\n await browser.close()\n console.log('Error creating thumbnail', e)\n throw new Error('Error creating thumbnail')\n }\n}\n\nfunction getPdfHtmlTemplate() {\n return `\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\" />\n\n <style nonce=\"<%= nonce %>\">\n body {\n width: 100vw;\n height: 100vh;\n margin: 0;\n }\n #page {\n display: flex;\n width: 100%;\n height: 100%;\n }\n </style>\n\n </head>\n <body>\n <canvas id=\"page\"></canvas>\n <script src=\"https://unpkg.com/pdfjs-dist@2.0.489/build/pdf.min.js\"></script>\n <script nonce=\"<%= nonce %>\">\n ;(async () => {\n const pdf = await pdfjsLib.getDocument('<%= data.pdfUrl %>')\n const page = await pdf.getPage(1)\n const viewport = page.getViewport('<%= data.quality %>')\n const canvas = document.getElementById('page')\n const context = canvas.getContext('2d')\n\n canvas.height = viewport.height\n canvas.width = viewport.width\n\n const renderContext = {\n canvasContext: context,\n viewport: viewport\n }\n\n page.render(renderContext)\n })()\n </script>\n </body>\n </html>\n `\n}\n"]}
@@ -1,5 +0,0 @@
1
- import { PlayGroup } from '../service/play-group/play-group.js';
2
- export declare const headlessPlaylist: (target: any, draft?: boolean) => Promise<{
3
- base: string;
4
- playGroup: PlayGroup;
5
- }>;
@@ -1,71 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.headlessPlaylist = void 0;
4
- const shell_1 = require("@things-factory/shell");
5
- const play_group_js_1 = require("../service/play-group/play-group.js");
6
- const board_history_js_1 = require("../service/board/board-history.js");
7
- const headlessPlaylist = async (target, draft = false) => {
8
- var { domain, id, name } = target || {};
9
- if (id || name) {
10
- const repository = (0, shell_1.getRepository)(play_group_js_1.PlayGroup);
11
- if (id) {
12
- var playGroup = await repository.findOne({
13
- where: { domain: { id: domain.id }, id },
14
- relations: ['boards']
15
- });
16
- }
17
- else if (name) {
18
- var playGroup = await repository.findOne({
19
- where: { domain: { id: domain.id }, name },
20
- relations: ['boards']
21
- });
22
- }
23
- if (!draft && playGroup) {
24
- const { boards } = playGroup;
25
- for (let board of boards) {
26
- const latestReleased = board.state == 'released'
27
- ? board
28
- : await (0, shell_1.getRepository)(board_history_js_1.BoardHistory)
29
- .createQueryBuilder('history')
30
- .where('history.originalId = :originalId', { originalId: board.id })
31
- .orderBy('history.version', 'DESC')
32
- .limit(1)
33
- .getOne();
34
- if (latestReleased) {
35
- board.model = latestReleased.model;
36
- }
37
- }
38
- }
39
- playGroup.boards = playGroup.boards.sort((a, b) => {
40
- // 배열 A에 포함된 아이디의 순서를 가져옵니다.
41
- const indexOfOrder = (playGroup.order || []).indexOf(a.id);
42
- const indexOfBoards = (playGroup.order || []).indexOf(b.id);
43
- // 두 아이디의 순서를 비교하여 정렬합니다.
44
- if (indexOfOrder === -1 && indexOfBoards === -1) {
45
- // 두 아이디 모두 배열 A에 없는 경우, 그대로 유지합니다.
46
- return 0;
47
- }
48
- else if (indexOfOrder === -1) {
49
- // 아이디 A만 배열 A에 없는 경우, 아이디 B를 먼저 정렬합니다.
50
- return 1;
51
- }
52
- else if (indexOfBoards === -1) {
53
- // 아이디 B만 배열 A에 없는 경우, 아이디 A를 먼저 정렬합니다.
54
- return -1;
55
- }
56
- else {
57
- // 두 아이디 모두 배열 A에 있는 경우, 배열 A의 아이디 순서대로 정렬합니다.
58
- return indexOfOrder - indexOfBoards;
59
- }
60
- });
61
- }
62
- else {
63
- throw 'parameter id or name mandatory';
64
- }
65
- return {
66
- base: (0, shell_1.getContextPath)(domain),
67
- playGroup
68
- };
69
- };
70
- exports.headlessPlaylist = headlessPlaylist;
71
- //# sourceMappingURL=headless-playlist.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"headless-playlist.js","sourceRoot":"","sources":["../../server/controllers/headless-playlist.ts"],"names":[],"mappings":"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","sourcesContent":["import { getContextPath, getRepository } from '@things-factory/shell'\n\nimport { PlayGroup } from '../service/play-group/play-group.js'\nimport { BoardHistory } from '../service/board/board-history.js'\n\nexport const headlessPlaylist = async (target, draft: boolean = false) => {\n var { domain, id, name } = target || {}\n\n if (id || name) {\n const repository = getRepository(PlayGroup)\n\n if (id) {\n var playGroup = await repository.findOne({\n where: { domain: { id: domain.id }, id },\n relations: ['boards']\n })\n } else if (name) {\n var playGroup = await repository.findOne({\n where: { domain: { id: domain.id }, name },\n relations: ['boards']\n })\n }\n\n if (!draft && playGroup) {\n const { boards } = playGroup\n for (let board of boards) {\n const latestReleased =\n board.state == 'released'\n ? board\n : await getRepository(BoardHistory)\n .createQueryBuilder('history')\n .where('history.originalId = :originalId', { originalId: board.id })\n .orderBy('history.version', 'DESC')\n .limit(1)\n .getOne()\n\n if (latestReleased) {\n board.model = latestReleased.model\n }\n }\n }\n\n playGroup.boards = playGroup.boards.sort((a, b) => {\n // 배열 A에 포함된 아이디의 순서를 가져옵니다.\n const indexOfOrder = (playGroup.order || []).indexOf(a.id)\n const indexOfBoards = (playGroup.order || []).indexOf(b.id)\n\n // 두 아이디의 순서를 비교하여 정렬합니다.\n if (indexOfOrder === -1 && indexOfBoards === -1) {\n // 두 아이디 모두 배열 A에 없는 경우, 그대로 유지합니다.\n return 0\n } else if (indexOfOrder === -1) {\n // 아이디 A만 배열 A에 없는 경우, 아이디 B를 먼저 정렬합니다.\n return 1\n } else if (indexOfBoards === -1) {\n // 아이디 B만 배열 A에 없는 경우, 아이디 A를 먼저 정렬합니다.\n return -1\n } else {\n // 두 아이디 모두 배열 A에 있는 경우, 배열 A의 아이디 순서대로 정렬합니다.\n return indexOfOrder - indexOfBoards\n }\n })\n } else {\n throw 'parameter id or name mandatory'\n }\n\n return {\n base: getContextPath(domain),\n playGroup\n }\n}\n"]}
@@ -1 +0,0 @@
1
- export declare function getHeadlessPool(): any;