mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-28 21:24:26 +08:00
Bug: None Change-Id: I6f3cf66452585df8d909ac3c38a5592638ebcb4c Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6079049 Reviewed-by: Connor Clark <cjamcl@chromium.org> Reviewed-by: Simon Zünd <szuend@chromium.org> Commit-Queue: Adam Raine <asraine@chromium.org>
131 lines
5.0 KiB
JavaScript
131 lines
5.0 KiB
JavaScript
// Copyright 2024 The Chromium Authors. All rights reserved.
|
||
// Use of this source code is governed by a BSD-style license that can be
|
||
// found in the LICENSE file.
|
||
|
||
const ratings = {
|
||
good: 'is good',
|
||
'needs-improvement': 'needs improvement',
|
||
poor: 'is poor',
|
||
};
|
||
|
||
const compares = {
|
||
better: 'significantly better than',
|
||
worse: 'significantly worse than',
|
||
similar: 'similar to',
|
||
};
|
||
|
||
function camelize(string) {
|
||
return string.replace(/-./g, x => x[1].toUpperCase());
|
||
}
|
||
|
||
function capitalizeFirstLetter(string) {
|
||
return string.charAt(0).toUpperCase() + string.slice(1);
|
||
}
|
||
|
||
console.log(`// Copyright 2024 The Chromium Authors. All rights reserved.
|
||
// Use of this source code is governed by a BSD-style license that can be
|
||
// found in the LICENSE file.
|
||
|
||
import * as i18n from '../../../core/i18n/i18n.js';
|
||
|
||
import {type MetricRating} from './Utils.js';
|
||
|
||
// This file is auto-generated by scripts/generate_metric_compare_strings.js.
|
||
//
|
||
// If you need to update one or more of these strings, it is preferable to modify the script
|
||
// and write stdout to this file (Minor formatting differences may apply).
|
||
|
||
const UIStrings = {`);
|
||
for (const [rating, ratingText] of Object.entries(ratings)) {
|
||
for (const [compare, compareText] of Object.entries(compares)) {
|
||
const tag = camelize(rating) + capitalizeFirstLetter(compare) + 'Compare';
|
||
const transition = compare === 'similar' ? 'and' : 'but';
|
||
console.log(` /**
|
||
* @description Text block that compares a local metric value to real user experiences. "local" refers to a developers local testing environment.
|
||
* @example {LCP} PH1
|
||
* @example {500 ms} PH2
|
||
*/
|
||
${tag}: 'Your local {PH1} value of {PH2} ${ratingText}, ${transition} is ${compareText} your users’ experience.',`);
|
||
}
|
||
const tag = camelize(rating) + 'Summarized';
|
||
console.log(` /**
|
||
* @description Text block that summarize a local metric value. "local" refers to a developers local testing environment.
|
||
* @example {LCP} PH1
|
||
* @example {500 ms} PH2
|
||
*/
|
||
${tag}: 'Your local {PH1} value of {PH2} ${ratingText}.',`);
|
||
}
|
||
for (const [localRating, localRatingText] of Object.entries(ratings)) {
|
||
for (const [fieldRating, fieldRatingText] of Object.entries(ratings)) {
|
||
const tag = camelize(localRating) + capitalizeFirstLetter(camelize(fieldRating)) + 'DetailedCompare';
|
||
const transition = localRating === fieldRating ? 'Additionally' : 'However';
|
||
console.log(` /**
|
||
* @description Text block that compares a local metric value to real user experiences. "field data" should be interpreted as "real user data". "local" refers to a developers local testing environment.
|
||
* @example {LCP} PH1
|
||
* @example {500 ms} PH2
|
||
* @example {400 ms} PH3
|
||
* @example {40%} PH4
|
||
*/
|
||
${tag}: 'Your local {PH1} value of {PH2} ${
|
||
localRatingText} and is rated the same as {PH4} of real-user {PH1} experiences. ${
|
||
transition}, the field data 75th percentile {PH1} value of {PH3} ${fieldRatingText}.',`);
|
||
}
|
||
}
|
||
console.log(`};
|
||
|
||
const str_ = i18n.i18n.registerUIStrings('panels/timeline/components/MetricCompareStrings.ts', UIStrings);
|
||
|
||
export type CompareRating = ${Object.keys(compares).map(c => `'${c}'`).join('|')};`);
|
||
|
||
console.log(`
|
||
export function renderCompareText(options: {metric: string, rating: MetricRating, compare?: CompareRating, localValue: Element}): Element {
|
||
const {rating, compare} = options;
|
||
const values = {
|
||
PH1: options.metric,
|
||
PH2: options.localValue,
|
||
};
|
||
`);
|
||
|
||
for (const rating of Object.keys(ratings)) {
|
||
for (const compare of Object.keys(compares)) {
|
||
const tag = camelize(rating) + capitalizeFirstLetter(compare) + 'Compare';
|
||
console.log(` if (rating === '${rating}' && compare === '${compare}') {
|
||
return i18n.i18n.getFormatLocalizedString(str_, UIStrings.${tag}, values);
|
||
}`);
|
||
}
|
||
const tag = camelize(rating) + 'Summarized';
|
||
console.log(` if (rating === '${rating}' && !compare) {
|
||
return i18n.i18n.getFormatLocalizedString(str_, UIStrings.${tag}, values);
|
||
}`);
|
||
}
|
||
console.log(`
|
||
throw new Error('Compare string not found');
|
||
}`);
|
||
|
||
console.log(`
|
||
export function renderDetailedCompareText(options: {metric: string, localRating: MetricRating, fieldRating?: MetricRating, localValue: Element, fieldValue: Element, percent: string}): Element {
|
||
const {localRating, fieldRating} = options;
|
||
const values = {
|
||
PH1: options.metric,
|
||
PH2: options.localValue,
|
||
PH3: options.fieldValue,
|
||
PH4: options.percent,
|
||
};
|
||
`);
|
||
|
||
for (const localRating of Object.keys(ratings)) {
|
||
for (const fieldRating of Object.keys(ratings)) {
|
||
const tag = camelize(localRating) + capitalizeFirstLetter(camelize(fieldRating)) + 'DetailedCompare';
|
||
console.log(` if (localRating === '${localRating}' && fieldRating === '${fieldRating}') {
|
||
return i18n.i18n.getFormatLocalizedString(str_, UIStrings.${tag}, values);
|
||
}`);
|
||
}
|
||
const tag = camelize(localRating) + 'Summarized';
|
||
console.log(` if (localRating === '${localRating}' && !fieldRating) {
|
||
return i18n.i18n.getFormatLocalizedString(str_, UIStrings.${tag}, values);
|
||
}`);
|
||
}
|
||
console.log(`
|
||
throw new Error('Detailed compare string not found');
|
||
}`);
|