chrome-devtools-frontend 1.0.1539972 → 1.0.1541552

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 (106) hide show
  1. package/eslint.config.mjs +167 -151
  2. package/front_end/Tests.js +5 -1
  3. package/front_end/core/common/Revealer.ts +5 -0
  4. package/front_end/core/common/Settings.ts +106 -95
  5. package/front_end/core/host/InspectorFrontendHost.ts +10 -10
  6. package/front_end/core/sdk/NetworkManager.ts +16 -11
  7. package/front_end/core/sdk/sdk-meta.ts +0 -35
  8. package/front_end/entrypoints/main/MainImpl.ts +15 -7
  9. package/front_end/entrypoints/shell/shell.ts +1 -0
  10. package/front_end/entrypoints/trace_app/trace_app.ts +1 -0
  11. package/front_end/foundation/README.md +10 -0
  12. package/front_end/foundation/Universe.ts +29 -0
  13. package/front_end/foundation/foundation.ts +7 -0
  14. package/front_end/generated/InspectorBackendCommands.ts +6 -3
  15. package/front_end/generated/SupportedCSSProperties.js +13 -0
  16. package/front_end/generated/protocol.ts +58 -2
  17. package/front_end/models/ai_assistance/BuiltInAi.ts +2 -1
  18. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +44 -34
  19. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +121 -56
  20. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +104 -62
  21. package/front_end/models/ai_assistance/performance/AIQueries.ts +56 -2
  22. package/front_end/{panels/issues → models/issues_manager}/IssueAggregator.ts +83 -65
  23. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  24. package/front_end/models/trace/Processor.ts +5 -4
  25. package/front_end/models/trace/insights/types.ts +1 -1
  26. package/front_end/models/trace/types/TraceEvents.ts +1 -1
  27. package/front_end/models/workspace/IgnoreListManager.ts +41 -47
  28. package/front_end/models/workspace/workspace-meta.ts +40 -0
  29. package/front_end/panels/ai_assistance/components/MarkdownRendererWithCodeBlock.ts +1 -1
  30. package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +1 -1
  31. package/front_end/panels/animation/AnimationTimeline.ts +4 -4
  32. package/front_end/panels/animation/AnimationUI.ts +28 -34
  33. package/front_end/panels/elements/ElementsTreeElement.ts +37 -9
  34. package/front_end/panels/elements/LayoutPane.ts +2 -2
  35. package/front_end/panels/elements/components/AdornerManager.ts +9 -9
  36. package/front_end/panels/elements/layoutPane.css +5 -9
  37. package/front_end/panels/event_listeners/EventListenersView.ts +1 -1
  38. package/front_end/panels/explain/components/ConsoleInsight.ts +498 -449
  39. package/front_end/panels/issues/AffectedResourcesView.ts +3 -4
  40. package/front_end/panels/issues/CorsIssueDetailsView.ts +1 -2
  41. package/front_end/panels/issues/IssueView.ts +1 -1
  42. package/front_end/panels/issues/IssuesPane.ts +12 -15
  43. package/front_end/panels/issues/issues.ts +0 -2
  44. package/front_end/panels/network/NetworkDataGridNode.ts +2 -1
  45. package/front_end/panels/network/RequestConditionsDrawer.ts +149 -46
  46. package/front_end/panels/network/RequestTimingView.ts +13 -8
  47. package/front_end/panels/network/network-meta.ts +11 -0
  48. package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +1 -1
  49. package/front_end/panels/sources/DebuggerPlugin.ts +1 -1
  50. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +1 -1
  51. package/front_end/panels/sources/breakpointsView.css +1 -1
  52. package/front_end/panels/sources/sourcesPanel.css +2 -2
  53. package/front_end/panels/timeline/TimelineFlameChartView.ts +3 -3
  54. package/front_end/panels/timeline/TimelinePanel.ts +3 -3
  55. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +16 -10
  56. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +2 -0
  57. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +4 -1
  58. package/front_end/third_party/chromium/README.chromium +1 -1
  59. package/front_end/third_party/puppeteer/README.chromium +2 -2
  60. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  61. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js +3 -1
  62. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js.map +1 -1
  63. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +2 -2
  64. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
  65. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  66. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  67. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +4 -4
  68. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  69. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js +3 -1
  70. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js.map +1 -1
  71. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
  72. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
  73. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  74. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  75. package/front_end/third_party/puppeteer/package/package.json +1 -1
  76. package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +3 -1
  77. package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
  78. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  79. package/front_end/ui/components/markdown_view/MarkdownView.ts +6 -6
  80. package/front_end/ui/components/snackbars/Snackbars.docs.ts +46 -0
  81. package/front_end/ui/{components/docs/context_menu/basic.ts → legacy/ContextMenu.docs.ts} +58 -25
  82. package/front_end/ui/legacy/UIUtils.ts +2 -1
  83. package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +1 -1
  84. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +148 -125
  85. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +3 -3
  86. package/front_end/ui/legacy/components/perf_ui/pieChart.css +1 -1
  87. package/front_end/ui/legacy/components/utils/Linkifier.ts +1 -1
  88. package/front_end/ui/legacy/inspectorCommon.css +3 -2
  89. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  90. package/mcp/mcp.ts +16 -0
  91. package/package.json +2 -1
  92. package/front_end/ui/components/docs/context_menu/basic.html +0 -45
  93. package/front_end/ui/components/docs/linkifier/simple-url.html +0 -25
  94. package/front_end/ui/components/docs/linkifier/simple-url.ts +0 -25
  95. package/front_end/ui/components/docs/panel_feedback/basic.html +0 -25
  96. package/front_end/ui/components/docs/panel_feedback/basic.ts +0 -21
  97. package/front_end/ui/components/docs/panel_feedback/button.html +0 -25
  98. package/front_end/ui/components/docs/panel_feedback/button.ts +0 -19
  99. package/front_end/ui/components/docs/panel_introduction_steps/basic.html +0 -25
  100. package/front_end/ui/components/docs/panel_introduction_steps/basic.ts +0 -28
  101. package/front_end/ui/components/docs/perf_piechart/basic-with-legend.html +0 -20
  102. package/front_end/ui/components/docs/perf_piechart/basic-with-legend.ts +0 -20
  103. package/front_end/ui/components/docs/perf_piechart/basic-without-legend.html +0 -20
  104. package/front_end/ui/components/docs/perf_piechart/basic-without-legend.ts +0 -18
  105. package/front_end/ui/components/docs/snackbars/basic.html +0 -17
  106. package/front_end/ui/components/docs/snackbars/basic.ts +0 -50
