monocart-coverage-reports 2.0.0 → 2.0.2

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.
@@ -154,14 +154,6 @@ const generateCountState = (coverageList) => {
154
154
 
155
155
  const getJsAstInfo = (item, coverageList) => {
156
156
 
157
- // not for css
158
- if (!item.js) {
159
- return {
160
- functions: [],
161
- branches: []
162
- };
163
- }
164
-
165
157
  const { source } = item;
166
158
 
167
159
  const options = {
@@ -193,76 +185,118 @@ const getJsAstInfo = (item, coverageList) => {
193
185
 
194
186
  // =========================================================================================================
195
187
 
196
- const addCssRules = (rules, coverageList, coveredRanges, locator) => {
197
- let hasCovered = false;
198
- // line and line is 1-base
199
- rules.forEach((rule) => {
188
+ const addRule = (item, coverageList, coveredRanges, count = 0) => {
200
189
 
201
- const { type, position } = rule;
190
+ const { source } = item;
191
+ const { start, end } = source;
192
+ const startOffset = start.offset;
193
+ const endOffset = end.offset;
202
194
 
203
- if (type === 'comment') {
204
- return;
195
+ if (!count) {
196
+ const coveredRange = findInRanges(startOffset, endOffset, coveredRanges);
197
+ if (coveredRange) {
198
+ count = 1;
205
199
  }
200
+ }
206
201
 
207
- const { start, end } = position;
208
-
209
- // both 1-base
210
- // console.log(start, end);
211
- const startOffset = locator.locationToOffset({
212
- line: start.line,
213
- column: start.column - 1
214
- });
215
-
216
- const endOffset = locator.locationToOffset({
217
- line: end.line,
218
- column: end.column - 1
219
- });
220
-
221
- // start should offset @media
222
- if (type === 'media') {
223
- // rules in media
224
- // console.log('media', rule.media, startOffset, endOffset);
225
- const childCoverageList = [];
226
- const hasChildCovered = addCssRules(rule.rules, childCoverageList, coveredRanges, locator);
227
- if (hasChildCovered) {
228
- childCoverageList.forEach((it) => {
229
- coverageList.push(it);
230
- });
231
- return;
232
- }
202
+ coverageList.push({
203
+ start: startOffset,
204
+ end: endOffset,
205
+ count
206
+ });
207
+
208
+ return count;
209
+
210
+ };
211
+
212
+ const addAtRule = (item, coverageList, coveredRanges) => {
213
+ const { name, nodes } = item;
214
+
215
+ if (['charset', 'import', 'namespace'].includes(name)) {
216
+ addRule(item, coverageList, coveredRanges, 1);
217
+ return;
218
+ }
219
+
220
+ if (['media', 'supports', 'container', 'layer'].includes(name)) {
221
+
222
+ const childCoverageList = [];
223
+ const count = addCssRules(nodes, childCoverageList, coveredRanges);
224
+ if (count) {
233
225
 
234
- // add whole media as uncovered
235
226
  coverageList.push({
236
- start: startOffset,
237
- end: endOffset,
238
- count: 0
227
+ start: item.source.start.offset,
228
+ end: childCoverageList[0].start,
229
+ count: 1
230
+ });
231
+
232
+ let end;
233
+ childCoverageList.forEach((it) => {
234
+ coverageList.push(it);
235
+ end = it.end;
239
236
  });
237
+
238
+ coverageList.push({
239
+ start: end,
240
+ end: item.source.end.offset,
241
+ count: 1
242
+ });
243
+
240
244
  return;
241
245
  }
242
246
 
243
- let count = 0;
244
- if (type === 'charset') {
245
- count = 1;
246
- } else {
247
- const coveredRange = findInRanges(startOffset, endOffset, coveredRanges);
248
- if (coveredRange) {
249
- count = 1;
250
- hasCovered = true;
251
- }
247
+ }
248
+
249
+ addRule(item, coverageList, coveredRanges);
250
+
251
+ };
252
+
253
+ const addCssRules = (list, coverageList, coveredRanges) => {
254
+
255
+ let count = 0;
256
+
257
+ // line and line is 1-base
258
+ list.forEach((item) => {
259
+
260
+ const { type } = item;
261
+
262
+ if (type === 'comment') {
263
+ return;
264
+ }
265
+
266
+ if (type === 'rule') {
267
+ count += addRule(item, coverageList, coveredRanges);
268
+ return;
252
269
  }
253
270
 
254
- coverageList.push({
255
- start: startOffset,
256
- end: endOffset,
257
- count
258
- });
271
+ // console.log('=============================================================================');
272
+ // Object.keys(item).forEach((k) => {
273
+ // if (k === 'parent') {
274
+ // return;
275
+ // }
276
+ // if (k === 'raws') {
277
+ // return;
278
+ // }
279
+ // if (k === 'nodes') {
280
+ // console.log(k, item[k].length);
281
+ // return;
282
+ // }
283
+ // if (k === 'source') {
284
+ // console.log(k, item[k].start, item[k].end);
285
+ // return;
286
+ // }
287
+ // console.log(k, item[k]);
288
+ // });
289
+
290
+ if (type === 'atrule') {
291
+ addAtRule(item, coverageList, coveredRanges);
292
+ }
259
293
 
260
294
  });
261
295
 
262
- return hasCovered;
296
+ return count;
263
297
  };
264
298
 
265
- const getCssAstInfo = (item, locator) => {
299
+ const getCssAstInfo = (item, coverageList) => {
266
300
 
267
301
  const {
268
302
  source, sourcePath, ranges
@@ -270,6 +304,7 @@ const getCssAstInfo = (item, locator) => {
270
304
 
271
305
  // sort covered ranges
272
306
  ranges.sort((a, b) => a.start - b.start);
307
+
273
308
  // to offset covered ranges
274
309
  const coveredRanges = ranges.map((it) => {
275
310
  return {
@@ -282,11 +317,13 @@ const getCssAstInfo = (item, locator) => {
282
317
  const ast = parseCss(source);
283
318
  Util.logTime(`parse css: ${sourcePath}`, time_start_parse);
284
319
 
285
- const coverageList = [];
286
- addCssRules(ast.rules, coverageList, coveredRanges, locator);
320
+ // if (sourcePath.endsWith('style.css')) {
321
+ addCssRules(ast.nodes, coverageList, coveredRanges);
322
+ // }
287
323
 
288
324
  return {
289
- coverageList
325
+ functions: [],
326
+ branches: []
290
327
  };
291
328
  };
292
329
 
@@ -26,6 +26,9 @@ const quickFindRange = (position, ranges) => {
26
26
 
27
27
 
28
28
  const findInRanges = (start, end, ranges) => {
29
+ if (!Util.isList(ranges)) {
30
+ return;
31
+ }
29
32
  const range = quickFindRange(start, ranges);
30
33
  if (start >= range.startOffset && end <= range.endOffset) {
31
34
  return range;
@@ -978,7 +978,7 @@ const convertV8List = async (v8list, options) => {
978
978
 
979
979
  // ============================
980
980
  // move functions and ranges to coverageList
981
- let coverageList;
981
+ let coverageList = [];
982
982
  let astInfo;
983
983
  if (js) {
984
984
  coverageList = item.functions;
@@ -988,11 +988,8 @@ const convertV8List = async (v8list, options) => {
988
988
  }
989
989
  astInfo = getJsAstInfo(item, coverageList);
990
990
  } else {
991
- astInfo = getCssAstInfo(item, locator);
992
991
  // convent css covered ranges to rules ranges and include uncovered ranges
993
- coverageList = astInfo.coverageList;
994
- // console.log(coverageList);
995
-
992
+ astInfo = getCssAstInfo(item, coverageList);
996
993
  // remove original ranges
997
994
  if (Util.loggingType !== 'debug') {
998
995
  delete item.ranges;