{"version":3,"file":"index.cjs","names":["ANSIColors","exists","x","readFileFromRoot","writeFileToRoot","v","parseJSONWithComments","ensureDirectory","findTsConfigFiles","initConfig","updateViteConfig","updateNextConfig","updateAstroConfig","updateNuxtConfig"],"sources":["../../../src/init/index.ts"],"sourcesContent":["import { join } from 'node:path';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, colorizePath, logger, v, x } from '@intlayer/config/logger';\nimport { getConfiguration } from '@intlayer/config/node';\n\nimport { getAlias } from '@intlayer/config/utils';\nimport { initConfig } from '../initConfig';\nimport {\n  ensureDirectory,\n  exists,\n  findTsConfigFiles,\n  parseJSONWithComments,\n  readFileFromRoot,\n  updateAstroConfig,\n  updateNextConfig,\n  updateNuxtConfig,\n  updateViteConfig,\n  writeFileToRoot,\n} from './utils';\n\n/**\n * Documentation URL Constants\n */\nconst DocumentationRouter = {\n  NextJS: 'https://intlayer.org/doc/environment/nextjs.md',\n  NextJS_15: 'https://intlayer.org/doc/environment/nextjs/15.md',\n  NextJS_14: 'https://intlayer.org/doc/environment/nextjs/14.md',\n  CRA: 'https://intlayer.org/doc/environment/create-react-app.md',\n  Astro: 'https://intlayer.org/doc/environment/astro.md',\n  ViteAndReact: 'https://intlayer.org/doc/environment/vite-and-react.md',\n  ViteAndReact_ReactRouterV7:\n    'https://intlayer.org/doc/environment/vite-and-react/react-router-v7.md',\n  ViteAndReact_ReactRouterV7_FSRoutes:\n    'https://intlayer.org/doc/environment/vite-and-react/react-router-v7-fs-routes.md',\n  ViteAndVue: 'https://intlayer.org/doc/environment/vite-and-vue.md',\n  ViteAndSolid: 'https://intlayer.org/doc/environment/vite-and-solid.md',\n  ViteAndSvelte: 'https://intlayer.org/doc/environment/vite-and-svelte.md',\n  ViteAndPreact: 'https://intlayer.org/doc/environment/vite-and-preact.md',\n  TanStackRouter: 'https://intlayer.org/doc/environment/tanstack.md',\n  NuxtAndVue: 'https://intlayer.org/doc/environment/nuxt-and-vue.md',\n  Angular: 'https://intlayer.org/doc/environment/angular.md',\n  SvelteKit: 'https://intlayer.org/doc/environment/sveltekit.md',\n  ReactNativeAndExpo:\n    'https://intlayer.org/doc/environment/react-native-and-expo.md',\n  Lynx: 'https://intlayer.org/doc/environment/lynx-and-react.md',\n  Express: 'https://intlayer.org/doc/environment/express.md',\n  NestJS: 'https://intlayer.org/doc/environment/nestjs.md',\n  Fastify: 'https://intlayer.org/doc/environment/fastify.md',\n  Default: 'https://intlayer.org/doc/get-started',\n\n  // Intlayer Language Server (Go-to-Definition from getter keys to .content files)\n  LSP: 'https://intlayer.org/doc/lsp.md',\n\n  // Check for competitors libs\n  NextIntl: 'https://intlayer.org/blog/intlayer-with-next-intl.md',\n  ReactI18Next: 'https://intlayer.org/blog/intlayer-with-react-i18next.md',\n  ReactIntl: 'https://intlayer.org/blog/intlayer-with-react-intl.md',\n  NextI18Next: 'https://intlayer.org/blog/intlayer-with-next-i18next.md',\n  VueI18n: 'https://intlayer.org/blog/intlayer-with-vue-i18n.md',\n};\n\n/**\n * Helper: Detects the environment and returns the doc URL\n */\nconst getDocumentationUrl = (packageJson: any): string => {\n  const deps = {\n    ...packageJson.dependencies,\n    ...packageJson.devDependencies,\n  };\n\n  /**\n   * Helper to check if a version string matches a specific major version\n   * Matches: \"15\", \"^15.0.0\", \"~15.2\", \"15.0.0-beta\"\n   */\n  const isVersion = (versionString: string, major: number): boolean => {\n    if (!versionString || typeof versionString !== 'string') return false;\n    const regex = new RegExp(`^[\\\\^~]?${major}(?:\\\\.|$)`);\n    return regex.test(versionString);\n  };\n\n  // Mobile / Cross-platform\n  if (deps['@lynx-js/react'] || deps['@lynx-js/core']) {\n    return DocumentationRouter.Lynx;\n  }\n  if (deps['react-native'] || deps.expo) {\n    return DocumentationRouter.ReactNativeAndExpo;\n  }\n\n  // Meta-frameworks (Next, Nuxt, Astro, SvelteKit)\n  if (deps.next) {\n    const version = deps.next;\n\n    if (isVersion(version, 14)) {\n      return DocumentationRouter.NextJS_14;\n    }\n\n    if (isVersion(version, 15)) {\n      return DocumentationRouter.NextJS_15;\n    }\n\n    return DocumentationRouter.NextJS;\n  }\n\n  if (deps.nuxt) return DocumentationRouter.NuxtAndVue;\n  if (deps.astro) return DocumentationRouter.Astro;\n  if (deps['@sveltejs/kit']) return DocumentationRouter.SvelteKit;\n\n  // Routers (TanStack & React Router v7)\n  if (deps['@tanstack/react-router']) {\n    return DocumentationRouter.TanStackRouter;\n  }\n\n  // Check for React Router v7\n  const reactRouterVersion = deps['react-router'];\n  if (reactRouterVersion && typeof reactRouterVersion === 'string') {\n    // Distinguish between standard v7 and v7 with FS routes\n    if (deps['@react-router/fs-routes']) {\n      return DocumentationRouter.ViteAndReact_ReactRouterV7_FSRoutes;\n    }\n\n    // Use Regex to ensure it is v7\n    if (isVersion(reactRouterVersion, 7)) {\n      return DocumentationRouter.ViteAndReact_ReactRouterV7;\n    }\n  }\n\n  // Vite Ecosystem (General)\n  if (deps.vite) {\n    if (deps.vue) return DocumentationRouter.ViteAndVue;\n    if (deps['solid-js']) return DocumentationRouter.ViteAndSolid;\n    if (deps.svelte) return DocumentationRouter.ViteAndSvelte;\n    if (deps.preact) return DocumentationRouter.ViteAndPreact;\n\n    // Default to React if Vite is present but specific other frameworks aren't found\n    return DocumentationRouter.ViteAndReact;\n  }\n\n  // Other Web Frameworks\n  if (deps['react-scripts']) return DocumentationRouter.CRA;\n  if (deps['@angular/core']) return DocumentationRouter.Angular;\n\n  // Backend\n  if (deps['@nestjs/core']) return DocumentationRouter.NestJS;\n  if (deps.express) return DocumentationRouter.Express;\n  if (deps.fastify) return DocumentationRouter.Fastify;\n\n  // Competitor Libs (Migration Guides)\n  // We check these last as specific environment setup is usually higher priority,\n  // but if no specific framework logic matched (or as a fallback), we guide to migration.\n  if (deps['next-intl']) return DocumentationRouter.NextIntl;\n  if (deps['react-i18next'] || deps.i18next)\n    return DocumentationRouter.ReactI18Next;\n  if (deps['react-intl']) return DocumentationRouter.ReactIntl;\n  if (deps['next-i18next']) return DocumentationRouter.NextI18Next;\n  if (deps['vue-i18n']) return DocumentationRouter.VueI18n;\n\n  return DocumentationRouter.Default;\n};\n\n/**\n * OPTIONS\n */\nexport type InitOptions = {\n  noGitignore?: boolean;\n};\n\n/**\n * MAIN LOGIC\n */\nexport const initIntlayer = async (rootDir: string, options?: InitOptions) => {\n  logger(colorize('Checking Intlayer configuration...', ANSIColors.CYAN));\n\n  // READ PACKAGE.JSON\n  const packageJsonPath = 'package.json';\n  if (!(await exists(rootDir, packageJsonPath))) {\n    logger(\n      `${x} No ${colorizePath('package.json')} found. Please run this script from the project root.`,\n      { level: 'error' }\n    );\n    process.exit(1);\n  }\n\n  const packageJsonContent = await readFileFromRoot(rootDir, packageJsonPath);\n  let packageJson: Record<string, any>;\n  try {\n    packageJson = JSON.parse(packageJsonContent);\n  } catch {\n    logger(`${x} Could not parse ${colorizePath('package.json')}.`, {\n      level: 'error',\n    });\n    process.exit(1);\n  }\n\n  // Determine the correct documentation URL based on dependencies\n  const guideUrl = getDocumentationUrl(packageJson);\n\n  // CHECK .GITIGNORE\n  const gitignorePath = '.gitignore';\n  if (!options?.noGitignore && (await exists(rootDir, gitignorePath))) {\n    const gitignoreContent = await readFileFromRoot(rootDir, gitignorePath);\n\n    if (!gitignoreContent.includes('intlayer')) {\n      const newContent = `${gitignoreContent}\\n# Intlayer\\n.intlayer\\n`;\n      await writeFileToRoot(rootDir, gitignorePath, newContent);\n      logger(\n        `${v} Added ${colorizePath('.intlayer')} to ${colorizePath(gitignorePath)}`\n      );\n    } else {\n      logger(`${v} ${colorizePath(gitignorePath)} already includes .intlayer`);\n    }\n  }\n\n  // CHECK VS CODE EXTENSION RECOMMENDATIONS\n  const vscodeDir = '.vscode';\n  const extensionsJsonPath = join(vscodeDir, 'extensions.json');\n  const extensionId = 'intlayer.intlayer-vs-code-extension';\n\n  try {\n    let extensionsConfig: { recommendations: string[] } = {\n      recommendations: [],\n    };\n\n    if (await exists(rootDir, extensionsJsonPath)) {\n      const content = await readFileFromRoot(rootDir, extensionsJsonPath);\n      extensionsConfig = parseJSONWithComments(content);\n    } else {\n      await ensureDirectory(rootDir, vscodeDir);\n    }\n\n    if (!extensionsConfig.recommendations) {\n      extensionsConfig.recommendations = [];\n    }\n\n    if (!extensionsConfig.recommendations.includes(extensionId)) {\n      extensionsConfig.recommendations.push(extensionId);\n      await writeFileToRoot(\n        rootDir,\n        extensionsJsonPath,\n        JSON.stringify(extensionsConfig, null, 2)\n      );\n      logger(\n        `${v} Added ${colorize(extensionId, ANSIColors.MAGENTA)} to ${colorizePath(extensionsJsonPath)}`\n      );\n    } else {\n      logger(\n        `${v} ${colorizePath(extensionsJsonPath)} already includes ${colorize(extensionId, ANSIColors.MAGENTA)}`\n      );\n    }\n  } catch {\n    logger(\n      `${x} Could not update ${colorizePath(extensionsJsonPath)}. You may need to add ${colorize(extensionId, ANSIColors.MAGENTA)} manually.`,\n      { level: 'warn' }\n    );\n  }\n\n  // CHECK VS CODE LSP SETTINGS\n  const settingsJsonPath = join(vscodeDir, 'settings.json');\n\n  try {\n    let settingsConfig: Record<string, unknown> = {};\n\n    if (await exists(rootDir, settingsJsonPath)) {\n      const content = await readFileFromRoot(rootDir, settingsJsonPath);\n      settingsConfig = parseJSONWithComments(content);\n    } else {\n      await ensureDirectory(rootDir, vscodeDir);\n    }\n\n    let settingsUpdated = false;\n\n    if (!settingsConfig['intlayer.languageServer.command']) {\n      settingsConfig['intlayer.languageServer.command'] = 'npx';\n      settingsUpdated = true;\n    }\n\n    if (!settingsConfig['intlayer.languageServer.args']) {\n      settingsConfig['intlayer.languageServer.args'] = ['@intlayer/lsp'];\n      settingsUpdated = true;\n    }\n\n    if (settingsUpdated) {\n      await writeFileToRoot(\n        rootDir,\n        settingsJsonPath,\n        JSON.stringify(settingsConfig, null, 2)\n      );\n      logger(\n        `${v} Updated ${colorizePath(settingsJsonPath)} with LSP configuration`\n      );\n    } else {\n      logger(\n        `${v} ${colorizePath(settingsJsonPath)} already includes LSP configuration`\n      );\n    }\n  } catch {\n    logger(\n      `${x} Could not update ${colorizePath(settingsJsonPath)}. You may need to add the LSP settings manually.`,\n      { level: 'warn' }\n    );\n  }\n\n  // CHECK TSCONFIGS\n  const tsConfigFiles = await findTsConfigFiles(rootDir);\n  let hasTsConfig = false;\n\n  for (const fileName of tsConfigFiles) {\n    if (await exists(rootDir, fileName)) {\n      hasTsConfig = true;\n      try {\n        const fileContent = await readFileFromRoot(rootDir, fileName);\n        const config = parseJSONWithComments(fileContent);\n        const typeDefinition = '.intlayer/**/*.ts';\n\n        let updated = false;\n\n        if (!config.include) {\n          // Skip if no include array (solution-style)\n        } else if (\n          Array.isArray(config.include) &&\n          !(config.include as string[]).some((pattern: string) =>\n            pattern.includes('.intlayer')\n          )\n        ) {\n          config.include.push(typeDefinition);\n          updated = true;\n        } else if (config.include.includes(typeDefinition)) {\n          logger(\n            `${v} ${colorizePath(fileName)} already includes intlayer types`\n          );\n        }\n\n        if (updated) {\n          await writeFileToRoot(\n            rootDir,\n            fileName,\n            JSON.stringify(config, null, 2)\n          );\n          logger(\n            `${v} Updated ${colorizePath(fileName)} to include intlayer types`\n          );\n        }\n      } catch {\n        logger(\n          `${x} Could not parse or update ${colorizePath(fileName)}. You may need to add ${colorizePath('.intlayer/types/**/*.ts')} manually.`,\n          { level: 'warn' }\n        );\n      }\n    }\n  }\n\n  // INITIALIZE CONFIG FILE\n  const format = hasTsConfig ? 'intlayer.config.ts' : 'intlayer.config.mjs';\n  await initConfig(format, rootDir);\n\n  let hasAliasConfiguration = false;\n\n  // CHECK VITE CONFIG\n  const viteConfigs = ['vite.config.ts', 'vite.config.js', 'vite.config.mjs'];\n\n  for (const file of viteConfigs) {\n    if (await exists(rootDir, file)) {\n      hasAliasConfiguration = true;\n      const content = await readFileFromRoot(rootDir, file);\n\n      if (!content.includes('vite-intlayer')) {\n        const extension = file.split('.').pop()!;\n        const updatedContent = updateViteConfig(content, extension);\n        await writeFileToRoot(rootDir, file, updatedContent);\n        logger(`${v} Updated ${colorizePath(file)} to include Intlayer plugin`);\n      }\n      break;\n    }\n  }\n\n  // CHECK NEXT CONFIG\n  const nextConfigs = ['next.config.js', 'next.config.mjs', 'next.config.ts'];\n  let isNextJsProject = false;\n\n  for (const file of nextConfigs) {\n    if (await exists(rootDir, file)) {\n      isNextJsProject = true;\n      hasAliasConfiguration = true;\n      const content = await readFileFromRoot(rootDir, file);\n\n      if (!content.includes('next-intlayer')) {\n        const extension = file.split('.').pop()!;\n        const updatedContent = updateNextConfig(content, extension);\n        await writeFileToRoot(rootDir, file, updatedContent);\n        logger(`${v} Updated ${colorizePath(file)} to include Intlayer plugin`);\n      }\n      break;\n    }\n  }\n\n  // CHECK OTHER FRAMEWORKS CONFIG\n  const astroConfigs = [\n    'astro.config.mjs',\n    'astro.config.js',\n    'astro.config.ts',\n    'astro.config.cjs',\n  ];\n\n  for (const file of astroConfigs) {\n    if (await exists(rootDir, file)) {\n      hasAliasConfiguration = true;\n\n      if (file.startsWith('astro.config.')) {\n        const content = await readFileFromRoot(rootDir, file);\n\n        if (!content.includes('astro-intlayer')) {\n          const extension = file.split('.').pop()!;\n          const updatedContent = updateAstroConfig(content, extension);\n          await writeFileToRoot(rootDir, file, updatedContent);\n          logger(\n            `${v} Updated ${colorizePath(file)} to include Intlayer integration`\n          );\n        }\n      }\n      break;\n    }\n  }\n\n  const nuxtConfigs = ['nuxt.config.js', 'nuxt.config.ts'];\n  for (const file of nuxtConfigs) {\n    if (await exists(rootDir, file)) {\n      hasAliasConfiguration = true;\n\n      const content = await readFileFromRoot(rootDir, file);\n\n      if (!content.includes('nuxt-intlayer')) {\n        const updatedContent = updateNuxtConfig(content);\n        await writeFileToRoot(rootDir, file, updatedContent);\n        logger(`${v} Updated ${colorizePath(file)} to include Intlayer module`);\n      }\n      break;\n    }\n  }\n\n  // UPDATE PACKAGE.JSON DEV SCRIPT\n  // Next.js >= 16 uses a bun-specific wrapper; backend frameworks wrap whatever\n  // the existing dev script is. Both use `intlayer watch --with`.\n  const allDeps = {\n    ...packageJson.dependencies,\n    ...packageJson.devDependencies,\n  };\n\n  const isVersionGreaterOrEqual = (\n    versionString: string,\n    major: number\n  ): boolean => {\n    if (!versionString || typeof versionString !== 'string') return false;\n    const match = versionString.match(/^[^\\d]*(\\d+)/);\n    if (!match) return false;\n    return parseInt(match[1], 10) >= major;\n  };\n\n  const backendIntlayerPackages = [\n    'express-intlayer',\n    'fastify-intlayer',\n    'adonis-intlayer',\n    'hono-intlayer',\n  ];\n\n  const devScript = packageJson.scripts?.dev;\n\n  let newDevScript: string | undefined;\n\n  if (\n    ((isNextJsProject && isVersionGreaterOrEqual(allDeps.next, 16)) ||\n      backendIntlayerPackages.some((pkg) => allDeps[pkg])) &&\n    !devScript.includes('intlayer watch')\n  ) {\n    newDevScript = `intlayer watch --with '${devScript}'`;\n  }\n\n  if (newDevScript) {\n    packageJson.scripts.dev = newDevScript;\n\n    await writeFileToRoot(\n      rootDir,\n      packageJsonPath,\n      JSON.stringify(packageJson, null, 2)\n    );\n\n    logger(\n      `${v} Updated ${colorizePath('package.json')} dev script to run intlayer watch`\n    );\n  }\n\n  // CHECK WEBPACK CONFIG\n  const webpackConfigs = [\n    'webpack.config.js',\n    'webpack.config.ts',\n    'webpack.config.mjs',\n    'webpack.config.cjs',\n  ];\n\n  for (const file of webpackConfigs) {\n    if (await exists(rootDir, file)) {\n      hasAliasConfiguration = true;\n      logger(\n        `${v} Found ${colorizePath(\n          file\n        )}. Make sure to configure aliases manually or use the Intlayer Webpack plugin.`\n      );\n      break;\n    }\n  }\n\n  const backendConfigPackages = [\n    'express',\n    'fastify',\n    '@adonisjs/core',\n    'hono',\n    ...backendIntlayerPackages,\n  ];\n\n  if (backendConfigPackages.some((pkg) => allDeps[pkg])) {\n    hasAliasConfiguration = true;\n  }\n\n  if (!hasAliasConfiguration) {\n    const configuration = getConfiguration({ baseDir: rootDir });\n    const aliases = getAlias({ configuration });\n\n    if (hasTsConfig && tsConfigFiles.length > 0) {\n      const tsConfigPath =\n        tsConfigFiles.find((file) => file === 'tsconfig.json') ||\n        tsConfigFiles[0];\n      const tsConfigContent = await readFileFromRoot(rootDir, tsConfigPath);\n      const config = parseJSONWithComments(tsConfigContent);\n\n      config.compilerOptions ??= {};\n      config.compilerOptions.paths ??= {};\n\n      let updated = false;\n\n      Object.entries(aliases).forEach(([alias, path]) => {\n        if (!config.compilerOptions.paths[alias]) {\n          config.compilerOptions.paths[alias] = [path];\n          updated = true;\n        }\n      });\n\n      if (updated) {\n        await writeFileToRoot(\n          rootDir,\n          tsConfigPath,\n          JSON.stringify(config, null, 2)\n        );\n\n        logger(\n          `${v} Updated ${colorizePath(\n            tsConfigPath\n          )} to include Intlayer aliases`\n        );\n      }\n    } else {\n      const jsConfigPath = 'jsconfig.json';\n\n      if (await exists(rootDir, jsConfigPath)) {\n        const jsConfigContent = await readFileFromRoot(rootDir, jsConfigPath);\n        const config = parseJSONWithComments(jsConfigContent);\n\n        config.compilerOptions ??= {};\n        config.compilerOptions.paths ??= {};\n\n        let updated = false;\n\n        Object.entries(aliases).forEach(([alias, path]) => {\n          if (!config.compilerOptions.paths[alias]) {\n            config.compilerOptions.paths[alias] = [path];\n            updated = true;\n          }\n        });\n\n        if (updated) {\n          await writeFileToRoot(\n            rootDir,\n            jsConfigPath,\n            JSON.stringify(config, null, 2)\n          );\n          logger(\n            `${v} Updated ${colorizePath(\n              jsConfigPath\n            )} to include Intlayer aliases`\n          );\n        }\n      } else {\n        packageJson.imports ??= {};\n\n        let updated = false;\n\n        Object.entries(aliases).forEach(([alias, path]) => {\n          const importAlias = alias.replace('@', '#');\n          const importPath = path.startsWith('.') ? path : `./${path}`;\n\n          if (!packageJson.imports[importAlias]) {\n            packageJson.imports[importAlias] = importPath;\n            updated = true;\n          }\n        });\n\n        if (updated) {\n          await writeFileToRoot(\n            rootDir,\n            packageJsonPath,\n            JSON.stringify(packageJson, null, 2)\n          );\n          logger(\n            `${v} Updated ${colorizePath(\n              packageJsonPath\n            )} to include Intlayer imports`\n          );\n        }\n      }\n    }\n  }\n\n  // FINAL SUCCESS MESSAGE\n  logger(`${v} ${colorize('Intlayer init setup complete.', ANSIColors.GREEN)}`);\n  logger([\n    colorize('Next →', ANSIColors.MAGENTA),\n    colorize(\n      `Follow the instructions in the documentation to complete the setup:`,\n      ANSIColors.GREY_LIGHT\n    ),\n    colorizePath(guideUrl),\n  ]);\n\n  // INTLAYER LSP — instruction for the AI agent running `intlayer init`.\n  // The Intlayer Language Server (`@intlayer/lsp`) provides Go-to-Definition\n  // from `useIntlayer` / `getIntlayer` keys to their `.content` files, for both\n  // IDEs and AI agents. Setup is editor-specific (VS Code, Cursor, Windsurf,\n  // Zed, Neovim, Claude Code, …), so we don't scaffold anything here — instead\n  // we point to the doc and ask the agent to confirm the target platform.\n  logger([\n    colorize('Intlayer LSP →', ANSIColors.MAGENTA),\n    colorize(\n      'The Intlayer Language Server is available via the `@intlayer/lsp` package. It lets IDEs and AI agents jump from `useIntlayer`/`getIntlayer` keys to their `.content` files.',\n      ANSIColors.GREY_LIGHT\n    ),\n    colorize(\n      'Ask the user which platform/editor they want to enable it on (VS Code, Cursor, Windsurf, Zed, Neovim, Claude Code, …), then follow the matching setup instructions:',\n      ANSIColors.GREY_LIGHT\n    ),\n    colorizePath(DocumentationRouter.LSP),\n  ]);\n};\n"],"mappings":"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"}