package/eslint.config.mjs CHANGED
@@ -7,6 +7,7 @@ import { defineConfig, globalIgnores } from 'eslint/config';
7
7
  import eslintPlugin from 'eslint-plugin-eslint-plugin';
8
8
  import importPlugin from 'eslint-plugin-import';
9
9
  import jsdocPlugin from 'eslint-plugin-jsdoc';
10
+ import litPlugin from 'eslint-plugin-lit';
10
11
  import mochaPlugin from 'eslint-plugin-mocha';
11
12
  import globals from 'globals';
12
13
  import { join } from 'path';
@@ -60,7 +61,7 @@ export default defineConfig([
60
61
  'scripts/deps/tests/fixtures',
61
62
  'test/**/fixtures/',
62
63
  'test/e2e/**/*.js',
63
- 'test/shared/**/*.js'
64
+ 'test/shared/**/*.js',
64
65
  ]),
65
66
  {
66
67
  name: 'JavaScript files',
@@ -71,20 +72,21 @@ export default defineConfig([
71
72
  mocha: mochaPlugin,
72
73
  '@devtools': devToolsPlugin,
73
74
  import: importPlugin,
74
- jsdoc: jsdocPlugin
75
+ jsdoc: jsdocPlugin,
76
+ lit: litPlugin,
75
77
  },
76
78
 
77
79
  languageOptions: {
78
80
  ecmaVersion: 'latest',
79
81
  sourceType: 'module',
80
82
  globals: {
81
- ...globals.browser
82
- }
83
+ ...globals.browser,
84
+ },
83
85
  },
84
86
 
85
87
  linterOptions: {
86
88
  reportUnusedDisableDirectives: 'error',
87
- reportUnusedInlineConfigs: 'error'
89
+ reportUnusedInlineConfigs: 'error',
88
90
  },
89
91
 
90
92
  rules: {
@@ -94,8 +96,8 @@ export default defineConfig([
94
96
  'single',
95
97
  {
96
98
  avoidEscape: true,
97
- allowTemplateLiterals: 'always'
98
- }
99
+ allowTemplateLiterals: 'always',
100
+ },
99
101
  ],
100
102
 
101
103
  '@stylistic/semi': 'error',
@@ -107,8 +109,8 @@ export default defineConfig([
107
109
  'error',
108
110
  'always',
109
111
  {
110
- markers: ['*']
111
- }
112
+ markers: ['*'],
113
+ },
112
114
  ],
113
115
 
114
116
  eqeqeq: 'error',
@@ -117,8 +119,8 @@ export default defineConfig([
117
119
  'error',
118
120
  {
119
121
  getWithoutSet: false,
120
- setWithoutGet: false
121
- }
122
+ setWithoutGet: false,
123
+ },
122
124
  ],
123
125
 
124
126
  curly: 'error',
@@ -144,9 +146,9 @@ export default defineConfig([
144
146
  'timeStamp',
145
147
  'time',
146
148
  'timeEnd',
147
- 'warn'
148
- ]
149
- }
149
+ 'warn',
150
+ ],
151
+ },
150
152
  ],
