lighthouse 11.0.0-dev.20230815 → 11.0.0-dev.20230817

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.
Files changed (60) hide show
  1. package/core/audits/installable-manifest.d.ts +0 -6
  2. package/core/audits/installable-manifest.js +1 -17
  3. package/core/audits/third-party-facades.js +13 -5
  4. package/core/audits/third-party-summary.d.ts +4 -2
  5. package/core/audits/third-party-summary.js +24 -11
  6. package/core/computed/tbt-impact-tasks.d.ts +8 -13
  7. package/core/computed/tbt-impact-tasks.js +4 -6
  8. package/core/index.cjs +13 -13
  9. package/core/index.d.cts +15 -2
  10. package/package.json +1 -1
  11. package/shared/localization/locales/ar-XB.json +0 -3
  12. package/shared/localization/locales/ar.json +0 -3
  13. package/shared/localization/locales/bg.json +0 -3
  14. package/shared/localization/locales/ca.json +0 -3
  15. package/shared/localization/locales/cs.json +0 -3
  16. package/shared/localization/locales/da.json +0 -3
  17. package/shared/localization/locales/de.json +0 -3
  18. package/shared/localization/locales/el.json +0 -3
  19. package/shared/localization/locales/en-GB.json +0 -3
  20. package/shared/localization/locales/en-US.json +0 -3
  21. package/shared/localization/locales/en-XA.json +0 -3
  22. package/shared/localization/locales/en-XL.json +0 -3
  23. package/shared/localization/locales/es-419.json +0 -3
  24. package/shared/localization/locales/es.json +0 -3
  25. package/shared/localization/locales/fi.json +0 -3
  26. package/shared/localization/locales/fil.json +0 -3
  27. package/shared/localization/locales/fr.json +0 -3
  28. package/shared/localization/locales/he.json +0 -3
  29. package/shared/localization/locales/hi.json +0 -3
  30. package/shared/localization/locales/hr.json +0 -3
  31. package/shared/localization/locales/hu.json +0 -3
  32. package/shared/localization/locales/id.json +0 -3
  33. package/shared/localization/locales/it.json +0 -3
  34. package/shared/localization/locales/ja.json +0 -3
  35. package/shared/localization/locales/ko.json +0 -3
  36. package/shared/localization/locales/lt.json +0 -3
  37. package/shared/localization/locales/lv.json +0 -3
  38. package/shared/localization/locales/nl.json +0 -3
  39. package/shared/localization/locales/no.json +0 -3
  40. package/shared/localization/locales/pl.json +0 -3
  41. package/shared/localization/locales/pt-PT.json +0 -3
  42. package/shared/localization/locales/pt.json +0 -3
  43. package/shared/localization/locales/ro.json +0 -3
  44. package/shared/localization/locales/ru.json +0 -3
  45. package/shared/localization/locales/sk.json +0 -3
  46. package/shared/localization/locales/sl.json +0 -3
  47. package/shared/localization/locales/sr-Latn.json +0 -3
  48. package/shared/localization/locales/sr.json +0 -3
  49. package/shared/localization/locales/sv.json +0 -3
  50. package/shared/localization/locales/ta.json +0 -3
  51. package/shared/localization/locales/te.json +0 -3
  52. package/shared/localization/locales/th.json +0 -3
  53. package/shared/localization/locales/tr.json +0 -3
  54. package/shared/localization/locales/uk.json +0 -3
  55. package/shared/localization/locales/vi.json +0 -3
  56. package/shared/localization/locales/zh-HK.json +0 -3
  57. package/shared/localization/locales/zh-TW.json +0 -3
  58. package/shared/localization/locales/zh.json +0 -3
  59. package/third-party/chromium-synchronization/installability-errors-test.js +0 -1
  60. package/types/artifacts.d.ts +1 -0
@@ -104,12 +104,6 @@ export const UIStrings: {
104
104
  'protocol-timeout': string;
105
105
  /** Message logged when the web app has been uninstalled o desktop, signalling that the install banner state is being reset. */
106
106
  'pipeline-restarted': string;
107
- /**
108
- * TODO: This error was removed in M114, we can remove this message when it hits stable.
109
- * @description Error message explaining that the URL of the manifest uses a scheme that is not supported on Android.
110
- * @example {data:} scheme
111
- */
112
- 'scheme-not-supported-for-webapk': string;
113
107
  };
114
108
  import { Audit } from './audit.js';
115
109
  //# sourceMappingURL=installable-manifest.d.ts.map
@@ -87,17 +87,12 @@ const UIStrings = {
87
87
  /** Error message explaining that the web manifest's URL changed while the manifest was being downloaded by the browser. */
88
88
  'manifest-location-changed': `Manifest URL changed while the manifest was being fetched.`,
89
89
  /** Warning message explaining that the page does not work offline. */
90
+ // TODO(COMPAT): This error was removed in M118, we can remove this message when it hits stable.
90
91
  'warn-not-offline-capable': `Page does not work offline. The page will not be regarded as installable after Chrome 93, stable release August 2021.`,
91
92
  /** Error message explaining that Lighthouse failed while checking if the page is installable, and directing the user to try again in a new Chrome. */
92
93
  'protocol-timeout': `Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome.`,
93
94
  /** Message logged when the web app has been uninstalled o desktop, signalling that the install banner state is being reset. */
94
95
  'pipeline-restarted': 'PWA has been uninstalled and installability checks resetting.',
95
- /**
96
- * TODO: This error was removed in M114, we can remove this message when it hits stable.
97
- * @description Error message explaining that the URL of the manifest uses a scheme that is not supported on Android.
98
- * @example {data:} scheme
99
- */
100
- 'scheme-not-supported-for-webapk': 'The manifest URL scheme ({scheme}) is not supported on Android.',
101
96
  };
