{"version":3,"file":"e2e.mjs","sources":["../src/e2e.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * E2E test for create-defuss package.\n * Checks out the create package itself from GitHub to verify all features work.\n */\n\nimport { performSparseCheckout } from \"./git.js\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { existsSync, rmSync, readFileSync, readdirSync } from \"node:fs\";\n\nconst TEST_URL = \"https://github.com/kyr0/defuss/tree/main/packages/create\";\n\nasync function runE2ETest(): Promise<void> {\n    const testDir = join(tmpdir(), `create-defuss-e2e-${Date.now()}`);\n\n    console.log(\"🧪 E2E Test for create-defuss\");\n    console.log(\"=\".repeat(50));\n    console.log(`Test URL: ${TEST_URL}`);\n    console.log(`Test Directory: ${testDir}`);\n    console.log(\"=\".repeat(50));\n\n    let passed = true;\n    const results: { test: string; passed: boolean; message?: string }[] = [];\n\n    try {\n        // Test 1: Run sparse checkout\n        console.log(\"\\n📥 Running sparse checkout...\\n\");\n        performSparseCheckout(TEST_URL, testDir);\n\n        // Test 2: Verify destination folder exists\n        console.log(\"\\n🔍 Running verification checks...\\n\");\n\n        if (existsSync(testDir)) {\n            results.push({ test: \"Destination folder created\", passed: true });\n        } else {\n            results.push({ test: \"Destination folder created\", passed: false, message: \"Folder does not exist\" });\n            passed = false;\n        }\n\n        // Test 3: Verify package.json exists\n        const packageJsonPath = join(testDir, \"package.json\");\n        if (existsSync(packageJsonPath)) {\n            results.push({ test: \"package.json exists\", passed: true });\n\n            // Test 4: Verify package.json is valid JSON\n            try {\n                const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\"));\n                results.push({ test: \"package.json is valid JSON\", passed: true });\n\n                // Test 5: Verify package name\n                if (packageJson.name === \"create-defuss\") {\n                    results.push({ test: \"Package name is correct\", passed: true });\n                } else {\n                    results.push({ test: \"Package name is correct\", passed: false, message: `Expected 'create-defuss', got '${packageJson.name}'` });\n                    passed = false;\n                }\n\n                // Test 6: Check that no workspace:* versions remain in package.json\n                const hasWorkspaceRefs = checkForWorkspaceRefs(packageJson);\n                if (!hasWorkspaceRefs) {\n                    results.push({ test: \"No workspace:* versions in package.json\", passed: true });\n                } else {\n                    results.push({ test: \"No workspace:* versions in package.json\", passed: false, message: \"Found workspace:* references\" });\n                    passed = false;\n                }\n            } catch (err) {\n                results.push({ test: \"package.json is valid JSON\", passed: false, message: (err as Error).message });\n                passed = false;\n            }\n        } else {\n            results.push({ test: \"package.json exists\", passed: false, message: \"File not found\" });\n            passed = false;\n        }\n\n        // Test 7: Verify src folder exists\n        const srcPath = join(testDir, \"src\");\n        if (existsSync(srcPath)) {\n            results.push({ test: \"src folder exists\", passed: true });\n\n            // Test 8: Verify key source files\n            const expectedFiles = [\"cli.ts\", \"git.ts\"];\n            for (const file of expectedFiles) {\n                if (existsSync(join(srcPath, file))) {\n                    results.push({ test: `src/${file} exists`, passed: true });\n                } else {\n                    results.push({ test: `src/${file} exists`, passed: false, message: \"File not found\" });\n                    passed = false;\n                }\n            }\n        } else {\n            results.push({ test: \"src folder exists\", passed: false, message: \"Folder not found\" });\n            passed = false;\n        }\n\n        // Test 9: Verify .git folder was created (new repo initialized)\n        const gitPath = join(testDir, \".git\");\n        if (existsSync(gitPath)) {\n            results.push({ test: \"Git repository initialized\", passed: true });\n        } else {\n            results.push({ test: \"Git repository initialized\", passed: false, message: \".git folder not found\" });\n            passed = false;\n        }\n\n        // Test 10: List all files for verification\n        console.log(\"\\n📁 Files in checkout:\");\n        listFilesRecursively(testDir, \"\", 2);\n\n    } catch (err) {\n        console.error(\"\\n❌ Test execution failed:\", (err as Error).message);\n        passed = false;\n        results.push({ test: \"Checkout execution\", passed: false, message: (err as Error).message });\n    } finally {\n        // Cleanup\n        console.log(\"\\n🧹 Cleaning up test directory...\");\n        if (existsSync(testDir)) {\n            rmSync(testDir, { recursive: true, force: true });\n            console.log(\"✅ Test directory removed\");\n        }\n    }\n\n    // Report results\n    console.log(\"\\n\" + \"=\".repeat(50));\n    console.log(\"📊 TEST RESULTS\");\n    console.log(\"=\".repeat(50));\n\n    for (const result of results) {\n        const icon = result.passed ? \"✅\" : \"❌\";\n        const msg = result.message ? ` (${result.message})` : \"\";\n        console.log(`${icon} ${result.test}${msg}`);\n    }\n\n    const passedCount = results.filter(r => r.passed).length;\n    const totalCount = results.length;\n\n    console.log(\"\\n\" + \"=\".repeat(50));\n    console.log(`📈 Summary: ${passedCount}/${totalCount} tests passed`);\n    console.log(\"=\".repeat(50));\n\n    if (!passed) {\n        console.log(\"\\n❌ E2E TEST FAILED\");\n        process.exit(1);\n    } else {\n        console.log(\"\\n✅ E2E TEST PASSED\");\n        process.exit(0);\n    }\n}\n\n/**\n * Check if any dependency has workspace:* references\n */\nfunction checkForWorkspaceRefs(packageJson: Record<string, unknown>): boolean {\n    const depTypes = [\"dependencies\", \"devDependencies\", \"peerDependencies\", \"optionalDependencies\"];\n\n    for (const depType of depTypes) {\n        const deps = packageJson[depType] as Record<string, string> | undefined;\n        if (!deps || typeof deps !== \"object\") continue;\n\n        for (const version of Object.values(deps)) {\n            if (typeof version === \"string\" && version.startsWith(\"workspace:\")) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\n/**\n * List files recursively with indentation (limited depth)\n */\nfunction listFilesRecursively(dir: string, indent: string, maxDepth: number): void {\n    if (maxDepth <= 0) {\n        console.log(`${indent}...`);\n        return;\n    }\n\n    const items = readdirSync(dir);\n    for (const item of items) {\n        if (item === \".git\" || item === \"node_modules\") {\n            console.log(`${indent}${item}/`);\n            continue;\n        }\n        const itemPath = join(dir, item);\n        try {\n            const stat = require(\"fs\").lstatSync(itemPath);\n            if (stat.isDirectory()) {\n                console.log(`${indent}${item}/`);\n                listFilesRecursively(itemPath, indent + \"  \", maxDepth - 1);\n            } else {\n                console.log(`${indent}${item}`);\n            }\n        } catch {\n            console.log(`${indent}${item}`);\n        }\n    }\n}\n\n// Run the test\nrunE2ETest();\n"],"names":["TEST_URL","runE2ETest","testDir","join","tmpdir","passed","results","performSparseCheckout","existsSync","packageJsonPath","packageJson","readFileSync","checkForWorkspaceRefs","err","srcPath","expectedFiles","file","gitPath","listFilesRecursively","rmSync","result","icon","msg","passedCount","r","totalCount","__name","depTypes","depType","deps","version","dir","indent","maxDepth","items","readdirSync","item","itemPath","require"],"mappings":"8WAYA,MAAMA,EAAW,2DAEjB,eAAeC,GAA4B,CACvC,MAAMC,EAAUC,EAAKC,EAAA,EAAU,qBAAqB,KAAK,IAAA,CAAK,EAAE,EAEhE,QAAQ,IAAI,sCAA+B,EAC3C,QAAQ,IAAI,IAAI,OAAO,EAAE,CAAC,EAC1B,QAAQ,IAAI,aAAaJ,CAAQ,EAAE,EACnC,QAAQ,IAAI,mBAAmBE,CAAO,EAAE,EACxC,QAAQ,IAAI,IAAI,OAAO,EAAE,CAAC,EAE1B,IAAIG,EAAS,GACb,MAAMC,EAAiE,CAAA,EAEvE,GAAI,CAEA,QAAQ,IAAI;AAAA;AAAA,CAAmC,EAC/CC,EAAsBP,EAAUE,CAAO,EAGvC,QAAQ,IAAI;AAAA;AAAA,CAAuC,EAE/CM,EAAWN,CAAO,EAClBI,EAAQ,KAAK,CAAE,KAAM,6BAA8B,OAAQ,GAAM,GAEjEA,EAAQ,KAAK,CAAE,KAAM,6BAA8B,OAAQ,GAAO,QAAS,wBAAyB,EACpGD,EAAS,IAIb,MAAMI,EAAkBN,EAAKD,EAAS,cAAc,EACpD,GAAIM,EAAWC,CAAe,EAAG,CAC7BH,EAAQ,KAAK,CAAE,KAAM,sBAAuB,OAAQ,GAAM,EAG1D,GAAI,CACA,MAAMI,EAAc,KAAK,MAAMC,EAAaF,EAAiB,OAAO,CAAC,EACrEH,EAAQ,KAAK,CAAE,KAAM,6BAA8B,OAAQ,GAAM,EAG7DI,EAAY,OAAS,gBACrBJ,EAAQ,KAAK,CAAE,KAAM,0BAA2B,OAAQ,GAAM,GAE9DA,EAAQ,KAAK,CAAE,KAAM,0BAA2B,OAAQ,GAAO,QAAS,kCAAkCI,EAAY,IAAI,GAAA,CAAK,EAC/HL,EAAS,IAIYO,EAAsBF,CAAW,GAItDJ,EAAQ,KAAK,CAAE,KAAM,0CAA2C,OAAQ,GAAO,QAAS,+BAAgC,EACxHD,EAAS,IAHTC,EAAQ,KAAK,CAAE,KAAM,0CAA2C,OAAQ,GAAM,CAIlF,OACKO,EAAK,CACVP,EAAQ,KAAK,CAAE,KAAM,6BAA8B,OAAQ,GAAO,QAAUO,EAAc,QAAS,EACnGR,EAAS,EAAA,CACb,MAEAC,EAAQ,KAAK,CAAE,KAAM,sBAAuB,OAAQ,GAAO,QAAS,iBAAkB,EACtFD,EAAS,GAIb,MAAMS,EAAUX,EAAKD,EAAS,KAAK,EACnC,GAAIM,EAAWM,CAAO,EAAG,CACrBR,EAAQ,KAAK,CAAE,KAAM,oBAAqB,OAAQ,GAAM,EAGxD,MAAMS,EAAgB,CAAC,SAAU,QAAQ,EACzC,UAAWC,KAAQD,EACXP,EAAWL,EAAKW,EAASE,CAAI,CAAC,EAC9BV,EAAQ,KAAK,CAAE,KAAM,OAAOU,CAAI,UAAW,OAAQ,GAAM,GAEzDV,EAAQ,KAAK,CAAE,KAAM,OAAOU,CAAI,UAAW,OAAQ,GAAO,QAAS,gBAAA,CAAkB,EACrFX,EAAS,GAEjB,MAEAC,EAAQ,KAAK,CAAE,KAAM,oBAAqB,OAAQ,GAAO,QAAS,mBAAoB,EACtFD,EAAS,GAIb,MAAMY,EAAUd,EAAKD,EAAS,MAAM,EAChCM,EAAWS,CAAO,EAClBX,EAAQ,KAAK,CAAE,KAAM,6BAA8B,OAAQ,GAAM,GAEjEA,EAAQ,KAAK,CAAE,KAAM,6BAA8B,OAAQ,GAAO,QAAS,wBAAyB,EACpGD,EAAS,IAIb,QAAQ,IAAI;AAAA,6BAAyB,EACrCa,EAAqBhB,EAAS,GAAI,CAAC,CAAA,OAE9BW,EAAK,CACV,QAAQ,MAAM;AAAA,+BAA+BA,EAAc,OAAO,EAClER,EAAS,GACTC,EAAQ,KAAK,CAAE,KAAM,qBAAsB,OAAQ,GAAO,QAAUO,EAAc,QAAS,CAAA,QAC/F,CAEI,QAAQ,IAAI;AAAA,wCAAoC,EAC5CL,EAAWN,CAAO,IAClBiB,EAAOjB,EAAS,CAAE,UAAW,GAAM,MAAO,GAAM,EAChD,QAAQ,IAAI,+BAA0B,EAC1C,CAIJ,QAAQ,IAAI;AAAA,EAAO,IAAI,OAAO,EAAE,CAAC,EACjC,QAAQ,IAAI,wBAAiB,EAC7B,QAAQ,IAAI,IAAI,OAAO,EAAE,CAAC,EAE1B,UAAWkB,KAAUd,EAAS,CAC1B,MAAMe,EAAOD,EAAO,OAAS,SAAM,SAC7BE,EAAMF,EAAO,QAAU,KAAKA,EAAO,OAAO,IAAM,GACtD,QAAQ,IAAI,GAAGC,CAAI,IAAID,EAAO,IAAI,GAAGE,CAAG,EAAE,CAAA,CAG9C,MAAMC,EAAcjB,EAAQ,OAAOkB,GAAKA,EAAE,MAAM,EAAE,OAC5CC,EAAanB,EAAQ,OAE3B,QAAQ,IAAI;AAAA,EAAO,IAAI,OAAO,EAAE,CAAC,EACjC,QAAQ,IAAI,sBAAeiB,CAAW,IAAIE,CAAU,eAAe,EACnE,QAAQ,IAAI,IAAI,OAAO,EAAE,CAAC,EAErBpB,GAID,QAAQ,IAAI;AAAA,uBAAqB,EACjC,QAAQ,KAAK,CAAC,IAJd,QAAQ,IAAI;AAAA,uBAAqB,EACjC,QAAQ,KAAK,CAAC,EAKtB,CArIeqB,EAAAzB,EAAA,cA0If,SAASW,EAAsBF,EAA+C,CAC1E,MAAMiB,EAAW,CAAC,eAAgB,kBAAmB,mBAAoB,sBAAsB,EAE/F,UAAWC,KAAWD,EAAU,CAC5B,MAAME,EAAOnB,EAAYkB,CAAO,EAChC,GAAI,GAACC,GAAQ,OAAOA,GAAS,WAE7B,UAAWC,KAAW,OAAO,OAAOD,CAAI,EACpC,GAAI,OAAOC,GAAY,UAAYA,EAAQ,WAAW,YAAY,EAC9D,MAAO,GAEf,CAEJ,MAAO,EACX,CAdSJ,EAAAd,EAAA,yBAmBT,SAASM,EAAqBa,EAAaC,EAAgBC,EAAwB,CAC/E,GAAIA,GAAY,EAAG,CACf,QAAQ,IAAI,GAAGD,CAAM,KAAK,EAC1B,MAAA,CAGJ,MAAME,EAAQC,EAAYJ,CAAG,EAC7B,UAAWK,KAAQF,EAAO,CACtB,GAAIE,IAAS,QAAUA,IAAS,eAAgB,CAC5C,QAAQ,IAAI,GAAGJ,CAAM,GAAGI,CAAI,GAAG,EAC/B,QAAA,CAEJ,MAAMC,EAAWlC,EAAK4B,EAAKK,CAAI,EAC/B,GAAI,CACaE,EAAQ,IAAI,EAAE,UAAUD,CAAQ,EACpC,eACL,QAAQ,IAAI,GAAGL,CAAM,GAAGI,CAAI,GAAG,EAC/BlB,EAAqBmB,EAAUL,EAAS,KAAMC,EAAW,CAAC,GAE1D,QAAQ,IAAI,GAAGD,CAAM,GAAGI,CAAI,EAAE,CAClC,MACI,CACJ,QAAQ,IAAI,GAAGJ,CAAM,GAAGI,CAAI,EAAE,CAAA,CAClC,CAER,CAzBSV,EAAAR,EAAA,wBA4BTjB,EAAA"}