151
153
 
152
154
  'no-debugger': 'error',
@@ -156,15 +158,15 @@ export default defineConfig([
156
158
  'no-else-return': [
157
159
  'error',
158
160
  {
159
- allowElseIf: false
160
- }
161
+ allowElseIf: false,
162
+ },
161
163
  ],
162
164
 
163
165
  'no-empty': [
164
166
  'error',
165
167
  {
166
- allowEmptyCatch: true
167
- }
168
+ allowEmptyCatch: true,
169
+ },
168
170
  ],
169
171
  'no-lonely-if': 'error',
170
172
 
@@ -184,8 +186,8 @@ export default defineConfig([
184
186
  'error',
185
187
  {
186
188
  args: 'none',
187
- vars: 'local'
188
- }
189
+ vars: 'local',
190
+ },
189
191
  ],
190
192
 
191
193
  'no-var': 'error',
@@ -206,8 +208,8 @@ export default defineConfig([
206
208
  '@stylistic/no-multiple-empty-lines': [
207
209
  'error',
208
210
  {
209
- max: 1
210
- }
211
+ max: 1,
212
+ },
211
213
  ],
212
214
  '@stylistic/no-mixed-spaces-and-tabs': 'error',
213
215
  '@stylistic/no-trailing-spaces': 'error',
@@ -222,10 +224,10 @@ export default defineConfig([
222
224
  {
223
225
  SwitchCase: 1,
224
226
  CallExpression: {
225
- arguments: 2
227
+ arguments: 2,
226
228
  },
227
- MemberExpression: 2
228
- }
229
+ MemberExpression: 2,
230
+ },
229
231
  ],
230
232
 
231
233
  // brace-style is disabled, as eslint cannot enforce 1tbs as default, but allman for functions
@@ -233,8 +235,8 @@ export default defineConfig([
233
235
  'off',
234
236
  'allman',
235
237
  {
236
- allowSingleLine: true
237
- }
238
+ allowSingleLine: true,
239
+ },
238
240
  ],
239
241
 
240
242
  // key-spacing is disabled, as some objects use value-aligned spacing, some not.
@@ -243,8 +245,8 @@ export default defineConfig([
243
245
  {
244
246
  beforeColon: false,
245
247
  afterColon: true,
246
- align: 'value'
247
- }
248
+ align: 'value',
249
+ },
248
250
  ],
249
251
 
250
252
  '@stylistic/quote-props': ['error', 'as-needed'],
@@ -278,9 +280,9 @@ export default defineConfig([
278
280
  named: false,
279
281
  alphabetize: {
280
282
  order: 'asc',
281
- caseInsensitive: true
282
- }
283
- }
283
+ caseInsensitive: true,
284
+ },
285
+ },
284
286
  ],
285
287
  // Try to spot '// console.log()' left over from debugging
286
288
  '@devtools/no-commented-out-console': 'error',
