{"version":3,"sources":["../../package.json","../../src/i18n/plugin.ts","../../src/pwa/plugin.ts","../../src/config/constants.ts","../../src/config/packages/checker.ts","../../src/config/utils/env.ts","../../src/config/packages/definitions.ts","../../src/config/plugins/compression.ts","../../src/config/plugins/devStartup.ts","../../src/ai/constants.ts","../../src/config/packages/installer.ts","../../src/config/packages/updater.ts","../../src/config/utils/version.ts","../../src/config/utils/deepMerge.ts","../../src/config/createNextConfig.ts"],"sourcesContent":["{\n  \"name\": \"@djangocfg/nextjs\",\n  \"version\": \"2.1.465\",\n  \"description\": \"Next.js server utilities: sitemap, health, OG images, contact forms, navigation, config\",\n  \"keywords\": [\n    \"nextjs\",\n    \"sitemap\",\n    \"health\",\n    \"og-image\",\n    \"navigation\",\n    \"config\",\n    \"react\",\n    \"typescript\"\n  ],\n  \"author\": {\n    \"name\": \"DjangoCFG\",\n    \"url\": \"https://djangocfg.com\"\n  },\n  \"homepage\": \"https://djangocfg.com\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/markolofsen/django-cfg.git\",\n    \"directory\": \"packages/nextjs\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/markolofsen/django-cfg/issues\"\n  },\n  \"license\": \"MIT\",\n  \"main\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.mts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.mts\",\n      \"import\": \"./dist/index.mjs\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./sitemap\": {\n      \"types\": \"./dist/sitemap/index.d.mts\",\n      \"import\": \"./dist/sitemap/index.mjs\",\n      \"default\": \"./dist/sitemap/index.mjs\"\n    },\n    \"./health\": {\n      \"types\": \"./dist/health/index.d.mts\",\n      \"import\": \"./dist/health/index.mjs\",\n      \"default\": \"./dist/health/index.mjs\"\n    },\n    \"./navigation\": {\n      \"types\": \"./dist/navigation/index.d.mts\",\n      \"import\": \"./dist/navigation/index.mjs\",\n      \"default\": \"./dist/navigation/index.mjs\"\n    },\n    \"./config\": {\n      \"types\": \"./dist/config/index.d.mts\",\n      \"import\": \"./dist/config/index.mjs\",\n      \"default\": \"./dist/config/index.mjs\"\n    },\n    \"./ai\": {\n      \"types\": \"./dist/ai/index.d.mts\",\n      \"import\": \"./dist/ai/index.mjs\",\n      \"default\": \"./dist/ai/index.mjs\"\n    },\n    \"./pwa\": {\n      \"types\": \"./dist/pwa/index.d.mts\",\n      \"import\": \"./dist/pwa/index.mjs\",\n      \"default\": \"./dist/pwa/index.mjs\"\n    },\n    \"./pwa/worker\": {\n      \"types\": \"./dist/pwa/worker/index.d.mts\",\n      \"import\": \"./dist/pwa/worker/index.mjs\",\n      \"default\": \"./dist/pwa/worker/index.mjs\"\n    },\n    \"./worker\": {\n      \"types\": \"./dist/pwa/worker/index.d.mts\",\n      \"import\": \"./dist/pwa/worker/index.mjs\",\n      \"default\": \"./dist/pwa/worker/index.mjs\"\n    },\n    \"./og-image\": {\n      \"types\": \"./dist/og-image/index.d.mts\",\n      \"import\": \"./dist/og-image/index.mjs\",\n      \"default\": \"./dist/og-image/index.mjs\"\n    },\n    \"./monitor\": {\n      \"types\": \"./dist/monitor/index.d.mts\",\n      \"import\": \"./dist/monitor/index.mjs\",\n      \"default\": \"./dist/monitor/index.mjs\"\n    },\n    \"./i18n\": {\n      \"types\": \"./dist/i18n/index.d.mts\",\n      \"import\": \"./dist/i18n/index.mjs\",\n      \"default\": \"./dist/i18n/index.mjs\"\n    },\n    \"./i18n/server\": {\n      \"types\": \"./dist/i18n/server.d.mts\",\n      \"import\": \"./dist/i18n/server.mjs\",\n      \"default\": \"./dist/i18n/server.mjs\"\n    },\n    \"./i18n/client\": {\n      \"types\": \"./dist/i18n/client.d.mts\",\n      \"import\": \"./dist/i18n/client.mjs\",\n      \"default\": \"./dist/i18n/client.mjs\"\n    },\n    \"./i18n/proxy\": {\n      \"types\": \"./dist/i18n/proxy.d.mts\",\n      \"import\": \"./dist/i18n/proxy.mjs\",\n      \"default\": \"./dist/i18n/proxy.mjs\"\n    },\n    \"./i18n/navigation\": {\n      \"types\": \"./dist/i18n/navigation.d.mts\",\n      \"import\": \"./dist/i18n/navigation.mjs\",\n      \"default\": \"./dist/i18n/navigation.mjs\"\n    },\n    \"./i18n/routing\": {\n      \"types\": \"./dist/i18n/routing.d.mts\",\n      \"import\": \"./dist/i18n/routing.mjs\",\n      \"default\": \"./dist/i18n/routing.mjs\"\n    },\n    \"./i18n/request\": {\n      \"types\": \"./dist/i18n/request.d.mts\",\n      \"import\": \"./dist/i18n/request.mjs\",\n      \"default\": \"./dist/i18n/request.mjs\"\n    },\n    \"./i18n/components\": {\n      \"types\": \"./dist/i18n/components.d.mts\",\n      \"import\": \"./dist/i18n/components.mjs\",\n      \"default\": \"./dist/i18n/components.mjs\"\n    }\n  },\n  \"files\": [\n    \"dist\",\n    \"src\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"bin\": {\n    \"djangocfg-docs\": \"./dist/ai/cli.mjs\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"dev\": \"tsup --watch\",\n    \"clean\": \"rm -rf dist\",\n    \"lint\": \"eslint .\",\n    \"check\": \"tsc --noEmit\",\n    \"ai-docs\": \"tsx src/ai/cli.ts\"\n  },\n  \"peerDependencies\": {\n    \"@djangocfg/devtools\": \"workspace:*\",\n    \"@djangocfg/i18n\": \"workspace:*\",\n    \"@djangocfg/ui-core\": \"workspace:*\",\n    \"next\": \"^16.2.2\"\n  },\n  \"peerDependenciesMeta\": {\n    \"@djangocfg/ui-core\": {\n      \"optional\": true\n    },\n    \"@djangocfg/devtools\": {\n      \"optional\": true\n    }\n  },\n  \"dependencies\": {\n    \"@serwist/next\": \"^9.5.11\",\n    \"@serwist/sw\": \"^9.5.11\",\n    \"chalk\": \"^5.6.2\",\n    \"conf\": \"^15.1.0\",\n    \"consola\": \"^3.4.2\",\n    \"next-intl\": \"^4.13.2\",\n    \"semver\": \"^7.8.5\",\n    \"serwist\": \"^9.5.11\"\n  },\n  \"devDependencies\": {\n    \"@djangocfg/devtools\": \"workspace:*\",\n    \"@djangocfg/i18n\": \"workspace:*\",\n    \"@djangocfg/layouts\": \"workspace:*\",\n    \"@djangocfg/typescript-config\": \"workspace:*\",\n    \"@djangocfg/ui-core\": \"workspace:*\",\n    \"@types/node\": \"^25.9.5\",\n    \"@types/react\": \"19.2.15\",\n    \"@types/react-dom\": \"19.2.3\",\n    \"@types/semver\": \"^7.7.1\",\n    \"@types/webpack\": \"^5.28.5\",\n    \"eslint\": \"^9.39.5\",\n    \"lucide-react\": \"^0.545.0\",\n    \"tsup\": \"^8.5.1\",\n    \"tsx\": \"^4.23.0\",\n    \"typescript\": \"^5.9.3\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n","/**\n * i18n Plugin for Next.js Configuration\n *\n * Wraps next-intl plugin for use with createBaseNextConfig\n *\n * @example\n * ```ts\n * // next.config.ts\n * import { createBaseNextConfig } from '@djangocfg/nextjs/config';\n *\n * export default createBaseNextConfig({\n *   i18n: {\n *     locales: ['en', 'ru', 'ko'],\n *     defaultLocale: 'en',\n *   },\n * });\n * ```\n */\n\nimport createNextIntlPlugin from 'next-intl/plugin';\n\nimport type { NextConfig } from 'next';\nimport type { I18nPluginOptions } from './types';\n\nexport type { I18nPluginOptions } from './types';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Plugin Factory\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create next-intl plugin wrapper\n *\n * @param options - i18n configuration options\n * @returns Next.js config wrapper function\n */\nexport function createI18nPlugin(options?: I18nPluginOptions) {\n  // Determine request config path\n  const requestConfigPath = options?.requestConfig\n    ?? './i18n/request.ts';\n\n  // Create next-intl plugin\n  const withNextIntl = createNextIntlPlugin(requestConfigPath);\n\n  return withNextIntl;\n}\n\n/**\n * Apply i18n plugin to Next.js config\n *\n * @param config - Base Next.js config\n * @param options - i18n options\n * @returns Modified Next.js config\n */\nexport function withI18n(\n  config: NextConfig,\n  options?: I18nPluginOptions\n): NextConfig {\n  const plugin = createI18nPlugin(options);\n  return plugin(config);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Export for direct use\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport { createNextIntlPlugin };\n","/**\n * PWA (Progressive Web App) Plugin\n *\n * Configures Serwist for service worker and offline support\n * Modern PWA solution for Next.js 15+ with App Router\n *\n * @see https://serwist.pages.dev/\n */\n\nimport type { NextConfig } from 'next';\nimport { consola } from 'consola';\n\nexport interface PWAPluginOptions {\n  /**\n   * Destination directory for service worker files\n   * @default 'public'\n   * @deprecated Use swDest instead\n   */\n  dest?: string;\n\n  /**\n   * Path to service worker source file (relative to project root)\n   * @default 'app/sw.ts'\n   */\n  swSrc?: string;\n\n  /**\n   * Destination for compiled service worker\n   * @default 'public/sw.js'\n   */\n  swDest?: string;\n\n  /**\n   * Disable PWA completely\n   * @default false in production, true in development\n   * @example disable: process.env.NODE_ENV === 'development'\n   */\n  disable?: boolean;\n\n  /**\n   * Cache on navigation - cache pages when navigating\n   * @default true\n   */\n  cacheOnNavigation?: boolean;\n\n  /**\n   * Reload app when device goes back online\n   * @default true\n   */\n  reloadOnOnline?: boolean;\n\n  /**\n   * Additional Serwist options\n   * @see https://serwist.pages.dev/docs/next/configuring\n   */\n  serwistOptions?: Record<string, any>;\n}\n\n/**\n * Add PWA configuration to Next.js config using Serwist\n *\n * @example Basic usage\n * ```ts\n * import { createBaseNextConfig, withPWA } from '@djangocfg/nextjs/config';\n *\n * const nextConfig = createBaseNextConfig({...});\n *\n * export default withPWA(nextConfig, {\n *   swSrc: 'app/sw.ts',\n *   disable: process.env.NODE_ENV === 'development',\n * });\n * ```\n *\n * @example Integrated with createBaseNextConfig\n * ```ts\n * import { createBaseNextConfig } from '@djangocfg/nextjs/config';\n *\n * const config = createBaseNextConfig({\n *   pwa: {\n *     swSrc: 'app/sw.ts',\n *     disable: false,\n *   },\n * });\n *\n * export default config;\n * ```\n */\nexport function withPWA(\n  nextConfig: NextConfig,\n  options: PWAPluginOptions = {}\n): NextConfig {\n  const isDev = process.env.NODE_ENV === 'development';\n  const isStaticBuild = process.env.NEXT_PUBLIC_STATIC_BUILD === 'true';\n\n  // Determine if PWA should be disabled:\n  // - Explicitly disabled via options\n  // - In development mode (default)\n  // - Static build (output: 'export' doesn't support service workers)\n  const shouldDisable = options.disable !== undefined\n    ? options.disable\n    : (isDev || isStaticBuild);\n\n  const defaultOptions: PWAPluginOptions = {\n    swSrc: 'app/sw.ts',\n    swDest: 'public/sw.js',\n    disable: shouldDisable,\n    cacheOnNavigation: true,\n    reloadOnOnline: true,\n    ...options,\n  };\n\n  try {\n    // Suppress Turbopack warning - it only applies to dev mode, not production builds\n    // The warning is misleading when running `next build` with Turbopack\n    // See: https://github.com/serwist/serwist/issues/54\n    if (!process.env.SERWIST_SUPPRESS_TURBOPACK_WARNING) {\n      process.env.SERWIST_SUPPRESS_TURBOPACK_WARNING = '1';\n    }\n\n    const withSerwistInit = require('@serwist/next').default;\n\n    const withSerwist = withSerwistInit({\n      swSrc: defaultOptions.swSrc,\n      swDest: defaultOptions.swDest,\n      disable: defaultOptions.disable,\n      cacheOnNavigation: defaultOptions.cacheOnNavigation,\n      reloadOnOnline: defaultOptions.reloadOnOnline,\n      ...defaultOptions.serwistOptions,\n    });\n\n    return withSerwist(nextConfig);\n  } catch (error) {\n    consola.error('Failed to configure Serwist:', error);\n    return nextConfig;\n  }\n}\n\n/**\n * Get service worker template content\n *\n * Returns ready-to-use service worker code for app/sw.ts\n *\n * @example\n * ```ts\n * import { getServiceWorkerTemplate } from '@djangocfg/nextjs/config';\n *\n * // Copy this to your app/sw.ts file\n * console.log(getServiceWorkerTemplate());\n * ```\n */\nexport function getServiceWorkerTemplate(): string {\n  return `/**\n * Service Worker (Serwist)\n *\n * Modern PWA service worker using Serwist\n */\n\nimport { defaultCache } from '@serwist/next/worker';\nimport { Serwist } from 'serwist';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ndeclare const self: any;\n\nconst serwist = new Serwist({\n  // Precache entries injected by Serwist build plugin\n  precacheEntries: self.__SW_MANIFEST,\n\n  // Skip waiting - activate new SW immediately\n  skipWaiting: true,\n\n  // Take control of all clients immediately\n  clientsClaim: true,\n\n  // Enable navigation preload for faster loads\n  navigationPreload: true,\n\n  // Use default Next.js runtime caching strategies\n  runtimeCaching: defaultCache,\n\n  // Fallback pages for offline\n  fallbacks: {\n    entries: [\n      {\n        url: '/_offline',\n        matcher({ request }) {\n          return request.destination === 'document';\n        },\n      },\n    ],\n  },\n});\n\nserwist.addEventListeners();\n`;\n}\n\n// Backward compatibility exports (deprecated)\nexport const defaultRuntimeCaching = [];\nexport function createApiCacheRule() {\n  consola.warn('createApiCacheRule is deprecated with Serwist. Use defaultCache from @serwist/next/worker');\n  return {};\n}\nexport function createStaticAssetRule() {\n  consola.warn('createStaticAssetRule is deprecated with Serwist. Use defaultCache from @serwist/next/worker');\n  return {};\n}\nexport function createCdnCacheRule() {\n  consola.warn('createCdnCacheRule is deprecated with Serwist. Use defaultCache from @serwist/next/worker');\n  return {};\n}\n","/**\n * Shared Constants for DjangoCFG Next.js Configuration\n */\n\n// Package name for version checks\nexport const PACKAGE_NAME = '@djangocfg/nextjs';\n\n// Version cache TTL (1 hour)\nexport const VERSION_CACHE_TTL_MS = 60 * 60 * 1000;\n\n// ASCII Art Banner for Django CFG\nexport const DJANGO_CFG_BANNER = `\n██████╗      ██╗ █████╗ ███╗   ██╗ ██████╗  ██████╗      ██████╗███████╗ ██████╗\n██╔══██╗     ██║██╔══██╗████╗  ██║██╔════╝ ██╔═══██╗    ██╔════╝██╔════╝██╔════╝\n██║  ██║     ██║███████║██╔██╗ ██║██║  ███╗██║   ██║    ██║     █████╗  ██║  ███╗\n██║  ██║██   ██║██╔══██║██║╚██╗██║██║   ██║██║   ██║    ██║     ██╔══╝  ██║   ██║\n██████╔╝╚█████╔╝██║  ██║██║ ╚████║╚██████╔╝╚██████╔╝    ╚██████╗██║     ╚██████╔╝\n╚═════╝  ╚════╝ ╚═╝  ╚═╝╚═╝  ╚═══╝ ╚═════╝  ╚═════╝      ╚═════╝╚═╝      ╚═════╝\n`;\n\n// All @djangocfg packages that can be updated together\nexport const DJANGOCFG_PACKAGES = [\n  '@djangocfg/ui-core',\n  '@djangocfg/layouts',\n  '@djangocfg/nextjs',\n  '@djangocfg/api',\n  '@djangocfg/centrifugo',\n  '@djangocfg/eslint-config',\n  '@djangocfg/typescript-config',\n] as const;\n\n// Default packages to transpile\n// Required for proper RSC (React Server Components) handling\nexport const DEFAULT_TRANSPILE_PACKAGES = [\n  '@djangocfg/i18n',\n  '@djangocfg/ui-core',\n  '@djangocfg/layouts',\n  '@djangocfg/ui-tools',\n  '@djangocfg/api',\n  '@djangocfg/centrifugo',\n  '@djangocfg/devtools',\n  '@djangocfg/payments',\n] as const;\n\n// Default packages to optimize imports\nexport const DEFAULT_OPTIMIZE_PACKAGES = [\n  '@djangocfg/ui-core',\n  '@djangocfg/layouts',\n  'lucide-react',\n  'recharts',\n] as const;\n","/**\n * Package Checker\n *\n * Checks which optional packages are missing and need to be installed.\n */\n\nimport { createRequire } from 'module';\nimport { join } from 'path';\n\nimport { isDev, isStaticBuild } from '../utils/env';\nimport { getPackagesForContext, OPTIONAL_PACKAGES } from './definitions';\n\nimport type { PackageDefinition } from './definitions';\nexport interface MissingPackage extends PackageDefinition {\n  /** Why is this package needed? */\n  reason: string;\n}\n\n/**\n * Check if a package is installed in the consumer's project\n * Uses process.cwd() to check from the consumer's context, not the library's\n */\nexport function isPackageInstalled(packageName: string): boolean {\n  try {\n    // Create require from consumer's cwd to check their node_modules\n    const consumerRequire = createRequire(join(process.cwd(), 'package.json'));\n    consumerRequire.resolve(packageName);\n    return true;\n  } catch {\n    // Fallback: try regular require (for packages hoisted to root)\n    try {\n      require.resolve(packageName);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n}\n\n/**\n * Get all missing packages for current context\n */\nexport function getMissingPackages(): MissingPackage[] {\n  const neededPackages = getPackagesForContext({ isStaticBuild, isDev });\n  const missing: MissingPackage[] = [];\n\n  for (const pkg of neededPackages) {\n    if (!isPackageInstalled(pkg.name)) {\n      missing.push({\n        ...pkg,\n        reason: getReasonText(pkg),\n      });\n    }\n  }\n\n  return missing;\n}\n\n/**\n * Check specific packages\n */\nexport function checkPackages(packageNames: string[]): MissingPackage[] {\n  const missing: MissingPackage[] = [];\n\n  for (const name of packageNames) {\n    if (!isPackageInstalled(name)) {\n      const definition = OPTIONAL_PACKAGES.find(p => p.name === name);\n      missing.push({\n        name,\n        description: definition?.description || 'Optional package',\n        condition: definition?.condition || 'always',\n        devDependency: definition?.devDependency ?? true,\n        reason: definition ? getReasonText(definition) : 'Requested by configuration',\n      });\n    }\n  }\n\n  return missing;\n}\n\n/**\n * Get human-readable reason for package requirement\n */\nfunction getReasonText(pkg: PackageDefinition): string {\n  switch (pkg.condition) {\n    case 'static-build':\n      return 'Required for static build (NEXT_PUBLIC_STATIC_BUILD=true)';\n    case 'dev':\n      return 'Required for development mode';\n    case 'always':\n      return 'Required for all builds';\n    default:\n      return 'Optional feature';\n  }\n}\n","/**\n * Environment Variable Utilities\n */\n\nexport const isStaticBuild = process.env.NEXT_PUBLIC_STATIC_BUILD === 'true';\nexport const isDev = process.env.NODE_ENV === 'development';\nexport const isProduction = !isDev;\nexport const isCI = process.env.CI === 'true';\n\nexport function getBasePath(isDefaultCfgAdmin?: boolean): string {\n  if (!isStaticBuild) return '';\n  return isDefaultCfgAdmin ? '/cfg/admin' : '/cfg/nextjs-admin';\n}\n\nexport function getApiUrl(): string {\n  return isStaticBuild ? '' : (process.env.NEXT_PUBLIC_API_URL || '');\n}\n\nexport function getSiteUrl(): string {\n  return isStaticBuild ? '' : (process.env.NEXT_PUBLIC_SITE_URL || '');\n}\n","/**\n * Package Definitions\n *\n * Defines optional packages that can be auto-installed when needed.\n */\n\nexport interface PackageDefinition {\n  /** npm package name */\n  name: string;\n  /** Human-readable description */\n  description: string;\n  /** When is this package needed? */\n  condition: 'static-build' | 'dev' | 'always';\n  /** Is this a dev dependency? */\n  devDependency: boolean;\n  /** Feature flag that enables this package */\n  featureFlag?: string;\n}\n\n/**\n * Optional packages that can be auto-installed\n */\nexport const OPTIONAL_PACKAGES: PackageDefinition[] = [\n  {\n    name: 'compression-webpack-plugin',\n    description: 'Gzip and Brotli compression for static builds',\n    condition: 'static-build',\n    devDependency: true,\n  },\n  {\n    name: '@next/bundle-analyzer',\n    description: 'Bundle analyzer for analyzing build output',\n    condition: 'dev',\n    devDependency: true,\n    featureFlag: 'ANALYZE',\n  },\n];\n\n/**\n * Required peer dependencies (should already be installed)\n */\nexport const PEER_DEPENDENCIES = [\n  'next',\n  'react',\n  'react-dom',\n] as const;\n\n/**\n * Get packages needed for current build context\n */\nexport function getPackagesForContext(options: {\n  isStaticBuild: boolean;\n  isDev: boolean;\n}): PackageDefinition[] {\n  return OPTIONAL_PACKAGES.filter(pkg => {\n    switch (pkg.condition) {\n      case 'static-build':\n        return options.isStaticBuild;\n      case 'dev':\n        return options.isDev;\n      case 'always':\n        return true;\n      default:\n        return false;\n    }\n  });\n}\n","/**\n * Compression Plugin Setup\n *\n * Adds Gzip and Brotli compression for static builds.\n */\n\nimport type { Configuration as WebpackConfig } from 'webpack';\nimport { isPackageInstalled } from '../packages/checker';\n\nexport interface CompressionPluginOptions {\n  /** Enable gzip compression */\n  gzip?: boolean;\n  /** Enable brotli compression */\n  brotli?: boolean;\n  /** Minimum file size to compress (default: 8192) */\n  threshold?: number;\n  /** Minimum compression ratio (default: 0.8) */\n  minRatio?: number;\n  /** Brotli compression level (default: 8) */\n  brotliLevel?: number;\n}\n\nconst DEFAULT_OPTIONS: Required<CompressionPluginOptions> = {\n  gzip: true,\n  brotli: true,\n  threshold: 8192,\n  minRatio: 0.8,\n  brotliLevel: 8,\n};\n\n/**\n * Add compression plugins to webpack config\n *\n * Returns true if plugins were added, false if compression-webpack-plugin is not installed\n */\nexport function addCompressionPlugins(\n  config: WebpackConfig,\n  options: CompressionPluginOptions = {}\n): boolean {\n  // Check if compression-webpack-plugin is installed\n  if (!isPackageInstalled('compression-webpack-plugin')) {\n    return false;\n  }\n\n  const opts = { ...DEFAULT_OPTIONS, ...options };\n\n  try {\n    // Dynamic import to avoid bundling if not installed\n    // eslint-disable-next-line @typescript-eslint/no-require-imports\n    const CompressionPlugin = require('compression-webpack-plugin');\n\n    if (!config.plugins) {\n      config.plugins = [];\n    }\n\n    // Gzip compression\n    if (opts.gzip) {\n      config.plugins.push(\n        new CompressionPlugin({\n          filename: '[path][base].gz',\n          algorithm: 'gzip',\n          test: /\\.(js|css|html|svg|json)$/,\n          threshold: opts.threshold,\n          minRatio: opts.minRatio,\n        })\n      );\n    }\n\n    // Brotli compression\n    if (opts.brotli) {\n      config.plugins.push(\n        new CompressionPlugin({\n          filename: '[path][base].br',\n          algorithm: 'brotliCompress',\n          test: /\\.(js|css|html|svg|json)$/,\n          threshold: opts.threshold,\n          minRatio: opts.minRatio,\n          compressionOptions: {\n            level: opts.brotliLevel,\n          },\n        })\n      );\n    }\n\n    return true;\n  } catch (error) {\n    // compression-webpack-plugin failed to load\n    return false;\n  }\n}\n\n/**\n * Check if compression is available\n */\nexport function isCompressionAvailable(): boolean {\n  return isPackageInstalled('compression-webpack-plugin');\n}\n","/**\n * Dev Startup Webpack Plugin\n *\n * Handles banner display, version checking, and package updates.\n */\n\nimport type { Compiler } from 'webpack';\nimport chalk from 'chalk';\n\nimport { AI_DOCS_HINT } from '../../ai/constants';\nimport { DJANGO_CFG_BANNER } from '../constants';\nimport { checkAndInstallPackages } from '../packages/installer';\nimport { checkAndUpdatePackages } from '../packages/updater';\nimport { getCurrentVersion } from '../utils/version';\n\n// Track if startup tasks were already run (persists across HMR)\nlet startupDone = false;\n\nexport interface DevStartupPluginOptions {\n  /** Check for missing optional packages (default: true) */\n  checkPackages?: boolean;\n  /** Auto-install missing packages without prompting */\n  autoInstall?: boolean;\n  /** Check for @djangocfg/* package updates (default: true) */\n  checkUpdates?: boolean;\n  /** Auto-update packages without prompting */\n  autoUpdate?: boolean;\n  /** Force check workspace:* packages (for testing in monorepo) */\n  forceCheckWorkspace?: boolean;\n}\n\n/**\n * Webpack plugin for dev startup tasks\n */\nexport class DevStartupPlugin {\n  private options: DevStartupPluginOptions;\n\n  constructor(options: DevStartupPluginOptions = {}) {\n    this.options = options;\n  }\n\n  apply(compiler: Compiler): void {\n    // Use tapPromise for proper async handling\n    compiler.hooks.done.tapPromise('DevStartupPlugin', async () => {\n      // Run startup tasks only once\n      if (!startupDone) {\n        startupDone = true;\n        await this.runStartupTasks();\n      }\n    });\n  }\n\n  private async runStartupTasks(): Promise<void> {\n    // 1. Print banner\n    console.log('\\n' + chalk.yellowBright.bold(DJANGO_CFG_BANNER));\n\n    // 2. Print current version\n    const version = getCurrentVersion();\n    if (version) {\n      console.log(chalk.dim(`  📦 @djangocfg/nextjs v${version}`));\n    }\n\n    // 3. Check PWA setup\n    this.checkPWASetup();\n\n    // 4. Print AI docs hint\n    console.log(chalk.magenta(`  ${AI_DOCS_HINT}\\n`));\n\n    // 5. Check for package updates\n    if (this.options.checkUpdates !== false) {\n      try {\n        await checkAndUpdatePackages({\n          autoUpdate: this.options.autoUpdate,\n          forceCheckWorkspace: this.options.forceCheckWorkspace,\n          force: true, // Force check ignoring cooldown\n        });\n      } catch (err) {\n        console.log(chalk.red('  Update check failed:'), err);\n      }\n    }\n\n    // 6. Check for missing optional packages\n    if (this.options.checkPackages !== false) {\n      await checkAndInstallPackages({\n        autoInstall: this.options.autoInstall,\n      });\n    }\n  }\n\n  private checkPWASetup(): void {\n    const fs = require('fs');\n    const path = require('path');\n\n    const cwd = process.cwd();\n    const swPath = path.join(cwd, 'app', 'sw.ts');\n    const manifestPath = path.join(cwd, 'app', 'manifest.ts');\n\n    const hasSW = fs.existsSync(swPath);\n    const hasManifest = fs.existsSync(manifestPath);\n\n    if (hasSW || hasManifest) {\n      console.log(chalk.cyan('  📱 PWA Configuration:'));\n\n      if (hasSW) {\n        console.log(chalk.green('     ✓ Service Worker: app/sw.ts'));\n      } else {\n        console.log(chalk.yellow('     ⚠ Service Worker: not found'));\n      }\n\n      if (hasManifest) {\n        console.log(chalk.green('     ✓ Manifest: app/manifest.ts'));\n      } else {\n        console.log(chalk.yellow('     ⚠ Manifest: not found'));\n      }\n\n      console.log(chalk.dim('     → Check: DevTools → Application → Service Workers'));\n      console.log(chalk.dim('     → Test push: import from @djangocfg/nextjs/pwa'));\n    }\n  }\n}\n\n/**\n * Reset plugin state (useful for tests)\n */\nexport function resetDevStartupState(): void {\n  startupDone = false;\n}\n","/**\n * AI Documentation Constants\n */\n\n// MCP Server URLs\nexport const MCP_BASE_URL = 'https://mcp.djangocfg.com';\nexport const MCP_SERVER_URL = `${MCP_BASE_URL}/mcp`;\nexport const MCP_API_URL = `${MCP_BASE_URL}/api/search`;\n\n// API Endpoints\nexport const API_SEARCH_ENDPOINT = '/api/search';\nexport const API_INFO_ENDPOINT = '/api/info';\nexport const DEFAULT_TIMEOUT = 10000; // ms\n\n// AI Hint for console output\nexport const AI_DOCS_HINT = `🤖 AI Docs: ${MCP_SERVER_URL} | pnpm ai-docs search \"query\"`;\n\n// Full AI Hint description\nexport const AI_HINT = `\nDjangoCFG Documentation is available via MCP server.\n\nTo get help with DjangoCFG configuration:\n1. Use the MCP server: ${MCP_SERVER_URL}\n2. Or search directly: ${MCP_API_URL}?q=YOUR_QUERY&limit=5\n\nExample queries:\n- \"How to configure PostgreSQL database?\"\n- \"What is DatabaseConfig?\"\n- \"How to setup Redis cache?\"\n- \"Email configuration with SMTP\"\n`;\n","/**\n * Package Installer\n *\n * Provides auto-installation functionality with user confirmation and progress indication.\n */\n\nimport chalk from 'chalk';\nimport { execSync, spawn } from 'child_process';\nimport Conf from 'conf';\nimport consola from 'consola';\nimport { createInterface } from 'readline';\n\nimport { isCI } from '../utils/env';\nimport { getMissingPackages } from './checker';\n\nimport type { MissingPackage } from './checker';\ntype InstallerCacheShape = {\n  autoInstall?: boolean;\n  skipPackages?: string[];\n  lastPrompt?: number;\n};\n\ninterface CacheLike<T extends Record<string, any>> {\n  get<K extends keyof T>(key: K): T[K] | undefined;\n  set<K extends keyof T>(key: K, value: T[K]): void;\n  clear(): void;\n}\n\nfunction createMemoryCache<T extends Record<string, any>>(): CacheLike<T> {\n  const store = new Map<string, unknown>();\n  return {\n    get<K extends keyof T>(key: K): T[K] | undefined {\n      return store.get(String(key)) as T[K] | undefined;\n    },\n    set<K extends keyof T>(key: K, value: T[K]): void {\n      store.set(String(key), value);\n    },\n    clear(): void {\n      store.clear();\n    },\n  };\n}\n\nfunction createInstallerCache(): CacheLike<InstallerCacheShape> {\n  try {\n    return new Conf<InstallerCacheShape>({\n      projectName: 'djangocfg-nextjs-installer',\n      projectVersion: '1.0.0',\n    });\n  } catch {\n    // Fallback for corrupted conf file or invalid JSON in cache storage.\n    return createMemoryCache<InstallerCacheShape>();\n  }\n}\n\n// Installer preferences cache\nconst installerCache = createInstallerCache();\n\n// Don't prompt more than once per hour\nconst PROMPT_COOLDOWN_MS = 60 * 60 * 1000;\n\n// Spinner frames for progress\nconst SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\nexport interface InstallOptions {\n  /** Auto-install without prompting */\n  autoInstall?: boolean;\n  /** Skip specific packages */\n  skipPackages?: string[];\n  /** Force prompt even if recently prompted */\n  force?: boolean;\n}\n\nexport interface InstallProgress {\n  current: number;\n  total: number;\n  package: string;\n  status: 'pending' | 'installing' | 'done' | 'error';\n}\n\n/**\n * Detect package manager\n */\nexport function detectPackageManager(): 'pnpm' | 'yarn' | 'npm' {\n  try {\n    // Check for lockfiles\n    const fs = require('fs');\n    const path = require('path');\n    const cwd = process.cwd();\n\n    if (fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n    if (fs.existsSync(path.join(cwd, 'yarn.lock'))) return 'yarn';\n    if (fs.existsSync(path.join(cwd, 'package-lock.json'))) return 'npm';\n\n    // Check for global package manager\n    try {\n      execSync('pnpm --version', { stdio: 'ignore' });\n      return 'pnpm';\n    } catch {\n      try {\n        execSync('yarn --version', { stdio: 'ignore' });\n        return 'yarn';\n      } catch {\n        return 'npm';\n      }\n    }\n  } catch {\n    return 'npm';\n  }\n}\n\n/**\n * Build install command for a single package\n */\nexport function buildSingleInstallCommand(\n  packageName: string,\n  isDev: boolean,\n  pm: 'pnpm' | 'yarn' | 'npm'\n): string {\n  const devFlag = isDev ? '-D ' : '';\n  switch (pm) {\n    case 'pnpm':\n      return `pnpm add ${devFlag}${packageName}`;\n    case 'yarn':\n      return `yarn add ${devFlag}${packageName}`;\n    case 'npm':\n      return `npm install ${devFlag}${packageName}`;\n  }\n}\n\n/**\n * Build install command for multiple packages (for display)\n */\nexport function buildInstallCommand(packages: MissingPackage[], pm: 'pnpm' | 'yarn' | 'npm'): string {\n  const devPackages = packages.filter(p => p.devDependency).map(p => p.name);\n  const prodPackages = packages.filter(p => !p.devDependency).map(p => p.name);\n\n  const commands: string[] = [];\n\n  if (devPackages.length > 0) {\n    switch (pm) {\n      case 'pnpm':\n        commands.push(`pnpm add -D ${devPackages.join(' ')}`);\n        break;\n      case 'yarn':\n        commands.push(`yarn add -D ${devPackages.join(' ')}`);\n        break;\n      case 'npm':\n        commands.push(`npm install -D ${devPackages.join(' ')}`);\n        break;\n    }\n  }\n\n  if (prodPackages.length > 0) {\n    switch (pm) {\n      case 'pnpm':\n        commands.push(`pnpm add ${prodPackages.join(' ')}`);\n        break;\n      case 'yarn':\n        commands.push(`yarn add ${prodPackages.join(' ')}`);\n        break;\n      case 'npm':\n        commands.push(`npm install ${prodPackages.join(' ')}`);\n        break;\n    }\n  }\n\n  return commands.join(' && ');\n}\n\n/**\n * Ask user for confirmation via readline\n */\nasync function askConfirmation(question: string): Promise<boolean> {\n  // Skip prompt in CI or non-TTY environments\n  if (isCI || !process.stdin.isTTY) {\n    return false;\n  }\n\n  return new Promise((resolve) => {\n    const rl = createInterface({\n      input: process.stdin,\n      output: process.stdout,\n    });\n\n    rl.question(question, (answer) => {\n      rl.close();\n      const normalized = answer.toLowerCase().trim();\n      resolve(normalized === '' || normalized === 'y' || normalized === 'yes');\n    });\n  });\n}\n\n/**\n * Create a simple spinner\n */\nfunction createSpinner(text: string) {\n  let frameIndex = 0;\n  let interval: NodeJS.Timeout | null = null;\n  let currentText = text;\n\n  const render = () => {\n    const frame = SPINNER_FRAMES[frameIndex];\n    process.stdout.write(`\\r${chalk.cyan(frame)} ${currentText}`);\n    frameIndex = (frameIndex + 1) % SPINNER_FRAMES.length;\n  };\n\n  return {\n    start() {\n      if (process.stdout.isTTY) {\n        interval = setInterval(render, 80);\n        render();\n      } else {\n        console.log(`  ${currentText}`);\n      }\n      return this;\n    },\n    text(newText: string) {\n      currentText = newText;\n      if (!process.stdout.isTTY) {\n        console.log(`  ${newText}`);\n      }\n      return this;\n    },\n    succeed(text?: string) {\n      if (interval) clearInterval(interval);\n      if (process.stdout.isTTY) {\n        process.stdout.write(`\\r${chalk.green('✓')} ${text || currentText}\\n`);\n      } else {\n        console.log(`  ${chalk.green('✓')} ${text || currentText}`);\n      }\n      return this;\n    },\n    fail(text?: string) {\n      if (interval) clearInterval(interval);\n      if (process.stdout.isTTY) {\n        process.stdout.write(`\\r${chalk.red('✗')} ${text || currentText}\\n`);\n      } else {\n        console.log(`  ${chalk.red('✗')} ${text || currentText}`);\n      }\n      return this;\n    },\n    stop() {\n      if (interval) clearInterval(interval);\n      if (process.stdout.isTTY) {\n        process.stdout.write('\\r\\x1b[K'); // Clear line\n      }\n      return this;\n    },\n  };\n}\n\n/**\n * Install a single package with progress\n */\nasync function installSinglePackage(\n  pkg: MissingPackage,\n  pm: 'pnpm' | 'yarn' | 'npm',\n  index: number,\n  total: number\n): Promise<boolean> {\n  const command = buildSingleInstallCommand(pkg.name, pkg.devDependency, pm);\n  const progress = `[${index + 1}/${total}]`;\n  const spinner = createSpinner(`${chalk.dim(progress)} Installing ${chalk.cyan(pkg.name)}...`);\n\n  spinner.start();\n\n  return new Promise((resolve) => {\n    const [cmd, ...args] = command.split(' ');\n    const proc = spawn(cmd, args, {\n      shell: true,\n      cwd: process.cwd(),\n      stdio: ['ignore', 'pipe', 'pipe'],\n    });\n\n    let stderr = '';\n\n    proc.stderr?.on('data', (data) => {\n      stderr += data.toString();\n    });\n\n    proc.on('close', (code) => {\n      if (code === 0) {\n        spinner.succeed(`${chalk.dim(progress)} ${chalk.cyan(pkg.name)} ${chalk.green('installed')}`);\n        resolve(true);\n      } else {\n        spinner.fail(`${chalk.dim(progress)} ${chalk.cyan(pkg.name)} ${chalk.red('failed')}`);\n        if (stderr) {\n          console.log(chalk.dim(`    ${stderr.split('\\n')[0]}`));\n        }\n        resolve(false);\n      }\n    });\n\n    proc.on('error', () => {\n      spinner.fail(`${chalk.dim(progress)} ${chalk.cyan(pkg.name)} ${chalk.red('failed')}`);\n      resolve(false);\n    });\n  });\n}\n\n/**\n * Install packages with progress indication\n */\nexport async function installPackagesWithProgress(packages: MissingPackage[]): Promise<boolean> {\n  if (packages.length === 0) return true;\n\n  const pm = detectPackageManager();\n  const total = packages.length;\n\n  console.log('');\n  console.log(chalk.bold(`  Installing ${total} package${total > 1 ? 's' : ''}...`));\n  console.log('');\n\n  let successCount = 0;\n  let failedPackages: string[] = [];\n\n  for (let i = 0; i < packages.length; i++) {\n    const success = await installSinglePackage(packages[i], pm, i, total);\n    if (success) {\n      successCount++;\n    } else {\n      failedPackages.push(packages[i].name);\n    }\n  }\n\n  console.log('');\n\n  if (failedPackages.length === 0) {\n    consola.success(`All ${total} packages installed successfully!`);\n    return true;\n  } else if (successCount > 0) {\n    consola.warn(`${successCount}/${total} packages installed. Failed: ${failedPackages.join(', ')}`);\n    return false;\n  } else {\n    consola.error(`Failed to install packages: ${failedPackages.join(', ')}`);\n    return false;\n  }\n}\n\n/**\n * Install packages (simple version without per-package progress)\n */\nexport async function installPackages(packages: MissingPackage[]): Promise<boolean> {\n  // Use progress version for multiple packages in TTY\n  if (packages.length > 1 && process.stdout.isTTY) {\n    return installPackagesWithProgress(packages);\n  }\n\n  // Simple installation for single package or non-TTY\n  if (packages.length === 0) return true;\n\n  const pm = detectPackageManager();\n  const command = buildInstallCommand(packages, pm);\n\n  consola.info(`Installing: ${chalk.cyan(packages.map(p => p.name).join(', '))}`);\n\n  const spinner = createSpinner('Installing packages...');\n  spinner.start();\n\n  return new Promise((resolve) => {\n    const proc = spawn(command, {\n      shell: true,\n      cwd: process.cwd(),\n      stdio: ['ignore', 'pipe', 'pipe'],\n    });\n\n    proc.on('close', (code) => {\n      if (code === 0) {\n        spinner.succeed('Packages installed successfully!');\n        resolve(true);\n      } else {\n        spinner.fail('Failed to install packages');\n        resolve(false);\n      }\n    });\n\n    proc.on('error', () => {\n      spinner.fail('Installation failed');\n      resolve(false);\n    });\n  });\n}\n\n/**\n * Check and prompt for missing packages\n *\n * Returns true if all packages are available (either already installed or just installed)\n */\nexport async function checkAndInstallPackages(options: InstallOptions = {}): Promise<boolean> {\n  const missing = getMissingPackages();\n\n  // Filter out skipped packages\n  const skipList = options.skipPackages || installerCache.get('skipPackages') || [];\n  const toInstall = missing.filter(p => !skipList.includes(p.name));\n\n  if (toInstall.length === 0) {\n    return true;\n  }\n\n  // Check cooldown (don't prompt too often)\n  const lastPrompt = installerCache.get('lastPrompt') || 0;\n  if (!options.force && (Date.now() - lastPrompt) < PROMPT_COOLDOWN_MS) {\n    // Show info but don't prompt\n    printMissingPackagesInfo(toInstall);\n    return false;\n  }\n\n  // Auto-install if configured\n  if (options.autoInstall || installerCache.get('autoInstall')) {\n    return installPackages(toInstall);\n  }\n\n  // Show missing packages\n  console.log('');\n  consola.box('📦 Missing Optional Packages');\n  console.log('');\n\n  for (const pkg of toInstall) {\n    console.log(`  ${chalk.yellow('•')} ${chalk.bold(pkg.name)}`);\n    console.log(`    ${chalk.dim(pkg.description)}`);\n    console.log(`    ${chalk.dim(pkg.reason)}`);\n    console.log('');\n  }\n\n  // Build install command for display\n  const pm = detectPackageManager();\n  const command = buildInstallCommand(toInstall, pm);\n\n  console.log(`  ${chalk.cyan('Command:')} ${command}`);\n  console.log('');\n\n  // Ask for confirmation\n  installerCache.set('lastPrompt', Date.now());\n\n  const shouldInstall = await askConfirmation(\n    `${chalk.green('?')} Install these packages now? ${chalk.dim('[Y/n]')} `\n  );\n\n  if (shouldInstall) {\n    const success = await installPackages(toInstall);\n\n    // Ask if user wants to enable auto-install for future\n    if (success) {\n      const enableAuto = await askConfirmation(\n        `${chalk.green('?')} Enable auto-install for future? ${chalk.dim('[y/N]')} `\n      );\n      if (enableAuto) {\n        installerCache.set('autoInstall', true);\n        consola.info('Auto-install enabled. Run with --no-auto-install to disable.');\n      }\n    }\n\n    return success;\n  }\n\n  // User declined, ask if they want to skip these packages permanently\n  const skipPermanently = await askConfirmation(\n    `${chalk.green('?')} Skip these packages in future prompts? ${chalk.dim('[y/N]')} `\n  );\n\n  if (skipPermanently) {\n    const currentSkip = installerCache.get('skipPackages') || [];\n    installerCache.set('skipPackages', [...currentSkip, ...toInstall.map(p => p.name)]);\n    consola.info('Packages added to skip list.');\n  }\n\n  return false;\n}\n\n/**\n * Print info about missing packages without prompting\n */\nfunction printMissingPackagesInfo(packages: MissingPackage[]): void {\n  if (packages.length === 0) return;\n\n  const pm = detectPackageManager();\n  const command = buildInstallCommand(packages, pm);\n\n  consola.warn(`Missing optional packages: ${packages.map(p => p.name).join(', ')}`);\n  consola.info(`Install with: ${chalk.cyan(command)}`);\n}\n\n/**\n * Reset installer preferences\n */\nexport function resetInstallerPreferences(): void {\n  installerCache.clear();\n  consola.success('Installer preferences reset');\n}\n","/**\n * Package Updater\n *\n * Checks for outdated @djangocfg/* packages and offers to update them.\n */\n\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport Conf from 'conf';\nimport consola from 'consola';\nimport { createRequire } from 'module';\nimport { join } from 'path';\nimport { createInterface } from 'readline';\nimport semver from 'semver';\n\nimport { DJANGOCFG_PACKAGES, PACKAGE_NAME } from '../constants';\nimport { isCI } from '../utils/env';\nimport { detectPackageManager } from './installer';\n\ntype UpdaterCacheShape = {\n  autoUpdate?: boolean;\n  lastCheck?: number;\n  skippedVersions?: Record<string, string>;\n};\n\ninterface CacheLike<T extends Record<string, any>> {\n  get<K extends keyof T>(key: K): T[K] | undefined;\n  set<K extends keyof T>(key: K, value: T[K]): void;\n  clear(): void;\n}\n\nfunction createMemoryCache<T extends Record<string, any>>(): CacheLike<T> {\n  const store = new Map<string, unknown>();\n  return {\n    get<K extends keyof T>(key: K): T[K] | undefined {\n      return store.get(String(key)) as T[K] | undefined;\n    },\n    set<K extends keyof T>(key: K, value: T[K]): void {\n      store.set(String(key), value);\n    },\n    clear(): void {\n      store.clear();\n    },\n  };\n}\n\nfunction createUpdaterCache(): CacheLike<UpdaterCacheShape> {\n  try {\n    return new Conf<UpdaterCacheShape>({\n      projectName: 'djangocfg-nextjs-updater',\n      projectVersion: '1.0.0',\n    });\n  } catch {\n    // Fallback for corrupted conf file or invalid JSON in cache storage.\n    return createMemoryCache<UpdaterCacheShape>();\n  }\n}\n\n// Updater preferences cache\nconst updaterCache = createUpdaterCache();\n\n// Check for updates once per hour\nconst UPDATE_CHECK_COOLDOWN_MS = 60 * 60 * 1000;\n\n// Spinner frames\nconst SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\nexport interface PackageVersion {\n  name: string;\n  current: string | null;\n  latest: string | null;\n  hasUpdate: boolean;\n}\n\nexport interface UpdateOptions {\n  /** Auto-update without prompting */\n  autoUpdate?: boolean;\n  /** Force check even if recently checked (ignores cooldown) */\n  force?: boolean;\n  /** Force check even for workspace:* packages (for testing) */\n  forceCheckWorkspace?: boolean;\n}\n\n/**\n * Check if package is a workspace dependency\n */\nfunction isWorkspacePackage(packageName: string): boolean {\n  try {\n    const fs = require('fs');\n    const pkgJsonPath = join(process.cwd(), 'package.json');\n    const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));\n\n    const deps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };\n    const version = deps[packageName];\n\n    return version?.startsWith('workspace:') || false;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Get installed version of a package from consumer's project\n * Uses multiple fallback strategies for monorepo compatibility\n */\nexport function getInstalledVersion(packageName: string): string | null {\n  const fs = require('fs');\n  const cwd = process.cwd();\n\n  // Strategy 1: Direct read from node_modules (works with symlinks)\n  try {\n    const directPath = join(cwd, 'node_modules', packageName, 'package.json');\n    if (fs.existsSync(directPath)) {\n      const pkg = JSON.parse(fs.readFileSync(directPath, 'utf-8'));\n      return pkg.version || null;\n    }\n  } catch {\n    // Continue to next strategy\n  }\n\n  // Strategy 2: Use createRequire from cwd\n  try {\n    const consumerRequire = createRequire(join(cwd, 'package.json'));\n    const pkgPath = consumerRequire.resolve(`${packageName}/package.json`);\n    const pkg = require(pkgPath);\n    return pkg.version || null;\n  } catch {\n    // Continue to next strategy\n  }\n\n  // Strategy 3: Try global require\n  try {\n    const pkgPath = require.resolve(`${packageName}/package.json`);\n    const pkg = require(pkgPath);\n    return pkg.version || null;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Check if we should skip update checking for this package\n * (e.g., workspace packages shouldn't be checked against npm)\n */\nexport function shouldCheckUpdates(packageName: string): boolean {\n  return !isWorkspacePackage(packageName);\n}\n\n/**\n * Fetch latest version from npm registry\n */\nasync function fetchLatestVersion(packageName: string): Promise<string | null> {\n  try {\n    const https = await import('https');\n    return new Promise((resolve) => {\n      const req = https.get(\n        `https://registry.npmjs.org/${packageName}/latest`,\n        { timeout: 5000 },\n        (res: any) => {\n          let data = '';\n          res.on('data', (chunk: string) => { data += chunk; });\n          res.on('end', () => {\n            try {\n              const json = JSON.parse(data);\n              resolve(json.version || null);\n            } catch {\n              resolve(null);\n            }\n          });\n        }\n      );\n      req.on('error', () => resolve(null));\n      req.on('timeout', () => { req.destroy(); resolve(null); });\n    });\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Check all @djangocfg packages for updates\n * All packages are aligned to the version of @djangocfg/nextjs (master package)\n * Skips workspace:* packages unless forceCheckWorkspace is true\n */\nexport async function checkForUpdates(options: { forceCheckWorkspace?: boolean } = {}): Promise<PackageVersion[]> {\n  const results: PackageVersion[] = [];\n\n  // First, get the latest version of master package (@djangocfg/nextjs)\n  // All other packages should align to this version\n  const masterLatest = await fetchLatestVersion(PACKAGE_NAME);\n  if (!masterLatest) {\n    // Can't determine target version, skip update check\n    return results;\n  }\n\n  // Check packages against master version\n  const checks = DJANGOCFG_PACKAGES.map(async (name) => {\n    // Skip workspace packages unless force mode\n    const isWorkspace = !shouldCheckUpdates(name);\n    if (!options.forceCheckWorkspace && isWorkspace) {\n      return null;\n    }\n\n    const current = getInstalledVersion(name);\n    if (!current) {\n      return null;\n    }\n\n    // All packages should update to master package version\n    const hasUpdate = !!(masterLatest && current && semver.gt(masterLatest, current));\n\n    return { name, current, latest: masterLatest, hasUpdate };\n  });\n\n  const checkResults = await Promise.all(checks);\n\n  for (const result of checkResults) {\n    if (result) {\n      results.push(result);\n    }\n  }\n\n  return results;\n}\n\n/**\n * Get packages that need updating\n */\nexport async function getOutdatedPackages(options: { forceCheckWorkspace?: boolean } = {}): Promise<PackageVersion[]> {\n  const all = await checkForUpdates(options);\n  const skipped = updaterCache.get('skippedVersions') || {};\n\n  return all.filter(pkg => {\n    if (!pkg.hasUpdate) return false;\n    // Skip if user chose to skip this specific version\n    if (skipped[pkg.name] === pkg.latest) return false;\n    return true;\n  });\n}\n\n/**\n * Create a simple spinner\n */\nfunction createSpinner(text: string) {\n  let frameIndex = 0;\n  let interval: NodeJS.Timeout | null = null;\n  let currentText = text;\n\n  const render = () => {\n    const frame = SPINNER_FRAMES[frameIndex];\n    process.stdout.write(`\\r${chalk.cyan(frame)} ${currentText}`);\n    frameIndex = (frameIndex + 1) % SPINNER_FRAMES.length;\n  };\n\n  return {\n    start() {\n      if (process.stdout.isTTY) {\n        interval = setInterval(render, 80);\n        render();\n      } else {\n        console.log(`  ${currentText}`);\n      }\n      return this;\n    },\n    text(newText: string) {\n      currentText = newText;\n      return this;\n    },\n    succeed(text?: string) {\n      if (interval) clearInterval(interval);\n      if (process.stdout.isTTY) {\n        process.stdout.write(`\\r${chalk.green('✓')} ${text || currentText}\\n`);\n      } else {\n        console.log(`  ${chalk.green('✓')} ${text || currentText}`);\n      }\n      return this;\n    },\n    fail(text?: string) {\n      if (interval) clearInterval(interval);\n      if (process.stdout.isTTY) {\n        process.stdout.write(`\\r${chalk.red('✗')} ${text || currentText}\\n`);\n      } else {\n        console.log(`  ${chalk.red('✗')} ${text || currentText}`);\n      }\n      return this;\n    },\n    stop() {\n      if (interval) clearInterval(interval);\n      if (process.stdout.isTTY) {\n        process.stdout.write('\\r\\x1b[K');\n      }\n      return this;\n    },\n  };\n}\n\n/**\n * Ask user for confirmation\n */\nasync function askConfirmation(question: string): Promise<boolean> {\n  if (isCI || !process.stdin.isTTY) {\n    return false;\n  }\n\n  return new Promise((resolve) => {\n    const rl = createInterface({\n      input: process.stdin,\n      output: process.stdout,\n    });\n\n    rl.question(question, (answer) => {\n      rl.close();\n      const normalized = answer.toLowerCase().trim();\n      resolve(normalized === '' || normalized === 'y' || normalized === 'yes');\n    });\n  });\n}\n\n/**\n * Update a single package with progress\n */\nasync function updateSinglePackage(\n  pkg: PackageVersion,\n  pm: 'pnpm' | 'yarn' | 'npm',\n  index: number,\n  total: number\n): Promise<boolean> {\n  const progress = `[${index + 1}/${total}]`;\n  const versionInfo = `${chalk.red(pkg.current)} → ${chalk.green(pkg.latest)}`;\n  const spinner = createSpinner(\n    `${chalk.dim(progress)} Updating ${chalk.cyan(pkg.name)} ${versionInfo}`\n  );\n\n  spinner.start();\n\n  // Always install with @latest to keep package.json consistent\n  const command = pm === 'pnpm'\n    ? `pnpm add ${pkg.name}@latest`\n    : pm === 'yarn'\n    ? `yarn add ${pkg.name}@latest`\n    : `npm install ${pkg.name}@latest`;\n\n  return new Promise((resolve) => {\n    const proc = spawn(command, {\n      shell: true,\n      cwd: process.cwd(),\n      stdio: ['ignore', 'pipe', 'pipe'],\n    });\n\n    proc.on('close', (code) => {\n      if (code === 0) {\n        spinner.succeed(\n          `${chalk.dim(progress)} ${chalk.cyan(pkg.name)} ${chalk.green(pkg.latest!)}`\n        );\n        resolve(true);\n      } else {\n        spinner.fail(\n          `${chalk.dim(progress)} ${chalk.cyan(pkg.name)} ${chalk.red('failed')}`\n        );\n        resolve(false);\n      }\n    });\n\n    proc.on('error', () => {\n      spinner.fail(`${chalk.dim(progress)} ${chalk.cyan(pkg.name)} ${chalk.red('failed')}`);\n      resolve(false);\n    });\n  });\n}\n\n/**\n * Update packages with progress\n */\nexport async function updatePackagesWithProgress(packages: PackageVersion[]): Promise<boolean> {\n  if (packages.length === 0) return true;\n\n  const pm = detectPackageManager();\n  const total = packages.length;\n\n  console.log('');\n  console.log(chalk.bold(`  Updating ${total} package${total > 1 ? 's' : ''}...`));\n  console.log('');\n\n  let successCount = 0;\n  const failedPackages: string[] = [];\n\n  for (let i = 0; i < packages.length; i++) {\n    const success = await updateSinglePackage(packages[i], pm, i, total);\n    if (success) {\n      successCount++;\n    } else {\n      failedPackages.push(packages[i].name);\n    }\n  }\n\n  console.log('');\n\n  if (failedPackages.length === 0) {\n    consola.success(`All ${total} packages updated successfully!`);\n    return true;\n  } else if (successCount > 0) {\n    consola.warn(`${successCount}/${total} packages updated. Failed: ${failedPackages.join(', ')}`);\n    return false;\n  } else {\n    consola.error(`Failed to update packages: ${failedPackages.join(', ')}`);\n    return false;\n  }\n}\n\n/**\n * Check and prompt for package updates\n */\nexport async function checkAndUpdatePackages(options: UpdateOptions = {}): Promise<boolean> {\n  // Check cooldown\n  const lastCheck = updaterCache.get('lastCheck') || 0;\n  if (!options.force && (Date.now() - lastCheck) < UPDATE_CHECK_COOLDOWN_MS) {\n    return true;\n  }\n\n  updaterCache.set('lastCheck', Date.now());\n\n  // Check for updates\n  const spinner = createSpinner('Checking for updates...');\n  spinner.start();\n\n  const outdated = await getOutdatedPackages({\n    forceCheckWorkspace: options.forceCheckWorkspace,\n  });\n\n  spinner.stop();\n\n  console.log(chalk.dim(`  Found ${outdated.length} outdated package(s)`));\n\n  if (outdated.length === 0) {\n    console.log(chalk.green('  ✓ All packages are up to date'));\n    return true;\n  }\n\n  // Auto-update if configured\n  if (options.autoUpdate || updaterCache.get('autoUpdate')) {\n    return updatePackagesWithProgress(outdated);\n  }\n\n  // Show outdated packages\n  console.log('');\n  consola.box('📦 Updates Available');\n  console.log('');\n\n  for (const pkg of outdated) {\n    console.log(\n      `  ${chalk.yellow('•')} ${chalk.bold(pkg.name)}  ` +\n      `${chalk.red(pkg.current)} → ${chalk.green(pkg.latest)}`\n    );\n  }\n  console.log('');\n\n  // Ask for confirmation\n  const shouldUpdate = await askConfirmation(\n    `${chalk.green('?')} Update these packages now? ${chalk.dim('[Y/n]')} `\n  );\n\n  if (shouldUpdate) {\n    const success = await updatePackagesWithProgress(outdated);\n\n    if (success) {\n      const enableAuto = await askConfirmation(\n        `${chalk.green('?')} Enable auto-update for future? ${chalk.dim('[y/N]')} `\n      );\n      if (enableAuto) {\n        updaterCache.set('autoUpdate', true);\n        consola.info('Auto-update enabled.');\n      }\n    }\n\n    return success;\n  }\n\n  // User declined, ask if they want to skip these versions\n  const skipVersions = await askConfirmation(\n    `${chalk.green('?')} Skip these versions in future? ${chalk.dim('[y/N]')} `\n  );\n\n  if (skipVersions) {\n    const skipped = updaterCache.get('skippedVersions') || {};\n    for (const pkg of outdated) {\n      if (pkg.latest) {\n        skipped[pkg.name] = pkg.latest;\n      }\n    }\n    updaterCache.set('skippedVersions', skipped);\n    consola.info('Versions skipped. Will prompt again for newer versions.');\n  }\n\n  return false;\n}\n\n/**\n * Reset updater preferences\n */\nexport function resetUpdaterPreferences(): void {\n  updaterCache.clear();\n  consola.success('Updater preferences reset');\n}\n","/**\n * Version Checking Utilities\n */\n\nimport chalk from 'chalk';\nimport Conf from 'conf';\nimport consola from 'consola';\nimport semver from 'semver';\n\nimport { DJANGOCFG_PACKAGES, PACKAGE_NAME, VERSION_CACHE_TTL_MS } from '../constants';\n\ntype VersionCacheShape = {\n  latestVersion?: string;\n  lastCheck?: number;\n};\n\ninterface CacheLike<T extends Record<string, any>> {\n  get<K extends keyof T>(key: K): T[K] | undefined;\n  set<K extends keyof T>(key: K, value: T[K]): void;\n  clear(): void;\n}\n\nfunction createMemoryCache<T extends Record<string, any>>(): CacheLike<T> {\n  const store = new Map<string, unknown>();\n  return {\n    get<K extends keyof T>(key: K): T[K] | undefined {\n      return store.get(String(key)) as T[K] | undefined;\n    },\n    set<K extends keyof T>(key: K, value: T[K]): void {\n      store.set(String(key), value);\n    },\n    clear(): void {\n      store.clear();\n    },\n  };\n}\n\nfunction createVersionCache(): CacheLike<VersionCacheShape> {\n  try {\n    return new Conf<VersionCacheShape>({\n      projectName: 'djangocfg-nextjs',\n      projectVersion: '1.0.0',\n    });\n  } catch {\n    // Fallback for corrupted conf file or invalid JSON in cache storage.\n    return createMemoryCache<VersionCacheShape>();\n  }\n}\n\n// Version cache using conf (stores in ~/.config/djangocfg-nextjs/)\nconst versionCache = createVersionCache();\n\n/**\n * Get current package version from package.json\n */\nexport function getCurrentVersion(): string | null {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-require-imports\n    const packageJson = require('../../../package.json');\n    return packageJson.version || null;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Fetch latest version from npm registry (with 1 hour caching via conf)\n */\nexport async function fetchLatestVersion(): Promise<string | null> {\n  // Check cache first\n  const lastCheck = versionCache.get('lastCheck') || 0;\n  const cachedVersion = versionCache.get('latestVersion');\n\n  if (cachedVersion && (Date.now() - lastCheck) < VERSION_CACHE_TTL_MS) {\n    return cachedVersion;\n  }\n\n  // Fetch from npm registry\n  try {\n    const https = await import('https');\n    return new Promise((resolve) => {\n      const req = https.get(\n        `https://registry.npmjs.org/${PACKAGE_NAME}/latest`,\n        { timeout: 5000 },\n        (res: any) => {\n          let data = '';\n          res.on('data', (chunk: string) => { data += chunk; });\n          res.on('end', () => {\n            try {\n              const json = JSON.parse(data);\n              const version = json.version || null;\n              if (version) {\n                versionCache.set('latestVersion', version);\n                versionCache.set('lastCheck', Date.now());\n              }\n              resolve(version);\n            } catch {\n              resolve(cachedVersion || null);\n            }\n          });\n        }\n      );\n      req.on('error', () => resolve(cachedVersion || null));\n      req.on('timeout', () => { req.destroy(); resolve(cachedVersion || null); });\n    });\n  } catch {\n    return cachedVersion || null;\n  }\n}\n\n/**\n * Check if update is available\n */\nexport async function checkForUpdate(): Promise<{\n  hasUpdate: boolean;\n  currentVersion: string | null;\n  latestVersion: string | null;\n}> {\n  const currentVersion = getCurrentVersion();\n  if (!currentVersion) {\n    return { hasUpdate: false, currentVersion: null, latestVersion: null };\n  }\n\n  const latestVersion = await fetchLatestVersion();\n  const hasUpdate = !!(latestVersion && semver.gt(latestVersion, currentVersion));\n\n  return { hasUpdate, currentVersion, latestVersion };\n}\n\n/**\n * Get update command for all djangocfg packages\n */\nexport function getUpdateCommand(): string {\n  return `pnpm add ${DJANGOCFG_PACKAGES.map(p => `${p}@latest`).join(' ')}`;\n}\n\n/**\n * Print version info and update notification\n */\nexport async function printVersionInfo(): Promise<void> {\n  const { hasUpdate, currentVersion, latestVersion } = await checkForUpdate();\n\n  if (!currentVersion) return;\n\n  // Print current version\n  consola.box(`📦 @djangocfg/nextjs v${currentVersion}`);\n\n  // Show update notification if available\n  if (hasUpdate && latestVersion) {\n    consola.warn(`Update Available! ${chalk.red(currentVersion)} → ${chalk.green(latestVersion)}`);\n    consola.info(`Run: ${chalk.cyan(getUpdateCommand())}`);\n    console.log('');\n  }\n}\n","/**\n * Deep Merge Utility\n *\n * Recursively merges objects, replacing arrays instead of merging them.\n */\n\nexport function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n  const output = { ...target };\n\n  for (const key in source) {\n    if (source[key] === undefined) continue;\n\n    // Arrays: replace (don't merge arrays)\n    if (Array.isArray(source[key])) {\n      output[key] = source[key] as any;\n    }\n    // Objects: deep merge\n    else if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n      const targetValue = output[key];\n      if (targetValue && typeof targetValue === 'object' && !Array.isArray(targetValue)) {\n        output[key] = deepMerge(targetValue, source[key] as any);\n      } else {\n        output[key] = source[key] as any;\n      }\n    }\n    // Primitives: replace\n    else {\n      output[key] = source[key] as any;\n    }\n  }\n\n  return output;\n}\n","/**\n * Base Next.js Configuration Factory\n *\n * Universal, reusable Next.js config for all DjangoCFG projects\n * Provides standard settings that can be extended per project\n *\n * @example\n * ```typescript\n * // In your project's next.config.ts\n * import { createBaseNextConfig } from '@djangocfg/nextjs/config';\n * import bundleAnalyzer from '@next/bundle-analyzer';\n *\n * const withBundleAnalyzer = bundleAnalyzer({\n *   enabled: process.env.ANALYZE === 'true',\n * });\n *\n * export default withBundleAnalyzer(createBaseNextConfig({\n *   // Your project-specific overrides\n *   transpilePackages: ['my-custom-package'],\n * }));\n * ```\n */\n\nimport type { NextConfig } from 'next';\nimport type { Configuration as WebpackConfig } from 'webpack';\n\nimport { type I18nPluginOptions, withI18n } from '../i18n/plugin';\nimport { type PWAPluginOptions, withPWA } from '../pwa/plugin';\nimport { DEFAULT_OPTIMIZE_PACKAGES, DEFAULT_TRANSPILE_PACKAGES } from './constants';\nimport { addCompressionPlugins } from './plugins/compression';\nimport { DevStartupPlugin } from './plugins/devStartup';\nimport { deepMerge } from './utils/deepMerge';\nimport { getApiUrl, getBasePath, getSiteUrl, isDev, isStaticBuild } from './utils/env';\n\n// ─────────────────────────────────────────────────────────────────────────\n// Configuration Options\n// ─────────────────────────────────────────────────────────────────────────\n\nexport interface BaseNextConfigOptions {\n  /** Static build path (used when NEXT_PUBLIC_STATIC_BUILD=true) */\n  isDefaultCfgAdmin?: boolean;\n  /** Additional transpile packages (merged with defaults) */\n  transpilePackages?: string[];\n  /** Additional optimize package imports (merged with defaults) */\n  optimizePackageImports?: string[];\n  /** Check for @djangocfg/* package updates on startup (default: true) */\n  checkUpdates?: boolean;\n  /** Auto-update outdated packages without prompting (default: false) */\n  autoUpdate?: boolean;\n  /** Force check workspace:* packages for updates (for testing in monorepo) */\n  forceCheckWorkspace?: boolean;\n  /** Check for missing optional packages on startup (default: true) */\n  checkPackages?: boolean;\n  /** Auto-install missing packages without prompting (default: false) */\n  autoInstall?: boolean;\n  /**\n   * Allow embedding this app in iframe from specified origins\n   * Set to ['*'] to allow all origins, or specify domains like ['https://djangocfg.com']\n   */\n  allowIframeFrom?: string[];\n  /**\n   * Enable DPoP (RFC 9449) sender-constrained tokens on the generated API\n   * client. When true, the client holds a non-extractable key and signs a\n   * per-request `DPoP` proof so a stolen token is useless. Must be paired with\n   * `jwt = JWTConfig(dpop_enabled=True)` on the Django backend. Default: false.\n   *\n   * Inlines `NEXT_PUBLIC_DPOP_ENABLED='true'` so the generated auth.ts activates.\n   */\n  dpop?: boolean;\n  /**\n   * Loosen the baseline CSP just enough for Stripe.js / Stripe Checkout &\n   * Elements to work. When true, the required Stripe origins are added to\n   * `script-src` (js.stripe.com — loads the SDK), `frame-src`\n   * (js.stripe.com + checkout.stripe.com — Elements/Checkout mount iframes)\n   * and `connect-src` (api.stripe.com — tokenization/confirm XHR). Without\n   * this, the browser blocks Stripe.js and the payment form never renders.\n   * Enable ONLY on apps that actually mount Stripe (e.g. the billing\n   * dashboard), so every other app keeps the tighter default. Default: false.\n   */\n  stripe?: boolean;\n  /**\n   * PWA configuration options\n   * Set to false to disable PWA, or provide custom options\n   * @default { enabled: true (in production), disable: true (in development) }\n   */\n  pwa?: PWAPluginOptions | false;\n  /**\n   * i18n configuration options for internationalization\n   * Enables URL-based locale routing (e.g., /en/about, /ru/about)\n   *\n   * @example\n   * ```ts\n   * i18n: {\n   *   locales: ['en', 'ru', 'ko'],\n   *   defaultLocale: 'en',\n   * }\n   * ```\n   */\n  i18n?: I18nPluginOptions;\n  /** Turbopack configuration (Next.js 16+ default bundler) */\n  turbopack?: NextConfig['turbopack'];\n  /** Custom webpack configuration function (called after base webpack logic) */\n  webpack?: (\n    config: WebpackConfig,\n    options: { isServer: boolean; dev: boolean; [key: string]: any }\n  ) => WebpackConfig | void;\n  /** Custom experimental options (merged with defaults) */\n  experimental?: NextConfig['experimental'];\n  /** Custom env variables (merged with defaults) */\n  env?: Record<string, string | undefined>;\n  /** Additional redirects (merged with base URL normalization redirects) */\n  redirects?: NextConfig['redirects'];\n  /** Additional headers (merged with base CORS/security headers) */\n  headers?: NextConfig['headers'];\n  /** Additional rewrites */\n  rewrites?: NextConfig['rewrites'];\n  /** Override any Next.js config option */\n  [key: string]: any;\n}\n\n// ─────────────────────────────────────────────────────────────────────────\n// Base Configuration Factory\n// ─────────────────────────────────────────────────────────────────────────\n\n/**\n * Create base Next.js configuration with standard DjangoCFG settings\n *\n * @param options - Custom configuration options to merge with base config\n * @returns Next.js configuration function\n */\nexport function createBaseNextConfig(\n  options: BaseNextConfigOptions = {}\n): NextConfig {\n\n  const basePath = getBasePath(options.isDefaultCfgAdmin);\n  const apiUrl = getApiUrl();\n  const siteUrl = getSiteUrl();\n\n  // Base configuration\n  const baseConfig: NextConfig = {\n    reactStrictMode: true,\n    trailingSlash: true,\n\n    // Dev indicator position — set explicitly so it's managed from one place\n    // across every @djangocfg app. Apps can override via `devIndicators` in\n    // their options (deep-merged over this). Kept bottom-left for now.\n    devIndicators: { position: 'bottom-left' },\n\n    // Static export configuration\n    ...(isStaticBuild && {\n      output: 'export' as const,\n      distDir: 'out',\n      basePath: basePath,\n      // Fix for Next.js 15.5.4: prevent 500.html generation issue\n      generateBuildId: async () => {\n        return 'static-build';\n      },\n    }),\n\n    // Standalone output for Docker (only in production, not dev)\n    ...(!isStaticBuild && !isDev && {\n      output: 'standalone' as const,\n    }),\n\n    // Environment variables\n    env: {\n      NEXT_PUBLIC_BASE_PATH: basePath,\n      NEXT_PUBLIC_API_URL: apiUrl,\n      NEXT_PUBLIC_SITE_URL: siteUrl,\n      // DPoP toggle for the generated auth client (RFC 9449). Only inlined when\n      // explicitly enabled, so non-DPoP apps stay on the plain Bearer path.\n      ...(options.dpop ? { NEXT_PUBLIC_DPOP_ENABLED: 'true' } : {}),\n      // Disable Next.js telemetry (Next.js 15+ uses env var instead of config option)\n      NEXT_TELEMETRY_DISABLED: '1',\n      ...options.env,\n    },\n\n    // Images configuration\n    images: {\n      unoptimized: true,\n    },\n\n    // CORS headers for static files and iframe embedding\n    async headers() {\n      const headers: { source: string; headers: { key: string; value: string }[] }[] = [\n        {\n          source: '/static/:path*',\n          headers: [\n            { key: 'Access-Control-Allow-Origin', value: '*' },\n            { key: 'Access-Control-Allow-Methods', value: 'GET, OPTIONS' },\n            { key: 'Access-Control-Allow-Headers', value: 'Origin, Content-Type, Accept' },\n          ],\n        },\n      ];\n\n      // ── Baseline security headers on every route ──────────────────────────\n      // First line of defence against XSS/clickjacking/sniffing. The CSP here is\n      // a PRAGMATIC baseline: it kills the high-value injection vectors\n      // (plugins/objects, <base> hijacking, form-action exfiltration, iframe\n      // embedding) while still allowing the inline/eval scripts a Next.js app\n      // needs in dev. A fully strict nonce-based `script-src` is a follow-up\n      // (needs middleware + per-request nonce wiring) — tracked in the\n      // auth-hardening plan. `allowIframeFrom` (below) overrides frame-ancestors.\n      const hasIframeAllowlist =\n        !!options.allowIframeFrom && options.allowIframeFrom.length > 0;\n      const frameAncestors = hasIframeAllowlist\n        ? (options.allowIframeFrom!.includes('*')\n            ? '*'\n            : `'self' ${options.allowIframeFrom!.join(' ')}`)\n        : \"'none'\";\n\n      // In dev the backend (Django, Centrifugo) is plain http/ws on localhost,\n      // so connect/img must allow http:/ws:. Production stays strict (https/wss\n      // only) to forbid downgrade/cleartext exfiltration.\n      // Stripe.js needs its SDK host in script-src, its iframe hosts in\n      // frame-src, and its API host in connect-src. Opt-in per app via\n      // `options.stripe` so non-payment apps keep the tighter baseline.\n      const stripeScript = options.stripe ? ' https://js.stripe.com' : '';\n      const stripeConnect = options.stripe ? ' https://api.stripe.com' : '';\n      const stripeFrame = options.stripe\n        ? ' https://js.stripe.com https://checkout.stripe.com'\n        : '';\n\n      const connectSrc = isDev\n        ? `connect-src 'self' http: https: ws: wss:${stripeConnect}`\n        : `connect-src 'self' https: wss:${stripeConnect}`;\n      const imgSrc = isDev\n        ? \"img-src 'self' data: blob: http: https:\"\n        : \"img-src 'self' data: blob: https:\";\n\n      const cspDirectives = [\n        \"default-src 'self'\",\n        // Next.js requires inline + eval for its runtime/HMR. Tighten to nonces later.\n        `script-src 'self' 'unsafe-inline' 'unsafe-eval'${stripeScript}`,\n        \"style-src 'self' 'unsafe-inline'\",\n        imgSrc,\n        \"font-src 'self' data:\",\n        // API/websocket calls go cross-origin to Django/Centrifugo.\n        connectSrc,\n        // Stripe Elements/Checkout mount iframes; add their hosts when enabled.\n        `frame-src 'self'${stripeFrame}`,\n        \"object-src 'none'\",\n        \"base-uri 'self'\",\n        \"form-action 'self'\",\n        `frame-ancestors ${frameAncestors}`,\n      ];\n\n      headers.push({\n        source: '/:path*',\n        headers: [\n          { key: 'X-Content-Type-Options', value: 'nosniff' },\n          { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },\n          { key: 'Content-Security-Policy', value: cspDirectives.join('; ') },\n          // X-Frame-Options for older browsers. Omitted when a wildcard iframe\n          // allowlist is set (browsers then rely on CSP frame-ancestors).\n          ...(hasIframeAllowlist && options.allowIframeFrom!.includes('*')\n            ? []\n            : [{ key: 'X-Frame-Options', value: hasIframeAllowlist ? 'SAMEORIGIN' : 'DENY' }]),\n        ],\n      });\n\n      // Merge with user-provided headers\n      const userHeaders = options.headers ? await options.headers() : [];\n      return [...headers, ...userHeaders];\n    },\n\n    // Rewrites (user-provided only)\n    ...(options.rewrites && {\n      rewrites: options.rewrites,\n    }),\n\n    // Redirects for URL normalization\n    // Fixes \"Failed to construct 'URL': Invalid URL\" error with double slashes\n    async redirects() {\n      const baseRedirects = [\n        // Normalize double slashes in URL path (e.g., /foo//bar -> /foo/bar)\n        {\n          source: '/:path*(//)/:rest*',\n          destination: '/:path*/:rest*',\n          permanent: true,\n        },\n        // Handle root double slash (e.g., // -> /)\n        {\n          source: '//',\n          destination: '/',\n          permanent: true,\n        },\n      ];\n\n      // Merge with user-provided redirects\n      const userRedirects = options.redirects ? await options.redirects() : [];\n      return [...baseRedirects, ...userRedirects];\n    },\n\n    // Transpile packages (merge with user-provided)\n    transpilePackages: [\n      ...DEFAULT_TRANSPILE_PACKAGES,\n      ...(options.transpilePackages || []),\n    ],\n\n    // Turbopack configuration (Next.js 16+ default bundler)\n    // Always set turbopack config to silence Next.js 16 warning about webpack config\n    turbopack: options.turbopack || {},\n\n    // Experimental features\n    experimental: {\n      // Optimize package imports (only in production)\n      ...(!isDev && {\n        optimizePackageImports: [\n          ...DEFAULT_OPTIMIZE_PACKAGES,\n          ...(options.optimizePackageImports || []),\n        ],\n      }),\n      // Dev mode optimizations\n      ...(isDev && {\n        optimizeCss: false,\n      }),\n      // User experimental options applied last (can override base settings)\n      ...options.experimental,\n    },\n\n    // Webpack configuration\n    webpack: (config: WebpackConfig, webpackOptions: { isServer: boolean; dev: boolean; [key: string]: any }) => {\n      const { isServer, dev } = webpackOptions;\n\n      // Add dev startup plugin (client-side only in dev)\n      if (dev && !isServer) {\n        if (!config.plugins) {\n          config.plugins = [];\n        }\n        config.plugins.push(\n          new DevStartupPlugin({\n            checkUpdates: options.checkUpdates,\n            autoUpdate: options.autoUpdate,\n            forceCheckWorkspace: options.forceCheckWorkspace,\n            checkPackages: options.checkPackages,\n            autoInstall: options.autoInstall,\n          })\n        );\n      }\n\n      // Dev mode optimizations\n      if (dev) {\n        config.optimization = {\n          ...config.optimization,\n          removeAvailableModules: false,\n          removeEmptyChunks: false,\n          splitChunks: false, // Disable code splitting in dev for faster compilation\n        };\n      }\n\n      // Filesystem cache (dev and production)\n      config.cache = {\n        type: 'filesystem',\n        buildDependencies: {},\n      };\n\n      // Compression plugins (only for static build in production, client-side)\n      if (!isServer && isStaticBuild && !dev) {\n        addCompressionPlugins(config);\n      }\n\n      // Call user's webpack function if provided\n      if (options.webpack) {\n        return options.webpack(config, webpackOptions);\n      }\n\n      return config;\n    },\n  };\n\n  // Extract plugin options before merge (to avoid conflicts with Next.js config)\n  // `transpilePackages` MUST be extracted too: baseConfig already merged it with\n  // DEFAULT_TRANSPILE_PACKAGES — leaving it in nextConfigOptions made deepMerge\n  // REPLACE the merged array with the user's bare list (dropping the defaults,\n  // so every @djangocfg source package stopped transpiling).\n  const {\n    i18n: i18nOptions,\n    pwa: pwaOptions,\n    transpilePackages,\n    optimizePackageImports,\n    isDefaultCfgAdmin,\n    checkUpdates,\n    autoUpdate,\n    forceCheckWorkspace,\n    checkPackages,\n    autoInstall,\n    allowIframeFrom,\n    dpop,\n    stripe,\n    ...nextConfigOptions\n  } = options;\n\n  // Deep merge only valid Next.js options with base config\n  let finalConfig = deepMerge(baseConfig, nextConfigOptions);\n\n  // Apply PWA wrapper only if explicitly configured (opt-in)\n  // PWA requires sw.ts file in the app, so apps must explicitly enable it\n  if (pwaOptions) {\n    finalConfig = withPWA(finalConfig, pwaOptions);\n  }\n\n  // Apply i18n wrapper if configured\n  // Enables next-intl for locale routing and translations\n  if (i18nOptions) {\n    finalConfig = withI18n(finalConfig, i18nOptions);\n  }\n\n  return finalConfig;\n}\n"],"mappings":"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","names":["isDev","isStaticBuild","chalk","consola","isDev","text","consola","chalk","spawn","Conf","consola","createRequire","join","createInterface","createMemoryCache","Conf","SPINNER_FRAMES","join","createRequire","createSpinner","chalk","text","askConfirmation","createInterface","spawn","consola","chalk","Conf","consola","semver","createMemoryCache","Conf","fetchLatestVersion","semver","consola","chalk","chalk","checkPackages"]}