@lighthouse/common 6.3.0-canary.0 → 6.3.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.
@@ -27,20 +27,24 @@ const fetchImageForPdfGeneratorService = async function (url) {
27
27
  if (!applicationId) {
28
28
  throw new Error('Requestor has insufficient permissions');
29
29
  }
30
- const keyWithTransformations = url.substring(url.indexOf(applicationId));
30
+ const {
31
+ path,
32
+ queryString,
33
+ searchParamsObject
34
+ } = parseUrlString(url);
35
+ const transformedBucketImagePath = path + (queryString ? `/${queryString}` : '');
31
36
  const alreadyTransformedImage = await fetchResourceFromS3({
32
- bucketName: `${process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE}`,
33
- key: keyWithTransformations
37
+ bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,
38
+ key: transformedBucketImagePath
34
39
  });
35
40
  if (alreadyTransformedImage?.body) {
36
41
  const fullDataUrl = formatBase64Image({
37
42
  base64String: alreadyTransformedImage.body.toString('base64'),
38
- key: keyWithTransformations
43
+ key: transformedBucketImagePath
39
44
  });
40
45
  return fullDataUrl;
41
46
  }
42
- const keyWithoutTransformations = `/${keyWithTransformations.split('?')[0]}`;
43
- const transformerResponse = await requestImageTransformation(keyWithoutTransformations);
47
+ const transformerResponse = await requestImageTransformation(`/${path}`, searchParamsObject);
44
48
  const statusCode = transformerResponse.statusCode;
45
49
  switch (statusCode) {
46
50
  case 200:
@@ -48,27 +52,27 @@ const fetchImageForPdfGeneratorService = async function (url) {
48
52
  console.debug('Image transformation successful');
49
53
  const fullDataUrl = formatBase64Image({
50
54
  base64String: transformerResponse.body.toString('base64'),
51
- key: keyWithTransformations
55
+ key: url
52
56
  });
53
57
  return fullDataUrl;
54
58
  }
55
59
  case 302:
56
60
  {
57
61
  console.debug('Image transformation successful but image is too big for lambda delivery, fetching directly from S3');
58
- const redirectLocation = transformerResponse.headers?.Location;
59
- if (redirectLocation) {
60
- const newlyTransformedImage = await fetchResourceFromS3({
61
- bucketName: `${process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE}`,
62
- key: keyWithTransformations
63
- });
64
- console.debug('Image successfully fetched from S3 at:', redirectLocation);
65
- const fullDataUrl = formatBase64Image({
66
- base64String: newlyTransformedImage.body.toString('base64'),
67
- key: keyWithTransformations
68
- });
69
- return fullDataUrl;
62
+ const redirectLocation = transformerResponse.headers.Location;
63
+ if (!redirectLocation) {
64
+ throw new Error('Redirect response received but no location provided');
70
65
  }
71
- throw new Error('Redirect response received but no location provided');
66
+ const newlyTransformedImage = await fetchResourceFromS3({
67
+ bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,
68
+ key: transformedBucketImagePath
69
+ });
70
+ console.debug('Image successfully fetched from S3 at:', redirectLocation);
71
+ const fullDataUrl = formatBase64Image({
72
+ base64String: newlyTransformedImage.body.toString('base64'),
73
+ key: transformedBucketImagePath
74
+ });
75
+ return fullDataUrl;
72
76
  }
73
77
  case 400:
74
78
  throw new Error(`Bad request to image transformer: ${transformerResponse.body}`);
@@ -83,16 +87,20 @@ const fetchImageForPdfGeneratorService = async function (url) {
83
87
  }
84
88
  };
85
89
  exports.fetchImageForPdfGeneratorService = fetchImageForPdfGeneratorService;
86
- async function requestImageTransformation(key) {
87
- if (!key) {
90
+ async function requestImageTransformation(path, searchParamsObject) {
91
+ if (!path) {
88
92
  throw new Error('Image Path is required for image transformation');
89
93
  }
90
- console.debug('ImageTransformation: Invoking image transformer lambda for path:', key);
94
+ console.debug('ImageTransformation: Invoking image transformer lambda for path:', {
95
+ path,
96
+ searchParamsObject
97
+ });
91
98
  const lambdaEvent = {
99
+ queryStringParameters: searchParamsObject,
92
100
  requestContext: {
93
101
  http: {
94
102
  method: 'GET',
95
- path: key
103
+ path
96
104
  }
97
105
  }
98
106
  };
@@ -160,4 +168,33 @@ function formatBase64Image({
160
168
  throw new Error('InvalidImageError');
161
169
  }
162
170
  return fullDataUrl;
171
+ }
172
+
173
+ /**
174
+ * Parses a URL-like string into path and query parameters
175
+ * @param {string} urlString - String like "https://example.cloudfront.net/<applicationId>/<path>/filename.jpeg?width=100&height=100"
176
+ * @returns {Object} - Object with { path: string, queryString: string, searchParamsObject: Object }
177
+ * @example
178
+ * parseUrlString("https://example.cloudfront.net/abc123/folder/image.jpeg?width=100&height=100")
179
+ * // Returns: { path: "abc123/folder/image.jpeg", queryString: "width=100,t=456", searchParamsObject: { width: "100", height: "100" } }
180
+ */
181
+ function parseUrlString(urlString) {
182
+ if (!urlString || typeof urlString !== 'string') {
183
+ throw new Error('URL string is required and must be a string');
184
+ }
185
+
186
+ // Extract the path after the domain
187
+ const url = new URL(urlString);
188
+ let searchParamsObject = {};
189
+ url.searchParams.forEach((value, key) => {
190
+ searchParamsObject[key] = value;
191
+ });
192
+ let queryString = url.searchParams.toString();
193
+ queryString = queryString ? queryString.replace(/&/g, ',') : '';
194
+ return {
195
+ path: url.pathname.substring(1),
196
+ // Remove leading '/'
197
+ queryString,
198
+ searchParamsObject
199
+ };
163
200
  }
@@ -39,11 +39,14 @@ function buildAuditPdf(pdfOptions, data) {
39
39
  entity,
40
40
  timezone
41
41
  } = data;
42
+ const {
43
+ flags = {}
44
+ } = pdfOptions;
42
45
  const sequenceId = entity.sequenceId;
43
46
  const timestamp = entity.createdAt;
44
47
  const title = entity.title || 'Unknown';
45
48
  const fileTitle = `Audit Report - ${title}`;
46
- return generateContent(data).then(content => (0, _helpers.generateDefinition)({
49
+ return generateContent(data, flags).then(content => (0, _helpers.generateDefinition)({
47
50
  content,
48
51
  fileTitle,
49
52
  sequenceId,
@@ -59,9 +62,6 @@ function generateContent(data) {
59
62
  const {
60
63
  entity
61
64
  } = data;
62
- console.log('GENERATE AUDIT CONTENT:', JSON.stringify({
63
- data
64
- }, null, 2));
65
65
  const {
66
66
  followUps = [],
67
67
  footerFields = {},
@@ -72,9 +72,6 @@ function generateContent(data) {
72
72
  } = entity;
73
73
  const timezone = entity?.timezone || data?.timezone || 'UTC';
74
74
  const entityDetails = (0, _helpers2.getAuditEntryDetails)(data);
75
- console.log({
76
- entryDetails: entityDetails
77
- });
78
75
  const {
79
76
  gpsText,
80
77
  groupedData,
@@ -215,6 +212,6 @@ function generateContent(data) {
215
212
  footerTemplate,
216
213
  headerTemplate
217
214
  }) => [titleTable, followUpItems, ...auditItemsTitle, ...headerTemplate, ...entry, hLineTop, totalScoreTable, hLineBottom, ...footerTemplate]).catch(err => {
218
- throw new Error(`GenerateContentError: ${err}`);
215
+ throw new Error(`GenerateContentError: ${err.message}`);
219
216
  });
220
217
  }
@@ -11,7 +11,7 @@ var s3 = new AWS.S3({
11
11
  });
12
12
  export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
13
13
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(url) {
14
- var urlMatch, applicationId, keyWithTransformations, alreadyTransformedImage, fullDataUrl, keyWithoutTransformations, transformerResponse, statusCode, _fullDataUrl, _transformerResponse$, redirectLocation, newlyTransformedImage, _fullDataUrl2, _t;
14
+ var urlMatch, applicationId, _parseUrlString, path, queryString, searchParamsObject, transformedBucketImagePath, alreadyTransformedImage, fullDataUrl, transformerResponse, statusCode, _fullDataUrl, redirectLocation, newlyTransformedImage, _fullDataUrl2, _t;
15
15
  return _regeneratorRuntime.wrap(function (_context) {
16
16
  while (1) switch (_context.prev = _context.next) {
17
17
  case 0:
@@ -30,11 +30,12 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
30
30
  }
31
31
  throw new Error('Requestor has insufficient permissions');
32
32
  case 2:
33
- keyWithTransformations = url.substring(url.indexOf(applicationId));
33
+ _parseUrlString = parseUrlString(url), path = _parseUrlString.path, queryString = _parseUrlString.queryString, searchParamsObject = _parseUrlString.searchParamsObject;
34
+ transformedBucketImagePath = path + (queryString ? "/".concat(queryString) : '');
34
35
  _context.next = 3;
35
36
  return fetchResourceFromS3({
36
- bucketName: "".concat(process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE),
37
- key: keyWithTransformations
37
+ bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,
38
+ key: transformedBucketImagePath
38
39
  });
39
40
  case 3:
40
41
  alreadyTransformedImage = _context.sent;
@@ -44,13 +45,12 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
44
45
  }
45
46
  fullDataUrl = formatBase64Image({
46
47
  base64String: alreadyTransformedImage.body.toString('base64'),
47
- key: keyWithTransformations
48
+ key: transformedBucketImagePath
48
49
  });
49
50
  return _context.abrupt("return", fullDataUrl);
50
51
  case 4:
51
- keyWithoutTransformations = "/".concat(keyWithTransformations.split('?')[0]);
52
52
  _context.next = 5;
53
- return requestImageTransformation(keyWithoutTransformations);
53
+ return requestImageTransformation("/".concat(path), searchParamsObject);
54
54
  case 5:
55
55
  transformerResponse = _context.sent;
56
56
  statusCode = transformerResponse.statusCode;
@@ -61,31 +61,31 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
61
61
  console.debug('Image transformation successful');
62
62
  _fullDataUrl = formatBase64Image({
63
63
  base64String: transformerResponse.body.toString('base64'),
64
- key: keyWithTransformations
64
+ key: url
65
65
  });
66
66
  return _context.abrupt("return", _fullDataUrl);
67
67
  case 7:
68
68
  console.debug('Image transformation successful but image is too big for lambda delivery, fetching directly from S3');
69
- redirectLocation = (_transformerResponse$ = transformerResponse.headers) === null || _transformerResponse$ === void 0 ? void 0 : _transformerResponse$.Location;
70
- if (!redirectLocation) {
71
- _context.next = 9;
69
+ redirectLocation = transformerResponse.headers.Location;
70
+ if (redirectLocation) {
71
+ _context.next = 8;
72
72
  break;
73
73
  }
74
- _context.next = 8;
74
+ throw new Error('Redirect response received but no location provided');
75
+ case 8:
76
+ _context.next = 9;
75
77
  return fetchResourceFromS3({
76
- bucketName: "".concat(process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE),
77
- key: keyWithTransformations
78
+ bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,
79
+ key: transformedBucketImagePath
78
80
  });
79
- case 8:
81
+ case 9:
80
82
  newlyTransformedImage = _context.sent;
81
83
  console.debug('Image successfully fetched from S3 at:', redirectLocation);
82
84
  _fullDataUrl2 = formatBase64Image({
83
85
  base64String: newlyTransformedImage.body.toString('base64'),
84
- key: keyWithTransformations
86
+ key: transformedBucketImagePath
85
87
  });
86
88
  return _context.abrupt("return", _fullDataUrl2);
87
- case 9:
88
- throw new Error('Redirect response received but no location provided');
89
89
  case 10:
90
90
  throw new Error("Bad request to image transformer: ".concat(transformerResponse.body));
91
91
  case 11:
@@ -106,27 +106,31 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
106
106
  return _ref.apply(this, arguments);
107
107
  };
108
108
  }();
109
- export function requestImageTransformation(_x2) {
109
+ export function requestImageTransformation(_x2, _x3) {
110
110
  return _requestImageTransformation.apply(this, arguments);
111
111
  }
112
112
  function _requestImageTransformation() {
113
- _requestImageTransformation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(key) {
113
+ _requestImageTransformation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(path, searchParamsObject) {
114
114
  var lambdaEvent, params, result, response, errorMessage, _t2;
115
115
  return _regeneratorRuntime.wrap(function (_context2) {
116
116
  while (1) switch (_context2.prev = _context2.next) {
117
117
  case 0:
118
- if (key) {
118
+ if (path) {
119
119
  _context2.next = 1;
120
120
  break;
121
121
  }
122
122
  throw new Error('Image Path is required for image transformation');
123
123
  case 1:
124
- console.debug('ImageTransformation: Invoking image transformer lambda for path:', key);
124
+ console.debug('ImageTransformation: Invoking image transformer lambda for path:', {
125
+ path: path,
126
+ searchParamsObject: searchParamsObject
127
+ });
125
128
  lambdaEvent = {
129
+ queryStringParameters: searchParamsObject,
126
130
  requestContext: {
127
131
  http: {
128
132
  method: 'GET',
129
- path: key
133
+ path: path
130
134
  }
131
135
  }
132
136
  };
@@ -156,7 +160,7 @@ function _requestImageTransformation() {
156
160
  }));
157
161
  return _requestImageTransformation.apply(this, arguments);
158
162
  }
159
- export function fetchResourceFromS3(_x3) {
163
+ export function fetchResourceFromS3(_x4) {
160
164
  return _fetchResourceFromS.apply(this, arguments);
161
165
  }
162
166
  function _fetchResourceFromS() {
@@ -228,4 +232,33 @@ export function formatBase64Image(_ref3) {
228
232
  }
229
233
  return fullDataUrl;
230
234
  }
235
+
236
+ /**
237
+ * Parses a URL-like string into path and query parameters
238
+ * @param {string} urlString - String like "https://example.cloudfront.net/<applicationId>/<path>/filename.jpeg?width=100&height=100"
239
+ * @returns {Object} - Object with { path: string, queryString: string, searchParamsObject: Object }
240
+ * @example
241
+ * parseUrlString("https://example.cloudfront.net/abc123/folder/image.jpeg?width=100&height=100")
242
+ * // Returns: { path: "abc123/folder/image.jpeg", queryString: "width=100,t=456", searchParamsObject: { width: "100", height: "100" } }
243
+ */
244
+ function parseUrlString(urlString) {
245
+ if (!urlString || typeof urlString !== 'string') {
246
+ throw new Error('URL string is required and must be a string');
247
+ }
248
+
249
+ // Extract the path after the domain
250
+ var url = new URL(urlString);
251
+ var searchParamsObject = {};
252
+ url.searchParams.forEach(function (value, key) {
253
+ searchParamsObject[key] = value;
254
+ });
255
+ var queryString = url.searchParams.toString();
256
+ queryString = queryString ? queryString.replace(/&/g, ',') : '';
257
+ return {
258
+ path: url.pathname.substring(1),
259
+ // Remove leading '/'
260
+ queryString: queryString,
261
+ searchParamsObject: searchParamsObject
262
+ };
263
+ }
231
264
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["validateBase64Image","AWS","REGION","process","env","AWS_REGION","lambda","Lambda","region","s3","S3","fetchImageForPdfGeneratorService","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","urlMatch","applicationId","keyWithTransformations","alreadyTransformedImage","fullDataUrl","keyWithoutTransformations","transformerResponse","statusCode","_fullDataUrl","_transformerResponse$","redirectLocation","newlyTransformedImage","_fullDataUrl2","_t","wrap","_context","prev","next","console","debug","Error","match","substring","indexOf","fetchResourceFromS3","bucketName","concat","S3_BUCKET_IMAGE_TRANSFORMER_CACHE","key","sent","body","formatBase64Image","base64String","toString","abrupt","split","requestImageTransformation","headers","Location","stop","_x","apply","arguments","_x2","_requestImageTransformation","_callee2","lambdaEvent","params","result","response","errorMessage","_t2","_context2","requestContext","http","method","path","FunctionName","IMAGE_TRANSFORMER_ARN","InvocationType","Payload","JSON","stringify","invoke","promise","parse","message","error","_x3","_fetchResourceFromS","_callee3","_ref2","_t3","_context3","Bucket","Key","getObject","Body","contentType","ContentType","contentLength","ContentLength","lastModified","LastModified","etag","ETag","code","_ref3","imageType","toLowerCase","includes","base64Flag","isValid"],"sources":["../../../src/helpers/fetch-image-for-pdf-generator-service/index.js"],"sourcesContent":["import { validateBase64Image } from '../image-validators'\nimport AWS from 'aws-sdk'\nconst REGION = process.env.AWS_REGION\n\nconst lambda = new AWS.Lambda({\n region: REGION,\n})\nconst s3 = new AWS.S3({\n region: REGION,\n})\n\nexport const fetchImageForPdfGeneratorService = async function (url) {\n console.debug(\n 'Fetching image via CloudFront For Serverless Pdf Generator Service'\n )\n\n if (!url) {\n throw new Error('URL is required to fetch image for PDF generator service')\n }\n\n const urlMatch = url && url.match(/([a-f0-9]{24})\\//)\n const applicationId = urlMatch && urlMatch[1]\n\n if (!applicationId) {\n throw new Error('Requestor has insufficient permissions')\n }\n\n const keyWithTransformations = url.substring(url.indexOf(applicationId))\n\n const alreadyTransformedImage = await fetchResourceFromS3({\n bucketName: `${process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE}`,\n key: keyWithTransformations,\n })\n\n if (alreadyTransformedImage?.body) {\n const fullDataUrl = formatBase64Image({\n base64String: alreadyTransformedImage.body.toString('base64'),\n key: keyWithTransformations,\n })\n return fullDataUrl\n }\n\n const keyWithoutTransformations = `/${keyWithTransformations.split('?')[0]}`\n\n const transformerResponse = await requestImageTransformation(\n keyWithoutTransformations\n )\n\n const statusCode = transformerResponse.statusCode\n\n switch (statusCode) {\n case 200: {\n console.debug('Image transformation successful')\n\n const fullDataUrl = formatBase64Image({\n base64String: transformerResponse.body.toString('base64'),\n key: keyWithTransformations,\n })\n\n return fullDataUrl\n }\n case 302: {\n console.debug(\n 'Image transformation successful but image is too big for lambda delivery, fetching directly from S3'\n )\n const redirectLocation = transformerResponse.headers?.Location\n if (redirectLocation) {\n const newlyTransformedImage = await fetchResourceFromS3({\n bucketName: `${process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE}`,\n key: keyWithTransformations,\n })\n console.debug(\n 'Image successfully fetched from S3 at:',\n redirectLocation\n )\n\n const fullDataUrl = formatBase64Image({\n base64String: newlyTransformedImage.body.toString('base64'),\n key: keyWithTransformations,\n })\n\n return fullDataUrl\n }\n throw new Error('Redirect response received but no location provided')\n }\n case 400:\n throw new Error(\n `Bad request to image transformer: ${transformerResponse.body}`\n )\n case 403:\n throw new Error('Requested transformed image is too big')\n case 404:\n throw new Error('The requested image does not exist')\n case 500:\n throw new Error(\n `Image transformation failed: ${transformerResponse.body}`\n )\n default:\n throw new Error(\n `Unexpected response from image transformer: ${statusCode} - ${transformerResponse.body}`\n )\n }\n}\n\nexport async function requestImageTransformation(key) {\n if (!key) {\n throw new Error('Image Path is required for image transformation')\n }\n\n console.debug(\n 'ImageTransformation: Invoking image transformer lambda for path:',\n key\n )\n\n const lambdaEvent = {\n requestContext: {\n http: {\n method: 'GET',\n path: key,\n },\n },\n }\n\n const params = {\n FunctionName: process.env.IMAGE_TRANSFORMER_ARN,\n InvocationType: 'RequestResponse',\n Payload: JSON.stringify(lambdaEvent),\n }\n\n try {\n const result = await lambda.invoke(params).promise()\n\n const response = JSON.parse(result.Payload)\n\n return response\n } catch (error) {\n const errorMessage = `Failed to invoke image transformer lambda: ${error.message}`\n console.error(errorMessage, error)\n throw new Error(errorMessage)\n }\n}\n\nexport async function fetchResourceFromS3({ bucketName, key }) {\n console.debug(\n `Fetching resource from S3 Bucket: '${bucketName}' at path: '${key}'`\n )\n if (!bucketName || !key) {\n throw new Error(\n 'bucketName and key are required for S3 resource fetch ' +\n JSON.stringify({ bucketName, key })\n )\n }\n\n const params = {\n Bucket: bucketName,\n Key: key,\n }\n\n try {\n const result = await s3.getObject(params).promise()\n\n return {\n body: result.Body,\n contentType: result.ContentType,\n contentLength: result.ContentLength,\n lastModified: result.LastModified,\n etag: result.ETag,\n }\n } catch (error) {\n if (error.code !== 'NoSuchKey') {\n console.error('Failed to fetch image:', error)\n throw new Error(`Failed to fetch image: ${bucketName}/${key}`)\n }\n\n console.debug('Image not found in transformed bucket, invoking transformer')\n }\n}\n\nexport function formatBase64Image({ base64String, key }) {\n if (!key) {\n throw new Error('Key is required for image formatting')\n }\n\n const imageType = key.toLowerCase().includes('.png') ? 'png' : 'jpeg'\n const base64Flag = `data:image/${imageType};base64,`\n const fullDataUrl = `${base64Flag}${base64String}`\n\n // Validate the formatted data URL\n const isValid = validateBase64Image(fullDataUrl)\n if (!isValid) {\n throw new Error('InvalidImageError')\n }\n\n return fullDataUrl\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["validateBase64Image","AWS","REGION","process","env","AWS_REGION","lambda","Lambda","region","s3","S3","fetchImageForPdfGeneratorService","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","urlMatch","applicationId","_parseUrlString","path","queryString","searchParamsObject","transformedBucketImagePath","alreadyTransformedImage","fullDataUrl","transformerResponse","statusCode","_fullDataUrl","redirectLocation","newlyTransformedImage","_fullDataUrl2","_t","wrap","_context","prev","next","console","debug","Error","match","parseUrlString","concat","fetchResourceFromS3","bucketName","S3_BUCKET_IMAGE_TRANSFORMER_CACHE","key","sent","body","formatBase64Image","base64String","toString","abrupt","requestImageTransformation","headers","Location","stop","_x","apply","arguments","_x2","_x3","_requestImageTransformation","_callee2","lambdaEvent","params","result","response","errorMessage","_t2","_context2","queryStringParameters","requestContext","http","method","FunctionName","IMAGE_TRANSFORMER_ARN","InvocationType","Payload","JSON","stringify","invoke","promise","parse","message","error","_x4","_fetchResourceFromS","_callee3","_ref2","_t3","_context3","Bucket","Key","getObject","Body","contentType","ContentType","contentLength","ContentLength","lastModified","LastModified","etag","ETag","code","_ref3","imageType","toLowerCase","includes","base64Flag","isValid","urlString","URL","searchParams","forEach","value","replace","pathname","substring"],"sources":["../../../src/helpers/fetch-image-for-pdf-generator-service/index.js"],"sourcesContent":["import { validateBase64Image } from '../image-validators'\nimport AWS from 'aws-sdk'\nconst REGION = process.env.AWS_REGION\n\nconst lambda = new AWS.Lambda({\n region: REGION,\n})\nconst s3 = new AWS.S3({\n region: REGION,\n})\n\nexport const fetchImageForPdfGeneratorService = async function (url) {\n console.debug(\n 'Fetching image via CloudFront For Serverless Pdf Generator Service'\n )\n\n if (!url) {\n throw new Error('URL is required to fetch image for PDF generator service')\n }\n\n const urlMatch = url && url.match(/([a-f0-9]{24})\\//)\n const applicationId = urlMatch && urlMatch[1]\n\n if (!applicationId) {\n throw new Error('Requestor has insufficient permissions')\n }\n\n const { path, queryString, searchParamsObject } = parseUrlString(url)\n\n const transformedBucketImagePath =\n path + (queryString ? `/${queryString}` : '')\n\n const alreadyTransformedImage = await fetchResourceFromS3({\n bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,\n key: transformedBucketImagePath,\n })\n\n if (alreadyTransformedImage?.body) {\n const fullDataUrl = formatBase64Image({\n base64String: alreadyTransformedImage.body.toString('base64'),\n key: transformedBucketImagePath,\n })\n return fullDataUrl\n }\n\n const transformerResponse = await requestImageTransformation(\n `/${path}`,\n searchParamsObject\n )\n\n const statusCode = transformerResponse.statusCode\n\n switch (statusCode) {\n case 200: {\n console.debug('Image transformation successful')\n\n const fullDataUrl = formatBase64Image({\n base64String: transformerResponse.body.toString('base64'),\n key: url,\n })\n\n return fullDataUrl\n }\n case 302: {\n console.debug(\n 'Image transformation successful but image is too big for lambda delivery, fetching directly from S3'\n )\n const redirectLocation = transformerResponse.headers.Location\n\n if (!redirectLocation) {\n throw new Error('Redirect response received but no location provided')\n }\n const newlyTransformedImage = await fetchResourceFromS3({\n bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,\n key: transformedBucketImagePath,\n })\n console.debug('Image successfully fetched from S3 at:', redirectLocation)\n\n const fullDataUrl = formatBase64Image({\n base64String: newlyTransformedImage.body.toString('base64'),\n key: transformedBucketImagePath,\n })\n\n return fullDataUrl\n }\n case 400:\n throw new Error(\n `Bad request to image transformer: ${transformerResponse.body}`\n )\n case 403:\n throw new Error('Requested transformed image is too big')\n case 404:\n throw new Error('The requested image does not exist')\n case 500:\n throw new Error(\n `Image transformation failed: ${transformerResponse.body}`\n )\n default:\n throw new Error(\n `Unexpected response from image transformer: ${statusCode} - ${transformerResponse.body}`\n )\n }\n}\n\nexport async function requestImageTransformation(path, searchParamsObject) {\n if (!path) {\n throw new Error('Image Path is required for image transformation')\n }\n\n console.debug(\n 'ImageTransformation: Invoking image transformer lambda for path:',\n { path, searchParamsObject }\n )\n\n const lambdaEvent = {\n queryStringParameters: searchParamsObject,\n requestContext: {\n http: {\n method: 'GET',\n path,\n },\n },\n }\n\n const params = {\n FunctionName: process.env.IMAGE_TRANSFORMER_ARN,\n InvocationType: 'RequestResponse',\n Payload: JSON.stringify(lambdaEvent),\n }\n\n try {\n const result = await lambda.invoke(params).promise()\n\n const response = JSON.parse(result.Payload)\n\n return response\n } catch (error) {\n const errorMessage = `Failed to invoke image transformer lambda: ${error.message}`\n console.error(errorMessage, error)\n throw new Error(errorMessage)\n }\n}\n\nexport async function fetchResourceFromS3({ bucketName, key }) {\n console.debug(\n `Fetching resource from S3 Bucket: '${bucketName}' at path: '${key}'`\n )\n if (!bucketName || !key) {\n throw new Error(\n 'bucketName and key are required for S3 resource fetch ' +\n JSON.stringify({ bucketName, key })\n )\n }\n\n const params = {\n Bucket: bucketName,\n Key: key,\n }\n\n try {\n const result = await s3.getObject(params).promise()\n\n return {\n body: result.Body,\n contentType: result.ContentType,\n contentLength: result.ContentLength,\n lastModified: result.LastModified,\n etag: result.ETag,\n }\n } catch (error) {\n if (error.code !== 'NoSuchKey') {\n console.error('Failed to fetch image:', error)\n throw new Error(`Failed to fetch image: ${bucketName}/${key}`)\n }\n\n console.debug('Image not found in transformed bucket, invoking transformer')\n }\n}\n\nexport function formatBase64Image({ base64String, key }) {\n if (!key) {\n throw new Error('Key is required for image formatting')\n }\n\n const imageType = key.toLowerCase().includes('.png') ? 'png' : 'jpeg'\n const base64Flag = `data:image/${imageType};base64,`\n const fullDataUrl = `${base64Flag}${base64String}`\n\n // Validate the formatted data URL\n const isValid = validateBase64Image(fullDataUrl)\n if (!isValid) {\n throw new Error('InvalidImageError')\n }\n\n return fullDataUrl\n}\n\n/**\n * Parses a URL-like string into path and query parameters\n * @param {string} urlString - String like \"https://example.cloudfront.net/<applicationId>/<path>/filename.jpeg?width=100&height=100\"\n * @returns {Object} - Object with { path: string, queryString: string, searchParamsObject: Object }\n * @example\n * parseUrlString(\"https://example.cloudfront.net/abc123/folder/image.jpeg?width=100&height=100\")\n * // Returns: { path: \"abc123/folder/image.jpeg\", queryString: \"width=100,t=456\", searchParamsObject: { width: \"100\", height: \"100\" } }\n */\nfunction parseUrlString(urlString) {\n if (!urlString || typeof urlString !== 'string') {\n throw new Error('URL string is required and must be a string')\n }\n\n // Extract the path after the domain\n const url = new URL(urlString)\n\n let searchParamsObject = {}\n url.searchParams.forEach((value, key) => {\n searchParamsObject[key] = value\n })\n\n let queryString = url.searchParams.toString()\n queryString = queryString ? queryString.replace(/&/g, ',') : ''\n\n return {\n path: url.pathname.substring(1), // Remove leading '/'\n queryString,\n searchParamsObject,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -35,11 +35,13 @@ import { getAuditEntryDetails } from '../../helpers';
35
35
  export function buildAuditPdf(pdfOptions, data) {
36
36
  var entity = data.entity,
37
37
  timezone = data.timezone;
38
+ var _pdfOptions$flags = pdfOptions.flags,
39
+ flags = _pdfOptions$flags === void 0 ? {} : _pdfOptions$flags;
38
40
  var sequenceId = entity.sequenceId;
39
41
  var timestamp = entity.createdAt;
40
42
  var title = entity.title || 'Unknown';
41
43
  var fileTitle = "Audit Report - ".concat(title);
42
- return generateContent(data).then(function (content) {
44
+ return generateContent(data, flags).then(function (content) {
43
45
  return generateDefinition(_objectSpread({
44
46
  content: content,
45
47
  fileTitle: fileTitle,
@@ -54,9 +56,6 @@ export function buildAuditPdf(pdfOptions, data) {
54
56
  }
55
57
  function generateContent(data) {
56
58
  var entity = data.entity;
57
- console.log('GENERATE AUDIT CONTENT:', JSON.stringify({
58
- data: data
59
- }, null, 2));
60
59
  var _entity$followUps = entity.followUps,
61
60
  followUps = _entity$followUps === void 0 ? [] : _entity$followUps,
62
61
  _entity$footerFields = entity.footerFields,
@@ -71,9 +70,6 @@ function generateContent(data) {
71
70
  title = _entity$title === void 0 ? 'Unknown' : _entity$title;
72
71
  var timezone = (entity === null || entity === void 0 ? void 0 : entity.timezone) || (data === null || data === void 0 ? void 0 : data.timezone) || 'UTC';
73
72
  var entityDetails = getAuditEntryDetails(data);
74
- console.log({
75
- entryDetails: entityDetails
76
- });
77
73
  var gpsText = entityDetails.gpsText,
78
74
  groupedData = entityDetails.groupedData,
79
75
  locationText = entityDetails.locationText,
@@ -213,7 +209,7 @@ function generateContent(data) {
213
209
  headerTemplate = _ref.headerTemplate;
214
210
  return [titleTable, followUpItems].concat(auditItemsTitle, _toConsumableArray(headerTemplate), _toConsumableArray(entry), [hLineTop, totalScoreTable, hLineBottom], _toConsumableArray(footerTemplate));
215
211
  }).catch(function (err) {
216
- throw new Error("GenerateContentError: ".concat(err));
212
+ throw new Error("GenerateContentError: ".concat(err.message));
217
213
  });
218
214
  }
219
215
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Promise","isEmpty","round","moment","buildAuditContent","buildAuditFollowUps","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","text","twoColumnTable","getAuditEntryDetails","buildAuditPdf","pdfOptions","data","entity","timezone","sequenceId","timestamp","createdAt","title","fileTitle","concat","generateContent","then","content","_objectSpread","type","catch","err","Error","message","console","log","JSON","stringify","_entity$followUps","followUps","_entity$footerFields","footerFields","_entity$gps","gps","_entity$headerFields","headerFields","_entity$score","score","_entity$title","entityDetails","entryDetails","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","submittedAtInTimezone","submittedAt","tz","format","showSimplifiedDuration","push","startedAtInTimezone","startedAt","momentDuration","duration","Math","abs","formDuration","days","floor","asDays","toString","padStart","hours","minutes","seconds","formattedFormDuration","titleTable","layout","widths","margin","totalScoreTable","hLineTop","hLineBottom","followUpItems","promises","entry","items","settings","footerTemplate","formGroups","headerTemplate","auditItemsTitle","font","lineHeight","props","_ref","_toConsumableArray"],"sources":["../../../src/pdf/audit/index.js"],"sourcesContent":["import Promise from 'bluebird'\nimport { isEmpty, round } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildAuditContent,\n buildAuditFollowUps,\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n text,\n twoColumnTable,\n} from '../helpers'\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\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)\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) {\n const { entity } = data\n console.log('GENERATE AUDIT CONTENT:', JSON.stringify({ data }, null, 2))\n const {\n followUps = [],\n footerFields = {},\n gps = {},\n headerFields = {},\n score = {},\n title = 'Unknown',\n } = entity\n\n const timezone = entity?.timezone || data?.timezone || 'UTC'\n const entityDetails = getAuditEntryDetails(data)\n\n console.log({ entryDetails: entityDetails })\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 = `${\n locationText || gpsText\n } - ${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 submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n if (entity.showSimplifiedDuration) {\n body.push([submittedAt, dummyColumn])\n } else {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started: ${startedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt).tz(timezone).format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays()).toString().padStart(2, '0')\n const hours = Math.floor(momentDuration.hours()).toString().padStart(2, '0')\n const minutes = momentDuration.minutes().toString().padStart(2, '0')\n const seconds = momentDuration.seconds().toString().padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`,\n {\n colSpan: 2,\n style: 'small',\n }\n )\n\n body.push([startedAt, dummyColumn])\n body.push([submittedAt, dummyColumn])\n body.push([formDuration, dummyColumn])\n }\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 = buildAuditFollowUps(followUps, { timezone })\n\n const promises = {\n entry: buildAuditContent(groupedData.items, data.settings),\n\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\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}`)\n })\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["Promise","isEmpty","round","moment","buildAuditContent","buildAuditFollowUps","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","text","twoColumnTable","getAuditEntryDetails","buildAuditPdf","pdfOptions","data","entity","timezone","_pdfOptions$flags","flags","sequenceId","timestamp","createdAt","title","fileTitle","concat","generateContent","then","content","_objectSpread","type","catch","err","Error","message","_entity$followUps","followUps","_entity$footerFields","footerFields","_entity$gps","gps","_entity$headerFields","headerFields","_entity$score","score","_entity$title","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","submittedAtInTimezone","submittedAt","tz","format","showSimplifiedDuration","push","startedAtInTimezone","startedAt","momentDuration","duration","Math","abs","formDuration","days","floor","asDays","toString","padStart","hours","minutes","seconds","formattedFormDuration","titleTable","layout","widths","margin","totalScoreTable","hLineTop","hLineBottom","followUpItems","promises","entry","items","settings","footerTemplate","formGroups","headerTemplate","auditItemsTitle","font","lineHeight","props","_ref","_toConsumableArray"],"sources":["../../../src/pdf/audit/index.js"],"sourcesContent":["import Promise from 'bluebird'\nimport { isEmpty, round } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildAuditContent,\n buildAuditFollowUps,\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n text,\n twoColumnTable,\n} from '../helpers'\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 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) {\n const { entity } = data\n\n const {\n followUps = [],\n footerFields = {},\n gps = {},\n headerFields = {},\n score = {},\n title = 'Unknown',\n } = entity\n\n const timezone = entity?.timezone || data?.timezone || 'UTC'\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 submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n if (entity.showSimplifiedDuration) {\n body.push([submittedAt, dummyColumn])\n } else {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started: ${startedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays())\n .toString()\n .padStart(2, '0')\n const hours = Math.floor(momentDuration.hours())\n .toString()\n .padStart(2, '0')\n const minutes = momentDuration\n .minutes()\n .toString()\n .padStart(2, '0')\n const seconds = momentDuration\n .seconds()\n .toString()\n .padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`,\n {\n colSpan: 2,\n style: 'small',\n }\n )\n\n body.push([startedAt, dummyColumn])\n body.push([submittedAt, dummyColumn])\n body.push([formDuration, dummyColumn])\n }\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 = buildAuditFollowUps(followUps, { timezone })\n\n const promises = {\n entry: buildAuditContent(groupedData.items, data.settings),\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\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"],"mappings":";;;;AAAA,OAAOA,OAAO,MAAM,UAAU;AAC9B,SAASC,OAAO,EAAEC,KAAK,QAAQ,QAAQ;AACvC,OAAOC,MAAM,MAAM,iBAAiB;AAEpC,SACEC,iBAAiB,EACjBC,mBAAmB,EACnBC,oBAAoB,EACpBC,kBAAkB,EAClBC,mBAAmB,EACnBC,cAAc,EACdC,IAAI,EACJC,cAAc,QACT,YAAY;AACnB,SAASC,oBAAoB,QAAQ,eAAe;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,UAAU,EAAEC,IAAI,EAAE;EAC9C,IAAQC,MAAM,GAAeD,IAAI,CAAzBC,MAAM;IAAEC,QAAQ,GAAKF,IAAI,CAAjBE,QAAQ;EACxB,IAAAC,iBAAA,GAAuBJ,UAAU,CAAzBK,KAAK;IAALA,KAAK,GAAAD,iBAAA,cAAG,CAAC,CAAC,GAAAA,iBAAA;EAElB,IAAME,UAAU,GAAGJ,MAAM,CAACI,UAAU;EACpC,IAAMC,SAAS,GAAGL,MAAM,CAACM,SAAS;EAClC,IAAMC,KAAK,GAAGP,MAAM,CAACO,KAAK,IAAI,SAAS;EACvC,IAAMC,SAAS,qBAAAC,MAAA,CAAqBF,KAAK,CAAE;EAE3C,OAAOG,eAAe,CAACX,IAAI,EAAEI,KAAK,CAAC,CAChCQ,IAAI,CAAC,UAAAC,OAAO;IAAA,OACXrB,kBAAkB,CAAAsB,aAAA;MAChBD,OAAO,EAAPA,OAAO;MACPJ,SAAS,EAATA,SAAS;MACTJ,UAAU,EAAVA,UAAU;MACVC,SAAS,EAATA,SAAS;MACTJ,QAAQ,EAARA,QAAQ;MACRa,IAAI,EAAE;IAAO,GACVhB,UAAU,CACd,CAAC;EAAA,CACJ,CAAC,CACAiB,KAAK,CAAC,UAAAC,GAAG,EAAI;IACZ,MAAM,IAAIC,KAAK,wBAAAR,MAAA,CAAwBO,GAAG,CAACE,OAAO,CAAE,CAAC;EACvD,CAAC,CAAC;AACN;AAEA,SAASR,eAAeA,CAACX,IAAI,EAAE;EAC7B,IAAQC,MAAM,GAAKD,IAAI,CAAfC,MAAM;EAEd,IAAAmB,iBAAA,GAOInB,MAAM,CANRoB,SAAS;IAATA,SAAS,GAAAD,iBAAA,cAAG,EAAE,GAAAA,iBAAA;IAAAE,oBAAA,GAMZrB,MAAM,CALRsB,YAAY;IAAZA,YAAY,GAAAD,oBAAA,cAAG,CAAC,CAAC,GAAAA,oBAAA;IAAAE,WAAA,GAKfvB,MAAM,CAJRwB,GAAG;IAAHA,GAAG,GAAAD,WAAA,cAAG,CAAC,CAAC,GAAAA,WAAA;IAAAE,oBAAA,GAINzB,MAAM,CAHR0B,YAAY;IAAZA,YAAY,GAAAD,oBAAA,cAAG,CAAC,CAAC,GAAAA,oBAAA;IAAAE,aAAA,GAGf3B,MAAM,CAFR4B,KAAK;IAALA,KAAK,GAAAD,aAAA,cAAG,CAAC,CAAC,GAAAA,aAAA;IAAAE,aAAA,GAER7B,MAAM,CADRO,KAAK;IAALA,KAAK,GAAAsB,aAAA,cAAG,SAAS,GAAAA,aAAA;EAGnB,IAAM5B,QAAQ,GAAG,CAAAD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEC,QAAQ,MAAIF,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEE,QAAQ,KAAI,KAAK;EAC5D,IAAM6B,aAAa,GAAGlC,oBAAoB,CAACG,IAAI,CAAC;EAEhD,IACEgC,OAAO,GAQLD,aAAa,CARfC,OAAO;IACPC,WAAW,GAOTF,aAAa,CAPfE,WAAW;IACXC,YAAY,GAMVH,aAAa,CANfG,YAAY;IACZC,cAAc,GAKZJ,aAAa,CALfI,cAAc;IACdC,gBAAgB,GAIdL,aAAa,CAJfK,gBAAgB;IAChBC,SAAS,GAGPN,aAAa,CAHfM,SAAS;IACTC,MAAM,GAEJP,aAAa,CAFfO,MAAM;IACNC,kBAAkB,GAChBR,aAAa,CADfQ,kBAAkB;EAGpB,IAAMC,kBAAkB,GAAG,CAAC,CAACD,kBAAkB;EAC/C,IAAME,WAAW,GAAG9C,IAAI,CAACa,KAAK,EAAE;IAAEkC,KAAK,EAAE;EAAQ,CAAC,CAAC;EACnD,IAAMC,WAAW,GAAGhD,IAAI,CAAC0C,SAAS,EAAE;IAAEO,SAAS,EAAE,OAAO;IAAEF,KAAK,EAAE;EAAQ,CAAC,CAAC;EAC3E,IAAMG,QAAQ,GAAG,CAACJ,WAAW,EAAEE,WAAW,CAAC;EAC3C,IAAMG,QAAQ,MAAApC,MAAA,CAAMwB,YAAY,IAC9BF,OAAO,SAAAtB,MAAA,CAAM0B,gBAAgB,UAAA1B,MAAA,CAAOyB,cAAc,CAAE;EAEtD,IAAIY,cAAc,GAAGpD,IAAI,CAACmD,QAAQ,EAAE;IAAEE,OAAO,EAAE,CAAC;IAAEN,KAAK,EAAE;EAAW,CAAC,CAAC;EACtE,IAAIO,SAAS,GAAG,CAACF,cAAc,CAAC;EAEhC,IAAMG,eAAe,GAAGzB,GAAG,CAACyB,eAAe;EAC3C,IAAMC,OAAO,GAAG,CAACjE,OAAO,CAACgE,eAAe,CAAC,GACrCzD,mBAAmB,CAACyD,eAAe,CAAC,GACpC,EAAE;EACN,IAAME,mBAAmB,GAAG,CAAClE,OAAO,CAACgE,eAAe,CAAC;EACrD,IAAMG,WAAW,GAAG1D,IAAI,CAAC,GAAG,EAAE;IAAE+C,KAAK,EAAE;EAAQ,CAAC,CAAC;EAEjD,IAAIY,aAAa,GAAG3D,IAAI,CAACwD,OAAO,EAAE;IAAEH,OAAO,EAAE,CAAC;IAAEN,KAAK,EAAE;EAAQ,CAAC,CAAC;EACjE,IAAMa,cAAc,GAAGH,mBAAmB,IAAIZ,kBAAkB;EAChE,IAAIgB,QAAQ,GAAGJ,mBAAmB,GAAG,CAACE,aAAa,CAAC,GAAG,EAAE;EAEzD,IAAId,kBAAkB,EAAE;IACtBO,cAAc,GAAGpD,IAAI,CAACmD,QAAQ,EAAE;MAAEJ,KAAK,EAAE;IAAW,CAAC,CAAC;IAEtD,IAAMe,iBAAiB,GAAGlB,kBAAkB,KAAK,OAAO;IACxD,IAAMmB,gBAAgB,GACpBnB,kBAAkB,KAAK,OAAO,GAC1B,cAAc,GACdA,kBAAkB,KAAK,IAAI,GAC3B,WAAW,GACXA,kBAAkB,KAAK,OAAO,GAC9B,cAAc,GACd,EAAE;IAER,IAAMoB,yBAAyB,GAAGhE,IAAI,CAAC+D,gBAAgB,EAAE;MACvDd,SAAS,EAAE,OAAO;MAClBF,KAAK,EAAEe,iBAAiB,GAAG,mBAAmB,GAAG;IACnD,CAAC,CAAC;IAEFR,SAAS,GAAG,CAACF,cAAc,EAAEY,yBAAyB,CAAC;IACvDL,aAAa,GAAG3D,IAAI,CAACwD,OAAO,EAAE;MAAET,KAAK,EAAE;IAAQ,CAAC,CAAC;IAEjD,IAAMkB,sBAAsB,GAAGzE,KAAK,CAACmD,MAAM,EAAE,CAAC,CAAC;IAC/C,IAAMuB,eAAe,gBAAAnD,MAAA,CAAgBkD,sBAAsB,OAAI;IAC/D,IAAME,mBAAmB,GAAGnE,IAAI,CAACkE,eAAe,EAAE;MAChDjB,SAAS,EAAE,OAAO;MAClBF,KAAK,EAAE;IACT,CAAC,CAAC;IAEFc,QAAQ,GAAGJ,mBAAmB,GAC1B,CAACE,aAAa,EAAEQ,mBAAmB,CAAC,GACpC,CAACT,WAAW,EAAES,mBAAmB,CAAC;EACxC;EAEA,IAAMC,cAAc,GAAGpE,IAAI,IAAAe,MAAA,CACtBvB,KAAK,CAAC0C,KAAK,CAACmC,MAAM,EAAE,CAAC,CAAC,SAAAtD,MAAA,CAAMvB,KAAK,CAAC0C,KAAK,CAACoC,GAAG,EAAE,CAAC,CAAC,GAClD;IACErB,SAAS,EAAE,OAAO;IAClBF,KAAK,EAAE;EACT,CACF,CAAC;EACD,IAAMwB,eAAe,GAAGvE,IAAI,CAAC0C,SAAS,EAAE;IACtCO,SAAS,EAAE,OAAO;IAClBI,OAAO,EAAE,CAAC;IACVN,KAAK,EAAE;EACT,CAAC,CAAC;EACF,IAAMyB,UAAU,GAAGxE,IAAI,CAAC,aAAa,EAAE;IAAE+C,KAAK,EAAE;EAAa,CAAC,CAAC;EAE/D,IAAM0B,IAAI,GAAGb,cAAc,GACvB,CAACV,QAAQ,EAAEI,SAAS,EAAEO,QAAQ,CAAC,GAC/B,CAACX,QAAQ,EAAEI,SAAS,CAAC;EAEzB,IAAMoB,qBAAqB,GAAGpE,MAAM,CAACqE,WAAW,GAC5ClF,MAAM,CAACa,MAAM,CAACqE,WAAW,CAAC,CACvBC,EAAE,CAACrE,QAAQ,CAAC,CACZsE,MAAM,CAAC,uBAAuB,CAAC,GAClC,cAAc;EAClB,IAAMF,WAAW,GAAG3E,IAAI,eAAAe,MAAA,CAAe2D,qBAAqB,GAAI;IAC9DrB,OAAO,EAAE,CAAC;IACVN,KAAK,EAAE;EACT,CAAC,CAAC;EAEF,IAAIzC,MAAM,CAACwE,sBAAsB,EAAE;IACjCL,IAAI,CAACM,IAAI,CAAC,CAACJ,WAAW,EAAEjB,WAAW,CAAC,CAAC;EACvC,CAAC,MAAM;IACL,IAAMsB,mBAAmB,GAAG1E,MAAM,CAAC2E,SAAS,GACxCxF,MAAM,CAACa,MAAM,CAAC2E,SAAS,CAAC,CACrBL,EAAE,CAACrE,QAAQ,CAAC,CACZsE,MAAM,CAAC,uBAAuB,CAAC,GAClC,cAAc;IAClB,IAAMI,SAAS,GAAGjF,IAAI,aAAAe,MAAA,CAAaiE,mBAAmB,GAAI;MACxD3B,OAAO,EAAE,CAAC;MACVN,KAAK,EAAE;IACT,CAAC,CAAC;IAEF,IAAM2B,sBAAqB,GAAGpE,MAAM,CAACqE,WAAW,GAC5ClF,MAAM,CAACa,MAAM,CAACqE,WAAW,CAAC,CACvBC,EAAE,CAACrE,QAAQ,CAAC,CACZsE,MAAM,CAAC,uBAAuB,CAAC,GAClC,cAAc;IAClB,IAAMF,YAAW,GAAG3E,IAAI,eAAAe,MAAA,CAAe2D,sBAAqB,GAAI;MAC9DrB,OAAO,EAAE,CAAC;MACVN,KAAK,EAAE;IACT,CAAC,CAAC;IAEF,IAAMmC,cAAc,GAAGzF,MAAM,CAAC0F,QAAQ,CAACC,IAAI,CAACC,GAAG,CAAC/E,MAAM,CAACgF,YAAY,CAAC,CAAC;IACrE,IAAMC,IAAI,GAAGH,IAAI,CAACI,KAAK,CAACN,cAAc,CAACO,MAAM,CAAC,CAAC,CAAC,CAC7CC,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACnB,IAAMC,KAAK,GAAGR,IAAI,CAACI,KAAK,CAACN,cAAc,CAACU,KAAK,CAAC,CAAC,CAAC,CAC7CF,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACnB,IAAME,OAAO,GAAGX,cAAc,CAC3BW,OAAO,CAAC,CAAC,CACTH,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACnB,IAAMG,OAAO,GAAGZ,cAAc,CAC3BY,OAAO,CAAC,CAAC,CACTJ,QAAQ,CAAC,CAAC,CACVC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACnB,IAAMI,qBAAqB,GAAGzF,MAAM,CAACgF,YAAY,MAAAvE,MAAA,CAE3CT,MAAM,CAACgF,YAAY,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,EAAAvE,MAAA,CACjCwE,IAAI,OAAAxE,MAAA,CAAI6E,KAAK,OAAA7E,MAAA,CAAI8E,OAAO,OAAA9E,MAAA,CAAI+E,OAAO,IACtC,cAAc;IAClB,IAAMR,YAAY,GAAGtF,IAAI,iCAAAe,MAAA,CACSgF,qBAAqB,GACrD;MACE1C,OAAO,EAAE,CAAC;MACVN,KAAK,EAAE;IACT,CACF,CAAC;IAED0B,IAAI,CAACM,IAAI,CAAC,CAACE,SAAS,EAAEvB,WAAW,CAAC,CAAC;IACnCe,IAAI,CAACM,IAAI,CAAC,CAACJ,YAAW,EAAEjB,WAAW,CAAC,CAAC;IACrCe,IAAI,CAACM,IAAI,CAAC,CAACO,YAAY,EAAE5B,WAAW,CAAC,CAAC;EACxC;EAEA,IAAMsC,UAAU,GAAG/F,cAAc,CAAC;IAChCwE,IAAI,EAAJA,IAAI;IACJwB,MAAM,EAAE,WAAW;IACnBlD,KAAK,EAAE,YAAY;IACnBmD,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IAClBC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;EACtB,CAAC,CAAC;EAEF,IAAMC,eAAe,GAAGnG,cAAc,CAAC;IACrCwE,IAAI,EAAE,CAAC,CAACD,UAAU,EAAEJ,cAAc,CAAC,EAAE,CAACG,eAAe,CAAC,CAAC;IACvD0B,MAAM,EAAE,WAAW;IACnBC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG;EACnB,CAAC,CAAC;EAEF,IAAMG,QAAQ,GAAGtG,cAAc,CAAC;IAAEoG,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;EAAE,CAAC,CAAC;EAC1D,IAAMG,WAAW,GAAGvG,cAAc,CAAC,CAAC;EAEpC,IAAMwG,aAAa,GAAG5G,mBAAmB,CAAC+B,SAAS,EAAE;IAAEnB,QAAQ,EAARA;EAAS,CAAC,CAAC;EAElE,IAAMiG,QAAQ,GAAG;IACfC,KAAK,EAAE/G,iBAAiB,CAAC4C,WAAW,CAACoE,KAAK,EAAErG,IAAI,CAACsG,QAAQ,CAAC;IAC1DC,cAAc,EAAEhH,oBAAoB,CAACgC,YAAY,CAACiF,UAAU,EAAExG,IAAI,CAAC;IACnEyG,cAAc,EAAElH,oBAAoB,CAACoC,YAAY,CAAC6E,UAAU,EAAExG,IAAI;EACpE,CAAC;EAED,IAAM0G,eAAe,GAAG,CACtB;IACE/G,IAAI,EAAE,aAAa;IACnB+C,KAAK,EAAE;MACLiE,IAAI,EAAE,QAAQ;MACdC,UAAU,EAAE;IACd;EACF,CAAC,EACDZ,QAAQ,CACT;EAED,OAAO/G,OAAO,CAAC4H,KAAK,CAACV,QAAQ,CAAC,CAC3BvF,IAAI,CAAC,UAAAkG,IAAA;IAAA,IAAGV,KAAK,GAAAU,IAAA,CAALV,KAAK;MAAEG,cAAc,GAAAO,IAAA,CAAdP,cAAc;MAAEE,cAAc,GAAAK,IAAA,CAAdL,cAAc;IAAA,QAC5Cd,UAAU,EACVO,aAAa,EAAAxF,MAAA,CACVgG,eAAe,EAAAK,kBAAA,CACfN,cAAc,GAAAM,kBAAA,CACdX,KAAK,IACRJ,QAAQ,EACRD,eAAe,EACfE,WAAW,GAAAc,kBAAA,CACRR,cAAc;EAAA,CAClB,CAAC,CACDvF,KAAK,CAAC,UAAAC,GAAG,EAAI;IACZ,MAAM,IAAIC,KAAK,0BAAAR,MAAA,CAA0BO,GAAG,CAACE,OAAO,CAAE,CAAC;EACzD,CAAC,CAAC;AACN","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lighthouse/common",
3
- "version": "6.3.0-canary.0",
3
+ "version": "6.3.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "lib/index.js",
@@ -22,13 +22,12 @@
22
22
  "build-storybook:html": "sb build -c .storybook-html",
23
23
  "build-storybook:react": "sb build -c .storybook-react",
24
24
  "test": "TZ=UTC vitest run",
25
+ "test:watch": "TZ=UTC vitest watch",
25
26
  "test:ci": "yarn lint && yarn type-check && yarn test --coverage",
26
27
  "type-check": "tsc --noEmit",
27
28
  "type-check:watch": "yarn type-check --watch",
28
29
  "validate:circleci": "circleci config validate -c .circleci/config.yml",
29
- "version": "yarn build",
30
- "watch:es": "nodemon --watch src --ext js,ts --exec \"yarn build:es\"",
31
- "watch:node": "nodemon --watch src --ext js,ts --exec \"yarn build:node\""
30
+ "version": "yarn build"
32
31
  },
33
32
  "repository": {
34
33
  "type": "git",