@@ -296,9 +298,9 @@ export default defineConfig([
296
298
  {
297
299
  definedTags: [
298
300
  'attribute', // @attribute is used by lit-analyzer (through web-component-analyzer)
299
- 'meaning' // @meaning is used by localization
300
- ]
301
- }
301
+ 'meaning', // @meaning is used by localization
302
+ ],
303
+ },
302
304
  ],
303
305
  'jsdoc/empty-tags': 'error',
304
306
  'jsdoc/multiline-blocks': 'error',
@@ -306,14 +308,14 @@ export default defineConfig([
306
308
  'jsdoc/no-blank-blocks': [
307
309
  'error',
308
310
  {
309
- enableFixer: true
310
- }
311
+ enableFixer: true,
312
+ },
311
313
  ],
312
314
  'jsdoc/require-asterisk-prefix': 'error',
313
315
  'jsdoc/require-param-name': 'error',
314
316
  'jsdoc/require-hyphen-before-param-description': ['error', 'never'],
315
- 'jsdoc/sort-tags': 'error'
316
- }
317
+ 'jsdoc/sort-tags': 'error',
318
+ },
317
319
  },
318
320
  {
319
321
  name: 'TypeScript files',
@@ -330,30 +332,30 @@ export default defineConfig([
330
332
  import.meta.dirname,
331
333
  'config',
332
334
  'typescript',
333
- 'tsconfig.eslint.json'
334
- )
335
- }
335
+ 'tsconfig.eslint.json',
336
+ ),
337
+ },
336
338
  },
337
339
 
338
340
  rules: {
339
341
  '@typescript-eslint/array-type': [
340
342
  'error',
341
343
  {
342
- default: 'array-simple'
343
- }
344
+ default: 'array-simple',
345
+ },
344
346
  ],
345
347
  '@typescript-eslint/no-explicit-any': [
346
348
  'error',
347
349
  {
348
- ignoreRestArgs: true
349
- }
350
+ ignoreRestArgs: true,
351
+ },
350
352
  ],
351
353
 
352
354
  '@typescript-eslint/explicit-member-accessibility': [
353
355
  'error',
354
356
  {
355
- accessibility: 'no-public'
356
- }
357
+ accessibility: 'no-public',
358
+ },
357
359
  ],
358
360
 
359
361
  // run just the TypeScript unused-vars rule, else we get duplicate errors
@@ -361,8 +363,8 @@ export default defineConfig([
361
363
  '@typescript-eslint/no-unused-vars': [
362
364
  'error',
363
365
  {
364
- argsIgnorePattern: '^_'
365
- }
366
+ argsIgnorePattern: '^_',
367
+ },
366
368
  ],
367
369
 
368
370
  '@stylistic/member-delimiter-style': [
@@ -370,47 +372,47 @@ export default defineConfig([
370
372
  {
371
373
  multiline: {
372
374
  delimiter: 'semi',
373
- requireLast: true
375
+ requireLast: true,
374
376
  },
375
377
 
376
378
  singleline: {
377
379
  delimiter: 'comma',
378
- requireLast: false
380
+ requireLast: false,
379
381
  },
380
382
 
381
383
  overrides: {
382
384
  interface: {
383
385
  singleline: {
384
386
  delimiter: 'semi',
385
- requireLast: false
387
+ requireLast: false,
386
388
  },
387
389
 
388
390
  multiline: {
389
391
  delimiter: 'semi',
390
- requireLast: true
391
- }
392
+ requireLast: true,
393
+ },
392
394
  },
393
395
 
394
396
  typeLiteral: {
395
397
  singleline: {
396
398
  delimiter: 'comma',
397
- requireLast: false
399
+ requireLast: false,
398
400
  },
399
401
 
400
402
  multiline: {
401
403
  delimiter: 'comma',
402
- requireLast: true
403
- }
404
- }
405
- }
406
- }
404
+ requireLast: true,
405
+ },
406
+ },
407
+ },
408
+ },
407
409
  ],
408
410
 
409
411
  '@typescript-eslint/no-floating-promises': [
410
412
  'error',
411
413
  {
412
- ignoreVoid: true
413
- }
414
+ ignoreVoid: true,
415
+ },
414
416
  ],
415
417
 
