@lighthouse/common 6.10.0 → 6.10.1-canary.0
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/.mise.toml +6 -6
- package/CHANGELOG.md +758 -758
- package/README.md +1 -1
- package/dist/errors/FetchImageError.js +3 -3
- package/dist/helpers/fetch-image-for-pdf-generator-service/index.js +7 -7
- package/dist/helpers/floatify/index.js +6 -6
- package/dist/helpers/get-audit-items-data/index.js +47 -36
- package/dist/helpers/validate-url/index.js +4 -4
- package/dist/pdf/activity-report/index.js +32 -32
- package/dist/pdf/audit/index.js +23 -23
- package/dist/pdf/helpers/fields/index.js +47 -27
- package/dist/pdf/issue/index.js +23 -23
- package/dist/pdf/job/index.js +22 -22
- package/dist/pdf/shift-report/index.js +28 -28
- package/dist/pdf/task/index.js +23 -23
- package/dist/scheduling/generators/occurrenceIntervalsGenerator.js +2 -2
- package/dist/scheduling/generators/scheduleIntervalsGenerator.js +2 -2
- package/dist/scheduling/generators/serviceIntervalsGenerator.js +2 -2
- package/dist/scheduling/helpers/convertToTimezone.js +6 -6
- package/dist/scheduling/helpers/generateNonRepeatingSchedule.js +2 -2
- package/dist/scheduling/helpers/generateRepeatingSchedule.js +2 -2
- package/dist/scheduling/helpers/generateScheduleEnd.js +2 -2
- package/dist/scheduling/helpers/hasValidStartAndEnd.js +5 -5
- package/dist/scheduling/helpers/intervalCovers.js +6 -6
- package/dist/scheduling/helpers/intervalIntersectsEnd.js +6 -6
- package/dist/scheduling/helpers/intervalIntersectsStart.js +6 -6
- package/dist/scheduling/helpers/intervalOnlyIntersectsEnd.js +6 -6
- package/dist/scheduling/helpers/intervalOnlyIntersectsStart.js +6 -6
- package/dist/scheduling/helpers/intervalOutside.js +6 -6
- package/dist/scheduling/helpers/intervalWithin.js +6 -6
- package/dist/scheduling/helpers/mergeIntervals.js +6 -6
- package/dist/scheduling/helpers/splitIntervals.js +6 -6
- package/dist/scheduling/strategies/getNext.js +2 -2
- package/dist/scheduling/strategies/getNextExactDateOfMonth.js +2 -2
- package/dist/scheduling/strategies/getNextLastDayOfMonth.js +2 -2
- package/dist/scheduling/strategies/getNextLastWeekdayOfMonth.js +2 -2
- package/dist/scheduling/strategies/getNextNoRepeat.js +2 -2
- package/dist/scheduling/strategies/getNextWeekday.js +2 -2
- package/dist/scheduling/strategies/getNextXDayOfXWeekOfMonth.js +2 -2
- package/dist/service-hours/__helpers__/calculate-hours.js +4 -4
- package/dist/service-hours/__helpers__/isOpen.js +2 -2
- package/dist/service-hours/schema.js +4 -4
- package/lib/constants.js +12 -6
- package/lib/constants.js.map +1 -1
- package/lib/errors/DomainError.js +14 -21
- package/lib/errors/DomainError.js.map +1 -1
- package/lib/errors/FetchImageError.js +17 -24
- package/lib/errors/FetchImageError.js.map +1 -1
- package/lib/errors/ValidationError.js +30 -36
- package/lib/errors/ValidationError.js.map +1 -1
- package/lib/errors/index.js +23 -5
- package/lib/errors/index.js.map +1 -1
- package/lib/helpers/build-fetch-url/index.js +43 -47
- package/lib/helpers/build-fetch-url/index.js.map +1 -1
- package/lib/helpers/fetch-image/index.js +83 -82
- package/lib/helpers/fetch-image/index.js.map +1 -1
- package/lib/helpers/fetch-image-for-pdf-generator-service/index.js +168 -243
- package/lib/helpers/fetch-image-for-pdf-generator-service/index.js.map +1 -1
- package/lib/helpers/fetch-image-for-web/index.js +71 -94
- package/lib/helpers/fetch-image-for-web/index.js.map +1 -1
- package/lib/helpers/fetch-lighthouse-logo/index.js +36 -61
- package/lib/helpers/fetch-lighthouse-logo/index.js.map +1 -1
- package/lib/helpers/floatify/index.js +13 -7
- package/lib/helpers/floatify/index.js.map +1 -1
- package/lib/helpers/get-assignees-full-names/index.js +11 -7
- package/lib/helpers/get-assignees-full-names/index.js.map +1 -1
- package/lib/helpers/get-audit-entry-details/index.js +42 -32
- package/lib/helpers/get-audit-entry-details/index.js.map +1 -1
- package/lib/helpers/get-audit-items-data/index.js +104 -83
- package/lib/helpers/get-audit-items-data/index.js.map +1 -1
- package/lib/helpers/get-geometry-geocoded-string/index.js +10 -5
- package/lib/helpers/get-geometry-geocoded-string/index.js.map +1 -1
- package/lib/helpers/get-issue-details/index.js +53 -43
- package/lib/helpers/get-issue-details/index.js.map +1 -1
- package/lib/helpers/get-job-details/index.js +49 -41
- package/lib/helpers/get-job-details/index.js.map +1 -1
- package/lib/helpers/get-location-reference/index.js +32 -34
- package/lib/helpers/get-location-reference/index.js.map +1 -1
- package/lib/helpers/get-pretty-duration/index.js +16 -10
- package/lib/helpers/get-pretty-duration/index.js.map +1 -1
- package/lib/helpers/get-reference-details/index.js +20 -10
- package/lib/helpers/get-reference-details/index.js.map +1 -1
- package/lib/helpers/get-status-details/index.js +8 -2
- package/lib/helpers/get-status-details/index.js.map +1 -1
- package/lib/helpers/get-task-entry-details/index.js +32 -23
- package/lib/helpers/get-task-entry-details/index.js.map +1 -1
- package/lib/helpers/get-timezone-abbr/index.js +11 -4
- package/lib/helpers/get-timezone-abbr/index.js.map +1 -1
- package/lib/helpers/get-timezone-datetime/index.js +20 -13
- package/lib/helpers/get-timezone-datetime/index.js.map +1 -1
- package/lib/helpers/get-user-full-name/index.js +9 -3
- package/lib/helpers/get-user-full-name/index.js.map +1 -1
- package/lib/helpers/get-value-as-percentage/index.js +9 -4
- package/lib/helpers/get-value-as-percentage/index.js.map +1 -1
- package/lib/helpers/image-validators/index.js +18 -12
- package/lib/helpers/image-validators/index.js.map +1 -1
- package/lib/helpers/index.js +130 -18
- package/lib/helpers/index.js.map +1 -1
- package/lib/helpers/validate-url/index.js +11 -5
- package/lib/helpers/validate-url/index.js.map +1 -1
- package/lib/images/index.js +10 -4
- package/lib/images/index.js.map +1 -1
- package/lib/index.js +66 -10
- package/lib/index.js.map +1 -1
- package/lib/pdf/activity-report/index.js +407 -537
- package/lib/pdf/activity-report/index.js.map +1 -1
- package/lib/pdf/audit/index.js +137 -134
- package/lib/pdf/audit/index.js.map +1 -1
- package/lib/pdf/fonts/index.js +4 -2
- package/lib/pdf/fonts/index.js.map +1 -1
- package/lib/pdf/helpers/build-audit-content/index.js +57 -51
- package/lib/pdf/helpers/build-audit-content/index.js.map +1 -1
- package/lib/pdf/helpers/build-audit-follow-ups/index.js +52 -50
- package/lib/pdf/helpers/build-audit-follow-ups/index.js.map +1 -1
- package/lib/pdf/helpers/build-location-scans-content/index.js +22 -16
- package/lib/pdf/helpers/build-location-scans-content/index.js.map +1 -1
- package/lib/pdf/helpers/build-template-content/index.js +52 -51
- package/lib/pdf/helpers/build-template-content/index.js.map +1 -1
- package/lib/pdf/helpers/default-footer/index.js +38 -35
- package/lib/pdf/helpers/default-footer/index.js.map +1 -1
- package/lib/pdf/helpers/default-header/index.js +40 -35
- package/lib/pdf/helpers/default-header/index.js.map +1 -1
- package/lib/pdf/helpers/default-styles/index.js +7 -1
- package/lib/pdf/helpers/default-styles/index.js.map +1 -1
- package/lib/pdf/helpers/fields/index.js +225 -214
- package/lib/pdf/helpers/fields/index.js.map +1 -1
- package/lib/pdf/helpers/format-location-address/index.js +14 -8
- package/lib/pdf/helpers/format-location-address/index.js.map +1 -1
- package/lib/pdf/helpers/generate-definition/index.js +60 -65
- package/lib/pdf/helpers/generate-definition/index.js.map +1 -1
- package/lib/pdf/helpers/horizontal-line/index.js +14 -14
- package/lib/pdf/helpers/horizontal-line/index.js.map +1 -1
- package/lib/pdf/helpers/html-transformer/index.js +45 -35
- package/lib/pdf/helpers/html-transformer/index.js.map +1 -1
- package/lib/pdf/helpers/index.js +194 -15
- package/lib/pdf/helpers/index.js.map +1 -1
- package/lib/pdf/helpers/parse-value/index.js +10 -4
- package/lib/pdf/helpers/parse-value/index.js.map +1 -1
- package/lib/pdf/helpers/table/index.js +136 -205
- package/lib/pdf/helpers/table/index.js.map +1 -1
- package/lib/pdf/helpers/text/index.js +11 -8
- package/lib/pdf/helpers/text/index.js.map +1 -1
- package/lib/pdf/icons/index.js +8 -2
- package/lib/pdf/icons/index.js.map +1 -1
- package/lib/pdf/index.js +47 -6
- package/lib/pdf/index.js.map +1 -1
- package/lib/pdf/issue/index.js +141 -135
- package/lib/pdf/issue/index.js.map +1 -1
- package/lib/pdf/job/index.js +95 -81
- package/lib/pdf/job/index.js.map +1 -1
- package/lib/pdf/shift-report/emptyFixtures.js +8 -2
- package/lib/pdf/shift-report/emptyFixtures.js.map +1 -1
- package/lib/pdf/shift-report/index.js +399 -521
- package/lib/pdf/shift-report/index.js.map +1 -1
- package/lib/pdf/task/index.js +89 -83
- package/lib/pdf/task/index.js.map +1 -1
- package/lib/scheduling/generators/index.js +38 -3
- package/lib/scheduling/generators/index.js.map +1 -1
- package/lib/scheduling/generators/occurrenceIntervalsGenerator.js +44 -37
- package/lib/scheduling/generators/occurrenceIntervalsGenerator.js.map +1 -1
- package/lib/scheduling/generators/scheduleIntervalsGenerator.js +20 -28
- package/lib/scheduling/generators/scheduleIntervalsGenerator.js.map +1 -1
- package/lib/scheduling/generators/serviceIntervalsGenerator.js +120 -150
- package/lib/scheduling/generators/serviceIntervalsGenerator.js.map +1 -1
- package/lib/scheduling/helpers/convertToTimezone.js +18 -11
- package/lib/scheduling/helpers/convertToTimezone.js.map +1 -1
- package/lib/scheduling/helpers/generateNonRepeatingSchedule.js +57 -95
- package/lib/scheduling/helpers/generateNonRepeatingSchedule.js.map +1 -1
- package/lib/scheduling/helpers/generateRepeatingSchedule.js +80 -119
- package/lib/scheduling/helpers/generateRepeatingSchedule.js.map +1 -1
- package/lib/scheduling/helpers/generateScheduleEnd.js +24 -14
- package/lib/scheduling/helpers/generateScheduleEnd.js.map +1 -1
- package/lib/scheduling/helpers/hasValidStartAndEnd.js +19 -11
- package/lib/scheduling/helpers/hasValidStartAndEnd.js.map +1 -1
- package/lib/scheduling/helpers/index.js +159 -14
- package/lib/scheduling/helpers/index.js.map +1 -1
- package/lib/scheduling/helpers/intervalCovers.js +13 -7
- package/lib/scheduling/helpers/intervalCovers.js.map +1 -1
- package/lib/scheduling/helpers/intervalIntersectsEnd.js +13 -7
- package/lib/scheduling/helpers/intervalIntersectsEnd.js.map +1 -1
- package/lib/scheduling/helpers/intervalIntersectsStart.js +13 -7
- package/lib/scheduling/helpers/intervalIntersectsStart.js.map +1 -1
- package/lib/scheduling/helpers/intervalOnlyIntersectsEnd.js +15 -10
- package/lib/scheduling/helpers/intervalOnlyIntersectsEnd.js.map +1 -1
- package/lib/scheduling/helpers/intervalOnlyIntersectsStart.js +15 -10
- package/lib/scheduling/helpers/intervalOnlyIntersectsStart.js.map +1 -1
- package/lib/scheduling/helpers/intervalOutside.js +15 -9
- package/lib/scheduling/helpers/intervalOutside.js.map +1 -1
- package/lib/scheduling/helpers/intervalWithin.js +13 -7
- package/lib/scheduling/helpers/intervalWithin.js.map +1 -1
- package/lib/scheduling/helpers/mergeIntervals.js +21 -17
- package/lib/scheduling/helpers/mergeIntervals.js.map +1 -1
- package/lib/scheduling/helpers/splitIntervals.js +24 -23
- package/lib/scheduling/helpers/splitIntervals.js.map +1 -1
- package/lib/scheduling/index.js +38 -3
- package/lib/scheduling/index.js.map +1 -1
- package/lib/scheduling/scheduling.types.js +9 -3
- package/lib/scheduling/scheduling.types.js.map +1 -1
- package/lib/scheduling/strategies/getNext.js +57 -63
- package/lib/scheduling/strategies/getNext.js.map +1 -1
- package/lib/scheduling/strategies/getNextExactDateOfMonth.js +47 -56
- package/lib/scheduling/strategies/getNextExactDateOfMonth.js.map +1 -1
- package/lib/scheduling/strategies/getNextLastDayOfMonth.js +43 -51
- package/lib/scheduling/strategies/getNextLastDayOfMonth.js.map +1 -1
- package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js +49 -56
- package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js.map +1 -1
- package/lib/scheduling/strategies/getNextNoRepeat.js +25 -36
- package/lib/scheduling/strategies/getNextNoRepeat.js.map +1 -1
- package/lib/scheduling/strategies/getNextWeekday.js +47 -79
- package/lib/scheduling/strategies/getNextWeekday.js.map +1 -1
- package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js +52 -58
- package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js.map +1 -1
- package/lib/scheduling/strategies/index.js +82 -7
- package/lib/scheduling/strategies/index.js.map +1 -1
- package/lib/schema/index.js +16 -1
- package/lib/schema/index.js.map +1 -1
- package/lib/schema/schema.js +28 -34
- package/lib/schema/schema.js.map +1 -1
- package/lib/service-hours/__helpers__/calculate-hours.js +24 -22
- package/lib/service-hours/__helpers__/calculate-hours.js.map +1 -1
- package/lib/service-hours/__helpers__/isOpen.js +25 -24
- package/lib/service-hours/__helpers__/isOpen.js.map +1 -1
- package/lib/service-hours/index.js +27 -2
- package/lib/service-hours/index.js.map +1 -1
- package/lib/service-hours/schema.js +68 -55
- package/lib/service-hours/schema.js.map +1 -1
- package/package.json +86 -86
- package/vitest.config.ts +23 -23
- package/vitest.setup.js +7 -7
|
@@ -1,61 +1,65 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.buildAuditContent = void 0;
|
|
8
|
+
var _lodash = require("lodash");
|
|
9
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
10
|
+
var _helpers = require("../../../helpers");
|
|
11
|
+
var _ = require("../");
|
|
12
|
+
var _table = require("../table");
|
|
13
|
+
const buildAuditContent = exports.buildAuditContent = _bluebird.default.method((items, settings = {}) => {
|
|
14
|
+
return _bluebird.default.map(items, group => {
|
|
15
|
+
return _bluebird.default.map(group.items, (item, index) => {
|
|
16
|
+
return _bluebird.default.map(item.assets, ({
|
|
17
|
+
assetUrl,
|
|
18
|
+
link
|
|
19
|
+
}) => {
|
|
14
20
|
// NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context
|
|
15
|
-
return fetchImage(assetUrl, settings).then(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var hasImages = !isEmpty(rowImages);
|
|
27
|
-
var hasComments = !isEmpty(item.comments);
|
|
21
|
+
return (0, _helpers.fetchImage)(assetUrl, settings).then(base64String => ({
|
|
22
|
+
alignment: 'center',
|
|
23
|
+
fit: [210, 210],
|
|
24
|
+
image: base64String,
|
|
25
|
+
link
|
|
26
|
+
}));
|
|
27
|
+
}).then(rowImages => {
|
|
28
|
+
const rows = [];
|
|
29
|
+
const fillColor = index % 2 === 0 ? _table.WHITE : _table.LIGHT_BLUE;
|
|
30
|
+
const hasImages = !(0, _lodash.isEmpty)(rowImages);
|
|
31
|
+
const hasComments = !(0, _lodash.isEmpty)(item.comments);
|
|
28
32
|
|
|
29
33
|
// Some audits use questionId to link a follow-up issue and its question
|
|
30
|
-
|
|
34
|
+
const label = {
|
|
31
35
|
text: item.label,
|
|
32
|
-
fillColor
|
|
36
|
+
fillColor,
|
|
33
37
|
id: item.questionId
|
|
34
38
|
};
|
|
35
39
|
rows.push([label, {
|
|
36
40
|
text: item.scoreLabel,
|
|
37
|
-
fillColor
|
|
41
|
+
fillColor
|
|
38
42
|
}, {
|
|
39
43
|
alignment: 'center',
|
|
40
44
|
text: item.weight,
|
|
41
|
-
fillColor
|
|
45
|
+
fillColor
|
|
42
46
|
}, {
|
|
43
47
|
alignment: 'right',
|
|
44
48
|
text: item.scoreWeight,
|
|
45
|
-
fillColor
|
|
49
|
+
fillColor
|
|
46
50
|
}]);
|
|
47
51
|
if (hasImages) {
|
|
48
|
-
|
|
52
|
+
const imageRow = [{
|
|
49
53
|
colSpan: 4,
|
|
50
|
-
fillColor
|
|
51
|
-
stack: imageTables(rowImages)
|
|
54
|
+
fillColor,
|
|
55
|
+
stack: (0, _.imageTables)(rowImages)
|
|
52
56
|
}];
|
|
53
57
|
rows.push(imageRow);
|
|
54
58
|
}
|
|
55
59
|
if (hasComments) {
|
|
56
|
-
|
|
60
|
+
const commentsRow = [{
|
|
57
61
|
colSpan: 4,
|
|
58
|
-
fillColor
|
|
62
|
+
fillColor,
|
|
59
63
|
margin: [0, -10, 0, 0],
|
|
60
64
|
stack: [{
|
|
61
65
|
text: 'Comments:',
|
|
@@ -68,40 +72,42 @@ export var buildAuditContent = Promise.method(function (items) {
|
|
|
68
72
|
}
|
|
69
73
|
return rows;
|
|
70
74
|
});
|
|
71
|
-
}).then(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
}).then(groupTableRows => {
|
|
76
|
+
const actual = (0, _lodash.round)(group.groupActualScore, 2);
|
|
77
|
+
const max = (0, _lodash.round)(group.groupMaximumScore, 2);
|
|
78
|
+
const resultText = `${group.groupPercentageResultScore}%`;
|
|
79
|
+
const {
|
|
80
|
+
skipped
|
|
81
|
+
} = group;
|
|
82
|
+
const groupScoreText = skipped ? null : (0, _.text)(`${actual} / ${max} (${resultText})`, {
|
|
77
83
|
alignment: 'right',
|
|
78
84
|
bold: true
|
|
79
85
|
});
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
const headerText = (0, _.text)(group.title);
|
|
87
|
+
const groupHeaderTable = (0, _.table)({
|
|
82
88
|
body: [[headerText, groupScoreText]],
|
|
83
89
|
layout: 'noBorders',
|
|
84
90
|
style: 'groupHeaderTable',
|
|
85
91
|
widths: ['*', '*']
|
|
86
92
|
});
|
|
87
|
-
|
|
93
|
+
const groupTableHeader = [(0, _.text)('Question', {
|
|
88
94
|
bold: true
|
|
89
|
-
}), text('Answer', {
|
|
95
|
+
}), (0, _.text)('Answer', {
|
|
90
96
|
bold: true
|
|
91
|
-
}), text('Weight', {
|
|
97
|
+
}), (0, _.text)('Weight', {
|
|
92
98
|
alignment: 'center',
|
|
93
99
|
bold: true
|
|
94
|
-
}), text('Score', {
|
|
100
|
+
}), (0, _.text)('Score', {
|
|
95
101
|
alignment: 'right',
|
|
96
102
|
bold: true
|
|
97
103
|
})];
|
|
98
|
-
|
|
104
|
+
const groupTable = (0, _.fourColumnTable)({
|
|
99
105
|
headerRows: 0,
|
|
100
106
|
// NOTE: must flatten here as we have arrays of rows
|
|
101
|
-
body: [groupTableHeader
|
|
107
|
+
body: [groupTableHeader, ...(0, _lodash.flatten)(groupTableRows)],
|
|
102
108
|
widths: ['60%', '24%', '8%', '8%']
|
|
103
109
|
});
|
|
104
|
-
|
|
110
|
+
const hLine = (0, _.horizontalLine)();
|
|
105
111
|
return [groupHeaderTable, hLine, groupTable];
|
|
106
112
|
});
|
|
107
113
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["_lodash","require","_bluebird","_interopRequireDefault","_helpers","_","_table","buildAuditContent","exports","Promise","method","items","settings","map","group","item","index","assets","assetUrl","link","fetchImage","then","base64String","alignment","fit","image","rowImages","rows","fillColor","WHITE","LIGHT_BLUE","hasImages","isEmpty","hasComments","comments","label","text","id","questionId","push","scoreLabel","weight","scoreWeight","imageRow","colSpan","stack","imageTables","commentsRow","margin","style","groupTableRows","actual","round","groupActualScore","max","groupMaximumScore","resultText","groupPercentageResultScore","skipped","groupScoreText","bold","headerText","title","groupHeaderTable","table","body","layout","widths","groupTableHeader","groupTable","fourColumnTable","headerRows","flatten","hLine","horizontalLine"],"sources":["../../../../src/pdf/helpers/build-audit-content/index.js"],"sourcesContent":["import { flatten, isEmpty, round } from 'lodash'\r\nimport Promise from 'bluebird'\r\n\r\nimport { fetchImage } from '../../../helpers'\r\nimport { fourColumnTable, horizontalLine, imageTables, table, text } from '../'\r\nimport { LIGHT_BLUE, WHITE } from '../table'\r\n\r\nexport const buildAuditContent = Promise.method((items, settings = {}) => {\r\n return Promise.map(items, group => {\r\n return Promise.map(group.items, (item, index) => {\r\n return Promise.map(item.assets, ({ assetUrl, link }) => {\r\n // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context\r\n return fetchImage(assetUrl, settings).then(base64String => ({\r\n alignment: 'center',\r\n fit: [210, 210],\r\n image: base64String,\r\n link,\r\n }))\r\n }).then(rowImages => {\r\n const rows = []\r\n\r\n const fillColor = index % 2 === 0 ? WHITE : LIGHT_BLUE\r\n const hasImages = !isEmpty(rowImages)\r\n const hasComments = !isEmpty(item.comments)\r\n\r\n // Some audits use questionId to link a follow-up issue and its question\r\n const label = { text: item.label, fillColor, id: item.questionId }\r\n\r\n rows.push([\r\n label,\r\n { text: item.scoreLabel, fillColor },\r\n { alignment: 'center', text: item.weight, fillColor },\r\n { alignment: 'right', text: item.scoreWeight, fillColor },\r\n ])\r\n\r\n if (hasImages) {\r\n const imageRow = [\r\n {\r\n colSpan: 4,\r\n fillColor,\r\n stack: imageTables(rowImages),\r\n },\r\n ]\r\n\r\n rows.push(imageRow)\r\n }\r\n\r\n if (hasComments) {\r\n const commentsRow = [\r\n {\r\n colSpan: 4,\r\n fillColor,\r\n margin: [0, -10, 0, 0],\r\n stack: [\r\n { text: 'Comments:', style: 'commentsHeader' },\r\n { text: item.comments },\r\n ],\r\n },\r\n ]\r\n\r\n rows.push(commentsRow)\r\n }\r\n\r\n return rows\r\n })\r\n }).then(groupTableRows => {\r\n const actual = round(group.groupActualScore, 2)\r\n const max = round(group.groupMaximumScore, 2)\r\n const resultText = `${group.groupPercentageResultScore}%`\r\n\r\n const { skipped } = group\r\n\r\n const groupScoreText = skipped\r\n ? null\r\n : text(`${actual} / ${max} (${resultText})`, {\r\n alignment: 'right',\r\n bold: true,\r\n })\r\n const headerText = text(group.title)\r\n\r\n const groupHeaderTable = table({\r\n body: [[headerText, groupScoreText]],\r\n layout: 'noBorders',\r\n style: 'groupHeaderTable',\r\n widths: ['*', '*'],\r\n })\r\n\r\n const groupTableHeader = [\r\n text('Question', { bold: true }),\r\n text('Answer', { bold: true }),\r\n text('Weight', { alignment: 'center', bold: true }),\r\n text('Score', { alignment: 'right', bold: true }),\r\n ]\r\n\r\n const groupTable = fourColumnTable({\r\n headerRows: 0,\r\n // NOTE: must flatten here as we have arrays of rows\r\n body: [groupTableHeader, ...flatten(groupTableRows)],\r\n widths: ['60%', '24%', '8%', '8%'],\r\n })\r\n\r\n const hLine = horizontalLine()\r\n\r\n return [groupHeaderTable, hLine, groupTable]\r\n })\r\n })\r\n})\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.buildAuditFollowUps = buildAuditFollowUps;
|
|
8
|
+
var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
|
|
9
|
+
var _helpers = require("../../../helpers");
|
|
10
|
+
var _ = require("../");
|
|
11
|
+
var _images = require("../../../images");
|
|
12
|
+
const LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io';
|
|
13
|
+
function buildAuditFollowUps(rawFollowUpIssues = [], options = {}) {
|
|
14
|
+
const sectionTitle = [{
|
|
13
15
|
text: 'Follow-up Issues',
|
|
14
16
|
style: {
|
|
15
17
|
font: 'Gotham',
|
|
@@ -17,98 +19,98 @@ export function buildAuditFollowUps() {
|
|
|
17
19
|
margin: [0, 0, 0, 50]
|
|
18
20
|
}
|
|
19
21
|
}];
|
|
20
|
-
|
|
22
|
+
const sectionDivider = (0, _.horizontalLine)({
|
|
21
23
|
margin: [0, 0, 0, 0]
|
|
22
24
|
});
|
|
23
|
-
|
|
24
|
-
return !item.errorMessage;
|
|
25
|
-
});
|
|
25
|
+
const followUpIssues = rawFollowUpIssues.filter(item => !item.errorMessage);
|
|
26
26
|
if (!followUpIssues.length) {
|
|
27
27
|
// Show a `no follow-up issues` message if there are no follow up issues
|
|
28
28
|
return [sectionTitle, sectionDivider, {
|
|
29
29
|
text: 'No follow-up issues exist for this audit',
|
|
30
|
-
style: defaultStyles.subTitle,
|
|
30
|
+
style: _.defaultStyles.subTitle,
|
|
31
31
|
margin: [0, 5, 0, 50]
|
|
32
32
|
}];
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
timezone =
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
const {
|
|
35
|
+
timezone = 'America/New_York'
|
|
36
|
+
} = options;
|
|
37
|
+
const tableBody = [];
|
|
38
|
+
followUpIssues.forEach(item => {
|
|
39
|
+
const mappedStatus = (0, _helpers.getStatusDetails)(item.status);
|
|
40
|
+
const status = {
|
|
40
41
|
text: mappedStatus.text.toUpperCase(),
|
|
41
|
-
style:
|
|
42
|
+
style: {
|
|
43
|
+
..._.defaultStyles.small,
|
|
42
44
|
color: mappedStatus.style.color,
|
|
43
45
|
alignment: 'center'
|
|
44
|
-
}
|
|
46
|
+
}
|
|
45
47
|
};
|
|
46
|
-
|
|
48
|
+
let updatedAt = '';
|
|
47
49
|
if (item.updatedAt) {
|
|
48
|
-
|
|
49
|
-
updatedAt =
|
|
50
|
+
const format = 'MMM D h:mma'; // e.g. Jan 21 12:59am in the Audit timezone
|
|
51
|
+
updatedAt = _momentTimezone.default.tz(item.updatedAt, timezone).format(format);
|
|
50
52
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
+
const link = `${LIGHTHOUSE_BASE_URL}/reports/issues/${item.issueId}`;
|
|
54
|
+
const iconLinkCell = _images.launchIcon ? {
|
|
53
55
|
alignment: 'center',
|
|
54
56
|
fit: [8, 8],
|
|
55
|
-
image: launchIcon,
|
|
56
|
-
link
|
|
57
|
+
image: _images.launchIcon,
|
|
58
|
+
link
|
|
57
59
|
} : {
|
|
58
60
|
text: ''
|
|
59
61
|
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
const linkToDestination = item.questionId;
|
|
63
|
+
const iconJumpCell = _images.launchIcon ? {
|
|
62
64
|
alignment: 'center',
|
|
63
65
|
fit: [8, 8],
|
|
64
|
-
image: internalLinkIcon,
|
|
65
|
-
linkToDestination
|
|
66
|
+
image: _images.internalLinkIcon,
|
|
67
|
+
linkToDestination
|
|
66
68
|
} : {
|
|
67
69
|
text: ''
|
|
68
70
|
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
+
const assignees = item.assignees || [];
|
|
72
|
+
const assigneeUsername = assignees.length === 0 ? 'Unassigned' : assignees.length === 1 ?
|
|
71
73
|
// TODO Currently this gives `first last`, I don't think it can fall back to 'Unknown User' here
|
|
72
|
-
getUserFullName(assignees, 0) :
|
|
74
|
+
(0, _helpers.getUserFullName)(assignees, 0) : `${assignees.length} users`;
|
|
73
75
|
tableBody.push([iconLinkCell, {
|
|
74
76
|
text: item.issueTitle || '',
|
|
75
|
-
link
|
|
77
|
+
link,
|
|
76
78
|
style: 'small',
|
|
77
|
-
image: launchIcon
|
|
79
|
+
image: _images.launchIcon
|
|
78
80
|
}, status, {
|
|
79
81
|
text: assigneeUsername,
|
|
80
82
|
style: 'small'
|
|
81
83
|
}, iconJumpCell, {
|
|
82
84
|
text: item.questionLabel || '',
|
|
83
85
|
style: 'small',
|
|
84
|
-
linkToDestination
|
|
86
|
+
linkToDestination
|
|
85
87
|
}, {
|
|
86
88
|
text: updatedAt || '',
|
|
87
89
|
style: 'small',
|
|
88
90
|
alignment: 'right'
|
|
89
91
|
}]);
|
|
90
92
|
});
|
|
91
|
-
|
|
93
|
+
const headerLinkIconCell = _images.launchIcon ? {
|
|
92
94
|
alignment: 'center',
|
|
93
95
|
fit: [8, 8],
|
|
94
|
-
image: launchIcon
|
|
96
|
+
image: _images.launchIcon
|
|
95
97
|
} : {
|
|
96
98
|
text: ''
|
|
97
99
|
};
|
|
98
|
-
|
|
100
|
+
const headerJumpIconCell = _images.launchIcon ? {
|
|
99
101
|
alignment: 'center',
|
|
100
102
|
fit: [8, 8],
|
|
101
|
-
image: internalLinkIcon
|
|
103
|
+
image: _images.internalLinkIcon
|
|
102
104
|
} : {
|
|
103
105
|
text: ''
|
|
104
106
|
};
|
|
105
|
-
|
|
107
|
+
const headerStyle = {
|
|
106
108
|
bold: true,
|
|
107
109
|
font: 'Gotham',
|
|
108
110
|
fontSize: 8,
|
|
109
111
|
alignment: 'left'
|
|
110
112
|
};
|
|
111
|
-
|
|
113
|
+
const headerRow = [headerLinkIconCell, {
|
|
112
114
|
text: 'Issue Title',
|
|
113
115
|
style: headerStyle
|
|
114
116
|
}, {
|
|
@@ -126,8 +128,8 @@ export function buildAuditFollowUps() {
|
|
|
126
128
|
style: headerStyle,
|
|
127
129
|
alignment: 'right'
|
|
128
130
|
}];
|
|
129
|
-
|
|
130
|
-
body: [headerRow]
|
|
131
|
+
const followUpsTable = (0, _.sixColumnTable)({
|
|
132
|
+
body: [headerRow, ...tableBody],
|
|
131
133
|
style: 'titleTable',
|
|
132
134
|
widths: [6, '*', 55, 55, 6, '*', '16%'],
|
|
133
135
|
margin: [0, 0, 0, 30]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["_momentTimezone","_interopRequireDefault","require","_helpers","_","_images","LIGHTHOUSE_BASE_URL","buildAuditFollowUps","rawFollowUpIssues","options","sectionTitle","text","style","font","lineHeight","margin","sectionDivider","horizontalLine","followUpIssues","filter","item","errorMessage","length","defaultStyles","subTitle","timezone","tableBody","forEach","mappedStatus","getStatusDetails","status","toUpperCase","small","color","alignment","updatedAt","format","moment","tz","link","issueId","iconLinkCell","launchIcon","fit","image","linkToDestination","questionId","iconJumpCell","internalLinkIcon","assignees","assigneeUsername","getUserFullName","push","issueTitle","questionLabel","headerLinkIconCell","headerJumpIconCell","headerStyle","bold","fontSize","headerRow","followUpsTable","sixColumnTable","body","widths"],"sources":["../../../../src/pdf/helpers/build-audit-follow-ups/index.js"],"sourcesContent":["import moment from 'moment-timezone'\r\nimport { getStatusDetails, getUserFullName } from '../../../helpers'\r\nimport { defaultStyles, horizontalLine, sixColumnTable } from '../'\r\nimport { launchIcon, internalLinkIcon } from '../../../images'\r\n\r\nconst LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io'\r\n\r\nexport function buildAuditFollowUps(rawFollowUpIssues = [], options = {}) {\r\n const sectionTitle = [\r\n {\r\n text: 'Follow-up Issues',\r\n style: {\r\n font: 'Gotham',\r\n lineHeight: 1.1,\r\n margin: [0, 0, 0, 50],\r\n },\r\n },\r\n ]\r\n const sectionDivider = horizontalLine({ margin: [0, 0, 0, 0] })\r\n\r\n const followUpIssues = rawFollowUpIssues.filter(item => !item.errorMessage)\r\n if (!followUpIssues.length) {\r\n // Show a `no follow-up issues` message if there are no follow up issues\r\n return [\r\n sectionTitle,\r\n sectionDivider,\r\n {\r\n text: 'No follow-up issues exist for this audit',\r\n style: defaultStyles.subTitle,\r\n margin: [0, 5, 0, 50],\r\n },\r\n ]\r\n }\r\n\r\n const { timezone = 'America/New_York' } = options\r\n const tableBody = []\r\n followUpIssues.forEach(item => {\r\n const mappedStatus = getStatusDetails(item.status)\r\n const status = {\r\n text: mappedStatus.text.toUpperCase(),\r\n style: {\r\n ...defaultStyles.small,\r\n color: mappedStatus.style.color,\r\n alignment: 'center',\r\n },\r\n }\r\n\r\n let updatedAt = ''\r\n if (item.updatedAt) {\r\n const format = 'MMM D h:mma' // e.g. Jan 21 12:59am in the Audit timezone\r\n updatedAt = moment.tz(item.updatedAt, timezone).format(format)\r\n }\r\n\r\n const link = `${LIGHTHOUSE_BASE_URL}/reports/issues/${item.issueId}`\r\n const iconLinkCell = launchIcon\r\n ? { alignment: 'center', fit: [8, 8], image: launchIcon, link }\r\n : { text: '' }\r\n\r\n const linkToDestination = item.questionId\r\n const iconJumpCell = launchIcon\r\n ? {\r\n alignment: 'center',\r\n fit: [8, 8],\r\n image: internalLinkIcon,\r\n linkToDestination,\r\n }\r\n : { text: '' }\r\n\r\n const assignees = item.assignees || []\r\n const assigneeUsername =\r\n assignees.length === 0\r\n ? 'Unassigned'\r\n : assignees.length === 1\r\n ? // TODO Currently this gives `first last`, I don't think it can fall back to 'Unknown User' here\r\n getUserFullName(assignees, 0)\r\n : `${assignees.length} users`\r\n\r\n tableBody.push([\r\n iconLinkCell,\r\n { text: item.issueTitle || '', link, style: 'small', image: launchIcon },\r\n status,\r\n { text: assigneeUsername, style: 'small' },\r\n iconJumpCell,\r\n { text: item.questionLabel || '', style: 'small', linkToDestination },\r\n { text: updatedAt || '', style: 'small', alignment: 'right' },\r\n ])\r\n })\r\n\r\n const headerLinkIconCell = launchIcon\r\n ? { alignment: 'center', fit: [8, 8], image: launchIcon }\r\n : { text: '' }\r\n\r\n const headerJumpIconCell = launchIcon\r\n ? { alignment: 'center', fit: [8, 8], image: internalLinkIcon }\r\n : { text: '' }\r\n\r\n const headerStyle = {\r\n bold: true,\r\n font: 'Gotham',\r\n fontSize: 8,\r\n alignment: 'left',\r\n }\r\n\r\n const headerRow = [\r\n headerLinkIconCell,\r\n { text: 'Issue Title', style: headerStyle },\r\n { text: 'Status', style: headerStyle, alignment: 'center' },\r\n { text: 'Assignees', style: headerStyle },\r\n headerJumpIconCell,\r\n { text: 'Audit Question', style: headerStyle },\r\n { text: 'Last Updated', style: headerStyle, alignment: 'right' },\r\n ]\r\n\r\n const followUpsTable = sixColumnTable({\r\n body: [headerRow, ...tableBody],\r\n style: 'titleTable',\r\n widths: [6, '*', 55, 55, 6, '*', '16%'],\r\n margin: [0, 0, 0, 30],\r\n })\r\n\r\n return [sectionTitle, sectionDivider, followUpsTable]\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,36 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.buildLocationScansContent = exports.buildLocationScansBoundaries = void 0;
|
|
8
|
+
var _lodash = require("lodash");
|
|
9
|
+
var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
|
|
10
|
+
const buildLocationScansBoundaries = (start, timezone) => {
|
|
11
|
+
const firstBoundary = _momentTimezone.default.tz(start, timezone);
|
|
12
|
+
const boundaries = [];
|
|
6
13
|
// add 9 boundaries (3 hours apart) to an array
|
|
7
14
|
// these will mark the edges of 8 3-hour buckets of scan events
|
|
8
15
|
// ex: [start, start+3hrs, start+6hrs, ..., start+24hrs]
|
|
9
16
|
boundaries.push(firstBoundary);
|
|
10
|
-
for (
|
|
11
|
-
|
|
12
|
-
|
|
17
|
+
for (let i = 1; i < 9; i++) {
|
|
18
|
+
const intervalSize = 3 * i;
|
|
19
|
+
const nextBoundary = (0, _momentTimezone.default)(firstBoundary).add(intervalSize, 'hours');
|
|
13
20
|
boundaries.push(nextBoundary);
|
|
14
21
|
}
|
|
15
22
|
return boundaries;
|
|
16
23
|
};
|
|
17
|
-
|
|
24
|
+
exports.buildLocationScansBoundaries = buildLocationScansBoundaries;
|
|
25
|
+
const buildLocationScansContent = (boundaries, events, timezone) => {
|
|
18
26
|
// loop through boundaries filtering for events between the current boundary and the next one
|
|
19
27
|
// skip the last one as it's the end and has no "next one"
|
|
20
28
|
// ex: [interval1Events, interval2Events, ..., interval8Events] where interval1Events is an array
|
|
21
29
|
// of events that start on or after boundary 1 and before boundary 2
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
const eventsArray = [];
|
|
31
|
+
for (let i = 0; i < boundaries.length - 1; i++) {
|
|
32
|
+
const eventsInThisInterval = (0, _lodash.filter)(events, function (event) {
|
|
33
|
+
const eventMoment = _momentTimezone.default.tz(event.timestamp, timezone);
|
|
26
34
|
return eventMoment.isSameOrAfter(boundaries[i]) && eventMoment.isBefore(boundaries[i + 1]);
|
|
27
35
|
});
|
|
28
36
|
// add events to interval
|
|
29
37
|
eventsArray.push(eventsInThisInterval);
|
|
30
|
-
};
|
|
31
|
-
for (var i = 0; i < boundaries.length - 1; i++) {
|
|
32
|
-
_loop(i);
|
|
33
38
|
}
|
|
34
39
|
return eventsArray;
|
|
35
40
|
};
|
|
41
|
+
exports.buildLocationScansContent = buildLocationScansContent;
|
|
36
42
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["_lodash","require","_momentTimezone","_interopRequireDefault","buildLocationScansBoundaries","start","timezone","firstBoundary","moment","tz","boundaries","push","i","intervalSize","nextBoundary","add","exports","buildLocationScansContent","events","eventsArray","length","eventsInThisInterval","filter","event","eventMoment","timestamp","isSameOrAfter","isBefore"],"sources":["../../../../src/pdf/helpers/build-location-scans-content/index.js"],"sourcesContent":["import { filter } from 'lodash'\r\nimport moment from 'moment-timezone'\r\n\r\nexport const buildLocationScansBoundaries = (start, timezone) => {\r\n const firstBoundary = moment.tz(start, timezone)\r\n const boundaries = []\r\n // add 9 boundaries (3 hours apart) to an array\r\n // these will mark the edges of 8 3-hour buckets of scan events\r\n // ex: [start, start+3hrs, start+6hrs, ..., start+24hrs]\r\n boundaries.push(firstBoundary)\r\n for (let i = 1; i < 9; i++) {\r\n const intervalSize = 3 * i\r\n const nextBoundary = moment(firstBoundary).add(intervalSize, 'hours')\r\n boundaries.push(nextBoundary)\r\n }\r\n return boundaries\r\n}\r\n\r\nexport const buildLocationScansContent = (boundaries, events, timezone) => {\r\n // loop through boundaries filtering for events between the current boundary and the next one\r\n // skip the last one as it's the end and has no \"next one\"\r\n // ex: [interval1Events, interval2Events, ..., interval8Events] where interval1Events is an array\r\n // of events that start on or after boundary 1 and before boundary 2\r\n const eventsArray = []\r\n for (let i = 0; i < boundaries.length - 1; i++) {\r\n const eventsInThisInterval = filter(events, function(event) {\r\n const eventMoment = moment.tz(event.timestamp, timezone)\r\n return (\r\n eventMoment.isSameOrAfter(boundaries[i]) &&\r\n eventMoment.isBefore(boundaries[i + 1])\r\n )\r\n })\r\n // add events to interval\r\n eventsArray.push(eventsInThisInterval)\r\n }\r\n return eventsArray\r\n}\r\n"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEO,MAAMG,4BAA4B,GAAGA,CAACC,KAAK,EAAEC,QAAQ,KAAK;EAC/D,MAAMC,aAAa,GAAGC,uBAAM,CAACC,EAAE,CAACJ,KAAK,EAAEC,QAAQ,CAAC;EAChD,MAAMI,UAAU,GAAG,EAAE;EACrB;EACA;EACA;EACAA,UAAU,CAACC,IAAI,CAACJ,aAAa,CAAC;EAC9B,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;IAC1B,MAAMC,YAAY,GAAG,CAAC,GAAGD,CAAC;IAC1B,MAAME,YAAY,GAAG,IAAAN,uBAAM,EAACD,aAAa,CAAC,CAACQ,GAAG,CAACF,YAAY,EAAE,OAAO,CAAC;IACrEH,UAAU,CAACC,IAAI,CAACG,YAAY,CAAC;EAC/B;EACA,OAAOJ,UAAU;AACnB,CAAC;AAAAM,OAAA,CAAAZ,4BAAA,GAAAA,4BAAA;AAEM,MAAMa,yBAAyB,GAAGA,CAACP,UAAU,EAAEQ,MAAM,EAAEZ,QAAQ,KAAK;EACzE;EACA;EACA;EACA;EACA,MAAMa,WAAW,GAAG,EAAE;EACtB,KAAK,IAAIP,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,UAAU,CAACU,MAAM,GAAG,CAAC,EAAER,CAAC,EAAE,EAAE;IAC9C,MAAMS,oBAAoB,GAAG,IAAAC,cAAM,EAACJ,MAAM,EAAE,UAASK,KAAK,EAAE;MAC1D,MAAMC,WAAW,GAAGhB,uBAAM,CAACC,EAAE,CAACc,KAAK,CAACE,SAAS,EAAEnB,QAAQ,CAAC;MACxD,OACEkB,WAAW,CAACE,aAAa,CAAChB,UAAU,CAACE,CAAC,CAAC,CAAC,IACxCY,WAAW,CAACG,QAAQ,CAACjB,UAAU,CAACE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3C,CAAC,CAAC;IACF;IACAO,WAAW,CAACR,IAAI,CAACU,oBAAoB,CAAC;EACxC;EACA,OAAOF,WAAW;AACpB,CAAC;AAAAH,OAAA,CAAAC,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|