@collie-lang/cli 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts","../src/formatter.ts","../src/watcher.ts","../src/fs-utils.ts","../src/builder.ts","../src/output.ts","../src/checker.ts","../src/creator.ts","../src/nextjs-setup.ts","../src/converter.ts","../src/doctor.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport fs from \"node:fs/promises\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport ts from \"typescript\";\nimport fg from \"fast-glob\";\nimport { diffLines } from \"diff\";\nimport pc from \"picocolors\";\nimport prompts from \"prompts\";\nimport { formatSource } from \"./formatter\";\nimport type { Diagnostic } from \"@collie-lang/compiler\";\nimport { watch as watchCollie } from \"./watcher\";\nimport { build as runBuild } from \"./builder\";\nimport {\n buildDuplicateDiagnostics,\n check as runCheck,\n scanTemplates,\n type TemplateInfo\n} from \"./checker\";\nimport { create as createProject, formatTemplateList } from \"./creator\";\nimport { hasNextDependency, setupNextJs } from \"./nextjs-setup\";\nimport type { NextDirectoryInfo } from \"./nextjs-setup\";\nimport { convertFile } from \"./converter\";\nimport { filterDiagnostics, printDoctorResults, runDoctor } from \"./doctor\";\nimport { formatDiagnosticLine, printSummary } from \"./output\";\n\ntype PackageManager = \"pnpm\" | \"yarn\" | \"npm\";\ntype Framework = \"vite\" | \"nextjs\";\ntype CollieProjectType = \"react-vite\" | \"react-next\" | \"react-generic\" | \"html\";\ntype CssStrategy = \"tailwind\" | \"global\" | \"unknown\";\ntype CssDiagnosticLevel = \"off\" | \"warn\";\ntype PreflightCommand = \"init\" | \"check\";\n\ninterface PreflightOptions {\n framework?: Framework;\n packageManager?: PackageManager;\n}\n\ninterface CssDetectionResult {\n strategy: CssStrategy;\n unknownClass: CssDiagnosticLevel;\n reasons: string[];\n}\n\ninterface InitOptions {\n framework?: Framework;\n projectName?: string;\n typescript?: boolean;\n packageManager?: PackageManager;\n noInstall?: boolean;\n}\n\nconst VITE_CONFIG_FILES = [\"vite.config.ts\", \"vite.config.mts\", \"vite.config.js\", \"vite.config.mjs\"] as const;\nconst TAILWIND_CONFIG_FILES = [\n \"tailwind.config.js\",\n \"tailwind.config.cjs\",\n \"tailwind.config.mjs\",\n \"tailwind.config.ts\"\n] as const;\nconst POSTCSS_CONFIG_FILES = [\n \"postcss.config.js\",\n \"postcss.config.cjs\",\n \"postcss.config.mjs\",\n \"postcss.config.ts\"\n] as const;\nconst COLLIE_CONFIG_FILES = [\n \"collie.config.ts\",\n \"collie.config.js\",\n \"collie.config.mjs\",\n \"collie.config.cjs\",\n \"collie.config.json\"\n] as const;\nconst CLI_PACKAGE_INFO = readCliPackageInfo();\nconst CLI_PACKAGE_VERSION = CLI_PACKAGE_INFO.version;\nconst CLI_DEPENDENCY_SPECS = CLI_PACKAGE_INFO.dependencies;\nconst DEFAULT_DEPENDENCY_RANGE = CLI_PACKAGE_VERSION === \"latest\" ? \"latest\" : `^${CLI_PACKAGE_VERSION}`;\nconst COLLIE_COMPILER_DEPENDENCY = formatCollieDependency(\"@collie-lang/compiler\");\nconst COLLIE_VITE_DEPENDENCY = formatCollieDependency(\"@collie-lang/vite\");\nconst COLLIE_DEPENDENCIES = [COLLIE_COMPILER_DEPENDENCY, COLLIE_VITE_DEPENDENCY];\nconst COLLIE_NEXT_DEPENDENCY = formatCollieDependency(\"@collie-lang/next\");\nconst COLLIE_NEXT_VERSION_RANGE = normalizeDependencyRange(\n CLI_DEPENDENCY_SPECS[\"@collie-lang/next\"],\n DEFAULT_DEPENDENCY_RANGE\n);\nconst COLLIE_CORE_PACKAGES = [\"@collie-lang/compiler\", \"@collie-lang/config\"] as const;\nconst COLLIE_VITE_PACKAGES = [\n ...COLLIE_CORE_PACKAGES,\n \"@collie-lang/vite\",\n \"@collie-lang/html-runtime\"\n] as const;\nconst COLLIE_NEXT_PACKAGES = [...COLLIE_CORE_PACKAGES, \"@collie-lang/next\"] as const;\nconst PROMPT_OPTIONS = {\n onCancel: () => {\n console.log(pc.yellow(\"\\nCancelled\"));\n process.exit(0);\n }\n} as const;\nlet preflightCompleted = false;\n\nasync function main() {\n const args = process.argv.slice(2);\n const cmd = args[0];\n\n if (!cmd || cmd === \"help\" || cmd === \"--help\" || cmd === \"-h\") {\n printHelp();\n return;\n }\n\n if (cmd === \"format\") {\n try {\n await runFormat(args.slice(1));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n printCliError(message);\n process.exit(1);\n }\n return;\n }\n\n if (cmd === \"check\") {\n const rest = args.slice(1);\n const patterns = rest.filter((arg) => !arg.startsWith(\"-\"));\n if (patterns.length === 0) {\n throw new Error(\"No file patterns provided. Usage: collie check <files...>\");\n }\n\n const formatValue = getFlag(rest, \"--format\");\n const format = formatValue ? validateFormatFlag(formatValue) : \"text\";\n const maxWarningsValue = getFlag(rest, \"--max-warnings\");\n let maxWarnings = -1;\n if (maxWarningsValue !== undefined) {\n const parsed = Number(maxWarningsValue);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new Error(\"--max-warnings expects a non-negative integer.\");\n }\n maxWarnings = parsed;\n }\n\n const options = {\n verbose: hasFlag(rest, \"--verbose\", \"-v\"),\n format,\n noWarnings: hasFlag(rest, \"--no-warnings\"),\n maxWarnings: maxWarnings >= 0 ? maxWarnings : undefined\n };\n\n const shouldContinue = await runPreflight(\"check\");\n if (!shouldContinue) {\n return;\n }\n\n const result = await runCheck(patterns, options);\n\n if (result.errorCount > 0) {\n process.exitCode = 1;\n } else if (maxWarnings >= 0 && result.warningCount > maxWarnings) {\n printCliError(\n `Exceeded maximum warnings: ${result.warningCount} warning${result.warningCount === 1 ? \"\" : \"s\"} (limit ${maxWarnings})`\n );\n console.error(pc.dim(\"Next: fix warnings or raise --max-warnings.\"));\n process.exitCode = 1;\n }\n return;\n }\n\n if (cmd === \"ids\") {\n const rest = args.slice(1);\n const patterns = rest.filter((arg) => !arg.startsWith(\"-\"));\n const resolvedPatterns = patterns.length ? patterns : [\"**/*.collie\"];\n try {\n await runIds(resolvedPatterns);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n printCliError(message);\n process.exit(1);\n }\n return;\n }\n\n if (cmd === \"explain\") {\n const rest = args.slice(1);\n const { id, patterns } = parseExplainArgs(rest);\n if (!id) {\n throw new Error(\"No template id provided. Usage: collie explain <id> [files...]\");\n }\n const resolvedPatterns = patterns.length ? patterns : [\"**/*.collie\"];\n try {\n await runExplain(id, resolvedPatterns);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n printCliError(message);\n process.exit(1);\n }\n return;\n }\n\n if (cmd === \"config\") {\n const rest = args.slice(1);\n const shouldPrint = hasFlag(rest, \"--print\");\n if (!shouldPrint) {\n throw new Error('Missing required flag: --print (e.g. \"collie config --print\").');\n }\n const filePath = getFlag(rest, \"--file\");\n const cwdFlag = getFlag(rest, \"--cwd\");\n const cwd = cwdFlag\n ? path.resolve(process.cwd(), cwdFlag)\n : filePath\n ? path.dirname(path.resolve(process.cwd(), filePath))\n : process.cwd();\n\n let loadAndNormalizeConfig: typeof import(\"@collie-lang/config\").loadAndNormalizeConfig;\n try {\n ({ loadAndNormalizeConfig } = await import(\"@collie-lang/config\"));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to load @collie-lang/config (${message}).`);\n }\n\n const normalized = await loadAndNormalizeConfig({ cwd });\n if (!normalized) {\n throw new Error(`No Collie config found under ${cwd}.`);\n }\n console.log(JSON.stringify(normalized, null, 2));\n return;\n }\n\n if (cmd === \"create\") {\n const rest = args.slice(1);\n let projectName: string | undefined;\n const flagArgs: string[] = [];\n for (const arg of rest) {\n if (!projectName && !arg.startsWith(\"-\")) {\n projectName = arg;\n } else {\n flagArgs.push(arg);\n }\n }\n\n const templateListRequested = hasFlag(flagArgs, \"--list-templates\");\n if (templateListRequested) {\n console.log(pc.bold(\"Available templates:\\n\"));\n console.log(formatTemplateList());\n console.log(\"\\nRun collie create <project-name> --template <template> to scaffold with a specific option.\\n\");\n return;\n }\n\n const template = getFlag(flagArgs, \"--template\");\n const typescriptFlag = hasFlag(flagArgs, \"--typescript\");\n const javascriptFlag = hasFlag(flagArgs, \"--javascript\");\n if (typescriptFlag && javascriptFlag) {\n throw new Error(\"Use only one of --typescript or --javascript.\");\n }\n\n const options = {\n projectName,\n template,\n typescript: typescriptFlag ? true : javascriptFlag ? false : undefined,\n packageManager: getFlag(flagArgs, \"--package-manager\") as \"npm\" | \"yarn\" | \"pnpm\" | undefined,\n noInstall: hasFlag(flagArgs, \"--no-install\"),\n noGit: hasFlag(flagArgs, \"--no-git\")\n };\n\n await createProject(options);\n return;\n }\n\n if (cmd === \"convert\") {\n const rest = args.slice(1);\n const patterns = rest.filter((arg) => !arg.startsWith(\"-\"));\n if (patterns.length === 0) {\n throw new Error(\"No files provided. Usage: collie convert <files...>\");\n }\n const write = hasFlag(rest, \"--write\", \"-w\");\n const overwrite = hasFlag(rest, \"--overwrite\");\n const removeOriginal = hasFlag(rest, \"--remove-original\");\n if (removeOriginal && !write) {\n throw new Error(\"--remove-original can only be used with --write.\");\n }\n\n const files = await fg(patterns, {\n absolute: false,\n onlyFiles: true,\n unique: true\n });\n\n if (!files.length) {\n printSummary(\"warning\", \"No files matched the provided patterns\", undefined, \"check the paths and try again\");\n return;\n }\n files.sort();\n\n const options = { write, overwrite, removeOriginal };\n let converted = 0;\n let failed = 0;\n for (const file of files) {\n try {\n const result = await convertFile(file, options);\n if (write) {\n const target = result.outputPath ?? file.replace(/\\.[tj]sx?$/, \".collie\");\n console.log(pc.green(`✔ Converted ${file} → ${target}`));\n converted++;\n } else {\n console.log(pc.gray(`// Converted from ${file}\\n`));\n process.stdout.write(result.collie);\n if (!result.collie.endsWith(\"\\n\")) {\n process.stdout.write(\"\\n\");\n }\n console.log(\"\");\n }\n for (const warning of result.warnings) {\n console.warn(pc.yellow(`⚠ ${file}: ${warning}`));\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(pc.red(`✖ Failed to convert ${file}: ${message}`));\n process.exitCode = 1;\n failed++;\n }\n }\n if (write) {\n if (failed === 0) {\n printSummary(\n \"success\",\n `Converted ${converted} file${converted === 1 ? \"\" : \"s\"}`,\n `wrote ${converted} .collie file${converted === 1 ? \"\" : \"s\"}`,\n \"review the generated templates or run collie check\"\n );\n } else {\n const changeDetail =\n converted > 0\n ? `wrote ${converted} .collie file${converted === 1 ? \"\" : \"s\"} before failing`\n : undefined;\n printSummary(\n \"error\",\n `Converted ${converted} file${converted === 1 ? \"\" : \"s\"} with ${failed} failure${failed === 1 ? \"\" : \"s\"}`,\n changeDetail,\n \"fix the errors above and rerun collie convert\"\n );\n }\n }\n return;\n }\n\n if (cmd === \"doctor\") {\n const rest = args.slice(1);\n const jsonOutput = hasFlag(rest, \"--json\");\n const subsystem = getFlag(rest, \"--check\");\n const results = await runDoctor({ cwd: process.cwd() });\n const filtered = filterDiagnostics(results, subsystem);\n if (subsystem && filtered.length === 0) {\n printCliError(`Unknown subsystem for --check: ${subsystem}`);\n console.error(pc.dim(\"Next: run collie doctor to list available checks.\"));\n process.exit(1);\n }\n if (jsonOutput) {\n console.log(JSON.stringify(filtered, null, 2));\n } else {\n printDoctorResults(filtered);\n }\n if (filtered.some((result) => result.status === \"fail\")) {\n process.exitCode = 1;\n }\n return;\n }\n\n if (cmd === \"watch\") {\n const watchArgs = args.slice(1);\n const inputPath = watchArgs[0];\n if (!inputPath) {\n throw new Error(\"No input path provided. Usage: collie watch <path>\");\n }\n const flagArgs = watchArgs.slice(1);\n const verboseFlag = hasFlag(flagArgs, \"--verbose\", \"-v\");\n const sourcemapFlag = hasFlag(flagArgs, \"--sourcemap\");\n const jsxFlag = getFlag(flagArgs, \"--jsx\");\n await watchCollie(inputPath, {\n outDir: getFlag(flagArgs, \"--outDir\"),\n sourcemap: sourcemapFlag ? true : undefined,\n ext: getFlag(flagArgs, \"--ext\"),\n jsxRuntime: jsxFlag ? parseJsxRuntime(jsxFlag) : undefined,\n verbose: verboseFlag ? true : undefined\n });\n return;\n }\n\n if (cmd === \"build\") {\n const buildArgs = args.slice(1);\n const inputPath = buildArgs[0];\n if (!inputPath) {\n throw new Error(\"No input path provided. Usage: collie build <path>\");\n }\n const flagArgs = buildArgs.slice(1);\n const verbose = hasFlag(flagArgs, \"--verbose\", \"-v\");\n const quiet = hasFlag(flagArgs, \"--quiet\", \"-q\");\n if (verbose && quiet) {\n throw new Error(\"Cannot use --quiet and --verbose together.\");\n }\n const sourcemapFlag = hasFlag(flagArgs, \"--sourcemap\");\n const jsxFlag = getFlag(flagArgs, \"--jsx\");\n const result = await runBuild(inputPath, {\n outDir: getFlag(flagArgs, \"--outDir\"),\n sourcemap: sourcemapFlag ? true : undefined,\n jsxRuntime: jsxFlag ? parseJsxRuntime(jsxFlag) : undefined,\n verbose: verbose ? true : undefined,\n quiet: quiet ? true : undefined\n });\n if (result.errors.length > 0) {\n process.exitCode = 1;\n }\n return;\n }\n\n if (cmd === \"init\") {\n const rest = args.slice(1);\n const flagsNeedingValue = new Set([\"--project\", \"--package-manager\", \"--framework\"]);\n let pendingFlag: string | null = null;\n let positionalProject: string | undefined;\n const extraArgs: string[] = [];\n\n for (const arg of rest) {\n if (pendingFlag) {\n pendingFlag = null;\n continue;\n }\n if (arg.startsWith(\"-\")) {\n if (flagsNeedingValue.has(arg)) {\n pendingFlag = arg;\n }\n continue;\n }\n if (!positionalProject) {\n positionalProject = arg;\n } else {\n extraArgs.push(arg);\n }\n }\n\n if (pendingFlag) {\n throw new Error(`${pendingFlag} flag expects a value.`);\n }\n if (extraArgs.length > 0) {\n throw new Error(`Unexpected argument(s): ${extraArgs.join(\", \")}`);\n }\n\n const frameworkValue = getFlag(rest, \"--framework\");\n const framework =\n (frameworkValue === \"vite\" || frameworkValue === \"nextjs\"\n ? frameworkValue\n : undefined) ??\n (hasFlag(rest, \"--nextjs\") ? \"nextjs\" : undefined) ??\n (hasFlag(rest, \"--vite\") ? \"vite\" : undefined);\n\n const typescriptFlag = hasFlag(rest, \"--typescript\");\n const javascriptFlag = hasFlag(rest, \"--javascript\");\n if (typescriptFlag && javascriptFlag) {\n throw new Error(\"Use only one of --typescript or --javascript.\");\n }\n\n const packageManagerValue = getFlag(rest, \"--package-manager\");\n let packageManager: PackageManager | undefined;\n if (packageManagerValue) {\n if (packageManagerValue !== \"npm\" && packageManagerValue !== \"yarn\" && packageManagerValue !== \"pnpm\") {\n throw new Error('Invalid --package-manager value. Use \"npm\", \"yarn\", or \"pnpm\".');\n }\n packageManager = packageManagerValue;\n }\n\n const projectName = getFlag(rest, \"--project\") ?? positionalProject;\n const initOptions: InitOptions = {\n framework: framework as Framework | undefined,\n projectName,\n typescript: typescriptFlag ? true : javascriptFlag ? false : undefined,\n packageManager,\n noInstall: hasFlag(rest, \"--no-install\")\n };\n\n try {\n const shouldContinue = await runPreflight(\"init\", {\n framework: initOptions.framework,\n packageManager: initOptions.packageManager\n });\n if (!shouldContinue) {\n return;\n }\n await runInit(initOptions);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n printCliError(message);\n process.exit(1);\n }\n return;\n }\n\n printCliError(`Unknown command: ${cmd}`);\n process.exit(1);\n}\n\nfunction printHelp() {\n console.log(`${pc.bold(\"collie\")}\n\nUsage:\n collie <command> [options]\n\nCommands:\n collie build Compile .collie templates to output files\n collie check Validate .collie templates\n collie config Print resolved Collie config (json)\n collie ids List template ids and their locations\n collie explain Find the file + location for a template id\n collie format Format .collie templates\n collie convert Convert JSX/TSX to .collie templates\n collie doctor Diagnose setup issues\n collie init Create a Collie config and wire Vite when possible\n collie watch Watch and compile templates\n collie create Scaffold a new Collie project\n`);\n}\n\nasync function runIds(patterns: string[]): Promise<void> {\n const scan = await scanTemplates(patterns);\n const diagnostics = [...scan.diagnostics, ...buildDuplicateDiagnostics(scan.templates)];\n const errors = diagnostics.filter((diag) => diag.severity === \"error\");\n\n if (diagnostics.length) {\n printTemplateDiagnostics(diagnostics);\n }\n\n if (errors.length) {\n process.exitCode = 1;\n return;\n }\n\n const templates = [...scan.templates].sort((a, b) => {\n const byId = a.id.localeCompare(b.id);\n if (byId !== 0) return byId;\n return a.displayPath.localeCompare(b.displayPath);\n });\n\n if (!templates.length) {\n printSummary(\n \"warning\",\n \"No template ids found\",\n `checked ${scan.files.length} file${scan.files.length === 1 ? \"\" : \"s\"}`,\n \"add #id blocks then rerun collie ids\"\n );\n return;\n }\n\n for (const template of templates) {\n console.log(`${template.id} ${formatTemplateLocation(template)}`);\n }\n}\n\nasync function runExplain(id: string, patterns: string[]): Promise<void> {\n const scan = await scanTemplates(patterns);\n const diagnostics = [...scan.diagnostics, ...buildDuplicateDiagnostics(scan.templates)];\n const errors = diagnostics.filter((diag) => diag.severity === \"error\");\n\n if (diagnostics.length) {\n printTemplateDiagnostics(diagnostics);\n }\n\n if (errors.length) {\n process.exitCode = 1;\n return;\n }\n\n const matches = scan.templates.filter((template) => template.id === id);\n if (!matches.length) {\n const knownIds = Array.from(new Set(scan.templates.map((template) => template.id))).sort();\n const preview = knownIds.slice(0, 5);\n const suffix = knownIds.length > preview.length ? \"...\" : \"\";\n const details = preview.length ? `Known ids: ${preview.join(\", \")}${suffix}` : \"No template ids found.\";\n printCliError(`Unknown template id \"${id}\". ${details}`);\n process.exitCode = 1;\n return;\n }\n\n const sorted = matches.sort((a, b) => a.displayPath.localeCompare(b.displayPath));\n for (const template of sorted) {\n console.log(`${template.id} ${formatTemplateLocation(template)}`);\n }\n}\n\nfunction parseExplainArgs(args: string[]): { id?: string; patterns: string[] } {\n let id: string | undefined;\n const patterns: string[] = [];\n for (const arg of args) {\n if (arg.startsWith(\"-\")) {\n continue;\n }\n if (!id) {\n id = arg;\n continue;\n }\n patterns.push(arg);\n }\n return { id, patterns };\n}\n\nfunction formatTemplateLocation(template: TemplateInfo): string {\n const span = template.span;\n if (span) {\n return `${template.displayPath}:${span.start.line}:${span.start.col}`;\n }\n return template.displayPath;\n}\n\nfunction printTemplateDiagnostics(diagnostics: Diagnostic[]): void {\n for (const diag of diagnostics) {\n const message = formatDiagnosticLine(diag);\n const writer = diag.severity === \"warning\" ? pc.yellow : pc.red;\n console.log(writer(message));\n }\n if (diagnostics.length) {\n console.log(\"\");\n }\n}\n\nasync function runInit(options: InitOptions = {}): Promise<void> {\n const projectRoot = process.cwd();\n const packageJson = await readProjectPackage(projectRoot);\n const detectedFramework = packageJson ? detectFrameworkFromPackage(packageJson) : null;\n const cssDetection = await detectCssStrategy(projectRoot, packageJson);\n\n const framework = options.framework ?? detectedFramework;\n const projectType = framework ? mapFrameworkToProjectType(framework) : await promptProjectType();\n\n const existingConfig = findExistingCollieConfig(projectRoot);\n const targetPath = existingConfig ?? path.join(projectRoot, \"collie.config.ts\");\n const relativeTarget = path.relative(projectRoot, targetPath) || path.basename(targetPath);\n\n console.log(pc.bold(\"collie init\"));\n console.log(pc.dim(\"This creates a Collie config and applies framework wiring when possible.\"));\n if (framework) {\n console.log(pc.dim(`Detected ${formatFrameworkLabel(framework)} project.`));\n } else {\n console.log(pc.dim(\"No framework detected.\"));\n }\n console.log(pc.dim(`CSS strategy: ${formatCssDetection(cssDetection)}.`));\n console.log(pc.dim(`Override in ${relativeTarget} via css.strategy and css.diagnostics.unknownClass.`));\n console.log(pc.dim(`Project type: ${describeProjectType(projectType)}.`));\n console.log(\"\");\n\n const configLabel = framework === \"vite\" ? \"Vite-ready\" : \"Collie\";\n const confirmMessage = existingConfig\n ? `${relativeTarget} already exists. Replace it with a ${configLabel} config?`\n : `Create ${relativeTarget}?`;\n const shouldWrite = await promptForConfirmation(confirmMessage, !existingConfig);\n if (!shouldWrite) {\n const detail = existingConfig ? `left ${relativeTarget} unchanged` : \"no files created\";\n printSummary(\"warning\", \"No changes made\", detail, \"run collie init when you are ready\");\n return;\n }\n\n const contents = buildInitConfig(projectType, path.extname(targetPath).toLowerCase(), cssDetection);\n await fs.writeFile(targetPath, contents, \"utf8\");\n\n const typeDeclarationsPath = path.join(projectRoot, \"src\", \"collie.d.ts\");\n let typeDeclarationsStatus: \"created\" | \"exists\" | \"skipped\" = \"skipped\";\n if (projectType !== \"html\" && shouldWriteTypeDeclarations(projectRoot, options)) {\n if (existsSync(typeDeclarationsPath)) {\n typeDeclarationsStatus = \"exists\";\n } else {\n await ensureCollieDeclaration(projectRoot);\n typeDeclarationsStatus = \"created\";\n }\n }\n\n let viteConfigStatus: \"patched\" | \"already-configured\" | \"manual\" | \"not-found\" | \"skipped\" = \"skipped\";\n let viteConfigPath: string | null = null;\n if (framework === \"vite\") {\n viteConfigPath = findViteConfigFile(projectRoot);\n if (viteConfigPath) {\n viteConfigStatus = await patchViteConfig(viteConfigPath);\n } else {\n viteConfigStatus = \"not-found\";\n }\n }\n\n printSummary(\"success\", \"Initialized Collie config\", `created ${relativeTarget}`);\n\n if (typeDeclarationsStatus !== \"skipped\") {\n const declarationLabel = path.relative(projectRoot, typeDeclarationsPath) || path.basename(typeDeclarationsPath);\n if (typeDeclarationsStatus === \"created\") {\n console.log(pc.green(`✔ Added ${declarationLabel} for .collie typings`));\n } else {\n console.log(pc.dim(`- ${declarationLabel} already exists`));\n }\n } else if (projectType !== \"html\") {\n console.log(\n pc.dim(\"Skipping .collie typings (no TypeScript config found). Add src/collie.d.ts if you enable TypeScript.\")\n );\n }\n\n if (framework === \"vite\") {\n if (viteConfigStatus === \"patched\" && viteConfigPath) {\n console.log(pc.green(`✔ Updated ${path.relative(projectRoot, viteConfigPath) || path.basename(viteConfigPath)}`));\n } else if (viteConfigStatus === \"already-configured\" && viteConfigPath) {\n console.log(\n pc.dim(`- ${path.relative(projectRoot, viteConfigPath) || path.basename(viteConfigPath)} already includes collie()`)\n );\n } else if (viteConfigStatus === \"manual\" && viteConfigPath) {\n console.log(\n pc.yellow(\n `⚠ Could not patch ${path.relative(projectRoot, viteConfigPath) || path.basename(viteConfigPath)}. Add collie() manually to the Vite plugins array.`\n )\n );\n } else if (viteConfigStatus === \"not-found\") {\n console.log(pc.yellow(\"⚠ Vite config not found. Add the Collie plugin to vite.config.ts manually.\"));\n }\n }\n\n if (framework === \"vite\") {\n const pkgManager = options.packageManager ?? detectPackageManager(projectRoot);\n printNextSteps(pkgManager, targetPath);\n }\n if (!framework) {\n console.log(pc.dim(`Tip: update the project type in ${relativeTarget} if needed.`));\n }\n}\n\nasync function readProjectPackage(projectRoot: string): Promise<Record<string, any> | null> {\n const packageJsonPath = path.join(projectRoot, \"package.json\");\n if (!existsSync(packageJsonPath)) {\n return null;\n }\n const raw = await fs.readFile(packageJsonPath, \"utf8\");\n return JSON.parse(raw);\n}\n\nfunction detectFrameworkFromPackage(pkg: Record<string, any>): Framework | null {\n if (hasNextDependency(pkg)) {\n return \"nextjs\";\n }\n if (getViteDependencyInfo(pkg)) {\n return \"vite\";\n }\n return null;\n}\n\nfunction mapFrameworkToProjectType(framework: Framework): CollieProjectType {\n return framework === \"nextjs\" ? \"react-next\" : \"react-vite\";\n}\n\nfunction formatFrameworkLabel(framework: Framework): string {\n return framework === \"nextjs\" ? \"Next.js\" : \"Vite\";\n}\n\nfunction describeProjectType(projectType: CollieProjectType): string {\n const labels: Record<CollieProjectType, string> = {\n \"react-vite\": \"React (Vite)\",\n \"react-next\": \"React (Next.js)\",\n \"react-generic\": \"React (generic)\",\n html: \"HTML (no framework)\"\n };\n return labels[projectType];\n}\n\nfunction shouldWriteTypeDeclarations(projectRoot: string, options: InitOptions): boolean {\n if (options.typescript === false) {\n return false;\n }\n if (options.typescript === true) {\n return true;\n }\n return existsSync(path.join(projectRoot, \"tsconfig.json\"));\n}\n\nasync function detectCssStrategy(\n projectRoot: string,\n packageJson: Record<string, any> | null\n): Promise<CssDetectionResult> {\n const reasons: string[] = [];\n\n try {\n let tailwindDetected = false;\n for (const filename of TAILWIND_CONFIG_FILES) {\n if (existsSync(path.join(projectRoot, filename))) {\n reasons.push(`${filename} found`);\n tailwindDetected = true;\n }\n }\n\n if (packageJson && hasTailwindDependency(packageJson)) {\n reasons.push(\"package.json includes tailwindcss\");\n tailwindDetected = true;\n }\n\n const postcssHit = await scanPostcssForTailwind(projectRoot);\n if (postcssHit) {\n reasons.push(`${postcssHit} mentions tailwindcss`);\n tailwindDetected = true;\n }\n\n const cssHit = await scanTopLevelCssForTailwind(projectRoot);\n if (cssHit) {\n reasons.push(`${cssHit} contains @tailwind`);\n tailwindDetected = true;\n }\n\n if (tailwindDetected) {\n return { strategy: \"tailwind\", unknownClass: \"off\", reasons };\n }\n\n return {\n strategy: \"global\",\n unknownClass: \"warn\",\n reasons: [\"no Tailwind signals found\"]\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n strategy: \"unknown\",\n unknownClass: \"off\",\n reasons: [`detection error: ${message}`]\n };\n }\n}\n\nfunction formatCssDetection(result: CssDetectionResult): string {\n const reason = result.reasons.length ? ` (${result.reasons.join(\", \")})` : \"\";\n const label = result.strategy === \"tailwind\" ? \"Tailwind\" : result.strategy === \"global\" ? \"Global CSS\" : \"Unknown\";\n return `${label}${reason} => unknownClass ${result.unknownClass}`;\n}\n\nfunction hasTailwindDependency(pkg: Record<string, any>): boolean {\n return Boolean(\n (pkg.dependencies && pkg.dependencies.tailwindcss) ||\n (pkg.devDependencies && pkg.devDependencies.tailwindcss) ||\n (pkg.peerDependencies && pkg.peerDependencies.tailwindcss)\n );\n}\n\nasync function scanPostcssForTailwind(projectRoot: string): Promise<string | null> {\n for (const filename of POSTCSS_CONFIG_FILES) {\n const fullPath = path.join(projectRoot, filename);\n if (!existsSync(fullPath)) {\n continue;\n }\n const contents = await fs.readFile(fullPath, \"utf8\");\n if (contents.includes(\"tailwindcss\")) {\n return filename;\n }\n }\n return null;\n}\n\nasync function scanTopLevelCssForTailwind(projectRoot: string): Promise<string | null> {\n const files = await fg(\"*.css\", { cwd: projectRoot, onlyFiles: true });\n for (const filename of files) {\n const fullPath = path.join(projectRoot, filename);\n const contents = await fs.readFile(fullPath, \"utf8\");\n if (/\\@tailwind\\s+(base|components|utilities)\\b/.test(contents)) {\n return filename;\n }\n }\n return null;\n}\n\nfunction buildInitConfig(\n projectType: CollieProjectType,\n ext: string,\n cssDetection: CssDetectionResult\n): string {\n const config = {\n css: {\n strategy: cssDetection.strategy,\n diagnostics: {\n unknownClass: cssDetection.unknownClass\n }\n },\n projects: [\n {\n type: projectType,\n input: \"src/**/*.collie\"\n }\n ]\n };\n\n if (ext === \".json\") {\n return `${JSON.stringify(config, null, 2)}\\n`;\n }\n\n const commentLines =\n projectType === \"react-vite\"\n ? [\n \"// Collie config for Vite.\",\n \"// Templates are compiled in-memory by @collie-lang/vite.\"\n ]\n : [\"// Collie config. Update the project type or input as needed.\"];\n const comment = `${commentLines.join(\"\\n\")}\\n`;\n const body = JSON.stringify(config, null, 2);\n\n if (ext === \".mjs\" || ext === \".ts\") {\n return `${comment}export default ${body};\\n`;\n }\n\n return `${comment}module.exports = ${body};\\n`;\n}\n\nfunction findExistingCollieConfig(root: string): string | null {\n for (const filename of COLLIE_CONFIG_FILES) {\n const candidate = path.join(root, filename);\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\nasync function promptForConfirmation(message: string, initial: boolean): Promise<boolean> {\n const response = await prompts(\n {\n type: \"confirm\",\n name: \"confirmed\",\n message,\n initial\n },\n PROMPT_OPTIONS\n );\n return Boolean(response.confirmed);\n}\n\nasync function promptProjectType(): Promise<CollieProjectType> {\n const response = await prompts(\n {\n type: \"select\",\n name: \"projectType\",\n message: \"What type of project should this config describe?\",\n choices: [\n { title: \"React (Vite)\", value: \"react-vite\" },\n { title: \"React (Next.js)\", value: \"react-next\" },\n { title: \"React (generic)\", value: \"react-generic\" },\n { title: \"HTML (no framework)\", value: \"html\" }\n ],\n initial: 0\n },\n PROMPT_OPTIONS\n );\n return (response.projectType as CollieProjectType) ?? \"react-generic\";\n}\n\nasync function runPreflight(command: PreflightCommand, options: PreflightOptions = {}): Promise<boolean> {\n if (preflightCompleted) {\n return true;\n }\n preflightCompleted = true;\n\n const projectRoot = findProjectRoot(process.cwd());\n if (!projectRoot) {\n console.log(pc.dim(\"Skipping dependency preflight (no package.json found).\"));\n return true;\n }\n\n let packageJson: Record<string, any> | null = null;\n try {\n packageJson = await readProjectPackage(projectRoot);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(pc.yellow(`Skipping dependency preflight: failed to read package.json (${message}).`));\n return true;\n }\n\n if (!packageJson) {\n console.log(pc.dim(\"Skipping dependency preflight (package.json not found).\"));\n return true;\n }\n\n const detectedFramework = detectFrameworkFromPackage(packageJson);\n const resolvedFramework =\n options.framework ?? detectedFramework ?? (command === \"init\" ? \"vite\" : undefined);\n const requiredPackages = getRequiredPackages(command, resolvedFramework);\n if (requiredPackages.length === 0) {\n return true;\n }\n\n const missing = collectMissingDependencies(projectRoot, packageJson, requiredPackages);\n if (missing.length === 0) {\n return true;\n }\n\n const packageManager = options.packageManager ?? detectPackageManager(projectRoot);\n const prompt = `Missing required Collie packages: ${missing.join(\", \")}. Install now?`;\n const shouldInstall = await promptForConfirmation(prompt, true);\n if (!shouldInstall) {\n console.log(pc.yellow(\"Skipped installing Collie dependencies.\"));\n console.log(\n pc.dim(`Next: ${formatInstallCommand(packageManager, missing)} && collie ${command}`)\n );\n return false;\n }\n\n const specs = missing.map((dep) => resolveDependencySpec(dep));\n console.log(pc.cyan(`Installing ${missing.length} Collie package${missing.length === 1 ? \"\" : \"s\"}...`));\n await installDevDependencies(packageManager, projectRoot, specs);\n console.log(pc.green(`✔ Installed ${missing.length} Collie package${missing.length === 1 ? \"\" : \"s\"}.`));\n return true;\n}\n\nfunction findProjectRoot(startDir: string): string | null {\n let current = startDir;\n while (true) {\n if (existsSync(path.join(current, \"package.json\"))) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nfunction getRequiredPackages(\n command: PreflightCommand,\n framework: Framework | null | undefined\n): string[] {\n if (command === \"check\") {\n return [\"@collie-lang/compiler\"];\n }\n if (framework === \"nextjs\") {\n return [...COLLIE_NEXT_PACKAGES];\n }\n if (framework === \"vite\") {\n return [...COLLIE_VITE_PACKAGES];\n }\n return [...COLLIE_CORE_PACKAGES];\n}\n\nfunction collectMissingDependencies(\n projectRoot: string,\n packageJson: Record<string, any>,\n required: readonly string[]\n): string[] {\n return required.filter((dependency) => !isDependencySatisfied(projectRoot, packageJson, dependency));\n}\n\nfunction isDependencySatisfied(\n projectRoot: string,\n packageJson: Record<string, any>,\n dependency: string\n): boolean {\n const listed = Boolean(\n packageJson?.dependencies?.[dependency] || packageJson?.devDependencies?.[dependency]\n );\n if (listed) {\n return true;\n }\n const modulePath = path.join(projectRoot, \"node_modules\", ...dependency.split(\"/\"));\n return existsSync(modulePath);\n}\n\nfunction resolveDependencySpec(packageName: string): string {\n const range = normalizeDependencyRange(CLI_DEPENDENCY_SPECS[packageName], \"latest\");\n return `${packageName}@${range}`;\n}\n\nfunction formatInstallCommand(packageManager: PackageManager, dependencies: string[]): string {\n const specs = dependencies.map((dep) => resolveDependencySpec(dep));\n if (packageManager === \"pnpm\") {\n return `pnpm add -D ${specs.join(\" \")}`;\n }\n if (packageManager === \"yarn\") {\n return `yarn add -D ${specs.join(\" \")}`;\n }\n return `npm install -D ${specs.join(\" \")}`;\n}\n\nfunction detectPackageManager(root: string): PackageManager {\n if (existsSync(path.join(root, \"pnpm-lock.yaml\"))) return \"pnpm\";\n if (existsSync(path.join(root, \"yarn.lock\"))) return \"yarn\";\n return \"npm\";\n}\n\nasync function installDevDependencies(packageManager: PackageManager, cwd: string, deps: string[]): Promise<void> {\n const argsByManager: Record<PackageManager, string[]> = {\n pnpm: [\"add\", \"-D\", ...deps],\n yarn: [\"add\", \"-D\", ...deps],\n npm: [\"install\", \"-D\", ...deps]\n };\n\n await runCommand(packageManager, argsByManager[packageManager], cwd);\n}\n\nasync function patchViteConfig(configPath: string): Promise<\"patched\" | \"already-configured\" | \"manual\"> {\n const original = await fs.readFile(configPath, \"utf8\");\n const hasImport = original.includes(\"@collie-lang/vite\");\n const hasPlugin = /\\bcollie\\s*\\(/.test(original);\n if (hasImport && hasPlugin) {\n return \"already-configured\";\n }\n\n try {\n const result = transformViteConfig(original);\n if (!result.changed) {\n return \"already-configured\";\n }\n await fs.writeFile(configPath, result.code, \"utf8\");\n return \"patched\";\n } catch (error) {\n // Fall back to manual if AST transformation fails\n return \"manual\";\n }\n}\n\nfunction transformViteConfig(source: string): { code: string; changed: boolean } {\n const sourceFile = ts.createSourceFile(\n \"vite.config.ts\",\n source,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS\n );\n\n let needsImport = !source.includes(\"@collie-lang/vite\");\n let needsPlugin = !/\\bcollie\\s*\\(/.test(source);\n let changed = false;\n\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n const transformer: ts.TransformerFactory<ts.SourceFile> = (context) => {\n return (rootNode) => {\n function visit(node: ts.Node): ts.Node {\n // Handle imports - add collie import after last import\n if (needsImport && ts.isImportDeclaration(node)) {\n // We'll add the import after we've processed all nodes\n return node;\n }\n\n // Find defineConfig call and modify plugins array\n if (\n ts.isCallExpression(node) &&\n ts.isIdentifier(node.expression) &&\n node.expression.text === \"defineConfig\" &&\n node.arguments.length > 0\n ) {\n const configArg = node.arguments[0];\n if (ts.isObjectLiteralExpression(configArg)) {\n const updatedConfig = updateConfigObject(configArg);\n if (updatedConfig !== configArg) {\n changed = true;\n return ts.factory.updateCallExpression(\n node,\n node.expression,\n node.typeArguments,\n [updatedConfig]\n );\n }\n }\n }\n\n return ts.visitEachChild(node, visit, context);\n }\n\n function updateConfigObject(configObj: ts.ObjectLiteralExpression): ts.ObjectLiteralExpression {\n let pluginsProperty: ts.PropertyAssignment | undefined;\n const otherProperties: ts.ObjectLiteralElementLike[] = [];\n\n for (const prop of configObj.properties) {\n if (\n ts.isPropertyAssignment(prop) &&\n ts.isIdentifier(prop.name) &&\n prop.name.text === \"plugins\"\n ) {\n pluginsProperty = prop;\n } else {\n otherProperties.push(prop);\n }\n }\n\n let updatedPluginsArray: ts.ArrayLiteralExpression;\n\n if (pluginsProperty && ts.isArrayLiteralExpression(pluginsProperty.initializer)) {\n updatedPluginsArray = ensurePluginOrdering(pluginsProperty.initializer);\n if (updatedPluginsArray === pluginsProperty.initializer) {\n // No changes needed\n return configObj;\n }\n } else if (needsPlugin) {\n // Create plugins array with just collie()\n updatedPluginsArray = ts.factory.createArrayLiteralExpression(\n [createCollieCall()],\n false\n );\n } else {\n return configObj;\n }\n\n const updatedPluginsProperty = ts.factory.createPropertyAssignment(\n \"plugins\",\n updatedPluginsArray\n );\n\n // Rebuild properties array with updated plugins\n if (pluginsProperty) {\n // Replace existing plugins property\n const allProperties = [...otherProperties, updatedPluginsProperty];\n return ts.factory.updateObjectLiteralExpression(configObj, allProperties);\n } else {\n // Add new plugins property\n const allProperties = [...otherProperties, updatedPluginsProperty];\n return ts.factory.updateObjectLiteralExpression(configObj, allProperties);\n }\n }\n\n function ensurePluginOrdering(array: ts.ArrayLiteralExpression): ts.ArrayLiteralExpression {\n const elements = Array.from(array.elements);\n let hasReact = false;\n let hasCollie = false;\n let reactIndex = -1;\n let collieIndex = -1;\n\n // Check what we already have\n elements.forEach((elem, idx) => {\n if (ts.isCallExpression(elem) && ts.isIdentifier(elem.expression)) {\n if (elem.expression.text === \"react\") {\n hasReact = true;\n reactIndex = idx;\n } else if (elem.expression.text === \"collie\") {\n hasCollie = true;\n collieIndex = idx;\n }\n }\n });\n\n // Determine if array is multiline by checking if it has more than one element\n const isMultiLine = elements.length > 1;\n\n if (hasCollie && !needsPlugin) {\n // Already has collie, just ensure ordering\n if (hasReact && reactIndex > collieIndex) {\n // Wrong order, need to swap\n const newElements = [...elements];\n const reactPlugin = newElements[reactIndex];\n const colliePlugin = newElements[collieIndex];\n newElements[collieIndex] = reactPlugin;\n newElements[reactIndex] = colliePlugin;\n return ts.factory.createArrayLiteralExpression(newElements, isMultiLine);\n }\n return array; // Order is fine\n }\n\n if (!hasCollie && needsPlugin) {\n // Need to add collie at the end\n const newElements = [...elements, createCollieCall()];\n return ts.factory.createArrayLiteralExpression(newElements, isMultiLine);\n }\n\n return array;\n }\n\n function createCollieCall(): ts.CallExpression {\n return ts.factory.createCallExpression(\n ts.factory.createIdentifier(\"collie\"),\n undefined,\n []\n );\n }\n\n const visited = ts.visitNode(rootNode, visit) as ts.SourceFile;\n\n // Add import if needed\n if (needsImport && changed) {\n const collieImport = ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n false,\n ts.factory.createIdentifier(\"collie\"),\n undefined\n ),\n ts.factory.createStringLiteral(\"@collie-lang/vite\", true)\n );\n\n // Find last import to insert after\n let lastImportIndex = -1;\n for (let i = 0; i < visited.statements.length; i++) {\n if (ts.isImportDeclaration(visited.statements[i])) {\n lastImportIndex = i;\n }\n }\n\n const statements = Array.from(visited.statements);\n if (lastImportIndex >= 0) {\n statements.splice(lastImportIndex + 1, 0, collieImport);\n } else {\n statements.unshift(collieImport);\n }\n\n return ts.factory.updateSourceFile(visited, statements);\n }\n\n return visited;\n };\n };\n\n const result = ts.transform(sourceFile, [transformer]);\n const transformedSourceFile = result.transformed[0];\n result.dispose();\n\n if (!changed) {\n return { code: source, changed: false };\n }\n\n const output = printer.printFile(transformedSourceFile);\n return { code: output, changed: true };\n}\n\nasync function ensureCollieDeclaration(root: string): Promise<void> {\n const target = path.join(root, \"src\", \"collie.d.ts\");\n if (existsSync(target)) return;\n await fs.mkdir(path.dirname(target), { recursive: true });\n\n const declaration = `// Allows importing Collie templates as React components.\n// Customize this typing if your templates expose specific props.\ndeclare module \"*.collie\" {\n import type { ComponentType } from \"react\";\n const component: ComponentType<Record<string, unknown>>;\n export default component;\n}\n`;\n\n await fs.writeFile(target, declaration, \"utf8\");\n}\n\nfunction findViteConfigFile(root: string): string | null {\n for (const file of VITE_CONFIG_FILES) {\n const candidate = path.join(root, file);\n if (existsSync(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\n// Import injection is now handled by transformViteConfig AST transformer\n\nfunction readCliPackageInfo(): { version: string; dependencies: Record<string, string> } {\n try {\n const dir = path.dirname(fileURLToPath(import.meta.url));\n const pkgPath = path.resolve(dir, \"..\", \"package.json\");\n const raw = readFileSync(pkgPath, \"utf8\");\n const pkg = JSON.parse(raw);\n const version = typeof pkg.version === \"string\" ? pkg.version : \"latest\";\n const dependencies =\n pkg && typeof pkg === \"object\" && pkg.dependencies && typeof pkg.dependencies === \"object\"\n ? pkg.dependencies\n : {};\n return { version, dependencies };\n } catch {\n return { version: \"latest\", dependencies: {} };\n }\n}\n\nfunction formatCollieDependency(packageName: string): string {\n return CLI_PACKAGE_VERSION === \"latest\" ? packageName : `${packageName}@${CLI_PACKAGE_VERSION}`;\n}\n\nfunction normalizeDependencyRange(spec: string | undefined, fallback: string): string {\n if (!spec) {\n return fallback;\n }\n if (spec.startsWith(\"workspace:\")) {\n const trimmed = spec.replace(/^workspace:/, \"\");\n return trimmed && trimmed !== \"*\" ? trimmed : fallback;\n }\n return spec;\n}\n\nfunction getViteDependencyInfo(pkg: Record<string, any>): { range: string; major: number | null } | null {\n const spec =\n (pkg.devDependencies && pkg.devDependencies.vite) ||\n (pkg.dependencies && pkg.dependencies.vite) ||\n null;\n if (!spec) return null;\n const normalized = spec.replace(/^workspace:/, \"\").replace(/^[~^>=<\\s]*/, \"\");\n const match = normalized.match(/(\\d+)(?:\\.\\d+)?/);\n return { range: spec, major: match ? Number(match[1]) : null };\n}\n\nfunction maybeWarnAboutViteVersion(info: { range: string; major: number | null } | null): void {\n if (info?.major && info.major < 7) {\n console.log(\n pc.yellow(\n `! Detected Vite ${info.range}. Collie works best with Vite 7+. Consider upgrading if you run into issues.`\n )\n );\n }\n}\n\nfunction printNextSteps(pkgManager: PackageManager, configPath: string): void {\n const devCommand = formatDevCommand(pkgManager);\n console.log(\"\");\n console.log(pc.green(\"Next steps:\"));\n console.log(` - Create a Collie template under src (e.g. src/Hello.collie).`);\n console.log(` - Import it in your React app and run ${devCommand} to start Vite.`);\n console.log(` - Need to adjust plugins later? Edit ${path.basename(configPath)}.`);\n}\n\nfunction printNextJsInstructions(info?: NextDirectoryInfo): void {\n const detected = info?.detected ?? false;\n const routerLabel = detected ? (info?.routerType === \"app\" ? \"App Router\" : \"Pages Router\") : \"Next.js\";\n const baseDirDisplay = (detected ? info?.baseDir ?? \"app\" : \"app\").replace(/\\\\/g, \"/\");\n const entryFile = info?.routerType === \"pages\" ? \"index.tsx\" : \"page.tsx\";\n const entryDisplay = `${baseDirDisplay}/${entryFile}`.replace(/\\/+/g, \"/\");\n\n console.log(pc.green(\"\\n🎉 Collie is ready for Next.js!\\n\"));\n console.log(pc.cyan(`Next steps (${routerLabel}):`));\n console.log(` - Import .collie components inside ${entryDisplay}:`);\n console.log(pc.gray(` import Welcome from \"./components/Welcome.collie\"`));\n console.log(\"\");\n console.log(\" - Collie components render as Server Components by default.\");\n console.log(\" - Add @client at the top of a .collie file to opt into a Client Component.\");\n console.log(\"\");\n console.log(\" - Run your Next.js dev server:\");\n console.log(pc.gray(\" npm run dev\"));\n}\n\nfunction formatDevCommand(pkgManager: PackageManager): string {\n if (pkgManager === \"pnpm\") return \"pnpm dev\";\n if (pkgManager === \"yarn\") return \"yarn dev\";\n return \"npm run dev\";\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, { cwd, stdio: \"inherit\" });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0) resolve();\n else reject(new Error(`${command} ${args.join(\" \")} exited with code ${code}`));\n });\n });\n}\n\ninterface FormatFlags {\n write: boolean;\n check: boolean;\n diff: boolean;\n indent?: number;\n}\n\nasync function runFormat(args: string[]): Promise<void> {\n const { patterns, flags } = parseFormatArgs(args);\n if (patterns.length === 0) {\n throw new Error(\"No file patterns provided. Usage: collie format <files...>\");\n }\n const indent = flags.indent ?? 2;\n\n const cwd = process.cwd();\n const files = await fg(patterns, { cwd, onlyFiles: true, unique: true });\n if (!files.length) {\n printSummary(\"warning\", \"No files matched the provided patterns\", undefined, \"check the glob and try again\");\n return;\n }\n\n files.sort();\n let written = 0;\n let needsFormatting = 0;\n let failures = 0;\n\n for (const file of files) {\n let contents: string;\n try {\n contents = await fs.readFile(file, \"utf8\");\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(pc.red(`✖ Failed to read ${file}: ${message}`));\n failures++;\n continue;\n }\n\n let result;\n try {\n result = formatSource(contents, { indent });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(pc.red(`✖ Failed to format ${file}: ${message}`));\n failures++;\n continue;\n }\n\n if (!result.success) {\n printDiagnostics(file, result.diagnostics);\n failures++;\n continue;\n }\n\n const changed = result.formatted !== contents;\n\n if (flags.diff && changed) {\n printDiff(file, contents, result.formatted);\n }\n\n if (flags.check) {\n if (changed) {\n console.log(pc.red(`✖ ${file} needs formatting`));\n needsFormatting++;\n } else {\n console.log(pc.green(`✔ ${file} is formatted`));\n }\n continue;\n }\n\n if (flags.write) {\n if (changed) {\n await fs.writeFile(file, result.formatted, \"utf8\");\n written++;\n console.log(pc.green(`✔ Formatted ${file}`));\n } else {\n console.log(pc.dim(`- ${file} already formatted`));\n }\n continue;\n }\n\n if (!flags.diff) {\n process.stdout.write(result.formatted);\n }\n }\n\n if (flags.check) {\n if (needsFormatting > 0) {\n console.log(\"\");\n printSummary(\n \"error\",\n `${needsFormatting} file${needsFormatting === 1 ? \"\" : \"s\"} need formatting`,\n \"no files changed\"\n );\n console.log(pc.dim(\"Run: collie format --write to fix\"));\n process.exitCode = 1;\n } else if (failures > 0) {\n printSummary(\n \"error\",\n `Failed to check ${failures} file${failures === 1 ? \"\" : \"s\"}`,\n \"no files changed\",\n \"resolve the errors above and rerun collie format --check\"\n );\n } else {\n printSummary(\n \"success\",\n `All ${files.length} file${files.length === 1 ? \"\" : \"s\"} formatted`,\n \"no files changed\",\n \"run collie build when you are ready to compile\"\n );\n }\n } else if (flags.write) {\n if (failures > 0) {\n printSummary(\n \"error\",\n `Formatted ${written} file${written === 1 ? \"\" : \"s\"} with ${failures} failure${failures === 1 ? \"\" : \"s\"}`,\n `wrote ${written} file${written === 1 ? \"\" : \"s\"} to disk`,\n \"fix the errors above and rerun collie format --write\"\n );\n } else {\n printSummary(\n \"success\",\n `Formatted ${written} file${written === 1 ? \"\" : \"s\"}`,\n `wrote ${written} file${written === 1 ? \"\" : \"s\"} to disk`,\n \"review the changes or run collie check\"\n );\n }\n }\n\n if (failures > 0) {\n process.exitCode = 1;\n }\n}\n\nfunction parseFormatArgs(args: string[]): { patterns: string[]; flags: FormatFlags } {\n const flags: FormatFlags = { write: false, check: false, diff: false };\n const patterns: string[] = [];\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--write\" || arg === \"-w\") {\n flags.write = true;\n continue;\n }\n if (arg === \"--check\" || arg === \"-c\") {\n flags.check = true;\n continue;\n }\n if (arg === \"--diff\" || arg === \"-d\") {\n flags.diff = true;\n continue;\n }\n if (arg === \"--indent\") {\n const value = args[i + 1];\n if (!value) {\n throw new Error(\"--indent flag expects a number.\");\n }\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed < 1) {\n throw new Error(\"Indent width must be a positive integer.\");\n }\n flags.indent = Math.floor(parsed);\n i++;\n continue;\n }\n if (arg.startsWith(\"-\")) {\n throw new Error(`Unknown option: ${arg}`);\n }\n patterns.push(arg);\n }\n\n if (flags.write && flags.check) {\n throw new Error(\"Cannot use --write and --check together.\");\n }\n\n return { patterns, flags };\n}\n\nfunction printDiagnostics(file: string, diagnostics: Diagnostic[]): void {\n for (const diag of diagnostics) {\n const message = formatDiagnosticLine({ ...diag, file }, file);\n if (diag.severity === \"warning\") {\n console.warn(pc.yellow(message));\n } else {\n console.error(pc.red(message));\n }\n }\n}\n\nfunction printDiff(file: string, before: string, after: string): void {\n console.log(pc.cyan(`diff -- ${file}`));\n const diff = diffLines(before, after);\n for (const part of diff) {\n const prefix = part.added ? \"+\" : part.removed ? \"-\" : \" \";\n const color = part.added ? pc.green : part.removed ? pc.red : pc.dim;\n const lines = part.value.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (i === lines.length - 1 && line === \"\") {\n continue;\n }\n console.log(color(`${prefix}${line}`));\n }\n }\n}\n\nfunction getFlag(args: string[], flag: string): string | undefined {\n const index = args.indexOf(flag);\n if (index === -1) {\n return undefined;\n }\n const value = args[index + 1];\n if (!value || value.startsWith(\"-\")) {\n throw new Error(`${flag} flag expects a value.`);\n }\n return value;\n}\n\nfunction hasFlag(args: string[], ...names: string[]): boolean {\n return names.some((name) => args.includes(name));\n}\n\nfunction parseJsxRuntime(value?: string): \"automatic\" | \"classic\" {\n if (!value) {\n throw new Error(\"--jsx flag expects a value.\");\n }\n if (value === \"automatic\" || value === \"classic\") {\n return value;\n }\n throw new Error('Invalid --jsx flag. Use \"automatic\" or \"classic\".');\n}\n\nfunction validateFormatFlag(value: string): \"text\" | \"json\" {\n if (value === \"text\" || value === \"json\") {\n return value;\n }\n throw new Error('Invalid --format flag. Use \"text\" or \"json\".');\n}\n\nfunction printCliError(message: string): void {\n console.error(pc.red(`✖ ${message}`));\n}\n\nmain().catch((error) => {\n printCliError(error instanceof Error ? error.message : String(error));\n process.exit(1);\n});\n","import fs from \"node:fs/promises\";\nimport { formatCollie, type FormatOptions as CoreFormatOptions, type FormatResult } from \"@collie-lang/compiler\";\n\nexport type FormatOptions = CoreFormatOptions;\nexport type FormatSourceResult = FormatResult;\n\nexport interface FormatFileResult extends FormatSourceResult {\n changed: boolean;\n}\n\nexport function formatSource(source: string, options: FormatOptions = {}): FormatSourceResult {\n return formatCollie(source, options);\n}\n\nexport async function formatFile(filepath: string, options: FormatOptions = {}): Promise<FormatFileResult> {\n const original = await fs.readFile(filepath, \"utf8\");\n const result = formatSource(original, options);\n return {\n ...result,\n changed: result.formatted !== original\n };\n}\n","import chokidar from \"chokidar\";\nimport { compileToTsx, type Diagnostic, type TsxCompileOptions } from \"@collie-lang/compiler\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport pc from \"picocolors\";\nimport { resolveOutputPath, toDisplayPath } from \"./fs-utils\";\n\nexport interface WatchOptions {\n outDir?: string;\n sourcemap?: boolean;\n ext?: string;\n jsxRuntime?: \"automatic\" | \"classic\";\n verbose?: boolean;\n}\n\nexport async function watch(inputPath: string, options: WatchOptions = {}): Promise<void> {\n const resolvedInput = path.resolve(process.cwd(), inputPath);\n let stats;\n try {\n stats = await fs.stat(resolvedInput);\n } catch {\n throw new Error(`Input path does not exist: ${inputPath}`);\n }\n\n const isDirectory = stats.isDirectory();\n const ext = normalizeExtension(options.ext);\n const baseDir = isDirectory ? resolvedInput : path.dirname(resolvedInput);\n const outDir = options.outDir ? path.resolve(process.cwd(), options.outDir) : undefined;\n const pattern = isDirectory ? path.join(resolvedInput, `**/*${ext}`) : resolvedInput;\n\n console.log(pc.cyan(`Watching ${toDisplayPath(resolvedInput)} for changes...\\n`));\n\n const watcher = chokidar.watch(pattern, {\n ignored: /node_modules/,\n persistent: true,\n ignoreInitial: false\n });\n\n watcher.on(\"add\", (file) => {\n void compileFile(file, baseDir, outDir, options);\n });\n watcher.on(\"change\", (file) => {\n if (options.verbose) {\n console.log(pc.gray(`[${getTimestamp()}] Changed: ${toDisplayPath(file)}`));\n }\n void compileFile(file, baseDir, outDir, options);\n });\n watcher.on(\"unlink\", (file) => {\n void deleteCompiledFile(file, baseDir, outDir, options);\n });\n watcher.on(\"ready\", () => {\n console.log(pc.green(\"\\nWatching for file changes...\\n\"));\n });\n\n await new Promise<void>((resolve, reject) => {\n watcher.on(\"close\", resolve);\n watcher.on(\"error\", (error) => {\n const err = error instanceof Error ? error : new Error(String(error));\n console.error(pc.red(`[collie] Watcher error: ${err.message}`));\n reject(err);\n });\n process.once(\"SIGINT\", () => {\n console.log(pc.yellow(\"\\nStopping watch mode...\"));\n watcher.close().catch((error) => {\n const err = error instanceof Error ? error : new Error(String(error));\n console.error(pc.red(`[collie] Failed to stop watcher: ${err.message}`));\n reject(err);\n });\n });\n });\n}\n\nasync function compileFile(\n filepath: string,\n baseDir: string,\n outDir: string | undefined,\n options: WatchOptions\n): Promise<void> {\n try {\n const source = await fs.readFile(filepath, \"utf8\");\n const componentName = path.basename(filepath, path.extname(filepath));\n\n const compileOptions: TsxCompileOptions = {\n filename: filepath,\n componentNameHint: componentName,\n jsxRuntime: options.jsxRuntime ?? \"automatic\"\n };\n\n const result = compileToTsx(source, compileOptions);\n const errors = result.diagnostics.filter((d) => d.severity === \"error\");\n if (errors.length) {\n logDiagnostics(filepath, errors);\n return;\n }\n\n const outputPath = resolveOutputPath(filepath, baseDir, outDir);\n await fs.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.writeFile(outputPath, result.code, \"utf8\");\n if (options.sourcemap && result.map) {\n await fs.writeFile(`${outputPath}.map`, JSON.stringify(result.map), \"utf8\");\n }\n\n console.log(pc.green(`[${getTimestamp()}] Compiled ${toDisplayPath(filepath)} → ${toDisplayPath(outputPath)}`));\n\n const warnings = result.diagnostics.filter((d) => d.severity === \"warning\");\n if (warnings.length) {\n logDiagnostics(filepath, warnings);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(pc.red(`[collie] Failed to compile ${toDisplayPath(filepath)}: ${message}`));\n }\n}\n\nasync function deleteCompiledFile(\n filepath: string,\n baseDir: string,\n outDir: string | undefined,\n options: WatchOptions\n): Promise<void> {\n try {\n const outputPath = resolveOutputPath(filepath, baseDir, outDir);\n await fs.unlink(outputPath);\n if (options.sourcemap) {\n await fs.unlink(`${outputPath}.map`).catch(() => {});\n }\n console.log(pc.yellow(`[${getTimestamp()}] Deleted ${toDisplayPath(outputPath)}`));\n } catch {\n // Ignore if file doesn't exist\n }\n}\n\nfunction logDiagnostics(file: string, diagnostics: Diagnostic[]): void {\n for (const diag of diagnostics) {\n const range = diag.range ?? diag.span;\n const fileLabel = diag.filePath ?? diag.file ?? file;\n const location = range ? `${range.start.line}:${range.start.col}` : \"\";\n const prefix = location ? `${toDisplayPath(fileLabel)}:${location}` : toDisplayPath(fileLabel);\n const code = diag.code ? ` (${diag.code})` : \"\";\n const writer = diag.severity === \"warning\" ? pc.yellow : pc.red;\n console[diag.severity === \"warning\" ? \"warn\" : \"error\"](\n writer(`${prefix ? `${prefix}: ` : \"\"}${diag.severity}${code}: ${diag.message}`)\n );\n }\n}\n\nfunction normalizeExtension(ext?: string): string {\n if (!ext || !ext.trim()) {\n return \".collie\";\n }\n return ext.startsWith(\".\") ? ext : `.${ext}`;\n}\n\nfunction getTimestamp(): string {\n return new Date().toLocaleTimeString(\"en-US\", { hour12: false });\n}\n","import path from \"node:path\";\n\nexport function resolveOutputPath(filepath: string, baseDir: string, outDir?: string): string {\n const outputBase = outDir ?? baseDir;\n const relative = path.relative(baseDir, filepath);\n const ext = path.extname(relative);\n const withoutExt = ext ? relative.slice(0, -ext.length) : relative;\n return path.join(outputBase, `${withoutExt}.tsx`);\n}\n\nexport function toDisplayPath(target: string): string {\n const relative = path.relative(process.cwd(), target);\n if (!relative || relative.startsWith(\"..\") || relative.startsWith(\"..\\\\\")) {\n return target;\n }\n return relative;\n}\n","import fg from \"fast-glob\";\nimport { compileToTsx, type Diagnostic, type TsxCompileOptions } from \"@collie-lang/compiler\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport pc from \"picocolors\";\nimport { resolveOutputPath, toDisplayPath } from \"./fs-utils\";\nimport { formatDiagnosticLine, printSummary } from \"./output\";\n\nexport interface BuildOptions {\n outDir?: string;\n sourcemap?: boolean;\n jsxRuntime?: \"automatic\" | \"classic\";\n verbose?: boolean;\n quiet?: boolean;\n}\n\nexport interface BuildResult {\n totalFiles: number;\n successfulFiles: number;\n errors: Array<{ file: string; diagnostics: Diagnostic[] }>;\n}\n\ninterface CompileFileResult {\n success: boolean;\n outputPath?: string;\n diagnostics: Diagnostic[];\n}\n\nexport async function build(input: string, options: BuildOptions = {}): Promise<BuildResult> {\n const resolvedInput = path.resolve(process.cwd(), input);\n let stats;\n try {\n stats = await fs.stat(resolvedInput);\n } catch {\n throw new Error(`Input path does not exist: ${input}`);\n }\n\n const isDirectory = stats.isDirectory();\n const baseDir = isDirectory ? resolvedInput : path.dirname(resolvedInput);\n const outDir = options.outDir ? path.resolve(process.cwd(), options.outDir) : undefined;\n\n const files = isDirectory\n ? (await fg(\"**/*.collie\", { cwd: resolvedInput, absolute: true })).sort()\n : [resolvedInput];\n\n if (!files.length) {\n if (!options.quiet) {\n printSummary(\n \"warning\",\n `No .collie files found under ${toDisplayPath(resolvedInput)}`,\n undefined,\n \"add a .collie file or adjust the input path\"\n );\n }\n return { totalFiles: 0, successfulFiles: 0, errors: [] };\n }\n\n if (!options.quiet) {\n console.log(pc.cyan(`Compiling ${toDisplayPath(resolvedInput)}...`));\n console.log(\"\");\n }\n\n const result: BuildResult = {\n totalFiles: files.length,\n successfulFiles: 0,\n errors: []\n };\n\n for (const file of files) {\n const compileResult = await compileSingleFile(file, baseDir, outDir, options);\n if (compileResult.success) {\n result.successfulFiles++;\n if (!options.quiet) {\n console.log(pc.green(`✔ ${toDisplayPath(file)} → ${toDisplayPath(compileResult.outputPath!)}`));\n }\n if (options.verbose) {\n logDiagnostics(file, compileResult.diagnostics.filter((d) => d.severity === \"warning\"));\n }\n } else {\n result.errors.push({ file, diagnostics: compileResult.diagnostics });\n logDiagnostics(file, compileResult.diagnostics, true);\n }\n }\n\n if (!options.quiet) {\n console.log(\"\");\n if (result.errors.length === 0) {\n const changeDetail = outDir\n ? `wrote ${result.successfulFiles} .tsx file${result.successfulFiles === 1 ? \"\" : \"s\"} to ${toDisplayPath(outDir)}`\n : `wrote ${result.successfulFiles} .tsx file${result.successfulFiles === 1 ? \"\" : \"s\"} next to the source files`;\n printSummary(\n \"success\",\n `Compiled ${result.totalFiles} .collie file${result.totalFiles === 1 ? \"\" : \"s\"}`,\n changeDetail,\n \"import the generated .tsx files in your app\"\n );\n } else {\n const changeDetail =\n result.successfulFiles > 0\n ? `wrote ${result.successfulFiles} .tsx file${result.successfulFiles === 1 ? \"\" : \"s\"} before failing`\n : undefined;\n printSummary(\n \"error\",\n `Build failed with ${result.errors.length} error${result.errors.length === 1 ? \"\" : \"s\"}`,\n changeDetail,\n \"fix the errors above and rerun collie build\"\n );\n }\n }\n\n return result;\n}\n\nasync function compileSingleFile(\n filepath: string,\n baseDir: string,\n outDir: string | undefined,\n options: BuildOptions\n): Promise<CompileFileResult> {\n try {\n const source = await fs.readFile(filepath, \"utf8\");\n const componentName = path.basename(filepath, path.extname(filepath));\n\n const compileOptions: TsxCompileOptions = {\n filename: filepath,\n componentNameHint: componentName,\n jsxRuntime: options.jsxRuntime ?? \"automatic\"\n };\n\n const result = compileToTsx(source, compileOptions);\n const errors = result.diagnostics.filter((d) => d.severity === \"error\");\n if (errors.length) {\n return { success: false, diagnostics: errors };\n }\n\n const outputPath = resolveOutputPath(filepath, baseDir, outDir);\n await fs.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.writeFile(outputPath, result.code, \"utf8\");\n if (options.sourcemap && result.map) {\n await fs.writeFile(`${outputPath}.map`, JSON.stringify(result.map), \"utf8\");\n }\n\n return { success: true, outputPath, diagnostics: result.diagnostics };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n diagnostics: [\n {\n severity: \"error\",\n message,\n file: filepath\n }\n ]\n };\n }\n}\n\nfunction logDiagnostics(file: string, diagnostics: Diagnostic[], force = false): void {\n if (!diagnostics.length) {\n return;\n }\n\n for (const diag of diagnostics) {\n if (!force && diag.severity !== \"warning\") {\n continue;\n }\n const displayFile = diag.file ? toDisplayPath(diag.file) : toDisplayPath(file);\n const message = formatDiagnosticLine({ ...diag, file: displayFile }, toDisplayPath(file));\n const writer = diag.severity === \"warning\" ? pc.yellow : pc.red;\n console[diag.severity === \"warning\" ? \"warn\" : \"error\"](writer(message));\n }\n}\n","import pc from \"picocolors\";\nimport type { Diagnostic } from \"@collie-lang/compiler\";\n\ntype SummaryKind = \"success\" | \"error\" | \"warning\";\n\nconst SUMMARY_STYLES: Record<SummaryKind, { icon: string; color: (text: string) => string }> = {\n success: { icon: \"✔\", color: pc.green },\n warning: { icon: \"⚠\", color: pc.yellow },\n error: { icon: \"✖\", color: pc.red }\n};\n\nexport function printSummary(kind: SummaryKind, message: string, detail?: string, nextStep?: string): void {\n const style = SUMMARY_STYLES[kind];\n console.log(style.color(`${style.icon} ${message}`));\n if (detail) {\n console.log(pc.dim(`Changed: ${detail}`));\n }\n if (nextStep) {\n console.log(pc.dim(`Next: ${nextStep}`));\n }\n}\n\nexport function formatDiagnosticLine(diag: Diagnostic, fallbackFile?: string): string {\n const fileLabel = diag.filePath ?? diag.file ?? fallbackFile ?? \"<unknown>\";\n const range = diag.range ?? diag.span;\n const location = range ? `${fileLabel}:${range.start.line}:${range.start.col}` : fileLabel;\n const code = diag.code ? ` (${diag.code})` : \"\";\n return `${location}: ${diag.severity}${code}: ${diag.message}`;\n}\n","import fg from \"fast-glob\";\nimport { parseCollie, type Diagnostic, type SourceSpan } from \"@collie-lang/compiler\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport pc from \"picocolors\";\nimport { toDisplayPath } from \"./fs-utils\";\nimport { formatDiagnosticLine, printSummary } from \"./output\";\n\nexport interface CheckOptions {\n verbose?: boolean;\n format?: \"text\" | \"json\";\n noWarnings?: boolean;\n maxWarnings?: number;\n}\n\nexport interface CheckResult {\n totalFiles: number;\n filesWithErrors: number;\n filesWithWarnings: number;\n diagnostics: Diagnostic[];\n errorCount: number;\n warningCount: number;\n}\n\ntype LineCache = Map<string, string[]>;\n\nexport interface TemplateInfo {\n id: string;\n filePath: string;\n displayPath: string;\n span?: SourceSpan;\n}\n\nexport interface TemplateScanResult {\n files: string[];\n templates: TemplateInfo[];\n diagnostics: Diagnostic[];\n lineCache: LineCache;\n}\n\nexport async function scanTemplates(patterns: string[]): Promise<TemplateScanResult> {\n const files = await fg(patterns, {\n absolute: true,\n onlyFiles: true,\n dot: false,\n unique: true\n });\n\n if (files.length === 0) {\n throw new Error(\"No .collie files found for the provided patterns.\");\n }\n\n const lineCache: LineCache = new Map();\n const diagnostics: Diagnostic[] = [];\n const templates: TemplateInfo[] = [];\n\n for (const file of files) {\n const displayPath = toDisplayPath(file);\n try {\n const source = await fs.readFile(file, \"utf8\");\n lineCache.set(displayPath, source.split(/\\r?\\n/));\n\n const parseResult = parseCollie(source, { filename: file });\n for (const diag of parseResult.diagnostics) {\n const range = diag.range ?? diag.span;\n const normalized: Diagnostic = {\n ...diag,\n file: diag.file\n ? toDisplayPath(path.isAbsolute(diag.file) ? diag.file : path.resolve(path.dirname(file), diag.file))\n : displayPath,\n filePath: diag.filePath\n ? toDisplayPath(\n path.isAbsolute(diag.filePath) ? diag.filePath : path.resolve(path.dirname(file), diag.filePath)\n )\n : displayPath,\n range\n };\n diagnostics.push(normalized);\n }\n\n for (const template of parseResult.templates) {\n templates.push({\n id: template.id,\n filePath: file,\n displayPath,\n span: template.span\n });\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n diagnostics.push({\n severity: \"error\",\n message,\n file: displayPath,\n filePath: displayPath\n });\n }\n }\n\n return { files, templates, diagnostics, lineCache };\n}\n\nexport function buildDuplicateDiagnostics(templates: TemplateInfo[]): Diagnostic[] {\n const duplicates = new Map<string, TemplateInfo[]>();\n for (const template of templates) {\n const list = duplicates.get(template.id) ?? [];\n list.push(template);\n duplicates.set(template.id, list);\n }\n\n const diagnostics: Diagnostic[] = [];\n for (const [id, locations] of duplicates) {\n const uniqueFiles = new Set(locations.map((location) => location.filePath));\n if (uniqueFiles.size <= 1) {\n continue;\n }\n\n for (const location of locations) {\n const otherLocations = locations\n .filter((entry) => entry !== location)\n .map((entry) => formatTemplateLocation(entry))\n .join(\", \");\n const suffix = otherLocations ? ` Also defined in ${otherLocations}.` : \"\";\n diagnostics.push({\n severity: \"error\",\n code: \"COLLIE703\",\n message: `Duplicate template id \"${id}\".${suffix}`,\n file: location.displayPath,\n filePath: location.displayPath,\n range: location.span\n });\n }\n }\n\n return diagnostics;\n}\n\nfunction formatTemplateLocation(template: TemplateInfo): string {\n const span = template.span;\n if (span) {\n return `${template.displayPath}:${span.start.line}:${span.start.col}`;\n }\n return template.displayPath;\n}\n\nexport async function check(patterns: string[], options: CheckOptions = {}): Promise<CheckResult> {\n const scan = await scanTemplates(patterns);\n const diagnostics: Diagnostic[] = [];\n const filesWithErrors = new Set<string>();\n const filesWithWarnings = new Set<string>();\n let errorCount = 0;\n let warningCount = 0;\n\n for (const diag of scan.diagnostics) {\n const fileLabel = diag.filePath ?? diag.file;\n if (diag.severity === \"error\") {\n if (fileLabel) {\n filesWithErrors.add(fileLabel);\n }\n errorCount++;\n diagnostics.push(diag);\n } else {\n warningCount++;\n if (fileLabel) {\n filesWithWarnings.add(fileLabel);\n }\n if (!options.noWarnings) {\n diagnostics.push(diag);\n }\n }\n }\n\n const duplicateDiagnostics = buildDuplicateDiagnostics(scan.templates);\n for (const diag of duplicateDiagnostics) {\n const fileLabel = diag.filePath ?? diag.file;\n if (fileLabel) {\n filesWithErrors.add(fileLabel);\n }\n errorCount++;\n diagnostics.push(diag);\n }\n\n const result: CheckResult = {\n totalFiles: scan.files.length,\n filesWithErrors: filesWithErrors.size,\n filesWithWarnings: filesWithWarnings.size,\n diagnostics,\n errorCount,\n warningCount\n };\n\n if ((options.format ?? \"text\") === \"json\") {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log(pc.cyan(`Checking ${scan.files.length} file${scan.files.length === 1 ? \"\" : \"s\"}...\\n`));\n printTextDiagnostics(result, options, scan.lineCache);\n }\n\n return result;\n}\n\nfunction printTextDiagnostics(result: CheckResult, options: CheckOptions, lineCache: LineCache): void {\n const hasDiagnostics = result.diagnostics.length > 0;\n\n if (hasDiagnostics) {\n for (const diag of result.diagnostics) {\n const message = formatDiagnosticLine(diag);\n const writer = diag.severity === \"warning\" ? pc.yellow : pc.red;\n console.log(writer(message));\n\n const range = diag.range ?? diag.span;\n const fileLabel = diag.filePath ?? diag.file;\n if (options.verbose && range && fileLabel) {\n const lines = lineCache.get(fileLabel);\n if (lines) {\n const index = Math.max(0, range.start.line - 1);\n const text = lines[index] ?? \"\";\n const markerStart = Math.max(0, range.start.col - 1);\n const width = Math.max(1, range.end.col - range.start.col);\n const indicator = `${\" \".repeat(markerStart)}${\"^\".repeat(width)}`;\n\n console.log(pc.dim(` ${text}`));\n console.log(pc.dim(` ${indicator}`));\n }\n }\n\n if (options.verbose) {\n console.log(\"\");\n }\n }\n if (!options.verbose) {\n console.log(\"\");\n }\n }\n\n const warningCount = options.noWarnings ? 0 : result.warningCount;\n const hasWarnings = warningCount > 0;\n const hasErrors = result.errorCount > 0;\n\n const summaryParts: string[] = [];\n if (hasErrors) {\n summaryParts.push(`${result.errorCount} error${result.errorCount === 1 ? \"\" : \"s\"}`);\n }\n if (hasWarnings) {\n summaryParts.push(`${warningCount} warning${warningCount === 1 ? \"\" : \"s\"}`);\n }\n\n const summarySuffix = summaryParts.length > 0 ? ` with ${summaryParts.join(\" and \")}` : \" with no issues\";\n const summary = `Checked ${result.totalFiles} file${result.totalFiles === 1 ? \"\" : \"s\"}${summarySuffix}`;\n\n if (hasErrors) {\n printSummary(\"error\", summary, \"no files changed\", \"fix the errors above and rerun collie check\");\n } else if (hasWarnings) {\n printSummary(\"warning\", summary, \"no files changed\", \"review the warnings above\");\n } else {\n printSummary(\"success\", summary, \"no files changed\", \"run collie build when you are ready to compile\");\n }\n}\n","import prompts, { type PromptObject } from \"prompts\";\nimport fs from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\nimport pc from \"picocolors\";\n\nexport interface CreateOptions {\n projectName?: string;\n template?: string;\n typescript?: boolean;\n packageManager?: \"npm\" | \"yarn\" | \"pnpm\";\n noInstall?: boolean;\n noGit?: boolean;\n}\n\ninterface TemplateMeta {\n label: string;\n description: string;\n variants: Record<\"ts\" | \"js\", string>;\n}\n\nconst TEMPLATE_MAP: Record<string, TemplateMeta> = {\n vite: {\n label: \"Vite + React\",\n description: \"Vite 5 + React 18 starter with Collie support\",\n variants: {\n ts: \"vite-react-ts\",\n js: \"vite-react-js\"\n }\n },\n \"nextjs-app-router\": {\n label: \"Next.js App Router\",\n description: \"Next.js 14 App Router starter wired with @collie-lang/next\",\n variants: {\n ts: \"nextjs-app-router-ts\",\n js: \"nextjs-app-router-js\"\n }\n }\n};\n\ntype TemplateKey = keyof typeof TEMPLATE_MAP;\n\ninterface ResolvedOptions {\n projectName: string;\n template: TemplateKey;\n typescript: boolean;\n packageManager: \"npm\" | \"yarn\" | \"pnpm\";\n noInstall: boolean;\n noGit: boolean;\n}\n\nconst TEMPLATE_ALIASES: Record<string, { template: TemplateKey; forcedTypescript?: boolean }> = {\n next: { template: \"nextjs-app-router\" },\n nextjs: { template: \"nextjs-app-router\", forcedTypescript: true },\n \"nextjs-app\": { template: \"nextjs-app-router\", forcedTypescript: true }\n};\n\nexport function formatTemplateList(): string {\n return Object.entries(TEMPLATE_MAP)\n .map(([key, meta]) => {\n const variantInfo = [\n `${meta.variants.ts} (TypeScript)`,\n `${meta.variants.js} (JavaScript)`\n ].join(\", \");\n return [\n ` • ${key} – ${meta.label}`,\n ` ${meta.description}`,\n ` Variants: ${variantInfo}`\n ].join(\"\\n\");\n })\n .join(\"\\n\");\n}\n\nexport async function create(options: CreateOptions = {}): Promise<void> {\n const resolved = await promptForOptions(options);\n const targetDir = path.resolve(process.cwd(), resolved.projectName);\n\n if (existsSync(targetDir)) {\n const overwrite = await confirmOverwrite(resolved.projectName);\n if (!overwrite) {\n console.log(pc.yellow(\"Cancelled\"));\n return;\n }\n await fs.rm(targetDir, { recursive: true, force: true });\n }\n\n console.log(pc.cyan(`\\nCreating project in ${targetDir}...\\n`));\n\n const templateDir = getTemplateDir(resolved.template, resolved.typescript);\n await copyTemplate(templateDir, targetDir, resolved.projectName);\n console.log(pc.green(\"✔ Copied template files\"));\n\n if (!resolved.noGit) {\n try {\n await runCommand(\"git\", [\"init\"], targetDir);\n console.log(pc.green(\"✔ Initialized git repository\"));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(pc.yellow(`⚠ Failed to initialize git: ${message}`));\n }\n }\n\n if (!resolved.noInstall) {\n console.log(pc.cyan(`✔ Installing dependencies with ${resolved.packageManager}...`));\n try {\n await installDependencies(resolved.packageManager, targetDir);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(pc.yellow(`⚠ Failed to install dependencies: ${message}`));\n console.log(pc.yellow(\" Run the install command manually once you're ready.\"));\n }\n }\n\n printSuccessMessage(resolved);\n}\n\nasync function promptForOptions(options: CreateOptions): Promise<ResolvedOptions> {\n const detected = detectPackageManager();\n const questions: PromptObject[] = [];\n\n if (!options.projectName) {\n questions.push({\n type: \"text\",\n name: \"projectName\",\n message: \"Project name:\",\n initial: \"my-collie-app\",\n validate: (value: string) => {\n if (!value.trim()) return \"Project name is required\";\n if (!/^[a-z0-9-_]+$/i.test(value.trim())) return \"Use letters, numbers, hyphens, or underscores.\";\n return true;\n }\n });\n }\n\n if (!options.template) {\n const choices = Object.entries(TEMPLATE_MAP).map(([value, meta]) => ({\n title: meta.label,\n value\n }));\n questions.push({\n type: \"select\",\n name: \"template\",\n message: \"Select a template:\",\n choices,\n initial: 0\n });\n }\n\n if (options.typescript === undefined) {\n questions.push({\n type: \"confirm\",\n name: \"typescript\",\n message: \"Use TypeScript?\",\n initial: true\n });\n }\n\n if (!options.packageManager) {\n questions.push({\n type: \"select\",\n name: \"packageManager\",\n message: \"Package manager:\",\n choices: [\n { title: \"pnpm\", value: \"pnpm\" },\n { title: \"npm\", value: \"npm\" },\n { title: \"yarn\", value: \"yarn\" }\n ],\n initial: detected === \"pnpm\" ? 0 : detected === \"npm\" ? 1 : 2\n });\n }\n\n const answers =\n questions.length > 0\n ? await prompts(questions, {\n onCancel: () => {\n console.log(pc.yellow(\"\\nCancelled\"));\n process.exit(0);\n }\n })\n : {};\n\n const templateResult = resolveTemplate((options.template || answers.template || \"vite\").trim());\n\n const typescript =\n templateResult.forcedTypescript ??\n (options.typescript !== undefined ? options.typescript : answers.typescript ?? true);\n const packageManager = (options.packageManager || answers.packageManager || detected) as\n | \"npm\"\n | \"yarn\"\n | \"pnpm\";\n\n if (![\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n throw new Error(`Unsupported package manager: ${packageManager}`);\n }\n\n return {\n projectName: (options.projectName || answers.projectName).trim(),\n template: templateResult.template,\n typescript,\n packageManager,\n noInstall: options.noInstall ?? false,\n noGit: options.noGit ?? false\n };\n}\n\ninterface TemplateResolution {\n template: TemplateKey;\n forcedTypescript?: boolean;\n}\n\nfunction resolveTemplate(input: string): TemplateResolution {\n const normalized = input.trim().toLowerCase();\n\n if (TEMPLATE_MAP[normalized as TemplateKey]) {\n return { template: normalized as TemplateKey };\n }\n\n const alias = TEMPLATE_ALIASES[normalized];\n if (alias && TEMPLATE_MAP[alias.template]) {\n return { template: alias.template, forcedTypescript: alias.forcedTypescript };\n }\n\n for (const key of Object.keys(TEMPLATE_MAP) as TemplateKey[]) {\n const meta = TEMPLATE_MAP[key];\n if (meta.variants.ts === normalized) {\n return { template: key, forcedTypescript: true };\n }\n if (meta.variants.js === normalized) {\n return { template: key, forcedTypescript: false };\n }\n }\n\n return throwInvalidTemplateError(input);\n}\n\nfunction throwInvalidTemplateError(input: string): never {\n const list = formatTemplateList();\n\n throw new Error(\n `Invalid template: '${input}'.\\n\\nAvailable templates:\\n${list}\\n\\nUsage: collie create <project-name> --template <template>`\n );\n}\n\nasync function confirmOverwrite(projectName: string): Promise<boolean> {\n const { overwrite } = await prompts({\n type: \"confirm\",\n name: \"overwrite\",\n message: `Directory ${projectName} already exists. Overwrite?`,\n initial: false\n });\n return Boolean(overwrite);\n}\n\nfunction getTemplateDir(template: TemplateKey, typescript: boolean): string {\n const meta = TEMPLATE_MAP[template];\n const variant = typescript ? meta.variants.ts : meta.variants.js;\n const dir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"..\", \"templates\", variant);\n\n if (!existsSync(dir)) {\n throw new Error(\n `Template '${template}' with ${typescript ? \"TypeScript\" : \"JavaScript\"} is not available.`\n );\n }\n\n return dir;\n}\n\nasync function copyTemplate(templateDir: string, targetDir: string, projectName: string): Promise<void> {\n await fs.mkdir(targetDir, { recursive: true });\n await copyDirectory(templateDir, targetDir, { projectName });\n}\n\nasync function copyDirectory(source: string, target: string, context: { projectName: string }): Promise<void> {\n const entries = await fs.readdir(source, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(source, entry.name);\n const destName = entry.name.endsWith(\".template\") ? entry.name.replace(/\\.template$/, \"\") : entry.name;\n const destPath = path.join(target, destName);\n\n if (entry.isDirectory()) {\n await fs.mkdir(destPath, { recursive: true });\n await copyDirectory(srcPath, destPath, context);\n } else {\n const buffer = await fs.readFile(srcPath);\n if (entry.name.endsWith(\".template\")) {\n const content = buffer.toString(\"utf8\").replace(/__PROJECT_NAME__/g, context.projectName);\n await fs.writeFile(destPath, content, \"utf8\");\n } else {\n await fs.writeFile(destPath, buffer);\n }\n }\n }\n}\n\nasync function installDependencies(packageManager: \"npm\" | \"yarn\" | \"pnpm\", cwd: string): Promise<void> {\n const args =\n packageManager === \"npm\"\n ? [\"install\"]\n : packageManager === \"yarn\"\n ? [\"install\"]\n : [\"install\"];\n await runCommand(packageManager, args, cwd);\n}\n\nfunction runCommand(command: string, args: string[], cwd: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, { cwd, stdio: \"inherit\" });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0) resolve();\n else reject(new Error(`${command} ${args.join(\" \")} exited with code ${code}`));\n });\n });\n}\n\nfunction detectPackageManager(): \"npm\" | \"yarn\" | \"pnpm\" {\n const userAgent = process.env.npm_config_user_agent ?? \"\";\n if (userAgent.startsWith(\"pnpm\")) return \"pnpm\";\n if (userAgent.startsWith(\"yarn\")) return \"yarn\";\n if (userAgent.startsWith(\"npm\")) return \"npm\";\n return \"pnpm\";\n}\n\nfunction printSuccessMessage(config: ResolvedOptions): void {\n const cdCommand = `cd ${config.projectName}`;\n const installCommand =\n config.packageManager === \"npm\" ? \"npm install\" : `${config.packageManager} install`;\n const devCommand =\n config.packageManager === \"npm\" ? \"npm run dev\" : `${config.packageManager} dev`;\n\n console.log(pc.green(`\\n🎉 Success! Created ${config.projectName}\\n`));\n console.log(\"Next steps:\");\n console.log(pc.cyan(` ${cdCommand}`));\n if (config.noInstall) {\n console.log(pc.cyan(` ${installCommand}`));\n }\n console.log(pc.cyan(` ${devCommand}`));\n console.log(pc.gray(\"\\nHappy coding with Collie! 🐕\\n\"));\n}\n","import fs from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport pc from \"picocolors\";\nimport { detectNextDirectory } from \"@collie-lang/next\";\nimport type { NextDirectoryInfo, NextRouterType } from \"@collie-lang/next\";\nexport type { NextDirectoryInfo, NextRouterType } from \"@collie-lang/next\";\n\nexport interface NextJsSetupOptions {\n skipDetectionLog?: boolean;\n collieNextVersion?: string;\n}\n\nexport async function setupNextJs(\n projectRoot: string,\n options: NextJsSetupOptions = {}\n): Promise<NextDirectoryInfo> {\n const pkg = await readPackageJson(projectRoot);\n if (!pkg) {\n throw new Error(\"package.json not found. Run this inside your Next.js project.\");\n }\n\n if (!hasNextDependency(pkg)) {\n throw new Error(\"Not a Next.js project. 'next' not found in package.json\");\n }\n\n if (!options.skipDetectionLog) {\n console.log(pc.cyan(\"Detected Next.js project\\n\"));\n }\n\n const version = options.collieNextVersion && options.collieNextVersion !== \"latest\" ? options.collieNextVersion : \"latest\";\n const packageJsonPath = path.join(projectRoot, \"package.json\");\n const addedDependency = await ensureCollieNextDependency(packageJsonPath, pkg, version);\n if (addedDependency) {\n console.log(pc.green(\"✔ Added @collie-lang/next to package.json\"));\n }\n\n const configResult = await patchNextConfig(projectRoot);\n if (configResult === \"created\" || configResult === \"patched\") {\n console.log(pc.green(\"✔ Configured next.config.js\"));\n }\n\n const nextDirectory = resolvePrimaryDir(projectRoot);\n if (nextDirectory.detected) {\n console.log(\n pc.cyan(\n `Detected Next.js ${nextDirectory.routerType === \"app\" ? \"App Router\" : \"Pages Router\"} root: ${nextDirectory.baseDir}`\n )\n );\n const declarationPath = await writeTypeDeclarations(projectRoot, nextDirectory);\n console.log(pc.green(`✔ Writing type declarations: ${path.relative(projectRoot, declarationPath)}`));\n\n const exampleResult = await writeExampleComponent(projectRoot, nextDirectory);\n if (exampleResult.created) {\n console.log(pc.green(`✔ Created example component: ${path.relative(projectRoot, exampleResult.path)}`));\n } else {\n console.log(\n pc.yellow(\n `⚠ Example component already exists, skipping: ${path.relative(projectRoot, exampleResult.path)}`\n )\n );\n }\n } else {\n console.log(\n pc.yellow(\n \"⚠ No app/, src/app/, pages/, or src/pages/ directory detected. Create one and re-run `collie init --nextjs`.\"\n )\n );\n }\n\n return nextDirectory;\n}\n\nexport function hasNextDependency(pkg: Record<string, any>): boolean {\n return Boolean(pkg?.dependencies?.next || pkg?.devDependencies?.next);\n}\n\nasync function readPackageJson(projectRoot: string): Promise<Record<string, any> | null> {\n try {\n const packageJsonPath = path.join(projectRoot, \"package.json\");\n const raw = await fs.readFile(packageJsonPath, \"utf8\");\n return JSON.parse(raw);\n } catch {\n return null;\n }\n}\n\nasync function ensureCollieNextDependency(\n packageJsonPath: string,\n pkg: Record<string, any>,\n version: string\n): Promise<boolean> {\n if (pkg.dependencies?.[\"@collie-lang/next\"] || pkg.devDependencies?.[\"@collie-lang/next\"]) {\n return false;\n }\n\n pkg.dependencies = {\n ...(pkg.dependencies ?? {}),\n \"@collie-lang/next\": version\n };\n\n await fs.writeFile(packageJsonPath, JSON.stringify(pkg, null, 2) + \"\\n\");\n return true;\n}\n\ntype PatchResult = \"created\" | \"patched\" | \"already-configured\" | \"manual\";\n\nasync function patchNextConfig(projectRoot: string): Promise<PatchResult> {\n const configCandidates = [\"next.config.ts\", \"next.config.mjs\", \"next.config.js\"];\n let configPath: string | null = null;\n\n for (const candidate of configCandidates) {\n const fullPath = path.join(projectRoot, candidate);\n if (existsSync(fullPath)) {\n configPath = fullPath;\n break;\n }\n }\n\n if (!configPath) {\n configPath = path.join(projectRoot, \"next.config.js\");\n await fs.writeFile(configPath, NEXT_CONFIG_TEMPLATE, \"utf8\");\n return \"created\";\n }\n\n const contents = await fs.readFile(configPath, \"utf8\");\n if (alreadyUsesCollie(contents)) {\n console.log(pc.yellow(\"⚠ next.config.js already configured for Collie. Skipping.\"));\n return \"already-configured\";\n }\n\n const format = detectModuleFormat(configPath, contents);\n const patched =\n format === \"esm\" ? patchEsmConfig(contents) : patchCommonJsConfig(contents);\n\n if (!patched) {\n logManualConfigHelp(format);\n return \"manual\";\n }\n\n await fs.writeFile(configPath, patched, \"utf8\");\n return \"patched\";\n}\n\ntype ModuleFormat = \"esm\" | \"cjs\";\n\nfunction alreadyUsesCollie(source: string): boolean {\n return /@collie-lang\\/next/.test(source) || /\\bwithCollie\\s*\\(/.test(source);\n}\n\nfunction detectModuleFormat(configPath: string, contents: string): ModuleFormat {\n if (/module\\.exports/.test(contents)) {\n return \"cjs\";\n }\n if (/\\bexport\\s+default\\b/.test(contents)) {\n return \"esm\";\n }\n if (configPath.endsWith(\".mjs\") || configPath.endsWith(\".ts\")) {\n return \"esm\";\n }\n return \"cjs\";\n}\n\nfunction patchCommonJsConfig(source: string): string | null {\n let updated = ensureCommonJsImport(source);\n let changed = updated !== source;\n let needsExportLine = false;\n\n if (/module\\.exports\\s*=\\s*withCollie/.test(updated)) {\n return null;\n }\n\n if (/module\\.exports\\s*=\\s*nextConfig\\s*;?/.test(updated)) {\n updated = updated.replace(\n /module\\.exports\\s*=\\s*nextConfig\\s*;?/,\n \"module.exports = withCollie(nextConfig);\"\n );\n changed = true;\n } else if (/module\\.exports\\s*=\\s*{/.test(updated)) {\n updated = updated.replace(/module\\.exports\\s*=\\s*{/, \"const nextConfig = {\");\n needsExportLine = true;\n changed = true;\n }\n\n if (!changed) {\n return null;\n }\n\n if (needsExportLine) {\n updated = appendExport(updated, \"module.exports = withCollie(nextConfig);\");\n }\n\n return updated;\n}\n\nfunction patchEsmConfig(source: string): string | null {\n let updated = ensureEsmImport(source);\n let changed = updated !== source;\n let needsExportLine = false;\n\n if (/export\\s+default\\s+withCollie/.test(updated)) {\n return null;\n }\n\n if (/export\\s+default\\s+nextConfig\\s*;?/.test(updated)) {\n updated = updated.replace(\n /export\\s+default\\s+nextConfig\\s*;?/,\n \"export default withCollie(nextConfig);\"\n );\n changed = true;\n } else if (/export\\s+default\\s*{/.test(updated)) {\n updated = updated.replace(/export\\s+default\\s*{/, \"const nextConfig = {\");\n needsExportLine = true;\n changed = true;\n }\n\n if (!changed) {\n return null;\n }\n\n if (needsExportLine) {\n updated = appendExport(updated, \"export default withCollie(nextConfig);\");\n }\n\n return updated;\n}\n\nfunction ensureCommonJsImport(source: string): string {\n if (/require\\([\"']@collie-lang\\/next[\"']\\)/.test(source)) {\n return source;\n }\n\n const statement = `const withCollie = require(\"@collie-lang/next\");\\n`;\n return insertAfterDirectives(source, statement);\n}\n\nfunction ensureEsmImport(source: string): string {\n if (/from [\"']@collie-lang\\/next[\"']/.test(source)) {\n return source;\n }\n\n const statement = `import withCollie from \"@collie-lang/next\";\\n`;\n return insertAfterDirectives(source, statement);\n}\n\nfunction insertAfterDirectives(source: string, statement: string): string {\n const useStrictPattern = /^\\s*[\"']use strict[\"'];?\\s*/;\n const match = source.match(useStrictPattern);\n if (match) {\n const idx = match[0].length;\n return `${source.slice(0, idx)}\\n${statement}${source.slice(idx)}`;\n }\n return `${statement}${source}`;\n}\n\nfunction appendExport(source: string, line: string): string {\n const trimmed = source.trimEnd();\n return `${trimmed}\\n\\n${line}\\n`;\n}\n\nfunction logManualConfigHelp(format: ModuleFormat): void {\n const snippet = format === \"esm\" ? MANUAL_ESM_SNIPPET : MANUAL_COMMONJS_SNIPPET;\n console.log(pc.yellow(\"⚠ Could not auto-configure Next.js. Wrap your config manually:\"));\n console.log(pc.gray(snippet.trimEnd()));\n}\n\nasync function writeTypeDeclarations(projectRoot: string, dir: NextDirectoryInfo): Promise<string> {\n const declPath = path.join(projectRoot, dir.baseDir, \"collie.d.ts\");\n await fs.mkdir(path.dirname(declPath), { recursive: true });\n await fs.writeFile(declPath, TYPE_DECLARATION, \"utf8\");\n return declPath;\n}\n\ninterface ExampleWriteResult {\n path: string;\n created: boolean;\n}\n\nasync function writeExampleComponent(projectRoot: string, dir: NextDirectoryInfo): Promise<ExampleWriteResult> {\n const examplePath = path.join(projectRoot, dir.baseDir, \"components\", \"Welcome.collie\");\n await fs.mkdir(path.dirname(examplePath), { recursive: true });\n\n if (existsSync(examplePath)) {\n return { path: examplePath, created: false };\n }\n\n await fs.writeFile(examplePath, EXAMPLE_COMPONENT, \"utf8\");\n return { path: examplePath, created: true };\n}\n\nfunction resolvePrimaryDir(projectRoot: string): NextDirectoryInfo {\n return detectNextDirectory(projectRoot);\n}\n\nconst NEXT_CONFIG_TEMPLATE = `const withCollie = require(\"@collie-lang/next\");\n\n/** @type {import('next').NextConfig} */\nconst nextConfig = {\n reactStrictMode: true\n};\n\nmodule.exports = withCollie(nextConfig);\n`;\n\nconst MANUAL_COMMONJS_SNIPPET = `\nconst withCollie = require(\"@collie-lang/next\");\n\nmodule.exports = withCollie({\n // existing config\n});\n`;\n\nconst MANUAL_ESM_SNIPPET = `\nimport withCollie from \"@collie-lang/next\";\n\nexport default withCollie({\n // existing config\n});\n`;\n\nconst TYPE_DECLARATION = `declare module \"*.collie\" {\n import type { ComponentType } from \"react\";\n const component: ComponentType<Record<string, unknown>>;\n export default component;\n}\n`;\n\nconst EXAMPLE_COMPONENT = `props\n message: string = \"Welcome to Collie with Next.js!\"\n\ndiv class=\"welcome\"\n h1\n {message}\n p\n Edit this component in components/Welcome.collie\n`;\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { convertTsxToCollie } from \"@collie-lang/compiler\";\n\nexport interface ConvertOptions {\n write?: boolean;\n overwrite?: boolean;\n removeOriginal?: boolean;\n}\n\nexport interface ConvertResult {\n collie: string;\n outputPath?: string;\n warnings: string[];\n}\n\nexport async function convertFile(filepath: string, options: ConvertOptions = {}): Promise<ConvertResult> {\n const source = await fs.readFile(filepath, \"utf8\");\n const result = convertTsxToCollie(source, { filename: filepath });\n const { collie, warnings } = result;\n let outputPath: string | undefined;\n\n if (options.write) {\n outputPath = resolveOutputPath(filepath);\n if (!options.overwrite) {\n const exists = await fileExists(outputPath);\n if (exists) {\n throw new Error(`${path.relative(process.cwd(), outputPath)} already exists. Use --overwrite to replace.`);\n }\n }\n await fs.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.writeFile(outputPath, collie, \"utf8\");\n if (options.removeOriginal) {\n await fs.unlink(filepath);\n }\n }\n\n return { collie, warnings, outputPath };\n}\n\nfunction resolveOutputPath(filepath: string): string {\n return filepath.replace(/\\.[tj]sx?$/, \"\") + \".collie\";\n}\n\nasync function fileExists(filepath: string): Promise<boolean> {\n try {\n await fs.access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n","import { compileToJsx } from \"@collie-lang/compiler\";\nimport fg from \"fast-glob\";\nimport fs from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport pc from \"picocolors\";\nimport { printSummary } from \"./output\";\n\nexport type DiagnosticStatus = \"pass\" | \"fail\" | \"warn\";\n\nexport interface DiagnosticResult {\n id: string;\n check: string;\n status: DiagnosticStatus;\n message: string;\n fix?: string;\n tags?: string[];\n}\n\ninterface DoctorContext {\n cwd: string;\n packageJson: Record<string, any> | null;\n}\n\ntype BuildSystem = \"vite\" | \"nextjs\" | null;\n\nconst VITE_CONFIG_FILES = [\"vite.config.ts\", \"vite.config.js\", \"vite.config.mts\", \"vite.config.mjs\"];\nconst NEXT_CONFIG_FILES = [\"next.config.ts\", \"next.config.mjs\", \"next.config.js\"];\nconst DECLARATION_CANDIDATES = [\"src/collie.d.ts\", \"app/collie.d.ts\", \"collie.d.ts\"];\n\nexport interface DoctorOptions {\n cwd?: string;\n}\n\nexport async function runDoctor(options: DoctorOptions = {}): Promise<DiagnosticResult[]> {\n const cwd = options.cwd ?? process.cwd();\n const context: DoctorContext = {\n cwd,\n packageJson: await readPackageJson(cwd)\n };\n\n const results: DiagnosticResult[] = [];\n results.push(checkNodeVersion());\n\n const compilerResult = checkCompilerDependency(context);\n results.push(compilerResult);\n\n const buildInfo = detectBuildSystem(context);\n results.push(buildInfo.result);\n\n if (buildInfo.type === \"vite\") {\n const viteDependency = checkDependency(context, \"@collie-lang/vite\", \"Collie Vite plugin\", [\"vite\"]);\n if (viteDependency) {\n results.push(viteDependency);\n }\n results.push(await checkViteConfig(context));\n } else if (buildInfo.type === \"nextjs\") {\n const nextDependency = checkDependency(context, \"@collie-lang/next\", \"Collie Next.js integration\", [\"nextjs\"]);\n if (nextDependency) {\n results.push(nextDependency);\n }\n results.push(await checkNextConfig(context));\n }\n\n results.push(await checkTypeDeclarations(context));\n results.push(await checkCollieFiles(context));\n results.push(await testCompilation());\n\n return results;\n}\n\nexport function filterDiagnostics(results: DiagnosticResult[], filter?: string): DiagnosticResult[] {\n if (!filter) {\n return results;\n }\n const normalized = filter.trim().toLowerCase();\n if (!normalized) {\n return results;\n }\n return results.filter((result) => {\n if (result.tags?.some((tag) => tag.toLowerCase() === normalized)) {\n return true;\n }\n return result.check.toLowerCase().includes(normalized);\n });\n}\n\nexport function printDoctorResults(results: DiagnosticResult[]): void {\n console.log(pc.bold(\"collie doctor\"));\n console.log(pc.dim(\"Diagnosing your environment...\"));\n console.log(\"\");\n let errors = 0;\n let warnings = 0;\n\n for (const result of results) {\n const icon =\n result.status === \"pass\" ? pc.green(\"✔\") : result.status === \"warn\" ? pc.yellow(\"⚠\") : pc.red(\"✖\");\n console.log(`${icon} ${result.check}: ${result.message}`);\n if (result.fix) {\n console.log(pc.dim(` Fix: ${result.fix}`));\n }\n console.log(\"\");\n if (result.status === \"fail\") {\n errors++;\n } else if (result.status === \"warn\") {\n warnings++;\n }\n }\n\n if (errors === 0 && warnings === 0) {\n printSummary(\"success\", \"All checks passed\", \"no changes made\", \"continue with collie check or collie build\");\n return;\n }\n\n const summary: string[] = [];\n if (errors > 0) summary.push(`${errors} error${errors === 1 ? \"\" : \"s\"}`);\n if (warnings > 0) summary.push(`${warnings} warning${warnings === 1 ? \"\" : \"s\"}`);\n printSummary(\n errors > 0 ? \"error\" : \"warning\",\n `Doctor found ${summary.join(\" and \")}`,\n \"no changes made\",\n \"address the items above and rerun collie doctor\"\n );\n}\n\nfunction checkNodeVersion(): DiagnosticResult {\n const version = process.version;\n const major = Number(version.slice(1).split(\".\")[0]);\n if (Number.isFinite(major) && major >= 18) {\n return {\n id: \"node-version\",\n check: \"Node.js version\",\n status: \"pass\",\n message: `${version} (compatible)`,\n tags: [\"node\"]\n };\n }\n return {\n id: \"node-version\",\n check: \"Node.js version\",\n status: \"fail\",\n message: `${version} (incompatible)`,\n fix: \"Upgrade to Node.js 18 or newer.\",\n tags: [\"node\"]\n };\n}\n\nfunction checkCompilerDependency(context: DoctorContext): DiagnosticResult {\n const spec = getDependencySpec(context.packageJson, \"@collie-lang/compiler\");\n if (!spec) {\n return {\n id: \"compiler-dependency\",\n check: \"Collie compiler\",\n status: \"fail\",\n message: context.packageJson ? \"Not found in package.json\" : \"package.json not found\",\n fix: \"Install @collie-lang/compiler (e.g. npm install --save-dev @collie-lang/compiler)\",\n tags: [\"compiler\"]\n };\n }\n return {\n id: \"compiler-dependency\",\n check: \"Collie compiler\",\n status: \"pass\",\n message: `@collie-lang/compiler@${formatDependencyVersion(spec)}`,\n tags: [\"compiler\"]\n };\n}\n\nfunction detectBuildSystem(context: DoctorContext): { result: DiagnosticResult; type: BuildSystem } {\n if (!context.packageJson) {\n return {\n type: null,\n result: {\n id: \"build-system\",\n check: \"Build system\",\n status: \"warn\",\n message: \"package.json not found\",\n fix: \"Initialize a project (npm init) and install Vite or Next.js.\",\n tags: [\"build\"]\n }\n };\n }\n\n const hasVite = hasDependency(context.packageJson, \"vite\");\n const hasNext = hasDependency(context.packageJson, \"next\");\n\n if (hasVite && hasNext) {\n return {\n type: \"vite\",\n result: {\n id: \"build-system\",\n check: \"Build system\",\n status: \"warn\",\n message: \"Both Vite and Next.js detected (defaulting to Vite)\",\n tags: [\"build\"]\n }\n };\n }\n if (hasVite) {\n return {\n type: \"vite\",\n result: {\n id: \"build-system\",\n check: \"Build system\",\n status: \"pass\",\n message: \"Vite detected\",\n tags: [\"build\", \"vite\"]\n }\n };\n }\n if (hasNext) {\n return {\n type: \"nextjs\",\n result: {\n id: \"build-system\",\n check: \"Build system\",\n status: \"pass\",\n message: \"Next.js detected\",\n tags: [\"build\", \"nextjs\"]\n }\n };\n }\n return {\n type: null,\n result: {\n id: \"build-system\",\n check: \"Build system\",\n status: \"warn\",\n message: \"No Vite or Next.js dependency found\",\n fix: \"Install Vite or Next.js for the best Collie experience.\",\n tags: [\"build\"]\n }\n };\n}\n\nfunction checkDependency(\n context: DoctorContext,\n dependency: string,\n label: string,\n tags: string[]\n): DiagnosticResult | null {\n if (!context.packageJson) {\n return null;\n }\n const spec = getDependencySpec(context.packageJson, dependency);\n if (!spec) {\n return {\n id: `${dependency}-dependency`,\n check: label,\n status: \"fail\",\n message: `${dependency} missing from package.json`,\n fix: `Install ${dependency} (e.g. npm install --save-dev ${dependency})`,\n tags\n };\n }\n return {\n id: `${dependency}-dependency`,\n check: label,\n status: \"pass\",\n message: `${dependency}@${formatDependencyVersion(spec)}`,\n tags\n };\n}\n\nasync function checkViteConfig(context: DoctorContext): Promise<DiagnosticResult> {\n for (const filename of VITE_CONFIG_FILES) {\n const configPath = path.join(context.cwd, filename);\n if (!existsSync(configPath)) continue;\n const contents = await fs.readFile(configPath, \"utf8\");\n const hasPlugin = /@collie-lang\\/vite/.test(contents) && /collie\\s*\\(/.test(contents);\n if (hasPlugin) {\n return {\n id: \"vite-config\",\n check: \"Vite config\",\n status: \"pass\",\n message: `Collie plugin configured in ${filename}`,\n tags: [\"vite\", \"config\"]\n };\n }\n return {\n id: \"vite-config\",\n check: \"Vite config\",\n status: \"fail\",\n message: `Found ${filename} but Collie plugin not configured`,\n fix: \"Add collie() to your Vite plugins array or run collie init.\",\n tags: [\"vite\", \"config\"]\n };\n }\n return {\n id: \"vite-config\",\n check: \"Vite config\",\n status: \"fail\",\n message: \"Vite config not found\",\n fix: \"Create vite.config.ts and add the Collie plugin.\",\n tags: [\"vite\", \"config\"]\n };\n}\n\nasync function checkNextConfig(context: DoctorContext): Promise<DiagnosticResult> {\n for (const filename of NEXT_CONFIG_FILES) {\n const configPath = path.join(context.cwd, filename);\n if (!existsSync(configPath)) continue;\n const contents = await fs.readFile(configPath, \"utf8\");\n const hasLoader = /@collie-lang\\/next/.test(contents) || /withCollie\\s*\\(/.test(contents);\n if (hasLoader) {\n return {\n id: \"next-config\",\n check: \"Next.js config\",\n status: \"pass\",\n message: `Collie loader configured in ${filename}`,\n tags: [\"nextjs\", \"config\"]\n };\n }\n return {\n id: \"next-config\",\n check: \"Next.js config\",\n status: \"fail\",\n message: `Found ${filename} but Collie loader not configured`,\n fix: \"Wrap your Next.js config with withCollie() or run collie init --nextjs.\",\n tags: [\"nextjs\", \"config\"]\n };\n }\n return {\n id: \"next-config\",\n check: \"Next.js config\",\n status: \"fail\",\n message: \"Next.js config not found\",\n fix: \"Create next.config.js and configure withCollie().\",\n tags: [\"nextjs\", \"config\"]\n };\n}\n\nasync function checkTypeDeclarations(context: DoctorContext): Promise<DiagnosticResult> {\n for (const relativePath of DECLARATION_CANDIDATES) {\n const fullPath = path.join(context.cwd, relativePath);\n if (existsSync(fullPath)) {\n return {\n id: \"type-declarations\",\n check: \"Type declarations\",\n status: \"pass\",\n message: `Found ${relativePath}`,\n tags: [\"types\"]\n };\n }\n }\n return {\n id: \"type-declarations\",\n check: \"Type declarations\",\n status: \"warn\",\n message: \"collie.d.ts not found\",\n fix: \"Create src/collie.d.ts so TypeScript recognizes .collie imports.\",\n tags: [\"types\"]\n };\n}\n\nasync function checkCollieFiles(context: DoctorContext): Promise<DiagnosticResult> {\n const files = await fg(\"**/*.collie\", {\n cwd: context.cwd,\n ignore: [\"node_modules/**\", \"dist/**\", \".next/**\"],\n absolute: false\n });\n if (files.length === 0) {\n return {\n id: \"collie-files\",\n check: \"Collie files\",\n status: \"warn\",\n message: \"No .collie files found\",\n fix: \"Create a .collie template to start using Collie.\",\n tags: [\"templates\"]\n };\n }\n return {\n id: \"collie-files\",\n check: \"Collie files\",\n status: \"pass\",\n message: `Found ${files.length} .collie file${files.length === 1 ? \"\" : \"s\"}`,\n tags: [\"templates\"]\n };\n}\n\nasync function testCompilation(): Promise<DiagnosticResult> {\n const template = ['props', ' name: string = \"world\"', \"\", \"div class=\\\"doctor-check\\\"\", \" h1\", \" Hello {{ name }}\"].join(\n \"\\n\"\n );\n try {\n const result = compileToJsx(template, { componentNameHint: \"DoctorCheck\" });\n const hasError = result.diagnostics.some((diag) => diag.severity === \"error\");\n if (hasError) {\n return {\n id: \"compiler-test\",\n check: \"Test compilation\",\n status: \"fail\",\n message: \"Compiler produced errors\",\n fix: \"Reinstall @collie-lang/compiler or inspect diagnostics.\",\n tags: [\"compiler\"]\n };\n }\n return {\n id: \"compiler-test\",\n check: \"Test compilation\",\n status: \"pass\",\n message: \"Successful\",\n tags: [\"compiler\"]\n };\n } catch {\n return {\n id: \"compiler-test\",\n check: \"Test compilation\",\n status: \"fail\",\n message: \"Failed to compile sample template\",\n fix: \"Verify @collie-lang/compiler is installed correctly.\",\n tags: [\"compiler\"]\n };\n }\n}\n\nasync function readPackageJson(cwd: string): Promise<Record<string, any> | null> {\n try {\n const pkgPath = path.join(cwd, \"package.json\");\n const raw = await fs.readFile(pkgPath, \"utf8\");\n return JSON.parse(raw);\n } catch {\n return null;\n }\n}\n\nfunction getDependencySpec(pkg: Record<string, any> | null, name: string): string | undefined {\n if (!pkg) {\n return undefined;\n }\n return pkg.dependencies?.[name] ?? pkg.devDependencies?.[name];\n}\n\nfunction hasDependency(pkg: Record<string, any>, name: string): boolean {\n return Boolean(pkg.dependencies?.[name] ?? pkg.devDependencies?.[name]);\n}\n\nfunction formatDependencyVersion(spec: string): string {\n return spec.replace(/^workspace:/, \"\").replace(/^[~^]/, \"\");\n}\n"],"mappings":"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","names":["import_node_child_process","import_promises","import_node_fs","import_node_path","import_node_url","import_fast_glob","import_picocolors","import_prompts","import_compiler","import_promises","import_node_path","path","path","fs","pc","chokidar","import_compiler","import_promises","import_node_path","import_picocolors","import_picocolors","pc","path","fs","fg","pc","logDiagnostics","import_fast_glob","import_compiler","import_promises","import_node_path","import_picocolors","fg","fs","path","pc","import_promises","import_node_path","import_picocolors","path","pc","fs","prompts","import_promises","import_node_fs","import_node_path","import_picocolors","import_promises","import_node_path","import_compiler","fs","resolveOutputPath","path","import_compiler","import_fast_glob","import_promises","import_node_fs","import_node_path","import_picocolors","pc","path","fs","fg","import_meta","VITE_CONFIG_FILES","pc","path","fg","formatTemplateLocation","fs","detectPackageManager","prompts","runCommand","ts","VITE_CONFIG_FILES","import_meta","pc","path","runCommand","fg","fs","pc"]}
package/dist/index.d.cts DELETED
@@ -1,2 +0,0 @@
1
-
2
- export { }