416
418
  /**
@@ -434,8 +436,8 @@ export default defineConfig([
434
436
 
435
437
  custom: {
436
438
  regex: '^I[A-Z]',
437
- match: false
438
- }
439
+ match: false,
440
+ },
439
441
  },
440
442
  {
441
443
  selector: [
@@ -443,9 +445,9 @@ export default defineConfig([
443
445
  'accessor',
444
446
  'method',
445
447
  'property',
446
- 'parameterProperty'
448
+ 'parameterProperty',
447
449
  ],
448
- format: ['camelCase']
450
+ format: ['camelCase'],
449
451
  },
450
452
  {
451
453
  selector: 'variable',
@@ -453,10 +455,10 @@ export default defineConfig([
453
455
  filter: {
454
456
  // Ignore localization variables.
455
457
  regex: '^(UIStrings|str_)$',
456
- match: false
458
+ match: false,
457
459
  },
458
460
 
459
- format: ['camelCase']
461
+ format: ['camelCase'],
460
462
  },
461
463
  {
462
464
  // We are using camelCase, PascalCase and UPPER_CASE for top-level constants, allow the for now.
@@ -465,54 +467,54 @@ export default defineConfig([
465
467
  filter: {
466
468
  // Ignore localization variables.
467
469
  regex: '^(UIStrings|str_)$',
468
- match: false
470
+ match: false,
469
471
  },
470
472
 
471
- format: ['camelCase', 'UPPER_CASE', 'PascalCase']
473
+ format: ['camelCase', 'UPPER_CASE', 'PascalCase'],
472
474
  },
473
475
  {
474
476
  selector: 'classProperty',
475
477
  modifiers: ['static', 'readonly'],
476
- format: ['UPPER_CASE', 'camelCase']
478
+ format: ['UPPER_CASE', 'camelCase'],
477
479
  },
478
480
  {
479
481
  selector: 'enumMember',
480
- format: ['UPPER_CASE']
482
+ format: ['UPPER_CASE'],
481
483
  },
482
484
  {
483
485
  selector: ['typeLike'],
484
- format: ['PascalCase']
486
+ format: ['PascalCase'],
485
487
  },
486
488
  {
487
489
  selector: 'parameter',
488
490
  format: ['camelCase'],
489
- leadingUnderscore: 'allow'
491
+ leadingUnderscore: 'allow',
490
492
  },
491
493
  {
492
494
  // Public methods are currently in transition and may still have leading underscores.
493
495
  selector: 'method',
494
496
  modifiers: ['public'],
495
497
  format: ['camelCase'],
496
- leadingUnderscore: 'allow'
498
+ leadingUnderscore: 'allow',
497
499
  },
498
500
  {
499
501
  selector: 'property',
500
502
  modifiers: ['public'],
501
503
  format: ['camelCase'],
502
- leadingUnderscore: 'allow'
504
+ leadingUnderscore: 'allow',
503
505
  },
504
506
  {
505
507
  // Object literals may be constructed as arguments to external libraries which follow different styles.
506
508
  selector: ['objectLiteralMethod', 'objectLiteralProperty'],
507
509
  modifiers: ['public'],
508
- format: null
510
+ format: null,
509
511
  },
510
512
  {
511
513
  // Ignore type properties that require quotes
512
514
  selector: 'typeProperty',
513
515
  format: null,
514
- modifiers: ['requiresQuotes']
515
- }
516
+ modifiers: ['requiresQuotes'],
517
+ },
516
518
  ],
517
519
 
518
520
  '@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
@@ -529,7 +531,7 @@ export default defineConfig([
529
531
 
530
532
  '@typescript-eslint/consistent-generic-constructors': [
531
533
  'error',
532
- 'constructor'
534
+ 'constructor',
533
535
  ],
534
536
 
535
537
  // This is more performant
@@ -545,8 +547,8 @@ export default defineConfig([
545
547
  'ts-check': false,
546
548
  'ts-expect-error': 'allow-with-description',
547
549
  'ts-ignore': true,
548
- 'ts-nocheck': true
549
- }
550
+ 'ts-nocheck': true,
551
+ },
550
552
  ],
551
553
 
552
554
  '@typescript-eslint/prefer-optional-chain': 'error',
@@ -556,8 +558,8 @@ export default defineConfig([
556
558
  '@typescript-eslint/no-empty-object-type': [
557
559
  'error',
558
560
  {
559
- allowInterfaces: 'with-single-extends'
560
- }
561
+ allowInterfaces: 'with-single-extends',
562
+ },
561
563
  ],
562
564
 
563
565
  'no-array-constructor': 'off',
@@ -580,10 +582,10 @@ export default defineConfig([
580
582
  'front_end',
581
583
  'models',
582
584
  'trace',
583
- 'trace.js'
585
+ 'trace.js',
584
586
  ),
585
- importName: 'Trace'
586
- }
587
+ importName: 'Trace',
588
+ },
587
589
  ],
588
590
 
589
591
  '@devtools/validate-timing-types': 'error',
@@ -591,8 +593,8 @@ export default defineConfig([
591
593
  // Disallow redundant (and potentially conflicting) type information
592
594
  // within JSDoc comments.
593
595
  'jsdoc/no-types': 'error',
594
- 'jsdoc/require-returns-description': 'error'
595
- }
596
+ 'jsdoc/require-returns-description': 'error',
597
+ },
596
598
  },
597
599
  {
598
600
  name: 'Scripts files',
@@ -600,8 +602,8 @@ export default defineConfig([
600
602
  rules: {
601
603
  'no-console': 'off',
602
604
  '@devtools/es-modules-import': 'off',
603
- 'import/no-default-export': 'off'
604
- }
605
+ 'import/no-default-export': 'off',
606
+ },
605
607
  },
606
608
  {
607
609
  name: 'Front-end files',
@@ -611,15 +613,15 @@ export default defineConfig([
611
613
  '@devtools/l10n-filename-matches': [
612
614
  'error',
613
615
  {
614
- rootFrontendDirectory: join(import.meta.dirname, 'front_end')
615
- }
616
+ rootFrontendDirectory: join(import.meta.dirname, 'front_end'),
617
+ },
616
618
  ],
617
619
  '@devtools/l10n-i18nString-call-only-with-uistrings': 'error',
618
620
  '@devtools/l10n-no-i18nString-calls-module-instantiation': 'error',
619
621
  '@devtools/l10n-no-locked-or-placeholder-only-phrase': 'error',
620
622
  '@devtools/l10n-no-uistrings-export': 'error',
621
- '@devtools/l10n-no-unused-message': 'error'
622
- }
623
+ '@devtools/l10n-no-unused-message': 'error',
624
+ },
623
625
  },
624
626
  {
625
627
  name: 'Front-end TypeScript files',
@@ -630,8 +632,8 @@ export default defineConfig([
630
632
  {
631
633
  allowExpressions: true,
632
634
  allowConciseArrowFunctionExpressionsStartingWithVoid: true,
633
- allowIIFEs: true
634
- }
635
+ allowIIFEs: true,
636
+ },
635
637
  ],
636
638
  '@devtools/no-imperative-dom-api': 'error',
637
639
  '@devtools/no-lit-render-outside-of-view': 'error',
@@ -650,8 +652,8 @@ export default defineConfig([
650
652
  '@devtools/require-super-calls-in-overridden-methods': [
651
653
  'error',
652
654
  {
653
- methodNames: ['wasShown', 'willHide']
654
- }
655
+ methodNames: ['wasShown', 'willHide'],
656
+ },
655
657
  ],
656
658
  '@devtools/static-custom-event-names': 'error',
657
659
  '@devtools/lit-no-attribute-quotes': 'error',
@@ -663,13 +665,27 @@ export default defineConfig([
663
665
  '@devtools/enforce-custom-element-definitions-location': [
664
666
  'error',
665
667
  {
666
- rootFrontendDirectory: join(import.meta.dirname, 'front_end')
667
- }
668
+ rootFrontendDirectory: join(import.meta.dirname, 'front_end'),
669
+ },
668
670
  ],
669
671
  '@devtools/enforce-ui-strings-as-const': 'error',
670
672
  '@devtools/no-new-lit-element-components': 'error',
671
- '@devtools/enforce-custom-element-prefix': 'error'
672
- }
673
+ '@devtools/enforce-custom-element-prefix': 'error',
674
+
675
+ // Lit recommended
676
+ 'lit/attribute-value-entities': 'error',
677
+ 'lit/binding-positions': 'error',
678
+ 'lit/no-duplicate-template-bindings': 'error',
679
+ 'lit/no-invalid-html': 'error',
680
+ // TODO: enable this once we figure ot the custom directive
681
+ // 'lit/no-legacy-template-syntax': 'error',
682
+ 'lit/no-property-change-update': 'error',
683
+
684
+ // Lit DevTools preferred
685
+ 'lit/prefer-nothing': 'error',
686
+ 'lit/value-after-constraints': 'error',
687
+ 'lit/quoted-expressions': ['error', 'never'],
688
+ },
673
689
  },
674
690
  {
675
691
  name: 'Front-end meta files',
@@ -680,10 +696,10 @@ export default defineConfig([
680
696
  {
681
697
  selector: 'parameter',
682
698
  format: ['camelCase', 'PascalCase'],
683
- leadingUnderscore: 'allow'
684
- }
685
- ]
686
- }
699
+ leadingUnderscore: 'allow',
700
+ },
701
+ ],
702
+ },
687
703
  },
688
704
  {
689
705
  name: 'TypeScript test files',
@@ -694,7 +710,7 @@ export default defineConfig([
694
710
  'test/**/*.ts',
