Files
react-native-devtools-frontend/scripts/generate_metric_compare_strings.js
Adam Raine 61007ff654 [RPP Observations] Update definition of "field data" in translation contexts
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>
2024-12-10 15:56:53 +00:00

131 lines
5.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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');
}`);