{"_id":"@asafarim/direxpo","_rev":"12-d8b64775dad77aa8aabf7592da62cc7c","name":"@asafarim/direxpo","dist-tags":{"latest":"1.8.0"},"versions":{"1.2.4":{"name":"@asafarim/direxpo","version":"1.2.4","author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.2.4","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"d62a4ef645b536c6906450ee238d7a2c5abaf023","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.2.4.tgz","fileCount":38,"integrity":"sha512-WZWaIRUjW6Q2StJPUndJV0EffH6ND34rhebS45IvQhh1NhPIKJ86Sj4D3/b4xe5tKzSD1IFwBrfuBI53y40OUg==","signatures":[{"sig":"MEYCIQCUgERq9SJfEWjYHOFwkorQiB4WUVIVPJWfBgS22X6FgQIhAI4kohA/CSEtX01AaWMkss1Itb5QwuYpFyoKVEKGTPF8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146015},"type":"module","_from":"file:asafarim-direxpo-1.2.4.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/d8c2b0ba3c44af7745677943104c7dda/asafarim-direxpo-1.2.4.tgz","_integrity":"sha512-WZWaIRUjW6Q2StJPUndJV0EffH6ND34rhebS45IvQhh1NhPIKJ86Sj4D3/b4xe5tKzSD1IFwBrfuBI53y40OUg==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful tool for converting code projects into beautifully formatted Markdown files with optional folder structure visualization.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.2.4_1767812139445_0.8414204723761673","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@asafarim/direxpo","version":"1.2.5","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.2.5","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"ccedfaebd3ce6b055cf2008d918902d0fe909395","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.2.5.tgz","fileCount":38,"integrity":"sha512-6FobqfXCPmmIa310EXLlGXTTcm9CdAFt3tkRbmRuy8d3HoiGI31kMcShhsM8gC6tRQAY/up4BI6cAR+v2Mqjvw==","signatures":[{"sig":"MEUCIQCXUYqgy4+jFCMeasHjHKQF95L3+65OWs/jhFKtp6YeXAIgJFclvPgzcdWlnycC+wameyfHN1kVdxXTXnXLJ7m3me0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146167},"type":"module","_from":"file:asafarim-direxpo-1.2.5.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/ca60f7fcdea0da8c05e0a4f34c5c56a2/asafarim-direxpo-1.2.5.tgz","_integrity":"sha512-6FobqfXCPmmIa310EXLlGXTTcm9CdAFt3tkRbmRuy8d3HoiGI31kMcShhsM8gC6tRQAY/up4BI6cAR+v2Mqjvw==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful tool for converting code projects into beautifully formatted Markdown files with optional folder structure visualization.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.2.5_1767813055294_0.1596177860980572","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@asafarim/direxpo","version":"1.2.6","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.2.6","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"dc1e623add4c8273171cbe340983f24dab6d684c","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.2.6.tgz","fileCount":39,"integrity":"sha512-3Mh3d7PdLn+re/oRKlCVahiZIdf9gXdElg7bMf3DEJ7DdPjnG9o9b42xT3XFUkbzAS37KxvW46S3Wa6n1K0viQ==","signatures":[{"sig":"MEQCIAWeX5PqSQE9san5+/9A8LLkTWvsSAxmVb7S+UIVnoknAiBUTtUE/HDTYe7ZKMIQRiAWy6CYo2H+rx+CDEa2mI7keQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146421},"type":"module","_from":"file:asafarim-direxpo-1.2.6.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/cf0c760c0ee3a70705f3141a5a7ec144/asafarim-direxpo-1.2.6.tgz","_integrity":"sha512-3Mh3d7PdLn+re/oRKlCVahiZIdf9gXdElg7bMf3DEJ7DdPjnG9o9b42xT3XFUkbzAS37KxvW46S3Wa6n1K0viQ==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful tool for converting code projects into beautifully formatted Markdown files with optional folder structure visualization.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.2.6_1767813399774_0.9892118581511404","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@asafarim/direxpo","version":"1.3.0","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.3.0","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"0bb31e2b1c235d917204fbf79e7d2793e4c6bcde","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.3.0.tgz","fileCount":39,"integrity":"sha512-Lb8xKycwb4Jq4hKMyaWFA8txx3/k9xlWroMdM2xsmwZ/iOKcrqaeY2SB1/Dv1q6g5VdzyPjFuOexQ/53/cqIJg==","signatures":[{"sig":"MEYCIQDIdg8EslUUNCvt7ooQ+dTjA03ijqiBYAzX08xfarkiVQIhAMScJl5hJ/oElynfnSjfMWVob8DatjnB3Ar97Lkqciey","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166997},"type":"module","_from":"file:asafarim-direxpo-1.3.0.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/bd6313cc2e2c804f2fb68d2159ae7b42/asafarim-direxpo-1.3.0.tgz","_integrity":"sha512-Lb8xKycwb4Jq4hKMyaWFA8txx3/k9xlWroMdM2xsmwZ/iOKcrqaeY2SB1/Dv1q6g5VdzyPjFuOexQ/53/cqIJg==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful tool for converting code projects into beautifully formatted Markdown files with optional folder structure visualization.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.3.0_1767816375545_0.5639113689941977","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@asafarim/direxpo","version":"1.3.1","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.3.1","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"60011cbff81335b104a345685cb561f6fd03144f","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.3.1.tgz","fileCount":41,"integrity":"sha512-qq4lJMxA9iwOYG7oJCYrOVVW/zO34OoOmTpMLaYxWTsyi4AbesS8JtIPcA+PfKTRv71apV+DhvN0FhlYUSGD/A==","signatures":[{"sig":"MEQCIAsWUdxCz+KIKyZGmgpGdHFsl2+TtlOZc/lfmVFPK+62AiAjafZyWhZbkSsOu2wTDKsyQEPTOTYwX1gQ0BYA6A4j3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168528},"type":"module","_from":"file:asafarim-direxpo-1.3.1.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/6ef85c560c9620816289dedbf053529f/asafarim-direxpo-1.3.1.tgz","_integrity":"sha512-qq4lJMxA9iwOYG7oJCYrOVVW/zO34OoOmTpMLaYxWTsyi4AbesS8JtIPcA+PfKTRv71apV+DhvN0FhlYUSGD/A==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful tool for converting code projects into beautifully formatted Markdown files with optional folder structure visualization.","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.3.1_1767817746866_0.5879522105850141","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@asafarim/direxpo","version":"1.4.0","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.4.0","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"6d6552f219b53077ac65cc809481b4871eaf6dc2","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.4.0.tgz","fileCount":45,"integrity":"sha512-VBGgAtm7jPlGd3hgYlPajA83KzPLweM4lPOb1Xnc+YRP9TP3FvB0eNUAGIBo0DqNFrUweImPNtYuqjFaxlQATw==","signatures":[{"sig":"MEUCIATlHTFd8DJNSV2IFLy5VqLjxrONL0LMlH2YDYfdmNXLAiEAzdYkPoTzd/C35F9nBrgfzkzBQzPIMVE/vr9kqsOlO4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207543},"type":"module","_from":"file:asafarim-direxpo-1.4.0.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/14f1552e2ef9dde9274f6fee44ccfb1b/asafarim-direxpo-1.4.0.tgz","_integrity":"sha512-VBGgAtm7jPlGd3hgYlPajA83KzPLweM4lPOb1Xnc+YRP9TP3FvB0eNUAGIBo0DqNFrUweImPNtYuqjFaxlQATw==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"A powerful tool for converting code projects into beautifully formatted Markdown files with optional folder structure visualization.","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.4.0_1769206442851_0.42809788202717014","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@asafarim/direxpo","version":"1.4.1","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.4.1","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"70d07ab24e3b200c92bee3c2dd102cb099d26e03","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.4.1.tgz","fileCount":46,"integrity":"sha512-ztceP3IqBMhTfUBw3FN/+27w++6VjpLTsvEvGGRILFDAW7y0xWq9OAaK0rRLTffMKyhwqruBucfsTeBavDW+1g==","signatures":[{"sig":"MEYCIQDP4vOqT0OvVNi9MND6gPcpRzGZma1sxN46xXzaN1AXmwIhALOH6VFSMkzMy2/F/B+AIy51QqkIjnsqyO92PRHg0lyH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208744},"type":"module","_from":"file:asafarim-direxpo-1.4.1.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/a8b2584c08c1f98c402b13b21d5eae80/asafarim-direxpo-1.4.1.tgz","_integrity":"sha512-ztceP3IqBMhTfUBw3FN/+27w++6VjpLTsvEvGGRILFDAW7y0xWq9OAaK0rRLTffMKyhwqruBucfsTeBavDW+1g==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"Export directory contents to Markdown with optional file tree visualization. A developer tool for code documentation, project snapshots, and sharing code snippets.","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.4.1_1769253541973_0.7803233489908568","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@asafarim/direxpo","version":"1.5.0","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.5.0","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"836ee782196c0aedd2db288ca4956e6eb1e54344","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.5.0.tgz","fileCount":46,"integrity":"sha512-VqWJZyD9/fxxLKvQy3s6s1BzOd04vcxtMghe6lOV4Qs6mqz+VMd1E8IIdX4SO96yCro9XeQKtkPLGvkTVNMv0g==","signatures":[{"sig":"MEUCIQCOwkKbwQ1yOYoqmaCvRIJU2wrXZGXvCMRzUNeZGNcySQIgY2acrSiQLTfjlJm6t9afX5jbjO7RMcYO7WmSe0YkMNg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234426},"type":"module","_from":"file:asafarim-direxpo-1.5.0.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/5fc262e2f08c37a96a1263bc2b32f5b3/asafarim-direxpo-1.5.0.tgz","_integrity":"sha512-VqWJZyD9/fxxLKvQy3s6s1BzOd04vcxtMghe6lOV4Qs6mqz+VMd1E8IIdX4SO96yCro9XeQKtkPLGvkTVNMv0g==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"Export directory contents to Markdown with optional file tree visualization. A developer tool for code documentation, project snapshots, and sharing code snippets.","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.5.0_1769262137485_0.32204728844476005","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@asafarim/direxpo","version":"1.5.1","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.5.1","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"feff6d4c0f2e9912f36129ad4de8b59128fb147a","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.5.1.tgz","fileCount":47,"integrity":"sha512-OsTqPSbb+/GgMf0dgVQcY4sW8HP42c2TVA2OU1Sg+zy48pG/GcPqgEWBGrTc7RBP30DMkH4XHAUxy3do9MgLmQ==","signatures":[{"sig":"MEUCIQDWKdwgrmfIX068WInpm4jD4Z6IoLPGYCJuNhEiHxdYuQIgCdlERoQshvhIPvPLkOcQ8nt9n9IWb0YxQt0cCVzOegM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265758},"type":"module","_from":"file:asafarim-direxpo-1.5.1.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/56148ebb75cea443c5c634d5f6c0fe07/asafarim-direxpo-1.5.1.tgz","_integrity":"sha512-OsTqPSbb+/GgMf0dgVQcY4sW8HP42c2TVA2OU1Sg+zy48pG/GcPqgEWBGrTc7RBP30DMkH4XHAUxy3do9MgLmQ==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"***Convert your project into a beautifully formatted Markdown file***","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.5.1_1769271461431_0.9081041428019987","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@asafarim/direxpo","version":"1.6.0","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.6.0","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"a37de4595c2b9a4661e84da752555aab98554223","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.6.0.tgz","fileCount":47,"integrity":"sha512-yVJRkFRGuXY47qJ4o6OrvH9vyl6B0Twkg27iGmgkDvRrsvAy2uI3BItxS2ppVsoLsjQIvCDgX8eZ5QxdsbpHVw==","signatures":[{"sig":"MEYCIQDWxNpisMbt7xT/+ipowpO0NahTzAPZVUC/6Fgsv395kwIhANsZ6MY27E+ILslSMiz2M4I4mx+glVWti74c6YAO7SHQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265551},"type":"module","_from":"file:asafarim-direxpo-1.6.0.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/cf5214d6be7412003c5e4a3b7defaf9a/asafarim-direxpo-1.6.0.tgz","_integrity":"sha512-yVJRkFRGuXY47qJ4o6OrvH9vyl6B0Twkg27iGmgkDvRrsvAy2uI3BItxS2ppVsoLsjQIvCDgX8eZ5QxdsbpHVw==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"***Convert your project into a beautifully formatted Markdown file***","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.6.0_1771793152763_0.16572988829785373","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@asafarim/direxpo","version":"1.7.0","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","_id":"@asafarim/direxpo@1.7.0","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"homepage":"https://alisafari-it.github.io/direxpo/","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"dist":{"shasum":"04c6e3708cca2e71f018f1d971d355b472310cd3","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.7.0.tgz","fileCount":52,"integrity":"sha512-S+Nw4jqmO80aXRhHW5fiVHxHNZCcec/fjiRyGIhkrv8IbcjyvTIZ94pet56S390MJxjV3aZzKDKEtGqHclSf8Q==","signatures":[{"sig":"MEYCIQCi8P6q/lb+Nwe4hWJMWaSlSNAhqDiz/AJ+43+fviV7cwIhAP3tAmOEo2I0Hq6Pdr26kmGStYJdAhxKBiPr7xQcRpQR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288318},"type":"module","_from":"file:asafarim-direxpo-1.7.0.tgz","private":false,"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js","exmd:web":"pnpm -C web dev","exmd:build":"pnpm -r build","exmd:server":"pnpm -C server dev"},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"_resolved":"/tmp/ff8aa088da5ad992f5ab7a4404fb6e8c/asafarim-direxpo-1.7.0.tgz","_integrity":"sha512-S+Nw4jqmO80aXRhHW5fiVHxHNZCcec/fjiRyGIhkrv8IbcjyvTIZ94pet56S390MJxjV3aZzKDKEtGqHclSf8Q==","repository":{"url":"git+https://github.com/AliSafari-IT/direxpo.git","type":"git"},"_npmVersion":"10.8.2","description":"***Convert your project into a beautifully formatted Markdown file***","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","gh-pages":"^6.3.0","typescript":"^5.3.3","@types/node":"^20.10.6","concurrently":"^8.2.2"},"_npmOperationalInternal":{"tmp":"tmp/direxpo_1.7.0_1771843340987_0.7126589935125518","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@asafarim/direxpo","version":"1.8.0","private":false,"type":"module","devDependencies":{"@types/node":"^20.10.6","tsx":"^4.7.0","typescript":"^5.3.3","gh-pages":"^6.3.0","concurrently":"^8.2.2"},"repository":{"type":"git","url":"git+https://github.com/AliSafari-IT/direxpo.git"},"publishConfig":{"access":"public"},"homepage":"https://alisafari-it.github.io/direxpo/","author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"scripts":{"dev":"pnpm exmd:build && concurrently \"pnpm run exmd:web\" \"pnpm run exmd:server\"","exmd:web":"pnpm -C web dev","exmd:server":"pnpm -C server dev","exmd:build":"pnpm -r build","build":"pnpm -r build","deploy":"pnpm exmd:build && pnpm -C web deploy","release":"node scripts/release.js"},"_id":"@asafarim/direxpo@1.8.0","description":"***Convert your project into a beautifully formatted Markdown file***","bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"_integrity":"sha512-3v3wGKEvE/Qsw/mdwmNNqCjPXt3UVIk1/bas+wUhrw164Lh8eqcc3dNm6bYsk+i7w1V7SDO6OopfAYk4YEElQw==","_resolved":"/tmp/83b7d2972faa9211ea0a951aeef26ab6/asafarim-direxpo-1.8.0.tgz","_from":"file:asafarim-direxpo-1.8.0.tgz","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-3v3wGKEvE/Qsw/mdwmNNqCjPXt3UVIk1/bas+wUhrw164Lh8eqcc3dNm6bYsk+i7w1V7SDO6OopfAYk4YEElQw==","shasum":"f5b471eb6cf90d3d33867841b6cdb6b3cb83b9d9","tarball":"https://registry.npmjs.org/@asafarim/direxpo/-/direxpo-1.8.0.tgz","fileCount":52,"unpackedSize":291699,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQClp4sETVRDjcQMV+3PMVrjhxBcmfPstWASoUWysMdJWAIhAN4QEs4s3o9gRMi8AWw3wpzPJMQQ8+0UtWvd09b5ybLi"}]},"_npmUser":{"name":"asafarim.be","email":"asafarim.it@gmail.com"},"directories":{},"maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/direxpo_1.8.0_1771844417114_0.39481305431548286"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-07T18:55:39.332Z","modified":"2026-02-23T11:00:17.417Z","1.2.4":"2026-01-07T18:55:39.570Z","1.2.5":"2026-01-07T19:10:55.467Z","1.2.6":"2026-01-07T19:16:39.923Z","1.3.0":"2026-01-07T20:06:15.697Z","1.3.1":"2026-01-07T20:29:07.012Z","1.4.0":"2026-01-23T22:14:03.008Z","1.4.1":"2026-01-24T11:19:02.123Z","1.5.0":"2026-01-24T13:42:17.641Z","1.5.1":"2026-01-24T16:17:41.812Z","1.6.0":"2026-02-22T20:45:52.906Z","1.7.0":"2026-02-23T10:42:21.190Z","1.8.0":"2026-02-23T11:00:17.263Z"},"bugs":{"url":"https://github.com/AliSafari-IT/direxpo/issues"},"author":{"name":"Ali Safari","email":"ali@asafarim.com"},"license":"MIT","homepage":"https://alisafari-it.github.io/direxpo/","keywords":["Directory Export","export to MD","asafarim","direxpo","cli access","tree view","Tree Structure"],"repository":{"type":"git","url":"git+https://github.com/AliSafari-IT/direxpo.git"},"description":"***Convert your project into a beautifully formatted Markdown file***","maintainers":[{"name":"asafarim.be","email":"asafarim.it@gmail.com"}],"readme":"# direxpo (a Developer Tool)\n\n***Convert your project into a beautifully formatted Markdown file***\n\nExport directory contents to Markdown with optional file tree visualization. A developer tool for code documentation, project snapshots, and sharing code snippets.\n\n## Quick Start\n\n```bash\n# Install\npnpm install\n\n# Start dev servers (web UI + API)\npnpm dev\n\n# Web UI: http://localhost:5198\n# API: http://localhost:5199\n```\n\n## What It Does\n\n* Export entire directories or selected files to Markdown\n* Generate folder structure trees with ASCII art\n* Filter files by type or glob patterns\n* **Advanced folder selection with lazy-loading and tri-state checkboxes**\n* Interactive file picker with hierarchical tree navigation\n* REST API for programmatic use\n* CLI support via `@asafarim/md-exporter`\n\n## Architecture\n\n```\ndirexpo/\n├─ server/           # Express API server\n│  ├─ tree-router.ts     # Directory tree browsing\n│  └─ export-router.ts   # Export endpoints\n├─ web/              # React frontend\n│  ├─ FilePickerModal.tsx  # File selection UI\n│  └─ ExportPage.tsx      # Main export interface\n└─ README.md\n```\n\n### Advanced Folder Selection\n\nThe file picker features sophisticated folder selection capabilities with lazy-loading and tri-state checkboxes:\n\n#### Features\n\n* **Lazy-Loading**: Directory contents are loaded on-demand for performance\n* **Tri-State Checkboxes**: Folders show three states:\n  * ✅ **Checked**: All descendants are selected\n  * 🟦 **Indeterminate**: Some descendants are selected\n  * ⬜ **Unchecked**: No descendants selected\n* **Ancestor Inheritance**: Selecting a folder automatically marks all ancestors as indeterminate\n* **Path Persistence**: Selected paths are preserved when reopening the modal\n* **Auto-Expansion**: Selected items and their ancestors are automatically expanded for visibility\n* **Exclusion Support**: Uncheck individual files under selected folders to exclude them\n\n#### Selection Model\n\nThe picker uses a hybrid selection model:\n\n```typescript\ninterface SelectionPayload {\n  selectedFiles: string[];    // Explicitly selected files\n  selectedFolders: string[];  // Selected folders (implies all contents)\n  excludedFiles: string[];    // Files excluded from selected folders\n}\n```\n\n#### UI Behavior\n\n1. **Folder Selection**: Checking a folder selects all its contents\n2. **File Exclusion**: Unchecking a file under a selected folder adds it to exclusions\n3. **Ancestor States**: Parent folders show indeterminate when children are partially selected\n4. **Lazy Loading**: Children are checked immediately when loaded if parent is selected\n5. **Path Visibility**: Selected paths are visible in the export summary\n\n#### Example Workflow\n\n```bash\n# 1. Click \"Select Files...\" to open the picker\n# 2. Check a folder (e.g., \"src/components\")\n#    - Folder shows as checked\n#    - All ancestor folders show indeterminate\n#    - Apply button shows \"X+ files\" (X = loaded files, + = unloaded)\n# 3. Click \"Apply Selection\"\n# 4. Export page shows: \"Selected: X+ files, 1 folder\"\n# 5. Click \"Review / Edit\" to modify selection\n#    - Modal opens with previous selection restored\n#    - Selected folder and ancestors are expanded for visibility\n```\n\n## 📁 Project Structure\n\n```\ndirexpo/\n├─ server/                    # Backend API server\n│  ├─ src/\n│  │  ├─ server.ts           # Express server with export endpoints\n│  │  ├─ tree-router.ts      # Tree browsing API for file picker\n│  │  └─ export-router.ts    # Enhanced export with selected files support\n│  ├─ package.json\n│  └─ tsconfig.json\n├─ web/                       # Frontend React application\n│  ├─ src/\n│  │  ├─ components/\n│  │  │  ├─ Navbar.tsx       # Navigation component\n│  │  │  ├─ FilePickerModal.tsx  # File selection modal\n│  │  │  └─ FilePickerModal.css  # Modal styling\n│  │  ├─ pages/\n│  │  │  ├─ ExportPage.tsx   # Main export interface with file picker\n│  │  │  ├─ FeaturesPage.tsx # Feature showcase\n│  │  │  ├─ HowToPage.tsx    # Usage documentation\n│  │  │  └─ GettingStartedPage.tsx # Welcome page\n│  │  ├─ api.ts              # API client functions\n│  │  ├─ App.tsx             # Main app with routing\n│  │  └─ main.tsx            # React entry point\n│  ├─ index.html\n│  └─ package.json\n├─ package.json               # Root workspace configuration\n└─ README.md                  # This file\n```\n\n## 🛠️ Installation\n\n### Prerequisites\n\n* Node.js 18+\n* pnpm (recommended) or npm\n\n### Setup\n\n1. **Clone the repository**\n\n   ```bash\n   git clone https://github.com/AliSafari-IT/direxpo.git\n   cd direxpo\n   ```\n\n2. **Install dependencies**\n\n   ```bash\n   pnpm install\n   ```\n\n3. **Start development servers**\n\n   ```bash\n   pnpm dev\n   ```\n\n   This will start both the web interface and API server:\n   * Web UI: <http://localhost:5198>\n   * API Server: <http://localhost:5199>\n\n## 🌐 Web Interface\n\nThe modern web interface provides an intuitive way to export your projects:\n\n### Pages\n\n* **Export** (`/`) - Main export tool with all options\n* **Features** (`/features`) - Feature showcase and capabilities\n* **How To** (`/how-to`) - Usage guide for CLI and web interface\n* **Getting Started** (`/getting-started`) - Welcome and quick start guide\n\n### Export Options\n\n| Option | Description |\n|--------|-------------|\n| **Target Path** | Directory to export (absolute or relative) |\n| **Filter** | File type filtering (All, TypeScript/React, CSS, Markdown, JSON, Custom) |\n| **Glob Pattern** | Custom file patterns (when filter is set to \"Custom\") |\n| **Exclude Directories** | Comma-separated list of directories to exclude |\n| **Max File Size** | Maximum file size in MB |\n| **Select Files** | Open interactive file picker with advanced folder selection and tri-state checkboxes |\n| **Include Folder Structure** | Add hierarchical tree at the top of the export |\n| **Tree Only** | Export only the folder structure (no file contents) |\n\n### Tree Structure Format\n\nWhen folder structure is enabled, the export includes a beautiful tree visualization:\n\n```\ndirexpo/\n├─ server/\n│  ├─ src/\n│  │  ├─ file-discoverer.ts\n│  │  ├─ server.ts\n│  │  └─ tree-builder.ts\n│  └─ package.json\n├─ web/\n│  ├─ src/\n│  │  ├─ components/\n│  │  │  └─ Navbar.tsx\n│  │  ├─ pages/\n│  │  │  └─ ExportPage.tsx\n│  │  └── App.tsx\n│  └─ package.json\n└─ package.json\n```\n\n## � Tutorial & Getting Started\n\n### Quick Start (5 minutes)\n\n#### Step 1: Start the Application\n\n```bash\n# Navigate to the project directory\ncd direxpo\n\n# Install dependencies (first time only)\npnpm install\n\n# Start both web UI and API server\npnpm dev\n```\n\nThe application will be available at:\n\n* **Web UI**: <http://localhost:5198>\n* **API Server**: <http://localhost:5199>\n\n#### Step 2: Export Your First Project\n\n1. Open <http://localhost:5198> in your browser\n2. Navigate to the **Export** page (default landing page)\n3. Enter a target path (e.g., `./src` or `C:\\Users\\YourName\\Projects\\MyApp`)\n4. Select export options:\n   * **Filter**: Choose file types (All, TypeScript/React, CSS, Markdown, JSON)\n   * **Max File Size**: Set to 50 MB (default)\n   * **Include Folder Structure**: Check to add a tree visualization\n5. Click **Export**\n6. Download the generated Markdown file or copy to clipboard\n\n#### Step 3: Customize Your Export\n\nTry these common scenarios:\n\n**Scenario A: Export only TypeScript/React files with structure**\n\n* Target Path: `./src`\n* Filter: `TypeScript/React`\n* Include Folder Structure: ✓\n* Result: Clean markdown with folder tree and only .ts/.tsx files\n\n**Scenario B: Export project documentation**\n\n* Target Path: `./docs`\n* Filter: `Markdown`\n* Exclude: `node_modules,.git`\n* Result: All markdown files in a single document\n\n**Scenario C: Get folder structure only (no file contents)**\n\n* Target Path: `./`\n* Tree Only: ✓\n* Result: Lightweight folder hierarchy visualization\n\n**Scenario D: Export specific files from different folders**\n\n* Target Path: `./src`\n* Click \"📂 Select Files...\"\n* Navigate and check specific files across multiple subfolders\n* Click \"Apply Selection\"\n* Result: Markdown export containing only the selected files\n\n### Web Interface Tutorial\n\n#### The Export Page\n\nThe main export interface has four sections:\n\n**1. Target Path Input**\n\n```\nEnter the directory you want to export.\nExamples:\n  - Relative: ./src, ../projects/myapp\n  - Absolute: /home/user/projects/app, C:\\Users\\User\\Projects\\App\n```\n\n**2. Filter Options**\n\n* **All**: Include every file type\n* **TypeScript/React**: Only .ts, .tsx, .js, .jsx files\n* **CSS**: Only .css, .scss, .less files\n* **Markdown**: Only .md files\n* **JSON**: Only .json files\n* **Custom**: Use glob patterns for advanced filtering\n\n**3. Advanced Options**\n\n* **Exclude Directories**: Comma-separated list (default: `node_modules,.git,dist`)\n* **Max File Size**: Files larger than this are skipped (in MB)\n* **Include Folder Structure**: Prepend a tree visualization\n* **Tree Only**: Export only the folder structure (no file contents)\n\n**4. Action Buttons**\n\n* **Export**: Generate the markdown file\n* **Download**: Save to your computer\n* **Copy**: Copy to clipboard\n* **Open**: Open in your default editor\n\n#### Using the File Picker (Selected Files Export)\n\nThe file picker allows you to manually select specific files across different folders:\n\n**How to use:**\n\n1. Enter a **Target Path** (required)\n2. Click the **\"📂 Select Files...\"** button\n3. A modal opens showing the directory tree\n4. **Expand folders** by clicking the ▶ arrow\n5. **Check files** you want to include (checkboxes appear next to files)\n6. Use the **search box** to filter files by name\n7. Click **\"Select All Visible\"** to select all currently visible files\n8. Click **\"Clear Selection\"** to deselect all\n9. Click **\"Apply Selection\"** to confirm your choices\n10. The main page shows: \"Selected: N files\"\n11. Click **\"Review / Edit\"** to reopen the picker and modify selection\n12. Click **\"Clear\"** to remove selection and revert to normal export mode\n13. Click **\"Export\"** to generate markdown with only selected files\n\n**Features:**\n\n* **Lazy loading**: Folders load children only when expanded (efficient for large repos)\n* **Cross-folder selection**: Select files from different nested subfolders\n* **Search**: Filter visible nodes by filename\n* **Selection counter**: Shows how many files are selected\n* **Persistent selection**: Selection is preserved when reopening the modal\n* **Auto-clear**: Selection clears automatically when target path changes\n* **Respects filters**: Excluded directories and file type filters are applied\n\n**Security:**\n\n* All paths are validated server-side\n* Directory traversal attacks are prevented\n* Only files within the target path can be selected\n* Excluded patterns are enforced\n\n#### Understanding the Output\n\nA typical export looks like:\n\n```markdown\n# Export Report\n\n**Target Path**: ./src\n**Filter**: TypeScript/React\n**Total Files**: 12\n**Total Size**: 45.2 KB\n\n---\n\n## Folder Structure\n\nsrc/\n├─ components/\n│  ├─ Button.tsx\n│  ├─ Card.tsx\n│  └─ Modal.tsx\n├─ pages/\n│  ├─ Home.tsx\n│  └─ About.tsx\n├─ utils/\n│  ├─ helpers.ts\n│  └─ constants.ts\n└─ App.tsx\n\n---\n\n## File Contents\n\n### src/components/Button.tsx\n\n\\`\\`\\`tsx\nimport React from 'react';\n\nexport const Button: React.FC<ButtonProps> = ({ label, onClick }) => {\n  return <button onClick={onClick}>{label}</button>;\n};\n\\`\\`\\`\n\n[... more files ...]\n```\n\n### Programmatic Usage (JavaScript/TypeScript)\n\n#### Using the Web API\n\n```typescript\n// api.ts - Example client code\n\nimport { runExport, downloadMarkdown, getMarkdownContent } from './api';\n\n// Example 1: Run export and get response\nasync function exportProject() {\n  try {\n    const response = await runExport({\n      targetPath: './src',\n      filter: 'tsx',\n      exclude: ['node_modules', 'dist'],\n      maxSize: 50,\n      includeTree: true,\n      treeOnly: false,\n    });\n\n    console.log('Export completed!');\n    console.log(`Output: ${response.outputPath}`);\n    console.log(`Files included: ${response.report.included}`);\n  } catch (error) {\n    console.error('Export failed:', error);\n  }\n}\n\n// Example 2: Get markdown content as string\nasync function getExportContent() {\n  try {\n    const filename = 'export_2024-01-06T152234.md';\n    const content = await getMarkdownContent(filename);\n    console.log(content);\n  } catch (error) {\n    console.error('Failed to fetch content:', error);\n  }\n}\n\n// Example 3: Download file to disk\nasync function downloadExport() {\n  try {\n    const filename = 'export_2024-01-06T152234.md';\n    const blob = await downloadMarkdown(filename);\n    \n    // Create download link\n    const url = window.URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = filename;\n    document.body.appendChild(a);\n    a.click();\n    window.URL.revokeObjectURL(url);\n  } catch (error) {\n    console.error('Download failed:', error);\n  }\n}\n\n// Example 4: Open file in default editor\nasync function openExportInEditor() {\n  try {\n    const filename = 'export_2024-01-06T152234.md';\n    await openFile(filename);\n  } catch (error) {\n    console.error('Failed to open file:', error);\n  }\n}\n```\n\n#### Using the REST API Directly\n\n```bash\n# Example 1: Basic export\ncurl -X POST http://localhost:5199/api/run \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"options\": {\n      \"targetPath\": \"./src\",\n      \"filter\": \"tsx\",\n      \"exclude\": [\"node_modules\", \"dist\"],\n      \"maxSize\": 50,\n      \"includeTree\": true\n    }\n  }'\n\n# Example 2: Tree-only export\ncurl -X POST http://localhost:5199/api/run \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"options\": {\n      \"targetPath\": \"./\",\n      \"treeOnly\": true\n    }\n  }'\n\n# Example 3: Custom glob pattern\ncurl -X POST http://localhost:5199/api/run \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"options\": {\n      \"targetPath\": \"./src\",\n      \"filter\": \"glob\",\n      \"pattern\": \"**/*.{ts,tsx,css}\",\n      \"exclude\": [\"node_modules\", \".git\", \"dist\"],\n      \"maxSize\": 100\n    }\n  }'\n\n# Example 4: Download generated file\ncurl -X GET http://localhost:5199/api/download/export_2024-01-06T152234.md \\\n  -o export.md\n\n# Example 5: Open file in editor\ncurl -X POST http://localhost:5199/api/open-file \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"filename\": \"export_2024-01-06T152234.md\"\n  }'\n```\n\n### Real-World Examples\n\n#### Example 1: Document a React Component Library\n\n```bash\n# Export all React components with structure\ncurl -X POST http://localhost:5199/api/run \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"options\": {\n      \"targetPath\": \"./src/components\",\n      \"filter\": \"tsx\",\n      \"exclude\": [\"node_modules\", \".test.tsx\"],\n      \"maxSize\": 100,\n      \"includeTree\": true\n    }\n  }'\n```\n\n**Use case**: Create documentation for your component library by exporting all components with their folder structure.\n\n#### Example 2: Backup Project Structure\n\n```bash\n# Get complete folder structure without file contents\ncurl -X POST http://localhost:5199/api/run \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"options\": {\n      \"targetPath\": \"./\",\n      \"treeOnly\": true,\n      \"exclude\": [\"node_modules\", \".git\", \"dist\", \"build\"]\n    }\n  }'\n```\n\n**Use case**: Quick snapshot of your project structure for documentation or sharing.\n\n#### Example 3: Export Configuration Files\n\n```bash\n# Export all JSON and YAML configuration files\ncurl -X POST http://localhost:5199/api/run \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"options\": {\n      \"targetPath\": \"./\",\n      \"filter\": \"glob\",\n      \"pattern\": \"**/*.{json,yaml,yml,config.js}\",\n      \"exclude\": [\"node_modules\", \"dist\"],\n      \"maxSize\": 50,\n      \"includeTree\": true\n    }\n  }'\n```\n\n**Use case**: Collect all configuration files for review or migration.\n\n#### Example 4: Export Specific Feature Module\n\n```bash\n# Export a specific feature with all its files\ncurl -X POST http://localhost:5199/api/run \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"options\": {\n      \"targetPath\": \"./src/features/auth\",\n      \"filter\": \"tsx\",\n      \"exclude\": [\"node_modules\", \".test.tsx\"],\n      \"maxSize\": 100,\n      \"includeTree\": true\n    }\n  }'\n```\n\n**Use case**: Share a specific feature module with team members or for code review.\n\n#### Example 5: Export Selected Files Only\n\n```bash\n# Export specific files from different folders\ncurl -X POST http://localhost:5199/api/run \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"options\": {\n      \"targetPath\": \"./src\",\n      \"selectedFiles\": [\n        \"components/Button.tsx\",\n        \"components/Modal.tsx\",\n        \"pages/Home.tsx\",\n        \"utils/helpers.ts\"\n      ],\n      \"maxSize\": 50,\n      \"includeTree\": true\n    }\n  }'\n```\n\n**Use case**: Export only specific files you've manually selected, ignoring all filters. Perfect for creating targeted documentation or sharing specific code snippets across different folders.\n\n#### Example 6: Export with Advanced Folder Selection\n\n```bash\n# Export selected folders and files with exclusions\ncurl -X POST http://localhost:5199/api/run \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"options\": {\n      \"targetPath\": \"./src\",\n      \"selectionPayload\": {\n        \"selectedFolders\": [\n          \"components\",\n          \"utils\",\n          \"pages\"\n        ],\n        \"selectedFiles\": [\n          \"README.md\",\n          \"package.json\"\n        ],\n        \"excludedFiles\": [\n          \"components/legacy/OldComponent.tsx\",\n          \"utils/test-helpers.ts\"\n        ]\n      },\n      \"maxSize\": 100,\n      \"includeTree\": true\n    }\n  }'\n```\n\n**Use case**: Export entire folders while excluding specific files. Perfect for sharing project structure with selective content inclusion.\n\n#### Example 7: Tree Browsing API\n\n```bash\n# Get directory structure for file picker\ncurl \"http://localhost:5199/api/tree/children?root=./src&rel=&filter=all&exclude=node_modules\"\n\n# Get subdirectory contents (lazy loading)\ncurl \"http://localhost:5199/api/tree/children?root=./src&rel=components&filter=tsx&exclude=test\"\n```\n\n**Response Format**:\n\n```json\n{\n  \"nodes\": [\n    {\n      \"type\": \"dir\",\n      \"name\": \"components\",\n      \"relPath\": \"components\",\n      \"hasChildren\": true\n    },\n    {\n      \"type\": \"file\",\n      \"name\": \"App.tsx\",\n      \"relPath\": \"App.tsx\",\n      \"size\": 2048\n    }\n  ]\n}\n```\n\n**Use case**: Build custom file pickers or implement directory browsing in external applications.\n\n## 💻 CLI Usage\n\nThe tool also supports command-line usage through the `@asafarim/md-exporter` package.\n\n### Basic Usage\n\n```bash\nnpx @asafarim/direxpo export <target-path>\n```\n\n### Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `--filter` | string | `all` | File type filter (`all`, `tsx`, `css`, `md`, `json`) |\n| `--pattern` | string | - | Custom glob pattern (when filter is `glob`) |\n| `--exclude` | string | `node_modules,.git,dist` | Directories to exclude |\n| `--max-size` | number | `5` | Maximum file size in MB |\n| `--include-tree` | boolean | `false` | Include folder structure |\n| `--tree-only` | boolean | `false` | Export only folder structure |\n| `--out-dir` | string | `./output` | Output directory |\n\n### Examples\n\n```bash\n# Export all files\nnpx @asafarim/direxpo export ./src\n\n# Export TypeScript files with folder structure\nnpx @asafarim/direxpo export ./src --filter tsx --include-tree\n\n# Export only folder structure\nnpx @asafarim/direxpo export ./src --tree-only\n\n# Custom pattern with exclusions\nnpx @asafarim/direxpo export ./src --pattern \"**/*.{ts,tsx}\" --exclude \"node_modules,dist\"\n```\n\n## 🔧 API Reference\n\nThe server provides RESTful endpoints for programmatic access.\n\n### Endpoints\n\n#### POST `/api/run`\n\nExecute an export operation.\n\n**Request Body:**\n\n```json\n{\n  \"options\": {\n    \"targetPath\": \"./src\",\n    \"filter\": \"tsx\",\n    \"pattern\": \"**/*.{ts,tsx}\",\n    \"exclude\": [\"node_modules\", \"dist\"],\n    \"maxSize\": 5,\n    \"includeTree\": true,\n    \"treeOnly\": false,\n    \"selectedFiles\": [\"src/components/Button.tsx\", \"src/pages/Home.tsx\"]\n  }\n}\n```\n\n**Note:** When `selectedFiles` is provided, only those files will be exported (filter is ignored for selection, but still applied in the file picker UI).\n\n**Response:**\n\n```json\n{\n  \"outputPath\": \"D:\\\\path\\\\to\\\\output.md\",\n  \"report\": {\n    \"included\": 42,\n    \"bytesWritten\": 15342,\n    \"treeOnly\": false\n  }\n}\n```\n\n#### GET `/api/tree/children`\n\nBrowse directory tree for file selection (lazy loading).\n\n**Query Parameters:**\n\n```\nroot: Target directory path (required)\nrel: Relative path from root (empty string for root)\nfilter: File type filter (all, tsx, css, md, json)\nexclude: Comma-separated exclusion patterns\n```\n\n**Response:**\n\n```json\n{\n  \"root\": \"D:\\\\repos\\\\npm-packages\\\\direxpo\",\n  \"rel\": \"src\",\n  \"nodes\": [\n    {\n      \"type\": \"dir\",\n      \"name\": \"components\",\n      \"relPath\": \"src/components\",\n      \"hasChildren\": true\n    },\n    {\n      \"type\": \"file\",\n      \"name\": \"App.tsx\",\n      \"relPath\": \"src/App.tsx\",\n      \"size\": 1024\n    }\n  ]\n}\n```\n\n#### POST `/api/discover`\n\nDiscover files matching export options (without exporting).\n\n**Request Body:**\n\n```json\n{\n  \"options\": {\n    \"targetPath\": \"./src\",\n    \"filter\": \"tsx\",\n    \"exclude\": [\"node_modules\"]\n  }\n}\n```\n\n**Response:**\n\n```json\n{\n  \"files\": [\n    \"src/components/Button.tsx\",\n    \"src/pages/Home.tsx\"\n  ]\n}\n```\n\n#### GET `/api/download/:filename`\n\nDownload generated markdown file.\n\n#### POST `/api/open-file`\n\nOpen file in default system application.\n\n**Request Body:**\n\n```json\n{\n  \"filename\": \"export_2024-01-06T152234.md\"\n}\n```\n\n## 🎨 Design System\n\nThe web interface uses ASafariM design tokens for consistent styling:\n\n* **Colors**: `--asm-color-primary-500`, `--asm-color-surface`, etc.\n* **Typography**: `--asm-font-family-primary`, `--asm-font-size-lg`, etc.\n* **Spacing**: `--asm-space-4`, `--asm-space-6`, etc.\n* **Effects**: `--asm-effect-shadow-md`, `--asm-radius-lg`, etc.\n\nNo hardcoded values are used - everything follows the design token system.\n\n## � Troubleshooting\n\n### Folder Selection Issues\n\n#### Modal shows \"0+ files selected\" after reopening\n\n**Problem**: Selection count resets to 0+ when reopening modal\n**Solution**: The modal now properly hydrates from `selectionPayload` and preserves state across sessions\n\n#### Child files not checked when folder is selected\n\n**Problem**: Selecting a folder doesn't show child files as checked\n**Solution**: Enable lazy-loading inheritance - children are checked immediately when loaded\n\n#### Ancestor folders not showing indeterminate state\n\n**Problem**: Parent folders remain unchecked when child folders are selected\n**Solution**: Ancestor tri-state is now computed using prefix checks, works even with unloaded children\n\n#### Selected paths not visible in modal\n\n**Problem**: Can't see where selected items are located in the tree\n**Solution**: Auto-expansion feature expands ancestor chains for all selected items\n\n#### Export page shows \"0 files\" for folder selection\n\n**Problem**: Summary shows incorrect count when folders are selected\n**Solution**: Export page now uses `selectionPayload` as single source of truth\n\n### Common Issues\n\n#### Large directories slow to load\n\n* **Cause**: Lazy-loading loads on demand, but initial root load can be slow\n* **Solution**: Use exclude patterns to filter out large directories (node_modules, dist, etc.)\n\n#### Selection count inconsistent\n\n* **Cause**: Mix of selected files and folders in counting logic\n* **Solution**: Counting now properly excludes files covered by selected folders\n\n#### Modal state not persisting\n\n* **Cause**: State reset during `loadRootNodes` execution\n* **Solution**: Selection state is now preserved during tree loading\n\n### Performance Tips\n\n1. **Use Exclude Patterns**: Filter out unnecessary directories early\n2. **Lazy Loading**: Only expand folders you need to explore\n3. **Folder Selection**: Select folders instead of individual files when possible\n4. **Clear Selection**: Use \"Clear Selection\" to reset state completely\n\n## � Development\n\n### Project Structure\n\n* **Monorepo**: Uses pnpm workspaces\n* **TypeScript**: Full type safety\n* **React 18**: Modern frontend with hooks\n* **Express**: Backend API server\n* **Vite**: Fast development and build tool\n\n### Scripts\n\n```json\n{\n  \"dev\": \"concurrently \\\"pnpm run exmd:web\\\" \\\"pnpm run exmd:server\\\"\",\n  \"exmd:web\": \"pnpm -C web dev\",\n  \"exmd:server\": \"pnpm -C server dev\",\n  \"build\": \"pnpm -C web build && pnpm -C server build\",\n  \"start\": \"concurrently \\\"pnpm run exmd:web:prod\\\" \\\"pnpm run exmd:server:prod\\\"\"\n}\n```\n\n### Adding New Features\n\n1. **Backend**: Add endpoints in `server/src/server.ts`\n2. **Frontend**: Create components in `web/src/components/`\n3. **Pages**: Add pages in `web/src/pages/`\n4. **API**: Update `web/src/api.ts` for new endpoints\n5. **Routing**: Update `web/src/App.tsx` for new pages\n\n### Code Style\n\n* Use ASafariM design tokens for all styling\n* Follow TypeScript best practices\n* Use semantic HTML elements\n* Implement proper error handling\n* Add loading states and user feedback\n\n## 🔒 Security Considerations\n\n* **File Access**: Server only accesses specified target directories\n* **Path Validation**: Prevents directory traversal attacks\n* **File Size Limits**: Configurable maximum file size protection\n* **Exclusions**: Default exclusions for sensitive directories (`.git`, `node_modules`)\n\n### General Issues\n\n**\"File not found\" error**\n\n* Check that the target path exists\n* Use absolute paths or ensure relative paths are correct\n* Verify file permissions\n\n**Empty export**\n\n* Check filter settings\n* Verify exclude patterns aren't too restrictive\n* Ensure files match the size limit\n\n**Tree structure not showing**\n\n* Ensure `includeTree` or `treeOnly` is enabled\n* Check that files were discovered successfully\n\n**Server connection issues**\n\n* Ensure API server is running on port 5199\n* Check for firewall or port conflicts\n* Verify CORS configuration\n\n### Debug Mode\n\nEnable debug logging by setting:\n\n```bash\nDEBUG=direxpo:* pnpm dev\n\n## 📝 Changelog\n\n### v1.5.1 - Advanced Folder Selection\n\n#### ✨ New Features\n\n- **Advanced Folder Selection**: Sophisticated file picker with lazy-loading and tri-state checkboxes\n- **Tri-State Checkboxes**: Folders show checked/indeterminate/unchecked states based on descendant selection\n- **Ancestor Inheritance**: Parent folders automatically show indeterminate state when children are selected\n- **Path Persistence**: Selection state preserved when reopening modal\n- **Auto-Expansion**: Selected items and ancestors automatically expanded for visibility\n- **Exclusion Support**: Uncheck individual files under selected folders to exclude them\n\n#### 🔧 Improvements\n\n- **Lazy-Loading Inheritance**: Children immediately show as checked when loaded under selected parent\n- **Prefix-Based Tri-State**: Folder states computed using path prefix checks, works with unloaded children\n- **Selection Hydration**: Modal properly restores selection from `selectionPayload` on every open\n- **Stable Counting**: Selection counts remain consistent when expanding folders\n- **Single Source of Truth**: Export page uses `selectionPayload` instead of mixed state\n\n#### 🐛 Bug Fixes\n\n- Fixed selection count resetting to 0+ when reopening modal\n- Fixed child files not showing as checked when parent folder selected\n- Fixed ancestor folders not showing indeterminate state for nested selections\n- Fixed selected paths not visible in modal tree\n- Fixed export page showing incorrect counts for folder selections\n\n#### 📚 Documentation\n\n- Added comprehensive folder selection feature documentation\n- Added API examples for advanced selection with exclusions\n- Added troubleshooting guide for common selection issues\n- Added tree browsing API documentation\n\n## 📝 License\n\nThis project is licensed under the MIT License - see the package.json for details.\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\n3. Commit your changes: `git commit -m 'Add amazing feature'`\n4. Push to the branch: `git push origin feature/amazing-feature`\n5. Open a Pull Request\n\n## 📞 Support\n\n- **Issues**: [GitHub Issues](https://github.com/AliSafari-IT/direxpo/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/AliSafari-IT/direxpo/discussions)\n- **Author**: Ali Safari\n\n---\n\nMade with ❤️ using ASafariM design tokens and modern web technologies.\n","readmeFilename":"README.md"}