102
97
  /* eslint-enable max-len */
103
98
 
@@ -157,17 +152,6 @@ class InstallableManifest extends Audit {
157
152
  // @ts-expect-error errorIds from protocol should match up against the strings dict
158
153
  const matchingString = UIStrings[err.errorId];
159
154
 
160
- if (err.errorId === 'scheme-not-supported-for-webapk') {
161
- // If there was no manifest, then there will be at lest one other installability error.
162
- // We can ignore this error if that's the case.
163
- const manifestUrl = artifacts.WebAppManifest?.url;
164
- if (!manifestUrl) continue;
165
-
166
- const scheme = new URL(manifestUrl).protocol;
167
- i18nErrors.push(str_(matchingString, {scheme}));
168
- continue;
169
- }
170
-
171
155
  // Handle an errorId we don't recognize.
172
156
  if (matchingString === undefined) {
173
157
  i18nErrors.push(str_(UIStrings.noErrorId, {errorId: err.errorId}));
@@ -24,8 +24,8 @@ import * as i18n from '../lib/i18n/i18n.js';
24
24
  import {EntityClassification} from '../computed/entity-classification.js';
25
25
  import thirdPartyWeb from '../lib/third-party-web.js';
26
26
  import {NetworkRecords} from '../computed/network-records.js';
27
- import {MainThreadTasks} from '../computed/main-thread-tasks.js';
28
27
  import ThirdPartySummary from './third-party-summary.js';
28
+ import {TBTImpactTasks} from '../computed/tbt-impact-tasks.js';
29
29
 
30
30
  const UIStrings = {
31
31
  /** Title of a diagnostic audit that provides details about the third-party code on a web page that can be lazy loaded with a facade alternative. This descriptive title is shown to users when no resources have facade alternatives available. A facade is a lightweight component which looks like the desired resource. Lazy loading means resources are deferred until they are needed. Third-party code refers to resources that are not within the control of the site owner. */
@@ -86,7 +86,7 @@ class ThirdPartyFacades extends Audit {
86
86
  failureTitle: str_(UIStrings.failureTitle),
87
87
  description: str_(UIStrings.description),
88
88
  supportedModes: ['navigation'],
89
- requiredArtifacts: ['traces', 'devtoolsLogs', 'URL'],
89
+ requiredArtifacts: ['traces', 'devtoolsLogs', 'URL', 'GatherContext'],
90
90
  };
91
91
  }
92
92
 
@@ -148,19 +148,23 @@ class ThirdPartyFacades extends Audit {
148
148
  */
149
149
  static async audit(artifacts, context) {
150
150
  const settings = context.settings;
151
- const trace = artifacts.traces[Audit.DEFAULT_PASS];
152
151
  const devtoolsLog = artifacts.devtoolsLogs[Audit.DEFAULT_PASS];
153
152
  const networkRecords = await NetworkRecords.request(devtoolsLog, context);
154
153
  const classifiedEntities = await EntityClassification.request(
155
154
  {URL: artifacts.URL, devtoolsLog}, context);
156
- const tasks = await MainThreadTasks.request(trace, context);
155
+
156
+ const metricComputationData = Audit.makeMetricComputationDataInput(artifacts, context);
157
+ const tbtImpactTasks = await TBTImpactTasks.request(metricComputationData, context);
158
+
157
159
  const multiplier = settings.throttlingMethod === 'simulate' ?
158
160
  settings.throttling.cpuSlowdownMultiplier : 1;
159
- const summaries = ThirdPartySummary.getSummaries(networkRecords, tasks, multiplier,
161
+ const summaries = ThirdPartySummary.getSummaries(networkRecords, tbtImpactTasks, multiplier,
160
162
  classifiedEntities);
161
163
  const facadableProducts =
162
164
  ThirdPartyFacades.getProductsWithFacade(summaries.byURL, classifiedEntities);
163
165
 
166
+ let tbtImpact = 0;
167
+
164
168
  /** @type {LH.Audit.Details.TableItem[]} */
165
169
  const results = [];
166
170
  for (const {product, entity} of facadableProducts) {
@@ -179,6 +183,8 @@ class ThirdPartyFacades extends Audit {
179
183
  const entitySummary = summaries.byEntity.get(entity);
180
184
  if (!urls || !entitySummary) continue;
181
185
 
186
+ tbtImpact += entitySummary.tbtImpact;
187
+
182
188
  const items = Array.from(urls).map((url) => {
183
189
  const urlStats = summaries.byURL.get(url);
184
190
  return /** @type {import('./third-party-summary.js').URLSummary} */ ({url, ...urlStats});
@@ -198,6 +204,7 @@ class ThirdPartyFacades extends Audit {
198
204
  return {
199
205
  score: 1,
200
206
  notApplicable: true,
207
+ metricSavings: {TBT: 0},
201
208
  };
202
209
  }
203
210
 
@@ -216,6 +223,7 @@ class ThirdPartyFacades extends Audit {
216
223
  itemCount: results.length,
217
224
  }),
218
225
  details: Audit.makeTableDetails(headings, results),
226
+ metricSavings: {TBT: tbtImpact},
219
227
  };
220
228
  }
221
229
  }
@@ -3,10 +3,12 @@ export type Summary = {
3
3
  mainThreadTime: number;
4
4
  transferSize: number;
5
5
  blockingTime: number;
6
+ tbtImpact: number;
6
7
  };
7
8
  export type URLSummary = {
8
9
  transferSize: number;
9
10
  blockingTime: number;
11
+ tbtImpact: number;
10
12
  url: string | LH.IcuMessage;
11
13
  };
12
14
  export type SummaryMaps = {
@@ -27,12 +29,12 @@ declare class ThirdPartySummary extends Audit {
27
29
  /**
28
30
  *
29
31
  * @param {Array<LH.Artifacts.NetworkRequest>} networkRecords
30
- * @param {Array<LH.Artifacts.TaskNode>} mainThreadTasks
32
+ * @param {Array<LH.Artifacts.TBTImpactTask>} tbtImpactTasks
31
33
  * @param {number} cpuMultiplier
32
34
  * @param {LH.Artifacts.EntityClassification} entityClassification
33
35
  * @return {SummaryMaps}
34
36
  */
35
- static getSummaries(networkRecords: Array<LH.Artifacts.NetworkRequest>, mainThreadTasks: Array<LH.Artifacts.TaskNode>, cpuMultiplier: number, entityClassification: LH.Artifacts.EntityClassification): SummaryMaps;
37
+ static getSummaries(networkRecords: Array<LH.Artifacts.NetworkRequest>, tbtImpactTasks: Array<LH.Artifacts.TBTImpactTask>, cpuMultiplier: number, entityClassification: LH.Artifacts.EntityClassification): SummaryMaps;
36
38
  /**
37
39
  * @param {LH.Artifacts.Entity} entity
38
40
  * @param {SummaryMaps} summaries
@@ -8,8 +8,8 @@ import {Audit} from './audit.js';
8
8
  import {EntityClassification} from '../computed/entity-classification.js';
9
9
  import * as i18n from '../lib/i18n/i18n.js';
10
10
  import {NetworkRecords} from '../computed/network-records.js';
11
- import {MainThreadTasks} from '../computed/main-thread-tasks.js';
12
11
  import {getJavaScriptURLs, getAttributableURLForTask} from '../lib/tracehouse/task-summary.js';
12
+ import {TBTImpactTasks} from '../computed/tbt-impact-tasks.js';
13
13
 
14
14
  const UIStrings = {
15
15
  /** Title of a diagnostic audit that provides details about the code on a web page that the user doesn't control (referred to as "third-party code"). This descriptive title is shown to users when the amount is acceptable and no user action is required. */
@@ -38,12 +38,14 @@ const PASS_THRESHOLD_IN_MS = 250;
38
38
  * @property {number} mainThreadTime
39
39
  * @property {number} transferSize
40
40
  * @property {number} blockingTime
41
+ * @property {number} tbtImpact
41
42
  */
42
43
 
43
44
  /**
44
45
  * @typedef URLSummary
45
46
  * @property {number} transferSize
46
47
  * @property {number} blockingTime
48
+ * @property {number} tbtImpact
47
49
  * @property {string | LH.IcuMessage} url
48
50
  */
49
51
 
@@ -72,24 +74,24 @@ class ThirdPartySummary extends Audit {
72
74
  title: str_(UIStrings.title),
73
75
  failureTitle: str_(UIStrings.failureTitle),
74
76
  description: str_(UIStrings.description),
75
- requiredArtifacts: ['traces', 'devtoolsLogs', 'URL'],
77
+ requiredArtifacts: ['traces', 'devtoolsLogs', 'URL', 'GatherContext'],
76
78
  };
77
79
  }
78
80
 
79
81
  /**
80
82
  *
81
83
  * @param {Array<LH.Artifacts.NetworkRequest>} networkRecords
82
- * @param {Array<LH.Artifacts.TaskNode>} mainThreadTasks
84
+ * @param {Array<LH.Artifacts.TBTImpactTask>} tbtImpactTasks
83
85
  * @param {number} cpuMultiplier
84
86
  * @param {LH.Artifacts.EntityClassification} entityClassification
85
87
  * @return {SummaryMaps}
86
88
  */
87
- static getSummaries(networkRecords, mainThreadTasks, cpuMultiplier, entityClassification) {
89
+ static getSummaries(networkRecords, tbtImpactTasks, cpuMultiplier, entityClassification) {
88
90
  /** @type {Map<string, Summary>} */
89
91
  const byURL = new Map();
90
92
  /** @type {Map<LH.Artifacts.Entity, Summary>} */
91
93
  const byEntity = new Map();
92
- const defaultSummary = {mainThreadTime: 0, blockingTime: 0, transferSize: 0};
94
+ const defaultSummary = {mainThreadTime: 0, blockingTime: 0, transferSize: 0, tbtImpact: 0};
93
95
 
94
96
  for (const request of networkRecords) {
95
97
  const urlSummary = byURL.get(request.url) || {...defaultSummary};
@@ -99,7 +101,7 @@ class ThirdPartySummary extends Audit {
99
101
 
100
102
  const jsURLs = getJavaScriptURLs(networkRecords);
101
103
 
102
- for (const task of mainThreadTasks) {
104
+ for (const task of tbtImpactTasks) {
103
105
  const attributableURL = getAttributableURLForTask(task, jsURLs);
104
106
 
105
107
  const urlSummary = byURL.get(attributableURL) || {...defaultSummary};
@@ -110,6 +112,7 @@ class ThirdPartySummary extends Audit {
110
112
  // Note that this is not totally equivalent to the TBT definition since it fails to account for FCP,
111
113
  // but a majority of third-party work occurs after FCP and should yield largely similar numbers.
112
114
  urlSummary.blockingTime += Math.max(taskDuration - 50, 0);
115
+ urlSummary.tbtImpact += task.selfTbtImpact;
113
116
  byURL.set(attributableURL, urlSummary);
114
117
  }
115
118
 
@@ -127,6 +130,7 @@ class ThirdPartySummary extends Audit {
127
130
  entitySummary.transferSize += urlSummary.transferSize;
128
131
  entitySummary.mainThreadTime += urlSummary.mainThreadTime;
129
132
  entitySummary.blockingTime += urlSummary.blockingTime;
133
+ entitySummary.tbtImpact += urlSummary.tbtImpact;
130
134
  byEntity.set(entity, entitySummary);
131
135
 
132
136
  const entityURLs = urls.get(entity) || [];
@@ -152,7 +156,7 @@ class ThirdPartySummary extends Audit {
152
156
  // Sort by blocking time first, then transfer size to break ties.
153
157
  .sort((a, b) => (b.blockingTime - a.blockingTime) || (b.transferSize - a.transferSize));
154
158
 
155
- const subitemSummary = {transferSize: 0, blockingTime: 0};
159
+ const subitemSummary = {transferSize: 0, blockingTime: 0, tbtImpact: 0};
156
160
  const minTransferSize = Math.max(MIN_TRANSFER_SIZE_FOR_SUBITEMS, stats.transferSize / 20);
157
161
  const maxSubItems = Math.min(MAX_SUBITEMS, items.length);
158
162
  let numSubItems = 0;
@@ -167,6 +171,7 @@ class ThirdPartySummary extends Audit {
167
171
  numSubItems++;
168
172
  subitemSummary.transferSize += nextSubItem.transferSize;
169
173
  subitemSummary.blockingTime += nextSubItem.blockingTime;
174
+ subitemSummary.tbtImpact += nextSubItem.tbtImpact;
170
175
  }
171
176
  if (!subitemSummary.blockingTime && !subitemSummary.transferSize) {
172
177
  // Don't bother breaking down if there are no large resources.
@@ -179,6 +184,7 @@ class ThirdPartySummary extends Audit {
179
184
  url: str_(i18n.UIStrings.otherResourcesLabel),
180
185
  transferSize: stats.transferSize - subitemSummary.transferSize,
181
186
  blockingTime: stats.blockingTime - subitemSummary.blockingTime,
187
+ tbtImpact: stats.tbtImpact - subitemSummary.tbtImpact,
182
188
  };
183
189
  if (remainder.transferSize > minTransferSize) {
184
190
  items.push(remainder);
@@ -193,19 +199,21 @@ class ThirdPartySummary extends Audit {
193
199
  */
194
200
  static async audit(artifacts, context) {
195
201
  const settings = context.settings || {};
196
- const trace = artifacts.traces[Audit.DEFAULT_PASS];
197
202
  const devtoolsLog = artifacts.devtoolsLogs[Audit.DEFAULT_PASS];
198
203
  const networkRecords = await NetworkRecords.request(devtoolsLog, context);
199
204
  const classifiedEntities = await EntityClassification.request(
200
205
  {URL: artifacts.URL, devtoolsLog}, context);
201
206
  const firstPartyEntity = classifiedEntities.firstParty;
202
- const tasks = await MainThreadTasks.request(trace, context);
207
+
208
+ const metricComputationData = Audit.makeMetricComputationDataInput(artifacts, context);
209
+ const tbtImpactTasks = await TBTImpactTasks.request(metricComputationData, context);
210
+
203
211
  const multiplier = settings.throttlingMethod === 'simulate' ?
204
212
  settings.throttling.cpuSlowdownMultiplier : 1;
205
213
 
206
214
  const summaries = ThirdPartySummary.getSummaries(
207
- networkRecords, tasks, multiplier, classifiedEntities);
208
- const overallSummary = {wastedBytes: 0, wastedMs: 0};
215
+ networkRecords, tbtImpactTasks, multiplier, classifiedEntities);
216
+ const overallSummary = {wastedBytes: 0, wastedMs: 0, tbtImpact: 0};
209
217
 
210
218
  const results = Array.from(summaries.byEntity.entries())
211
219
  // Don't consider the page we're on to be third-party.
@@ -214,6 +222,7 @@ class ThirdPartySummary extends Audit {
214
222
  .map(([entity, stats]) => {
215
223
  overallSummary.wastedBytes += stats.transferSize;
216
224
  overallSummary.wastedMs += stats.blockingTime;
225
+ overallSummary.tbtImpact += stats.tbtImpact;
217
226
 
218
227
  return {
219
228
  ...stats,
@@ -240,6 +249,7 @@ class ThirdPartySummary extends Audit {
240
249
  return {
241
250
  score: 1,
242
251
  notApplicable: true,
252
+ metricSavings: {TBT: 0},
243
253
  };
244
254
  }
245
255
 
@@ -252,6 +262,9 @@ class ThirdPartySummary extends Audit {
252
262
  timeInMs: overallSummary.wastedMs,
253
263
  }),
254
264
  details,
265
+ metricSavings: {
266
+ TBT: overallSummary.tbtImpact,
267
+ },
255
268
  };
256
269
  }
257
270
  }
@@ -1,14 +1,9 @@
1
1
  export { TBTImpactTasksComputed as TBTImpactTasks };
2
- export type TBTImpactTask = LH.Artifacts.TaskNode & {
3
- tbtImpact: number;
4
- selfTbtImpact: number;
5
- };
6
2
  declare const TBTImpactTasksComputed: typeof TBTImpactTasks & {
7
3
  request: (dependencies: import("../index.js").Artifacts.MetricComputationDataInput, context: import("../../types/utility-types.js").default.ImmutableObject<{
8
4
  computedCache: Map<string, import("../lib/arbitrary-equality-map.js").ArbitraryEqualityMap>;
9
- }>) => Promise<TBTImpactTask[]>;
5
+ }>) => Promise<import("../index.js").Artifacts.TBTImpactTask[]>;
10
6
  };
11
- /** @typedef {LH.Artifacts.TaskNode & {tbtImpact: number, selfTbtImpact: number}} TBTImpactTask */
12
7
  declare class TBTImpactTasks {
13
8
  /**
14
9
  * @param {LH.Artifacts.TaskNode} task
@@ -28,27 +23,27 @@ declare class TBTImpactTasks {
28
23
  * @param {LH.Artifacts.TaskNode[]} tasks
29
24
  * @param {Map<LH.Artifacts.TaskNode, number>} taskToImpact
30
25
  */
31
- static createImpactTasks(tasks: LH.Artifacts.TaskNode[], taskToImpact: Map<LH.Artifacts.TaskNode, number>): TBTImpactTask[];
26
+ static createImpactTasks(tasks: LH.Artifacts.TaskNode[], taskToImpact: Map<LH.Artifacts.TaskNode, number>): import("../index.js").Artifacts.TBTImpactTask[];
32
27
  /**
33
28
  * @param {LH.Artifacts.TaskNode[]} tasks
34
29
  * @param {number} startTimeMs
35
30
  * @param {number} endTimeMs
36
- * @return {TBTImpactTask[]}
31
+ * @return {LH.Artifacts.TBTImpactTask[]}
37
32
  */
38
- static computeImpactsFromObservedTasks(tasks: LH.Artifacts.TaskNode[], startTimeMs: number, endTimeMs: number): TBTImpactTask[];
33
+ static computeImpactsFromObservedTasks(tasks: LH.Artifacts.TaskNode[], startTimeMs: number, endTimeMs: number): LH.Artifacts.TBTImpactTask[];
39
34
  /**
40
35
  * @param {LH.Artifacts.TaskNode[]} tasks
41
36
  * @param {LH.Gatherer.Simulation.Result['nodeTimings']} tbtNodeTimings
42
37
  * @param {number} startTimeMs
43
38
  * @param {number} endTimeMs
44
- * @return {TBTImpactTask[]}
39
+ * @return {LH.Artifacts.TBTImpactTask[]}
45
40
  */
46
- static computeImpactsFromLantern(tasks: LH.Artifacts.TaskNode[], tbtNodeTimings: LH.Gatherer.Simulation.Result['nodeTimings'], startTimeMs: number, endTimeMs: number): TBTImpactTask[];
41
+ static computeImpactsFromLantern(tasks: LH.Artifacts.TaskNode[], tbtNodeTimings: LH.Gatherer.Simulation.Result['nodeTimings'], startTimeMs: number, endTimeMs: number): LH.Artifacts.TBTImpactTask[];
47
42
  /**
48
43
  * @param {LH.Artifacts.MetricComputationDataInput} metricComputationData
49
44
  * @param {LH.Artifacts.ComputedContext} context
50
- * @return {Promise<TBTImpactTask[]>}
45
+ * @return {Promise<LH.Artifacts.TBTImpactTask[]>}
51
46
  */
52
- static compute_(metricComputationData: LH.Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext): Promise<TBTImpactTask[]>;
47
+ static compute_(metricComputationData: LH.Artifacts.MetricComputationDataInput, context: LH.Artifacts.ComputedContext): Promise<LH.Artifacts.TBTImpactTask[]>;
53
48
  }
54
49
  //# sourceMappingURL=tbt-impact-tasks.d.ts.map
@@ -12,8 +12,6 @@ import {TotalBlockingTime} from './metrics/total-blocking-time.js';
12
12
  import {ProcessedTrace} from './processed-trace.js';
13
13
  import {calculateTbtImpactForEvent} from './metrics/tbt-utils.js';
14
14
 
15
- /** @typedef {LH.Artifacts.TaskNode & {tbtImpact: number, selfTbtImpact: number}} TBTImpactTask */
16
-
17
15
  class TBTImpactTasks {
18
16
  /**
19
17
  * @param {LH.Artifacts.TaskNode} task
@@ -66,7 +64,7 @@ class TBTImpactTasks {
66
64
  * @param {Map<LH.Artifacts.TaskNode, number>} taskToImpact
67
65
  */
68
66
  static createImpactTasks(tasks, taskToImpact) {
69
- /** @type {TBTImpactTask[]} */
67
+ /** @type {LH.Artifacts.TBTImpactTask[]} */
70
68
  const tbtImpactTasks = [];
71
69
 
72
70
  for (const task of tasks) {
@@ -92,7 +90,7 @@ class TBTImpactTasks {
92
90
  * @param {LH.Artifacts.TaskNode[]} tasks
93
91
  * @param {number} startTimeMs
94
92
  * @param {number} endTimeMs
95
- * @return {TBTImpactTask[]}
93
+ * @return {LH.Artifacts.TBTImpactTask[]}
96
94
  */
97
95
  static computeImpactsFromObservedTasks(tasks, startTimeMs, endTimeMs) {
98
96
  /** @type {Map<LH.Artifacts.TaskNode, number>} */
@@ -125,7 +123,7 @@ class TBTImpactTasks {
125
123
  * @param {LH.Gatherer.Simulation.Result['nodeTimings']} tbtNodeTimings
126
124
  * @param {number} startTimeMs
127
125
  * @param {number} endTimeMs
128
- * @return {TBTImpactTask[]}
126
+ * @return {LH.Artifacts.TBTImpactTask[]}
129
127
  */
130
128
  static computeImpactsFromLantern(tasks, tbtNodeTimings, startTimeMs, endTimeMs) {
131
129
  /** @type {Map<LH.Artifacts.TaskNode, number>} */
@@ -193,7 +191,7 @@ class TBTImpactTasks {
193
191
  /**
194
192
  * @param {LH.Artifacts.MetricComputationDataInput} metricComputationData
195
193
  * @param {LH.Artifacts.ComputedContext} context
196
- * @return {Promise<TBTImpactTask[]>}
194
+ * @return {Promise<LH.Artifacts.TBTImpactTask[]>}
197
195
  */
198
196
  static async compute_(metricComputationData, context) {
199
197
  const tbtResult = await TotalBlockingTime.request(metricComputationData, context);
package/core/index.cjs CHANGED
@@ -5,38 +5,38 @@
5
5
  */
6
6
  'use strict';
7
7
 
8
- /** @type {import('./index.js')['default']} */
8
+ /**
9
+ * @typedef ExportType
10
+ * @property {import('./index.js')['startFlow']} startFlow
11
+ * @property {import('./index.js')['navigation']} navigation
12
+ * @property {import('./index.js')['startTimespan']} startTimespan
13
+ * @property {import('./index.js')['snapshot']} snapshot
14
+ */
15
+
16
+ /** @type {import('./index.js')['default'] & ExportType} */
9
17
  const lighthouse = async function lighthouse(...args) {
10
18
  const {default: lighthouse} = await import('./index.js');
11
19
  return lighthouse(...args);
12
20
  };
13
21
 
14
- /** @type {import('./index.js')['startFlow']} */
15
- const startFlow = async function startFlow(...args) {
22
+ lighthouse.startFlow = async function startFlow(...args) {
16
23
  const {startFlow} = await import('./index.js');
17
24
  return startFlow(...args);
18
25
  };
19
26
 
20
- /** @type {import('./index.js')['navigation']} */
21
- const navigation = async function navigation(...args) {
27
+ lighthouse.navigation = async function navigation(...args) {
22
28
  const {navigation} = await import('./index.js');
23
29
  return navigation(...args);
24
30
  };
25
31
 
26
- /** @type {import('./index.js')['startTimespan']} */
27
- const startTimespan = async function startTimespan(...args) {
32
+ lighthouse.startTimespan = async function startTimespan(...args) {
28
33
  const {startTimespan} = await import('./index.js');
29
34
  return startTimespan(...args);
30
35
  };
31
36
 
32
- /** @type {import('./index.js')['snapshot']} */
33
- const snapshot = async function snapshot(...args) {
37
+ lighthouse.snapshot = async function snapshot(...args) {
34
38
  const {snapshot} = await import('./index.js');
35
39
  return snapshot(...args);
36
40
  };
37
41
 
38
42
  module.exports = lighthouse;
39
- module.exports.startFlow = startFlow;
40
- module.exports.navigation = navigation;
41
- module.exports.startTimespan = startTimespan;
42
- module.exports.snapshot = snapshot;
package/core/index.d.cts CHANGED
@@ -1,4 +1,17 @@
1
1
  export = lighthouse;
2
- /** @type {import('./index.js')['default']} */
3
- declare const lighthouse: typeof import("./index.js")['default'];
2
+ /**
3
+ * @typedef ExportType
4
+ * @property {import('./index.js')['startFlow']} startFlow
5
+ * @property {import('./index.js')['navigation']} navigation
6
+ * @property {import('./index.js')['startTimespan']} startTimespan
7
+ * @property {import('./index.js')['snapshot']} snapshot
8
+ */
9
+ /** @type {import('./index.js')['default'] & ExportType} */
10
+ declare const lighthouse: typeof import("./index.js")['default'] & ExportType;
11
+ type ExportType = {
12
+ startFlow: typeof import("./index.js")['startFlow'];
13
+ navigation: typeof import("./index.js")['navigation'];
14
+ startTimespan: typeof import("./index.js")['startTimespan'];
15
+ snapshot: typeof import("./index.js")['snapshot'];
16
+ };
4
17
  //# sourceMappingURL=index.d.cts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lighthouse",
3
3
  "type": "module",
4
- "version": "11.0.0-dev.20230815",
4
+ "version": "11.0.0-dev.20230817",
5
5
  "description": "Automated auditing, performance metrics, and best practices for the web.",
6
6
  "main": "./core/index.js",
7
7
  "bin": {
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "‏‮The‬‏ ‏‮manifest‬‏ ‏‮URL‬‏ ‏‮scheme‬‏ ({scheme}) ‏‮is‬‏ ‏‮not‬‏ ‏‮supported‬‏ ‏‮on‬‏ ‏‮Android‬‏."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "‏‮Manifest‬‏ ‏‮start‬‏ ‏‮URL‬‏ ‏‮is‬‏ ‏‮not‬‏ ‏‮valid‬‏"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "مخطّط عنوان URL الخاص بملف البيان ({scheme}) غير متاح لنظام التشغيل Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "عنوان URL البداية لملف البيان غير صالح."
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Схемата ({scheme}) на URL адреса на манифеста не се поддържа под Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "URL адресът за стартиране в манифеста не е валиден"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "L'esquema d'URL del manifest ({scheme}) no s'admet a Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "L'URL d'inici del manifest no és vàlid"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Schéma adresy URL manifestu ({scheme}) není v systému Android podporováno."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Počáteční URL (start_url) v manifestu není platná"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Manifestets webadresseskema ({scheme}) understøttes ikke i Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Manifestets startwebadresse er ikke gyldig"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Das Manifest-URL-Schema ({scheme}) wird unter Android nicht unterstützt."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Start-URL des Manifests ist nicht gültig"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Το URL μανιφέστου ({scheme}) δεν υποστηρίζεται στο Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Το URL έναρξης μανιφέστου δεν είναι έγκυρο"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "The manifest URL scheme ({scheme}) is not supported on Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Manifest start URL is not valid"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "The manifest URL scheme ({scheme}) is not supported on Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Manifest start URL is not valid"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "[Ţĥé måñîƒéšţ ÛŔĻ šçĥémé (ᐅ{scheme}ᐊ) îš ñöţ šûþþöŕţéð öñ Åñðŕöîð. one two three four five six seven eight nine ten eleven twelve]"
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "[Måñîƒéšţ šţåŕţ ÛŔĻ îš ñöţ våļîð one two three four five six seven]"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "L̂íĝh́t̂h́ôúŝé ĉóûĺd̂ ńôt́ d̂ét̂ér̂ḿîńê íf̂ t́ĥé p̂áĝé îś îńŝt́âĺl̂áb̂ĺê. Ṕl̂éâśê t́r̂ý ŵít̂h́ â ńêẃêŕ v̂ér̂śîón̂ óf̂ Ćĥŕôḿê."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "T̂h́ê ḿâńîf́êśt̂ ÚR̂Ĺ ŝćĥém̂é ({scheme}) îś n̂ót̂ śûṕp̂ór̂t́êd́ ôń Âńd̂ŕôíd̂."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "M̂án̂íf̂éŝt́ ŝt́âŕt̂ ÚR̂Ĺ îś n̂ót̂ v́âĺîd́"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "El esquema de URL del manifiesto ({scheme}) no es compatible en Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "La URL de inicio del manifiesto no es válida"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "El esquema de URL del archivo de manifiesto ({scheme}) no es compatible con Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "La URL de inicio del archivo de manifiesto no es válida"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Manifestin URL-kaava ({scheme}) ei ole Androidin tukema."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Manifestin aloitus-URL ei kelpaa"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Hindi sinusuportahan sa Android ang scheme ng URL ng manifest ({scheme})."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Hindi valid ang start URL ng manifest"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Le schéma d'URL du fichier manifeste ({scheme}) n'est pas compatible avec Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "L'URL de démarrage du fichier manifeste n'est pas valide"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "הסכימה של כתובת ה-URL של המניפסט ({scheme}) אינה נתמכת ב-Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "כתובת ה-URL להתחלה של המניפסט לא חוקית"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "मेनिफ़ेस्ट का यूआरएल जिस स्कीम ({scheme}) का इस्तेमाल करता है वह Android पर काम नहीं करती."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "दिया गया मेनिफ़ेस्ट स्टार्ट यूआरएल मान्य नहीं है"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Shema URL-a manifesta ({scheme}) nije podržana na Androidu."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Početni URL manifesta nije važeći"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "A manifest URL-sémája ({scheme}) nem támogatott Androidon."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "A manifest kezdési URL-je érvénytelen"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Skema URL manifes ({scheme}) tidak didukung di Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "URL mulai manifes tidak valid"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Lo schema dell'URL del file manifest ({scheme}) non è supportato su Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "L'URL di avvio del file manifest non è valido"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "マニフェスト URL スキーム({scheme})は Android ではサポートされていません。"
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "マニフェストの開始 URL が無効です"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Android에서 지원되지 않는 매니페스트 URL 스키마({scheme})입니다."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "잘못된 매니페스트 시작 URL입니다."
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Aprašo URL schema ({scheme}) nepalaikoma sistemoje „Android“."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Aprašo pradžios URL netinkamas"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Manifesta URL shēma ({scheme}) netiek atbalstīta operētājsistēmā Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Manifesta sākuma URL nav derīgs"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Het URL-schema van het manifest ({scheme}) wordt niet ondersteund op Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "De start-URL voor het manifest is ongeldig"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Protokollen for manifestets nettadresse ({scheme}) støttes ikke i Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Start-nettadressen til manifestet er ikke gyldig"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Schemat adresu URL pliku manifestu ({scheme}) nie jest obsługiwany na urządzeniach z Androidem."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "URL początkowy pliku manifestu jest nieprawidłowy"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "O esquema do URL do manifesto ({scheme}) não é suportado no Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "O URL de início do manifesto não é válido."
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "O Android não tem suporte ao esquema de URL do manifesto ({scheme})."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "O URL de início do manifesto não é válido"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Schema adresei URL a manifestului ({scheme}) nu este acceptată pe Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Adresa URL inițială a manifestului nu este validă"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Android не поддерживает схему URL манифеста ({scheme})."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Недействительный URL стартовой страницы манифеста."
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Schéma webovej adresy manifestu ({scheme}) nie je v Androide podporovaná."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Začiatočná webová adresa manifestu nie je platná"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Shema URL-ja v manifestu ({scheme}) ni podprta v sistemu Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Začetni URL manifesta ni veljaven"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Šema URL-a manifesta ({scheme}) nije podržana na Android-u."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Početni URL manifesta nije važeći"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Шема URL-а манифеста ({scheme}) није подржана на Android-у."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Почетни URL манифеста није важећи"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Manifestets webbadresschema ({scheme}) stöds inte på Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Startwebbadressen i manifestet är ogiltig"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Androidல் மெனிஃபெஸ்ட் URL ஸ்கீம் ({scheme}) ஆதரிக்கப்படவில்லை."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "மெனிஃபெஸ்ட் ஸ்டார்ட் URL தவறானது"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "మ్యానిఫెస్ట్ URL స్కీమ్ ({scheme})కు Androidలో సపోర్ట్ లేదు."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "మ్యానిఫెస్ట్ ప్రారంభ URL చెల్లదు"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "รูปแบบ URL ของไฟล์ Manifest ({scheme}) ใช้ไม่ได้ใน Android"
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "URL เริ่มต้นของไฟล์ Manifest ไม่ถูกต้อง"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Manifest dosyasının URL şeması ({scheme}) Android'de desteklenmiyor."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Manifest başlangıç URL'si geçerli değil"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Схема URL-адреси маніфесту ({scheme}) не підтримується на Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "Початкова URL-адреса в маніфесті недійсна"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Lược đồ URL kê khai ({scheme}) không được hỗ trợ trên Android."
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "URL bắt đầu của tệp kê khai là không hợp lệ"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Android 不支援資訊清單網址配置 ({scheme})。"
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "資訊清單起始網址無效"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "Android 不支援資訊清單網址架構 ({scheme})。"
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "資訊清單開始網址無效"
1093
1090
  },
@@ -1085,9 +1085,6 @@
1085
1085
  "core/audits/installable-manifest.js | protocol-timeout": {
1086
1086
  "message": "Lighthouse could not determine if the page is installable. Please try with a newer version of Chrome."
1087
1087
  },
1088
- "core/audits/installable-manifest.js | scheme-not-supported-for-webapk": {
1089
- "message": "清单网址的架构 ({scheme}) 在 Android 设备上不受支持。"
1090
- },
1091
1088
  "core/audits/installable-manifest.js | start-url-not-valid": {
1092
1089
  "message": "清单起始网址无效"
1093
1090
  },
@@ -66,7 +66,6 @@ Array [
66
66
  "prefer-related-applications-only-beta-stable",
67
67
  "start-url-not-valid",
68
68
  "url-not-supported-for-webapk",
69
- "warn-not-offline-capable",
70
69
  ]
71
70
  `);
72
71
  });
@@ -173,6 +173,7 @@ declare module Artifacts {
173
173
 
174
174
  type NetworkRequest = _NetworkRequest;
175
175
  type TaskNode = _TaskNode;
176
+ type TBTImpactTask = TaskNode & {tbtImpact: number, selfTbtImpact: number};
176
177
  type MetaElement = Artifacts['MetaElements'][0];
177
178
 
178
179
  interface URL {