{"version":3,"sources":["../../../src/types/config.ts"],"sourcesContent":["import type { Locales } from './locales';\n\nexport type StrictMode = 'strict' | 'inclusive' | 'loose';\n\n/**\n * Configuration for internationalization settings\n */\nexport type InternationalizationConfig = {\n  /**\n   * Locales available in the application\n   *\n   * Default: [Locales.ENGLISH]\n   *\n   * You can define a list of available locales to support in the application.\n   */\n  locales: Locales[];\n\n  /**\n   * Locales required by TypeScript to ensure strong implementations of internationalized content using typescript.\n   *\n   * Default: []\n   *\n   * If empty, all locales are required in `strict` mode.\n   *\n   * Ensure required locales are also defined in the `locales` field.\n   */\n  requiredLocales: Locales[];\n\n  /**\n   * Ensure strong implementations of internationalized content using typescript.\n   * - If set to \"strict\", the translation `t` function will require each declared locales to be defined. If one locale is missing, or if a locale is not declared in your config, it will throw an error.\n   * - If set to \"inclusive\", the translation `t` function will require each declared locales to be defined. If one locale is missing, it will throw a warning. But will accept if a locale is not declared in your config, but exist.\n   * - If set to \"loose\", the translation `t` function will accept any existing locale.\n   *\n   * Default: \"inclusive\"\n   */\n  strictMode: StrictMode;\n\n  /**\n   * Default locale of the application for fallback\n   *\n   * Default: Locales.ENGLISH\n   *\n   * Used to specify a fallback locale in case no other locale is set.\n   */\n  defaultLocale: Locales;\n};\n\nexport type ServerSetCookieRule = 'always' | 'never';\n\n/**\n * Configuration for middleware behaviors\n */\nexport type MiddlewareConfig = {\n  /**\n   * Header name to get the locale from the request\n   *\n   * Default: 'x-intlayer-locale'\n   *\n   * The HTTP header key used to determine the current locale.\n   */\n  headerName: string;\n\n  /**\n   * Cookie name to store the locale information\n   *\n   * Default: 'INTLAYER_LOCALE'\n   *\n   * The cookie key where the locale information is stored.\n   */\n  cookieName: string;\n\n  /**\n   * Prefix default prefix the default locale to the path as other locales.\n   *\n   * Example with prefixDefault = true and defaultLocale = 'en':\n   * path = /en/dashboard or /fr/dashboard\n   *\n   * Example with prefixDefault = false and defaultLocale = 'en':\n   * path = /dashboard or /fr/dashboard\n   *\n   *\n   * Default: false\n   */\n  prefixDefault: boolean;\n\n  /**\n   * Base path for application URLs\n   *\n   * Default: ''\n   *\n   * Defines the base path where the application is accessible from.\n   */\n  basePath: string;\n\n  /**\n   * Strategy for setting the locale cookie on the server\n   *\n   * Default: 'always'\n   *\n   * This setting controls when the server sets the locale cookie. It can either set the cookie on every request or never set it.\n   */\n  serverSetCookie: ServerSetCookieRule;\n\n  /**\n   * Indicates if no prefix should be used in the URL for locale\n   *\n   * Default: false\n   *\n   * If true, no locale-based prefix is used in the URL.\n   */\n  noPrefix: boolean;\n};\n\n/**\n * Configuration for intlayer editor\n */\nexport type EditorConfig = {\n  /**\n   * URL of the application. Used to restrict the origin of the editor for security reasons.\n   *\n   * > '*' means that the editor is accessible from any origin\n   *\n   * Default: '*'\n   */\n  applicationURL: string;\n\n  /**\n   * URL of the editor server. Used to restrict the origin of the editor for security reasons.\n   *\n   * > '*' means that the editor is accessible from any origin\n   *\n   * Default: 'http://localhost:8000'\n   */\n  editorURL: string;\n\n  /**\n   * URL of the CMS server. Used to restrict the origin of the editor for security reasons.\n   *\n   * Default: 'https://intlayer.org'\n   */\n  cmsURL: string;\n\n  /**\n   * URL of the backend\n   *\n   * Default: 'https://back.intlayer.org'\n   *\n   * The URL of the backend server.\n   */\n  backendURL: string;\n\n  /**\n   * Indicates if the application interact with the visual editor\n   *\n   * Default: true;\n   *\n   * If true, the editor will be able to interact with the application.\n   * If false, the editor will not be able to interact with the application.\n   * In any case, the editor can only be enabled by the visual editor.\n   * Disabling the editor for specific environments is a way to enforce the security.\n   *\n   * Usage:\n   * ```js\n   * {\n   *  // Other configurations\n   *  editor: {\n   *   enabled: process.env.NODE_ENV !== 'production',\n   *  }\n   * };\n   * ```\n   *\n   */\n  enabled: boolean;\n\n  /** Port of the editor server\n   *\n   * Default: 8000\n   */\n  port: number;\n\n  /**\n   * clientId and clientSecret allow the intlayer packages to authenticate with the backend using oAuth2 authentication.\n   * An access token is use to authenticate the user related to the project.\n   * To get an access token, go to https://intlayer.org/dashboard/project and create an account.\n   *\n   * Default: undefined\n   *\n   * > Important: The clientId and clientSecret should be kept secret and not shared publicly. Please ensure to keep them in a secure location, such as environment variables.\n   */\n  clientId?: string;\n\n  /**\n   * clientId and clientSecret allow the intlayer packages to authenticate with the backend using oAuth2 authentication.\n   * An access token is use to authenticate the user related to the project.\n   * To get an access token, go to https://intlayer.org/dashboard/project and create an account.\n   *\n   * Default: undefined\n   *\n   * > Important: The clientId and clientSecret should be kept secret and not shared publicly. Please ensure to keep them in a secure location, such as environment variables.\n   */\n  clientSecret?: string;\n\n  /**\n   * Strategy for prioritizing dictionaries. If a dictionary is both present online and locally, the content will be merge.\n   * However, is a field is defined in both dictionary, this setting determines which fields takes the priority over the other.\n   *\n   * Default: 'local_first'\n   *\n   * The strategy for prioritizing dictionaries. It can be either 'local_first' or 'distant_first'.\n   * - 'local_first': The first dictionary found in the locale is used.\n   * - 'distant_first': The first dictionary found in the distant locales is used.\n   */\n  dictionaryPriorityStrategy: 'local_first' | 'distant_first';\n\n  /**\n   * Indicates if the application should hot reload the locale configurations when a change is detected.\n   * For example, when a new dictionary is added or updated, the application will update the content tu display in the page.\n   *\n   * The hot reload is only available for clients of the `enterprise` plan.\n   *\n   * Default: false\n   */\n  hotReload: boolean;\n};\n\nexport type AiConfig = {\n  /**\n   * Provider\n   *\n   * The provider to use for the AI features of Intlayer.\n   *\n   * Available providers:\n   * - 'openai'\n   * - 'anthropic'\n   * - 'mistral'\n   * - 'deepseek'\n   * - 'gemini'\n   *\n   * Default: 'openai'\n   */\n  provider?: string;\n\n  /**\n   * API model\n   *\n   * The model to use for the AI features of Intlayer.\n   *\n   * Example: 'gpt-4o-2024-11-20'\n   *\n   */\n  model?: string;\n\n  /**\n   *  temperature\n   *\n   * The temperature to use for the AI features of Intlayer.\n   * The temperature controls the randomness of the AI's responses.\n   * A higher temperature will make the AI more creative and less predictable.\n   *\n   * Example: 0.1\n   */\n  temperature?: number;\n\n  /**\n   * API key\n   *\n   * Use your own OpenAI API key to use the AI features of Intlayer.\n   * If you don't have an OpenAI API key, you can get one for free at https://openai.com/api/.\n   *\n   */\n  apiKey?: string;\n\n  /**\n   * Application context\n   *\n   * The context of the application to use for the AI features of Intlayer.\n   *\n   * Example: 'This is a website for a company that sells products online.'\n   */\n  applicationContext?: string;\n};\n\nexport type BuildConfig = {\n  /**\n   * Indicates if the build should be optimized\n   *\n   * Default: process.env.NODE_ENV === 'production'\n   *\n   * If true, the build will be optimized.\n   * If false, the build will not be optimized.\n   *\n   * Intlayer will replace all calls of dictionaries to optimize chunking. That way the final bundle will import only the dictionaries that are used.\n   * All imports will stay as static import to avoid async processing when loading the dictionaries.\n   *\n   * Note:\n   * - Intlayer will replace all call of `useIntlayer` with `useDictionary`, `getIntlayer` with `getDictionary`.\n   * - This option relies on the `@intlayer/babel` and `@intlayer/swc` plugins.\n   * - Ensure all keys are declared statically in the `useIntlayer` calls. e.g. `useIntlayer('navbar')`.\n   */\n  optimize: boolean;\n\n  /**\n   * Indicates if the dynamic import should be activated\n   *\n   * Default: false\n   *\n   * By default, when a dictionary is loaded, it imports content for all locales as it's imported statically.\n   * If this option is set to true, only the current locale’s dictionary content\n   * will be fetched via dynamic import. In that case, Intlayer will replace all\n   * calls to `useIntlayer` with `useDynamicDictionary`.\n   *\n   * Note:\n   * - Dynamic imports rely on React Suspense and may slightly impact rendering performance. But if desabled all locales will be loaded at once, even if they are not used.\n   * - This option relies on the `@intlayer/babel` and `@intlayer/swc` plugins.\n   * - Ensure all keys are declared statically in the `useIntlayer` calls. e.g. `useIntlayer('navbar')`.\n   * - This option will be ignored if `optimize` is disabled.\n   */\n  activateDynamicImport: boolean;\n\n  /**\n   * Pattern to traverse the code to optimize.\n   *\n   * Allows to avoid to traverse the code that is not relevant to the optimization.\n   * Improve build performance.\n   *\n   * Default: ['**\\/*.{js,ts,mjs,cjs,jsx,tsx,mjx,cjx}', '!**\\/node_modules/**']\n   *\n   * Example: `['src/**\\/*.{ts,tsx}', '../ui-library/**\\/*.{ts,tsx}', '!**\\/node_modules/**']`\n   *\n   * Note:\n   * - This option will be ignored if `optimize` is disabled.\n   * - Use glob pattern.\n   */\n  traversePattern: string[];\n};\n\n/**\n * Custom configuration that can be provided to override default settings\n */\nexport type CustomIntlayerConfig = {\n  /**\n   * Custom internationalization configuration\n   */\n  internationalization?: Partial<InternationalizationConfig>;\n\n  /**\n   * Custom middleware configuration\n   */\n  middleware?: Partial<MiddlewareConfig>;\n\n  /**\n   * Custom content configuration\n   */\n  content?: Partial<ContentConfig>;\n\n  /**\n   * Custom editor configuration\n   */\n  editor?: Partial<EditorConfig>;\n\n  /**\n   * Custom middleware configuration\n   */\n  log?: Partial<LogConfig>;\n\n  /**\n   * Custom AI configuration\n   */\n  ai?: Partial<AiConfig>;\n\n  /**\n   * Custom build configuration\n   */\n  build?: Partial<BuildConfig>;\n};\n\n/**\n * Combined configuration for internationalization, middleware, and content\n */\nexport type IntlayerConfig = {\n  /**\n   * Internationalization configuration\n   */\n  internationalization: InternationalizationConfig;\n\n  /**\n   * Middleware configuration\n   */\n  middleware: MiddlewareConfig;\n\n  /**\n   * Content configuration\n   */\n  content: ContentConfig;\n\n  /**\n   * Intlayer editor configuration\n   */\n  editor: EditorConfig;\n\n  /**\n   * Logger configuration\n   */\n  log: LogConfig;\n\n  /**\n   * AI configuration\n   */\n  ai?: Partial<AiConfig>;\n\n  /**\n   * Build configuration\n   */\n  build: BuildConfig;\n};\n\n/**\n * Base configuration for content handling\n */\nexport type BaseContentConfig = {\n  /**\n   * File extensions of content to look for\n   *\n   * Default: ['.content.ts', '.content.js', '.content.cjs', '.content.mjs', '.content.json', '.content.tsx', '.content.jsx']\n   *\n   * List of file extensions to scan for content.\n   */\n  fileExtensions: string[];\n\n  /**\n   * Absolute path of the project's base directory\n   *\n   * Default: process.cwd()\n   *\n   * The root directory of the project, typically used for resolving other paths.\n   */\n  baseDir: string;\n\n  /**\n   * Directories to be excluded from content processing\n   *\n   * Default: ['node_modules']\n   *\n   * A list of directories to exclude from content processing.\n   */\n  excludedPath: string[];\n\n  /**\n   * Indicates if Intlayer should watch for changes in the content declaration files in the app to rebuild the related dictionaries.\n   *\n   * Default: process.env.NODE_ENV === 'development'\n   */\n  watch: boolean;\n};\n\nexport type DictionaryOutput = 'intlayer' | 'i18next' | 'react-intl';\n\n/**\n * Configuration derived based on the base content configuration\n */\nexport type BaseDerivedConfig = {\n  /**\n   * Directory where the content is stored, relative to the base directory\n   *\n   * Default: ['src']\n   *\n   * Derived content directory based on the base configuration.\n   */\n  contentDir: string[];\n\n  /**\n   * Directory where the results are stored, relative to the base directory\n   *\n   * Default: .intlayer/dictionary\n   *\n   * Derived results directory based on the base configuration.\n   */\n  dictionariesDir: string;\n\n  /**\n   * Directory for module augmentation, relative to the base directory\n   *\n   * Default: .intlayer/types\n   *\n   * Defines the derived path for module augmentation.\n   */\n  moduleAugmentationDir: string;\n\n  /**\n   * Type of dictionary to use as an output\n   *\n   * Default: ['intlayer']\n   *\n   * The type of dictionary to use as an output. It can be either 'intlayer' or 'i18next'.\n   *\n   * Note:\n   * - 'i18next' is not yet ensure a 1:1 mapping with the i18next library.\n   * - Removing 'intlayer' will break the compatibility with react-intlayer or next-intlayer\n   *\n   */\n  dictionaryOutput: DictionaryOutput[];\n};\n\n/**\n * Configuration derived based on the result directory\n */\nexport type ResultDirDerivedConfig = {\n  /**\n   * Directory where unmerged dictionaries are stored, relative to the result directory\n   *\n   * Default: .intlayer/unmerged_dictionary\n   *\n   * Specifies the derived path for unmerged dictionaries relative to the result directory.\n   */\n  unmergedDictionariesDir: string;\n\n  /**\n   * Directory where final dictionaries are stored, relative to the result directory\n   *\n   * Default: .intlayer/dictionary\n   *\n   * Specifies the derived path for dictionaries relative to the result directory.\n   */\n  dictionariesDir: string;\n\n  /**\n   * Directory where dynamic dictionaries are stored, relative to the result directory\n   *\n   * Default: .intlayer/dynamic_dictionary\n   *\n   * Specifies the derived path for dynamic dictionaries relative to the result directory.\n   */\n  dynamicDictionariesDir: string;\n\n  /**\n   * Directory where dictionaries are stored, relative to the result directory\n   *\n   * Default: i18next_resources\n   *\n   * Specifies the derived path for dictionaries relative to the result directory.\n   *\n   * Note:\n   * - Ensure the i18n dictionaries output includes i18next to build the dictionaries for i18next\n   */\n  i18nextResourcesDir: string;\n\n  /**\n   * Directory where dictionaries are stored, relative to the result directory\n   *\n   * Default: intl_messages\n   *\n   * Specifies the derived path for dictionaries relative to the result directory.\n   *\n   * Note:\n   * - Ensure the dictionaries output includes 'react-intl' to build the dictionaries for react-intl\n   */\n  reactIntlMessagesDir: string;\n\n  /**\n   * Directory where dictionary types are stored, relative to the result directory\n   *\n   * Default: .intlayer/types\n   *\n   * Specifies the derived path for dictionary types relative to the result directory.\n   */\n  typesDir: string;\n\n  /**\n   * Directory where the main files are stored, relative to the result directory\n   *\n   * Default: .intlayer/main\n   *\n   * Specifies the derived path for the main files relative to the result directory.\n   */\n  mainDir: string;\n\n  /**\n   * Directory where the configuration files are stored, relative to the result directory\n   *\n   * Default: .intlayer/config\n   *\n   * Specifies the derived path for the configuration files relative to the result directory.\n   */\n  configDir: string;\n};\n\n/**\n * Configuration for content patterns\n */\nexport type PatternsContentConfig = {\n  /**\n   * Patterns of files to watch for changes\n   *\n   * Default: ['/**\\/*.content.ts', '/**\\/*.content.js', '/**\\/*.content.json', '/**\\/*.content.cjs', '/**\\/*.content.mjs', '/**\\/*.content.tsx', '/**\\/*.content.jsx']\n   *\n   * Defines file patterns for content to watch for changes.\n   */\n  watchedFilesPattern: string[];\n\n  /**\n   * Patterns of files to watch for changes including the relative path\n   *\n   * Default: ['src/**\\/*.content.ts', 'src/**\\/*.content.js', 'src/**\\/*.content.json', 'src/**\\/*.content.cjs', 'src/**\\/*.content.mjs', 'src/**\\/*.content.tsx', 'src/**\\/*.content.jsx']\n   *\n   * Specifies the file patterns for content to watch, including relative paths.\n   */\n  watchedFilesPatternWithPath: string[];\n\n  /**\n   * Pattern for output files including the relative path\n   *\n   * Default: '{{dictionariesDir}}/**\\/*.json'\n   *\n   * Defines the pattern for output files, including the relative path.\n   */\n  outputFilesPatternWithPath: string;\n};\n\n// @TODO: Implement exclusion of non configurable fields, to not allow them to be set in the config\n/**\n * General configuration derived from the config file\n */\nexport type ContentConfig = BaseContentConfig &\n  BaseDerivedConfig &\n  ResultDirDerivedConfig &\n  PatternsContentConfig;\n\nexport type LogConfig = {\n  /**\n   * Indicates if the logger is enabled\n   *\n   * Default: true\n   *\n   * If 'default', the logger is enabled and can be used.\n   * If 'verbose', the logger will be enabled and can be used, but will log more information.\n   * If 'disabled', the logger is disabled and cannot be used.\n   */\n  mode: 'default' | 'verbose' | 'disabled';\n\n  /**\n   * Prefix of the logger\n   *\n   * Default: '[intlayer]'\n   *\n   * The prefix of the logger.\n   */\n  prefix: string;\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}