695
711
  '**/testing/*.ts',
696
712
  'scripts/eslint_rules/test/**/*',
697
- 'extensions/cxx_debugging/e2e/**'
713
+ 'extensions/cxx_debugging/e2e/**',
698
714
  ],
699
715
 
700
716
  rules: {
@@ -716,10 +732,10 @@ export default defineConfig([
716
732
  // Chai AssertionError does not extend Error
717
733
  from: 'package',
718
734
  package: 'chai',
719
- name: ['AssertionError']
720
- }
721
- ]
722
- }
735
+ name: ['AssertionError'],
736
+ },
737
+ ],
738
+ },
723
739
  ],
724
740
 
725
741
  '@devtools/check-test-definitions': 'error',
@@ -739,7 +755,7 @@ export default defineConfig([
739
755
  '@devtools/trace-engine-test-timeouts': 'error',
740
756
  '@devtools/no-document-body-mutation': 'error',
741
757
  '@devtools/enforce-custom-element-definitions-location': 'off',
742
- '@devtools/enforce-custom-element-prefix': 'off'
758
+ '@devtools/enforce-custom-element-prefix': 'off',
743
759
  },
744
760
 
745
761
  settings: {
@@ -747,69 +763,69 @@ export default defineConfig([
747
763
  {
748
764
  name: 'describeWithDevtoolsExtension',
749
765
  type: 'suite',
750
- interfaces: ['BDD', 'TDD']
766
+ interfaces: ['BDD', 'TDD'],
751
767
  },
752
768
  {
753
769
  name: 'describeWithEnvironment',
754
770
  type: 'suite',
755
- interfaces: ['BDD', 'TDD']
771
+ interfaces: ['BDD', 'TDD'],
756
772
  },
757
773
  {
758
774
  name: 'describeWithLocale',
759
775
  type: 'suite',
760
- interfaces: ['BDD', 'TDD']
776
+ interfaces: ['BDD', 'TDD'],
761
777
  },
762
778
  {
763
779
  name: 'describeWithMockConnection',
764
780
  type: 'suite',
765
- interfaces: ['BDD', 'TDD']
766
- }
767
- ]
768
- }
781
+ interfaces: ['BDD', 'TDD'],
782
+ },
783
+ ],
784
+ },
769
785
  },
