@lighthouse/common 4.31.1-canary.8 → 4.32.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.
@@ -47,9 +47,7 @@ function buildAuditPdf(pdfOptions, data) {
47
47
  const {
48
48
  flags = {}
49
49
  } = pdfOptions;
50
- console.log('buildAuditPdf', {
51
- version: '4.31.1-canary.8'
52
- });
50
+ console.info('buildAuditPdf');
53
51
  const sequenceId = entity.sequenceId;
54
52
  const timestamp = entity.createdAt;
55
53
  const title = entity.title || 'Unknown';
@@ -84,9 +82,6 @@ function generateContent(data, flags) {
84
82
  title = 'Unknown'
85
83
  } = entity;
86
84
  const entityDetails = (0, _helpers2.getAuditEntryDetails)(data);
87
- console.log('buildAuditPdf', {
88
- rolloutAuditFollowUps
89
- });
90
85
  const {
91
86
  gpsText,
92
87
  groupedData,
@@ -18,10 +18,6 @@ var _images = require("../../../images");
18
18
  const LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io';
19
19
 
20
20
  function buildAuditFollowUps(rawFollowUpIssues = [], options = {}) {
21
- console.log('buildAuditFollowUps', {
22
- rawFollowUpIssues,
23
- options
24
- });
25
21
  const sectionTitle = [{
26
22
  text: 'Follow-up Issues',
27
23
  style: {
@@ -84,8 +80,8 @@ function buildAuditFollowUps(rawFollowUpIssues = [], options = {}) {
84
80
  text: ''
85
81
  };
86
82
  const assignees = item.assignees || [];
87
- const assigneeUsername = assignees.length === 0 ? 'Unassigned' : assignees.length === 1 // TODO Currently this gives `first last`, I don't think it can fall back to 'Unknown User' here
88
- ? (0, _helpers.getUserFullName)(assignees, 0) : `${assignees.length} users`;
83
+ const assigneeUsername = assignees.length === 0 ? 'Unassigned' : assignees.length === 1 ? // TODO Currently this gives `first last`, I don't think it can fall back to 'Unknown User' here
84
+ (0, _helpers.getUserFullName)(assignees, 0) : `${assignees.length} users`;
89
85
  tableBody.push([iconLinkCell, {
90
86
  text: item.issueTitle || '',
91
87
  link,
@@ -148,8 +144,5 @@ function buildAuditFollowUps(rawFollowUpIssues = [], options = {}) {
148
144
  widths: [6, '*', 55, 55, 6, '*', '16%'],
149
145
  margin: [0, 0, 0, 30]
150
146
  });
151
- console.log('buildAuditFollowUps', {
152
- followUpsTable
153
- });
154
147
  return [sectionTitle, sectionDivider, followUpsTable];
155
148
  }
@@ -45,6 +45,7 @@ function* occurrenceIntervalsGenerator(props) {
45
45
  isInitial,
46
46
  start,
47
47
  options,
48
- timezone
48
+ timezone,
49
+ type
49
50
  });
50
51
  }
@@ -81,7 +81,7 @@ function* generateRepeatingSchedule(props) {
81
81
  interval: occurrenceInterval,
82
82
  type: _scheduling.IntervalTypes.Occurrence
83
83
  };
84
- } // NOTE: we must reset isInitial to true follwing the first service
84
+ } // NOTE: we must reset isInitial to true following the first service
85
85
  // interval otherwise the occurrence will not start exactly on the next
86
86
  // service interval start time
87
87
 
@@ -19,7 +19,8 @@ function* getNext({
19
19
  isInitial,
20
20
  options,
21
21
  start,
22
- timezone
22
+ timezone,
23
+ type
23
24
  }) {
24
25
  const {
25
26
  duration,
@@ -37,9 +38,24 @@ function* getNext({
37
38
  let dateCursor = initial ? _momentTimezone.default.tz(start, timezone).valueOf() : _momentTimezone.default.tz(start, timezone).add(1, _scheduling.Unit.Millisecond).valueOf();
38
39
 
39
40
  while (dateCursor < end) {
40
- const nextOccurrenceEnd = _momentTimezone.default.tz(dateCursor, timezone).add(frequencyValue, frequencyUnit).valueOf();
41
+ let nextOccurrenceStart;
42
+ let nextOccurrenceEnd;
41
43
 
42
- const nextOccurrenceStart = _momentTimezone.default.tz(nextOccurrenceEnd, timezone).subtract(durationValue, durationUnit).valueOf();
44
+ if (type === _scheduling.StrategyTypes.Stopwatch) {
45
+ nextOccurrenceStart = dateCursor;
46
+ nextOccurrenceEnd = _momentTimezone.default.tz(dateCursor, timezone).add(durationValue, durationUnit).valueOf();
47
+ } else {
48
+ nextOccurrenceEnd = _momentTimezone.default.tz(dateCursor, timezone).add(frequencyValue, frequencyUnit).valueOf();
49
+
50
+ const nextOccurrenceStartByBackCalculation = _momentTimezone.default.tz(nextOccurrenceEnd, timezone).subtract(durationValue, durationUnit);
51
+
52
+ const earliestNextOccurrenceStart = _momentTimezone.default.tz(dateCursor, timezone); // NOTE: this is to ensure that the next occurrence start is always
53
+ // greater than or equal to the date cursor. Moment js handles month addition and subtraction
54
+ // with estimations (Dec 31st + 2 months gives Feb 28th/29th). This can lead to inaccurate start times when calculating forwards then backwards at the end of the month.
55
+
56
+
57
+ nextOccurrenceStart = _momentTimezone.default.max(earliestNextOccurrenceStart, nextOccurrenceStartByBackCalculation).valueOf();
58
+ }
43
59
 
44
60
  if (nextOccurrenceEnd <= nextOccurrenceStart || nextOccurrenceEnd > end) {
45
61
  return;
@@ -39,9 +39,7 @@ export function buildAuditPdf(pdfOptions, data) {
39
39
  timezone = data.timezone;
40
40
  var _pdfOptions$flags = pdfOptions.flags,
41
41
  flags = _pdfOptions$flags === void 0 ? {} : _pdfOptions$flags;
42
- console.log('buildAuditPdf', {
43
- version: '4.31.1-canary.8'
44
- });
42
+ console.info('buildAuditPdf');
45
43
  var sequenceId = entity.sequenceId;
46
44
  var timestamp = entity.createdAt;
47
45
  var title = entity.title || 'Unknown';
@@ -77,9 +75,6 @@ function generateContent(data, flags) {
77
75
  _entity$title = entity.title,
78
76
  title = _entity$title === void 0 ? 'Unknown' : _entity$title;
79
77
  var entityDetails = getAuditEntryDetails(data);
80
- console.log('buildAuditPdf', {
81
- rolloutAuditFollowUps: rolloutAuditFollowUps
82
- });
83
78
  var gpsText = entityDetails.gpsText,
84
79
  groupedData = entityDetails.groupedData,
85
80
  locationText = entityDetails.locationText,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/pdf/audit/index.js"],"names":["Promise","isEmpty","round","buildAuditContent","buildAuditFollowUps","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","text","twoColumnTable","getAuditEntryDetails","buildAuditPdf","pdfOptions","data","entity","timezone","flags","console","log","version","sequenceId","timestamp","createdAt","title","fileTitle","generateContent","then","content","type","catch","err","Error","message","rolloutAuditFollowUps","followUps","footerFields","gps","headerFields","score","entityDetails","gpsText","groupedData","locationText","referenceValue","timezoneHourTime","scoreText","target","targetServiceLevel","renderTargetFields","headerTitle","style","headerScore","alignment","firstRow","subTitle","headerSubTitle","colSpan","secondRow","reverseGeocoded","address","renderHeaderAddress","dummyColumn","headerAddress","renderThirdRow","thirdRow","serviceLevelBelow","serviceLevelText","scoreServiceLevelSubTitle","truncatedTargetPercent","scoreTargetText","scoreTargetSubTitle","scoreBreakdown","actual","max","scorePercentage","scoreTitle","body","titleTable","layout","widths","margin","totalScoreTable","hLineTop","hLineBottom","followUpItems","promises","entry","items","footerTemplate","formGroups","headerTemplate","auditItemsTitle","font","lineHeight","props"],"mappings":"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","sourcesContent":["import Promise from 'bluebird'\nimport { isEmpty, round } from 'lodash'\n\nimport {\n buildAuditContent,\n buildAuditFollowUps,\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n text,\n twoColumnTable,\n} from '../helpers'\n\nimport { getAuditEntryDetails } from '../../helpers'\n\n/**\n * buildAuditPdf\n *\n * @param {object} pdfOptions - the pdf options\n * @param {string} pdfOptions.fileTitle - pdf file title\n * @param {function} pdfOptions.footer - function executed to generate footer\n * @param {function} pdfOptions.header - function executed to generate header\n * @param {string} pdfOptions.logoUrl - pdf logo url\n * @param {array} pdfOptions.pageMargins - pdf page margins\n * @param {string} pdfOptions.pageOrientation - pdf page orientation\n * @param {string} pdfOptions.pageSize - pdf page size\n * @param {object} pdfOptions.styles - pdf styles\n * @param {object} pdfOptions.title - pdf title\n * @param {object} pdfOptions.flags - flags to conditionally render parts of the pdf\n * @param {object} data - pdf data\n * @param {object} data.entity - audit document\n * @param {object} data.locations - locations documents\n * @param {object} data.settings - settings properties\n * @param {string} data.settings.awsS3BaseUrl - aws S3 base url\n * @param {string} data.settings.cloudinaryBaseUrl - cloudinary base url\n * @param {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildAuditPdf(pdfOptions, data) {\n const { entity, timezone } = data\n const { flags = {} } = pdfOptions\n\n console.log('buildAuditPdf', {\n version: '4.31.1-canary.8',\n })\n \n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n const fileTitle = `Audit Report - ${title}`\n\n return generateContent(data, flags)\n .then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Audit',\n ...pdfOptions,\n })\n )\n .catch(err => {\n throw new Error(`BuildAuditPdfError: ${err.message}`)\n })\n}\n\nfunction generateContent(data, flags) {\n const { rolloutAuditFollowUps } = flags\n const { entity } = data\n\n const {\n followUps = [],\n footerFields = {},\n gps = {},\n headerFields = {},\n score = {},\n timezone,\n title = 'Unknown',\n } = entity\n\n const entityDetails = getAuditEntryDetails(data)\n \n console.log('buildAuditPdf', {\n rolloutAuditFollowUps,\n })\n\n const {\n gpsText,\n groupedData,\n locationText,\n referenceValue,\n timezoneHourTime,\n scoreText,\n target,\n targetServiceLevel,\n } = entityDetails\n\n const renderTargetFields = !!targetServiceLevel\n const headerTitle = text(title, { style: 'title' })\n const headerScore = text(scoreText, { alignment: 'right', style: 'title' })\n const firstRow = [headerTitle, headerScore]\n const subTitle = `${locationText ||\n gpsText} - ${timezoneHourTime} by ${referenceValue}`\n\n let headerSubTitle = text(subTitle, { colSpan: 2, style: 'subTitle' })\n let secondRow = [headerSubTitle]\n\n const reverseGeocoded = gps.reverseGeocoded\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const renderHeaderAddress = !isEmpty(reverseGeocoded)\n const dummyColumn = text(' ', { style: 'small' })\n\n let headerAddress = text(address, { colSpan: 2, style: 'small' })\n const renderThirdRow = renderHeaderAddress || renderTargetFields\n let thirdRow = renderHeaderAddress ? [headerAddress] : []\n\n if (renderTargetFields) {\n headerSubTitle = text(subTitle, { style: 'subTitle' })\n\n const serviceLevelBelow = targetServiceLevel === 'below'\n const serviceLevelText =\n targetServiceLevel === 'above'\n ? 'Above Target'\n : targetServiceLevel === 'on'\n ? 'On Target'\n : targetServiceLevel === 'below'\n ? 'Below Target'\n : ''\n\n const scoreServiceLevelSubTitle = text(serviceLevelText, {\n alignment: 'right',\n style: serviceLevelBelow ? 'serviceLevelBelow' : 'serviceLevelAboveOrOn',\n })\n\n secondRow = [headerSubTitle, scoreServiceLevelSubTitle]\n headerAddress = text(address, { style: 'small' })\n\n const truncatedTargetPercent = round(target, 2)\n const scoreTargetText = `(Target - ${truncatedTargetPercent}%)`\n const scoreTargetSubTitle = text(scoreTargetText, {\n alignment: 'right',\n style: 'subTitle',\n })\n\n thirdRow = renderHeaderAddress\n ? [headerAddress, scoreTargetSubTitle]\n : [dummyColumn, scoreTargetSubTitle]\n }\n\n const scoreBreakdown = text(\n `${round(score.actual, 2)} / ${round(score.max, 2)}`,\n {\n alignment: 'right',\n style: 'totalScore',\n }\n )\n const scorePercentage = text(scoreText, {\n alignment: 'right',\n colSpan: 2,\n style: 'totalAuditScore',\n })\n const scoreTitle = text('Total Score', { style: 'totalScore' })\n\n const body = renderThirdRow\n ? [firstRow, secondRow, thirdRow]\n : [firstRow, secondRow]\n\n const titleTable = twoColumnTable({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n widths: ['*', 100],\n margin: [0, 0, 0, 30],\n })\n\n const totalScoreTable = twoColumnTable({\n body: [[scoreTitle, scoreBreakdown], [scorePercentage]],\n layout: 'noBorders',\n widths: ['*', 100],\n })\n\n const hLineTop = horizontalLine({ margin: [0, 10, 0, 0] })\n const hLineBottom = horizontalLine()\n\n const followUpItems = rolloutAuditFollowUps\n ? buildAuditFollowUps(followUps, { timezone })\n : []\n\n const promises = {\n entry: buildAuditContent(groupedData.items, { rolloutAuditFollowUps }),\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = rolloutAuditFollowUps\n ? [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\n ]\n : []\n\n return Promise.props(promises)\n .then(({ entry, footerTemplate, headerTemplate }) => [\n titleTable,\n followUpItems,\n ...auditItemsTitle,\n ...headerTemplate,\n ...entry,\n hLineTop,\n totalScoreTable,\n hLineBottom,\n ...footerTemplate,\n ])\n .catch(err => {\n throw new Error(`GenerateContentError: ${err.message}`)\n })\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/pdf/audit/index.js"],"names":["Promise","isEmpty","round","buildAuditContent","buildAuditFollowUps","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","text","twoColumnTable","getAuditEntryDetails","buildAuditPdf","pdfOptions","data","entity","timezone","flags","console","info","sequenceId","timestamp","createdAt","title","fileTitle","generateContent","then","content","type","catch","err","Error","message","rolloutAuditFollowUps","followUps","footerFields","gps","headerFields","score","entityDetails","gpsText","groupedData","locationText","referenceValue","timezoneHourTime","scoreText","target","targetServiceLevel","renderTargetFields","headerTitle","style","headerScore","alignment","firstRow","subTitle","headerSubTitle","colSpan","secondRow","reverseGeocoded","address","renderHeaderAddress","dummyColumn","headerAddress","renderThirdRow","thirdRow","serviceLevelBelow","serviceLevelText","scoreServiceLevelSubTitle","truncatedTargetPercent","scoreTargetText","scoreTargetSubTitle","scoreBreakdown","actual","max","scorePercentage","scoreTitle","body","titleTable","layout","widths","margin","totalScoreTable","hLineTop","hLineBottom","followUpItems","promises","entry","items","footerTemplate","formGroups","headerTemplate","auditItemsTitle","font","lineHeight","props"],"mappings":"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","sourcesContent":["import Promise from 'bluebird'\nimport { isEmpty, round } from 'lodash'\n\nimport {\n buildAuditContent,\n buildAuditFollowUps,\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n text,\n twoColumnTable,\n} from '../helpers'\n\nimport { getAuditEntryDetails } from '../../helpers'\n\n/**\n * buildAuditPdf\n *\n * @param {object} pdfOptions - the pdf options\n * @param {string} pdfOptions.fileTitle - pdf file title\n * @param {function} pdfOptions.footer - function executed to generate footer\n * @param {function} pdfOptions.header - function executed to generate header\n * @param {string} pdfOptions.logoUrl - pdf logo url\n * @param {array} pdfOptions.pageMargins - pdf page margins\n * @param {string} pdfOptions.pageOrientation - pdf page orientation\n * @param {string} pdfOptions.pageSize - pdf page size\n * @param {object} pdfOptions.styles - pdf styles\n * @param {object} pdfOptions.title - pdf title\n * @param {object} pdfOptions.flags - flags to conditionally render parts of the pdf\n * @param {object} data - pdf data\n * @param {object} data.entity - audit document\n * @param {object} data.locations - locations documents\n * @param {object} data.settings - settings properties\n * @param {string} data.settings.awsS3BaseUrl - aws S3 base url\n * @param {string} data.settings.cloudinaryBaseUrl - cloudinary base url\n * @param {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildAuditPdf(pdfOptions, data) {\n const { entity, timezone } = data\n const { flags = {} } = pdfOptions\n\n console.info('buildAuditPdf')\n\n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n const fileTitle = `Audit Report - ${title}`\n\n return generateContent(data, flags)\n .then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Audit',\n ...pdfOptions,\n })\n )\n .catch(err => {\n throw new Error(`BuildAuditPdfError: ${err.message}`)\n })\n}\n\nfunction generateContent(data, flags) {\n const { rolloutAuditFollowUps } = flags\n const { entity } = data\n\n const {\n followUps = [],\n footerFields = {},\n gps = {},\n headerFields = {},\n score = {},\n timezone,\n title = 'Unknown',\n } = entity\n\n const entityDetails = getAuditEntryDetails(data)\n\n const {\n gpsText,\n groupedData,\n locationText,\n referenceValue,\n timezoneHourTime,\n scoreText,\n target,\n targetServiceLevel,\n } = entityDetails\n\n const renderTargetFields = !!targetServiceLevel\n const headerTitle = text(title, { style: 'title' })\n const headerScore = text(scoreText, { alignment: 'right', style: 'title' })\n const firstRow = [headerTitle, headerScore]\n const subTitle = `${locationText ||\n gpsText} - ${timezoneHourTime} by ${referenceValue}`\n\n let headerSubTitle = text(subTitle, { colSpan: 2, style: 'subTitle' })\n let secondRow = [headerSubTitle]\n\n const reverseGeocoded = gps.reverseGeocoded\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const renderHeaderAddress = !isEmpty(reverseGeocoded)\n const dummyColumn = text(' ', { style: 'small' })\n\n let headerAddress = text(address, { colSpan: 2, style: 'small' })\n const renderThirdRow = renderHeaderAddress || renderTargetFields\n let thirdRow = renderHeaderAddress ? [headerAddress] : []\n\n if (renderTargetFields) {\n headerSubTitle = text(subTitle, { style: 'subTitle' })\n\n const serviceLevelBelow = targetServiceLevel === 'below'\n const serviceLevelText =\n targetServiceLevel === 'above'\n ? 'Above Target'\n : targetServiceLevel === 'on'\n ? 'On Target'\n : targetServiceLevel === 'below'\n ? 'Below Target'\n : ''\n\n const scoreServiceLevelSubTitle = text(serviceLevelText, {\n alignment: 'right',\n style: serviceLevelBelow ? 'serviceLevelBelow' : 'serviceLevelAboveOrOn',\n })\n\n secondRow = [headerSubTitle, scoreServiceLevelSubTitle]\n headerAddress = text(address, { style: 'small' })\n\n const truncatedTargetPercent = round(target, 2)\n const scoreTargetText = `(Target - ${truncatedTargetPercent}%)`\n const scoreTargetSubTitle = text(scoreTargetText, {\n alignment: 'right',\n style: 'subTitle',\n })\n\n thirdRow = renderHeaderAddress\n ? [headerAddress, scoreTargetSubTitle]\n : [dummyColumn, scoreTargetSubTitle]\n }\n\n const scoreBreakdown = text(\n `${round(score.actual, 2)} / ${round(score.max, 2)}`,\n {\n alignment: 'right',\n style: 'totalScore',\n }\n )\n const scorePercentage = text(scoreText, {\n alignment: 'right',\n colSpan: 2,\n style: 'totalAuditScore',\n })\n const scoreTitle = text('Total Score', { style: 'totalScore' })\n\n const body = renderThirdRow\n ? [firstRow, secondRow, thirdRow]\n : [firstRow, secondRow]\n\n const titleTable = twoColumnTable({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n widths: ['*', 100],\n margin: [0, 0, 0, 30],\n })\n\n const totalScoreTable = twoColumnTable({\n body: [[scoreTitle, scoreBreakdown], [scorePercentage]],\n layout: 'noBorders',\n widths: ['*', 100],\n })\n\n const hLineTop = horizontalLine({ margin: [0, 10, 0, 0] })\n const hLineBottom = horizontalLine()\n\n const followUpItems = rolloutAuditFollowUps\n ? buildAuditFollowUps(followUps, { timezone })\n : []\n\n const promises = {\n entry: buildAuditContent(groupedData.items, { rolloutAuditFollowUps }),\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = rolloutAuditFollowUps\n ? [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\n ]\n : []\n\n return Promise.props(promises)\n .then(({ entry, footerTemplate, headerTemplate }) => [\n titleTable,\n followUpItems,\n ...auditItemsTitle,\n ...headerTemplate,\n ...entry,\n hLineTop,\n totalScoreTable,\n hLineBottom,\n ...footerTemplate,\n ])\n .catch(err => {\n throw new Error(`GenerateContentError: ${err.message}`)\n })\n}\n"],"file":"index.js"}
@@ -12,10 +12,6 @@ var LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io';
12
12
  export function buildAuditFollowUps() {
13
13
  var rawFollowUpIssues = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
14
14
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
15
- console.log('buildAuditFollowUps', {
16
- rawFollowUpIssues: rawFollowUpIssues,
17
- options: options
18
- });
19
15
  var sectionTitle = [{
20
16
  text: 'Follow-up Issues',
21
17
  style: {
@@ -79,8 +75,8 @@ export function buildAuditFollowUps() {
79
75
  text: ''
80
76
  };
81
77
  var assignees = item.assignees || [];
82
- var assigneeUsername = assignees.length === 0 ? 'Unassigned' : assignees.length === 1 // TODO Currently this gives `first last`, I don't think it can fall back to 'Unknown User' here
83
- ? getUserFullName(assignees, 0) : "".concat(assignees.length, " users");
78
+ var assigneeUsername = assignees.length === 0 ? 'Unassigned' : assignees.length === 1 ? // TODO Currently this gives `first last`, I don't think it can fall back to 'Unknown User' here
79
+ getUserFullName(assignees, 0) : "".concat(assignees.length, " users");
84
80
  tableBody.push([iconLinkCell, {
85
81
  text: item.issueTitle || '',
86
82
  link: link,
@@ -143,9 +139,6 @@ export function buildAuditFollowUps() {
143
139
  widths: [6, '*', 55, 55, 6, '*', '16%'],
144
140
  margin: [0, 0, 0, 30]
145
141
  });
146
- console.log('buildAuditFollowUps', {
147
- followUpsTable: followUpsTable
148
- });
149
142
  return [sectionTitle, sectionDivider, followUpsTable];
150
143
  }
151
144
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/pdf/helpers/build-audit-follow-ups/index.js"],"names":["moment","getStatusDetails","getUserFullName","defaultStyles","horizontalLine","sixColumnTable","launchIcon","internalLinkIcon","LIGHTHOUSE_BASE_URL","buildAuditFollowUps","rawFollowUpIssues","options","console","log","sectionTitle","text","style","font","lineHeight","margin","sectionDivider","followUpIssues","filter","item","errorMessage","length","subTitle","timezone","tableBody","forEach","mappedStatus","status","toUpperCase","small","color","alignment","updatedAt","format","tz","link","issueId","iconLinkCell","fit","image","linkToDestination","questionId","iconJumpCell","assignees","assigneeUsername","push","issueTitle","questionLabel","headerLinkIconCell","headerJumpIconCell","headerStyle","bold","fontSize","headerRow","followUpsTable","body","widths"],"mappings":";;;;;;AAAA,OAAOA,MAAP,MAAmB,iBAAnB;AACA,SAASC,gBAAT,EAA2BC,eAA3B,QAAkD,kBAAlD;AACA,SAASC,aAAT,EAAwBC,cAAxB,EAAwCC,cAAxC,QAA8D,KAA9D;AACA,SAASC,UAAT,EAAqBC,gBAArB,QAA6C,iBAA7C;AAEA,IAAMC,mBAAmB,GAAG,2BAA5B;AAEA,OAAO,SAASC,mBAAT,GAAmE;AAAA,MAAtCC,iBAAsC,uEAAlB,EAAkB;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AACxEC,EAAAA,OAAO,CAACC,GAAR,CAAY,qBAAZ,EAAmC;AACjCH,IAAAA,iBAAiB,EAAjBA,iBADiC;AAEjCC,IAAAA,OAAO,EAAPA;AAFiC,GAAnC;AAKA,MAAMG,YAAY,GAAG,CACnB;AACEC,IAAAA,IAAI,EAAE,kBADR;AAEEC,IAAAA,KAAK,EAAE;AACLC,MAAAA,IAAI,EAAE,QADD;AAELC,MAAAA,UAAU,EAAE,GAFP;AAGLC,MAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,EAAV;AAHH;AAFT,GADmB,CAArB;AAUA,MAAMC,cAAc,GAAGhB,cAAc,CAAC;AAAEe,IAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV;AAAV,GAAD,CAArC;AAEA,MAAME,cAAc,GAAGX,iBAAiB,CAACY,MAAlB,CAAyB,UAAAC,IAAI;AAAA,WAAI,CAACA,IAAI,CAACC,YAAV;AAAA,GAA7B,CAAvB;;AACA,MAAI,CAACH,cAAc,CAACI,MAApB,EAA4B;AAC1B;AACA,WAAO,CACLX,YADK,EAELM,cAFK,EAGL;AACEL,MAAAA,IAAI,EAAE,0CADR;AAEEC,MAAAA,KAAK,EAAEb,aAAa,CAACuB,QAFvB;AAGEP,MAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,EAAV;AAHV,KAHK,CAAP;AASD;;AA9BuE,0BAgC9BR,OAhC8B,CAgChEgB,QAhCgE;AAAA,MAgChEA,QAhCgE,kCAgCrD,kBAhCqD;AAiCxE,MAAMC,SAAS,GAAG,EAAlB;AACAP,EAAAA,cAAc,CAACQ,OAAf,CAAuB,UAAAN,IAAI,EAAI;AAC7B,QAAMO,YAAY,GAAG7B,gBAAgB,CAACsB,IAAI,CAACQ,MAAN,CAArC;AACA,QAAMA,MAAM,GAAG;AACbhB,MAAAA,IAAI,EAAEe,YAAY,CAACf,IAAb,CAAkBiB,WAAlB,EADO;AAEbhB,MAAAA,KAAK,kCACAb,aAAa,CAAC8B,KADd;AAEHC,QAAAA,KAAK,EAAEJ,YAAY,CAACd,KAAb,CAAmBkB,KAFvB;AAGHC,QAAAA,SAAS,EAAE;AAHR;AAFQ,KAAf;AASA,QAAIC,SAAS,GAAG,EAAhB;;AACA,QAAIb,IAAI,CAACa,SAAT,EAAoB;AAClB,UAAMC,MAAM,GAAG,aAAf,CADkB,CACW;;AAC7BD,MAAAA,SAAS,GAAGpC,MAAM,CAACsC,EAAP,CAAUf,IAAI,CAACa,SAAf,EAA0BT,QAA1B,EAAoCU,MAApC,CAA2CA,MAA3C,CAAZ;AACD;;AAED,QAAME,IAAI,aAAM/B,mBAAN,6BAA4Ce,IAAI,CAACiB,OAAjD,CAAV;AACA,QAAMC,YAAY,GAAGnC,UAAU,GAC3B;AAAE6B,MAAAA,SAAS,EAAE,QAAb;AAAuBO,MAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,CAA5B;AAAoCC,MAAAA,KAAK,EAAErC,UAA3C;AAAuDiC,MAAAA,IAAI,EAAJA;AAAvD,KAD2B,GAE3B;AAAExB,MAAAA,IAAI,EAAE;AAAR,KAFJ;AAIA,QAAM6B,iBAAiB,GAAGrB,IAAI,CAACsB,UAA/B;AACA,QAAMC,YAAY,GAAGxC,UAAU,GAC3B;AACE6B,MAAAA,SAAS,EAAE,QADb;AAEEO,MAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,CAFP;AAGEC,MAAAA,KAAK,EAAEpC,gBAHT;AAIEqC,MAAAA,iBAAiB,EAAjBA;AAJF,KAD2B,GAO3B;AAAE7B,MAAAA,IAAI,EAAE;AAAR,KAPJ;AASA,QAAMgC,SAAS,GAAGxB,IAAI,CAACwB,SAAL,IAAkB,EAApC;AACA,QAAMC,gBAAgB,GAAGD,SAAS,CAACtB,MAAV,KAAqB,CAArB,GACrB,YADqB,GAErBsB,SAAS,CAACtB,MAAV,KAAqB,CAArB,CACF;AADE,MAEEvB,eAAe,CAAC6C,SAAD,EAAY,CAAZ,CAFjB,aAGKA,SAAS,CAACtB,MAHf,WAFJ;AAOAG,IAAAA,SAAS,CAACqB,IAAV,CAAe,CACbR,YADa,EAEb;AAAE1B,MAAAA,IAAI,EAAEQ,IAAI,CAAC2B,UAAL,IAAmB,EAA3B;AAA+BX,MAAAA,IAAI,EAAJA,IAA/B;AAAqCvB,MAAAA,KAAK,EAAE,OAA5C;AAAqD2B,MAAAA,KAAK,EAAErC;AAA5D,KAFa,EAGbyB,MAHa,EAIb;AAAEhB,MAAAA,IAAI,EAAEiC,gBAAR;AAA0BhC,MAAAA,KAAK,EAAE;AAAjC,KAJa,EAKb8B,YALa,EAMb;AAAE/B,MAAAA,IAAI,EAAEQ,IAAI,CAAC4B,aAAL,IAAsB,EAA9B;AAAkCnC,MAAAA,KAAK,EAAE,OAAzC;AAAkD4B,MAAAA,iBAAiB,EAAjBA;AAAlD,KANa,EAOb;AAAE7B,MAAAA,IAAI,EAAEqB,SAAS,IAAI,EAArB;AAAyBpB,MAAAA,KAAK,EAAE,OAAhC;AAAyCmB,MAAAA,SAAS,EAAE;AAApD,KAPa,CAAf;AASD,GAjDD;AAmDA,MAAMiB,kBAAkB,GAAG9C,UAAU,GACjC;AAAE6B,IAAAA,SAAS,EAAE,QAAb;AAAuBO,IAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,CAA5B;AAAoCC,IAAAA,KAAK,EAAErC;AAA3C,GADiC,GAEjC;AAAES,IAAAA,IAAI,EAAE;AAAR,GAFJ;AAIA,MAAMsC,kBAAkB,GAAG/C,UAAU,GACjC;AAAE6B,IAAAA,SAAS,EAAE,QAAb;AAAuBO,IAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,CAA5B;AAAoCC,IAAAA,KAAK,EAAEpC;AAA3C,GADiC,GAEjC;AAAEQ,IAAAA,IAAI,EAAE;AAAR,GAFJ;AAIA,MAAMuC,WAAW,GAAG;AAClBC,IAAAA,IAAI,EAAE,IADY;AAElBtC,IAAAA,IAAI,EAAE,QAFY;AAGlBuC,IAAAA,QAAQ,EAAE,CAHQ;AAIlBrB,IAAAA,SAAS,EAAE;AAJO,GAApB;AAOA,MAAMsB,SAAS,GAAG,CAChBL,kBADgB,EAEhB;AAAErC,IAAAA,IAAI,EAAE,aAAR;AAAuBC,IAAAA,KAAK,EAAEsC;AAA9B,GAFgB,EAGhB;AAAEvC,IAAAA,IAAI,EAAE,QAAR;AAAkBC,IAAAA,KAAK,EAAEsC,WAAzB;AAAsCnB,IAAAA,SAAS,EAAE;AAAjD,GAHgB,EAIhB;AAAEpB,IAAAA,IAAI,EAAE,WAAR;AAAqBC,IAAAA,KAAK,EAAEsC;AAA5B,GAJgB,EAKhBD,kBALgB,EAMhB;AAAEtC,IAAAA,IAAI,EAAE,gBAAR;AAA0BC,IAAAA,KAAK,EAAEsC;AAAjC,GANgB,EAOhB;AAAEvC,IAAAA,IAAI,EAAE,cAAR;AAAwBC,IAAAA,KAAK,EAAEsC,WAA/B;AAA6CnB,IAAAA,SAAS,EAAE;AAAxD,GAPgB,CAAlB;AAUA,MAAMuB,cAAc,GAAGrD,cAAc,CAAC;AACpCsD,IAAAA,IAAI,GAAGF,SAAH,SAAiB7B,SAAjB,CADgC;AAEpCZ,IAAAA,KAAK,EAAE,YAF6B;AAGpC4C,IAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,GAAJ,EAAS,EAAT,EAAa,EAAb,EAAiB,CAAjB,EAAoB,GAApB,EAAyB,KAAzB,CAH4B;AAIpCzC,IAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,EAAV;AAJ4B,GAAD,CAArC;AAOAP,EAAAA,OAAO,CAACC,GAAR,CAAY,qBAAZ,EAAmC;AACjC6C,IAAAA,cAAc,EAAdA;AADiC,GAAnC;AAIA,SAAO,CAAC5C,YAAD,EAAeM,cAAf,EAA+BsC,cAA/B,CAAP;AACD","sourcesContent":["import moment from 'moment-timezone'\nimport { getStatusDetails, getUserFullName } from '../../../helpers'\nimport { defaultStyles, horizontalLine, sixColumnTable } from '../'\nimport { launchIcon, internalLinkIcon } from '../../../images'\n\nconst LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io'\n\nexport function buildAuditFollowUps(rawFollowUpIssues = [], options = {}) {\n console.log('buildAuditFollowUps', {\n rawFollowUpIssues,\n options,\n })\n\n const sectionTitle = [\n {\n text: 'Follow-up Issues',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n margin: [0, 0, 0, 50],\n },\n },\n ]\n const sectionDivider = horizontalLine({ margin: [0, 0, 0, 0] })\n\n const followUpIssues = rawFollowUpIssues.filter(item => !item.errorMessage)\n if (!followUpIssues.length) {\n // Show a `no follow-up issues` message if there are no follow up issues\n return [\n sectionTitle,\n sectionDivider,\n {\n text: 'No follow-up issues exist for this audit',\n style: defaultStyles.subTitle,\n margin: [0, 5, 0, 50],\n },\n ]\n }\n\n const { timezone = 'America/New_York' } = options\n const tableBody = []\n followUpIssues.forEach(item => {\n const mappedStatus = getStatusDetails(item.status)\n const status = {\n text: mappedStatus.text.toUpperCase(),\n style: {\n ...defaultStyles.small,\n color: mappedStatus.style.color,\n alignment: 'center',\n },\n }\n\n let updatedAt = ''\n if (item.updatedAt) {\n const format = 'MMM D h:mma' // e.g. Jan 21 12:59am in the Audit timezone\n updatedAt = moment.tz(item.updatedAt, timezone).format(format)\n }\n\n const link = `${LIGHTHOUSE_BASE_URL}/reports/issues/${item.issueId}`\n const iconLinkCell = launchIcon\n ? { alignment: 'center', fit: [8, 8], image: launchIcon, link }\n : { text: '' }\n\n const linkToDestination = item.questionId\n const iconJumpCell = launchIcon\n ? {\n alignment: 'center',\n fit: [8, 8],\n image: internalLinkIcon,\n linkToDestination,\n }\n : { text: '' }\n\n const assignees = item.assignees || []\n const assigneeUsername = assignees.length === 0\n ? 'Unassigned'\n : assignees.length === 1\n // TODO Currently this gives `first last`, I don't think it can fall back to 'Unknown User' here\n ? getUserFullName(assignees, 0)\n : `${assignees.length} users`\n \n tableBody.push([\n iconLinkCell,\n { text: item.issueTitle || '', link, style: 'small', image: launchIcon },\n status,\n { text: assigneeUsername, style: 'small' },\n iconJumpCell,\n { text: item.questionLabel || '', style: 'small', linkToDestination },\n { text: updatedAt || '', style: 'small', alignment: 'right' },\n ])\n })\n\n const headerLinkIconCell = launchIcon\n ? { alignment: 'center', fit: [8, 8], image: launchIcon }\n : { text: '' }\n \n const headerJumpIconCell = launchIcon\n ? { alignment: 'center', fit: [8, 8], image: internalLinkIcon }\n : { text: '' }\n \n const headerStyle = {\n bold: true,\n font: 'Gotham',\n fontSize: 8,\n alignment: 'left',\n }\n \n const headerRow = [\n headerLinkIconCell,\n { text: 'Issue Title', style: headerStyle },\n { text: 'Status', style: headerStyle, alignment: 'center' },\n { text: 'Assignees', style: headerStyle },\n headerJumpIconCell,\n { text: 'Audit Question', style: headerStyle },\n { text: 'Last Updated', style: headerStyle , alignment: 'right'},\n ]\n \n const followUpsTable = sixColumnTable({\n body: [headerRow, ...tableBody],\n style: 'titleTable',\n widths: [6, '*', 55, 55, 6, '*', '16%'],\n margin: [0, 0, 0, 30],\n })\n\n console.log('buildAuditFollowUps', {\n followUpsTable,\n })\n\n return [sectionTitle, sectionDivider, followUpsTable]\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../../src/pdf/helpers/build-audit-follow-ups/index.js"],"names":["moment","getStatusDetails","getUserFullName","defaultStyles","horizontalLine","sixColumnTable","launchIcon","internalLinkIcon","LIGHTHOUSE_BASE_URL","buildAuditFollowUps","rawFollowUpIssues","options","sectionTitle","text","style","font","lineHeight","margin","sectionDivider","followUpIssues","filter","item","errorMessage","length","subTitle","timezone","tableBody","forEach","mappedStatus","status","toUpperCase","small","color","alignment","updatedAt","format","tz","link","issueId","iconLinkCell","fit","image","linkToDestination","questionId","iconJumpCell","assignees","assigneeUsername","push","issueTitle","questionLabel","headerLinkIconCell","headerJumpIconCell","headerStyle","bold","fontSize","headerRow","followUpsTable","body","widths"],"mappings":";;;;;;AAAA,OAAOA,MAAP,MAAmB,iBAAnB;AACA,SAASC,gBAAT,EAA2BC,eAA3B,QAAkD,kBAAlD;AACA,SAASC,aAAT,EAAwBC,cAAxB,EAAwCC,cAAxC,QAA8D,KAA9D;AACA,SAASC,UAAT,EAAqBC,gBAArB,QAA6C,iBAA7C;AAEA,IAAMC,mBAAmB,GAAG,2BAA5B;AAEA,OAAO,SAASC,mBAAT,GAAmE;AAAA,MAAtCC,iBAAsC,uEAAlB,EAAkB;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AACxE,MAAMC,YAAY,GAAG,CACnB;AACEC,IAAAA,IAAI,EAAE,kBADR;AAEEC,IAAAA,KAAK,EAAE;AACLC,MAAAA,IAAI,EAAE,QADD;AAELC,MAAAA,UAAU,EAAE,GAFP;AAGLC,MAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,EAAV;AAHH;AAFT,GADmB,CAArB;AAUA,MAAMC,cAAc,GAAGd,cAAc,CAAC;AAAEa,IAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV;AAAV,GAAD,CAArC;AAEA,MAAME,cAAc,GAAGT,iBAAiB,CAACU,MAAlB,CAAyB,UAAAC,IAAI;AAAA,WAAI,CAACA,IAAI,CAACC,YAAV;AAAA,GAA7B,CAAvB;;AACA,MAAI,CAACH,cAAc,CAACI,MAApB,EAA4B;AAC1B;AACA,WAAO,CACLX,YADK,EAELM,cAFK,EAGL;AACEL,MAAAA,IAAI,EAAE,0CADR;AAEEC,MAAAA,KAAK,EAAEX,aAAa,CAACqB,QAFvB;AAGEP,MAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,EAAV;AAHV,KAHK,CAAP;AASD;;AAzBuE,0BA2B9BN,OA3B8B,CA2BhEc,QA3BgE;AAAA,MA2BhEA,QA3BgE,kCA2BrD,kBA3BqD;AA4BxE,MAAMC,SAAS,GAAG,EAAlB;AACAP,EAAAA,cAAc,CAACQ,OAAf,CAAuB,UAAAN,IAAI,EAAI;AAC7B,QAAMO,YAAY,GAAG3B,gBAAgB,CAACoB,IAAI,CAACQ,MAAN,CAArC;AACA,QAAMA,MAAM,GAAG;AACbhB,MAAAA,IAAI,EAAEe,YAAY,CAACf,IAAb,CAAkBiB,WAAlB,EADO;AAEbhB,MAAAA,KAAK,kCACAX,aAAa,CAAC4B,KADd;AAEHC,QAAAA,KAAK,EAAEJ,YAAY,CAACd,KAAb,CAAmBkB,KAFvB;AAGHC,QAAAA,SAAS,EAAE;AAHR;AAFQ,KAAf;AASA,QAAIC,SAAS,GAAG,EAAhB;;AACA,QAAIb,IAAI,CAACa,SAAT,EAAoB;AAClB,UAAMC,MAAM,GAAG,aAAf,CADkB,CACW;;AAC7BD,MAAAA,SAAS,GAAGlC,MAAM,CAACoC,EAAP,CAAUf,IAAI,CAACa,SAAf,EAA0BT,QAA1B,EAAoCU,MAApC,CAA2CA,MAA3C,CAAZ;AACD;;AAED,QAAME,IAAI,aAAM7B,mBAAN,6BAA4Ca,IAAI,CAACiB,OAAjD,CAAV;AACA,QAAMC,YAAY,GAAGjC,UAAU,GAC3B;AAAE2B,MAAAA,SAAS,EAAE,QAAb;AAAuBO,MAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,CAA5B;AAAoCC,MAAAA,KAAK,EAAEnC,UAA3C;AAAuD+B,MAAAA,IAAI,EAAJA;AAAvD,KAD2B,GAE3B;AAAExB,MAAAA,IAAI,EAAE;AAAR,KAFJ;AAIA,QAAM6B,iBAAiB,GAAGrB,IAAI,CAACsB,UAA/B;AACA,QAAMC,YAAY,GAAGtC,UAAU,GAC3B;AACE2B,MAAAA,SAAS,EAAE,QADb;AAEEO,MAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,CAFP;AAGEC,MAAAA,KAAK,EAAElC,gBAHT;AAIEmC,MAAAA,iBAAiB,EAAjBA;AAJF,KAD2B,GAO3B;AAAE7B,MAAAA,IAAI,EAAE;AAAR,KAPJ;AASA,QAAMgC,SAAS,GAAGxB,IAAI,CAACwB,SAAL,IAAkB,EAApC;AACA,QAAMC,gBAAgB,GACpBD,SAAS,CAACtB,MAAV,KAAqB,CAArB,GACI,YADJ,GAEIsB,SAAS,CAACtB,MAAV,KAAqB,CAArB,GACA;AACArB,IAAAA,eAAe,CAAC2C,SAAD,EAAY,CAAZ,CAFf,aAGGA,SAAS,CAACtB,MAHb,WAHN;AAQAG,IAAAA,SAAS,CAACqB,IAAV,CAAe,CACbR,YADa,EAEb;AAAE1B,MAAAA,IAAI,EAAEQ,IAAI,CAAC2B,UAAL,IAAmB,EAA3B;AAA+BX,MAAAA,IAAI,EAAJA,IAA/B;AAAqCvB,MAAAA,KAAK,EAAE,OAA5C;AAAqD2B,MAAAA,KAAK,EAAEnC;AAA5D,KAFa,EAGbuB,MAHa,EAIb;AAAEhB,MAAAA,IAAI,EAAEiC,gBAAR;AAA0BhC,MAAAA,KAAK,EAAE;AAAjC,KAJa,EAKb8B,YALa,EAMb;AAAE/B,MAAAA,IAAI,EAAEQ,IAAI,CAAC4B,aAAL,IAAsB,EAA9B;AAAkCnC,MAAAA,KAAK,EAAE,OAAzC;AAAkD4B,MAAAA,iBAAiB,EAAjBA;AAAlD,KANa,EAOb;AAAE7B,MAAAA,IAAI,EAAEqB,SAAS,IAAI,EAArB;AAAyBpB,MAAAA,KAAK,EAAE,OAAhC;AAAyCmB,MAAAA,SAAS,EAAE;AAApD,KAPa,CAAf;AASD,GAlDD;AAoDA,MAAMiB,kBAAkB,GAAG5C,UAAU,GACjC;AAAE2B,IAAAA,SAAS,EAAE,QAAb;AAAuBO,IAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,CAA5B;AAAoCC,IAAAA,KAAK,EAAEnC;AAA3C,GADiC,GAEjC;AAAEO,IAAAA,IAAI,EAAE;AAAR,GAFJ;AAIA,MAAMsC,kBAAkB,GAAG7C,UAAU,GACjC;AAAE2B,IAAAA,SAAS,EAAE,QAAb;AAAuBO,IAAAA,GAAG,EAAE,CAAC,CAAD,EAAI,CAAJ,CAA5B;AAAoCC,IAAAA,KAAK,EAAElC;AAA3C,GADiC,GAEjC;AAAEM,IAAAA,IAAI,EAAE;AAAR,GAFJ;AAIA,MAAMuC,WAAW,GAAG;AAClBC,IAAAA,IAAI,EAAE,IADY;AAElBtC,IAAAA,IAAI,EAAE,QAFY;AAGlBuC,IAAAA,QAAQ,EAAE,CAHQ;AAIlBrB,IAAAA,SAAS,EAAE;AAJO,GAApB;AAOA,MAAMsB,SAAS,GAAG,CAChBL,kBADgB,EAEhB;AAAErC,IAAAA,IAAI,EAAE,aAAR;AAAuBC,IAAAA,KAAK,EAAEsC;AAA9B,GAFgB,EAGhB;AAAEvC,IAAAA,IAAI,EAAE,QAAR;AAAkBC,IAAAA,KAAK,EAAEsC,WAAzB;AAAsCnB,IAAAA,SAAS,EAAE;AAAjD,GAHgB,EAIhB;AAAEpB,IAAAA,IAAI,EAAE,WAAR;AAAqBC,IAAAA,KAAK,EAAEsC;AAA5B,GAJgB,EAKhBD,kBALgB,EAMhB;AAAEtC,IAAAA,IAAI,EAAE,gBAAR;AAA0BC,IAAAA,KAAK,EAAEsC;AAAjC,GANgB,EAOhB;AAAEvC,IAAAA,IAAI,EAAE,cAAR;AAAwBC,IAAAA,KAAK,EAAEsC,WAA/B;AAA4CnB,IAAAA,SAAS,EAAE;AAAvD,GAPgB,CAAlB;AAUA,MAAMuB,cAAc,GAAGnD,cAAc,CAAC;AACpCoD,IAAAA,IAAI,GAAGF,SAAH,SAAiB7B,SAAjB,CADgC;AAEpCZ,IAAAA,KAAK,EAAE,YAF6B;AAGpC4C,IAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,GAAJ,EAAS,EAAT,EAAa,EAAb,EAAiB,CAAjB,EAAoB,GAApB,EAAyB,KAAzB,CAH4B;AAIpCzC,IAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,EAAV;AAJ4B,GAAD,CAArC;AAOA,SAAO,CAACL,YAAD,EAAeM,cAAf,EAA+BsC,cAA/B,CAAP;AACD","sourcesContent":["import moment from 'moment-timezone'\nimport { getStatusDetails, getUserFullName } from '../../../helpers'\nimport { defaultStyles, horizontalLine, sixColumnTable } from '../'\nimport { launchIcon, internalLinkIcon } from '../../../images'\n\nconst LIGHTHOUSE_BASE_URL = 'https://app.lighthouse.io'\n\nexport function buildAuditFollowUps(rawFollowUpIssues = [], options = {}) {\n const sectionTitle = [\n {\n text: 'Follow-up Issues',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n margin: [0, 0, 0, 50],\n },\n },\n ]\n const sectionDivider = horizontalLine({ margin: [0, 0, 0, 0] })\n\n const followUpIssues = rawFollowUpIssues.filter(item => !item.errorMessage)\n if (!followUpIssues.length) {\n // Show a `no follow-up issues` message if there are no follow up issues\n return [\n sectionTitle,\n sectionDivider,\n {\n text: 'No follow-up issues exist for this audit',\n style: defaultStyles.subTitle,\n margin: [0, 5, 0, 50],\n },\n ]\n }\n\n const { timezone = 'America/New_York' } = options\n const tableBody = []\n followUpIssues.forEach(item => {\n const mappedStatus = getStatusDetails(item.status)\n const status = {\n text: mappedStatus.text.toUpperCase(),\n style: {\n ...defaultStyles.small,\n color: mappedStatus.style.color,\n alignment: 'center',\n },\n }\n\n let updatedAt = ''\n if (item.updatedAt) {\n const format = 'MMM D h:mma' // e.g. Jan 21 12:59am in the Audit timezone\n updatedAt = moment.tz(item.updatedAt, timezone).format(format)\n }\n\n const link = `${LIGHTHOUSE_BASE_URL}/reports/issues/${item.issueId}`\n const iconLinkCell = launchIcon\n ? { alignment: 'center', fit: [8, 8], image: launchIcon, link }\n : { text: '' }\n\n const linkToDestination = item.questionId\n const iconJumpCell = launchIcon\n ? {\n alignment: 'center',\n fit: [8, 8],\n image: internalLinkIcon,\n linkToDestination,\n }\n : { text: '' }\n\n const assignees = item.assignees || []\n const assigneeUsername =\n assignees.length === 0\n ? 'Unassigned'\n : assignees.length === 1\n ? // TODO Currently this gives `first last`, I don't think it can fall back to 'Unknown User' here\n getUserFullName(assignees, 0)\n : `${assignees.length} users`\n\n tableBody.push([\n iconLinkCell,\n { text: item.issueTitle || '', link, style: 'small', image: launchIcon },\n status,\n { text: assigneeUsername, style: 'small' },\n iconJumpCell,\n { text: item.questionLabel || '', style: 'small', linkToDestination },\n { text: updatedAt || '', style: 'small', alignment: 'right' },\n ])\n })\n\n const headerLinkIconCell = launchIcon\n ? { alignment: 'center', fit: [8, 8], image: launchIcon }\n : { text: '' }\n\n const headerJumpIconCell = launchIcon\n ? { alignment: 'center', fit: [8, 8], image: internalLinkIcon }\n : { text: '' }\n\n const headerStyle = {\n bold: true,\n font: 'Gotham',\n fontSize: 8,\n alignment: 'left',\n }\n\n const headerRow = [\n headerLinkIconCell,\n { text: 'Issue Title', style: headerStyle },\n { text: 'Status', style: headerStyle, alignment: 'center' },\n { text: 'Assignees', style: headerStyle },\n headerJumpIconCell,\n { text: 'Audit Question', style: headerStyle },\n { text: 'Last Updated', style: headerStyle, alignment: 'right' },\n ]\n\n const followUpsTable = sixColumnTable({\n body: [headerRow, ...tableBody],\n style: 'titleTable',\n widths: [6, '*', 55, 55, 6, '*', '16%'],\n margin: [0, 0, 0, 30],\n })\n\n return [sectionTitle, sectionDivider, followUpsTable]\n}\n"],"file":"index.js"}
@@ -37,7 +37,8 @@ export function occurrenceIntervalsGenerator(props) {
37
37
  isInitial: isInitial,
38
38
  start: start,
39
39
  options: options,
40
- timezone: timezone
40
+ timezone: timezone,
41
+ type: type
41
42
  }), "t0", 8);
42
43
 
43
44
  case 8:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/scheduling/generators/occurrenceIntervalsGenerator.ts"],"names":["occurrenceIntervalsGenerator","StrategyTypes","getNext","getNextExactDateOfMonth","getNextLastDayOfMonth","getNextLastWeekdayOfMonth","getNextNoRepeat","getNextWeekday","getNextXDayOfXWeekOfMonth","strategyTypeMap","ExactDateOfMonth","LastDayOfMonth","LastWeekdayOfMonth","NoRepeat","Stopwatch","Weekdays","Window","XDayOfXWeekOfMonth","props","isInitial","serviceInterval","strategy","timezone","options","type","start","end","getNextFn"],"mappings":";;;;;oDAiCiBA,4B;;AAjCjB,SAA6BC,aAA7B,QAAkD,qBAAlD;AAEA,SACEC,OADF,EAEEC,uBAFF,EAGEC,qBAHF,EAIEC,yBAJF,EAKEC,eALF,EAMEC,cANF,EAOEC,yBAPF,QAQO,eARP;AAUA,OAAO,IAAMC,eAAe,6DACzBR,aAAa,CAACS,gBADW,EACQP,uBADR,qCAEzBF,aAAa,CAACU,cAFW,EAEMP,qBAFN,qCAGzBH,aAAa,CAACW,kBAHW,EAGUP,yBAHV,qCAIzBJ,aAAa,CAACY,QAJW,EAIAP,eAJA,qCAKzBL,aAAa,CAACa,SALW,EAKCZ,OALD,qCAMzBD,aAAa,CAACc,QANW,EAMAR,cANA,qCAOzBN,aAAa,CAACe,MAPW,EAOFd,OAPE,qCAQzBD,aAAa,CAACgB,kBARW,EAQUT,yBARV,oBAArB;;AAkBP;;;AAGA,OAAO,SAAUR,4BAAV,CACLkB,KADK;AAAA;AAAA;AAAA;AAAA;AAAA;AAGGC,UAAAA,SAHH,GAGsDD,KAHtD,CAGGC,SAHH,EAGcC,eAHd,GAGsDF,KAHtD,CAGcE,eAHd,EAG+BC,QAH/B,GAGsDH,KAHtD,CAG+BG,QAH/B,EAGyCC,QAHzC,GAGsDJ,KAHtD,CAGyCI,QAHzC;AAIGC,UAAAA,OAJH,GAIqBF,QAJrB,CAIGE,OAJH,EAIYC,IAJZ,GAIqBH,QAJrB,CAIYG,IAJZ;AAMCC,UAAAA,KAND,GAMiBL,eAAe,CAAC,CAAD,CANhC;AAOCM,UAAAA,GAPD,GAOeN,eAAe,CAAC,CAAD,CAP9B;AASCO,UAAAA,SATD,GASalB,eAAe,CAACe,IAAD,CAT5B;;AAAA,cAWAG,SAXA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAaL,wCAAOA,SAAS,CAAC;AACfD,YAAAA,GAAG,EAAHA,GADe;AAEfP,YAAAA,SAAS,EAATA,SAFe;AAGfM,YAAAA,KAAK,EAALA,KAHe;AAIfF,YAAAA,OAAO,EAAPA,OAJe;AAKfD,YAAAA,QAAQ,EAARA;AALe,WAAD,CAAhB;;AAbK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["import { Interval, Strategy, StrategyTypes } from '../scheduling.types'\n\nimport {\n getNext,\n getNextExactDateOfMonth,\n getNextLastDayOfMonth,\n getNextLastWeekdayOfMonth,\n getNextNoRepeat,\n getNextWeekday,\n getNextXDayOfXWeekOfMonth,\n} from '../strategies'\n\nexport const strategyTypeMap = {\n [StrategyTypes.ExactDateOfMonth]: getNextExactDateOfMonth,\n [StrategyTypes.LastDayOfMonth]: getNextLastDayOfMonth,\n [StrategyTypes.LastWeekdayOfMonth]: getNextLastWeekdayOfMonth,\n [StrategyTypes.NoRepeat]: getNextNoRepeat,\n [StrategyTypes.Stopwatch]: getNext,\n [StrategyTypes.Weekdays]: getNextWeekday,\n [StrategyTypes.Window]: getNext,\n [StrategyTypes.XDayOfXWeekOfMonth]: getNextXDayOfXWeekOfMonth,\n}\n\ninterface OccurrenceIntervalsGenerator {\n readonly isInitial: boolean\n readonly serviceInterval: Interval\n readonly strategy: Strategy\n readonly timezone: string\n}\n\n/**\n * Generates occurrence intervals for service intervals using strategy\n */\nexport function* occurrenceIntervalsGenerator(\n props: OccurrenceIntervalsGenerator\n): IterableIterator<Interval> {\n const { isInitial, serviceInterval, strategy, timezone } = props\n const { options, type } = strategy\n\n const start: number = serviceInterval[0]\n const end: number = serviceInterval[1]\n\n const getNextFn = strategyTypeMap[type]\n\n if (!getNextFn) return\n\n yield* getNextFn({\n end,\n isInitial,\n start,\n options,\n timezone,\n })\n}\n"],"file":"occurrenceIntervalsGenerator.js"}
1
+ {"version":3,"sources":["../../../src/scheduling/generators/occurrenceIntervalsGenerator.ts"],"names":["occurrenceIntervalsGenerator","StrategyTypes","getNext","getNextExactDateOfMonth","getNextLastDayOfMonth","getNextLastWeekdayOfMonth","getNextNoRepeat","getNextWeekday","getNextXDayOfXWeekOfMonth","strategyTypeMap","ExactDateOfMonth","LastDayOfMonth","LastWeekdayOfMonth","NoRepeat","Stopwatch","Weekdays","Window","XDayOfXWeekOfMonth","props","isInitial","serviceInterval","strategy","timezone","options","type","start","end","getNextFn"],"mappings":";;;;;oDAiCiBA,4B;;AAjCjB,SAA6BC,aAA7B,QAAkD,qBAAlD;AAEA,SACEC,OADF,EAEEC,uBAFF,EAGEC,qBAHF,EAIEC,yBAJF,EAKEC,eALF,EAMEC,cANF,EAOEC,yBAPF,QAQO,eARP;AAUA,OAAO,IAAMC,eAAe,6DACzBR,aAAa,CAACS,gBADW,EACQP,uBADR,qCAEzBF,aAAa,CAACU,cAFW,EAEMP,qBAFN,qCAGzBH,aAAa,CAACW,kBAHW,EAGUP,yBAHV,qCAIzBJ,aAAa,CAACY,QAJW,EAIAP,eAJA,qCAKzBL,aAAa,CAACa,SALW,EAKCZ,OALD,qCAMzBD,aAAa,CAACc,QANW,EAMAR,cANA,qCAOzBN,aAAa,CAACe,MAPW,EAOFd,OAPE,qCAQzBD,aAAa,CAACgB,kBARW,EAQUT,yBARV,oBAArB;;AAkBP;;;AAGA,OAAO,SAAUR,4BAAV,CACLkB,KADK;AAAA;AAAA;AAAA;AAAA;AAAA;AAGGC,UAAAA,SAHH,GAGsDD,KAHtD,CAGGC,SAHH,EAGcC,eAHd,GAGsDF,KAHtD,CAGcE,eAHd,EAG+BC,QAH/B,GAGsDH,KAHtD,CAG+BG,QAH/B,EAGyCC,QAHzC,GAGsDJ,KAHtD,CAGyCI,QAHzC;AAIGC,UAAAA,OAJH,GAIqBF,QAJrB,CAIGE,OAJH,EAIYC,IAJZ,GAIqBH,QAJrB,CAIYG,IAJZ;AAMCC,UAAAA,KAND,GAMiBL,eAAe,CAAC,CAAD,CANhC;AAOCM,UAAAA,GAPD,GAOeN,eAAe,CAAC,CAAD,CAP9B;AASCO,UAAAA,SATD,GASalB,eAAe,CAACe,IAAD,CAT5B;;AAAA,cAWAG,SAXA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAaL,wCAAOA,SAAS,CAAC;AACfD,YAAAA,GAAG,EAAHA,GADe;AAEfP,YAAAA,SAAS,EAATA,SAFe;AAGfM,YAAAA,KAAK,EAALA,KAHe;AAIfF,YAAAA,OAAO,EAAPA,OAJe;AAKfD,YAAAA,QAAQ,EAARA,QALe;AAMfE,YAAAA,IAAI,EAAJA;AANe,WAAD,CAAhB;;AAbK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["import { Interval, Strategy, StrategyTypes } from '../scheduling.types'\n\nimport {\n getNext,\n getNextExactDateOfMonth,\n getNextLastDayOfMonth,\n getNextLastWeekdayOfMonth,\n getNextNoRepeat,\n getNextWeekday,\n getNextXDayOfXWeekOfMonth,\n} from '../strategies'\n\nexport const strategyTypeMap = {\n [StrategyTypes.ExactDateOfMonth]: getNextExactDateOfMonth,\n [StrategyTypes.LastDayOfMonth]: getNextLastDayOfMonth,\n [StrategyTypes.LastWeekdayOfMonth]: getNextLastWeekdayOfMonth,\n [StrategyTypes.NoRepeat]: getNextNoRepeat,\n [StrategyTypes.Stopwatch]: getNext,\n [StrategyTypes.Weekdays]: getNextWeekday,\n [StrategyTypes.Window]: getNext,\n [StrategyTypes.XDayOfXWeekOfMonth]: getNextXDayOfXWeekOfMonth,\n}\n\ninterface OccurrenceIntervalsGenerator {\n readonly isInitial: boolean\n readonly serviceInterval: Interval\n readonly strategy: Strategy\n readonly timezone: string\n}\n\n/**\n * Generates occurrence intervals for service intervals using strategy\n */\nexport function* occurrenceIntervalsGenerator(\n props: OccurrenceIntervalsGenerator\n): IterableIterator<Interval> {\n const { isInitial, serviceInterval, strategy, timezone } = props\n const { options, type } = strategy\n\n const start: number = serviceInterval[0]\n const end: number = serviceInterval[1]\n\n const getNextFn = strategyTypeMap[type]\n\n if (!getNextFn) return\n\n yield* getNextFn({\n end,\n isInitial,\n start,\n options,\n timezone,\n type,\n })\n}\n"],"file":"occurrenceIntervalsGenerator.js"}
@@ -138,7 +138,7 @@ export function generateRepeatingSchedule(props) {
138
138
  return _context.finish(40);
139
139
 
140
140
  case 48:
141
- // NOTE: we must reset isInitial to true follwing the first service
141
+ // NOTE: we must reset isInitial to true following the first service
142
142
  // interval otherwise the occurrence will not start exactly on the next
143
143
  // service interval start time
144
144
  isInitial = true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/scheduling/helpers/generateRepeatingSchedule.ts"],"names":["generateRepeatingSchedule","includes","generateScheduleEnd","hasValidStartAndEnd","IntervalTypes","Unit","occurrenceIntervalsGenerator","serviceIntervalsGenerator","complyingServiceIntervalUnits","Second","Minute","Hour","props","serviceHours","start","strategy","end","isInitial","frequency","options","frequencyUnit","unit","timezone","isStartAndEndValid","serviceIntervalSequence","complyToServiceHours","serviceIntervals","serviceInterval","interval","type","Service","occurrenceIntervalsSequence","occurrenceInterval","Occurrence"],"mappings":"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","sourcesContent":["import { includes } from 'lodash/fp'\n\nimport { generateScheduleEnd, hasValidStartAndEnd } from '.'\nimport {\n IntervalTypes,\n ScheduleIntervalsGenerator,\n Unit,\n} from '../scheduling.types'\nimport {\n occurrenceIntervalsGenerator,\n serviceIntervalsGenerator,\n} from '../generators'\n\nexport const complyingServiceIntervalUnits = [\n Unit.Second,\n Unit.Minute,\n Unit.Hour,\n]\n\n/**\n * Generates repeating schedule service and occurrence intervals\n */\nexport function* generateRepeatingSchedule(props: ScheduleIntervalsGenerator) {\n const { serviceHours, start, strategy } = props\n let { end, isInitial } = props\n\n // NOTE support never ending repeating schedule where no end date defined by\n // setting a custom end date using the frequency unit and value\n const {\n options: { frequency },\n } = strategy\n const { unit: frequencyUnit } = frequency\n const { timezone } = serviceHours\n\n end = end || generateScheduleEnd({ frequency, start, timezone })\n\n const isStartAndEndValid = hasValidStartAndEnd({ end, start })\n\n if (!isStartAndEndValid) return []\n\n const serviceIntervalSequence = serviceIntervalsGenerator({\n end,\n serviceHours,\n start,\n })\n\n // NOTE: when repeating and is complying to service hours we iterate through\n // all service intervals otherwise service interval is from the start and end\n const complyToServiceHours = includes(\n frequencyUnit,\n complyingServiceIntervalUnits\n )\n\n const serviceIntervals = complyToServiceHours\n ? [...serviceIntervalSequence]\n : [[start, end]]\n\n for (const serviceInterval of serviceIntervals) {\n yield { interval: serviceInterval, type: IntervalTypes.Service }\n\n const occurrenceIntervalsSequence = occurrenceIntervalsGenerator({\n isInitial,\n serviceInterval,\n strategy,\n timezone,\n })\n\n for (const occurrenceInterval of occurrenceIntervalsSequence) {\n yield { interval: occurrenceInterval, type: IntervalTypes.Occurrence }\n }\n\n // NOTE: we must reset isInitial to true follwing the first service\n // interval otherwise the occurrence will not start exactly on the next\n // service interval start time\n isInitial = true\n }\n}\n"],"file":"generateRepeatingSchedule.js"}
1
+ {"version":3,"sources":["../../../src/scheduling/helpers/generateRepeatingSchedule.ts"],"names":["generateRepeatingSchedule","includes","generateScheduleEnd","hasValidStartAndEnd","IntervalTypes","Unit","occurrenceIntervalsGenerator","serviceIntervalsGenerator","complyingServiceIntervalUnits","Second","Minute","Hour","props","serviceHours","start","strategy","end","isInitial","frequency","options","frequencyUnit","unit","timezone","isStartAndEndValid","serviceIntervalSequence","complyToServiceHours","serviceIntervals","serviceInterval","interval","type","Service","occurrenceIntervalsSequence","occurrenceInterval","Occurrence"],"mappings":"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","sourcesContent":["import { includes } from 'lodash/fp'\n\nimport { generateScheduleEnd, hasValidStartAndEnd } from '.'\nimport {\n IntervalTypes,\n ScheduleIntervalsGenerator,\n Unit,\n} from '../scheduling.types'\nimport {\n occurrenceIntervalsGenerator,\n serviceIntervalsGenerator,\n} from '../generators'\n\nexport const complyingServiceIntervalUnits = [\n Unit.Second,\n Unit.Minute,\n Unit.Hour,\n]\n\n/**\n * Generates repeating schedule service and occurrence intervals\n */\nexport function* generateRepeatingSchedule(props: ScheduleIntervalsGenerator) {\n const { serviceHours, start, strategy } = props\n let { end, isInitial } = props\n\n // NOTE support never ending repeating schedule where no end date defined by\n // setting a custom end date using the frequency unit and value\n const {\n options: { frequency },\n } = strategy\n const { unit: frequencyUnit } = frequency\n const { timezone } = serviceHours\n\n end = end || generateScheduleEnd({ frequency, start, timezone })\n\n const isStartAndEndValid = hasValidStartAndEnd({ end, start })\n\n if (!isStartAndEndValid) return []\n\n const serviceIntervalSequence = serviceIntervalsGenerator({\n end,\n serviceHours,\n start,\n })\n\n // NOTE: when repeating and is complying to service hours we iterate through\n // all service intervals otherwise service interval is from the start and end\n const complyToServiceHours = includes(\n frequencyUnit,\n complyingServiceIntervalUnits\n )\n\n const serviceIntervals = complyToServiceHours\n ? [...serviceIntervalSequence]\n : [[start, end]]\n\n for (const serviceInterval of serviceIntervals) {\n yield { interval: serviceInterval, type: IntervalTypes.Service }\n\n const occurrenceIntervalsSequence = occurrenceIntervalsGenerator({\n isInitial,\n serviceInterval,\n strategy,\n timezone,\n })\n\n for (const occurrenceInterval of occurrenceIntervalsSequence) {\n yield { interval: occurrenceInterval, type: IntervalTypes.Occurrence }\n }\n\n // NOTE: we must reset isInitial to true following the first service\n // interval otherwise the occurrence will not start exactly on the next\n // service interval start time\n isInitial = true\n }\n}\n"],"file":"generateRepeatingSchedule.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/scheduling/scheduling.types.ts"],"names":["IntervalTypes","Unit","StrategyTypes"],"mappings":"AAEA,WAAYA,aAAZ;;WAAYA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;GAAAA,a,KAAAA,a;;AAKZ,WAAYC,IAAZ;;WAAYA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;GAAAA,I,KAAAA,I;;AAWZ,WAAYC,aAAZ;;WAAYA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;GAAAA,a,KAAAA,a","sourcesContent":["import { Schema as ServiceHoursSchema } from '../service-hours'\n\nexport enum IntervalTypes {\n Occurrence = 'occurrence',\n Service = 'service',\n}\n\nexport enum Unit {\n Millisecond = 'millisecond',\n Second = 'second',\n Minute = 'minute',\n Hour = 'hour',\n Day = 'day',\n Week = 'isoWeek',\n Month = 'month',\n Year = 'year',\n}\n\nexport enum StrategyTypes {\n ExactDateOfMonth = 'exactDateOfMonth',\n LastDayOfMonth = 'lastDayOfMonth',\n LastWeekdayOfMonth = 'lastWeekdayOfMonth',\n NoRepeat = 'noRepeat',\n Stopwatch = 'stopwatch',\n Weekdays = 'weekdays',\n Window = 'window',\n XDayOfXWeekOfMonth = 'xDayOfxWeekOfMonth',\n}\n\nexport interface GetNext {\n readonly end: number\n readonly isInitial?: boolean\n readonly options?: {\n date?: number\n dayOfWeek?: number\n duration: Period\n frequency: Period\n weekday?: number\n weekdays?: number[]\n weekOfMonth?: number\n }\n readonly start: number\n readonly timezone: string\n}\n\nexport interface Interval {\n readonly [index: number]: number\n}\n\nexport interface Period {\n readonly unit: Unit\n readonly value: number\n}\n\nexport interface ScheduleIntervalsGenerator {\n readonly end: number\n readonly isInitial: boolean\n readonly strategy: Strategy\n readonly serviceHours: ServiceHoursSchema\n readonly start: number\n}\n\nexport interface Strategy {\n readonly options: any\n readonly type: StrategyTypes\n}\n"],"file":"scheduling.types.js"}
1
+ {"version":3,"sources":["../../src/scheduling/scheduling.types.ts"],"names":["IntervalTypes","Unit","StrategyTypes"],"mappings":"AAEA,WAAYA,aAAZ;;WAAYA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;GAAAA,a,KAAAA,a;;AAKZ,WAAYC,IAAZ;;WAAYA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;AAAAA,EAAAA,I;GAAAA,I,KAAAA,I;;AAWZ,WAAYC,aAAZ;;WAAYA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;AAAAA,EAAAA,a;GAAAA,a,KAAAA,a","sourcesContent":["import { Schema as ServiceHoursSchema } from '../service-hours'\n\nexport enum IntervalTypes {\n Occurrence = 'occurrence',\n Service = 'service',\n}\n\nexport enum Unit {\n Millisecond = 'millisecond',\n Second = 'second',\n Minute = 'minute',\n Hour = 'hour',\n Day = 'day',\n Week = 'isoWeek',\n Month = 'month',\n Year = 'year',\n}\n\nexport enum StrategyTypes {\n ExactDateOfMonth = 'exactDateOfMonth',\n LastDayOfMonth = 'lastDayOfMonth',\n LastWeekdayOfMonth = 'lastWeekdayOfMonth',\n NoRepeat = 'noRepeat',\n Stopwatch = 'stopwatch',\n Weekdays = 'weekdays',\n Window = 'window',\n XDayOfXWeekOfMonth = 'xDayOfxWeekOfMonth',\n}\n\nexport interface Options {\n date?: number\n dayOfWeek?: number\n duration: Period\n frequency: Period\n weekday?: number\n weekdays?: number[]\n weekOfMonth?: number\n}\n\nexport interface GetNext {\n readonly end: number\n readonly isInitial?: boolean\n readonly options?: Options\n readonly start: number\n readonly timezone: string\n readonly type: StrategyTypes\n}\n\nexport interface Interval {\n readonly [index: number]: number\n}\n\nexport interface Period {\n readonly unit: Unit\n readonly value: number\n}\n\nexport interface ScheduleIntervalsGenerator {\n readonly end: number\n readonly isInitial: boolean\n readonly strategy: Strategy\n readonly serviceHours: ServiceHoursSchema\n readonly start: number\n}\n\nexport interface Strategy {\n readonly options: Options\n readonly type: StrategyTypes\n}\n"],"file":"scheduling.types.js"}
@@ -3,18 +3,18 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  var _marked = /*#__PURE__*/_regeneratorRuntime.mark(getNext);
4
4
 
5
5
  import moment from 'moment-timezone';
6
- import { Unit } from '../scheduling.types';
6
+ import { StrategyTypes, Unit } from '../scheduling.types';
7
7
  /**
8
8
  * Generates next occurrence interval for stopwatch and window strategy
9
9
  */
10
10
 
11
11
  export function getNext(_ref) {
12
- var end, isInitial, options, start, timezone, duration, frequency, durationUnit, durationValue, frequencyUnit, frequencyValue, initial, dateCursor, nextOccurrenceEnd, nextOccurrenceStart, nextOccurrence;
12
+ var end, isInitial, options, start, timezone, type, duration, frequency, durationUnit, durationValue, frequencyUnit, frequencyValue, initial, dateCursor, nextOccurrenceStart, nextOccurrenceEnd, nextOccurrenceStartByBackCalculation, earliestNextOccurrenceStart, nextOccurrence;
13
13
  return _regeneratorRuntime.wrap(function getNext$(_context) {
14
14
  while (1) {
15
15
  switch (_context.prev = _context.next) {
16
16
  case 0:
17
- end = _ref.end, isInitial = _ref.isInitial, options = _ref.options, start = _ref.start, timezone = _ref.timezone;
17
+ end = _ref.end, isInitial = _ref.isInitial, options = _ref.options, start = _ref.start, timezone = _ref.timezone, type = _ref.type;
18
18
  duration = options.duration, frequency = options.frequency;
19
19
  durationUnit = duration.unit, durationValue = duration.value;
20
20
  frequencyUnit = frequency.unit, frequencyValue = frequency.value;
@@ -23,36 +23,49 @@ export function getNext(_ref) {
23
23
 
24
24
  case 6:
25
25
  if (!(dateCursor < end)) {
26
- _context.next = 18;
26
+ _context.next = 19;
27
27
  break;
28
28
  }
29
29
 
30
- nextOccurrenceEnd = moment.tz(dateCursor, timezone).add(frequencyValue, frequencyUnit).valueOf();
31
- nextOccurrenceStart = moment.tz(nextOccurrenceEnd, timezone).subtract(durationValue, durationUnit).valueOf();
30
+ nextOccurrenceStart = void 0;
31
+ nextOccurrenceEnd = void 0;
32
+
33
+ if (type === StrategyTypes.Stopwatch) {
34
+ nextOccurrenceStart = dateCursor;
35
+ nextOccurrenceEnd = moment.tz(dateCursor, timezone).add(durationValue, durationUnit).valueOf();
36
+ } else {
37
+ nextOccurrenceEnd = moment.tz(dateCursor, timezone).add(frequencyValue, frequencyUnit).valueOf();
38
+ nextOccurrenceStartByBackCalculation = moment.tz(nextOccurrenceEnd, timezone).subtract(durationValue, durationUnit);
39
+ earliestNextOccurrenceStart = moment.tz(dateCursor, timezone); // NOTE: this is to ensure that the next occurrence start is always
40
+ // greater than or equal to the date cursor. Moment js handles month addition and subtraction
41
+ // with estimations (Dec 31st + 2 months gives Feb 28th/29th). This can lead to inaccurate start times when calculating forwards then backwards at the end of the month.
42
+
43
+ nextOccurrenceStart = moment.max(earliestNextOccurrenceStart, nextOccurrenceStartByBackCalculation).valueOf();
44
+ }
32
45
 
33
46
  if (!(nextOccurrenceEnd <= nextOccurrenceStart || nextOccurrenceEnd > end)) {
34
- _context.next = 11;
47
+ _context.next = 12;
35
48
  break;
36
49
  }
37
50
 
38
51
  return _context.abrupt("return");
39
52
 
40
- case 11:
53
+ case 12:
41
54
  if (!(nextOccurrenceStart >= start)) {
42
- _context.next = 15;
55
+ _context.next = 16;
43
56
  break;
44
57
  }
45
58
 
46
59
  nextOccurrence = [nextOccurrenceStart, nextOccurrenceEnd - 1];
47
- _context.next = 15;
60
+ _context.next = 16;
48
61
  return nextOccurrence;
49
62
 
50
- case 15:
63
+ case 16:
51
64
  dateCursor = nextOccurrenceEnd;
52
65
  _context.next = 6;
53
66
  break;
54
67
 
55
- case 18:
68
+ case 19:
56
69
  case "end":
57
70
  return _context.stop();
58
71
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/scheduling/strategies/getNext.ts"],"names":["getNext","moment","Unit","end","isInitial","options","start","timezone","duration","frequency","durationUnit","unit","durationValue","value","frequencyUnit","frequencyValue","initial","dateCursor","tz","valueOf","add","Millisecond","nextOccurrenceEnd","nextOccurrenceStart","subtract","nextOccurrence"],"mappings":";;oDAOiBA,O;;AAPjB,OAAOC,MAAP,MAAmB,iBAAnB;AAEA,SAA4BC,IAA5B,QAAwC,qBAAxC;AAEA;;;;AAGA,OAAO,SAAUF,OAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AACLG,UAAAA,GADK,QACLA,GADK,EAELC,SAFK,QAELA,SAFK,EAGLC,OAHK,QAGLA,OAHK,EAILC,KAJK,QAILA,KAJK,EAKLC,QALK,QAKLA,QALK;AAOGC,UAAAA,QAPH,GAO2BH,OAP3B,CAOGG,QAPH,EAOaC,SAPb,GAO2BJ,OAP3B,CAOaI,SAPb;AAQSC,UAAAA,YART,GAQgDF,QARhD,CAQGG,IARH,EAQ8BC,aAR9B,GAQgDJ,QARhD,CAQuBK,KARvB;AASSC,UAAAA,aATT,GASkDL,SATlD,CASGE,IATH,EAS+BI,cAT/B,GASkDN,SATlD,CASwBI,KATxB;AAWDG,UAAAA,OAXC,GAWkBZ,SAXlB;AAaDa,UAAAA,UAbC,GAaoBD,OAAO,GAC5Bf,MAAM,CAACiB,EAAP,CAAUZ,KAAV,EAAiBC,QAAjB,EAA2BY,OAA3B,EAD4B,GAE5BlB,MAAM,CACHiB,EADH,CACMZ,KADN,EACaC,QADb,EAEGa,GAFH,CAEO,CAFP,EAEUlB,IAAI,CAACmB,WAFf,EAGGF,OAHH,EAfC;;AAAA;AAAA,gBAoBEF,UAAU,GAAGd,GApBf;AAAA;AAAA;AAAA;;AAqBGmB,UAAAA,iBArBH,GAqBuBrB,MAAM,CAC7BiB,EADuB,CACpBD,UADoB,EACRV,QADQ,EAEvBa,GAFuB,CAEnBL,cAFmB,EAEHD,aAFG,EAGvBK,OAHuB,EArBvB;AA0BGI,UAAAA,mBA1BH,GA0ByBtB,MAAM,CAC/BiB,EADyB,CACtBI,iBADsB,EACHf,QADG,EAEzBiB,QAFyB,CAEhBZ,aAFgB,EAEDF,YAFC,EAGzBS,OAHyB,EA1BzB;;AAAA,gBA+BCG,iBAAiB,IAAIC,mBAArB,IAA4CD,iBAAiB,GAAGnB,GA/BjE;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,gBAmCCoB,mBAAmB,IAAIjB,KAnCxB;AAAA;AAAA;AAAA;;AAoCKmB,UAAAA,cApCL,GAoCsB,CAACF,mBAAD,EAAsBD,iBAAiB,GAAG,CAA1C,CApCtB;AAAA;AAsCD,iBAAMG,cAAN;;AAtCC;AAyCHR,UAAAA,UAAU,GAAGK,iBAAb;AAzCG;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["import moment from 'moment-timezone'\n\nimport { GetNext, Interval, Unit } from '../scheduling.types'\n\n/**\n * Generates next occurrence interval for stopwatch and window strategy\n */\nexport function* getNext({\n end,\n isInitial,\n options,\n start,\n timezone,\n}: GetNext): IterableIterator<Interval> {\n const { duration, frequency } = options\n const { unit: durationUnit, value: durationValue } = duration\n const { unit: frequencyUnit, value: frequencyValue } = frequency\n\n let initial: boolean = isInitial\n\n let dateCursor: number = initial\n ? moment.tz(start, timezone).valueOf()\n : moment\n .tz(start, timezone)\n .add(1, Unit.Millisecond)\n .valueOf()\n\n while (dateCursor < end) {\n const nextOccurrenceEnd = moment\n .tz(dateCursor, timezone)\n .add(frequencyValue, frequencyUnit)\n .valueOf()\n\n const nextOccurrenceStart = moment\n .tz(nextOccurrenceEnd, timezone)\n .subtract(durationValue, durationUnit)\n .valueOf()\n\n if (nextOccurrenceEnd <= nextOccurrenceStart || nextOccurrenceEnd > end) {\n return\n }\n\n if (nextOccurrenceStart >= start) {\n const nextOccurrence = [nextOccurrenceStart, nextOccurrenceEnd - 1]\n\n yield nextOccurrence\n }\n\n dateCursor = nextOccurrenceEnd\n }\n}\n"],"file":"getNext.js"}
1
+ {"version":3,"sources":["../../../src/scheduling/strategies/getNext.ts"],"names":["getNext","moment","StrategyTypes","Unit","end","isInitial","options","start","timezone","type","duration","frequency","durationUnit","unit","durationValue","value","frequencyUnit","frequencyValue","initial","dateCursor","tz","valueOf","add","Millisecond","nextOccurrenceStart","nextOccurrenceEnd","Stopwatch","nextOccurrenceStartByBackCalculation","subtract","earliestNextOccurrenceStart","max","nextOccurrence"],"mappings":";;oDAOiBA,O;;AAPjB,OAAOC,MAAP,MAAmB,iBAAnB;AAEA,SAA4BC,aAA5B,EAA2CC,IAA3C,QAAuD,qBAAvD;AAEA;;;;AAGA,OAAO,SAAUH,OAAV;AAAA;AAAA;AAAA;AAAA;AAAA;AACLI,UAAAA,GADK,QACLA,GADK,EAELC,SAFK,QAELA,SAFK,EAGLC,OAHK,QAGLA,OAHK,EAILC,KAJK,QAILA,KAJK,EAKLC,QALK,QAKLA,QALK,EAMLC,IANK,QAMLA,IANK;AAQGC,UAAAA,QARH,GAQ2BJ,OAR3B,CAQGI,QARH,EAQaC,SARb,GAQ2BL,OAR3B,CAQaK,SARb;AASSC,UAAAA,YATT,GASgDF,QAThD,CASGG,IATH,EAS8BC,aAT9B,GASgDJ,QAThD,CASuBK,KATvB;AAUSC,UAAAA,aAVT,GAUkDL,SAVlD,CAUGE,IAVH,EAU+BI,cAV/B,GAUkDN,SAVlD,CAUwBI,KAVxB;AAYDG,UAAAA,OAZC,GAYkBb,SAZlB;AAcDc,UAAAA,UAdC,GAcoBD,OAAO,GAC5BjB,MAAM,CAACmB,EAAP,CAAUb,KAAV,EAAiBC,QAAjB,EAA2Ba,OAA3B,EAD4B,GAE5BpB,MAAM,CACHmB,EADH,CACMb,KADN,EACaC,QADb,EAEGc,GAFH,CAEO,CAFP,EAEUnB,IAAI,CAACoB,WAFf,EAGGF,OAHH,EAhBC;;AAAA;AAAA,gBAqBEF,UAAU,GAAGf,GArBf;AAAA;AAAA;AAAA;;AAsBCoB,UAAAA,mBAtBD;AAuBCC,UAAAA,iBAvBD;;AAyBH,cAAIhB,IAAI,KAAKP,aAAa,CAACwB,SAA3B,EAAsC;AACpCF,YAAAA,mBAAmB,GAAGL,UAAtB;AACAM,YAAAA,iBAAiB,GAAGxB,MAAM,CACvBmB,EADiB,CACdD,UADc,EACFX,QADE,EAEjBc,GAFiB,CAEbR,aAFa,EAEEF,YAFF,EAGjBS,OAHiB,EAApB;AAKD,WAPD,MAOO;AACLI,YAAAA,iBAAiB,GAAGxB,MAAM,CACvBmB,EADiB,CACdD,UADc,EACFX,QADE,EAEjBc,GAFiB,CAEbL,cAFa,EAEGD,aAFH,EAGjBK,OAHiB,EAApB;AAKMM,YAAAA,oCAND,GAMwC1B,MAAM,CAChDmB,EAD0C,CACvCK,iBADuC,EACpBjB,QADoB,EAE1CoB,QAF0C,CAEjCd,aAFiC,EAElBF,YAFkB,CANxC;AAUCiB,YAAAA,2BAVD,GAU+B5B,MAAM,CACvCmB,EADiC,CAC9BD,UAD8B,EAClBX,QADkB,CAV/B,EAaH;AACA;AACA;;AACFgB,YAAAA,mBAAmB,GACjBvB,MAAM,CAAC6B,GAAP,CACAD,2BADA,EAEAF,oCAFA,EAGAN,OAHA,EADF;AAKD;;AArDE,gBAwDCI,iBAAiB,IAAID,mBAArB,IAA4CC,iBAAiB,GAAGrB,GAxDjE;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,gBA4DCoB,mBAAmB,IAAIjB,KA5DxB;AAAA;AAAA;AAAA;;AA6DKwB,UAAAA,cA7DL,GA6DsB,CAACP,mBAAD,EAAsBC,iBAAiB,GAAG,CAA1C,CA7DtB;AAAA;AA+DD,iBAAMM,cAAN;;AA/DC;AAkEHZ,UAAAA,UAAU,GAAGM,iBAAb;AAlEG;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["import moment from 'moment-timezone'\n\nimport { GetNext, Interval, StrategyTypes, Unit } from '../scheduling.types'\n\n/**\n * Generates next occurrence interval for stopwatch and window strategy\n */\nexport function* getNext({\n end,\n isInitial,\n options,\n start,\n timezone,\n type,\n}: GetNext): IterableIterator<Interval> {\n const { duration, frequency } = options\n const { unit: durationUnit, value: durationValue } = duration\n const { unit: frequencyUnit, value: frequencyValue } = frequency\n\n let initial: boolean = isInitial\n\n let dateCursor: number = initial\n ? moment.tz(start, timezone).valueOf()\n : moment\n .tz(start, timezone)\n .add(1, Unit.Millisecond)\n .valueOf()\n\n while (dateCursor < end) {\n let nextOccurrenceStart: number\n let nextOccurrenceEnd: number\n\n if (type === StrategyTypes.Stopwatch) {\n nextOccurrenceStart = dateCursor\n nextOccurrenceEnd = moment\n .tz(dateCursor, timezone)\n .add(durationValue, durationUnit)\n .valueOf()\n\n } else {\n nextOccurrenceEnd = moment\n .tz(dateCursor, timezone)\n .add(frequencyValue, frequencyUnit)\n .valueOf()\n\n const nextOccurrenceStartByBackCalculation = moment\n .tz(nextOccurrenceEnd, timezone)\n .subtract(durationValue, durationUnit)\n\n const earliestNextOccurrenceStart = moment\n .tz(dateCursor, timezone)\n\n // NOTE: this is to ensure that the next occurrence start is always\n // greater than or equal to the date cursor. Moment js handles month addition and subtraction\n // with estimations (Dec 31st + 2 months gives Feb 28th/29th). This can lead to inaccurate start times when calculating forwards then backwards at the end of the month.\n nextOccurrenceStart =\n moment.max(\n earliestNextOccurrenceStart,\n nextOccurrenceStartByBackCalculation\n ).valueOf()\n }\n\n\n if (nextOccurrenceEnd <= nextOccurrenceStart || nextOccurrenceEnd > end) {\n return\n }\n\n if (nextOccurrenceStart >= start) {\n const nextOccurrence = [nextOccurrenceStart, nextOccurrenceEnd - 1]\n\n yield nextOccurrence\n }\n\n dateCursor = nextOccurrenceEnd\n }\n}\n"],"file":"getNext.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lighthouse/common",
3
- "version": "4.31.1-canary.8",
3
+ "version": "4.32.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "lib/index.js",
package/mise.toml DELETED
@@ -1,3 +0,0 @@
1
- [tools]
2
- node = "16"
3
- python = "3.9"