{"version":3,"file":"ngx-translate-phraseapp.mjs","sources":["../../src/config.ts","../../src/compiler.ts","../../src/ngx-translate-phraseapp.ts"],"sourcesContent":["type RequiredConfigOptions = \"projectId\" | \"accountId\";\n\nexport type PhraseConfig = Partial<{\n  phraseEnabled: boolean;\n  baseUrl: string;\n  profileUrl: string;\n  apiBaseUrl: string;\n  oauthEndpointUrl: string;\n  helpUrl: string;\n  logoUrl: string;\n  stylesheetUrl: string;\n  version: string;\n  priorityLocales: string[];\n  projectId: string;\n  accountId: string;\n  branch: string;\n  ajaxObserver: boolean;\n  debugMode: boolean;\n  prefix: string;\n  suffix: string;\n  autoLowercase: boolean;\n  useOldICE: boolean;\n  forceLocale: boolean;\n  loginDialogMessage: string;\n  datacenter: \"eu\" | \"us\";\n  autoLogin: {\n    perform: boolean;\n    email: string;\n    password: string;\n  };\n  sso: {\n    enabled: boolean;\n    enforced: boolean;\n    provider: string;\n    identifier: string;\n  };\n  fullReparse: boolean;\n  sanitize?: (content: string) => string;\n  origin?: string;\n  hidingClasses: string[];\n}>;\n\ndeclare global {\n  interface Window {\n    PHRASEAPP_ENABLED: PhraseConfig[\"phraseEnabled\"];\n    PHRASEAPP_CONFIG: PhraseConfig;\n  }\n}\n\nlet phraseAppEditor = false;\n\nexport function initializePhraseAppEditor(\n  config: PhraseConfig & Required<Pick<PhraseConfig, RequiredConfigOptions>>\n): void {\n  if (phraseAppEditor) return;\n  phraseAppEditor = true;\n\n  const defaultConfig: PhraseConfig = {\n    phraseEnabled: false,\n    prefix: \"{{__\",\n    suffix: \"__}}\",\n    useOldICE: false,\n    fullReparse: true,\n  };\n\n  window.PHRASEAPP_ENABLED = config.phraseEnabled || false;\n  window.PHRASEAPP_CONFIG = {\n    ...defaultConfig,\n    ...config,\n    origin: \"ngx-translate-phraseapp\",\n  };\n\n  if (config.phraseEnabled) {\n    const phraseapp = document.createElement(\"script\");\n    phraseapp.async = true;\n\n    if (!config.useOldICE) {\n      phraseapp.type = \"module\";\n      phraseapp.src = `https://cdn.phrase.com/strings/plugins/editor/latest/ice/index.js`;\n    } else {\n      phraseapp.type = \"text/javascript\";\n      phraseapp.src = `https://phrase.com/assets/in-context-editor/2.0/app.js?${new Date().getTime()}`;\n    }\n    var scriptEl = document.getElementsByTagName(\"script\")[0];\n    if (scriptEl?.parentNode) {\n      scriptEl.parentNode.insertBefore(phraseapp, scriptEl);\n    } else {\n      document.body.appendChild(phraseapp);\n    }\n  }\n}\n\nexport function isPhraseEnabled(): boolean {\n  return !!window.PHRASEAPP_ENABLED;\n}\n\nexport function escapeId(id: string): string {\n  let config = window.PHRASEAPP_CONFIG;\n  return config.prefix + \"phrase_\" + id + config.suffix;\n}\n","import { TranslateCompiler, InterpolatableTranslation, InterpolatableTranslationObject } from '@ngx-translate/core';\nimport { escapeId, isPhraseEnabled } from './config';\n\n\nexport class PhraseAppCompiler extends TranslateCompiler {\n    constructor() {\n        super();\n    }\n\n    compile(value: string, lang: string): InterpolatableTranslation {\n        if (!isPhraseEnabled()) {\n            return value;\n        }\n\n        return escapeId(value);\n    }\n\n    compileTranslations(translations: any, lang: string): InterpolatableTranslationObject {\n        if (!isPhraseEnabled()) {\n            return translations;\n        }\n\n        translations = this.flatten(translations);\n        const escapedTranslations: any = {};\n        Object.keys(translations).forEach((key, _) => {\n            escapedTranslations[key] = escapeId(key);\n        });\n\n        return escapedTranslations;\n    }\n    flatten(object: Object): Object {\n        const separator = '.'\n        const isValidObject = (value: any = {}): boolean => {\n            if (!value) {\n                return false;\n            }\n\n            const isArray = Array.isArray(value);\n            const isΟbject = Object.prototype.toString.call(value) === '[object Object]';\n            const hasKeys = !!Object.keys(value).length;\n\n            return !isArray && isΟbject && hasKeys;\n        };\n\n        const walker = (child: any = {}, path: Array<string> = []): Object => {\n            return Object.assign({}, ...Object.keys(child).map(key => isValidObject(child[key])\n                ? walker(child[key], path.concat([key]))\n                : { [path.concat([key]).join(separator)]: child[key] })\n            );\n        };\n\n        return Object.assign({}, walker(object));\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}