adnbn 0.1.3 → 0.2.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.
@@ -70,6 +70,7 @@ var LocaleNestedKeysSeparator = ".";
70
70
  var LocaleKeysSeparator = "_";
71
71
  var LocaleValuesSeparator = "|";
72
72
  var LocaleCustomKeyForLanguage = "locale";
73
+ var LocaleKeyMarker = "@";
73
74
  var LanguageCodes = new Set(Object.values(Language));
74
75
 
75
76
  // src/locale/providers/AbstractLocale.ts
@@ -89,7 +90,7 @@ var AbstractLocale_default = class {
89
90
  return key;
90
91
  }
91
92
  if (substitutions) {
92
- return template.replace(/{{(.*?)}}/g, (_, placeholder) => {
93
+ return template.replace(/{{(.*?)}}/g, (_2, placeholder) => {
93
94
  if (placeholder in substitutions) {
94
95
  return substitutions[placeholder].toString();
95
96
  }
@@ -182,6 +183,17 @@ var getLocaleFilename = (lang) => {
182
183
  var convertLocaleKey = (key) => {
183
184
  return key.replaceAll(LocaleNestedKeysSeparator, LocaleKeysSeparator);
184
185
  };
186
+ var convertLocaleMessageKey = (key) => {
187
+ return `__MSG_${convertLocaleKey(key)}__`;
188
+ };
189
+ var extractLocaleKey = (key) => {
190
+ if (isLocaleKey(key)) {
191
+ return key.substring(1);
192
+ }
193
+ };
194
+ var isLocaleKey = (key) => {
195
+ return (key == null ? void 0 : key.startsWith(LocaleKeyMarker)) ?? false;
196
+ };
185
197
  var flattenLocaleMessages = (messages) => {
186
198
  return Object.fromEntries(Object.entries(messages).map(([key, value]) => [key, value.message]));
187
199
  };
@@ -521,11 +533,37 @@ var DynamicLocale_default = class extends NativeLocale {
521
533
  }
522
534
  };
523
535
 
536
+ // src/locale/helpers.ts
537
+ var _ = (key, substitutions) => {
538
+ return NativeLocale.getInstance().trans(key, substitutions);
539
+ };
540
+ var _c = (key, count, substitutions) => {
541
+ return NativeLocale.getInstance().choice(key, count, substitutions);
542
+ };
543
+ var __ = (key) => {
544
+ const locale = NativeLocale.getInstance();
545
+ if (!locale.keys().has(key)) {
546
+ console.warn(`Locale key "${key}" not found in "${locale.lang()}" language.`);
547
+ }
548
+ return convertLocaleMessageKey(key);
549
+ };
550
+ var __t = (input) => {
551
+ const localeKey = extractLocaleKey(input);
552
+ if (localeKey) {
553
+ return _(localeKey);
554
+ }
555
+ return input;
556
+ };
557
+
524
558
  exports.AbstractLocale = AbstractLocale_default;
525
559
  exports.DynamicLocale = DynamicLocale_default;
526
560
  exports.Language = Language;
527
561
  exports.LanguageCodes = LanguageCodes;
528
562
  exports.LocaleDir = LocaleDir;
529
563
  exports.NativeLocale = NativeLocale;
564
+ exports._ = _;
565
+ exports.__ = __;
566
+ exports.__t = __t;
567
+ exports._c = _c;
530
568
  //# sourceMappingURL=index.cjs.map
531
569
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/locale.ts","../../src/locale/providers/AbstractLocale.ts","../../src/locale/utils.ts","../../src/storage/providers/AbstractStorage.ts","../../src/storage/providers/Storage.ts","../../src/cli/plugins/dotenv/utils.ts","../../src/main/env.ts","../../src/locale/providers/NativeLocale.ts","../../src/locale/providers/CustomLocale.ts","../../src/locale/providers/DynamicLocale.ts"],"names":["Language","LocaleDir","browser","throwRuntimeError","getI18nMessage","getI18nUILanguage","storage"],"mappings":"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","file":"index.cjs","sourcesContent":["export enum Language {\n Arabic = \"ar\",\n Amharic = \"am\",\n Bulgarian = \"bg\",\n Bengali = \"bn\",\n Catalan = \"ca\",\n Czech = \"cs\",\n Danish = \"da\",\n German = \"de\",\n Greek = \"el\",\n English = \"en\",\n EnglishAustralia = \"en_AU\",\n EnglishGreatBritain = \"en_GB\",\n EnglishUSA = \"en_US\",\n Spanish = \"es\",\n SpanishLatinAmericaAndCaribbean = \"es_419\",\n Estonian = \"et\",\n Persian = \"fa\",\n Finnish = \"fi\",\n Filipino = \"fil\",\n French = \"fr\",\n Gujarati = \"gu\",\n Hebrew = \"he\",\n Hindi = \"hi\",\n Croatian = \"hr\",\n Hungarian = \"hu\",\n Indonesian = \"id\",\n Italian = \"it\",\n Japanese = \"ja\",\n Kannada = \"kn\",\n Korean = \"ko\",\n Lithuanian = \"lt\",\n Latvian = \"lv\",\n Malayalam = \"ml\",\n Marathi = \"mr\",\n Malay = \"ms\",\n Dutch = \"nl\",\n Norwegian = \"no\",\n Polish = \"pl\",\n PortugueseBrazil = \"pt_BR\",\n PortuguesePortugal = \"pt_PT\",\n Romanian = \"ro\",\n Russian = \"ru\",\n Slovak = \"sk\",\n Slovenian = \"sl\",\n Serbian = \"sr\",\n Swedish = \"sv\",\n Swahili = \"sw\",\n Tamil = \"ta\",\n Telugu = \"te\",\n Thai = \"th\",\n Turkish = \"tr\",\n Ukrainian = \"uk\",\n Vietnamese = \"vi\",\n ChineseChina = \"zh_CN\",\n ChineseTaiwan = \"zh_TW\",\n}\n\nexport enum LocaleDir {\n RightToLeft = \"rtl\",\n LeftToRight = \"ltr\",\n}\n\nexport const RtlLanguages: ReadonlySet<Language> = new Set([Language.Arabic, Language.Persian, Language.Hebrew]);\n\nexport const LocaleNestedKeysSeparator = \".\";\n\nexport const LocaleKeysSeparator = \"_\";\n\nexport const LocaleValuesSeparator = \"|\";\n\nexport const LocaleCustomKeyForLanguage = \"locale\";\n\nexport const LocaleKeyMarker = \"@\";\n\nexport const LanguageCodes: ReadonlySet<string> = new Set(Object.values(Language));\n\nexport const LocaleFileExtensions: ReadonlySet<string> = new Set([\"yaml\", \"yml\", \"json\"]);\n\nexport type LocaleValue = string | number | string[] | number[];\n\nexport type LocaleData = {\n [key: string]: LocaleValue | LocaleData;\n};\n\nexport type LocaleItems = Map<string, string>;\n\nexport type LocaleKeys = ReadonlySet<string>;\n\nexport type LocaleMessages = {\n [key: string]: {\n message: string;\n };\n};\n\nexport interface LocaleBuilder {\n lang(): Language;\n\n merge(data: LocaleData): this;\n\n build(): LocaleMessages;\n\n get(): LocaleItems;\n\n keys(): LocaleKeys;\n\n structure(): LocaleStructure;\n\n isValid(): boolean;\n\n validate(): this;\n}\n\nexport interface LocaleValidator {\n isValid(locale: LocaleBuilder): boolean;\n\n validate(locale: LocaleBuilder): this;\n}\n\nexport interface LocaleFutures {\n plural: boolean;\n substitutions: readonly string[];\n}\n\nexport interface LocaleStructure {\n [key: string]: LocaleFutures;\n}\n\nexport type LocaleNonPluralKeys<T extends LocaleStructure> = {\n [K in keyof T]: T[K] extends {plural: false} ? K : never;\n}[keyof T] &\n string;\n\nexport type LocalePluralKeys<T extends LocaleStructure> = {\n [K in keyof T]: T[K] extends {plural: true} ? K : never;\n}[keyof T] &\n string;\n\nexport type LocaleSubstitutionsFor<T extends LocaleStructure, K extends keyof T> = T[K] extends {\n substitutions: readonly (infer U)[];\n}\n ? Partial<Record<U & string, string | number>>\n : never;\n\nexport interface LocaleProvider<S extends LocaleStructure> {\n lang(): Language;\n\n languages(): Set<Language>;\n\n keys(): ReadonlySet<keyof S>;\n\n // non-plural keys\n trans<K extends LocaleNonPluralKeys<S>>(key: K, substitutions?: LocaleSubstitutionsFor<S, K>): string;\n\n // plural keys\n choice<K extends LocalePluralKeys<S>>(key: K, count: number, substitutions?: LocaleSubstitutionsFor<S, K>): string;\n}\n\nexport interface LocaleDynamicProvider<S extends LocaleStructure> extends LocaleProvider<S> {\n change(lang: Language): Promise<Language>;\n}\n","import {\n Language,\n LocaleNonPluralKeys,\n LocalePluralKeys,\n LocaleProvider,\n LocaleStructure,\n LocaleSubstitutionsFor,\n LocaleValuesSeparator,\n} from \"@typing/locale\";\n\nexport default abstract class<S extends LocaleStructure> implements LocaleProvider<S> {\n public abstract lang(): Language;\n\n public abstract keys(): Set<keyof S>;\n\n public abstract languages(): Set<Language>;\n\n protected abstract value(key: keyof S & string): string | undefined;\n\n public trans<K extends LocaleNonPluralKeys<S>>(key: K, substitutions?: LocaleSubstitutionsFor<S, K>): string {\n return this.get(key, substitutions);\n }\n\n public choice<K extends LocalePluralKeys<S>>(\n key: K,\n count: number,\n substitutions?: LocaleSubstitutionsFor<S, K>\n ): string {\n const parts = this.get(key, substitutions).split(LocaleValuesSeparator);\n const idx = this.getPluralIndex(count);\n return parts[idx] ?? parts[0] ?? (key as string);\n }\n\n public get<K extends keyof S & string>(key: K, substitutions?: LocaleSubstitutionsFor<S, K>): string {\n const template = this.value(key);\n\n if (template === undefined) {\n console.warn(`Locale key \"${key}\" not found in \"${this.lang()}\" language.`);\n return key as string;\n }\n\n if (substitutions) {\n return template.replace(/{{(.*?)}}/g, (_, placeholder: string) => {\n if (placeholder in substitutions) {\n return substitutions[placeholder]!.toString();\n }\n console.warn(\n `Locale substitution \"${placeholder}\" not found for key \"${key}\" in \"${this.lang()}\" language.`\n );\n return placeholder;\n });\n }\n\n return template;\n }\n\n private getPluralIndex(count: number): number {\n switch (this.lang()) {\n case Language.Indonesian:\n case Language.Japanese:\n case Language.Kannada:\n case Language.Korean:\n case Language.Malay:\n case Language.Thai:\n case Language.Turkish:\n case Language.Vietnamese:\n return 0;\n\n case Language.Bengali:\n case Language.Bulgarian:\n case Language.Catalan:\n case Language.Danish:\n case Language.German:\n case Language.Greek:\n case Language.English:\n case Language.EnglishAustralia:\n case Language.EnglishGreatBritain:\n case Language.EnglishUSA:\n case Language.Spanish:\n case Language.SpanishLatinAmericaAndCaribbean:\n case Language.Estonian:\n case Language.Persian:\n case Language.Finnish:\n case Language.Gujarati:\n case Language.Hebrew:\n case Language.Hungarian:\n case Language.Italian:\n case Language.Malayalam:\n case Language.Marathi:\n case Language.Dutch:\n case Language.Norwegian:\n case Language.Swedish:\n case Language.Swahili:\n case Language.Tamil:\n case Language.Telugu:\n case Language.ChineseChina:\n case Language.ChineseTaiwan:\n case Language.PortugueseBrazil:\n case Language.PortuguesePortugal:\n return count == 1 ? 0 : 1;\n\n case Language.Amharic:\n case Language.Filipino:\n case Language.French:\n case Language.Hindi:\n return count == 0 || count == 1 ? 0 : 1;\n\n case Language.Croatian:\n case Language.Russian:\n case Language.Serbian:\n case Language.Ukrainian:\n return count % 10 == 1 && count % 100 != 11\n ? 0\n : count % 10 >= 2 && count % 10 <= 4 && (count % 100 < 10 || count % 100 >= 20)\n ? 1\n : 2;\n\n case Language.Czech:\n case Language.Slovak:\n return count == 1 ? 0 : count >= 2 && count <= 4 ? 1 : 2;\n\n case Language.Lithuanian:\n return count % 10 == 1 && count % 100 != 11\n ? 0\n : count % 10 >= 2 && (count % 100 < 10 || count % 100 >= 20)\n ? 1\n : 2;\n\n case Language.Slovenian:\n return count % 100 == 1 ? 0 : count % 100 == 2 ? 1 : count % 100 == 3 || count % 100 == 4 ? 2 : 3;\n\n case Language.Latvian:\n return count == 0 ? 0 : count % 10 == 1 && count % 100 != 11 ? 1 : 2;\n\n case Language.Polish:\n return count == 1\n ? 0\n : count % 10 >= 2 && count % 10 <= 4 && (count % 100 < 12 || count % 100 > 14)\n ? 1\n : 2;\n\n case Language.Romanian:\n return count == 1 ? 0 : count == 0 || (count % 100 > 0 && count % 100 < 20) ? 1 : 2;\n\n case Language.Arabic:\n return count == 0\n ? 0\n : count == 1\n ? 1\n : count == 2\n ? 2\n : count % 100 >= 3 && count % 100 <= 10\n ? 3\n : count % 100 >= 11 && count % 100 <= 99\n ? 4\n : 5;\n\n default:\n return 0;\n }\n }\n}\n","import {\n Language,\n LocaleDir,\n LocaleKeyMarker,\n LocaleKeysSeparator,\n LocaleMessages,\n LocaleNestedKeysSeparator,\n RtlLanguages,\n} from \"@typing/locale\";\n\nexport const getLocaleFilename = (lang: Language): string => {\n return `_locales/${lang}/messages.json`;\n};\n\nexport const convertLocaleKey = (key: string): string => {\n return key.replaceAll(LocaleNestedKeysSeparator, LocaleKeysSeparator);\n};\n\nexport const convertLocaleMessageKey = (key: string): string => {\n return `__MSG_${convertLocaleKey(key)}__`;\n};\n\nexport const extractLocaleKey = (key?: string): string | undefined => {\n if (isLocaleKey(key)) {\n return key.substring(1);\n }\n};\n\nexport const isLocaleKey = (key?: string): key is string => {\n return key?.startsWith(LocaleKeyMarker) ?? false;\n};\n\nexport const modifyLocaleMessageKey = (key?: string): string | undefined => {\n if (typeof key !== \"string\") {\n return undefined;\n }\n\n const localeKey = extractLocaleKey(key);\n\n if (localeKey) {\n return convertLocaleMessageKey(localeKey);\n }\n\n return key;\n};\n\nexport const isLocaleRtl = (lang: Language): boolean => {\n return RtlLanguages.has(lang);\n};\n\nexport const getLocaleDir = (lang: Language): LocaleDir => {\n return isLocaleRtl(lang) ? LocaleDir.RightToLeft : LocaleDir.LeftToRight;\n};\n\nexport const flattenLocaleMessages = (messages: LocaleMessages): Record<string, string> => {\n return Object.fromEntries(Object.entries(messages).map(([key, value]) => [key, value.message]));\n};\n","import {browser, throwRuntimeError} from \"@adnbn/browser\";\n\nimport {StorageProvider, StorageState, StorageWatchOptions} from \"@typing/storage\";\n\nconst storage = () => browser().storage as typeof chrome.storage;\n\ntype AreaName = chrome.storage.AreaName;\ntype StorageArea = chrome.storage.StorageArea;\ntype StorageChange = chrome.storage.StorageChange;\ntype onChangedListener = Parameters<typeof chrome.storage.onChanged.addListener>[0];\n\nexport interface StorageOptions {\n area?: AreaName;\n namespace?: string;\n}\n\nexport default abstract class AbstractStorage<T extends StorageState> implements StorageProvider<T> {\n private storage: StorageArea;\n private readonly area: AreaName;\n protected readonly namespace?: string;\n protected separator: string = \":\";\n\n public abstract clear(): Promise<void>;\n\n protected abstract getFullKey(key: keyof T): string;\n\n protected abstract getNamespaceOfKey(key: string): string | undefined;\n\n protected abstract handleChange<P extends T>(\n key: string,\n changes: StorageChange,\n options: StorageWatchOptions<P>\n ): void;\n\n protected constructor({area, namespace}: StorageOptions = {}) {\n this.area = area ?? \"local\";\n this.storage = storage()[this.area];\n this.namespace = namespace?.trim() ? namespace?.trim() : undefined;\n }\n\n public async set<K extends keyof T>(key: K, value: T[K]): Promise<void> {\n return new Promise((resolve, reject) => {\n this.storage.set({[this.getFullKey(key)]: value}, () => {\n try {\n throwRuntimeError();\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n public async get<K extends keyof T>(key: K): Promise<T[K] | undefined> {\n const fullKey = this.getFullKey(key);\n return new Promise((resolve, reject) => {\n this.storage.get(fullKey, result => {\n try {\n throwRuntimeError();\n resolve(result[fullKey]);\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n public async getAll<P extends T>(): Promise<P> {\n return new Promise((resolve, reject) => {\n this.storage.get(null, result => {\n try {\n throwRuntimeError();\n\n const formattedResult = {} as P;\n\n for (const [key, value] of Object.entries(result)) {\n if (this.isKeyValid(key)) {\n formattedResult[this.getOriginalKey(key)] = value;\n }\n }\n\n resolve(formattedResult);\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n public async remove<K extends keyof T>(keys: K | K[]): Promise<void> {\n return new Promise((resolve, reject) => {\n const fullKeys = Array.isArray(keys) ? keys.map(key => this.getFullKey(key)) : this.getFullKey(keys);\n\n this.storage.remove(fullKeys, () => {\n try {\n throwRuntimeError();\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n public watch<P extends T>(options: StorageWatchOptions<P>): () => void {\n const listener: onChangedListener = (changes: Record<string, StorageChange>, area: AreaName) => {\n if (area !== this.area) return;\n\n Object.entries(changes).forEach(async ([key, change]) => {\n if (this.isKeyValid(key)) {\n this.handleChange(key, change, options);\n }\n });\n };\n\n storage().onChanged.addListener(listener);\n\n return () => storage().onChanged.removeListener(listener);\n }\n\n protected isKeyValid(key: string): boolean {\n return this.getNamespaceOfKey(key) === this.namespace;\n }\n\n protected async triggerChange<P extends T>(key: string, changes: StorageChange, options: StorageWatchOptions<P>) {\n const {newValue, oldValue} = changes;\n const originalKey = this.getOriginalKey(key);\n\n if (typeof options === \"function\") {\n options(newValue, oldValue);\n } else if (options[originalKey]) {\n options[originalKey]?.(newValue, oldValue);\n }\n }\n\n protected getOriginalKey(key: string): keyof T {\n const fullKeyParts = key.split(this.separator);\n return fullKeyParts.length > 1 ? fullKeyParts[fullKeyParts.length - 1] : key;\n }\n}\n","import {StorageState, StorageWatchOptions} from \"@typing/storage\";\n\nimport AbstractStorage, {StorageOptions} from \"./AbstractStorage\";\n\ntype StorageChange = chrome.storage.StorageChange;\n\nexport default class Storage<T extends StorageState> extends AbstractStorage<T> {\n static Sync<T extends StorageState>(namespace?: string): Storage<T> {\n return new Storage<T>({area: \"sync\", namespace});\n }\n\n static Local<T extends StorageState>(namespace?: string): Storage<T> {\n return new Storage<T>({area: \"local\", namespace});\n }\n\n static Session<T extends StorageState>(namespace?: string): Storage<T> {\n return new Storage<T>({area: \"session\", namespace});\n }\n\n static Managed<T extends StorageState>(namespace?: string): Storage<T> {\n return new Storage<T>({area: \"managed\", namespace});\n }\n\n constructor(options: StorageOptions = {}) {\n super(options);\n }\n\n public async clear(): Promise<void> {\n const allValues = await this.getAll();\n\n await this.remove(Object.keys(allValues));\n }\n\n protected isKeyValid(key: string): boolean {\n if (!super.isKeyValid(key)) return false;\n\n const parts = key.split(this.separator);\n\n return parts.length === 1 || (parts.length === 2 && parts[0] === this.namespace);\n }\n\n protected async handleChange<P extends T>(key: string, changes: StorageChange, options: StorageWatchOptions<P>) {\n await this.triggerChange(key, changes, options);\n }\n\n protected getFullKey(key: keyof T): string {\n return this.namespace ? `${this.namespace}${this.separator}${key.toString()}` : key.toString();\n }\n\n protected getNamespaceOfKey(key: string): string | undefined {\n const fullKeyParts = key.split(this.separator);\n return fullKeyParts.length === 2 ? fullKeyParts[0] : undefined;\n }\n}\n","import {createHash} from \"crypto\";\n\nexport const generateCryptoKey = (password: string): string => {\n return createHash(\"sha256\").update(password).digest(\"base64\");\n};\n\nexport const encryptData = <T = any>(data: T, key: string): string => {\n const jsonString = JSON.stringify(data);\n const dataBytes = Array.from(jsonString, c => c.charCodeAt(0));\n const keyBytes = Array.from(key, c => c.charCodeAt(0));\n\n const encryptedBytes = dataBytes.map((byte, i) => byte ^ keyBytes[i % keyBytes.length]);\n const encryptedString = String.fromCharCode(...encryptedBytes);\n\n return btoa(encryptedString);\n};\n\nexport const decryptData = <T = any>(encrypted: string, key?: string): T => {\n const encryptedString = atob(encrypted);\n const encryptedBytes = Array.from(encryptedString, c => c.charCodeAt(0));\n let keyBytes: any[];\n try {\n //@ts-expect-error: __ADNBN_ENV_CRYPTO_KEY__ is a virtual variable generated by the bundler `src/cli/plugins/dotenv/index.ts`\n keyBytes = Array.from(key || __ADNBN_ENV_CRYPTO_KEY__, c => c.charCodeAt(0));\n } catch (err) {\n throw new Error('You need to specify the \"key\" argument for the decryptData function.');\n }\n\n const decryptedBytes = encryptedBytes.map((byte, i) => byte ^ keyBytes[i % keyBytes.length]);\n const decryptedString = String.fromCharCode(...decryptedBytes);\n\n return JSON.parse(decryptedString);\n};\n","import {Browser} from \"@typing/browser\";\nimport {ManifestVersion} from \"@typing/manifest\";\nimport {decryptData} from \"@cli/plugins/dotenv/utils\";\n\nexport const getEnv: {\n <T extends string>(key: string): T | undefined;\n <T extends string, D>(key: string, defaults: D): T | D;\n} = (() => {\n let envCache: object;\n\n return (key: string, defaults?: string) => {\n let env: object;\n\n if (typeof process.env === \"object\") {\n env = process.env;\n } else {\n envCache ??= decryptData(process.env);\n env = envCache;\n }\n\n return (env[key] ?? defaults) as any;\n };\n})();\n\nexport const getApp = (): string => {\n const app = getEnv(\"APP\");\n\n if (app === undefined) {\n throw new Error(\"App is not defined\");\n }\n\n return app;\n};\n\nexport const getBrowser = (): Browser => {\n const browser = getEnv<Browser>(\"BROWSER\");\n\n if (browser === undefined) {\n throw new Error(\"Browser is not defined\");\n }\n\n return browser;\n};\n\nexport const isBrowser = (browser: Browser): browser is Browser => {\n return getBrowser() === browser;\n};\n\nexport const getManifestVersion = (): ManifestVersion => {\n const manifestVersion = getEnv(\"MANIFEST_VERSION\", \"3\");\n\n return parseInt(manifestVersion) as ManifestVersion;\n};\n","import {getI18nMessage, getI18nUILanguage} from \"@adnbn/browser\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {convertLocaleKey} from \"@locale/utils\";\n\nimport {isBrowser} from \"@main/env\";\n\nimport {Language, LanguageCodes, LocaleCustomKeyForLanguage, LocaleProvider, LocaleStructure} from \"@typing/locale\";\nimport {Browser} from \"@typing/browser\";\n\nexport interface LocaleNativeStructure extends LocaleStructure {}\n\nexport default class NativeLocale extends AbstractLocale<LocaleNativeStructure> {\n private static instance?: LocaleProvider<LocaleNativeStructure>;\n\n public static getInstance<S extends LocaleStructure = LocaleNativeStructure>(): LocaleProvider<S> {\n return (NativeLocale.instance ??= new NativeLocale());\n }\n\n public lang(): Language {\n let lang: Language | undefined;\n\n /**\n * The Opera browser does not support RTL languages,\n * and for Opera you need to directly indicate what kind of language it is.\n * interface language is always different\n */\n if (isBrowser(Browser.Opera)) {\n lang = getI18nMessage(LocaleCustomKeyForLanguage) as Language;\n\n if (LanguageCodes.has(lang)) {\n return lang;\n }\n }\n\n lang = getI18nUILanguage() as Language;\n\n if (!lang) {\n throw new Error(\"Locale Native: Unable to get UI language\");\n }\n\n return lang;\n }\n\n public keys(): Set<keyof LocaleNativeStructure> {\n try {\n // @ts-expect-error: __ADNBN_LOCALE_KEYS__ is a virtual variable generated by the bundler `src/cli/plugins/locale/index.ts`\n return new Set<string>(__ADNBN_LOCALE_KEYS__);\n } catch (e) {\n console.error(\"Locale Native: Unable to get keys\", e);\n\n return new Set<string>();\n }\n }\n\n public languages(): Set<Language> {\n try {\n // @ts-expect-error: __ADNBN_DEFINED_LOCALES__ is a virtual variable generated by the bundler `src/cli/plugins/locale/index.ts`\n return new Set<Language>(__ADNBN_DEFINED_LOCALES__);\n } catch (e) {\n console.error(\"Locale Native: Unable to get defined locales\", e);\n\n return new Set<Language>();\n }\n }\n\n protected value(key: Extract<keyof LocaleNativeStructure, string>): string | undefined {\n const value = getI18nMessage(convertLocaleKey(key));\n\n if (!value || value.length === 0) {\n return undefined;\n }\n\n return value;\n }\n}\n","import {convertLocaleKey} from \"../utils\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {Language, LocaleStructure} from \"@typing/locale\";\n\nexport type CustomLocaleData = Record<string, string>;\n\nexport default class<T extends LocaleStructure = LocaleStructure> extends AbstractLocale<T> {\n constructor(\n protected language: Language = Language.English,\n protected data: CustomLocaleData = {}\n ) {\n super();\n }\n\n public setLang(lang: Language): this {\n this.language = lang;\n\n return this;\n }\n\n public setData(data: CustomLocaleData): this {\n this.data = data;\n\n return this;\n }\n\n public lang(): Language {\n return this.language;\n }\n\n public keys(): Set<string> {\n return new Set(Object.keys(this.data));\n }\n\n public languages(): Set<Language> {\n return new Set([this.lang()]);\n }\n\n protected value(key: string): string | undefined {\n const value = this.data[convertLocaleKey(key)];\n\n if (!value || value.length === 0) {\n return undefined;\n }\n\n return value;\n }\n}\n","import {flattenLocaleMessages, getLocaleFilename} from \"../utils\";\n\nimport {Storage} from \"../../storage\";\n\nimport NativeLocale, {LocaleNativeStructure} from \"./NativeLocale\";\nimport CustomLocale, {CustomLocaleData} from \"./CustomLocale\";\n\nimport {Language, LanguageCodes, LocaleDynamicProvider, LocaleMessages} from \"@typing/locale\";\n\nexport default class<T extends LocaleNativeStructure> extends NativeLocale implements LocaleDynamicProvider<T> {\n protected cache = new Map<Language, CustomLocaleData>();\n\n protected locale?: CustomLocale<T>;\n\n protected storage?: Storage<Record<string, Language>>;\n protected storageKey?: string;\n\n protected unsubscribe?: () => void;\n\n constructor(storage: string | false = \"lang\") {\n super();\n\n if (storage) {\n this.storageKey = storage;\n this.storage = Storage.Sync();\n }\n }\n\n public async change(lang: Language): Promise<Language> {\n if (lang === this.lang()) {\n return lang;\n }\n\n const messages = await this.fetch(lang);\n\n (this.locale ??= new CustomLocale()).setLang(lang).setData(messages);\n\n if (this.storage && this.storageKey) {\n await this.storage.set(this.storageKey, lang);\n }\n\n return lang;\n }\n\n public async sync(): Promise<Language> {\n if (!this.storage || !this.storageKey) {\n throw new Error(\"Language is not saving in storage\");\n }\n\n const lang = await this.storage.get(this.storageKey);\n\n if (!lang) {\n return this.lang();\n }\n\n if (!LanguageCodes.has(lang)) {\n console.warn(`Incorrect language code in storage - \"${lang}\"`);\n\n return this.lang();\n }\n\n return this.change(lang);\n }\n\n public watch(handler?: (lang: Language) => void): () => void {\n if (!this.storage || !this.storageKey) {\n throw new Error(\"Language is not saved in storage\");\n }\n\n if (this.unsubscribe) {\n throw new Error(\"Already subscribed to language changes in storage\");\n }\n\n this.unsubscribe = this.storage.watch({\n [this.storageKey]: newValue => {\n if (newValue) {\n this.change(newValue)\n .then(() => handler && handler(newValue))\n .catch(err => console.error(\"Error while changing language:\", err));\n }\n },\n });\n\n return this.unwatch.bind(this);\n }\n\n public unwatch(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n\n public lang(): Language {\n return this.locale?.lang() || super.lang();\n }\n\n protected value(key: Extract<keyof LocaleNativeStructure, string>): string | undefined {\n return this.locale?.get(key) || super.value(key);\n }\n\n protected async fetch(lang: Language): Promise<CustomLocaleData> {\n let messages = this.cache.get(lang);\n\n if (!messages) {\n const response: LocaleMessages = await (await fetch(getLocaleFilename(lang))).json();\n\n if (!response || typeof response !== \"object\") {\n throw new Error(`Invalid or empty locale data for \"${lang}\"`);\n }\n\n messages = flattenLocaleMessages(response);\n\n this.cache.set(lang, messages);\n }\n\n return messages;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/types/locale.ts","../../src/locale/providers/AbstractLocale.ts","../../src/locale/utils.ts","../../src/storage/providers/AbstractStorage.ts","../../src/storage/providers/Storage.ts","../../src/cli/plugins/dotenv/utils.ts","../../src/main/env.ts","../../src/locale/providers/NativeLocale.ts","../../src/locale/providers/CustomLocale.ts","../../src/locale/providers/DynamicLocale.ts","../../src/locale/helpers.ts"],"names":["Language","LocaleDir","_","browser","throwRuntimeError","getI18nMessage","getI18nUILanguage","storage"],"mappings":"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","file":"index.cjs","sourcesContent":["export enum Language {\n Arabic = \"ar\",\n Amharic = \"am\",\n Bulgarian = \"bg\",\n Bengali = \"bn\",\n Catalan = \"ca\",\n Czech = \"cs\",\n Danish = \"da\",\n German = \"de\",\n Greek = \"el\",\n English = \"en\",\n EnglishAustralia = \"en_AU\",\n EnglishGreatBritain = \"en_GB\",\n EnglishUSA = \"en_US\",\n Spanish = \"es\",\n SpanishLatinAmericaAndCaribbean = \"es_419\",\n Estonian = \"et\",\n Persian = \"fa\",\n Finnish = \"fi\",\n Filipino = \"fil\",\n French = \"fr\",\n Gujarati = \"gu\",\n Hebrew = \"he\",\n Hindi = \"hi\",\n Croatian = \"hr\",\n Hungarian = \"hu\",\n Indonesian = \"id\",\n Italian = \"it\",\n Japanese = \"ja\",\n Kannada = \"kn\",\n Korean = \"ko\",\n Lithuanian = \"lt\",\n Latvian = \"lv\",\n Malayalam = \"ml\",\n Marathi = \"mr\",\n Malay = \"ms\",\n Dutch = \"nl\",\n Norwegian = \"no\",\n Polish = \"pl\",\n PortugueseBrazil = \"pt_BR\",\n PortuguesePortugal = \"pt_PT\",\n Romanian = \"ro\",\n Russian = \"ru\",\n Slovak = \"sk\",\n Slovenian = \"sl\",\n Serbian = \"sr\",\n Swedish = \"sv\",\n Swahili = \"sw\",\n Tamil = \"ta\",\n Telugu = \"te\",\n Thai = \"th\",\n Turkish = \"tr\",\n Ukrainian = \"uk\",\n Vietnamese = \"vi\",\n ChineseChina = \"zh_CN\",\n ChineseTaiwan = \"zh_TW\",\n}\n\nexport enum LocaleDir {\n RightToLeft = \"rtl\",\n LeftToRight = \"ltr\",\n}\n\nexport const RtlLanguages: ReadonlySet<Language> = new Set([Language.Arabic, Language.Persian, Language.Hebrew]);\n\nexport const LocaleNestedKeysSeparator = \".\";\n\nexport const LocaleKeysSeparator = \"_\";\n\nexport const LocaleValuesSeparator = \"|\";\n\nexport const LocaleCustomKeyForLanguage = \"locale\";\n\nexport const LocaleKeyMarker = \"@\";\n\nexport const LanguageCodes: ReadonlySet<string> = new Set(Object.values(Language));\n\nexport const LocaleFileExtensions: ReadonlySet<string> = new Set([\"yaml\", \"yml\", \"json\"]);\n\nexport type LocaleValue = string | number | string[] | number[];\n\nexport type LocaleData = {\n [key: string]: LocaleValue | LocaleData;\n};\n\nexport type LocaleItems = Map<string, string>;\n\nexport type LocaleKeys = ReadonlySet<string>;\n\nexport type LocaleMessages = {\n [key: string]: {\n message: string;\n };\n};\n\nexport interface LocaleBuilder {\n lang(): Language;\n\n merge(data: LocaleData): this;\n\n build(): LocaleMessages;\n\n get(): LocaleItems;\n\n keys(): LocaleKeys;\n\n structure(): LocaleStructure;\n\n isValid(): boolean;\n\n validate(): this;\n}\n\nexport interface LocaleValidator {\n isValid(locale: LocaleBuilder): boolean;\n\n validate(locale: LocaleBuilder): this;\n}\n\nexport interface LocaleFutures {\n plural: boolean;\n substitutions: readonly string[];\n}\n\nexport interface LocaleStructure {\n [key: string]: LocaleFutures;\n}\n\nexport type LocaleNonPluralKeys<T extends LocaleStructure> = {\n [K in keyof T]: T[K] extends {plural: false} ? K : never;\n}[keyof T] &\n string;\n\nexport type LocalePluralKeys<T extends LocaleStructure> = {\n [K in keyof T]: T[K] extends {plural: true} ? K : never;\n}[keyof T] &\n string;\n\nexport type LocaleSubstitutionsFor<T extends LocaleStructure, K extends keyof T> = T[K] extends {\n substitutions: readonly (infer U)[];\n}\n ? Partial<Record<U & string, string | number>>\n : never;\n\nexport interface LocaleProvider<S extends LocaleStructure> {\n lang(): Language;\n\n languages(): Set<Language>;\n\n keys(): ReadonlySet<keyof S>;\n\n // non-plural keys\n trans<K extends LocaleNonPluralKeys<S>>(key: K, substitutions?: LocaleSubstitutionsFor<S, K>): string;\n\n // plural keys\n choice<K extends LocalePluralKeys<S>>(key: K, count: number, substitutions?: LocaleSubstitutionsFor<S, K>): string;\n}\n\nexport interface LocaleDynamicProvider<S extends LocaleStructure> extends LocaleProvider<S> {\n change(lang: Language): Promise<Language>;\n}\n","import {\n Language,\n LocaleNonPluralKeys,\n LocalePluralKeys,\n LocaleProvider,\n LocaleStructure,\n LocaleSubstitutionsFor,\n LocaleValuesSeparator,\n} from \"@typing/locale\";\n\nexport default abstract class<S extends LocaleStructure> implements LocaleProvider<S> {\n public abstract lang(): Language;\n\n public abstract keys(): Set<keyof S>;\n\n public abstract languages(): Set<Language>;\n\n protected abstract value(key: keyof S & string): string | undefined;\n\n public trans<K extends LocaleNonPluralKeys<S>>(key: K, substitutions?: LocaleSubstitutionsFor<S, K>): string {\n return this.get(key, substitutions);\n }\n\n public choice<K extends LocalePluralKeys<S>>(\n key: K,\n count: number,\n substitutions?: LocaleSubstitutionsFor<S, K>\n ): string {\n const parts = this.get(key, substitutions).split(LocaleValuesSeparator);\n const idx = this.getPluralIndex(count);\n return parts[idx] ?? parts[0] ?? (key as string);\n }\n\n public get<K extends keyof S & string>(key: K, substitutions?: LocaleSubstitutionsFor<S, K>): string {\n const template = this.value(key);\n\n if (template === undefined) {\n console.warn(`Locale key \"${key}\" not found in \"${this.lang()}\" language.`);\n return key as string;\n }\n\n if (substitutions) {\n return template.replace(/{{(.*?)}}/g, (_, placeholder: string) => {\n if (placeholder in substitutions) {\n return substitutions[placeholder]!.toString();\n }\n console.warn(\n `Locale substitution \"${placeholder}\" not found for key \"${key}\" in \"${this.lang()}\" language.`\n );\n return placeholder;\n });\n }\n\n return template;\n }\n\n private getPluralIndex(count: number): number {\n switch (this.lang()) {\n case Language.Indonesian:\n case Language.Japanese:\n case Language.Kannada:\n case Language.Korean:\n case Language.Malay:\n case Language.Thai:\n case Language.Turkish:\n case Language.Vietnamese:\n return 0;\n\n case Language.Bengali:\n case Language.Bulgarian:\n case Language.Catalan:\n case Language.Danish:\n case Language.German:\n case Language.Greek:\n case Language.English:\n case Language.EnglishAustralia:\n case Language.EnglishGreatBritain:\n case Language.EnglishUSA:\n case Language.Spanish:\n case Language.SpanishLatinAmericaAndCaribbean:\n case Language.Estonian:\n case Language.Persian:\n case Language.Finnish:\n case Language.Gujarati:\n case Language.Hebrew:\n case Language.Hungarian:\n case Language.Italian:\n case Language.Malayalam:\n case Language.Marathi:\n case Language.Dutch:\n case Language.Norwegian:\n case Language.Swedish:\n case Language.Swahili:\n case Language.Tamil:\n case Language.Telugu:\n case Language.ChineseChina:\n case Language.ChineseTaiwan:\n case Language.PortugueseBrazil:\n case Language.PortuguesePortugal:\n return count == 1 ? 0 : 1;\n\n case Language.Amharic:\n case Language.Filipino:\n case Language.French:\n case Language.Hindi:\n return count == 0 || count == 1 ? 0 : 1;\n\n case Language.Croatian:\n case Language.Russian:\n case Language.Serbian:\n case Language.Ukrainian:\n return count % 10 == 1 && count % 100 != 11\n ? 0\n : count % 10 >= 2 && count % 10 <= 4 && (count % 100 < 10 || count % 100 >= 20)\n ? 1\n : 2;\n\n case Language.Czech:\n case Language.Slovak:\n return count == 1 ? 0 : count >= 2 && count <= 4 ? 1 : 2;\n\n case Language.Lithuanian:\n return count % 10 == 1 && count % 100 != 11\n ? 0\n : count % 10 >= 2 && (count % 100 < 10 || count % 100 >= 20)\n ? 1\n : 2;\n\n case Language.Slovenian:\n return count % 100 == 1 ? 0 : count % 100 == 2 ? 1 : count % 100 == 3 || count % 100 == 4 ? 2 : 3;\n\n case Language.Latvian:\n return count == 0 ? 0 : count % 10 == 1 && count % 100 != 11 ? 1 : 2;\n\n case Language.Polish:\n return count == 1\n ? 0\n : count % 10 >= 2 && count % 10 <= 4 && (count % 100 < 12 || count % 100 > 14)\n ? 1\n : 2;\n\n case Language.Romanian:\n return count == 1 ? 0 : count == 0 || (count % 100 > 0 && count % 100 < 20) ? 1 : 2;\n\n case Language.Arabic:\n return count == 0\n ? 0\n : count == 1\n ? 1\n : count == 2\n ? 2\n : count % 100 >= 3 && count % 100 <= 10\n ? 3\n : count % 100 >= 11 && count % 100 <= 99\n ? 4\n : 5;\n\n default:\n return 0;\n }\n }\n}\n","import {\n Language,\n LocaleDir,\n LocaleKeyMarker,\n LocaleKeysSeparator,\n LocaleMessages,\n LocaleNestedKeysSeparator,\n RtlLanguages,\n} from \"@typing/locale\";\n\nexport const getLocaleFilename = (lang: Language): string => {\n return `_locales/${lang}/messages.json`;\n};\n\nexport const convertLocaleKey = (key: string): string => {\n return key.replaceAll(LocaleNestedKeysSeparator, LocaleKeysSeparator);\n};\n\nexport const convertLocaleMessageKey = (key: string): string => {\n return `__MSG_${convertLocaleKey(key)}__`;\n};\n\nexport const extractLocaleKey = (key?: string): string | undefined => {\n if (isLocaleKey(key)) {\n return key.substring(1);\n }\n};\n\nexport const isLocaleKey = (key?: string): key is string => {\n return key?.startsWith(LocaleKeyMarker) ?? false;\n};\n\nexport const modifyLocaleMessageKey = (key?: string): string | undefined => {\n if (typeof key !== \"string\") {\n return undefined;\n }\n\n const localeKey = extractLocaleKey(key);\n\n if (localeKey) {\n return convertLocaleMessageKey(localeKey);\n }\n\n return key;\n};\n\nexport const isLocaleRtl = (lang: Language): boolean => {\n return RtlLanguages.has(lang);\n};\n\nexport const getLocaleDir = (lang: Language): LocaleDir => {\n return isLocaleRtl(lang) ? LocaleDir.RightToLeft : LocaleDir.LeftToRight;\n};\n\nexport const flattenLocaleMessages = (messages: LocaleMessages): Record<string, string> => {\n return Object.fromEntries(Object.entries(messages).map(([key, value]) => [key, value.message]));\n};\n","import {browser, throwRuntimeError} from \"@adnbn/browser\";\n\nimport {StorageProvider, StorageState, StorageWatchOptions} from \"@typing/storage\";\n\nconst storage = () => browser().storage as typeof chrome.storage;\n\ntype AreaName = chrome.storage.AreaName;\ntype StorageArea = chrome.storage.StorageArea;\ntype StorageChange = chrome.storage.StorageChange;\ntype onChangedListener = Parameters<typeof chrome.storage.onChanged.addListener>[0];\n\nexport interface StorageOptions {\n area?: AreaName;\n namespace?: string;\n}\n\nexport default abstract class AbstractStorage<T extends StorageState> implements StorageProvider<T> {\n private storage: StorageArea;\n private readonly area: AreaName;\n protected readonly namespace?: string;\n protected separator: string = \":\";\n\n public abstract clear(): Promise<void>;\n\n protected abstract getFullKey(key: keyof T): string;\n\n protected abstract getNamespaceOfKey(key: string): string | undefined;\n\n protected abstract handleChange<P extends T>(\n key: string,\n changes: StorageChange,\n options: StorageWatchOptions<P>\n ): void;\n\n protected constructor({area, namespace}: StorageOptions = {}) {\n this.area = area ?? \"local\";\n this.storage = storage()[this.area];\n this.namespace = namespace?.trim() ? namespace?.trim() : undefined;\n }\n\n public async set<K extends keyof T>(key: K, value: T[K]): Promise<void> {\n return new Promise((resolve, reject) => {\n this.storage.set({[this.getFullKey(key)]: value}, () => {\n try {\n throwRuntimeError();\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n public async get<K extends keyof T>(key: K): Promise<T[K] | undefined> {\n const fullKey = this.getFullKey(key);\n return new Promise((resolve, reject) => {\n this.storage.get(fullKey, result => {\n try {\n throwRuntimeError();\n resolve(result[fullKey]);\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n public async getAll<P extends T>(): Promise<P> {\n return new Promise((resolve, reject) => {\n this.storage.get(null, result => {\n try {\n throwRuntimeError();\n\n const formattedResult = {} as P;\n\n for (const [key, value] of Object.entries(result)) {\n if (this.isKeyValid(key)) {\n formattedResult[this.getOriginalKey(key)] = value;\n }\n }\n\n resolve(formattedResult);\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n public async remove<K extends keyof T>(keys: K | K[]): Promise<void> {\n return new Promise((resolve, reject) => {\n const fullKeys = Array.isArray(keys) ? keys.map(key => this.getFullKey(key)) : this.getFullKey(keys);\n\n this.storage.remove(fullKeys, () => {\n try {\n throwRuntimeError();\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n });\n }\n\n public watch<P extends T>(options: StorageWatchOptions<P>): () => void {\n const listener: onChangedListener = (changes: Record<string, StorageChange>, area: AreaName) => {\n if (area !== this.area) return;\n\n Object.entries(changes).forEach(async ([key, change]) => {\n if (this.isKeyValid(key)) {\n this.handleChange(key, change, options);\n }\n });\n };\n\n storage().onChanged.addListener(listener);\n\n return () => storage().onChanged.removeListener(listener);\n }\n\n protected isKeyValid(key: string): boolean {\n return this.getNamespaceOfKey(key) === this.namespace;\n }\n\n protected async triggerChange<P extends T>(key: string, changes: StorageChange, options: StorageWatchOptions<P>) {\n const {newValue, oldValue} = changes;\n const originalKey = this.getOriginalKey(key);\n\n if (typeof options === \"function\") {\n options(newValue, oldValue);\n } else if (options[originalKey]) {\n options[originalKey]?.(newValue, oldValue);\n }\n }\n\n protected getOriginalKey(key: string): keyof T {\n const fullKeyParts = key.split(this.separator);\n return fullKeyParts.length > 1 ? fullKeyParts[fullKeyParts.length - 1] : key;\n }\n}\n","import {StorageState, StorageWatchOptions} from \"@typing/storage\";\n\nimport AbstractStorage, {StorageOptions} from \"./AbstractStorage\";\n\ntype StorageChange = chrome.storage.StorageChange;\n\nexport default class Storage<T extends StorageState> extends AbstractStorage<T> {\n static Sync<T extends StorageState>(namespace?: string): Storage<T> {\n return new Storage<T>({area: \"sync\", namespace});\n }\n\n static Local<T extends StorageState>(namespace?: string): Storage<T> {\n return new Storage<T>({area: \"local\", namespace});\n }\n\n static Session<T extends StorageState>(namespace?: string): Storage<T> {\n return new Storage<T>({area: \"session\", namespace});\n }\n\n static Managed<T extends StorageState>(namespace?: string): Storage<T> {\n return new Storage<T>({area: \"managed\", namespace});\n }\n\n constructor(options: StorageOptions = {}) {\n super(options);\n }\n\n public async clear(): Promise<void> {\n const allValues = await this.getAll();\n\n await this.remove(Object.keys(allValues));\n }\n\n protected isKeyValid(key: string): boolean {\n if (!super.isKeyValid(key)) return false;\n\n const parts = key.split(this.separator);\n\n return parts.length === 1 || (parts.length === 2 && parts[0] === this.namespace);\n }\n\n protected async handleChange<P extends T>(key: string, changes: StorageChange, options: StorageWatchOptions<P>) {\n await this.triggerChange(key, changes, options);\n }\n\n protected getFullKey(key: keyof T): string {\n return this.namespace ? `${this.namespace}${this.separator}${key.toString()}` : key.toString();\n }\n\n protected getNamespaceOfKey(key: string): string | undefined {\n const fullKeyParts = key.split(this.separator);\n return fullKeyParts.length === 2 ? fullKeyParts[0] : undefined;\n }\n}\n","import {createHash} from \"crypto\";\n\nexport const generateCryptoKey = (password: string): string => {\n return createHash(\"sha256\").update(password).digest(\"base64\");\n};\n\nexport const encryptData = <T = any>(data: T, key: string): string => {\n const jsonString = JSON.stringify(data);\n const dataBytes = Array.from(jsonString, c => c.charCodeAt(0));\n const keyBytes = Array.from(key, c => c.charCodeAt(0));\n\n const encryptedBytes = dataBytes.map((byte, i) => byte ^ keyBytes[i % keyBytes.length]);\n const encryptedString = String.fromCharCode(...encryptedBytes);\n\n return btoa(encryptedString);\n};\n\nexport const decryptData = <T = any>(encrypted: string, key?: string): T => {\n const encryptedString = atob(encrypted);\n const encryptedBytes = Array.from(encryptedString, c => c.charCodeAt(0));\n let keyBytes: any[];\n try {\n //@ts-expect-error: __ADNBN_ENV_CRYPTO_KEY__ is a virtual variable generated by the bundler `src/cli/plugins/dotenv/index.ts`\n keyBytes = Array.from(key || __ADNBN_ENV_CRYPTO_KEY__, c => c.charCodeAt(0));\n } catch (err) {\n throw new Error('You need to specify the \"key\" argument for the decryptData function.');\n }\n\n const decryptedBytes = encryptedBytes.map((byte, i) => byte ^ keyBytes[i % keyBytes.length]);\n const decryptedString = String.fromCharCode(...decryptedBytes);\n\n return JSON.parse(decryptedString);\n};\n","import {Browser} from \"@typing/browser\";\nimport {ManifestVersion} from \"@typing/manifest\";\nimport {decryptData} from \"@cli/plugins/dotenv/utils\";\n\nexport const getEnv: {\n <T extends string>(key: string): T | undefined;\n <T extends string, D>(key: string, defaults: D): T | D;\n} = (() => {\n let envCache: object;\n\n return (key: string, defaults?: string) => {\n let env: object;\n\n if (typeof process.env === \"object\") {\n env = process.env;\n } else {\n envCache ??= decryptData(process.env);\n env = envCache;\n }\n\n return (env[key] ?? defaults) as any;\n };\n})();\n\nexport const getApp = (): string => {\n const app = getEnv(\"APP\");\n\n if (app === undefined) {\n throw new Error(\"App is not defined\");\n }\n\n return app;\n};\n\nexport const getBrowser = (): Browser => {\n const browser = getEnv<Browser>(\"BROWSER\");\n\n if (browser === undefined) {\n throw new Error(\"Browser is not defined\");\n }\n\n return browser;\n};\n\nexport const isBrowser = (browser: Browser): browser is Browser => {\n return getBrowser() === browser;\n};\n\nexport const getManifestVersion = (): ManifestVersion => {\n const manifestVersion = getEnv(\"MANIFEST_VERSION\", \"3\");\n\n return parseInt(manifestVersion) as ManifestVersion;\n};\n","import {getI18nMessage, getI18nUILanguage} from \"@adnbn/browser\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {convertLocaleKey} from \"@locale/utils\";\n\nimport {isBrowser} from \"@main/env\";\n\nimport {Language, LanguageCodes, LocaleCustomKeyForLanguage, LocaleProvider, LocaleStructure} from \"@typing/locale\";\nimport {Browser} from \"@typing/browser\";\n\nexport interface LocaleNativeStructure extends LocaleStructure {}\n\nexport default class NativeLocale extends AbstractLocale<LocaleNativeStructure> {\n private static instance?: LocaleProvider<LocaleNativeStructure>;\n\n public static getInstance<S extends LocaleStructure = LocaleNativeStructure>(): LocaleProvider<S> {\n return (NativeLocale.instance ??= new NativeLocale());\n }\n\n public lang(): Language {\n let lang: Language | undefined;\n\n /**\n * The Opera browser does not support RTL languages,\n * and for Opera you need to directly indicate what kind of language it is.\n * interface language is always different\n */\n if (isBrowser(Browser.Opera)) {\n lang = getI18nMessage(LocaleCustomKeyForLanguage) as Language;\n\n if (LanguageCodes.has(lang)) {\n return lang;\n }\n }\n\n lang = getI18nUILanguage() as Language;\n\n if (!lang) {\n throw new Error(\"Locale Native: Unable to get UI language\");\n }\n\n return lang;\n }\n\n public keys(): Set<keyof LocaleNativeStructure> {\n try {\n // @ts-expect-error: __ADNBN_LOCALE_KEYS__ is a virtual variable generated by the bundler `src/cli/plugins/locale/index.ts`\n return new Set<string>(__ADNBN_LOCALE_KEYS__);\n } catch (e) {\n console.error(\"Locale Native: Unable to get keys\", e);\n\n return new Set<string>();\n }\n }\n\n public languages(): Set<Language> {\n try {\n // @ts-expect-error: __ADNBN_DEFINED_LOCALES__ is a virtual variable generated by the bundler `src/cli/plugins/locale/index.ts`\n return new Set<Language>(__ADNBN_DEFINED_LOCALES__);\n } catch (e) {\n console.error(\"Locale Native: Unable to get defined locales\", e);\n\n return new Set<Language>();\n }\n }\n\n protected value(key: Extract<keyof LocaleNativeStructure, string>): string | undefined {\n const value = getI18nMessage(convertLocaleKey(key));\n\n if (!value || value.length === 0) {\n return undefined;\n }\n\n return value;\n }\n}\n","import {convertLocaleKey} from \"../utils\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {Language, LocaleStructure} from \"@typing/locale\";\n\nexport type CustomLocaleData = Record<string, string>;\n\nexport default class<T extends LocaleStructure = LocaleStructure> extends AbstractLocale<T> {\n constructor(\n protected language: Language = Language.English,\n protected data: CustomLocaleData = {}\n ) {\n super();\n }\n\n public setLang(lang: Language): this {\n this.language = lang;\n\n return this;\n }\n\n public setData(data: CustomLocaleData): this {\n this.data = data;\n\n return this;\n }\n\n public lang(): Language {\n return this.language;\n }\n\n public keys(): Set<string> {\n return new Set(Object.keys(this.data));\n }\n\n public languages(): Set<Language> {\n return new Set([this.lang()]);\n }\n\n protected value(key: string): string | undefined {\n const value = this.data[convertLocaleKey(key)];\n\n if (!value || value.length === 0) {\n return undefined;\n }\n\n return value;\n }\n}\n","import {flattenLocaleMessages, getLocaleFilename} from \"../utils\";\n\nimport {Storage} from \"../../storage\";\n\nimport NativeLocale, {LocaleNativeStructure} from \"./NativeLocale\";\nimport CustomLocale, {CustomLocaleData} from \"./CustomLocale\";\n\nimport {Language, LanguageCodes, LocaleDynamicProvider, LocaleMessages} from \"@typing/locale\";\n\nexport default class<T extends LocaleNativeStructure> extends NativeLocale implements LocaleDynamicProvider<T> {\n protected cache = new Map<Language, CustomLocaleData>();\n\n protected locale?: CustomLocale<T>;\n\n protected storage?: Storage<Record<string, Language>>;\n protected storageKey?: string;\n\n protected unsubscribe?: () => void;\n\n constructor(storage: string | false = \"lang\") {\n super();\n\n if (storage) {\n this.storageKey = storage;\n this.storage = Storage.Sync();\n }\n }\n\n public async change(lang: Language): Promise<Language> {\n if (lang === this.lang()) {\n return lang;\n }\n\n const messages = await this.fetch(lang);\n\n (this.locale ??= new CustomLocale()).setLang(lang).setData(messages);\n\n if (this.storage && this.storageKey) {\n await this.storage.set(this.storageKey, lang);\n }\n\n return lang;\n }\n\n public async sync(): Promise<Language> {\n if (!this.storage || !this.storageKey) {\n throw new Error(\"Language is not saving in storage\");\n }\n\n const lang = await this.storage.get(this.storageKey);\n\n if (!lang) {\n return this.lang();\n }\n\n if (!LanguageCodes.has(lang)) {\n console.warn(`Incorrect language code in storage - \"${lang}\"`);\n\n return this.lang();\n }\n\n return this.change(lang);\n }\n\n public watch(handler?: (lang: Language) => void): () => void {\n if (!this.storage || !this.storageKey) {\n throw new Error(\"Language is not saved in storage\");\n }\n\n if (this.unsubscribe) {\n throw new Error(\"Already subscribed to language changes in storage\");\n }\n\n this.unsubscribe = this.storage.watch({\n [this.storageKey]: newValue => {\n if (newValue) {\n this.change(newValue)\n .then(() => handler && handler(newValue))\n .catch(err => console.error(\"Error while changing language:\", err));\n }\n },\n });\n\n return this.unwatch.bind(this);\n }\n\n public unwatch(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n\n public lang(): Language {\n return this.locale?.lang() || super.lang();\n }\n\n protected value(key: Extract<keyof LocaleNativeStructure, string>): string | undefined {\n return this.locale?.get(key) || super.value(key);\n }\n\n protected async fetch(lang: Language): Promise<CustomLocaleData> {\n let messages = this.cache.get(lang);\n\n if (!messages) {\n const response: LocaleMessages = await (await fetch(getLocaleFilename(lang))).json();\n\n if (!response || typeof response !== \"object\") {\n throw new Error(`Invalid or empty locale data for \"${lang}\"`);\n }\n\n messages = flattenLocaleMessages(response);\n\n this.cache.set(lang, messages);\n }\n\n return messages;\n }\n}\n","import {LocaleNativeStructure, NativeLocale} from \"@locale/providers\";\nimport {convertLocaleMessageKey, extractLocaleKey} from \"@locale/utils\";\nimport {LocaleNonPluralKeys, LocalePluralKeys, LocaleSubstitutionsFor} from \"@typing/locale\";\n\n/**\n * Translates a given locale key into the corresponding localized string.\n *\n * @template K - A type representing the non-plural keys of the locale structure.\n * @param {K} key - The locale key to be translated.\n * @param {LocaleSubstitutionsFor<LocaleNativeStructure, K>} [substitutions] - Optional substitutions to be applied\n * within the localized string. These are typically placeholders replaced with dynamic values.\n * @returns {string} - The translated string for the given key, with substitutions applied if provided.\n */\nexport const _ = <K extends LocaleNonPluralKeys<LocaleNativeStructure>>(\n key: K,\n substitutions?: LocaleSubstitutionsFor<LocaleNativeStructure, K>\n): string => {\n return NativeLocale.getInstance().trans(key, substitutions);\n};\n\n/**\n * Translates a given locale key into the corresponding localized string\n * based on a specific count for pluralization.\n *\n * @template K - A type representing the non-plural keys of the locale structure.\n * @param {K} key - The locale key to be translated.\n * @param {number} count - The count used to determine the pluralization form.\n * @param {LocaleSubstitutionsFor<LocaleNativeStructure, K>} [substitutions] - Optional substitutions to be applied\n * within the localized string. These are typically placeholders replaced with dynamic values.\n * @returns {string} - The translated string for the given key, adjusted for pluralization and with substitutions applied if provided.\n */\nexport const _c = <K extends LocalePluralKeys<LocaleNativeStructure>>(\n key: K,\n count: number,\n substitutions?: LocaleSubstitutionsFor<LocaleNativeStructure, K>\n): string => {\n return NativeLocale.getInstance().choice(key, count, substitutions);\n};\n\n/**\n * Converts a locale key into a standardized format and logs a warning if the key is not found\n * in the current language's locale keys.\n *\n * @param {Extract<keyof LocaleNativeStructure, string>} key - The locale key to be converted.\n * This key must be a string and exist within the `LocaleNativeStructure`.\n * @returns {string} - The converted locale message key.\n */\nexport const __ = (key: keyof LocaleNativeStructure & string): string => {\n const locale = NativeLocale.getInstance();\n\n if (!locale.keys().has(key)) {\n console.warn(`Locale key \"${key}\" not found in \"${locale.lang()}\" language.`);\n }\n\n return convertLocaleMessageKey(key);\n};\n\n/**\n * Attempts to extract a locale key from the provided string and translates it\n * into the corresponding localized string. If no locale key can be extracted,\n * the original string is returned.\n *\n * @param {string} input - The input string from which a locale key is to be extracted.\n * @returns {string} - The translated string if a locale key is successfully extracted,\n * or the original string if no locale key is found.\n */\nexport const __t = (input: string): string => {\n const localeKey = extractLocaleKey(input);\n\n if (localeKey) {\n return _(localeKey as LocaleNonPluralKeys<LocaleNativeStructure>);\n }\n\n return input;\n};\n"]}
@@ -1,6 +1,7 @@
1
- import { L as LocaleStructure, e as export_default$2, a as Language, b as LocaleNativeStructure, N as NativeLocale, c as LocaleDynamicProvider } from '../NativeLocale-lgR6wNj3.mjs';
2
- export { d as LanguageCodes, f as LocaleDir, h as LocaleKeys, j as LocaleNonPluralKeys, k as LocalePluralKeys, g as LocaleProvider, i as LocaleSubstitutionsFor } from '../NativeLocale-lgR6wNj3.mjs';
1
+ import { e as export_default$2, L as LocaleNativeStructure, N as NativeLocale } from '../NativeLocale-BwVCqh2v.mjs';
3
2
  import { a as Storage } from '../Storage-DSqFjJAp.mjs';
3
+ import { L as LocaleStructure, a as Language, g as LocaleDynamicProvider, c as LocaleNonPluralKeys, d as LocaleSubstitutionsFor, e as LocalePluralKeys } from '../locale-Do4kUmgC.mjs';
4
+ export { h as LanguageCodes, b as LocaleDir, i as LocaleKeys, f as LocaleProvider } from '../locale-Do4kUmgC.mjs';
4
5
  import '../storage-DNeobNzz.mjs';
5
6
 
6
7
  type CustomLocaleData = Record<string, string>;
@@ -32,4 +33,46 @@ declare class export_default<T extends LocaleNativeStructure> extends NativeLoca
32
33
  protected fetch(lang: Language): Promise<CustomLocaleData>;
33
34
  }
34
35
 
35
- export { export_default$2 as AbstractLocale, export_default as DynamicLocale, Language, LocaleDynamicProvider, LocaleNativeStructure, LocaleStructure, NativeLocale };
36
+ /**
37
+ * Translates a given locale key into the corresponding localized string.
38
+ *
39
+ * @template K - A type representing the non-plural keys of the locale structure.
40
+ * @param {K} key - The locale key to be translated.
41
+ * @param {LocaleSubstitutionsFor<LocaleNativeStructure, K>} [substitutions] - Optional substitutions to be applied
42
+ * within the localized string. These are typically placeholders replaced with dynamic values.
43
+ * @returns {string} - The translated string for the given key, with substitutions applied if provided.
44
+ */
45
+ declare const _: <K extends LocaleNonPluralKeys<LocaleNativeStructure>>(key: K, substitutions?: LocaleSubstitutionsFor<LocaleNativeStructure, K>) => string;
46
+ /**
47
+ * Translates a given locale key into the corresponding localized string
48
+ * based on a specific count for pluralization.
49
+ *
50
+ * @template K - A type representing the non-plural keys of the locale structure.
51
+ * @param {K} key - The locale key to be translated.
52
+ * @param {number} count - The count used to determine the pluralization form.
53
+ * @param {LocaleSubstitutionsFor<LocaleNativeStructure, K>} [substitutions] - Optional substitutions to be applied
54
+ * within the localized string. These are typically placeholders replaced with dynamic values.
55
+ * @returns {string} - The translated string for the given key, adjusted for pluralization and with substitutions applied if provided.
56
+ */
57
+ declare const _c: <K extends LocalePluralKeys<LocaleNativeStructure>>(key: K, count: number, substitutions?: LocaleSubstitutionsFor<LocaleNativeStructure, K>) => string;
58
+ /**
59
+ * Converts a locale key into a standardized format and logs a warning if the key is not found
60
+ * in the current language's locale keys.
61
+ *
62
+ * @param {Extract<keyof LocaleNativeStructure, string>} key - The locale key to be converted.
63
+ * This key must be a string and exist within the `LocaleNativeStructure`.
64
+ * @returns {string} - The converted locale message key.
65
+ */
66
+ declare const __: (key: keyof LocaleNativeStructure & string) => string;
67
+ /**
68
+ * Attempts to extract a locale key from the provided string and translates it
69
+ * into the corresponding localized string. If no locale key can be extracted,
70
+ * the original string is returned.
71
+ *
72
+ * @param {string} input - The input string from which a locale key is to be extracted.
73
+ * @returns {string} - The translated string if a locale key is successfully extracted,
74
+ * or the original string if no locale key is found.
75
+ */
76
+ declare const __t: (input: string) => string;
77
+
78
+ export { export_default$2 as AbstractLocale, export_default as DynamicLocale, Language, LocaleDynamicProvider, LocaleNativeStructure, LocaleNonPluralKeys, LocalePluralKeys, LocaleStructure, LocaleSubstitutionsFor, NativeLocale, _, __, __t, _c };
@@ -1,6 +1,7 @@
1
- import { L as LocaleStructure, e as export_default$2, a as Language, b as LocaleNativeStructure, N as NativeLocale, c as LocaleDynamicProvider } from '../NativeLocale-lgR6wNj3.js';
2
- export { d as LanguageCodes, f as LocaleDir, h as LocaleKeys, j as LocaleNonPluralKeys, k as LocalePluralKeys, g as LocaleProvider, i as LocaleSubstitutionsFor } from '../NativeLocale-lgR6wNj3.js';
1
+ import { e as export_default$2, L as LocaleNativeStructure, N as NativeLocale } from '../NativeLocale-C_gjXClM.js';
3
2
  import { a as Storage } from '../Storage-DDIFjeu_.js';
3
+ import { L as LocaleStructure, a as Language, g as LocaleDynamicProvider, c as LocaleNonPluralKeys, d as LocaleSubstitutionsFor, e as LocalePluralKeys } from '../locale-Do4kUmgC.js';
4
+ export { h as LanguageCodes, b as LocaleDir, i as LocaleKeys, f as LocaleProvider } from '../locale-Do4kUmgC.js';
4
5
  import '../storage-DNeobNzz.js';
5
6
 
6
7
  type CustomLocaleData = Record<string, string>;
@@ -32,4 +33,46 @@ declare class export_default<T extends LocaleNativeStructure> extends NativeLoca
32
33
  protected fetch(lang: Language): Promise<CustomLocaleData>;
33
34
  }
34
35
 
35
- export { export_default$2 as AbstractLocale, export_default as DynamicLocale, Language, LocaleDynamicProvider, LocaleNativeStructure, LocaleStructure, NativeLocale };
36
+ /**
37
+ * Translates a given locale key into the corresponding localized string.
38
+ *
39
+ * @template K - A type representing the non-plural keys of the locale structure.
40
+ * @param {K} key - The locale key to be translated.
41
+ * @param {LocaleSubstitutionsFor<LocaleNativeStructure, K>} [substitutions] - Optional substitutions to be applied
42
+ * within the localized string. These are typically placeholders replaced with dynamic values.
43
+ * @returns {string} - The translated string for the given key, with substitutions applied if provided.
44
+ */
45
+ declare const _: <K extends LocaleNonPluralKeys<LocaleNativeStructure>>(key: K, substitutions?: LocaleSubstitutionsFor<LocaleNativeStructure, K>) => string;
46
+ /**
47
+ * Translates a given locale key into the corresponding localized string
48
+ * based on a specific count for pluralization.
49
+ *
50
+ * @template K - A type representing the non-plural keys of the locale structure.
51
+ * @param {K} key - The locale key to be translated.
52
+ * @param {number} count - The count used to determine the pluralization form.
53
+ * @param {LocaleSubstitutionsFor<LocaleNativeStructure, K>} [substitutions] - Optional substitutions to be applied
54
+ * within the localized string. These are typically placeholders replaced with dynamic values.
55
+ * @returns {string} - The translated string for the given key, adjusted for pluralization and with substitutions applied if provided.
56
+ */
57
+ declare const _c: <K extends LocalePluralKeys<LocaleNativeStructure>>(key: K, count: number, substitutions?: LocaleSubstitutionsFor<LocaleNativeStructure, K>) => string;
58
+ /**
59
+ * Converts a locale key into a standardized format and logs a warning if the key is not found
60
+ * in the current language's locale keys.
61
+ *
62
+ * @param {Extract<keyof LocaleNativeStructure, string>} key - The locale key to be converted.
63
+ * This key must be a string and exist within the `LocaleNativeStructure`.
64
+ * @returns {string} - The converted locale message key.
65
+ */
66
+ declare const __: (key: keyof LocaleNativeStructure & string) => string;
67
+ /**
68
+ * Attempts to extract a locale key from the provided string and translates it
69
+ * into the corresponding localized string. If no locale key can be extracted,
70
+ * the original string is returned.
71
+ *
72
+ * @param {string} input - The input string from which a locale key is to be extracted.
73
+ * @returns {string} - The translated string if a locale key is successfully extracted,
74
+ * or the original string if no locale key is found.
75
+ */
76
+ declare const __t: (input: string) => string;
77
+
78
+ export { export_default$2 as AbstractLocale, export_default as DynamicLocale, Language, LocaleDynamicProvider, LocaleNativeStructure, LocaleNonPluralKeys, LocalePluralKeys, LocaleStructure, LocaleSubstitutionsFor, NativeLocale, _, __, __t, _c };
@@ -68,6 +68,7 @@ var LocaleNestedKeysSeparator = ".";
68
68
  var LocaleKeysSeparator = "_";
69
69
  var LocaleValuesSeparator = "|";
70
70
  var LocaleCustomKeyForLanguage = "locale";
71
+ var LocaleKeyMarker = "@";
71
72
  var LanguageCodes = new Set(Object.values(Language));
72
73
 
73
74
  // src/locale/providers/AbstractLocale.ts
@@ -87,7 +88,7 @@ var AbstractLocale_default = class {
87
88
  return key;
88
89
  }
89
90
  if (substitutions) {
90
- return template.replace(/{{(.*?)}}/g, (_, placeholder) => {
91
+ return template.replace(/{{(.*?)}}/g, (_2, placeholder) => {
91
92
  if (placeholder in substitutions) {
92
93
  return substitutions[placeholder].toString();
93
94
  }
@@ -180,6 +181,17 @@ var getLocaleFilename = (lang) => {
180
181
  var convertLocaleKey = (key) => {
181
182
  return key.replaceAll(LocaleNestedKeysSeparator, LocaleKeysSeparator);
182
183
  };
184
+ var convertLocaleMessageKey = (key) => {
185
+ return `__MSG_${convertLocaleKey(key)}__`;
186
+ };
187
+ var extractLocaleKey = (key) => {
188
+ if (isLocaleKey(key)) {
189
+ return key.substring(1);
190
+ }
191
+ };
192
+ var isLocaleKey = (key) => {
193
+ return (key == null ? void 0 : key.startsWith(LocaleKeyMarker)) ?? false;
194
+ };
183
195
  var flattenLocaleMessages = (messages) => {
184
196
  return Object.fromEntries(Object.entries(messages).map(([key, value]) => [key, value.message]));
185
197
  };
@@ -519,6 +531,28 @@ var DynamicLocale_default = class extends NativeLocale {
519
531
  }
520
532
  };
521
533
 
522
- export { AbstractLocale_default as AbstractLocale, DynamicLocale_default as DynamicLocale, Language, LanguageCodes, LocaleDir, NativeLocale };
534
+ // src/locale/helpers.ts
535
+ var _ = (key, substitutions) => {
536
+ return NativeLocale.getInstance().trans(key, substitutions);
537
+ };
538
+ var _c = (key, count, substitutions) => {
539
+ return NativeLocale.getInstance().choice(key, count, substitutions);
540
+ };
541
+ var __ = (key) => {
542
+ const locale = NativeLocale.getInstance();
543
+ if (!locale.keys().has(key)) {
544
+ console.warn(`Locale key "${key}" not found in "${locale.lang()}" language.`);
545
+ }
546
+ return convertLocaleMessageKey(key);
547
+ };
548
+ var __t = (input) => {
549
+ const localeKey = extractLocaleKey(input);
550
+ if (localeKey) {
551
+ return _(localeKey);
552
+ }
553
+ return input;
554
+ };
555
+
556
+ export { AbstractLocale_default as AbstractLocale, DynamicLocale_default as DynamicLocale, Language, LanguageCodes, LocaleDir, NativeLocale, _, __, __t, _c };
523
557
  //# sourceMappingURL=index.js.map
524
558
  //# sourceMappingURL=index.js.map