@things-factory/board-service 9.0.0-beta.25 → 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.
- package/package.json +3 -3
- package/dist-server/constants/error-code.d.ts +0 -2
- package/dist-server/constants/error-code.js +0 -6
- package/dist-server/constants/error-code.js.map +0 -1
- package/dist-server/controllers/analyzer/analyze-integration.d.ts +0 -5
- package/dist-server/controllers/analyzer/analyze-integration.js +0 -117
- package/dist-server/controllers/analyzer/analyze-integration.js.map +0 -1
- package/dist-server/controllers/fonts.d.ts +0 -9
- package/dist-server/controllers/fonts.js +0 -76
- package/dist-server/controllers/fonts.js.map +0 -1
- package/dist-server/controllers/headless-model.d.ts +0 -6
- package/dist-server/controllers/headless-model.js +0 -55
- package/dist-server/controllers/headless-model.js.map +0 -1
- package/dist-server/controllers/headless-pdf-to-image.d.ts +0 -12
- package/dist-server/controllers/headless-pdf-to-image.js +0 -106
- package/dist-server/controllers/headless-pdf-to-image.js.map +0 -1
- package/dist-server/controllers/headless-playlist.d.ts +0 -5
- package/dist-server/controllers/headless-playlist.js +0 -71
- package/dist-server/controllers/headless-playlist.js.map +0 -1
- package/dist-server/controllers/headless-pool-for-board.d.ts +0 -1
- package/dist-server/controllers/headless-pool-for-board.js +0 -64
- package/dist-server/controllers/headless-pool-for-board.js.map +0 -1
- package/dist-server/controllers/headless-pool-for-label.d.ts +0 -1
- package/dist-server/controllers/headless-pool-for-label.js +0 -133
- package/dist-server/controllers/headless-pool-for-label.js.map +0 -1
- package/dist-server/controllers/index.d.ts +0 -34
- package/dist-server/controllers/index.js +0 -14
- package/dist-server/controllers/index.js.map +0 -1
- package/dist-server/controllers/label-command.d.ts +0 -19
- package/dist-server/controllers/label-command.js +0 -52
- package/dist-server/controllers/label-command.js.map +0 -1
- package/dist-server/controllers/pdf.d.ts +0 -9
- package/dist-server/controllers/pdf.js +0 -102
- package/dist-server/controllers/pdf.js.map +0 -1
- package/dist-server/controllers/screenshot.d.ts +0 -11
- package/dist-server/controllers/screenshot.js +0 -101
- package/dist-server/controllers/screenshot.js.map +0 -1
- package/dist-server/controllers/thumbnail.d.ts +0 -7
- package/dist-server/controllers/thumbnail.js +0 -16
- package/dist-server/controllers/thumbnail.js.map +0 -1
- package/dist-server/errors/index.d.ts +0 -1
- package/dist-server/errors/index.js +0 -5
- package/dist-server/errors/index.js.map +0 -1
- package/dist-server/errors/license-error.d.ts +0 -11
- package/dist-server/errors/license-error.js +0 -18
- package/dist-server/errors/license-error.js.map +0 -1
- package/dist-server/index.d.ts +0 -5
- package/dist-server/index.js +0 -35
- package/dist-server/index.js.map +0 -1
- package/dist-server/migrations/1556862253000-SeedGroup.d.ts +0 -5
- package/dist-server/migrations/1556862253000-SeedGroup.js +0 -43
- package/dist-server/migrations/1556862253000-SeedGroup.js.map +0 -1
- package/dist-server/migrations/index.d.ts +0 -1
- package/dist-server/migrations/index.js +0 -12
- package/dist-server/migrations/index.js.map +0 -1
- package/dist-server/routers/internal-board-view-router.d.ts +0 -1
- package/dist-server/routers/internal-board-view-router.js +0 -32
- package/dist-server/routers/internal-board-view-router.js.map +0 -1
- package/dist-server/routers/standalone-board-service-router.d.ts +0 -1
- package/dist-server/routers/standalone-board-service-router.js +0 -250
- package/dist-server/routers/standalone-board-service-router.js.map +0 -1
- package/dist-server/routes.d.ts +0 -1
- package/dist-server/routes.js +0 -23
- package/dist-server/routes.js.map +0 -1
- package/dist-server/service/analysis/analysis-query.d.ts +0 -3
- package/dist-server/service/analysis/analysis-query.js +0 -25
- package/dist-server/service/analysis/analysis-query.js.map +0 -1
- package/dist-server/service/analysis/index.d.ts +0 -2
- package/dist-server/service/analysis/index.js +0 -6
- package/dist-server/service/analysis/index.js.map +0 -1
- package/dist-server/service/board/board-history.d.ts +0 -28
- package/dist-server/service/board/board-history.js +0 -155
- package/dist-server/service/board/board-history.js.map +0 -1
- package/dist-server/service/board/board-mutation.d.ts +0 -12
- package/dist-server/service/board/board-mutation.js +0 -377
- package/dist-server/service/board/board-mutation.js.map +0 -1
- package/dist-server/service/board/board-query.d.ts +0 -20
- package/dist-server/service/board/board-query.js +0 -220
- package/dist-server/service/board/board-query.js.map +0 -1
- package/dist-server/service/board/board-subscription.d.ts +0 -6
- package/dist-server/service/board/board-subscription.js +0 -49
- package/dist-server/service/board/board-subscription.js.map +0 -1
- package/dist-server/service/board/board-type.d.ts +0 -24
- package/dist-server/service/board/board-type.js +0 -88
- package/dist-server/service/board/board-type.js.map +0 -1
- package/dist-server/service/board/board.d.ts +0 -25
- package/dist-server/service/board/board.js +0 -140
- package/dist-server/service/board/board.js.map +0 -1
- package/dist-server/service/board/event-subscriber.d.ts +0 -15
- package/dist-server/service/board/event-subscriber.js +0 -63
- package/dist-server/service/board/event-subscriber.js.map +0 -1
- package/dist-server/service/board/index.d.ts +0 -9
- package/dist-server/service/board/index.js +0 -13
- package/dist-server/service/board/index.js.map +0 -1
- package/dist-server/service/board-favorite/board-favorite-query.d.ts +0 -5
- package/dist-server/service/board-favorite/board-favorite-query.js +0 -56
- package/dist-server/service/board-favorite/board-favorite-query.js.map +0 -1
- package/dist-server/service/board-favorite/board-favorite-type.d.ts +0 -8
- package/dist-server/service/board-favorite/board-favorite-type.js +0 -31
- package/dist-server/service/board-favorite/board-favorite-type.js.map +0 -1
- package/dist-server/service/board-favorite/index.d.ts +0 -3
- package/dist-server/service/board-favorite/index.js +0 -7
- package/dist-server/service/board-favorite/index.js.map +0 -1
- package/dist-server/service/board-template/board-template-mutation.d.ts +0 -8
- package/dist-server/service/board-template/board-template-mutation.js +0 -146
- package/dist-server/service/board-template/board-template-mutation.js.map +0 -1
- package/dist-server/service/board-template/board-template-query.d.ts +0 -13
- package/dist-server/service/board-template/board-template-query.js +0 -147
- package/dist-server/service/board-template/board-template-query.js.map +0 -1
- package/dist-server/service/board-template/board-template-type.d.ts +0 -21
- package/dist-server/service/board-template/board-template-type.js +0 -81
- package/dist-server/service/board-template/board-template-type.js.map +0 -1
- package/dist-server/service/board-template/board-template.d.ts +0 -23
- package/dist-server/service/board-template/board-template.js +0 -123
- package/dist-server/service/board-template/board-template.js.map +0 -1
- package/dist-server/service/board-template/index.d.ts +0 -6
- package/dist-server/service/board-template/index.js +0 -10
- package/dist-server/service/board-template/index.js.map +0 -1
- package/dist-server/service/group/group-mutation.d.ts +0 -8
- package/dist-server/service/group/group-mutation.js +0 -89
- package/dist-server/service/group/group-mutation.js.map +0 -1
- package/dist-server/service/group/group-query.d.ts +0 -13
- package/dist-server/service/group/group-query.js +0 -92
- package/dist-server/service/group/group-query.js.map +0 -1
- package/dist-server/service/group/group-type.d.ts +0 -13
- package/dist-server/service/group/group-type.js +0 -49
- package/dist-server/service/group/group-type.js.map +0 -1
- package/dist-server/service/group/group.d.ts +0 -17
- package/dist-server/service/group/group.js +0 -77
- package/dist-server/service/group/group.js.map +0 -1
- package/dist-server/service/group/index.d.ts +0 -5
- package/dist-server/service/group/index.js +0 -9
- package/dist-server/service/group/index.js.map +0 -1
- package/dist-server/service/index.d.ts +0 -10
- package/dist-server/service/index.js +0 -49
- package/dist-server/service/index.js.map +0 -1
- package/dist-server/service/permission/domain-permission-subscriber.d.ts +0 -9
- package/dist-server/service/permission/domain-permission-subscriber.js +0 -30
- package/dist-server/service/permission/domain-permission-subscriber.js.map +0 -1
- package/dist-server/service/permission/index.d.ts +0 -2
- package/dist-server/service/permission/index.js +0 -6
- package/dist-server/service/permission/index.js.map +0 -1
- package/dist-server/service/play-group/event-subscriber.d.ts +0 -6
- package/dist-server/service/play-group/event-subscriber.js +0 -58
- package/dist-server/service/play-group/event-subscriber.js.map +0 -1
- package/dist-server/service/play-group/index.d.ts +0 -8
- package/dist-server/service/play-group/index.js +0 -12
- package/dist-server/service/play-group/index.js.map +0 -1
- package/dist-server/service/play-group/play-group-mutation.d.ts +0 -10
- package/dist-server/service/play-group/play-group-mutation.js +0 -146
- package/dist-server/service/play-group/play-group-mutation.js.map +0 -1
- package/dist-server/service/play-group/play-group-query.d.ts +0 -14
- package/dist-server/service/play-group/play-group-query.js +0 -129
- package/dist-server/service/play-group/play-group-query.js.map +0 -1
- package/dist-server/service/play-group/play-group-subscription.d.ts +0 -6
- package/dist-server/service/play-group/play-group-subscription.js +0 -49
- package/dist-server/service/play-group/play-group-subscription.js.map +0 -1
- package/dist-server/service/play-group/play-group-type.d.ts +0 -13
- package/dist-server/service/play-group/play-group-type.js +0 -49
- package/dist-server/service/play-group/play-group-type.js.map +0 -1
- package/dist-server/service/play-group/play-group.d.ts +0 -18
- package/dist-server/service/play-group/play-group.js +0 -82
- package/dist-server/service/play-group/play-group.js.map +0 -1
- package/dist-server/service/theme/index.d.ts +0 -6
- package/dist-server/service/theme/index.js +0 -10
- package/dist-server/service/theme/index.js.map +0 -1
- package/dist-server/service/theme/theme-mutation.d.ts +0 -10
- package/dist-server/service/theme/theme-mutation.js +0 -125
- package/dist-server/service/theme/theme-mutation.js.map +0 -1
- package/dist-server/service/theme/theme-query.d.ts +0 -11
- package/dist-server/service/theme/theme-query.js +0 -79
- package/dist-server/service/theme/theme-query.js.map +0 -1
- package/dist-server/service/theme/theme-type.d.ts +0 -21
- package/dist-server/service/theme/theme-type.js +0 -82
- package/dist-server/service/theme/theme-type.js.map +0 -1
- package/dist-server/service/theme/theme.d.ts +0 -25
- package/dist-server/service/theme/theme.js +0 -101
- package/dist-server/service/theme/theme.js.map +0 -1
- 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.
|
|
3
|
+
"version": "9.0.0-beta.27",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"things-factory": true,
|
|
6
6
|
"author": "",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"@things-factory/env": "^9.0.0-beta.19",
|
|
28
28
|
"@things-factory/fav-base": "^9.0.0-beta.25",
|
|
29
29
|
"@things-factory/font-base": "^9.0.0-beta.25",
|
|
30
|
-
"@things-factory/integration-base": "^9.0.0-beta.
|
|
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": "
|
|
36
|
+
"gitHead": "3038f56087036b06717f8e4910383c6b1320218d"
|
|
37
37
|
}
|
|
@@ -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,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,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":"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","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,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,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;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getHeadlessPool = getHeadlessPool;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const genericPool = tslib_1.__importStar(require("generic-pool"));
|
|
6
|
-
const env_1 = require("@things-factory/env");
|
|
7
|
-
try {
|
|
8
|
-
var puppeteer = require('puppeteer');
|
|
9
|
-
}
|
|
10
|
-
catch (err) {
|
|
11
|
-
env_1.logger.error(err);
|
|
12
|
-
}
|
|
13
|
-
var headlessPool;
|
|
14
|
-
function getHeadlessPool() {
|
|
15
|
-
if (!headlessPool) {
|
|
16
|
-
headlessPool = genericPool.createPool({
|
|
17
|
-
create() {
|
|
18
|
-
console.log('headless instance in headless-pool-for-board about to create');
|
|
19
|
-
return initializeChromium();
|
|
20
|
-
},
|
|
21
|
-
validate(browser) {
|
|
22
|
-
return Promise.race([
|
|
23
|
-
new Promise(res => setTimeout(() => res(false), 1500)),
|
|
24
|
-
browser
|
|
25
|
-
//@ts-ignore
|
|
26
|
-
.version()
|
|
27
|
-
.then(_ => true)
|
|
28
|
-
.catch(_ => false)
|
|
29
|
-
]);
|
|
30
|
-
},
|
|
31
|
-
destroy(browser) {
|
|
32
|
-
//@ts-ignore
|
|
33
|
-
return browser.close();
|
|
34
|
-
}
|
|
35
|
-
}, {
|
|
36
|
-
min: 2,
|
|
37
|
-
max: 10,
|
|
38
|
-
testOnBorrow: true,
|
|
39
|
-
acquireTimeoutMillis: 15000
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
return headlessPool;
|
|
43
|
-
}
|
|
44
|
-
const CHROMIUM_PATH = env_1.config.get('CHROMIUM_PATH');
|
|
45
|
-
async function initializeChromium() {
|
|
46
|
-
try {
|
|
47
|
-
if (!puppeteer) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
var launchSetting = {
|
|
51
|
-
args: ['--hide-scrollbars', '--mute-audio', '--no-sandbox', '--use-gl=egl'],
|
|
52
|
-
headless: 'shell'
|
|
53
|
-
};
|
|
54
|
-
if (CHROMIUM_PATH) {
|
|
55
|
-
launchSetting['executablePath'] = CHROMIUM_PATH;
|
|
56
|
-
}
|
|
57
|
-
const browser = await puppeteer.launch(launchSetting);
|
|
58
|
-
return browser;
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
env_1.logger.error(err);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=headless-pool-for-board.js.map
|