generaltranslation 8.2.12 → 8.2.13
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.
- package/CHANGELOG.md +8 -0
- package/dist/LocaleConfig.d.ts +59 -0
- package/dist/LocaleConfig.js +225 -0
- package/dist/backwards-compatability/dataConversion.d.ts +23 -0
- package/dist/backwards-compatability/dataConversion.js +207 -0
- package/dist/backwards-compatability/oldHashJsxChildren.d.ts +23 -0
- package/dist/backwards-compatability/oldHashJsxChildren.js +79 -0
- package/dist/backwards-compatability/oldTypes.d.ts +21 -0
- package/dist/backwards-compatability/oldTypes.js +1 -0
- package/dist/backwards-compatability/typeChecking.d.ts +21 -0
- package/dist/backwards-compatability/typeChecking.js +61 -0
- package/dist/cache/IntlCache.d.ts +26 -0
- package/dist/cache/IntlCache.js +84 -0
- package/dist/cache/types.d.ts +32 -0
- package/dist/cache/types.js +1 -0
- package/dist/{core-CST4J4WU.cjs → core-7RP541eY.cjs} +2 -2
- package/dist/core-7RP541eY.cjs.map +1 -0
- package/dist/{core-D-E8qhLn.d.cts → core-I9pWGafA.d.mts} +2 -2
- package/dist/{core-CGhlXrrK.d.mts → core-TLJoDpJP.d.cts} +2 -2
- package/dist/{core-7RJsqw6c.mjs → core-isLphYAZ.mjs} +2 -2
- package/dist/core-isLphYAZ.mjs.map +1 -0
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +1 -1
- package/dist/core.d.mts +1 -1
- package/dist/core.d.ts +128 -0
- package/dist/core.js +137 -0
- package/dist/core.mjs +1 -1
- package/dist/derive/condenseVars.d.ts +7 -0
- package/dist/derive/condenseVars.js +30 -0
- package/dist/derive/declareVar.d.ts +26 -0
- package/dist/derive/declareVar.js +38 -0
- package/dist/derive/decodeVars.d.ts +9 -0
- package/dist/derive/decodeVars.js +52 -0
- package/dist/derive/derive.d.ts +53 -0
- package/dist/derive/derive.js +55 -0
- package/dist/derive/extractVars.d.ts +9 -0
- package/dist/derive/extractVars.js +34 -0
- package/dist/derive/index.d.ts +7 -0
- package/dist/derive/index.js +7 -0
- package/dist/derive/indexVars.d.ts +6 -0
- package/dist/derive/indexVars.js +52 -0
- package/dist/derive/utils/constants.d.ts +2 -0
- package/dist/derive/utils/constants.js +2 -0
- package/dist/derive/utils/regex.d.ts +2 -0
- package/dist/derive/utils/regex.js +4 -0
- package/dist/derive/utils/sanitizeVar.d.ts +12 -0
- package/dist/derive/utils/sanitizeVar.js +38 -0
- package/dist/derive/utils/traverseHelpers.d.ts +4 -0
- package/dist/derive/utils/traverseHelpers.js +22 -0
- package/dist/derive/utils/traverseIcu.d.ts +20 -0
- package/dist/derive/utils/traverseIcu.js +49 -0
- package/dist/derive/utils/types.d.ts +23 -0
- package/dist/derive/utils/types.js +1 -0
- package/dist/errors/ApiError.d.ts +7 -0
- package/dist/errors/ApiError.js +33 -0
- package/dist/errors/formattingErrors.d.ts +1 -0
- package/dist/errors/formattingErrors.js +3 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/formatting/custom-formats/CutoffFormat/CutoffFormat.d.ts +59 -0
- package/dist/formatting/custom-formats/CutoffFormat/CutoffFormat.js +147 -0
- package/dist/formatting/custom-formats/CutoffFormat/constants.d.ts +4 -0
- package/dist/formatting/custom-formats/CutoffFormat/constants.js +30 -0
- package/dist/formatting/custom-formats/CutoffFormat/types.d.ts +48 -0
- package/dist/formatting/custom-formats/CutoffFormat/types.js +2 -0
- package/dist/formatting/format.d.ts +1 -0
- package/dist/formatting/format.js +257 -0
- package/dist/id/hashSource.d.ts +25 -0
- package/dist/id/hashSource.js +98 -0
- package/dist/id/hashTemplate.d.ts +4 -0
- package/dist/id/hashTemplate.js +6 -0
- package/dist/id/types.d.ts +7 -0
- package/dist/id/types.js +1 -0
- package/dist/id.d.cts +1 -1
- package/dist/id.d.mts +1 -1
- package/dist/id.d.ts +3 -0
- package/dist/id.js +3 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +1019 -0
- package/dist/index.js +1664 -0
- package/dist/index.mjs +1 -1
- package/dist/internal.cjs +1 -1
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.d.cts +2 -2
- package/dist/internal.d.mts +2 -2
- package/dist/internal.d.ts +19 -0
- package/dist/internal.js +17 -0
- package/dist/internal.mjs +1 -1
- package/dist/internal.mjs.map +1 -1
- package/dist/locales/customLocaleMapping.d.ts +11 -0
- package/dist/locales/customLocaleMapping.js +23 -0
- package/dist/locales/determineLocale.d.ts +1 -0
- package/dist/locales/determineLocale.js +72 -0
- package/dist/locales/getLocaleDirection.d.ts +1 -0
- package/dist/locales/getLocaleDirection.js +89 -0
- package/dist/locales/getLocaleEmoji.d.ts +2 -0
- package/dist/locales/getLocaleEmoji.js +319 -0
- package/dist/locales/getLocaleName.d.ts +1 -0
- package/dist/locales/getLocaleName.js +45 -0
- package/dist/locales/getLocaleProperties.d.ts +32 -0
- package/dist/locales/getLocaleProperties.js +220 -0
- package/dist/locales/getPluralForm.d.ts +9 -0
- package/dist/locales/getPluralForm.js +63 -0
- package/dist/locales/getRegionProperties.d.ts +7 -0
- package/dist/locales/getRegionProperties.js +61 -0
- package/dist/locales/isSameDialect.d.ts +1 -0
- package/dist/locales/isSameDialect.js +41 -0
- package/dist/locales/isSameLanguage.d.ts +1 -0
- package/dist/locales/isSameLanguage.js +20 -0
- package/dist/locales/isSupersetLocale.d.ts +1 -0
- package/dist/locales/isSupersetLocale.js +22 -0
- package/dist/locales/isValidLocale.d.ts +1 -0
- package/dist/locales/isValidLocale.js +75 -0
- package/dist/locales/requiresTranslation.d.ts +1 -0
- package/dist/locales/requiresTranslation.js +32 -0
- package/dist/locales/resolveAliasLocale.d.ts +8 -0
- package/dist/locales/resolveAliasLocale.js +21 -0
- package/dist/locales/resolveCanonicalLocale.d.ts +8 -0
- package/dist/locales/resolveCanonicalLocale.js +13 -0
- package/dist/logging/errors.d.ts +10 -0
- package/dist/logging/errors.js +29 -0
- package/dist/logging/logger.d.ts +121 -0
- package/dist/logging/logger.js +259 -0
- package/dist/logging/warnings.d.ts +2 -0
- package/dist/logging/warnings.js +2 -0
- package/dist/projects/getProjectData.d.ts +1 -0
- package/dist/projects/getProjectData.js +87 -0
- package/dist/settings/plurals.d.ts +3 -0
- package/dist/settings/plurals.js +14 -0
- package/dist/settings/settings.d.ts +2 -0
- package/dist/settings/settings.js +2 -0
- package/dist/settings/settingsUrls.d.ts +3 -0
- package/dist/settings/settingsUrls.js +3 -0
- package/dist/translate/api.d.ts +1 -0
- package/dist/translate/api.js +1 -0
- package/dist/translate/awaitJobs.d.ts +19 -0
- package/dist/translate/awaitJobs.js +112 -0
- package/dist/translate/checkJobStatus.d.ts +8 -0
- package/dist/translate/checkJobStatus.js +55 -0
- package/dist/translate/createBranch.d.ts +10 -0
- package/dist/translate/createBranch.js +53 -0
- package/dist/translate/createTag.d.ts +19 -0
- package/dist/translate/createTag.js +67 -0
- package/dist/translate/downloadFileBatch.d.ts +1 -0
- package/dist/translate/downloadFileBatch.js +77 -0
- package/dist/translate/enqueueFiles.d.ts +8 -0
- package/dist/translate/enqueueFiles.js +96 -0
- package/dist/translate/getOrphanedFiles.d.ts +8 -0
- package/dist/translate/getOrphanedFiles.js +97 -0
- package/dist/translate/processFileMoves.d.ts +25 -0
- package/dist/translate/processFileMoves.js +90 -0
- package/dist/translate/publishFiles.d.ts +17 -0
- package/dist/translate/publishFiles.js +56 -0
- package/dist/translate/queryBranchData.d.ts +3 -0
- package/dist/translate/queryBranchData.js +53 -0
- package/dist/translate/queryFileData.d.ts +42 -0
- package/dist/translate/queryFileData.js +71 -0
- package/dist/translate/querySourceFile.d.ts +1 -0
- package/dist/translate/querySourceFile.js +67 -0
- package/dist/translate/setupProject.d.ts +11 -0
- package/dist/translate/setupProject.js +63 -0
- package/dist/translate/submitUserEditDiffs.d.ts +12 -0
- package/dist/translate/submitUserEditDiffs.js +68 -0
- package/dist/translate/translateMany.d.ts +1 -0
- package/dist/translate/translateMany.js +103 -0
- package/dist/translate/uploadSourceFiles.d.ts +1 -0
- package/dist/translate/uploadSourceFiles.js +87 -0
- package/dist/translate/uploadTranslations.d.ts +1 -0
- package/dist/translate/uploadTranslations.js +101 -0
- package/dist/translate/utils/apiRequest.d.ts +1 -0
- package/dist/translate/utils/apiRequest.js +130 -0
- package/dist/translate/utils/batch.d.ts +52 -0
- package/dist/translate/utils/batch.js +126 -0
- package/dist/translate/utils/fetchWithTimeout.d.ts +1 -0
- package/dist/translate/utils/fetchWithTimeout.js +93 -0
- package/dist/translate/utils/generateRequestHeaders.d.ts +2 -0
- package/dist/translate/utils/generateRequestHeaders.js +26 -0
- package/dist/translate/utils/handleFetchError.d.ts +1 -0
- package/dist/translate/utils/handleFetchError.js +12 -0
- package/dist/translate/utils/validateFileFormatTransform.d.ts +16 -0
- package/dist/translate/utils/validateFileFormatTransform.js +29 -0
- package/dist/translate/utils/validateResponse.d.ts +1 -0
- package/dist/translate/utils/validateResponse.js +72 -0
- package/dist/{types-BsGsgJWF.d.mts → types-AHtYZIP-.d.mts} +34 -11
- package/dist/{types-V5rqd1WR.d.cts → types-Bf8_Apq_.d.cts} +34 -11
- package/dist/types-dir/api/branch.d.ts +10 -0
- package/dist/types-dir/api/branch.js +1 -0
- package/dist/types-dir/api/checkFileTranslations.d.ts +37 -0
- package/dist/types-dir/api/checkFileTranslations.js +1 -0
- package/dist/types-dir/api/downloadFile.d.ts +3 -0
- package/dist/types-dir/api/downloadFile.js +1 -0
- package/dist/types-dir/api/downloadFileBatch.d.ts +35 -0
- package/dist/types-dir/api/downloadFileBatch.js +1 -0
- package/dist/types-dir/api/enqueueEntries.d.ts +21 -0
- package/dist/types-dir/api/enqueueEntries.js +1 -0
- package/dist/types-dir/api/enqueueFiles.d.ts +70 -0
- package/dist/types-dir/api/enqueueFiles.js +1 -0
- package/dist/types-dir/api/entry.d.ts +39 -0
- package/dist/types-dir/api/entry.js +1 -0
- package/dist/types-dir/api/fetchTranslations.d.ts +12 -0
- package/dist/types-dir/api/fetchTranslations.js +1 -0
- package/dist/types-dir/api/file.d.ts +57 -0
- package/dist/types-dir/api/file.js +1 -0
- package/dist/types-dir/api/json.d.ts +5 -0
- package/dist/types-dir/api/json.js +1 -0
- package/dist/types-dir/api/project.d.ts +7 -0
- package/dist/types-dir/api/project.js +1 -0
- package/dist/types-dir/api/translate.d.ts +34 -0
- package/dist/types-dir/api/translate.js +1 -0
- package/dist/types-dir/api/translateMany.d.ts +5 -0
- package/dist/types-dir/api/translateMany.js +1 -0
- package/dist/types-dir/api/translationStatus.d.ts +9 -0
- package/dist/types-dir/api/translationStatus.js +1 -0
- package/dist/types-dir/api/uploadFiles.d.ts +44 -0
- package/dist/types-dir/api/uploadFiles.js +1 -0
- package/dist/types-dir/jsx/content.d.ts +61 -0
- package/dist/types-dir/jsx/content.js +11 -0
- package/dist/types-dir/jsx/variables.d.ts +9 -0
- package/dist/types-dir/jsx/variables.js +1 -0
- package/dist/types-dir/transformations.d.ts +8 -0
- package/dist/types-dir/transformations.js +1 -0
- package/dist/types.d.cts +2 -2
- package/dist/types.d.mts +2 -2
- package/dist/types.d.ts +129 -0
- package/dist/types.js +2 -0
- package/dist/utils/base64.d.ts +2 -0
- package/dist/utils/base64.js +28 -0
- package/dist/utils/isSupportedFileFormatTransform.d.ts +8 -0
- package/dist/utils/isSupportedFileFormatTransform.js +26 -0
- package/dist/utils/isVariable.d.ts +2 -0
- package/dist/utils/isVariable.js +22 -0
- package/dist/utils/minify.d.ts +2 -0
- package/dist/utils/minify.js +10 -0
- package/dist/utils/stableStringify.d.ts +1 -0
- package/dist/utils/stableStringify.js +40 -0
- package/package.json +3 -3
- package/dist/core-7RJsqw6c.mjs.map +0 -1
- package/dist/core-CST4J4WU.cjs.map +0 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { createInvalidCutoffStyleError } from '../../../errors/formattingErrors';
|
|
2
|
+
import { libraryDefaultLocale } from '../../../settings/settings';
|
|
3
|
+
import { DEFAULT_CUTOFF_FORMAT_STYLE, DEFAULT_TERMINATOR_KEY, TERMINATOR_MAP, } from './constants';
|
|
4
|
+
var CutoffFormatConstructor = /** @class */ (function () {
|
|
5
|
+
/**
|
|
6
|
+
* Constructor
|
|
7
|
+
* @param {Intl.LocalesArgument} locales - The locales to use for formatting.
|
|
8
|
+
* @param {CutoffFormatOptions} options - The options for formatting.
|
|
9
|
+
* @param {number} [options.maxChars] - The maximum number of characters to display.
|
|
10
|
+
* - Undefined values are treated as no cutoff.
|
|
11
|
+
* - Negative values follow .slice() behavior and terminator will be added before the value.
|
|
12
|
+
* - 0 will result in an empty string.
|
|
13
|
+
* - If cutoff results in an empty string, no terminator is added.
|
|
14
|
+
* @param {CutoffFormatStyle} [options.style='ellipsis'] - The style of the terminator.
|
|
15
|
+
* @param {string} [options.terminator] - Optional override the terminator to use.
|
|
16
|
+
* @param {string} [options.separator] - Optional override the separator to use between the terminator and the value.
|
|
17
|
+
* - If no terminator is provided, then separator is ignored.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* const format = new CutoffFormat('en', { maxChars: 5 });
|
|
21
|
+
* format.format('Hello, world!'); // 'Hello...'
|
|
22
|
+
*
|
|
23
|
+
* const format = new CutoffFormat('en', { maxChars: -3 });
|
|
24
|
+
* format.format('Hello, world!'); // '...ld!'
|
|
25
|
+
*/
|
|
26
|
+
function CutoffFormatConstructor(locales, options) {
|
|
27
|
+
if (options === void 0) { options = {}; }
|
|
28
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
29
|
+
// Determine locale (this replicates Intl.NumberFormat behavior including silent failure)
|
|
30
|
+
try {
|
|
31
|
+
// Normalize locales to string
|
|
32
|
+
var localesList = !locales
|
|
33
|
+
? [libraryDefaultLocale]
|
|
34
|
+
: Array.isArray(locales)
|
|
35
|
+
? locales.map(function (l) { return String(l); })
|
|
36
|
+
: [String(locales)];
|
|
37
|
+
var canonicalLocales = Intl.getCanonicalLocales(localesList);
|
|
38
|
+
this.locale = canonicalLocales.length
|
|
39
|
+
? canonicalLocales[0]
|
|
40
|
+
: libraryDefaultLocale;
|
|
41
|
+
}
|
|
42
|
+
catch (_h) {
|
|
43
|
+
this.locale = libraryDefaultLocale;
|
|
44
|
+
}
|
|
45
|
+
// Follows Intl.NumberFormat behavior of throwing an error when currency is invalid
|
|
46
|
+
if (!TERMINATOR_MAP[(_a = options.style) !== null && _a !== void 0 ? _a : DEFAULT_CUTOFF_FORMAT_STYLE]) {
|
|
47
|
+
throw new Error(createInvalidCutoffStyleError((_b = options.style) !== null && _b !== void 0 ? _b : DEFAULT_CUTOFF_FORMAT_STYLE));
|
|
48
|
+
}
|
|
49
|
+
// Resolve terminator options.
|
|
50
|
+
var style;
|
|
51
|
+
var presetTerminatorOptions;
|
|
52
|
+
if (options.maxChars !== undefined) {
|
|
53
|
+
style = (_c = options.style) !== null && _c !== void 0 ? _c : DEFAULT_CUTOFF_FORMAT_STYLE;
|
|
54
|
+
// TODO: need more sophisticated locale negotiation if we want to add support for region/script/etc.-specific terminators in the future
|
|
55
|
+
var languageCode = new Intl.Locale(this.locale).language;
|
|
56
|
+
presetTerminatorOptions =
|
|
57
|
+
TERMINATOR_MAP[style][languageCode] ||
|
|
58
|
+
TERMINATOR_MAP[style][DEFAULT_TERMINATOR_KEY];
|
|
59
|
+
}
|
|
60
|
+
var terminator = (_d = options.terminator) !== null && _d !== void 0 ? _d : presetTerminatorOptions === null || presetTerminatorOptions === void 0 ? void 0 : presetTerminatorOptions.terminator;
|
|
61
|
+
var separator = terminator != null
|
|
62
|
+
? ((_e = options.separator) !== null && _e !== void 0 ? _e : presetTerminatorOptions === null || presetTerminatorOptions === void 0 ? void 0 : presetTerminatorOptions.separator)
|
|
63
|
+
: undefined;
|
|
64
|
+
// // Remove terminator and separator if maxChars does have enough space
|
|
65
|
+
this.additionLength = ((_f = terminator === null || terminator === void 0 ? void 0 : terminator.length) !== null && _f !== void 0 ? _f : 0) + ((_g = separator === null || separator === void 0 ? void 0 : separator.length) !== null && _g !== void 0 ? _g : 0);
|
|
66
|
+
if (options.maxChars !== undefined &&
|
|
67
|
+
Math.abs(options.maxChars) < this.additionLength) {
|
|
68
|
+
terminator = undefined;
|
|
69
|
+
separator = undefined;
|
|
70
|
+
}
|
|
71
|
+
this.options = {
|
|
72
|
+
maxChars: options.maxChars,
|
|
73
|
+
style: style,
|
|
74
|
+
terminator: terminator,
|
|
75
|
+
separator: separator,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Format a value according to the cutoff options, returning a formatted string.
|
|
80
|
+
*
|
|
81
|
+
* @param {string} value - The string value to format with cutoff behavior.
|
|
82
|
+
* @returns {string} The formatted string with terminator applied if cutoff occurs.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* const formatter = new CutoffFormatConstructor('en', { maxChars: 8, style: 'ellipsis' });
|
|
86
|
+
* formatter.format('Hello, world!'); // Returns 'Hello, w...'
|
|
87
|
+
*/
|
|
88
|
+
CutoffFormatConstructor.prototype.format = function (value) {
|
|
89
|
+
return this.formatToParts(value).join('');
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Format a value to parts according to the cutoff options, returning an array of string parts.
|
|
93
|
+
* This method breaks down the formatted result into individual components for more granular control.
|
|
94
|
+
*
|
|
95
|
+
* @param {string} value - The string value to format with cutoff behavior.
|
|
96
|
+
* @returns {PrependedCutoffParts | PostpendedCutoffParts} An array of string parts representing the formatted result.
|
|
97
|
+
* - For positive maxChars: [cutoffValue, separator?, terminator?]
|
|
98
|
+
* - For negative maxChars: [terminator?, separator?, cutoffValue]
|
|
99
|
+
* - For no cutoff: [originalValue]
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* const formatter = new CutoffFormatConstructor('en', { maxChars: 5, style: 'ellipsis' });
|
|
103
|
+
* formatter.formatToParts('Hello, world!'); // Returns ['Hello', '...']
|
|
104
|
+
*/
|
|
105
|
+
CutoffFormatConstructor.prototype.formatToParts = function (value) {
|
|
106
|
+
var _a = this.options, maxChars = _a.maxChars, terminator = _a.terminator, separator = _a.separator;
|
|
107
|
+
// Slice our value
|
|
108
|
+
// const additionLength = (terminator?.length ?? 0) + (separator?.length ?? 0);
|
|
109
|
+
var adjustedChars = maxChars === undefined || Math.abs(maxChars) >= value.length
|
|
110
|
+
? maxChars
|
|
111
|
+
: maxChars >= 0
|
|
112
|
+
? Math.max(0, maxChars - this.additionLength)
|
|
113
|
+
: Math.min(0, maxChars + this.additionLength);
|
|
114
|
+
var slicedValue = adjustedChars !== undefined && adjustedChars > -1
|
|
115
|
+
? value.slice(0, adjustedChars)
|
|
116
|
+
: value.slice(adjustedChars);
|
|
117
|
+
// No cutoff, no terminator -> value only
|
|
118
|
+
if (maxChars == null ||
|
|
119
|
+
adjustedChars == null ||
|
|
120
|
+
adjustedChars === 0 ||
|
|
121
|
+
terminator == null ||
|
|
122
|
+
value.length <= Math.abs(maxChars)) {
|
|
123
|
+
return [slicedValue];
|
|
124
|
+
}
|
|
125
|
+
// Postpended cutoff.
|
|
126
|
+
if (adjustedChars > 0) {
|
|
127
|
+
return separator != null
|
|
128
|
+
? [slicedValue, separator, terminator]
|
|
129
|
+
: [slicedValue, terminator];
|
|
130
|
+
}
|
|
131
|
+
// Prepended cutoff.
|
|
132
|
+
else {
|
|
133
|
+
return separator != null
|
|
134
|
+
? [terminator, separator, slicedValue]
|
|
135
|
+
: [terminator, slicedValue];
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Get the resolved options
|
|
140
|
+
* @returns {ResolvedCutoffFormatOptions} The resolved options.
|
|
141
|
+
*/
|
|
142
|
+
CutoffFormatConstructor.prototype.resolvedOptions = function () {
|
|
143
|
+
return this.options;
|
|
144
|
+
};
|
|
145
|
+
return CutoffFormatConstructor;
|
|
146
|
+
}());
|
|
147
|
+
export { CutoffFormatConstructor };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CutoffFormatStyle, ResolvedTerminatorOptions } from './types';
|
|
2
|
+
export declare const DEFAULT_CUTOFF_FORMAT_STYLE: CutoffFormatStyle;
|
|
3
|
+
export declare const DEFAULT_TERMINATOR_KEY = "DEFAULT_TERMINATOR_KEY";
|
|
4
|
+
export declare const TERMINATOR_MAP: Record<CutoffFormatStyle, Record<string | typeof DEFAULT_TERMINATOR_KEY, ResolvedTerminatorOptions>>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
var _a, _b;
|
|
2
|
+
export var DEFAULT_CUTOFF_FORMAT_STYLE = 'ellipsis';
|
|
3
|
+
export var DEFAULT_TERMINATOR_KEY = 'DEFAULT_TERMINATOR_KEY';
|
|
4
|
+
export var TERMINATOR_MAP = {
|
|
5
|
+
ellipsis: (_a = {
|
|
6
|
+
fr: {
|
|
7
|
+
terminator: '…',
|
|
8
|
+
separator: '\u202F',
|
|
9
|
+
},
|
|
10
|
+
zh: {
|
|
11
|
+
terminator: '……',
|
|
12
|
+
separator: undefined,
|
|
13
|
+
},
|
|
14
|
+
ja: {
|
|
15
|
+
terminator: '……',
|
|
16
|
+
separator: undefined,
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
_a[DEFAULT_TERMINATOR_KEY] = {
|
|
20
|
+
terminator: '…',
|
|
21
|
+
separator: undefined,
|
|
22
|
+
},
|
|
23
|
+
_a),
|
|
24
|
+
none: (_b = {},
|
|
25
|
+
_b[DEFAULT_TERMINATOR_KEY] = {
|
|
26
|
+
terminator: undefined,
|
|
27
|
+
separator: undefined,
|
|
28
|
+
},
|
|
29
|
+
_b),
|
|
30
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** Type of terminator */
|
|
2
|
+
export type CutoffFormatStyle = 'none' | 'ellipsis';
|
|
3
|
+
/** Terminator options. */
|
|
4
|
+
export interface TerminatorOptions {
|
|
5
|
+
/** The terminator to use. */
|
|
6
|
+
terminator?: string;
|
|
7
|
+
/** An optional separator between the terminator and the value */
|
|
8
|
+
separator?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Input formatting options (for constructor) */
|
|
11
|
+
export interface CutoffFormatOptions extends TerminatorOptions {
|
|
12
|
+
/** Cutoff length. */
|
|
13
|
+
maxChars?: number;
|
|
14
|
+
/** Type of terminator */
|
|
15
|
+
style?: CutoffFormatStyle;
|
|
16
|
+
}
|
|
17
|
+
/** Resolved terminator options */
|
|
18
|
+
export interface ResolvedTerminatorOptions extends TerminatorOptions {
|
|
19
|
+
terminator: string | undefined;
|
|
20
|
+
separator: string | undefined;
|
|
21
|
+
}
|
|
22
|
+
/** Resolved options (after constructor) */
|
|
23
|
+
export interface ResolvedCutoffFormatOptions extends CutoffFormatOptions, ResolvedTerminatorOptions {
|
|
24
|
+
maxChars: number | undefined;
|
|
25
|
+
style: CutoffFormatStyle | undefined;
|
|
26
|
+
terminator: string | undefined;
|
|
27
|
+
separator: string | undefined;
|
|
28
|
+
}
|
|
29
|
+
/** Prepended cutoff list */
|
|
30
|
+
export type PrependedCutoffParts = [string] | [ResolvedTerminatorOptions['terminator'], string] | [
|
|
31
|
+
ResolvedTerminatorOptions['terminator'],
|
|
32
|
+
ResolvedTerminatorOptions['separator'],
|
|
33
|
+
string
|
|
34
|
+
];
|
|
35
|
+
/** Postpended cutoff list */
|
|
36
|
+
export type PostpendedCutoffParts = [string] | [string, ResolvedTerminatorOptions['terminator']] | [
|
|
37
|
+
string,
|
|
38
|
+
ResolvedTerminatorOptions['separator'],
|
|
39
|
+
ResolvedTerminatorOptions['terminator']
|
|
40
|
+
];
|
|
41
|
+
/**
|
|
42
|
+
* Cutoff Class interface
|
|
43
|
+
*/
|
|
44
|
+
export interface CutoffFormat {
|
|
45
|
+
format: (value: string) => string;
|
|
46
|
+
resolvedOptions: () => ResolvedCutoffFormatOptions;
|
|
47
|
+
formatToParts: (value: string) => PrependedCutoffParts | PostpendedCutoffParts;
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { intlCache } from '../cache/IntlCache';
|
|
13
|
+
import { libraryDefaultLocale } from '../settings/settings';
|
|
14
|
+
import { IntlMessageFormat } from 'intl-messageformat';
|
|
15
|
+
import { formatI18nextWarning, formatJsxWarning } from '../logging/warnings';
|
|
16
|
+
import { formattingLogger } from '../logging/logger';
|
|
17
|
+
/**
|
|
18
|
+
* Formats a string value with cutoff behavior according to the specified locales and options.
|
|
19
|
+
*
|
|
20
|
+
* @param {Object} params - The parameters for the cutoff formatting.
|
|
21
|
+
* @param {string} params.value - The string value to format with cutoff behavior.
|
|
22
|
+
* @param {string | string[]} [params.locales='en'] - The locales to use for formatting.
|
|
23
|
+
* @param {CutoffFormatOptions} [params.options={}] - Additional options for cutoff formatting.
|
|
24
|
+
* @param {number} [params.options.maxChars] - The maximum number of characters to display.
|
|
25
|
+
* @param {CutoffFormatStyle} [params.options.style='ellipsis'] - The style of the terminator.
|
|
26
|
+
* @param {string} [params.options.terminator] - Optional override for the terminator to use.
|
|
27
|
+
* @param {string} [params.options.separator] - Optional override for the separator between terminator and value.
|
|
28
|
+
*
|
|
29
|
+
* @returns {string} The formatted string with terminator applied if cutoff occurs.
|
|
30
|
+
* @internal
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* _formatCutoff({ value: 'Hello, world!', options: { maxChars: 8 } }); // Returns 'Hello, w...'
|
|
34
|
+
*/
|
|
35
|
+
export function _formatCutoff(_a) {
|
|
36
|
+
var value = _a.value, _b = _a.locales, locales = _b === void 0 ? libraryDefaultLocale : _b, _c = _a.options, options = _c === void 0 ? {} : _c;
|
|
37
|
+
return intlCache.get('CutoffFormat', locales, options).format(value);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Formats a message according to the specified locales and options.
|
|
41
|
+
*
|
|
42
|
+
* @param {string} message - The message to format.
|
|
43
|
+
* @param {string | string[]} [locales='en'] - The locales to use for formatting.
|
|
44
|
+
* @param {Record<string, any>} [variables={}] - The variables to use for formatting.
|
|
45
|
+
* @returns {string} The formatted message.
|
|
46
|
+
* @internal
|
|
47
|
+
*
|
|
48
|
+
* Returns an empty string if IntlMessageFormat produces no output.
|
|
49
|
+
* TODO: Add this to custom formats.
|
|
50
|
+
*/
|
|
51
|
+
export function _formatMessageICU(message, locales, variables) {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
if (locales === void 0) { locales = libraryDefaultLocale; }
|
|
54
|
+
if (variables === void 0) { variables = {}; }
|
|
55
|
+
var messageFormat = new IntlMessageFormat(message, locales);
|
|
56
|
+
return (_b = (_a = messageFormat.format(variables)) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Returns the message as-is without any formatting.
|
|
60
|
+
*
|
|
61
|
+
* @param {string} message - The message to return.
|
|
62
|
+
* @returns {string} The original message, unchanged.
|
|
63
|
+
* @internal
|
|
64
|
+
*
|
|
65
|
+
* TODO: Add this to custom formats.
|
|
66
|
+
*/
|
|
67
|
+
export function _formatMessageString(message) {
|
|
68
|
+
return message;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Formats a number according to the specified locales and options.
|
|
72
|
+
*
|
|
73
|
+
* @param {Object} params - The parameters for the number formatting.
|
|
74
|
+
* @param {number} params.value - The number to format.
|
|
75
|
+
* @param {string | string[]} [params.locales=['en']] - The locales to use for formatting.
|
|
76
|
+
* @param {Intl.NumberFormatOptions} [params.options={}] - Additional options for number formatting.
|
|
77
|
+
*
|
|
78
|
+
* @returns {string} The formatted number.
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
export function _formatNum(_a) {
|
|
82
|
+
var value = _a.value, _b = _a.locales, locales = _b === void 0 ? [libraryDefaultLocale] : _b, _c = _a.options, options = _c === void 0 ? {} : _c;
|
|
83
|
+
var res = intlCache
|
|
84
|
+
.get('NumberFormat', locales, __assign({ numberingSystem: 'latn' }, options))
|
|
85
|
+
.format(value);
|
|
86
|
+
return res;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Formats a date according to the specified locales and options.
|
|
90
|
+
*
|
|
91
|
+
* @param {Object} params - The parameters for the date formatting.
|
|
92
|
+
* @param {Date} params.value - The date to format.
|
|
93
|
+
* @param {string | string[]} [params.locales='en'] - The locales to use for formatting.
|
|
94
|
+
* @param {Intl.DateTimeFormatOptions} [params.options={}] - Additional options for date formatting.
|
|
95
|
+
*
|
|
96
|
+
* @returns {string} The formatted date.
|
|
97
|
+
* @internal
|
|
98
|
+
*/
|
|
99
|
+
export function _formatDateTime(_a) {
|
|
100
|
+
var value = _a.value, _b = _a.locales, locales = _b === void 0 ? [libraryDefaultLocale] : _b, _c = _a.options, options = _c === void 0 ? {} : _c;
|
|
101
|
+
return intlCache
|
|
102
|
+
.get('DateTimeFormat', locales, __assign({ calendar: 'gregory', numberingSystem: 'latn' }, options))
|
|
103
|
+
.format(value);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Formats a currency value according to the specified locales, currency, and options.
|
|
107
|
+
*
|
|
108
|
+
* @param {Object} params - The parameters for the currency formatting.
|
|
109
|
+
* @param {number} params.value - The currency value to format.
|
|
110
|
+
* @param {string} params.currency - The currency code (e.g., 'USD').
|
|
111
|
+
* @param {string | string[]} [params.locales=['en']] - The locales to use for formatting.
|
|
112
|
+
* @param {Intl.NumberFormatOptions} [params.options={}] - Additional options for currency formatting.
|
|
113
|
+
*
|
|
114
|
+
* @returns {string} The formatted currency value.
|
|
115
|
+
* @internal
|
|
116
|
+
*/
|
|
117
|
+
export function _formatCurrency(_a) {
|
|
118
|
+
var value = _a.value, _b = _a.locales, locales = _b === void 0 ? [libraryDefaultLocale] : _b, _c = _a.currency, currency = _c === void 0 ? 'USD' : _c, _d = _a.options, options = _d === void 0 ? {} : _d;
|
|
119
|
+
return intlCache
|
|
120
|
+
.get('NumberFormat', locales, __assign({ style: 'currency', currency: currency, numberingSystem: 'latn' }, options))
|
|
121
|
+
.format(value);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Formats a list of items according to the specified locales and options.
|
|
125
|
+
*
|
|
126
|
+
* @param {Object} params - The parameters for the list formatting.
|
|
127
|
+
* @param {Array<string | number>} params.value - The list of items to format.
|
|
128
|
+
* @param {string | string[]} [params.locales=['en']] - The locales to use for formatting.
|
|
129
|
+
* @param {Intl.ListFormatOptions} [params.options={}] - Additional options for list formatting.
|
|
130
|
+
*
|
|
131
|
+
* @returns {string} The formatted list.
|
|
132
|
+
* @internal
|
|
133
|
+
*/
|
|
134
|
+
export function _formatList(_a) {
|
|
135
|
+
var value = _a.value, _b = _a.locales, locales = _b === void 0 ? [libraryDefaultLocale] : _b, _c = _a.options, options = _c === void 0 ? {} : _c;
|
|
136
|
+
return intlCache
|
|
137
|
+
.get('ListFormat', locales, __assign({ type: 'conjunction', style: 'long' }, options))
|
|
138
|
+
.format(value.map(String));
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Formats a list of items according to the specified locales and options.
|
|
142
|
+
* @param {Object} params - The parameters for the list formatting.
|
|
143
|
+
* @param {Array<T>} params.value - The list of items to format.
|
|
144
|
+
* @param {string | string[]} [params.locales=['en']] - The locales to use for formatting.
|
|
145
|
+
* @param {Intl.ListFormatOptions} [params.options={}] - Additional options for list formatting.
|
|
146
|
+
* @returns {Array<T | string>} The formatted list parts.
|
|
147
|
+
* @internal
|
|
148
|
+
*/
|
|
149
|
+
export function _formatListToParts(_a) {
|
|
150
|
+
var value = _a.value, _b = _a.locales, locales = _b === void 0 ? [libraryDefaultLocale] : _b, _c = _a.options, options = _c === void 0 ? {} : _c;
|
|
151
|
+
var formatListParts = intlCache
|
|
152
|
+
.get('ListFormat', locales, __assign({ type: 'conjunction', style: 'long' }, options))
|
|
153
|
+
.formatToParts(value.map(function () { return '1'; }));
|
|
154
|
+
var partIndex = 0;
|
|
155
|
+
return formatListParts.map(function (part) {
|
|
156
|
+
if (part.type === 'element')
|
|
157
|
+
return value[partIndex++];
|
|
158
|
+
return part.value;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Selects the best unit and computes the value for relative time formatting
|
|
163
|
+
* based on the difference between a date and a base date.
|
|
164
|
+
* @param {Date} date - The target date.
|
|
165
|
+
* @param {Date} baseDate - The base date to compute relative time from. Must be provided by the caller for hydration safety.
|
|
166
|
+
* @returns {{ value: number, unit: Intl.RelativeTimeFormatUnit }} The computed value and unit.
|
|
167
|
+
* @internal
|
|
168
|
+
*/
|
|
169
|
+
export function _selectRelativeTimeUnit(date, baseDate) {
|
|
170
|
+
var now = baseDate.getTime();
|
|
171
|
+
var diffMs = date.getTime() - now;
|
|
172
|
+
var absDiffMs = Math.abs(diffMs);
|
|
173
|
+
var sign = diffMs < 0 ? -1 : 1;
|
|
174
|
+
// Use Math.floor to avoid confusing jumps near boundaries
|
|
175
|
+
// (e.g. 3.5 days rounding to "1 week ago" instead of "3 days ago")
|
|
176
|
+
var seconds = Math.floor(absDiffMs / 1000);
|
|
177
|
+
var minutes = Math.floor(absDiffMs / (1000 * 60));
|
|
178
|
+
var hours = Math.floor(absDiffMs / (1000 * 60 * 60));
|
|
179
|
+
var days = Math.floor(absDiffMs / (1000 * 60 * 60 * 24));
|
|
180
|
+
var weeks = Math.floor(absDiffMs / (1000 * 60 * 60 * 24 * 7));
|
|
181
|
+
var months = Math.floor(absDiffMs / (1000 * 60 * 60 * 24 * 30));
|
|
182
|
+
var years = Math.floor(absDiffMs / (1000 * 60 * 60 * 24 * 365));
|
|
183
|
+
if (seconds < 60)
|
|
184
|
+
return { value: sign * seconds, unit: 'second' };
|
|
185
|
+
if (minutes < 60)
|
|
186
|
+
return { value: sign * minutes, unit: 'minute' };
|
|
187
|
+
if (hours < 24)
|
|
188
|
+
return { value: sign * hours, unit: 'hour' };
|
|
189
|
+
if (days < 7)
|
|
190
|
+
return { value: sign * days, unit: 'day' };
|
|
191
|
+
if (days < 28)
|
|
192
|
+
return { value: sign * weeks, unit: 'week' };
|
|
193
|
+
if (months < 1)
|
|
194
|
+
return { value: sign * weeks, unit: 'week' };
|
|
195
|
+
if (months < 12)
|
|
196
|
+
return { value: sign * months, unit: 'month' };
|
|
197
|
+
if (years < 1)
|
|
198
|
+
return { value: sign * months, unit: 'month' };
|
|
199
|
+
return { value: sign * years, unit: 'year' };
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Formats a relative time from a Date, automatically selecting the best unit.
|
|
203
|
+
* @internal
|
|
204
|
+
*/
|
|
205
|
+
export function _formatRelativeTimeFromDate(_a) {
|
|
206
|
+
var date = _a.date, baseDate = _a.baseDate, _b = _a.locales, locales = _b === void 0 ? [libraryDefaultLocale] : _b, _c = _a.options, options = _c === void 0 ? {} : _c;
|
|
207
|
+
var _d = _selectRelativeTimeUnit(date, baseDate), value = _d.value, unit = _d.unit;
|
|
208
|
+
return _formatRelativeTime({ value: value, unit: unit, locales: locales, options: options });
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Formats a relative time value according to the specified locales and options.
|
|
212
|
+
*
|
|
213
|
+
* @param {Object} params - The parameters for the relative time formatting.
|
|
214
|
+
* @param {number} params.value - The relative time value to format.
|
|
215
|
+
* @param {Intl.RelativeTimeFormatUnit} params.unit - The unit of time (e.g., 'second', 'minute', 'hour', 'day', 'week', 'month', 'year').
|
|
216
|
+
* @param {string | string[]} [params.locales=['en']] - The locales to use for formatting.
|
|
217
|
+
* @param {Intl.RelativeTimeFormatOptions} [params.options={}] - Additional options for relative time formatting.
|
|
218
|
+
*
|
|
219
|
+
* @returns {string} The formatted relative time string.
|
|
220
|
+
* @internal
|
|
221
|
+
*/
|
|
222
|
+
export function _formatRelativeTime(_a) {
|
|
223
|
+
var value = _a.value, unit = _a.unit, _b = _a.locales, locales = _b === void 0 ? [libraryDefaultLocale] : _b, _c = _a.options, options = _c === void 0 ? {} : _c;
|
|
224
|
+
return intlCache
|
|
225
|
+
.get('RelativeTimeFormat', locales, __assign({ style: 'long', numeric: 'auto' }, options))
|
|
226
|
+
.format(value, unit);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* @experimental This function is not currently supported but will be implemented in a future version.
|
|
230
|
+
* Use {@link _formatMessageICU} for current ICU message format support.
|
|
231
|
+
* Formats an I18next message according to the specified locales and options.
|
|
232
|
+
*
|
|
233
|
+
* @param message - The I18next message to format.
|
|
234
|
+
* @param variables - The variables to use for formatting.
|
|
235
|
+
* @returns The formatted I18next message.
|
|
236
|
+
* @internal
|
|
237
|
+
*/
|
|
238
|
+
export function _formatI18next(message, _variables) {
|
|
239
|
+
if (_variables === void 0) { _variables = {}; }
|
|
240
|
+
formattingLogger.warn(formatI18nextWarning);
|
|
241
|
+
return message;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* @experimental This function is not currently supported but will be implemented in a future version.
|
|
245
|
+
* Use {@link _formatMessageICU} for current ICU message format support.
|
|
246
|
+
* Formats a JSX message according to the specified locales and options.
|
|
247
|
+
*
|
|
248
|
+
* @param message - The JSX message to format.
|
|
249
|
+
* @param variables - The variables to use for formatting.
|
|
250
|
+
* @returns The formatted JSX message.
|
|
251
|
+
* @internal
|
|
252
|
+
*/
|
|
253
|
+
export function _formatJsx(message, _variables) {
|
|
254
|
+
if (_variables === void 0) { _variables = {}; }
|
|
255
|
+
formattingLogger.warn(formatJsxWarning);
|
|
256
|
+
return message;
|
|
257
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { JsxChildren } from '../types';
|
|
2
|
+
import { HashMetadata } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Calculates a unique hash for a given string using SHA-256.
|
|
5
|
+
*
|
|
6
|
+
* First 16 characters of hash, hex encoded.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} string - The string to be hashed.
|
|
9
|
+
* @returns {string} The resulting hash as a hexadecimal string.
|
|
10
|
+
*/
|
|
11
|
+
export declare function hashString(string: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Calculates a unique ID for the given children objects by hashing their sanitized JSON string representation.
|
|
14
|
+
*
|
|
15
|
+
* @param {any} childrenAsObjects - The children objects to be hashed.
|
|
16
|
+
* @param {string} [context] - The context for the children.
|
|
17
|
+
* @param {string} [id] - The ID for the JSX children object.
|
|
18
|
+
* @param {number} [maxChars] - The maxChars limit for the JSX children object.
|
|
19
|
+
* @param {string} [dataFormat] - The data format of the sources.
|
|
20
|
+
* @param {function} [hashFunction] - Custom hash function.
|
|
21
|
+
* @returns {string} - The unique hash of the children.
|
|
22
|
+
*/
|
|
23
|
+
export declare function hashSource({ source, context, id, maxChars, dataFormat, }: {
|
|
24
|
+
source: JsxChildren | string;
|
|
25
|
+
} & HashMetadata, hashFunction?: (string: string) => string): string;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Functions provided to other GT libraries
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
import { stableStringify as stringify } from '../utils/stableStringify';
|
|
14
|
+
import { sha256 } from '@noble/hashes/sha2.js';
|
|
15
|
+
import { bytesToHex, utf8ToBytes } from '@noble/hashes/utils.js';
|
|
16
|
+
import isVariable from '../utils/isVariable';
|
|
17
|
+
// ----- FUNCTIONS ----- //
|
|
18
|
+
/**
|
|
19
|
+
* Calculates a unique hash for a given string using SHA-256.
|
|
20
|
+
*
|
|
21
|
+
* First 16 characters of hash, hex encoded.
|
|
22
|
+
*
|
|
23
|
+
* @param {string} string - The string to be hashed.
|
|
24
|
+
* @returns {string} The resulting hash as a hexadecimal string.
|
|
25
|
+
*/
|
|
26
|
+
export function hashString(string) {
|
|
27
|
+
return bytesToHex(sha256(utf8ToBytes(string))).slice(0, 16);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Calculates a unique ID for the given children objects by hashing their sanitized JSON string representation.
|
|
31
|
+
*
|
|
32
|
+
* @param {any} childrenAsObjects - The children objects to be hashed.
|
|
33
|
+
* @param {string} [context] - The context for the children.
|
|
34
|
+
* @param {string} [id] - The ID for the JSX children object.
|
|
35
|
+
* @param {number} [maxChars] - The maxChars limit for the JSX children object.
|
|
36
|
+
* @param {string} [dataFormat] - The data format of the sources.
|
|
37
|
+
* @param {function} [hashFunction] - Custom hash function.
|
|
38
|
+
* @returns {string} - The unique hash of the children.
|
|
39
|
+
*/
|
|
40
|
+
export function hashSource(_a, hashFunction) {
|
|
41
|
+
var source = _a.source, context = _a.context, id = _a.id, maxChars = _a.maxChars, dataFormat = _a.dataFormat;
|
|
42
|
+
if (hashFunction === void 0) { hashFunction = hashString; }
|
|
43
|
+
var sanitizedSource;
|
|
44
|
+
if (dataFormat === 'JSX') {
|
|
45
|
+
sanitizedSource = sanitizeJsxChildren(source);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
sanitizedSource = source;
|
|
49
|
+
}
|
|
50
|
+
var sanitizedData = __assign(__assign(__assign(__assign({ source: sanitizedSource }, (id && { id: id })), (context && { context: context })), (maxChars != null && { maxChars: Math.abs(maxChars) })), (dataFormat && { dataFormat: dataFormat }));
|
|
51
|
+
var stringifiedData = stringify(sanitizedData);
|
|
52
|
+
return hashFunction(stringifiedData);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Sanitizes a child object by removing the data-_gt attribute and its branches.
|
|
56
|
+
*
|
|
57
|
+
* @param child - The child object to sanitize.
|
|
58
|
+
* @returns The sanitized child object.
|
|
59
|
+
*
|
|
60
|
+
*/
|
|
61
|
+
var sanitizeChild = function (child) {
|
|
62
|
+
if (child && typeof child === 'object') {
|
|
63
|
+
var newChild = {};
|
|
64
|
+
if ('c' in child && child.c) {
|
|
65
|
+
newChild.c = sanitizeJsxChildren(child.c);
|
|
66
|
+
}
|
|
67
|
+
if ('d' in child) {
|
|
68
|
+
var generaltranslation = child === null || child === void 0 ? void 0 : child.d;
|
|
69
|
+
if (generaltranslation === null || generaltranslation === void 0 ? void 0 : generaltranslation.b) {
|
|
70
|
+
// The only thing that prevents sanitizeJsx from being stable is
|
|
71
|
+
// the order of the keys in the branches object.
|
|
72
|
+
// We don't sort them because stable-stringify sorts them anyways
|
|
73
|
+
newChild.b = Object.fromEntries(Object.entries(generaltranslation.b).map(function (_a) {
|
|
74
|
+
var key = _a[0], value = _a[1];
|
|
75
|
+
return [
|
|
76
|
+
key,
|
|
77
|
+
sanitizeJsxChildren(value),
|
|
78
|
+
];
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
if (generaltranslation === null || generaltranslation === void 0 ? void 0 : generaltranslation.t) {
|
|
82
|
+
newChild.t = generaltranslation.t;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (isVariable(child)) {
|
|
86
|
+
return __assign({ k: child.k }, (child.v && {
|
|
87
|
+
v: child.v,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
return newChild;
|
|
91
|
+
}
|
|
92
|
+
return child;
|
|
93
|
+
};
|
|
94
|
+
function sanitizeJsxChildren(childrenAsObjects) {
|
|
95
|
+
return Array.isArray(childrenAsObjects)
|
|
96
|
+
? childrenAsObjects.map(sanitizeChild)
|
|
97
|
+
: sanitizeChild(childrenAsObjects);
|
|
98
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { hashString } from './hashSource';
|
|
2
|
+
import { stableStringify as stringify } from '../utils/stableStringify';
|
|
3
|
+
export default function hashTemplate(template, hashFunction) {
|
|
4
|
+
if (hashFunction === void 0) { hashFunction = hashString; }
|
|
5
|
+
return hashFunction(stringify(template));
|
|
6
|
+
}
|
package/dist/id/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/id.d.cts
CHANGED
package/dist/id.d.mts
CHANGED
package/dist/id.d.ts
ADDED