{"_id":"laranode-cli","_rev":"31-69be7f51f89c60d75cb7d06995f4d8ba","name":"laranode-cli","dist-tags":{"latest":"1.1.8"},"versions":{"1.0.0":{"name":"laranode-cli","version":"1.0.0","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.0","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"b3175c83450cee06080709738d37df296c8bab6e","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.0.tgz","fileCount":169,"integrity":"sha512-1UBVQG4DYI4sVBhxF5qSJ7mUlGYFi3y+fIsopbli7J7oFeOoYucPP4d6rORlBWhf5AxcW0yarUKE2+2sK1j0HA==","signatures":[{"sig":"MEUCIQCX30VHiSAb/iHYsp9dLnmuN6WvpwT0/VFBbuk7CSDktQIgc/Z0O2KY+8sqhjYoqDJFGUNkptkMmW/jNaF2UDz4YIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":496624},"main":"bin/laranode.js","gitHead":"675d25c35f49b108f0d47815455d4a60845ad4ee","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.0_1772516503169_0.649545428896207","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"laranode-cli","version":"1.0.1","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.1","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"6ccc010af81aacf67598772420d0e0622d9d20b3","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.1.tgz","fileCount":169,"integrity":"sha512-sXqv0Mt7eik+fOQXjzVEq1408y2US2F+rgixDfyQkYli7QNulwDuSvQne5u2WNDWDPL9c5WKLl/ScUlzR4Q9mQ==","signatures":[{"sig":"MEUCICFMp2x8/tumVlubyMrwk/lxISJfSBd42OQ7uhx7WFRlAiEAhSNG6wwzGJ9qQdhj+K5fgoMpmi8ScwOfDXMxD+dF/tc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":533725},"main":"bin/laranode.js","gitHead":"617ea266bc463dcdf527b44fcd714b87ed0e33c6","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.1_1772517721626_0.26407053038188155","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"laranode-cli","version":"1.0.11","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.11","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"d4c8d41d26fac729882c2af530b0e9bec24ff044","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.11.tgz","fileCount":169,"integrity":"sha512-XJVcX4WgYCU493wjljfjBU5KcFiJVWLvq80fk86rg6us93jQKccyhcxVToSylr/lhquMo9hW/y9dtExav/C4wA==","signatures":[{"sig":"MEYCIQC7mq9sxHvshSs5Bpfkzud7Dh8MpQWCv+GhBE+eQhREZwIhANQkH9BVj3KsYXmGbgr5y8nDBL7tgkdsFnzj9jGNbXFk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":539032},"main":"bin/laranode.js","gitHead":"1038d5e8bf324eeed31ad64918e09927edcc0417","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.11_1772531995775_0.8240971590815573","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"laranode-cli","version":"1.0.12","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.12","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"3d3b5b017bb1d27bce4c2bb25564b96bfbfcbcbd","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.12.tgz","fileCount":183,"integrity":"sha512-fNFb3x4n8WjqmDggRSfEeja4PqlNHrAOba09XWA2fMC1GdJVQybB3KpbQGnrZvRRZemw8QdSdw8hGzk/SkmGSA==","signatures":[{"sig":"MEUCIQD1svRnzD1nVBgYNUrTvc3LGiPalhCn/dE1A9pq2R1mzQIgbv6dT4fDyEhI5l5PEegRA7ETtbRBUBXVOOaIpaqBHE4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":616805},"main":"bin/laranode.js","gitHead":"85d6802533abb1369ddf9d7e2585a7069e1a7f62","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.12_1772651669222_0.5748799688431065","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"laranode-cli","version":"1.0.13","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.13","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"04c31a0d36baeff6c94c201c103c04f592b657bb","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.13.tgz","fileCount":183,"integrity":"sha512-NxPYo9ONXljc9tUtWe54vigCBpjg+trm2b+PZHZ7oZYuEomrpg81GeHSwJwieUhkG6wKNvOI6sDzqO2oB0CZZQ==","signatures":[{"sig":"MEUCIQD9vogfE4KKR/61W7oN2KggLWbILf8FscJNuL6mFix+uQIgKRLjwQRUoiLXb0u5wtSI7Fmv5acOlDWfOkzUNB40AY0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":616811},"main":"bin/laranode.js","gitHead":"85d6802533abb1369ddf9d7e2585a7069e1a7f62","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.13_1772680398823_0.7967572788103188","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"laranode-cli","version":"1.0.14","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.14","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"a4db0053310c0b9ff6456041b6fdedcbcf43a1a0","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.14.tgz","fileCount":259,"integrity":"sha512-gmvFPftMXip0yGTFyRTb51oVS6oQgYh5Jwp/zgeCymOrRVBNs+kthkJj4NvUkZBUOaoScK4P8UOozrX79L9ktA==","signatures":[{"sig":"MEYCIQD3navdGcnMb0BLMfYE+YqyyXJUtlo3kl7bLv5zzl4LuAIhAJRYU7AYNWnKFuFOu4iTqTchwYS+1xr6RpMjNrjGV2CC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":778242},"main":"bin/laranode.js","gitHead":"9541777476680b21e27ac790cf74690693d861f3","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.14_1773034477139_0.34716118797374196","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"laranode-cli","version":"1.0.15","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.15","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"31a21ff43ca85c152c2f2acf7ba4b95eac4f4b5f","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.15.tgz","fileCount":260,"integrity":"sha512-Y1kNWIN672C3B+nMyszFIwdmNAIDsCIOrrtUL4SbCGeciY9O64lRNx1bRTD8Ym2o1qAXZPcNEH1HbG8WdVQ1kA==","signatures":[{"sig":"MEUCIQCanxU/jaYiiyVhNDR8tszrd2DlfqBOEI19WUoaUtnnWAIgSsczOiydooyGUkIgpsa1K/mef53BBTxEwfsf/TZSV4c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":791755},"main":"bin/laranode.js","gitHead":"93d552db6de8109c49460c889786b41771f7a4a8","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.15_1773209904779_0.6455605929583175","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"laranode-cli","version":"1.0.16","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.16","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"6f2c2b40f540a0b1a5236c714ade9c3707eb2bff","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.16.tgz","fileCount":266,"integrity":"sha512-Y2UnEQMB8Ru8rhlGh5ZM5v2ZQ+Nbd/W1FvXAwvs4rm3bSyqxl4LWvhXSoAHD1YdO67rGjQy27QOXcBR1fkjD0A==","signatures":[{"sig":"MEUCIEgDq/pWeoOWy80ijRMum7nvw7+PyvqEg1rSJOseW4wLAiEAhfJuHXvdHFKGZgGvZBdryFEuQShjHdqzcA/isEgsloM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":813326},"main":"bin/laranode.js","gitHead":"444a67830e9749d7fe5f809b6ec7e5cf33e21baf","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.16_1773217150190_0.5954684948460296","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"laranode-cli","version":"1.0.17","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.17","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"2773bc234a74e3f98e9da48eca3e5d3256cd9120","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.17.tgz","fileCount":266,"integrity":"sha512-OH7N0QUYpNkKHYPkrOPgbI0SWYQgfwX0LM5INJ22NCQxtxkRwZjhVRwlMShRHez+a2ulRO7oeT/Jo5d1mJ0zXw==","signatures":[{"sig":"MEUCIQCCqo4olLmfMvSuNVbw5O//66u6bh4oQaqX1UdcKwvL3AIgZve0uoqi0S0YMI8kBouI8Fa3/2uPIwEIjr47p6tDU4k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":813906},"main":"bin/laranode.js","gitHead":"379c54bd721c575015fdc00a2e0c1e165e80d6f9","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.17_1773420178085_0.04371893236224378","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"laranode-cli","version":"1.0.18","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.18","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"9e352c46814a6ff5b35e4dabfb1988a33f6b2ca2","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.18.tgz","fileCount":68,"integrity":"sha512-rApCd6sK5YQP6PVdy8UXsQZbJNDwl8aaVbucaU+X8QrzRMek36V/+NedWgtxBCnVrg3FIa9LE56devw8Rlh3/Q==","signatures":[{"sig":"MEUCIFssTvluEqgpVZM0XY8Nk5aRUbjOgQhpGKZJRDg7ckAsAiEAwf8lP7wNFq3yjlMNmFu6RQOjY/Jb0eMFnCLuVPEwY6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238070},"main":"bin/laranode.js","gitHead":"63b401fff68d485e6805411176d91977c00ea65e","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.18_1773425367493_0.5103045378108682","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"laranode-cli","version":"1.0.19","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.19","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"01d1b932c7715be2fd7616a0fa1283ece4cff3ac","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.19.tgz","fileCount":68,"integrity":"sha512-VEUm4nir8FbIrbv4b4S0vw3BxM24TSdXebCpemKTGbplWjJi2/9AN1nX+Ds+0OCKOTu1VH2p3AeC3brxM1V8kw==","signatures":[{"sig":"MEYCIQDGs0KrhXwgssdLMLd0+k2bA1fqMfrH0beQBLnRZhR4OAIhAMmv6GiWEnhZ7dOqQn684JmQE27BjTwsZ+2Vr/KyBs3I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238353},"main":"bin/laranode.js","gitHead":"63b401fff68d485e6805411176d91977c00ea65e","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.19_1773426478372_0.9166533746151926","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"laranode-cli","version":"1.0.20","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.20","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"988802e82c2e11048b6e1a3a0f54215bcc353ea2","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.20.tgz","fileCount":266,"integrity":"sha512-jyVbNmM+QslzdETm16LVdfIXlW40PHsWtyByL20juCUKqqVkXID/1jrQdPwkLFyYFAQQnHM9F6Il/y5+Y67fzQ==","signatures":[{"sig":"MEUCIQDX4OEjp2bD7fw1SViehWfbz7dbMrBDggMz7RPdhXMJSwIgB8vPYw4nVXRJAQ7w3BXcQBkey/OZZ1EIAPuQmSO6ohE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":814188},"main":"bin/laranode.js","gitHead":"4661644758e04bad7f2c12f0e927e52b14614125","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.20_1773426869754_0.8927529325046195","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"laranode-cli","version":"1.0.22","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.22","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"dacae00a28aebace7c49583a9c196f65cbb2ea65","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.22.tgz","fileCount":276,"integrity":"sha512-ZeE6ySYeCqwJSrt3o71niz/P4B0ZTAuPkfjKErDLsNNePZTeXGAbQ0VTBEVf9sye7ioAFBa2lq3hZ0Ta6N9jog==","signatures":[{"sig":"MEUCIFllO6UbcO18bsoygs/kdp9qvXr+vXZnZg8chuq91HxXAiEAmzAk6vVNJ+mZAQGpFxyh3RtHUjOLUjxKJWbE0VUMNLA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":853497},"main":"bin/laranode.js","gitHead":"454e6156c9593b91ef15f98ff68ac6efa6158873","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.22_1773963101948_0.7167899538416405","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"laranode-cli","version":"1.0.23","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.23","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"67be53b9b8ab9f606067d804d0bebae7d97667a2","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.23.tgz","fileCount":277,"integrity":"sha512-GssFqZ54Zax4A1LNsP+9GFlJxvw3O4n+JDYPQ1bUR9zD6YG1wUW6LDgH9cx5849b7Y7TP8fiUkcOuDGGntQCxA==","signatures":[{"sig":"MEQCIC3BtzKGJfV7cft7BYzABjvLyDUEjN0DxPLxdEBQz2F7AiBZ38GoxwcvWUpKQAvo73xTSn0+evQFWeuZESBFflNbIw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":862728},"main":"bin/laranode.js","gitHead":"9bd0628f9d51f79ed4602cc82cb679460e167c61","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.23_1774381623349_0.2170759103186568","host":"s3://npm-registry-packages-npm-production"}},"1.0.24":{"name":"laranode-cli","version":"1.0.24","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.24","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"5fb6e8abc7123986ab26c0d4c6c7ed507748e3e9","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.24.tgz","fileCount":277,"integrity":"sha512-R0RQN3aWl2YpFFYnvNAR2wb3zGZC5HViHU82eI0Q76kCKvbZJ19bnnM+QHdpsmyuv/totFraiseLOr0IpVwiDw==","signatures":[{"sig":"MEUCIQDTmzbc8kGpfwXt6pgySffzUGZjhMB6nwp7OkA7xq0tWwIgYBw3/R50s7sXg7FpFdjl1M+CERd6mL8EpZh1IQB0pbE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":863592},"main":"bin/laranode.js","gitHead":"9bd0628f9d51f79ed4602cc82cb679460e167c61","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.24_1774758045755_0.412851737059174","host":"s3://npm-registry-packages-npm-production"}},"1.0.25":{"name":"laranode-cli","version":"1.0.25","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.25","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"50a78c9332738030f5818e4513c49241ffcd1cac","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.25.tgz","fileCount":277,"integrity":"sha512-CQ89RBcNgowVmk7dD3FFUwi8fvrjsEu8QFZEjgy3O7keo8fZHrw7k5Nw4OCphe0v7v1tpnyrs5UxyQCrQ6blLg==","signatures":[{"sig":"MEYCIQDbpLlJMPiSLpRnrcSYPMUiYl8zG0jy2vzc9kHm1frWCwIhANYjtdFJAHRdSgSX+piWp+OennGLErfFamubGsFdSe8r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":868362},"main":"bin/laranode.js","gitHead":"32870e1bd539ea953dfaf7200d192d37bfb2262f","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.25_1774839353410_0.3065517527053274","host":"s3://npm-registry-packages-npm-production"}},"1.0.26":{"name":"laranode-cli","version":"1.0.26","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.0.26","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"0698ef95b3fb93fb1eac83b0c26d10210a54cf31","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.0.26.tgz","fileCount":277,"integrity":"sha512-F6Wl3zgxdjcLLHctrXt3ILWS0V+UV5cAabWhv0AeEDfM7/eQyt8BwKlVU4x8v9KFMW/C6c9maknStL7UqFryFQ==","signatures":[{"sig":"MEYCIQCqSvC+StHv9Yz/ayQXfSE+oBp2IFVwyNaYH99xpkscowIhAO92TFV2kbnkdiZRQXTh8VG4nyvx8yYl/9MfaS98ZKuZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":875913},"main":"bin/laranode.js","gitHead":"a998a2cc4bb0e75c29fe9754a0dd4b7fa5c7100e","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.0.26_1775113237588_0.6038592596823062","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"laranode-cli","version":"1.1.0","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.1.0","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"b04a91412c12e82f4bc500b69401aaef9ae204fc","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.1.0.tgz","fileCount":277,"integrity":"sha512-kNJZTLoW45D0dsSnaiVZ9UnmDJhrWhZsLw1Lr7J2ENuUD0DH6p1bdJL+4aojZCKPv5qodkZFFPluwcyogX8oUQ==","signatures":[{"sig":"MEYCIQDy29BeZ4domDe5jQBQc2Zxa1e6B8ub+4XJ16JeLhNkMgIhAKVR71Gv/HA1ExhY0iRxCzuBgmV+4Hu7dcrjvodf1/4E","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":879158},"main":"bin/laranode.js","gitHead":"bb74ff91b84493eff6f3f49cf4f9e8c6337c713f","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.1.0_1775121774096_0.07771853859131972","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"laranode-cli","version":"1.1.1","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.1.1","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"fe35811fa390b8d77af817ec510d8ecbcd526f7f","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.1.1.tgz","fileCount":277,"integrity":"sha512-sSSZZsmrL5yLFZNY/SycsfQKA9/IyeR1OtPQ9XgKxvg2EveGoaRcQLVqskMfFsFJfDAiRuphDFQexaS8QL5aiw==","signatures":[{"sig":"MEUCIQCjXyhOysrDRk3awEv/VmbSZ7gAK2bThJoEuZd4eJN/owIgROYfWXmWQSpkBmdq5NKUDIxf9RXVMrz5LUnAyEYGoKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":888423},"main":"bin/laranode.js","gitHead":"bb74ff91b84493eff6f3f49cf4f9e8c6337c713f","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"10.9.4","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.1.1_1775132446568_0.26810286517214243","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"laranode-cli","version":"1.1.2","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.1.2","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"6298726928be924fd38b1327489f128843438bdf","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.1.2.tgz","fileCount":277,"integrity":"sha512-UUKVPTR3j/lztvtaMrqQZgyYGXrgMbVgAxLUF9eQxyY2ExKOuLUA/UwMbqIrPdEQOoPkTFYcAn+5j8MHhtrpsQ==","signatures":[{"sig":"MEYCIQCJ//ZX+iBml4arakZ1TSmBC22Q59Cfre+wqxcPrs5eMwIhAJ9YPzGA+gNTOPNQ0yv4oKjWNZSTXsBQVQ6/ydifqgia","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":895794},"main":"bin/laranode.js","gitHead":"088455e0cebf02d0ddd6d7c976ec7329522a2d21","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"11.12.1","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.1.2_1775535505780_0.46741995193585284","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"laranode-cli","version":"1.1.3","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.1.3","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"8f0bad1250aae42c4d521842355c184fd1ef4418","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.1.3.tgz","fileCount":277,"integrity":"sha512-sX3tZjkE/HQjsenJ6PX6pMOH1wqu0+TcG8MncSvpQAnxe730xPXPjfNGzFJsfDF9kcaYCMrSA3fxnefwgJxQ8g==","signatures":[{"sig":"MEYCIQDhqp7AKyleca9OC5cakp7wI0HUSGwt+srfeyyCYD9/jAIhAOMUZBpls1a401Vq9GRpy8uAZggoY2wtWy8JqVmHy32F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":896380},"main":"bin/laranode.js","gitHead":"93e8b6601a25e3a2a49f6fed3c7717ee62f0ca65","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"11.12.1","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.1.3_1775989005640_0.10131860458059139","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"laranode-cli","version":"1.1.4","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.1.4","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://github.com/Sabbir1993/laranode-cli/tree/master","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"8cc52b961a8c15c74213c4c8c6db124a5bc8a1d5","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.1.4.tgz","fileCount":277,"integrity":"sha512-MuJyb9eeDgZ718xksfWCm7xu7juqc0k2G82KJShm4Upi7+Rj11jOR45GhLtWPT101+vC5oZy+a2VJHoP1DUOUQ==","signatures":[{"sig":"MEUCIQDiJJvo/u9WTXm/S7Yt6t0YaDtH+dq2QMbo2/TAZhWIJgIgHQLcs7uuXXigoHikDcJynrgOIreimK7mCGR5hbnDvxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":897412},"main":"bin/laranode.js","gitHead":"fb7c2ee3972316be9c65cba191344383c520b9ca","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"11.12.1","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.1.4_1776661948935_0.30960425029996586","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"laranode-cli","version":"1.1.5","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.1.5","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://laranode-doc.up.railway.app","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"69437286d724142ddb9fb85a1260852b64966a15","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.1.5.tgz","fileCount":277,"integrity":"sha512-W6cdvwg+WeYCQsfrDFFK/7TbfxhEAitPOGrlRHBjJj1gXiDzycWaUYt0k4q3/diFMyUf0D1IwZoApTYD+8uskw==","signatures":[{"sig":"MEYCIQDc5jvsaQF+hKktq/uQln7ZrgPKQM9dMKpMwsrt6EcnpgIhAJmg+K2hSPEAryJeYj12aT5juu7TvDW7w8o5q7yUbwk/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":927292},"main":"bin/laranode.js","gitHead":"96b6a6f841a3473b2e8d786f84d65cd838594ebc","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"11.12.1","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.1.5_1777021008240_0.04895703193734091","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"laranode-cli","version":"1.1.6","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.1.6","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://laranode-doc.up.railway.app","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"d89451e325390cedbb9b4a1f16c024d70aec0daf","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.1.6.tgz","fileCount":277,"integrity":"sha512-D6DTcPuIYuuwLJJ+cE18TBGPIy+YPpk23jkLAWQGOqIxgEi9ErkZ7N1UXh+Ca9cP7BohBEsQqqZDMaGnwYLtlw==","signatures":[{"sig":"MEUCIA6warE3bARsP/JedyU3w57pN3qH2Hy+yqzkCoYWS29FAiEAtjtK7PcH/I/ztJ0shakmtRuLTxzvb39AphXcjHBdGDM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":941159},"main":"bin/laranode.js","gitHead":"86ae3cd8daabbc4c409182a3633bf67d3f0b9830","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"11.12.1","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.1.6_1784462833650_0.8862494308791151","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"laranode-cli","version":"1.1.7","keywords":["laranode","cli","framework","nodejs","laravel"],"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","_id":"laranode-cli@1.1.7","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"homepage":"https://laranode-doc.up.railway.app","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"bin":{"laranode":"bin/laranode.js"},"dist":{"shasum":"aa9599b40ca2706b05ecb92ce8c698eac30ae825","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.1.7.tgz","fileCount":277,"integrity":"sha512-Xqj8+VcNDGgJZ3gzOBG067rXF80m4X5BD1kgqXt3nlTkldDJzKNSsku0LEMxsgyWerrvIv43BceNdNzp2S1kiQ==","signatures":[{"sig":"MEYCIQC4oTuQQrotgLdIPeU6Te9NQZsg6wbw8JP3VcIslyvusAIhAK6FzWHdX9sbyCg3Oq+ml12W7DUMupQ0Mh3CVaLm8E4g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":941617},"main":"bin/laranode.js","gitHead":"407a6ecf28e6d485b285cac0f6419a257988dd8e","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"repository":{"url":"git+https://github.com/Sabbir1993/laranode-cli.git#master","type":"git"},"_npmVersion":"11.12.1","description":"The LaraNode Framework CLI Installer","directories":{},"_nodeVersion":"22.22.0","dependencies":{"commander":"^14.0.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/laranode-cli_1.1.7_1786962822907_0.5104145009437249","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"laranode-cli","version":"1.1.8","description":"The LaraNode Framework CLI Installer","author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"main":"bin/laranode.js","bin":{"laranode":"bin/laranode.js"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":["laranode","cli","framework","nodejs","laravel"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/Sabbir1993/laranode-cli.git#master"},"homepage":"https://laranode-doc.up.railway.app","dependencies":{"commander":"^14.0.3"},"gitHead":"1ab7d30ce7daf34be5c2c530fde010372603e21a","_id":"laranode-cli@1.1.8","bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"_nodeVersion":"22.22.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-dlqQ9IXBHCJdr7TQ9mkgtX4cRUCLXMnPx+XicWjqUoWuo3HqkJNVFeEZB1y9kz8SpWhXRClVGmtxJrWEqVxD0g==","shasum":"32707ff33743b3e1a585a339ea0401509c91d543","tarball":"https://registry.npmjs.org/laranode-cli/-/laranode-cli-1.1.8.tgz","fileCount":277,"unpackedSize":943643,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCgUrGHBoWVzkBlQKUDmptiHVfK3ito74Lg8+TEu9Y2bAIhAO44f/oxnd1pmYA7fEkBEyfA5pKOoyGvp+dQQhJ7LQfh"}]},"_npmUser":{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"},"directories":{},"maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/laranode-cli_1.1.8_1787031823551_0.422344457521177"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-03T05:41:43.167Z","modified":"2026-08-18T05:43:43.936Z","1.0.5":"2025-06-02T09:01:51.687Z","1.0.6":"2025-06-02T09:04:13.318Z","1.0.7":"2025-06-02T09:05:36.314Z","1.0.8":"2025-06-02T12:16:00.103Z","1.0.0":"2026-03-03T05:41:43.376Z","1.0.1":"2026-03-03T06:02:01.794Z","1.0.11":"2026-03-03T09:59:55.909Z","1.0.12":"2026-03-04T19:14:29.395Z","1.0.13":"2026-03-05T03:13:19.050Z","1.0.14":"2026-03-09T05:34:37.375Z","1.0.15":"2026-03-11T06:18:24.984Z","1.0.16":"2026-03-11T08:19:10.375Z","1.0.17":"2026-03-13T16:42:58.328Z","1.0.18":"2026-03-13T18:09:27.651Z","1.0.19":"2026-03-13T18:27:58.518Z","1.0.20":"2026-03-13T18:34:29.940Z","1.0.22":"2026-03-19T23:31:42.144Z","1.0.23":"2026-03-24T19:47:03.506Z","1.0.24":"2026-03-29T04:20:45.984Z","1.0.25":"2026-03-30T02:55:53.625Z","1.0.26":"2026-04-02T07:00:37.819Z","1.1.0":"2026-04-02T09:22:54.261Z","1.1.1":"2026-04-02T12:20:46.790Z","1.1.2":"2026-04-07T04:18:25.983Z","1.1.3":"2026-04-12T10:16:45.838Z","1.1.4":"2026-04-20T05:12:29.135Z","1.1.5":"2026-04-24T08:56:48.392Z","1.1.6":"2026-07-19T12:07:13.826Z","1.1.7":"2026-08-17T10:33:43.068Z","1.1.8":"2026-08-18T05:43:43.792Z"},"bugs":{"url":"https://github.com/Sabbir1993/laranode-cli/issues"},"author":{"name":"Sabbir Hosain Chowdury","email":"sabbirchowdury000@gmail.com"},"license":"MIT","homepage":"https://laranode-doc.up.railway.app","keywords":["laranode","cli","framework","nodejs","laravel"],"repository":{"type":"git","url":"git+https://github.com/Sabbir1993/laranode-cli.git#master"},"description":"The LaraNode Framework CLI Installer","maintainers":[{"name":"sabbir1055","email":"sabbirchowdury000@gmail.com"}],"readme":"<h1 align=\"center\">LaraNode</h1>\r\n<p align=\"center\">\r\n  <strong>A Laravel-Inspired Node.js Framework for Web Artisans</strong>\r\n</p>\r\n\r\n<p align=\"center\">\r\n  <a href=\"https://www.npmjs.com/package/laranode-cli\"><img src=\"https://img.shields.io/npm/v/laranode-cli.svg?style=for-the-badge&color=blue\" alt=\"NPM Version\" /></a>\r\n  <a href=\"https://github.com/Sabbir1993/laranode/blob/main/LICENSE\"><img src=\"https://img.shields.io/npm/l/laranode.svg?style=for-the-badge&color=blue\" alt=\"License\" /></a>\r\n  <a href=\"https://nodejs.org\"><img src=\"https://img.shields.io/badge/node.js-%3E%3D_18.0-green.svg?style=for-the-badge\" alt=\"Node.js Version\" /></a>\r\n</p>\r\n\r\n<p align=\"center\">\r\n  <a href=\"#about-laranode\">About</a> •\r\n  <a href=\"#features\">Features</a> •\r\n  <a href=\"#installation\">Installation</a> •\r\n  <a href=\"#quick-start\">Quick Start</a> •\r\n  <a href=\"#documentation\">Documentation</a> •\r\n  <a href=\"#contributing\">Contributing</a>\r\n</p>\r\n\r\n---\r\n\r\n## 💡 About LaraNode\r\n\r\nLaraNode is a powerful, expressive, and elegant Node.js framework designed to mirror the architecture and developer experience of Laravel. Built on top of Express.js, it provides a robust foundation for building modern web applications with a familiar, elegant API.\r\n\r\nIf you know Laravel, you already know LaraNode.\r\n\r\n## 🚀 Installation\r\n\r\n### Using LaraNode CLI (Recommended)\r\n\r\n```bash\r\n# Install the CLI globally\r\nnpm install -g laranode-cli\r\n\r\n# Create a new project\r\nlaranode new my-app\r\n\r\n# Start the development server\r\ncd my-app\r\nnode artisan serve\r\n```\r\n\r\n### Manual Installation\r\n\r\n```bash\r\n# Clone the repository\r\ngit clone https://github.com/Sabbir1993/laranode.git my-app\r\ncd my-app\r\n\r\n# Install dependencies\r\nnpm install\r\n\r\n# Configure environment\r\ncp .env.example .env\r\n# Edit .env and set your APP_KEY\r\n\r\n# Start the server\r\nnode server.js\r\n```\r\n\r\n## ✨ Features\r\n\r\n| Feature | Description |\r\n|---|---|\r\n| 🏛️ **Laravel Architecture** | Familiar directory structure — `app/`, `routes/`, `config/`, `resources/`, `database/` |\r\n| 🧩 **Service Container** | Powerful IoC container with dependency injection and service providers |\r\n| 🛣️ **Expressive Routing** | Route groups, middleware, prefixes, named routes, and **resource controllers** |\r\n| 🗄️ **Loquent ORM** | Active Record ORM with relationships, eager loading, soft deletes, and query builder |\r\n| ✨ **Edge Templates** | Blade-like templating engine with layouts, partials, and directives |\r\n| 🛡️ **Authentication** | Session-based auth & Sanctum-style API tokens out of the box |\r\n| 🔒 **Security Middleware** | CSRF protection, CORS, rate limiting, security headers, and input sanitization |\r\n| ✅ **Validation** | Form request validation with 20+ built-in rules and custom rule support |\r\n| 🔐 **Encryption & Hashing** | AES-256 encryption and bcrypt hashing via Facades |\r\n| 📟 **Artisan CLI** | Command-line interface for migrations, scaffolding, and dev server |\r\n| 💻 **Tinker REPL** | Interactive Node.js shell with top-level await and global context injection |\r\n| 🪟 **Inertia.js Server** | Native server side protocol rendering for Vue/React SPAs without an API |\r\n| 📊 **Log Viewer** | Built-in web-based log viewer with severity filtering and pagination |\r\n| 🌐 **Translations** | Multi-language support with language files and the `Lang` facade |\r\n| 🗃️ **Multi-Database** | SQLite and MySQL support with connection pooling |\r\n| 📄 **Pagination** | Built-in query pagination with page metadata and HTML links |\r\n| 📮 **Queues** | Database-driven job queue with dispatch, delay, retries, and failed jobs |\r\n| 🎧 **Events & Listeners** | App-wide event dispatching with listener DI resolution |\r\n| 🚀 **Cache** | Unified cache API with file and memory drivers (`Cache.remember`) |\r\n| 📁 **Storage** | Unified filesystem API (`Storage.put`) with visibility, mime-type, and symbolic links |\r\n| 📩 **Mail** | Fluent email sending API via Mailables with automatic queuing support |\r\n| 🔔 **Notifications** | Multi-channel notifications routing (Mail, Database, Broadcast) with `Notifiable` trait |\r\n| 📡 **Broadcasting** | Real-time event broadcasting via Socket.io with `ShouldBroadcast` trait |\r\n| 🧪 **Testing** | Robust testing framework with `artisan test` and HTTP assertions |\r\n| ⚡ **Performance** | Route and Config caching for production optimization (`node artisan route:cache`) |\r\n\r\n---\r\n\r\n## ⚡ Quick Start\r\n\r\n### Directory Structure\r\n\r\n```\r\nmy-app/\r\n├── app/\r\n│   ├── Console/          # Artisan commands\r\n│   ├── Exceptions/       # Exception handlers\r\n│   ├── Http/\r\n│   │   ├── Controllers/  # Route controllers\r\n│   │   ├── Kernel.js     # HTTP middleware stack\r\n│   │   ├── Middleware/    # Custom middleware\r\n│   │   └── Requests/     # Form request validation\r\n│   ├── Models/           # Loquent models\r\n│   └── Rules/            # Custom validation rules\r\n├── bootstrap/\r\n│   └── app.js            # Application bootstrapper\r\n├── config/\r\n│   ├── app.js            # App name, env, providers\r\n│   ├── auth.js           # Guards, providers, passwords\r\n│   ├── database.js       # Database connections\r\n│   └── logging.js        # Log channels & log viewer\r\n├── database/\r\n│   └── migrations/       # Database migrations\r\n├── public/               # Static assets\r\n├── resources/\r\n│   └── views/            # Edge templates\r\n├── routes/\r\n│   ├── web.js            # Web routes (session, CSRF)\r\n│   └── api.js            # API routes (stateless)\r\n├── storage/\r\n│   ├── app/              # Application files\r\n│   ├── framework/views/  # Compiled views\r\n│   └── logs/             # Log files\r\n├── vendor/               # Framework source\r\n├── .env                  # Environment variables\r\n├── artisan.js            # CLI entry point\r\n└── server.js             # HTTP server entry point\r\n```\r\n\r\n---\r\n\r\n## 📚 Documentation\r\n\r\n*(Click on a section below to expand the detailed API documentation)*\r\n\r\n<details>\r\n<summary><strong>🛣️ Routing</strong></summary>\r\n<br>\r\n\r\nDefine routes in `routes/web.js` (with session & CSRF) or `routes/api.js` (stateless):\r\n\r\n```javascript\r\nconst Route = use('laranode/Support/Facades/Route');\r\n\r\n// Basic routes\r\nRoute.get('/', (req, res) => res.view('welcome'));\r\nRoute.post('/submit', 'FormController@store');\r\n\r\n// Named routes\r\nRoute.get('/login', 'AuthController@showLoginForm').name('login');\r\n\r\n// Route groups with middleware and prefix\r\nRoute.group({ middleware: ['auth'], prefix: '/admin' }, () => {\r\n    Route.get('/dashboard', 'AdminController@index');\r\n    Route.get('/users', 'AdminController@users');\r\n});\r\n\r\n// Route parameters\r\nRoute.get('/users/{id}', 'UserController@show');\r\nRoute.put('/users/{user}', 'UserController@update');\r\nRoute.delete('/users/{user}', 'UserController@destroy');\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🎛️ Controllers</strong></summary>\r\n<br>\r\n\r\nControllers reside in `app/Http/Controllers/`:\r\n\r\n```javascript\r\nconst Controller = use('laranode/Routing/Controller/Controller');\r\n\r\nclass HomeController extends Controller {\r\n\r\n    async index(req, res) {\r\n        const users = await User.all();\r\n        return res.view('home', { users });\r\n    }\r\n\r\n    async store(req, res) {\r\n        const data = req.only(['name', 'email']);\r\n        const user = await User.create(data);\r\n        return res.redirect('/users');\r\n    }\r\n\r\n    async show(req, res) {\r\n        const user = await User.find(req.params.id);\r\n        return res.json({ user });\r\n    }\r\n}\r\n\r\nmodule.exports = HomeController;\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🧩 Service Container & Dependency Injection</strong></summary>\r\n<br>\r\n\r\nLaraNode features a powerful Service Container (IoC container) that manages class dependencies and performs dependency injection.\r\n\r\n#### Dependency Injection (Constructor Injection)\r\nWhen resolving a class from the container (e.g., via a Controller or `this.app.make()`), the framework automatically injects the **Application instance** (the container) into the constructor.\r\n\r\n```javascript\r\n// app/Http/Controllers/UserController.js\r\nclass UserController extends Controller {\r\n    constructor(app) {\r\n        super();\r\n        this.userRepo = app.make('App/Repositories/UserRepository');\r\n    }\r\n\r\n    async index(req, res) {\r\n        const users = await this.userRepo.all();\r\n        return res.json(users);\r\n    }\r\n}\r\n```\r\n\r\n#### Binding in AppServiceProvider\r\nYou should register your service bindings in `app/Providers/AppServiceProvider.js`:\r\n\r\n```javascript\r\n// app/Providers/AppServiceProvider.js\r\nclass AppServiceProvider extends ServiceProvider {\r\n    register() {\r\n        // Simple binding\r\n        this.app.bind('App/Repositories/UserRepository', require('../Repositories/UserRepository'));\r\n\r\n        // Singleton binding\r\n        this.app.singleton('payment.gateway', (app) => {\r\n            return new PaymentGateway(app.make('config').get('services.payment_key'));\r\n        });\r\n    }\r\n}\r\n```\r\n\r\n#### Sample Repository Pattern Example\r\n\r\n**1. Create the Repository:**\r\n```javascript\r\n// app/Repositories/UserRepository.js\r\nclass UserRepository {\r\n    constructor(app) {\r\n        this.db = app.make('db'); // Resolve DB facade from container\r\n    }\r\n\r\n    async all() {\r\n        return this.db.table('users').get();\r\n    }\r\n}\r\nmodule.exports = UserRepository;\r\n```\r\n\r\n**2. Bind and Use:**\r\nOnce bound in your Service Provider, the repository is easily accessible throughout your application via DI or the `this.app.make()` helper.\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🗄️ Loquent ORM</strong></summary>\r\n<br>\r\n\r\nLoquent is LaraNode's Active Record ORM, inspired by Laravel's Eloquent:\r\n\r\n```javascript\r\nconst Model = use('laranode/Database/Loquent/Model');\r\n\r\nclass User extends Model {\r\n    static table = 'users';\r\n    static fillable = ['name', 'email', 'password'];\r\n    static hidden = ['password', 'remember_token'];\r\n    static casts = { is_admin: 'boolean' };\r\n\r\n    todos() {\r\n        const Todo = use('App/Models/Todo');\r\n        return this.hasMany(Todo, 'user_id');\r\n    }\r\n}\r\n\r\nmodule.exports = User;\r\n```\r\n\r\n#### CRUD Operations\r\n\r\n```javascript\r\n// Create\r\nconst user = await User.create({ name: 'John', email: 'john@example.com' });\r\n\r\n// Read\r\nconst all     = await User.all();\r\nconst first   = await User.first();\r\nconst found   = await User.find(1);\r\nconst many    = await User.findMany([1, 2, 3]);\r\nconst fail    = await User.findOrFail(1);     // throws ModelNotFoundException\r\nconst fail2   = await User.firstOrFail();     // throws ModelNotFoundException\r\n\r\n// Find or Create\r\nconst user = await User.firstOrCreate({ email: 'john@example.com' }, { name: 'John' });\r\nconst user = await User.firstOrNew({ email: 'john@example.com' }, { name: 'John' });\r\nconst user = await User.updateOrCreate({ email: 'john@example.com' }, { name: 'Jane' });\r\n\r\n// Update\r\nawait User.where('id', 1).update({ name: 'Jane' });\r\n\r\n// Instance update & save\r\nconst user = await User.find(1);\r\nuser.name = 'Jane';\r\nawait user.save();\r\n\r\n// Delete\r\nawait User.where('id', 1).delete();\r\nawait User.destroy([1, 2, 3]);         // Delete by IDs\r\n```\r\n\r\n#### Query Builder — Where Clauses\r\n\r\n```javascript\r\n// Basic where\r\nUser.where('active', true)\r\nUser.where('age', '>', 18)\r\nUser.orWhere('role', 'admin')\r\n\r\n// Null checks\r\nUser.whereNull('deleted_at')\r\nUser.whereNotNull('email_verified_at')\r\n\r\n// In / Not In\r\nUser.whereIn('status', ['active', 'pending'])\r\nUser.whereNotIn('role', ['banned'])\r\n\r\n// Between\r\nUser.whereBetween('age', [18, 65])\r\nUser.whereNotBetween('price', [100, 500])\r\n\r\n// Date where clauses\r\nUser.whereDate('created_at', '2026-01-01')\r\nUser.whereMonth('created_at', 3)\r\nUser.whereYear('created_at', 2026)\r\nUser.whereDay('created_at', 15)\r\n\r\n// Column comparison\r\nUser.whereColumn('updated_at', '>', 'created_at')\r\n\r\n// Raw where\r\nUser.whereRaw('age > ? AND status = ?', [18, 'active'])\r\n\r\n// Exists\r\nUser.whereExists(query => query.select('*').from('orders').whereRaw('orders.user_id = users.id'))\r\n```\r\n\r\n#### Query Builder — Selecting & Ordering\r\n\r\n```javascript\r\n// Select specific columns\r\nUser.select('id', 'name', 'email').get()\r\nUser.selectRaw('COUNT(*) as total, status').groupBy('status').get()\r\nUser.distinct().select('role').get()\r\n\r\n// Ordering\r\nUser.orderBy('created_at', 'desc').get()\r\nUser.orderByRaw('FIELD(status, \"active\", \"pending\", \"inactive\")').get()\r\nUser.latest().get()                    // ORDER BY created_at DESC\r\nUser.oldest().get()                    // ORDER BY created_at ASC\r\nUser.inRandomOrder().get()\r\n\r\n// Limit & Offset\r\nUser.limit(10).offset(20).get()\r\n\r\n// Conditional (when)\r\nUser.when(req.query.role, (query, role) => query.where('role', role)).get()\r\n```\r\n\r\n#### Query Builder — Joins\r\n\r\n```javascript\r\nUser.join('orders', 'users.id', '=', 'orders.user_id').get()\r\nUser.leftJoin('profiles', 'users.id', '=', 'profiles.user_id').get()\r\nUser.rightJoin('orders', 'users.id', '=', 'orders.user_id').get()\r\nUser.crossJoin('roles').get()\r\n\r\n// Closure-based joins (multiple conditions)\r\nUser.join('posts', (join) => {\r\n    join.on('users.id', '=', 'posts.user_id')\r\n        .on('users.tenant_id', '=', 'posts.tenant_id');\r\n}).get()\r\n\r\n// Subquery Joins (joinSub / leftJoinSub / rightJoinSub)\r\nconst latestPosts = DB.table('posts')\r\n    .select('user_id')\r\n    .selectRaw('MAX(created_at) as last_post')\r\n    .groupBy('user_id');\r\n\r\nDB.table('users')\r\n    .joinSub(latestPosts, 'latest_posts', 'users.id', '=', 'latest_posts.user_id')\r\n    .select('users.*', 'latest_posts.last_post')\r\n    .get()\r\n\r\n// Subquery join with multiple conditions\r\nDB.table('users')\r\n    .joinSub(latestPosts, 'lp', (join) => {\r\n        join.on('users.id', '=', 'lp.user_id')\r\n            .on('users.tenant_id', '=', 'lp.tenant_id');\r\n    })\r\n    .get()\r\n\r\n// leftJoinSub\r\nDB.table('users')\r\n    .leftJoinSub(orderTotals, 'summary', 'users.id', '=', 'summary.user_id')\r\n    .get()\r\n```\r\n\r\n#### Query Builder — Grouping & Aggregates\r\n\r\n```javascript\r\n// Grouping\r\nUser.groupBy('role').selectRaw('role, COUNT(*) as total').get()\r\nUser.groupBy('role').having('total', '>', 5).get()\r\n\r\n// Aggregates\r\nconst count = await User.count();\r\nconst max   = await User.max('age');\r\nconst min   = await User.min('age');\r\nconst avg   = await User.avg('salary');\r\nconst sum   = await User.sum('balance');\r\nconst has   = await User.where('role', 'admin').exists();\r\nconst none  = await User.where('role', 'banned').doesntExist();\r\n```\r\n\r\n#### Query Builder — Insert Variants\r\n\r\n```javascript\r\nconst DB = use('laranode/Support/Facades/DB');\r\n\r\n// Basic insert\r\nawait DB.table('users').insert({ name: 'John', email: 'john@example.com' });\r\n\r\n// Insert and get ID\r\nconst id = await DB.table('users').insertGetId({ name: 'Jane' });\r\n\r\n// Insert or ignore (skip duplicates)\r\nawait DB.table('users').insertOrIgnore({ email: 'existing@example.com' });\r\n\r\n// Upsert (insert or update on duplicate key)\r\nawait DB.table('users').upsert(\r\n    [{ email: 'john@example.com', name: 'John Updated' }],\r\n    ['email'],  // unique columns\r\n    ['name']    // columns to update on conflict\r\n);\r\n```\r\n\r\n#### Query Builder — Update & Delete\r\n\r\n```javascript\r\n// Increment / Decrement\r\nawait User.where('id', 1).increment('login_count');\r\nawait User.where('id', 1).increment('balance', 100, { last_deposit: new Date() });\r\nawait User.where('id', 1).decrement('balance', 50);\r\n\r\n// Truncate table\r\nawait DB.table('logs').truncate();\r\n\r\n#### Database Transactions\r\n\r\nLaraNode's DB facade provides a simple way to run a set of operations within a database transaction. If an exception is thrown within the closure, the transaction is automatically rolled back.\r\n\r\n```javascript\r\nawait DB.transaction(async () => {\r\n    await DB.table('users').update({ votes: 1 });\r\n    await DB.table('posts').delete();\r\n\r\n    // Loquent models automatically use the active transaction\r\n    await User.create({ name: 'Transaction User' });\r\n});\r\n```\r\n```\r\n\r\n#### Chunking & Pagination\r\n\r\n```javascript\r\n// Process large datasets in chunks\r\nawait User.where('active', true).chunk(100, async (users, page) => {\r\n    for (const user of users) {\r\n        // process each user\r\n    }\r\n    // return false to stop chunking\r\n});\r\n\r\n// Pluck values\r\nconst emails = await User.pluck('email');\r\nconst emailMap = await User.pluck('email', 'id');    // { 1: 'a@b.com', 2: 'c@d.com' }\r\n\r\n// Get a single column value\r\nconst name = await User.where('id', 1).value('name');\r\n```\r\n\r\n#### Relationships\r\n\r\n```javascript\r\nclass User extends Model {\r\n    // One-to-One\r\n    phone()   { return this.hasOne(Phone, 'user_id'); }\r\n\r\n    // One-to-Many\r\n    posts()   { return this.hasMany(Post, 'user_id'); }\r\n\r\n    // Belongs To (inverse)\r\n    team()    { return this.belongsTo(Team, 'team_id'); }\r\n\r\n    // Many-to-Many (with pivot)\r\n    roles()   {\r\n        return this.belongsToMany(Role, 'role_user', 'user_id', 'role_id')\r\n                   .withPivot('assigned_at')\r\n                   .withTimestamps();\r\n    }\r\n\r\n    // Has One/Many Through\r\n    countryPhone() { return this.hasOneThrough(Phone, Country, 'country_id', 'user_id'); }\r\n    countryPosts() { return this.hasManyThrough(Post, Country, 'country_id', 'user_id'); }\r\n\r\n    // Polymorphic\r\n    image()    { return this.morphOne(Image, 'imageable'); }\r\n    comments() { return this.morphMany(Comment, 'commentable'); }\r\n    tags()     { return this.morphToMany(Tag, 'taggable'); }\r\n}\r\n\r\n// Pivot table operations\r\nawait user.roles().attach([1, 2]);\r\nawait user.roles().detach([1]);\r\nawait user.roles().sync([1, 3, 5]);\r\nawait user.roles().toggle([2, 4]);\r\n```\r\n\r\n#### Eager Loading\r\n\r\n```javascript\r\nconst users = await User.with('posts').get();\r\nconst users = await User.with('posts', 'roles').get();\r\nconst user  = await User.with('posts:id,title').find(1);       // Select specific columns\r\n\r\n// Nested Eager Loading (dot notation)\r\nconst users = await User.with('posts.comments.author').get();\r\n\r\n// Querying relationship existence\r\nconst users = await User.has('posts').get();\r\nconst users = await User.doesntHave('posts').get();\r\nconst users = await User.whereHas('posts', q => q.where('published', true)).get();\r\nconst users = await User.withCount('posts').get();              // Adds posts_count\r\n```\r\n\r\n#### Model Events & Observers\r\n\r\n```javascript\r\n// Register event hooks\r\nUser.creating(user => { user.slug = slugify(user.name); });\r\nUser.created(user  => { console.log('User created:', user.id); });\r\nUser.updating(user => { /* ... */ });\r\nUser.updated(user  => { /* ... */ });\r\nUser.deleting(user => { /* ... */ });\r\nUser.deleted(user  => { /* ... */ });\r\nUser.saving(user   => { /* before create or update */ });\r\nUser.saved(user    => { /* after create or update */ });\r\n\r\n// Observer class\r\nUser.observe({\r\n    creating(user) { /* ... */ },\r\n    created(user)  { /* ... */ },\r\n    updating(user) { /* ... */ },\r\n});\r\n```\r\n\r\n#### Global Scopes\r\n\r\n```javascript\r\n// Add a global scope\r\nUser.addGlobalScope('active', query => query.where('active', true));\r\n\r\n// Query without a global scope\r\nconst allUsers = await User.withoutGlobalScope('active').get();\r\n```\r\n\r\n#### Model Utilities\r\n\r\n```javascript\r\n// Instance methods\r\nconst user = await User.find(1);\r\n\r\nuser.refresh();                              // Re-fetch from DB\r\nconst copy = user.replicate(['id']);         // Clone without id\r\nuser.touch();                                // Update updated_at timestamp\r\nuser.is(anotherUser);                        // Compare by primary key\r\nuser.isNot(anotherUser);\r\n\r\n// Dirty tracking\r\nuser.name = 'New Name';\r\nuser.isDirty();                              // true\r\nuser.isDirty('name');                        // true\r\nuser.isClean();                              // false\r\nuser.getDirty();                             // { name: 'New Name' }\r\nuser.getOriginal('name');                    // 'Old Name'\r\n\r\n// Serialization\r\nuser.toArray();                              // Plain object (respects hidden)\r\nuser.toJSON();                               // JSON-safe object (respects hidden)\r\nuser.makeVisible(['password']);               // Temporarily unhide\r\nuser.makeHidden(['email']);                   // Temporarily hide\r\n\r\n// Load relations explicitly (useful before passing to views)\r\nconst user = await User.find(1);\r\nawait user.load('posts', 'roles');         // Always (re)loads from DB\r\nawait user.loadMissing('comments');        // Only loads if not already loaded\r\n\r\n// Then in your view: {{ user.posts }}, {{ user.roles }}\r\n```\r\n\r\n#### Soft Deletes\r\n\r\n```javascript\r\nconst SoftDeletes = use('laranode/Database/Loquent/SoftDeletes');\r\n\r\nclass Post extends SoftDeletes(Model) {\r\n    static table = 'posts';\r\n}\r\n\r\n// Soft delete (sets deleted_at timestamp)\r\nawait Post.where('id', 1).delete();\r\n\r\n// Include soft deleted records\r\nconst all = await Post.withTrashed().get();\r\n\r\n// Restore\r\nawait Post.where('id', 1).restore();\r\n\r\n// Force delete (permanent)\r\nawait Post.where('id', 1).forceDelete();\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🛡️ Authentication</strong></summary>\r\n<br>\r\n\r\nLaraNode provides session-based authentication and Sanctum-style API tokens.\r\n\r\n#### Session Authentication (Web)\r\n\r\n```javascript\r\n// routes/web.js\r\nRoute.get('/login', 'AuthController@showLoginForm').name('login');\r\nRoute.post('/login', 'AuthController@login');\r\nRoute.post('/logout', 'AuthController@logout').name('logout');\r\n\r\n// Protect routes with auth middleware\r\nRoute.group({ middleware: ['auth'] }, () => {\r\n    Route.get('/dashboard', 'DashboardController@index');\r\n});\r\n```\r\n\r\n#### API Token Authentication (Sanctum-style)\r\n\r\n```javascript\r\nconst HasApiTokens = use('laranode/Auth/Traits/HasApiTokens');\r\n\r\nclass User extends HasApiTokens(Model) {\r\n    static table = 'users';\r\n}\r\n\r\n// Create a token\r\nconst token = await user.createToken('api-token');\r\n// Returns: { plainTextToken: '1|abc123...', accessToken: {...} }\r\n\r\n// Use in API requests\r\n// Header: Authorization: Bearer 1|abc123...\r\n\r\n// Protect API routes\r\nRoute.group({ middleware: ['auth:api'] }, () => {\r\n    Route.get('/user', (req, res) => res.json(req.user));\r\n});\r\n```\r\n\r\n#### Password Reset\r\n\r\n```javascript\r\nRoute.get('/password/reset', 'PasswordController@showForgotForm').name('password.request');\r\nRoute.post('/password/email', 'PasswordController@sendResetLink').name('password.email');\r\nRoute.get('/password/reset/{token}', 'PasswordController@showResetForm').name('password.reset');\r\nRoute.post('/password/reset', 'PasswordController@reset').name('password.update');\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🧩 Middleware</strong></summary>\r\n<br>\r\n\r\n#### Built-in Middleware\r\n\r\n| Middleware | Purpose |\r\n|---|---|\r\n| `TrimStrings` | Trims whitespace from all input |\r\n| `SecurityHeaders` | Sets security HTTP headers (X-Frame-Options, etc.) |\r\n| `VerifyCsrfToken` | CSRF protection for web forms |\r\n| `Cors` | Cross-Origin Resource Sharing headers |\r\n| `RateLimiter` | Request rate limiting |\r\n| `Authenticate` | Authentication guard |\r\n| `SubstituteBindings` | Route model binding |\r\n\r\n#### HTTP Kernel (`app/Http/Kernel.js`)\r\n\r\n```javascript\r\nconst Kernel = require('../../vendor/laranode/framework/src/Foundation/Http/Kernel');\r\n\r\nclass HttpKernel extends Kernel {\r\n    constructor(app, router) {\r\n        super(app, router);\r\n\r\n        // Global middleware (runs on every request)\r\n        this.middleware = [\r\n            require('../../vendor/laranode/framework/src/Http/Middleware/TrimStrings'),\r\n            require('../../vendor/laranode/framework/src/Http/Middleware/SecurityHeaders'),\r\n        ];\r\n\r\n        // Middleware groups\r\n        this.middlewareGroups = {\r\n            'web': ['bindings', 'csrf'],\r\n            'api': ['bindings'],\r\n        };\r\n\r\n        // Named middleware (for route-level use)\r\n        this.routeMiddleware = {\r\n            'auth': require('../../vendor/laranode/framework/src/Auth/Middleware/Authenticate'),\r\n            'cors': require('../../vendor/laranode/framework/src/Http/Middleware/Cors'),\r\n            'csrf': require('../../vendor/laranode/framework/src/Http/Middleware/VerifyCsrfToken'),\r\n            'throttle': require('../../vendor/laranode/framework/src/Http/Middleware/RateLimiter'),\r\n        };\r\n    }\r\n}\r\n```\r\n\r\n#### Custom Middleware\r\n\r\n```javascript\r\n// app/Http/Middleware/CheckAdmin.js\r\nmodule.exports = function (req, res, next) {\r\n    if (req.user && req.user.role === 'admin') {\r\n        return next();\r\n    }\r\n    return res.status(403).send('Forbidden');\r\n};\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>✅ Validation</strong></summary>\r\n<br>\r\n\r\n```javascript\r\n// Inline validation in a controller\r\nasync store(req, res) {\r\n    const validator = new Validator(req.all(), {\r\n        name: 'required|string|min:3|max:255',\r\n        email: 'required|email|unique:users,email',\r\n        password: 'required|min:8|confirmed',\r\n        age: 'nullable|integer|min:18',\r\n    });\r\n\r\n    if (validator.fails()) {\r\n        return res.status(422).json({ errors: validator.errors() });\r\n    }\r\n\r\n    // Validated data is safe to use\r\n    const user = await User.create(validator.validated());\r\n}\r\n```\r\n\r\n**Available Validation Rules:**\r\n`required`, `nullable`, `string`, `integer`, `numeric`, `boolean`, `email`, `url`, `min`, `max`, `between`, `in`, `not_in`, `unique`, `exists`, `confirmed`, `date`, `alpha`, `alpha_num`, `regex`, `required_if`, `required_with`, and more.\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🏗️ Facades</strong></summary>\r\n<br>\r\n\r\nFacades provide a static-like interface to services in the container:\r\n\r\n```javascript\r\n// Available Facades\r\nconst Route  = use('laranode/Support/Facades/Route');   // Routing\r\nconst Auth   = use('laranode/Support/Facades/Auth');     // Authentication\r\nconst DB     = use('laranode/Support/Facades/DB');       // Database\r\nconst Hash   = use('laranode/Support/Facades/Hash');     // Hashing\r\nconst Crypt  = use('laranode/Support/Facades/Crypt');    // Encryption\r\nconst Config = use('laranode/Support/Facades/Config');   // Configuration\r\nconst Log    = use('laranode/Support/Facades/Log');      // Logging\r\nconst Lang   = use('laranode/Support/Facades/Lang');     // Translation\r\nconst Http   = use('laranode/Support/Facades/Http');     // HTTP Client\r\n```\r\n\r\n#### HTTP Client & Macros\r\n\r\nLaraNode features an expressive, fluent HTTP client (powered by native `fetch`) that is accessible via the `Http` Facade. It behaves identically to Laravel's HTTP Client.\r\n\r\n```javascript\r\nconst Http = use('laranode/Support/Facades/Http');\r\n\r\n// Basic Requests\r\nconst response = await Http.get('https://api.github.com/users/octocat');\r\nconst data     = await Http.post('https://api.example.com/users', { name: 'John' });\r\n\r\n// Response helpers\r\nresponse.status();       // 200\r\nresponse.successful();   // true\r\nresponse.json();         // { ... }\r\nresponse.header('x-ratelimit-remaining');\r\n\r\n// Fluent configuration\r\nawait Http.withHeaders({ 'X-Custom': '123' })\r\n          .withToken('super-secret-token')\r\n          .acceptJson()\r\n          .get('/endpoint');\r\n\r\n// File Uploads (Multipart/Form-Data)\r\nconst fileBuffer = fs.readFileSync('image.png');\r\nawait Http.attach('avatar', fileBuffer, 'image.png')\r\n          .post('/upload');\r\n```\r\n\r\n**Macros**\r\n\r\nYou can register macros (custom HTTP client configurations) in your `AppServiceProvider` and call them fluently anywhere in your application.\r\n\r\n```javascript\r\n// app/Providers/AppServiceProvider.js\r\nconst Http = use('laranode/Support/Facades/Http');\r\n\r\nclass AppServiceProvider extends ServiceProvider {\r\n    boot() {\r\n        Http.macro('github', function () {\r\n            return this.withBaseUrl('https://api.github.com')\r\n                       .withHeaders({ 'Accept': 'application/vnd.github.v3+json' });\r\n        });\r\n    }\r\n}\r\n\r\n// In your Controllers\r\nconst response = await Http.github().get('/users/Sabbir1993');\r\n```\r\n\r\n#### Hashing\r\n\r\n```javascript\r\nconst Hash = use('laranode/Support/Facades/Hash');\r\n\r\n// Hash a password\r\nconst hashed = await Hash.make('my-password');\r\n\r\n// Verify a password\r\nconst valid = await Hash.check('my-password', hashed); // true\r\n```\r\n\r\n#### Encryption\r\n\r\n```javascript\r\nconst Crypt = use('laranode/Support/Facades/Crypt');\r\n\r\n// Encrypt\r\nconst encrypted = Crypt.encrypt('sensitive-data');\r\n\r\n// Decrypt\r\nconst decrypted = Crypt.decrypt(encrypted);\r\n```\r\n\r\n#### Logging\r\n\r\n```javascript\r\nconst Log = use('laranode/Support/Facades/Log');\r\n\r\nLog.info('User logged in', { userId: 1 });\r\nLog.warning('Disk space low');\r\nLog.error('Payment failed', { orderId: 123 });\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>✨ Views (Edge Templating)</strong></summary>\r\n<br>\r\n\r\nLaraNode uses Edge templates (`.edge` files) — a Blade-like engine:\r\n\r\n```html\r\n<!-- resources/views/layouts/app.edge -->\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <title>@yield('title') - {{ config('app.name') }}</title>\r\n</head>\r\n<body>\r\n    @section('content')\r\n    @endsection\r\n</body>\r\n</html>\r\n```\r\n\r\n```html\r\n<!-- resources/views/welcome.edge -->\r\n@extends('layouts.app')\r\n\r\n@section('title', 'Home')\r\n\r\n@section('content')\r\n    <h1>Welcome, {{ auth.user.name }}!</h1>\r\n\r\n    @if(auth.user.isAdmin)\r\n        <p>Admin Panel</p>\r\n    @endif\r\n\r\n    @foreach(todos as todo)\r\n        <div>{{ todo.title }} - {{ todo.completed ? '✓' : '✗' }}</div>\r\n    @endforeach\r\n@endsection\r\n```\r\n\r\n```javascript\r\n// Render a view from a controller\r\nasync index(req, res) {\r\n    return res.view('welcome', {\r\n        user: req.user,\r\n        todos: await Todo.all()\r\n    });\r\n}\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>⚙️ Configuration</strong></summary>\r\n<br>\r\n\r\nConfiguration files in `config/` use environment variables:\r\n\r\n```javascript\r\n// config/app.js\r\nmodule.exports = {\r\n    name: env('APP_NAME', 'LaraNode'),\r\n    env: env('APP_ENV', 'production'),\r\n    debug: env('APP_DEBUG', false),\r\n    url: env('APP_URL', 'http://localhost'),\r\n    port: env('APP_PORT', 8000),\r\n    key: env('APP_KEY'),\r\n    providers: [\r\n        // Service providers loaded at boot\r\n    ],\r\n};\r\n```\r\n\r\n```env\r\n# .env\r\nAPP_NAME=LaraNode\r\nAPP_ENV=local\r\nAPP_DEBUG=true\r\nAPP_PORT=3333\r\n\r\nDB_CONNECTION=sqlite\r\nDB_DATABASE=laranode\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>💾 Database</strong></summary>\r\n<br>\r\n\r\n#### Supported Databases\r\n\r\n- **SQLite** — zero-config, great for development\r\n- **MySQL** — production-ready with connection pooling\r\n\r\n```javascript\r\n// config/database.js\r\nmodule.exports = {\r\n    default: env('DB_CONNECTION', 'sqlite'),\r\n    connections: {\r\n        sqlite: {\r\n            driver: 'sqlite',\r\n            database: env('DB_DATABASE', database_path('database.sqlite')),\r\n        },\r\n        mysql: {\r\n            driver: 'mysql',\r\n            host: env('DB_HOST', '127.0.0.1'),\r\n            port: env('DB_PORT', '3306'),\r\n            database: env('DB_DATABASE', 'laranode'),\r\n            username: env('DB_USERNAME', 'root'),\r\n            password: env('DB_PASSWORD', ''),\r\n        },\r\n    }\r\n};\r\n```\r\n\r\n#### Raw Queries via DB Facade\r\n\r\n```javascript\r\nconst DB = use('laranode/Support/Facades/DB');\r\n\r\nconst users = await DB.table('users').where('active', true).get();\r\nconst result = await DB.raw('SELECT * FROM users WHERE id = ?', [1]);\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>📄 Pagination</strong></summary>\r\n<br>\r\n\r\nLaraNode provides two types of paginators — `paginate()` for full page-number navigation and `simplePaginate()` for lightweight previous/next.\r\n\r\n#### Length-Aware Pagination (paginate)\r\n\r\n```javascript\r\n// In a controller\r\nasync index(req, res) {\r\n    const users = await User.where('active', true).paginate(10);\r\n\r\n    // For API responses\r\n    return res.json(users.toArray());\r\n    // Returns: { data: [...], meta: { current_page, last_page, per_page, total } }\r\n\r\n    // For views — render pagination links as HTML\r\n    return res.view('users.index', {\r\n        users: users.items,\r\n        paginationLinks: users.links('/users?')\r\n    });\r\n}\r\n```\r\n\r\n```html\r\n<!-- In your Edge template -->\r\n@foreach(users as user)\r\n    <div>{{ user.name }}</div>\r\n@endforeach\r\n\r\n{{{ paginationLinks }}}\r\n```\r\n\r\n#### Simple Pagination (simplePaginate)\r\n\r\nFor large datasets where you don't need the total count:\r\n\r\n```javascript\r\nasync index(req, res) {\r\n    const users = await User.simplePaginate(15);\r\n\r\n    return res.view('users.index', {\r\n        users: users.items,\r\n        paginationLinks: users.links('/users?')\r\n    });\r\n}\r\n```\r\n\r\n#### Pagination Methods\r\n\r\n| Method | Description |\r\n|---|---|\r\n| `paginate(perPage, page)` | Full pagination with total count and page numbers |\r\n| `simplePaginate(perPage, page)` | Lightweight previous/next only |\r\n| `.items` | The array of items for the current page |\r\n| `.total` | Total number of records (paginate only) |\r\n| `.currentPage` | Current page number |\r\n| `.lastPage` | Last page number (paginate only) |\r\n| `.hasMorePages()` | Whether more pages exist |\r\n| `.toArray()` | Returns `{ data, meta }` object for API responses |\r\n| `.links(path)` | Renders Bootstrap-compatible pagination HTML |\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>📮 Queues</strong></summary>\r\n<br>\r\n\r\nLaraNode includes a database-driven queue system for processing jobs in the background, similar to Laravel.\r\n\r\n#### Creating a Job\r\n\r\nCreate job classes in `app/Jobs/`:\r\n\r\n```javascript\r\nconst Job = use('laranode/Queue/Job');\r\n\r\nclass ProcessPodcast extends Job {\r\n    constructor(data) {\r\n        super(data);\r\n    }\r\n\r\n    async handle() {\r\n        console.log('Processing podcast:', this.data.podcastId);\r\n        // Your job logic here...\r\n    }\r\n}\r\n\r\nmodule.exports = ProcessPodcast;\r\n```\r\n\r\n#### Dispatching Jobs\r\n\r\n```javascript\r\nconst ProcessPodcast = use('App/Jobs/ProcessPodcast');\r\n\r\n// Basic dispatch\r\nawait ProcessPodcast.dispatch({ podcastId: 1 });\r\n\r\n// Dispatch with delay (in seconds)\r\nawait ProcessPodcast.dispatch({ podcastId: 1 }).delay(600); // 10 minutes\r\n\r\n// Dispatch to a specific queue\r\nawait ProcessPodcast.dispatch({ podcastId: 1 }).onQueue('high');\r\n\r\n// Chained\r\nawait ProcessPodcast.dispatch({ podcastId: 1 }).onQueue('high').delay(60);\r\n```\r\n\r\n#### Running the Queue Worker\r\n\r\n```bash\r\n# Process jobs on the default queue\r\nnode artisan queue:work\r\n\r\n# Process a specific queue\r\nnode artisan queue:work --queue=high\r\n\r\n# Customize sleep interval and max retries\r\nnode artisan queue:work --sleep=1 --tries=5\r\n```\r\n\r\n#### Failed Jobs\r\n\r\nWhen a job exceeds the maximum number of attempts (`--tries`), it is automatically moved to the `failed_jobs` table with the exception trace, queue name, payload, and a UUID.\r\n\r\n#### Required Migrations\r\n\r\nRun `node artisan migrate` to create the `jobs` and `failed_jobs` tables.\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>📡 Broadcasting</strong></summary>\r\n<br>\r\n\r\nPowered by Socket.io, LaraNode's broadcasting allows you to share server-side events with your client-side JavaScript application in real-time.\r\n\r\n```javascript\r\n// app/Events/OrderShipped.js\r\nclass OrderShipped extends ShouldBroadcast {\r\n    constructor(order) {\r\n        super();\r\n        this.order = order;\r\n    }\r\n\r\n    broadcastOn() {\r\n        return ['orders', `user.${this.order.user_id}`];\r\n    }\r\n}\r\n\r\n// In your controller\r\nEvent.dispatch(new OrderShipped(order));\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🧪 Testing</strong></summary>\r\n<br>\r\n\r\nLaraNode features a robust testing framework inspired by Laravel. It supports `artisan test` and provides a `TestCase` class for building expressive feature tests.\r\n\r\n```javascript\r\n// tests/Feature/UserTest.js\r\nconst TestCase = use('laranode/Foundation/Testing/TestCase');\r\n\r\nclass UserTest extends TestCase {\r\n    async test_can_visit_home_page() {\r\n        const response = await this.get('/');\r\n        response.assertStatus(200);\r\n        response.assertSee('LaraNode');\r\n    }\r\n}\r\n```\r\n\r\n#### Running Tests\r\n\r\n```bash\r\nnode artisan test\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>⚡ Performance</strong></summary>\r\n<br>\r\n\r\nOptimize your application for production by caching performance-heavy components.\r\n\r\n```bash\r\n# Cache configuration\r\nnode artisan config:cache\r\n\r\n# Cache routes\r\nnode artisan route:cache\r\n```\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🔌 Service Providers</strong></summary>\r\n<br>\r\n\r\nRegister services in `config/app.js`:\r\n\r\n```javascript\r\nproviders: [\r\n    // Framework providers\r\n    require(base_path('vendor/laranode/framework/src/Foundation/Providers/RouteServiceProvider')),\r\n    require(base_path('vendor/laranode/framework/src/Foundation/Providers/DatabaseServiceProvider')),\r\n    require(base_path('vendor/laranode/framework/src/Log/LogServiceProvider')),\r\n    require(base_path('vendor/laranode/framework/src/View/ViewServiceProvider')),\r\n    require(base_path('vendor/laranode/framework/src/Translation/TranslationServiceProvider')),\r\n    require(base_path('vendor/laranode/framework/src/Auth/AuthServiceProvider')),\r\n    require(base_path('vendor/laranode/framework/src/Hashing/HashServiceProvider')),\r\n    require(base_path('vendor/laranode/framework/src/Encryption/EncryptionServiceProvider')),\r\n\r\n    // Your custom providers\r\n    // require(base_path('app/Providers/AppServiceProvider')),\r\n],\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>⚠️ Exception Handling</strong></summary>\r\n<br>\r\n\r\nCustomize error handling in `app/Exceptions/Handler.js`:\r\n\r\n```javascript\r\nconst BaseHandler = use('laranode/Foundation/Exceptions/Handler');\r\n\r\nclass Handler extends BaseHandler {\r\n    constructor(app) {\r\n        super(app);\r\n        this.dontReport = [\r\n            // Exceptions that should not be logged\r\n        ];\r\n    }\r\n\r\n    register() {\r\n        // Custom renderable\r\n        this.renderable((error, req, res) => {\r\n            if (error.name === 'PaymentException') {\r\n                return res.status(402).json({ message: 'Payment required' });\r\n            }\r\n        });\r\n\r\n        // Custom reportable\r\n        this.reportable((error) => {\r\n            // Send to Sentry, Datadog, etc.\r\n        });\r\n    }\r\n}\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>📊 Log Viewer</strong></summary>\r\n<br>\r\n\r\nLaraNode includes a built-in web-based log viewer with severity filtering:\r\n\r\n```javascript\r\n// config/logging.js\r\nmodule.exports = {\r\n    allow_log_viewer: true,\r\n    log_viewer: {\r\n        middleware: ['web'],\r\n        endpoint: '/logs',\r\n    },\r\n};\r\n```\r\n\r\nVisit `/logs` to view application logs with:\r\n- File browser sidebar\r\n- Severity filters (Error, Warning, Info, Debug)\r\n- Expandable rows for full stack traces\r\n- Chunk-based pagination for large files\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>📟 Artisan CLI</strong></summary>\r\n<br>\r\n\r\nThe LaraNode Artisan CLI provides commands for scaffolding, database management, and running your application.\r\n\r\n```bash\r\n# Start the development server\r\nnode artisan serve\r\n\r\n# Start with a custom port\r\nnode artisan serve --port=8080\r\n\r\n# Run scheduled commands\r\nnode artisan schedule:run\r\n```\r\n\r\n#### Available Commands\r\n\r\nHere is a full list of available Artisan commands:\r\n\r\n| Command | Description | Usage |\r\n|---|---|---|\r\n| **Development** | | |\r\n| `serve` | Serve the application on the local development server | `node artisan serve [options]` |\r\n| `route:list` | List all registered routes | `node artisan route:list [options]` |\r\n| **Make (Scaffolding)** | | |\r\n| `make:controller` | Create a new controller class | `node artisan make:controller [options] <name>` |\r\n| `make:model` | Create a new Loquent model class | `node artisan make:model [options] <name>` |\r\n| `make:middleware` | Create a new middleware class | `node artisan make:middleware <name>` |\r\n| `make:migration` | Create a new migration file | `node artisan make:migration <name>` |\r\n| `make:seeder` | Create a new seeder class | `node artisan make:seeder <name>` |\r\n| `make:request` | Create a new form request class | `node artisan make:request <name>` |\r\n| `make:resource` | Create a new API resource class | `node artisan make:resource [options] <name>` |\r\n| `make:event` | Create a new event class | `node artisan make:event <name>` |\r\n| `make:listener` | Create a new event listener class | `node artisan make:listener <name>` |\r\n| `make:mail` | Create a new mailable class | `node artisan make:mail <name>` |\r\n| `make:notification`| Create a new notification class | `node artisan make:notification <name>` |\r\n| `make:command` | Create a new Artisan command | `node artisan make:command <name>` |\r\n| `make:rule` | Create a new custom validation rule class | `node artisan make:rule <name>` |\r\n| **Database** | | |\r\n| `migrate` | Run the database migrations | `node artisan migrate` |\r\n| `migrate:rollback`| Rollback the last database migration | `node artisan migrate:rollback` |\r\n| `migrate:fresh` | Drop all tables and re-run all migrations | `node artisan migrate:fresh [options]` |\r\n| `db:seed` | Seed the database with records | `node artisan db:seed [options]` |\r\n| **System** | | |\r\n| `schedule:run` | Run the scheduled commands | `node artisan schedule:run` |\r\n| `queue:work` | Start processing jobs on the queue | `node artisan queue:work [options]` |\r\n| `help` | Display help for a specific command | `node artisan help [command]` |\r\n\r\n*Note: You can run `node artisan help <command>` for more detailed usage and available options for any specific command.*\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>💻 Tinker (Interactive REPL)</strong></summary>\r\n<br>\r\n\r\nLaraNode Tinker provides a powerful, interactive Node.js REPL environment where you can interact directly with your completely booted application.\r\n\r\n```bash\r\nnode artisan tinker\r\n```\r\n\r\nOnce inside Tinker, you can write JavaScript natively, wait on Promises (top-level await), and all your `app/Models/` classes are auto-loaded! Standard Facades (`DB`, `Route`, `Hash`, `Cache`, etc.) are also injected globally.\r\n\r\n```javascript\r\n// Auto-loaded Models & Top-Level Await\r\n>>> await User.first()\r\nUser { id: 1, ... }\r\n\r\n// Interactive debugging\r\n>>> await DB.table('users').count()\r\n42\r\n\r\n// Global Helpers\r\n>>> env('APP_PORT')\r\n'3000'\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🪟 Inertia.js (Native SPAs)</strong></summary>\r\n<br>\r\n\r\nLaraNode comes with robust, out-of-the-box support for [Inertia.js](https://inertiajs.com).\r\nThis allows you to build modern single-page apps using React, Vue, or Svelte—all powered natively by your LaraNode controllers instead of maintaining a separate API!\r\n\r\nThe built-in `HandleInertiaRequests` middleware automatically handles asset versioning and global data sharing (like the current Auth User and Flash Messages) on every page transition.\r\n\r\n### 1. Edge HTML Shell\r\n\r\nCreate your root template `resources/views/app.edge`. Notice how LaraNode automatically handles sending the initial payload using `{!! jsonPage !!}`:\r\n\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <title>LaraNode App</title>\r\n    <!-- React Refresh Preamble (Required for Vite React Dev Mode) -->\r\n    <script type=\"module\">\r\n        import RefreshRuntime from \"http://localhost:5173/@react-refresh\";\r\n        RefreshRuntime.injectIntoGlobalHook(window);\r\n        window.$RefreshReg$ = () => {};\r\n        window.$RefreshSig$ = () => (type) => type;\r\n        window.__vite_plugin_react_preamble_installed__ = true;\r\n    </script>\r\n    <script type=\"module\" src=\"http://localhost:5173/@vite/client\"></script>\r\n    <script type=\"module\" src=\"http://localhost:5173/resources/js/app.jsx\"></script>\r\n</head>\r\n<body>\r\n    <!-- The Inertia Payload is mounted here unescaped natively -->\r\n    <div id=\"app\" data-page=\"{!! jsonPage !!}\"></div>\r\n</body>\r\n</html>\r\n```\r\n\r\n### 2. Vite Configuration\r\n\r\nConfigure `vite.config.js` to bundle your assets:\r\n\r\n```javascript\r\nimport { defineConfig } from 'vite';\r\nimport react from '@vitejs/plugin-react';\r\n\r\nexport default defineConfig({\r\n    plugins: [react()],\r\n    build: {\r\n        outDir: 'public/build',\r\n        rollupOptions: { input: 'resources/js/app.jsx' },\r\n    },\r\n});\r\n```\r\n\r\n### 3. Controller Usage\r\n\r\nUsing Inertia from a LaraNode controller is identical to Laravel. The framework handles rendering the HTML shell or strictly returning JSON for partial reloads automatically behind the scenes!\r\n\r\n```javascript\r\n// A standard Express controller method\r\nindex(req, res) {\r\n    const users = await DB.table('users').get();\r\n    \r\n    // Renders your 'resources/js/Pages/Users/Index.jsx' seamlessly!\r\n    return res.inertia('Users/Index', { users });\r\n}\r\n```\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🎧 Events & Listeners</strong></summary>\r\n<br>\r\n\r\nLaraNode provides a robust event dispatching system similar to Laravel. Listeners are automatically resolved through the service container.\r\n\r\n```javascript\r\nconst Event = use('laranode/Support/Facades/Event');\r\n\r\n// Dispatch an event\r\nEvent.dispatch('OrderShipped', order);\r\n\r\n// Listen to an event\r\nEvent.listen('OrderShipped', SendShipmentNotification);\r\n```\r\n\r\nRegister your listeners in `app/Providers/EventServiceProvider.js`.\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🚀 Cache</strong></summary>\r\n<br>\r\n\r\nThe LaraNode Cache system provides a unified API for various cache drivers. Currently supported drivers: `file` and `memory`.\r\n\r\n```javascript\r\nconst Cache = use('laranode/Support/Facades/Cache');\r\n\r\n// Store an item\r\nawait Cache.put('key', 'value', 60);\r\n\r\n// Retrieve an item\r\nconst value = await Cache.get('key');\r\n\r\n// Retrieve & store if empty\r\nconst users = await Cache.remember('users', 60, async () => {\r\n    return await DB.table('users').get();\r\n});\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>📁 Storage / Filesystem</strong></summary>\r\n<br>\r\n\r\nLaraNode provides a powerful filesystem abstraction matching Laravel's Storage API.\r\n\r\n```javascript\r\nconst Storage = use('laranode/Support/Facades/Storage');\r\n\r\n// Store a file with visibility\r\nawait Storage.put('avatars/1.jpg', fileData, 'public');\r\n\r\n// Get URL (requires storage:link)\r\nconst url = Storage.url('avatars/1.jpg'); // '/storage/avatars/1.jpg'\r\n\r\n// Get Mime Type\r\nconst type = await Storage.mimeType('document.pdf'); // 'application/pdf'\r\n\r\n// Create symbolic link\r\n// node artisan storage:link\r\n\r\n// Read a file\r\nconst contents = await Storage.get('file.txt');\r\n\r\n// Delete a file\r\nawait Storage.delete('file.txt');\r\n\r\n// Verify existence\r\nif (await Storage.exists('file.txt')) { ... }\r\n\r\n#### File Uploads\r\n\r\nLaraNode provides a convenient wrapper for uploaded files with a Laravel-compatible API.\r\n\r\n```javascript\r\nasync upload(req, res) {\r\n    const file = req.file('avatar'); // Returns UploadedFile instance\r\n\r\n    if (file) {\r\n        // Get file info\r\n        const name = file.getClientOriginalName();\r\n        const ext  = file.getClientOriginalExtension();\r\n        const size = file.getSize();\r\n\r\n        // Store the file (returns the generated path)\r\n        const path = await file.store('avatars');\r\n        \r\n        return res.json({ path });\r\n    }\r\n}\r\n```\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>📩 Mail</strong></summary>\r\n<br>\r\n\r\nLaraNode's Mail system, built on top of Nodemailer, allows for expressive email creation via Mailable classes.\r\n\r\n```javascript\r\nconst Mail = use('laranode/Support/Facades/Mail');\r\n\r\n// Send a mailable\r\nawait Mail.to(user.email).send(new WelcomeMail(user));\r\n\r\n// If Mailable implements ShouldQueue, it's sent in the background automatically!\r\nclass WelcomeMail extends Mailable implements ShouldQueue { ... }\r\n```\r\n\r\n```javascript\r\n// A sample Mailable class\r\nclass WelcomeMail extends Mailable {\r\n    constructor(user) { super(); this.user = user; }\r\n    build() {\r\n        return this.from('admin@app.com')\r\n                   .subject('Welcome!')\r\n                   .view('emails.welcome', { user: this.user });\r\n    }\r\n}\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🔔 Notifications</strong></summary>\r\n<br>\r\n\r\nLaraNode allows you to send notifications across various channels (Mail, Database).\r\n\r\n```javascript\r\n// Notify an entity\r\nawait Notification.send(user, new InvoicePaid(invoice));\r\n```\r\n\r\n```javascript\r\n// A sample Notification class\r\nclass InvoicePaid extends Notification {\r\n    via(notifiable) { return ['mail', 'database']; }\r\n\r\n    toMail(notifiable) {\r\n        return new MailMessage()\r\n            .greeting('Hello!')\r\n            .line('Your invoice has been paid.')\r\n            .action('View Invoice', invoice.url);\r\n    }\r\n\r\n    toDatabase(notifiable) {\r\n        return { invoice_id: this.invoice.id };\r\n    }\r\n\r\n    toBroadcast(notifiable) {\r\n        return { amount: this.invoice.total };\r\n    }\r\n}\r\n\r\n// Any model can receive notifications using the Notifiable mixin\r\nclass User extends Notifiable(Model) { ... }\r\nawait user.notify(new InvoicePaid(invoice));\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n<details>\r\n<summary><strong>🛠️ Helper Functions</strong></summary>\r\n<br>\r\n\r\nLaraNode provides global helper functions:\r\n\r\n```javascript\r\nenv('APP_NAME', 'default')        // Read environment variable\r\nbase_path('storage/logs')         // Absolute path from project root\r\ndatabase_path('database.sqlite')  // Path to database/ directory\r\nconfig('app.name')                // Read config value\r\nuse('App/Models/User')            // Resolve from service container\r\n```\r\n\r\n---\r\n\r\n</details>\r\n\r\n---\r\n\r\n## 🔧 Environment Variables\r\n\r\n| Variable | Description | Default |\r\n|---|---|---|\r\n| `APP_NAME` | Application name | `LaraNode` |\r\n| `APP_ENV` | Environment (local, production) | `local` |\r\n| `APP_KEY` | Encryption key (auto-generated) | — |\r\n| `APP_DEBUG` | Debug mode | `true` |\r\n| `APP_PORT` | Server port | `3333` |\r\n| `APP_URL` | Application URL | `http://localhost` |\r\n| `APP_LOCALE` | Default locale | `en` |\r\n| `LOG_CHANNEL` | Log channel | `stack` |\r\n| `LOG_LEVEL` | Minimum log level | `debug` |\r\n| `DB_CONNECTION` | Database driver | `sqlite` |\r\n| `DB_HOST` | Database host | `127.0.0.1` |\r\n| `DB_PORT` | Database port | `3306` |\r\n| `DB_DATABASE` | Database name | `laranode` |\r\n| `DB_USERNAME` | Database user | `root` |\r\n| `DB_PASSWORD` | Database password | — |\r\n\r\n---\r\n\r\n## 📱 Sample Application\r\n\r\nThe scaffolded project includes a complete sample application:\r\n\r\n- **Authentication** — Login, Register, Logout, Password Reset\r\n- **Todo CRUD** — Full create, read, update, delete with API authentication\r\n- **API Endpoints** — `GET /api/user` for testing API access\r\n\r\n### Sample Routes\r\n\r\n```javascript\r\n// Web routes (routes/web.js)\r\nRoute.get('/login', 'AuthController@showLoginForm');\r\nRoute.post('/login', 'AuthController@login');\r\nRoute.get('/register', 'AuthController@showRegisterForm');\r\n\r\nconst AuthController = use('App/Http/Controllers/AuthController');\r\nRoute.post('/register', [AuthController, 'register']);\r\n\r\n// Protected CRUD routes\r\nRoute.group({ middleware: ['auth:api'] }, () => {\r\n    Route.get('/todos', 'TodoController@index');\r\n    Route.post('/todos', 'TodoController@store');\r\n    Route.put('/todos/{todo}', 'TodoController@update');\r\n    Route.delete('/todos/{todo}', 'TodoController@destroy');\r\n});\r\n\r\n// API routes (routes/api.js)\r\nRoute.get('/user', async (req, res) => {\r\n    const user = await User.first();\r\n    return res.json({ user });\r\n});\r\n```\r\n\r\n---\r\n\r\n## 🤝 Contributing\r\n\r\nContributions are welcome! Please feel free to submit a Pull Request.\r\n\r\n## 📜 License\r\n\r\nThe LaraNode framework is open-sourced software licensed under the [MIT license](LICENSE).\r\n","readmeFilename":"README.md"}