770
786
  {
771
787
  name: 'Use private class members rule',
772
788
  files: [
773
789
  'front_end/panels/**/components/*.ts',
774
790
  'front_end/ui/components/**/*.ts',
775
- 'front_end/entrypoints/**/*.ts'
791
+ 'front_end/entrypoints/**/*.ts',
776
792
  ],
777
793
 
778
794
  rules: {
779
- '@devtools/prefer-private-class-members': 'error'
780
- }
795
+ '@devtools/prefer-private-class-members': 'error',
796
+ },
781
797
  },
782
798
  {
783
799
  name: 'Ignore private class members rule',
784
800
  files: [
785
801
  'front_end/panels/recorder/**/*.ts',
786
- 'front_end/ui/components/suggestion_input/*.ts'
802
+ 'front_end/ui/components/suggestion_input/*.ts',
787
803
  ],
788
804
  rules: {
789
805
  // TODO(crbug/1402569): Reenable once https://github.com/microsoft/TypeScript/issues/48885 is closed.
790
- '@devtools/prefer-private-class-members': 'off'
791
- }
806
+ '@devtools/prefer-private-class-members': 'off',
807
+ },
792
808
  },
793
809
  {
794
810
  name: 'Supported CSS properties rules',
795
811
  files: ['front_end/generated/SupportedCSSProperties.js'],
796
812
  rules: {
797
- '@devtools/jslog-context-list': 'error'
798
- }
813
+ '@devtools/jslog-context-list': 'error',
814
+ },
799
815
  },
