@stringpush/runtime-core 0.1.0
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/dist/index.d.cts +170 -0
- package/dist/index.d.ts +170 -0
- package/dist/index.mjs +413 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.umd.cjs +481 -0
- package/dist/index.umd.cjs.map +1 -0
- package/fixtures/README.md +50 -0
- package/fixtures/bundle.schema.json +11 -0
- package/fixtures/bundles/en.1.json +6 -0
- package/fixtures/bundles/fr.1.json +6 -0
- package/fixtures/manifest.schema.json +50 -0
- package/fixtures/manifest.staging.json +17 -0
- package/package.json +48 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime-core public types — shared by @stringpush/sdk and future framework adapters (M14-CORE-01).
|
|
3
|
+
*
|
|
4
|
+
* Intent: no overlay/edit fields; adapters extend this shape in their own packages.
|
|
5
|
+
*/
|
|
6
|
+
type Environment = "dev" | "staging" | "production";
|
|
7
|
+
type ManifestLocaleEntry = {
|
|
8
|
+
version: number;
|
|
9
|
+
url: string;
|
|
10
|
+
contentHash: string;
|
|
11
|
+
};
|
|
12
|
+
/** Manifest returned by `GET /v1/applications/:id/manifest`. */
|
|
13
|
+
type TranslationManifest = {
|
|
14
|
+
projectId: string;
|
|
15
|
+
applicationId: string;
|
|
16
|
+
environment: Environment;
|
|
17
|
+
locales: Record<string, ManifestLocaleEntry>;
|
|
18
|
+
};
|
|
19
|
+
type RetryOptions = {
|
|
20
|
+
maxAttempts?: number;
|
|
21
|
+
initialDelayMs?: number;
|
|
22
|
+
maxDelayMs?: number;
|
|
23
|
+
};
|
|
24
|
+
type ReportUsageOptions = boolean | {
|
|
25
|
+
storageKey?: string;
|
|
26
|
+
};
|
|
27
|
+
type RuntimeInitOptions = {
|
|
28
|
+
/** SDK install target (application id from admin). */
|
|
29
|
+
applicationId: string;
|
|
30
|
+
environment: Environment;
|
|
31
|
+
locale: string;
|
|
32
|
+
/** Runtime API key (`trt_…`). */
|
|
33
|
+
apiKey: string;
|
|
34
|
+
/** API origin, e.g. `https://api.example.com` (defaults to `window.location.origin` in browsers). */
|
|
35
|
+
apiBaseUrl?: string;
|
|
36
|
+
/** Sent as `Origin` for runtime key allowlist checks (defaults to `window.location.origin`). */
|
|
37
|
+
origin?: string;
|
|
38
|
+
fetch?: typeof fetch;
|
|
39
|
+
retry?: RetryOptions;
|
|
40
|
+
onLocaleChange?: (locale: string) => void;
|
|
41
|
+
onTranslationsUpdated?: () => void;
|
|
42
|
+
/**
|
|
43
|
+
* When a key is missing from the CDN catalog. Bundles already embed `default_message`
|
|
44
|
+
* for keys without a published value; use `default_message` + `defaultMessages` for
|
|
45
|
+
* keys not present in the bundle at all.
|
|
46
|
+
*/
|
|
47
|
+
missingKeyFallback?: MissingKeyFallback;
|
|
48
|
+
/** Lookup for `missingKeyFallback: "default_message"` (keys not in the bundle). */
|
|
49
|
+
defaultMessages?: Record<string, string>;
|
|
50
|
+
/**
|
|
51
|
+
* When enabled, sends an anonymous MAU beacon after init (`POST /v1/usage/mau`).
|
|
52
|
+
* Intent: counts unique visitors per org/month via SHA-256 hash only — no PII leaves the client.
|
|
53
|
+
*/
|
|
54
|
+
reportUsage?: ReportUsageOptions;
|
|
55
|
+
};
|
|
56
|
+
type TranslationCatalog = Record<string, string>;
|
|
57
|
+
/** How `t()` behaves when a key is absent from the loaded catalog. */
|
|
58
|
+
type MissingKeyFallback = "key" | "default_message" | "empty";
|
|
59
|
+
/** Values passed to `t(key, values)` for ICU interpolation and plurals. */
|
|
60
|
+
type TranslateValues = Record<string, unknown>;
|
|
61
|
+
|
|
62
|
+
type SdkRuntime = {
|
|
63
|
+
options: RuntimeInitOptions | null;
|
|
64
|
+
manifest: TranslationManifest | null;
|
|
65
|
+
catalog: TranslationCatalog;
|
|
66
|
+
locale: string;
|
|
67
|
+
};
|
|
68
|
+
declare function getRuntime(): SdkRuntime;
|
|
69
|
+
declare function resetRuntime(): void;
|
|
70
|
+
declare function assertInitialized(): RuntimeInitOptions;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Loads manifest + active locale bundle into memory and optionally reports MAU.
|
|
74
|
+
*/
|
|
75
|
+
declare function initializeRuntime(options: RuntimeInitOptions): Promise<void>;
|
|
76
|
+
declare function destroyRuntime(): void;
|
|
77
|
+
declare function getRuntimeLocale(): string;
|
|
78
|
+
/**
|
|
79
|
+
* Switch active locale and reload its bundle from the manifest.
|
|
80
|
+
*/
|
|
81
|
+
declare function changeLocale(locale: string): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Translate a key using the loaded catalog and ICU MessageFormat.
|
|
84
|
+
*/
|
|
85
|
+
declare function translateKey(key: string, values?: TranslateValues): string;
|
|
86
|
+
|
|
87
|
+
type FetchBundleOptions = {
|
|
88
|
+
/** When set, a 304 response returns this catalog instead of `{}`. */
|
|
89
|
+
fallbackCatalog?: TranslationCatalog;
|
|
90
|
+
cache?: RequestCache;
|
|
91
|
+
};
|
|
92
|
+
declare function fetchManifest(options: RuntimeInitOptions, fetchFn: typeof fetch): Promise<TranslationManifest>;
|
|
93
|
+
declare function fetchBundle(options: RuntimeInitOptions, manifest: TranslationManifest, locale: string, fetchFn: typeof fetch, bundleOptions?: FetchBundleOptions): Promise<TranslationCatalog>;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Resilient fetch for manifest and bundle loads.
|
|
97
|
+
*
|
|
98
|
+
* Intent: retry network errors and 5xx only; 4xx fail fast so misconfiguration surfaces clearly.
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Fetches with exponential backoff on network errors and 5xx responses.
|
|
103
|
+
*/
|
|
104
|
+
declare function fetchWithRetry(input: RequestInfo | URL, init: RequestInit | undefined, fetchFn: typeof fetch, retry?: RetryOptions): Promise<Response>;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* URL builders and runtime auth headers for API delivery routes.
|
|
108
|
+
*
|
|
109
|
+
* Intent: resolve relative bundle paths from manifest against `apiBaseUrl`; set Origin for allowlist.
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
declare function resolveApiBaseUrl(apiBaseUrl: string | undefined): string;
|
|
113
|
+
declare function resolveRequestOrigin(origin: string | undefined): string | undefined;
|
|
114
|
+
declare function buildManifestUrl(apiBaseUrl: string, applicationId: string, environment: Environment): string;
|
|
115
|
+
declare function resolveBundleUrl(apiBaseUrl: string, bundlePath: string): string;
|
|
116
|
+
/** True when the manifest points at a CDN (or BYO) origin separate from the API. */
|
|
117
|
+
declare function isCrossOriginBundleUrl(apiBaseUrl: string, bundleUrl: string): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Bundle fetch options: runtime auth only when bundles are served from the API origin.
|
|
120
|
+
*
|
|
121
|
+
* Intent: CDN bundles are public immutable JSON — sending Authorization triggers CORS
|
|
122
|
+
* preflight and wrongly treats the delivery plane like the control plane.
|
|
123
|
+
*/
|
|
124
|
+
declare function bundleFetchInit(options: RuntimeInitOptions, apiBaseUrl: string, resolvedBundleUrl: string): RequestInit;
|
|
125
|
+
declare function runtimeFetchInit(options: RuntimeInitOptions): RequestInit;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Formats a catalog template with optional ICU values for the active locale.
|
|
129
|
+
*/
|
|
130
|
+
declare function formatMessage(template: string, locale: string, values?: Record<string, unknown>): string;
|
|
131
|
+
/**
|
|
132
|
+
* Resolves the message template for a key before ICU formatting.
|
|
133
|
+
*/
|
|
134
|
+
declare function resolveTemplate(key: string, catalog: TranslationCatalog, options: Pick<RuntimeInitOptions, "missingKeyFallback" | "defaultMessages">): string;
|
|
135
|
+
|
|
136
|
+
declare function valueVersionKey(keyPath: string, localeCode: string): string;
|
|
137
|
+
declare function getRecordedVersion(keyPath: string, localeCode: string): number | undefined;
|
|
138
|
+
declare function shouldApplyTranslationUpdate(keyPath: string, localeCode: string, version: number): boolean;
|
|
139
|
+
declare function recordTranslationVersion(keyPath: string, localeCode: string, version: number): void;
|
|
140
|
+
declare function clearCatalogVersions(): void;
|
|
141
|
+
|
|
142
|
+
declare function patchCatalogEntry(keyPath: string, localeCode: string, value: string, version?: number): boolean;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Reloads manifest and the active locale bundle from the API/CDN.
|
|
146
|
+
*/
|
|
147
|
+
declare function reloadManifestAndActiveLocale(): Promise<boolean>;
|
|
148
|
+
/**
|
|
149
|
+
* When `bundle.published` reports a newer bundle for the active locale, refetch manifest + bundle.
|
|
150
|
+
*/
|
|
151
|
+
declare function reloadIfBundlePublishedNewer(releases: Array<{
|
|
152
|
+
localeCode: string;
|
|
153
|
+
bundleVersion: number;
|
|
154
|
+
}>): Promise<boolean>;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Sends one MAU ping for the current calendar month (idempotent server-side per visitor hash).
|
|
158
|
+
*/
|
|
159
|
+
declare function reportUsageBeacon(options: RuntimeInitOptions): void;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Anonymous visitor id for MAU beacons (M6-MAU-01).
|
|
163
|
+
*
|
|
164
|
+
* Intent: stable random id in localStorage; only SHA-256 hash is sent to the API.
|
|
165
|
+
*/
|
|
166
|
+
declare const DEFAULT_VISITOR_STORAGE_KEY = "@stringpush/sdk/visitor-id";
|
|
167
|
+
declare function getOrCreateVisitorId(storageKey?: string): string | null;
|
|
168
|
+
declare function hashVisitorId(visitorId: string): Promise<string>;
|
|
169
|
+
|
|
170
|
+
export { DEFAULT_VISITOR_STORAGE_KEY, type Environment, type FetchBundleOptions, type ManifestLocaleEntry, type MissingKeyFallback, type ReportUsageOptions, type RetryOptions, type RuntimeInitOptions, type SdkRuntime, type TranslateValues, type TranslationCatalog, type TranslationManifest, assertInitialized, buildManifestUrl, bundleFetchInit, changeLocale, clearCatalogVersions, destroyRuntime, fetchBundle, fetchManifest, fetchWithRetry, formatMessage, getOrCreateVisitorId, getRecordedVersion, getRuntime, getRuntimeLocale, hashVisitorId, initializeRuntime, isCrossOriginBundleUrl, patchCatalogEntry, recordTranslationVersion, reloadIfBundlePublishedNewer, reloadManifestAndActiveLocale, reportUsageBeacon, resetRuntime, resolveApiBaseUrl, resolveBundleUrl, resolveRequestOrigin, resolveTemplate, runtimeFetchInit, shouldApplyTranslationUpdate, translateKey, valueVersionKey };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime-core public types — shared by @stringpush/sdk and future framework adapters (M14-CORE-01).
|
|
3
|
+
*
|
|
4
|
+
* Intent: no overlay/edit fields; adapters extend this shape in their own packages.
|
|
5
|
+
*/
|
|
6
|
+
type Environment = "dev" | "staging" | "production";
|
|
7
|
+
type ManifestLocaleEntry = {
|
|
8
|
+
version: number;
|
|
9
|
+
url: string;
|
|
10
|
+
contentHash: string;
|
|
11
|
+
};
|
|
12
|
+
/** Manifest returned by `GET /v1/applications/:id/manifest`. */
|
|
13
|
+
type TranslationManifest = {
|
|
14
|
+
projectId: string;
|
|
15
|
+
applicationId: string;
|
|
16
|
+
environment: Environment;
|
|
17
|
+
locales: Record<string, ManifestLocaleEntry>;
|
|
18
|
+
};
|
|
19
|
+
type RetryOptions = {
|
|
20
|
+
maxAttempts?: number;
|
|
21
|
+
initialDelayMs?: number;
|
|
22
|
+
maxDelayMs?: number;
|
|
23
|
+
};
|
|
24
|
+
type ReportUsageOptions = boolean | {
|
|
25
|
+
storageKey?: string;
|
|
26
|
+
};
|
|
27
|
+
type RuntimeInitOptions = {
|
|
28
|
+
/** SDK install target (application id from admin). */
|
|
29
|
+
applicationId: string;
|
|
30
|
+
environment: Environment;
|
|
31
|
+
locale: string;
|
|
32
|
+
/** Runtime API key (`trt_…`). */
|
|
33
|
+
apiKey: string;
|
|
34
|
+
/** API origin, e.g. `https://api.example.com` (defaults to `window.location.origin` in browsers). */
|
|
35
|
+
apiBaseUrl?: string;
|
|
36
|
+
/** Sent as `Origin` for runtime key allowlist checks (defaults to `window.location.origin`). */
|
|
37
|
+
origin?: string;
|
|
38
|
+
fetch?: typeof fetch;
|
|
39
|
+
retry?: RetryOptions;
|
|
40
|
+
onLocaleChange?: (locale: string) => void;
|
|
41
|
+
onTranslationsUpdated?: () => void;
|
|
42
|
+
/**
|
|
43
|
+
* When a key is missing from the CDN catalog. Bundles already embed `default_message`
|
|
44
|
+
* for keys without a published value; use `default_message` + `defaultMessages` for
|
|
45
|
+
* keys not present in the bundle at all.
|
|
46
|
+
*/
|
|
47
|
+
missingKeyFallback?: MissingKeyFallback;
|
|
48
|
+
/** Lookup for `missingKeyFallback: "default_message"` (keys not in the bundle). */
|
|
49
|
+
defaultMessages?: Record<string, string>;
|
|
50
|
+
/**
|
|
51
|
+
* When enabled, sends an anonymous MAU beacon after init (`POST /v1/usage/mau`).
|
|
52
|
+
* Intent: counts unique visitors per org/month via SHA-256 hash only — no PII leaves the client.
|
|
53
|
+
*/
|
|
54
|
+
reportUsage?: ReportUsageOptions;
|
|
55
|
+
};
|
|
56
|
+
type TranslationCatalog = Record<string, string>;
|
|
57
|
+
/** How `t()` behaves when a key is absent from the loaded catalog. */
|
|
58
|
+
type MissingKeyFallback = "key" | "default_message" | "empty";
|
|
59
|
+
/** Values passed to `t(key, values)` for ICU interpolation and plurals. */
|
|
60
|
+
type TranslateValues = Record<string, unknown>;
|
|
61
|
+
|
|
62
|
+
type SdkRuntime = {
|
|
63
|
+
options: RuntimeInitOptions | null;
|
|
64
|
+
manifest: TranslationManifest | null;
|
|
65
|
+
catalog: TranslationCatalog;
|
|
66
|
+
locale: string;
|
|
67
|
+
};
|
|
68
|
+
declare function getRuntime(): SdkRuntime;
|
|
69
|
+
declare function resetRuntime(): void;
|
|
70
|
+
declare function assertInitialized(): RuntimeInitOptions;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Loads manifest + active locale bundle into memory and optionally reports MAU.
|
|
74
|
+
*/
|
|
75
|
+
declare function initializeRuntime(options: RuntimeInitOptions): Promise<void>;
|
|
76
|
+
declare function destroyRuntime(): void;
|
|
77
|
+
declare function getRuntimeLocale(): string;
|
|
78
|
+
/**
|
|
79
|
+
* Switch active locale and reload its bundle from the manifest.
|
|
80
|
+
*/
|
|
81
|
+
declare function changeLocale(locale: string): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Translate a key using the loaded catalog and ICU MessageFormat.
|
|
84
|
+
*/
|
|
85
|
+
declare function translateKey(key: string, values?: TranslateValues): string;
|
|
86
|
+
|
|
87
|
+
type FetchBundleOptions = {
|
|
88
|
+
/** When set, a 304 response returns this catalog instead of `{}`. */
|
|
89
|
+
fallbackCatalog?: TranslationCatalog;
|
|
90
|
+
cache?: RequestCache;
|
|
91
|
+
};
|
|
92
|
+
declare function fetchManifest(options: RuntimeInitOptions, fetchFn: typeof fetch): Promise<TranslationManifest>;
|
|
93
|
+
declare function fetchBundle(options: RuntimeInitOptions, manifest: TranslationManifest, locale: string, fetchFn: typeof fetch, bundleOptions?: FetchBundleOptions): Promise<TranslationCatalog>;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Resilient fetch for manifest and bundle loads.
|
|
97
|
+
*
|
|
98
|
+
* Intent: retry network errors and 5xx only; 4xx fail fast so misconfiguration surfaces clearly.
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Fetches with exponential backoff on network errors and 5xx responses.
|
|
103
|
+
*/
|
|
104
|
+
declare function fetchWithRetry(input: RequestInfo | URL, init: RequestInit | undefined, fetchFn: typeof fetch, retry?: RetryOptions): Promise<Response>;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* URL builders and runtime auth headers for API delivery routes.
|
|
108
|
+
*
|
|
109
|
+
* Intent: resolve relative bundle paths from manifest against `apiBaseUrl`; set Origin for allowlist.
|
|
110
|
+
*/
|
|
111
|
+
|
|
112
|
+
declare function resolveApiBaseUrl(apiBaseUrl: string | undefined): string;
|
|
113
|
+
declare function resolveRequestOrigin(origin: string | undefined): string | undefined;
|
|
114
|
+
declare function buildManifestUrl(apiBaseUrl: string, applicationId: string, environment: Environment): string;
|
|
115
|
+
declare function resolveBundleUrl(apiBaseUrl: string, bundlePath: string): string;
|
|
116
|
+
/** True when the manifest points at a CDN (or BYO) origin separate from the API. */
|
|
117
|
+
declare function isCrossOriginBundleUrl(apiBaseUrl: string, bundleUrl: string): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Bundle fetch options: runtime auth only when bundles are served from the API origin.
|
|
120
|
+
*
|
|
121
|
+
* Intent: CDN bundles are public immutable JSON — sending Authorization triggers CORS
|
|
122
|
+
* preflight and wrongly treats the delivery plane like the control plane.
|
|
123
|
+
*/
|
|
124
|
+
declare function bundleFetchInit(options: RuntimeInitOptions, apiBaseUrl: string, resolvedBundleUrl: string): RequestInit;
|
|
125
|
+
declare function runtimeFetchInit(options: RuntimeInitOptions): RequestInit;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Formats a catalog template with optional ICU values for the active locale.
|
|
129
|
+
*/
|
|
130
|
+
declare function formatMessage(template: string, locale: string, values?: Record<string, unknown>): string;
|
|
131
|
+
/**
|
|
132
|
+
* Resolves the message template for a key before ICU formatting.
|
|
133
|
+
*/
|
|
134
|
+
declare function resolveTemplate(key: string, catalog: TranslationCatalog, options: Pick<RuntimeInitOptions, "missingKeyFallback" | "defaultMessages">): string;
|
|
135
|
+
|
|
136
|
+
declare function valueVersionKey(keyPath: string, localeCode: string): string;
|
|
137
|
+
declare function getRecordedVersion(keyPath: string, localeCode: string): number | undefined;
|
|
138
|
+
declare function shouldApplyTranslationUpdate(keyPath: string, localeCode: string, version: number): boolean;
|
|
139
|
+
declare function recordTranslationVersion(keyPath: string, localeCode: string, version: number): void;
|
|
140
|
+
declare function clearCatalogVersions(): void;
|
|
141
|
+
|
|
142
|
+
declare function patchCatalogEntry(keyPath: string, localeCode: string, value: string, version?: number): boolean;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Reloads manifest and the active locale bundle from the API/CDN.
|
|
146
|
+
*/
|
|
147
|
+
declare function reloadManifestAndActiveLocale(): Promise<boolean>;
|
|
148
|
+
/**
|
|
149
|
+
* When `bundle.published` reports a newer bundle for the active locale, refetch manifest + bundle.
|
|
150
|
+
*/
|
|
151
|
+
declare function reloadIfBundlePublishedNewer(releases: Array<{
|
|
152
|
+
localeCode: string;
|
|
153
|
+
bundleVersion: number;
|
|
154
|
+
}>): Promise<boolean>;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Sends one MAU ping for the current calendar month (idempotent server-side per visitor hash).
|
|
158
|
+
*/
|
|
159
|
+
declare function reportUsageBeacon(options: RuntimeInitOptions): void;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Anonymous visitor id for MAU beacons (M6-MAU-01).
|
|
163
|
+
*
|
|
164
|
+
* Intent: stable random id in localStorage; only SHA-256 hash is sent to the API.
|
|
165
|
+
*/
|
|
166
|
+
declare const DEFAULT_VISITOR_STORAGE_KEY = "@stringpush/sdk/visitor-id";
|
|
167
|
+
declare function getOrCreateVisitorId(storageKey?: string): string | null;
|
|
168
|
+
declare function hashVisitorId(visitorId: string): Promise<string>;
|
|
169
|
+
|
|
170
|
+
export { DEFAULT_VISITOR_STORAGE_KEY, type Environment, type FetchBundleOptions, type ManifestLocaleEntry, type MissingKeyFallback, type ReportUsageOptions, type RetryOptions, type RuntimeInitOptions, type SdkRuntime, type TranslateValues, type TranslationCatalog, type TranslationManifest, assertInitialized, buildManifestUrl, bundleFetchInit, changeLocale, clearCatalogVersions, destroyRuntime, fetchBundle, fetchManifest, fetchWithRetry, formatMessage, getOrCreateVisitorId, getRecordedVersion, getRuntime, getRuntimeLocale, hashVisitorId, initializeRuntime, isCrossOriginBundleUrl, patchCatalogEntry, recordTranslationVersion, reloadIfBundlePublishedNewer, reloadManifestAndActiveLocale, reportUsageBeacon, resetRuntime, resolveApiBaseUrl, resolveBundleUrl, resolveRequestOrigin, resolveTemplate, runtimeFetchInit, shouldApplyTranslationUpdate, translateKey, valueVersionKey };
|