{"version":3,"file":"index.cjs","sources":["../src/constants.ts","../src/utils/identify.ts","../src/utils/language/module.ts","../src/utils/template.ts","../src/module.ts","../src/store/memory.ts"],"sourcesContent":["/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport const LOCALE_DEFAULT = 'en';\nexport const STORE_DEFAULT = Symbol.for('default');\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from 'smob';\nimport type { LinesRecord } from '../types';\n\nexport function isLineRecord(value: unknown) : value is LinesRecord {\n    if (!isObject(value)) {\n        return false;\n    }\n\n    const ob = value as Record<string, any>;\n    const keys = Object.keys(ob);\n    for (let i = 0; i < keys.length; i++) {\n        /* istanbul ignore next */\n        if (\n            typeof ob[keys[i]] !== 'string' &&\n            !isLineRecord(ob[keys[i]])\n        ) {\n            return false;\n        }\n    }\n\n    return true;\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty } from 'smob';\nimport codes from './data.json';\n\nexport function isISO639LanguageCode(input: string) {\n    return hasOwnProperty(codes, input);\n}\n\nexport function isBCP47LanguageCode(input: string) {\n    const hyphenIndex = input.indexOf('-');\n    if (hyphenIndex !== -1) {\n        input = input.substring(0, hyphenIndex);\n    }\n\n    return isISO639LanguageCode(input);\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function template(\n    str: string,\n    data: Record<string, any>,\n    regex = /\\{\\{(.+?)\\}\\}/g,\n) : string {\n    return Array.from(str.matchAll(regex))\n        .reduce((\n            acc,\n            match,\n        ) => {\n            if (typeof data[match[1]] !== 'undefined') {\n                return acc.replace(match[0], data[match[1]]);\n            }\n\n            return acc;\n        }, str);\n}\n","/*\n * Copyright (c) 2022.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ConfigInput } from './config';\nimport { LOCALE_DEFAULT } from './constants';\nimport type { Store } from './store';\nimport type {\n    GetContext,\n} from './types';\nimport {\n    template,\n} from './utils';\n\nexport class Ilingo {\n    public readonly stores : Set<Store>;\n\n    protected locale: string;\n\n    // ----------------------------------------------------\n\n    constructor(input: ConfigInput = {}) {\n        this.locale = input.locale || LOCALE_DEFAULT;\n\n        this.stores = new Set<Store>();\n        if (input.store) {\n            this.stores.add(input.store);\n        }\n    }\n\n    // ----------------------------------------------------\n\n    merge(instance: Ilingo) {\n        const ownEntries = Array.from(this.stores.values());\n        const foreignEntries = Array.from(instance.stores.values());\n\n        let foreignEntriesIndex = -1;\n        for (let i = 0; i < foreignEntries.length; i++) {\n            foreignEntriesIndex = -1;\n            for (let j = 0; j < ownEntries.length; j++) {\n                if (ownEntries[j] === foreignEntries[i]) {\n                    foreignEntriesIndex = j;\n                    break;\n                }\n            }\n\n            if (foreignEntriesIndex === -1) {\n                this.stores.add(foreignEntries[i]);\n            }\n        }\n    }\n\n    // ----------------------------------------------------\n\n    setLocale(key: string) {\n        this.locale = key;\n    }\n\n    resetLocale() {\n        this.locale = LOCALE_DEFAULT;\n    }\n\n    getLocale() : string {\n        return this.locale;\n    }\n\n    // ----------------------------------------------------\n\n    async getLocales() : Promise<string[]> {\n        const locales : string[] = [];\n        const entries = this.stores.values();\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const store = entries.next();\n            if (store.done) {\n                break;\n            }\n\n            locales.push(...await store.value.getLocales());\n        }\n        return Array.from(new Set(locales));\n    }\n\n    // ----------------------------------------------------\n\n    async get(ctx: GetContext) : Promise<string | undefined> {\n        let message : string | undefined;\n        const entries = this.stores.values();\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            const store = entries.next();\n            if (store.done) {\n                break;\n            }\n\n            message = await store.value.get({\n                locale: ctx.locale || this.getLocale(),\n                group: ctx.group,\n                key: ctx.key,\n            });\n\n            if (message) {\n                break;\n            }\n        }\n\n        if (!message) {\n            return undefined;\n        }\n\n        return this.format(message, ctx.data || {});\n    }\n\n    // ----------------------------------------------------\n\n    format(input: string, data: Record<string, any>) {\n        return template(input, data || {});\n    }\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { getPathValue, setPathValue } from 'pathtrace';\nimport type { LocalesRecord } from '../types';\nimport type {\n    MemoryStoreOptions,\n    Store,\n    StoreGetContext,\n    StoreSetContext,\n} from './types';\n\nexport class MemoryStore implements Store {\n    protected data : LocalesRecord;\n\n    constructor(options: MemoryStoreOptions) {\n        this.data = options.data;\n    }\n\n    async get(context: StoreGetContext): Promise<string | undefined> {\n        if (\n            !this.data[context.locale] ||\n            !this.data[context.locale][context.group]\n        ) {\n            return undefined;\n        }\n\n        const output = getPathValue(\n            this.data[context.locale][context.group],\n            context.key,\n        );\n\n        if (typeof output === 'string') {\n            return output;\n        }\n\n        return undefined;\n    }\n\n    async set(context: StoreSetContext): Promise<void> {\n        this.initLines(context.group, context.locale);\n\n        setPathValue(\n            this.data[context.locale][context.group],\n            context.key,\n            context.value,\n        );\n    }\n\n    protected initLines(group: string, locale: string) {\n        if (typeof this.data[locale] === 'undefined') {\n            this.data[locale] = {};\n        }\n\n        if (typeof this.data[locale][group] === 'undefined') {\n            this.data[locale][group] = {};\n        }\n    }\n\n    async getLocales(): Promise<string[]> {\n        return Object.keys(this.data);\n    }\n}\n"],"names":["LOCALE_DEFAULT","isLineRecord","value","isObject","ob","keys","Object","i","length","isISO639LanguageCode","input","hasOwnProperty","codes","isBCP47LanguageCode","hyphenIndex","indexOf","substring","template","str","data","regex","Array","from","matchAll","reduce","acc","match","replace","Ilingo","merge","instance","ownEntries","stores","values","foreignEntries","foreignEntriesIndex","j","add","setLocale","key","locale","resetLocale","getLocale","getLocales","locales","entries","store","next","done","push","Set","get","ctx","message","group","undefined","format","constructor","MemoryStore","context","output","getPathValue","set","initLines","setPathValue","options"],"mappings":"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"}