800
816
  {
801
817
  name: 'EsLint rules test',
802
818
  files: ['scripts/eslint_rules/tests/**/*'],
803
819
  rules: {
804
- '@eslint-plugin/no-only-tests': 'error'
805
- }
820
+ '@eslint-plugin/no-only-tests': 'error',
821
+ },
806
822
  },
807
823
  {
808
824
  name: 'Legacy test runner',
809
825
  files: ['front_end/legacy_test_runner/**/*'],
810
826
  rules: {
811
- '@devtools/es-modules-import': 'off'
812
- }
827
+ '@devtools/es-modules-import': 'off',
828
+ },
813
829
  },
814
830
  {
815
831
  name: 'Front-end component docs',
@@ -823,8 +839,8 @@ export default defineConfig([
823
839
  // {host: this} as often the `this` is the window.
824
840
  '@devtools/lit-host-this': 'off',
825
841
  '@devtools/no-imperative-dom-api': 'off',
826
- '@devtools/no-lit-render-outside-of-view': 'off'
827
- }
842
+ '@devtools/no-lit-render-outside-of-view': 'off',
843
+ },
828
844
  },
829
845
  {
830
846
  name: 'Keep models/trace isolated',
@@ -841,22 +857,22 @@ export default defineConfig([
841
857
  'front_end',
842
858
  'core',
843
859
  'sdk',
844
- 'sdk.js'
860
+ 'sdk.js',
845
861
  ),
846
- allowTypeImports: true
847
- }
848
- ]
849
- }
850
- ]
851
- }
862
+ allowTypeImports: true,
863
+ },
864
+ ],
865
+ },
866
+ ],
867
+ },
852
868
  },
853
869
  {
854
870
  name: 'Recorder injected code',
855
871
  files: ['front_end/panels/recorder/injected/**/*.ts'],
856
872
  rules: {
857
873
  // The code is rolled up and tree-shaken independently from the regular entrypoints.
858
- '@devtools/es-modules-import': 'off'
859
- }
874
+ '@devtools/es-modules-import': 'off',
875
+ },
860
876
  },
861
877
  {
862
878
  name: 'Performance panel file',
@@ -867,8 +883,8 @@ export default defineConfig([
867
883
  // enabled in this folder because it is an
868
884
  // expensive rule to run and we do not need it
869
885
  // for any code that doesn't use Canvas.
870
- '@devtools/canvas-context-tracking': 'error'
871
- }
886
+ '@devtools/canvas-context-tracking': 'error',
887
+ },
872
888
  },
873
889
  {
874
890
  name: 'TypeScript type-definitions',
@@ -876,8 +892,8 @@ export default defineConfig([
876
892
  rules: {
877
893
  // Not a useful rule for .d.ts files where we are
878
894
  // representing an existing module.
879
- 'import/no-default-export': 'off'
880
- }
895
+ 'import/no-default-export': 'off',
896
+ },
881
897
  },
882
898
  {
883
899
  name: 'Config files',
@@ -885,7 +901,7 @@ export default defineConfig([
885
901
  rules: {
886
902
  // The config operate on the default export
887
903
  // So allow it for them
888
- 'import/no-default-export': 'off'
889
- }
890
- }
904
+ 'import/no-default-export': 'off',
905
+ },
906
+ },
891
907
  ]);