{"_id":"@bad-hacking/remix-express-app","_rev":"11-c1590b49aa6ba4cb3e2474225ae805f6","name":"@bad-hacking/remix-express-app","dist-tags":{"latest":"0.0.4","dev":"0.0.3-dev.2024-08-28-08-40-02"},"versions":{"0.0.1-dev.2024-08-11-13-07-24":{"name":"@bad-hacking/remix-express-app","version":"0.0.1-dev.2024-08-11-13-07-24","_id":"@bad-hacking/remix-express-app@0.0.1-dev.2024-08-11-13-07-24","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"cc689fc67f42dc3af52a8eb7096878b1f76f6ed1","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.1-dev.2024-08-11-13-07-24.tgz","fileCount":11,"integrity":"sha512-anKr4fpXbHDlOQJaw5G9cmvToFHUEal/PnOHe81tBqSDl0MNxxUU0pwz/D9J9GKQjuwfF4E710R7A3G2Vl4yqg==","signatures":[{"sig":"MEUCIFPwsy2GneTL6cs5M4d0I3w3ZsZJiGWRpbNjZ1xFxm9oAiEAxatIui//uLEOnv65YyKkN/zxjrcgc1uV57DtveJ+Kdg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7749},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","gitHead":"c0cc92568cde17f76e39955d637b02dfe1d9a3fa","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm format && pnpm lint && pnpm test:ci && tsc && echo success","format":"prettier --check .","test:ci":"CI=true vitest"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","dependencies":{"dayjs":"^1.11.12","remeda":"^2.10.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"vite":"^5.4.0","express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.1-dev.2024-08-11-13-07-24_1723345651335_0.7939701143377567","host":"s3://npm-registry-packages"}},"0.0.1-dev.2024-08-11-13-10-58":{"name":"@bad-hacking/remix-express-app","version":"0.0.1-dev.2024-08-11-13-10-58","_id":"@bad-hacking/remix-express-app@0.0.1-dev.2024-08-11-13-10-58","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"2e41d387516014804f0431f31fcc67bb53e77350","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.1-dev.2024-08-11-13-10-58.tgz","fileCount":11,"integrity":"sha512-NEVFhcN7f5XPjQrToRCe+TQFt+GNo3+inY+dpS/z3yCZSx4yc8l58AiHe9PjyrcUsNeZzJ5jsi+6gumadhxO9w==","signatures":[{"sig":"MEUCIErh+LUq3NhHdJ3whhQc9IB7nX4YUOY3F+3NtHeIh5ibAiEA/TReR95Zs9/+AafGc+LI6/3c3tpmHNcervE2DIQKAqc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7653},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","gitHead":"c0cc92568cde17f76e39955d637b02dfe1d9a3fa","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm format && pnpm lint && pnpm test:ci && tsc && echo success","format":"prettier --check .","test:ci":"CI=true vitest"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","readmeFilename":"README.md","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.1-dev.2024-08-11-13-10-58_1723345866083_0.1322554695300482","host":"s3://npm-registry-packages"}},"0.0.1-dev.2024-08-11-13-15-58":{"name":"@bad-hacking/remix-express-app","version":"0.0.1-dev.2024-08-11-13-15-58","_id":"@bad-hacking/remix-express-app@0.0.1-dev.2024-08-11-13-15-58","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"3a520d05babd13ac08dbb0289ff538b190136c11","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.1-dev.2024-08-11-13-15-58.tgz","fileCount":11,"integrity":"sha512-zt+Aez6Th6EIyer9YMF1fRyXSnMam018Xu4iiH3W47CANX2YzJoZyQpNZIjRxraEOVLfwKYH076mZE5bymcllg==","signatures":[{"sig":"MEUCIBqQ0ERa5anqcnwJuqGt6Na1IpLZQzRT+bpKCX8gdQPgAiEAlWcTuI/lqx7g7gpBBvxdYk0lQqXAfPgHH6Uwc55o2rU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7737},"type":"module","exports":{"create-app":"./dist/create-app.js","dev-server":"./dist/dev-server.js","vite-plugin":"./dist/vite-plugin.js"},"gitHead":"c0cc92568cde17f76e39955d637b02dfe1d9a3fa","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm format && pnpm lint && pnpm test:ci && tsc && echo success","format":"prettier --check .","test:ci":"CI=true vitest"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","readmeFilename":"README.md","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.1-dev.2024-08-11-13-15-58_1723346164518_0.8765008504118907","host":"s3://npm-registry-packages"}},"0.0.1-dev.2024-08-11-13-18-26":{"name":"@bad-hacking/remix-express-app","version":"0.0.1-dev.2024-08-11-13-18-26","_id":"@bad-hacking/remix-express-app@0.0.1-dev.2024-08-11-13-18-26","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"8bf4c50eadbeaf647755d355131235af73669648","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.1-dev.2024-08-11-13-18-26.tgz","fileCount":11,"integrity":"sha512-GuJCVVufgU2AlEZwsZgfDgZUqDxWoaURIrz08jOhIYcT1JkrYTZh0RvHvnonurXj+NOD0ek6EsJO3QkVrVpx/g==","signatures":[{"sig":"MEYCIQDLk/bfCfV7GNcZ5wX27rkTFgG2+knyUuzfx+1anQI+8wIhAI6iQeaX3/lV3R2gXaq8ySLDbc53pZzTSWSFETWp16s2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7933},"type":"module","exports":{"create-app":{"types":"./dist/create-app.d.ts","import":"./dist/create-app.js"},"dev-server":{"types":"./dist/dev-server.d.ts","import":"./dist/dev-server.js"},"vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.js"}},"gitHead":"c0cc92568cde17f76e39955d637b02dfe1d9a3fa","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm format && pnpm lint && pnpm test:ci && tsc && echo success","format":"prettier --check .","test:ci":"CI=true vitest"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","readmeFilename":"README.md","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.1-dev.2024-08-11-13-18-26_1723346312584_0.9792689905441161","host":"s3://npm-registry-packages"}},"0.0.1-dev.2024-08-11-13-23-13":{"name":"@bad-hacking/remix-express-app","version":"0.0.1-dev.2024-08-11-13-23-13","_id":"@bad-hacking/remix-express-app@0.0.1-dev.2024-08-11-13-23-13","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"ddbf123a9974b70fef291ff3a7f116843d4ad356","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.1-dev.2024-08-11-13-23-13.tgz","fileCount":11,"integrity":"sha512-D+DUgVWxAyOOyQUii70PF7KyUHTV8Vb1MaWeFivErCPUUsn0gwN8ftIHFgH4ZFhhlilLG32sEjwpynW7F45xxg==","signatures":[{"sig":"MEUCIQDsvHdP2etI4K/a32DE9pn5fkyI7t9Jb0CjOKSIpdb97gIgIKzWsMJzJg/XWKeXP3Vo9Y5fg3dizpmhVllRheaeQOI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7939},"type":"module","exports":{"./create-app":{"types":"./dist/create-app.d.ts","import":"./dist/create-app.js"},"./dev-server":{"types":"./dist/dev-server.d.ts","import":"./dist/dev-server.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.js"}},"gitHead":"c0cc92568cde17f76e39955d637b02dfe1d9a3fa","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm format && pnpm lint && pnpm test:ci && tsc && echo success","format":"prettier --check .","test:ci":"CI=true vitest"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","readmeFilename":"README.md","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.1-dev.2024-08-11-13-23-13_1723346599178_0.8774464400121091","host":"s3://npm-registry-packages"}},"0.0.1-dev.2024-08-11-13-32-03":{"name":"@bad-hacking/remix-express-app","version":"0.0.1-dev.2024-08-11-13-32-03","_id":"@bad-hacking/remix-express-app@0.0.1-dev.2024-08-11-13-32-03","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"2acc17c12f39bca62c8e22002c71056471b37bda","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.1-dev.2024-08-11-13-32-03.tgz","fileCount":11,"integrity":"sha512-HlUNcr0swrQPy5bn665BCxXsD8Zx8Ts/Z8yFVzNznCRvJEt77JQJsuNut4Z+axoGzZyuuPfYbRxobbH/6i64tw==","signatures":[{"sig":"MEUCIQC/JFHOLYGapSdgCLnZzg7Sj+f06gUKnNTQNlRLs/TTsQIgF2v3vCDn3SlqeOFC9pGu3wa4SQ0qFRn/uPo4/jlgu1s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7967},"type":"module","exports":{"./create-app":{"types":"./dist/create-app.d.ts","import":"./dist/create-app.js"},"./dev-server":{"types":"./dist/dev-server.d.ts","import":"./dist/dev-server.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.js"}},"gitHead":"c0cc92568cde17f76e39955d637b02dfe1d9a3fa","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm format && pnpm lint && pnpm test:ci && tsc && echo success","format":"prettier --check .","test:ci":"CI=true vitest"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","readmeFilename":"README.md","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.1-dev.2024-08-11-13-32-03_1723347129485_0.7824942700392619","host":"s3://npm-registry-packages"}},"0.0.1-dev.2024-08-11-13-55-17":{"name":"@bad-hacking/remix-express-app","version":"0.0.1-dev.2024-08-11-13-55-17","_id":"@bad-hacking/remix-express-app@0.0.1-dev.2024-08-11-13-55-17","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"bf8b2b66583d9bbf5471b95173efeae2c70c91e6","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.1-dev.2024-08-11-13-55-17.tgz","fileCount":11,"integrity":"sha512-12sDO158XbH9rn6xjbjHTm1Vyu3+NLbjZLcRT3CD6L6AEHFY3b9jNBZWZEWJiZ1eI7DFePPfVEsXrwMsyd0+Qg==","signatures":[{"sig":"MEQCICDufDmpoZv7qPy2FEhKmdg2jyIe+U24DdsbkVSezKfZAiBaS6J7TlXkgeUWe4TIEVJdoDMtcPkhW1Uvq2VxW6xv4w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7963},"type":"module","exports":{"./create-app":{"types":"./dist/create-app.d.ts","import":"./dist/create-app.js"},"./dev-server":{"types":"./dist/dev-server.d.ts","import":"./dist/dev-server.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.js"}},"gitHead":"0638bd83470c43362e64aefe528869fdb2ca3a8d","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm format && pnpm lint && pnpm test:ci && tsc && echo success","format":"prettier --check .","test:ci":"CI=true vitest"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","readmeFilename":"README.md","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.1-dev.2024-08-11-13-55-17_1723348523666_0.5257284993362674","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@bad-hacking/remix-express-app","version":"0.0.2","_id":"@bad-hacking/remix-express-app@0.0.2","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"be378737568b5ce83ad8034c1bf07fad2dd38168","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.2.tgz","fileCount":11,"integrity":"sha512-A7IWTSAu4FJiKsQbEjqy8/SgZs+XLIEtMMebob4w4ia2pbxly2BSeJC/NAetcZxBS+chD4Nlr4JL6mvZgCskOw==","signatures":[{"sig":"MEYCIQDe2oF6ddhczIWuSEpiZZmloomiGVBPWucm97eMFiIDbwIhAMDuGdvziGaQzX8Ai2yN/pc+35wcr/0HELh5OOvOSGpi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7939},"type":"module","exports":{"./create-app":{"types":"./dist/create-app.d.ts","import":"./dist/create-app.js"},"./dev-server":{"types":"./dist/dev-server.d.ts","import":"./dist/dev-server.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.js"}},"gitHead":"0638bd83470c43362e64aefe528869fdb2ca3a8d","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm format && pnpm lint && pnpm test:ci && tsc && echo success","format":"prettier --check .","test:ci":"CI=true vitest"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.2_1723371680896_0.6551760496773531","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@bad-hacking/remix-express-app","version":"0.0.3","_id":"@bad-hacking/remix-express-app@0.0.3","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"b116385595ff3d1ae919329e7aaf7a23c8bfb9dd","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.3.tgz","fileCount":11,"integrity":"sha512-1zUXxkymB6oWwYFkkv3yhBiCtQscNSSHWl/PeSwaDoso+9Bfvv1j5uvUnPDobzt9+00v5WzstxfXs999hys3yQ==","signatures":[{"sig":"MEQCIH7eSZnx5gNZTEmTRyUitteiUkiNa/SiVxkfx+waXmZfAiBNOnMKVihw+ArNYzn/QCNcq5CVJ2Wf2CmhE7SF8NGsRg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8015},"type":"module","exports":{"./create-app":{"types":"./dist/create-app.d.ts","import":"./dist/create-app.js"},"./dev-server":{"types":"./dist/dev-server.d.ts","import":"./dist/dev-server.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.js"}},"gitHead":"0638bd83470c43362e64aefe528869fdb2ca3a8d","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm format && pnpm lint && pnpm test:ci && tsc && echo success","format":"prettier --check .","test:ci":"CI=true vitest"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.3_1723372025067_0.7175703044176314","host":"s3://npm-registry-packages"}},"0.0.3-dev.2024-08-28-08-37-41":{"name":"@bad-hacking/remix-express-app","version":"0.0.3-dev.2024-08-28-08-37-41","_id":"@bad-hacking/remix-express-app@0.0.3-dev.2024-08-28-08-37-41","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"fba349364105d70e906b09ab74dc9fcfaaed4362","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.3-dev.2024-08-28-08-37-41.tgz","fileCount":11,"integrity":"sha512-tBMPInumOPgxuJyqqMJUYs8uIc1xY+YRBsAEtPUcu3aHlZc2YygqvudWI0ldDli3Alyrx2kEpwKg3H8k+9r7bQ==","signatures":[{"sig":"MEUCIQCb2+qvQEwBdrq1fAybGqIvfjibLEZy5WXacDlGvJfVjQIgPo8/NaTUx8NtsuiRcUP1IFGw43QbBJv92Fm9ln8ijLc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9058},"type":"module","exports":{"./create-app":{"types":"./dist/create-app.d.ts","import":"./dist/create-app.js"},"./dev-server":{"types":"./dist/dev-server.d.ts","import":"./dist/dev-server.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.js"}},"gitHead":"81776546b0b1fe60d6bd4208b32e66e561231f7d","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm run '/^(typecheck|lint|format|test:ci)$/'","format":"prettier --check .","test:ci":"CI=true vitest","typecheck":"tsc"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","readmeFilename":"README.md","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.3-dev.2024-08-28-08-37-41_1724805467305_0.6692416757457729","host":"s3://npm-registry-packages"}},"0.0.3-dev.2024-08-28-08-40-02":{"name":"@bad-hacking/remix-express-app","version":"0.0.3-dev.2024-08-28-08-40-02","_id":"@bad-hacking/remix-express-app@0.0.3-dev.2024-08-28-08-40-02","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"dist":{"shasum":"f6d2f6d0aa9b8022444c9b0c7f3f2a701d583b6a","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.3-dev.2024-08-28-08-40-02.tgz","fileCount":11,"integrity":"sha512-Yxm7ssUpFsYPw9nf33mZElyxYyZP0fmbvAqAhJuaAQ+EBXiYMfL2SKVRph/vkCi2YceYAiCdmYZxrcPhONEvJQ==","signatures":[{"sig":"MEUCIQDIrXadQVueOL0GC9vGVuEly3WYKi0l95Ctneq2AIwpSAIgbTn5Oh7lDbvhEc9Sxzd8U+uB4DcLTwU9LcDLfbUydWg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9186},"type":"module","exports":{"./create-app":{"types":"./dist/create-app.d.ts","import":"./dist/create-app.js"},"./dev-server":{"types":"./dist/dev-server.d.ts","import":"./dist/dev-server.js"},"./vite-plugin":{"types":"./dist/vite-plugin.d.ts","import":"./dist/vite-plugin.js"}},"gitHead":"81776546b0b1fe60d6bd4208b32e66e561231f7d","scripts":{"dev":"tsup-node --watch","lint":"biome check","test":"vitest","build":"tsup-node","check":"pnpm run '/^(typecheck|lint|format|test:ci)$/'","format":"prettier --check .","test:ci":"CI=true vitest","typecheck":"tsc"},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"_npmVersion":"10.8.0","description":"✨ Use the same express app in development & production builds.","directories":{},"_nodeVersion":"20.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.7.0","readmeFilename":"README.md","devDependencies":{"tsup":"^8.2.4","vite":"^5.4.0","morgan":"^1.10.0","vitest":"^2.0.5","express":"^4.19.2","prettier":"^3.3.3","typescript":"^5.5.4","@types/node":"^22.2.0","@types/morgan":"^1.9.9","@biomejs/biome":"^1.8.3","@types/express":"^4.17.21","@remix-run/node":"^2.11.1","@remix-run/express":"^2.11.1"},"peerDependencies":{"express":"^4.19.2"},"_npmOperationalInternal":{"tmp":"tmp/remix-express-app_0.0.3-dev.2024-08-28-08-40-02_1724805607464_0.7411791413645084","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@bad-hacking/remix-express-app","version":"0.0.4","type":"module","publishConfig":{"access":"public"},"packageManager":"pnpm@9.7.0","exports":{"./create-app":{"import":"./dist/create-app.js","types":"./dist/create-app.d.ts"},"./dev-server":{"import":"./dist/dev-server.js","types":"./dist/dev-server.d.ts"},"./vite-plugin":{"import":"./dist/vite-plugin.js","types":"./dist/vite-plugin.d.ts"}},"scripts":{"dev":"tsup-node --watch","build":"tsup-node","test":"vitest","test:ci":"CI=true vitest","format":"prettier --check .","lint":"biome check","typecheck":"tsc","check":"pnpm run '/^(typecheck|lint|format|test:ci)$/'"},"devDependencies":{"@biomejs/biome":"^1.8.3","@remix-run/express":"^2.11.1","@remix-run/node":"^2.11.1","@types/express":"^4.17.21","@types/morgan":"^1.9.9","@types/node":"^22.2.0","express":"^4.19.2","morgan":"^1.10.0","prettier":"^3.3.3","tsup":"^8.2.4","typescript":"^5.5.4","vite":"^5.4.0","vitest":"^2.0.5"},"peerDependencies":{"express":"^4.19.2"},"_id":"@bad-hacking/remix-express-app@0.0.4","gitHead":"81776546b0b1fe60d6bd4208b32e66e561231f7d","description":"✨ Use the same express app in development & production builds.","_nodeVersion":"20.12.0","_npmVersion":"10.8.0","dist":{"integrity":"sha512-gupFZU4aF1TTdwo/0mCCd+AR4klH8d9m6U/W/oNOS2xT8r81cDlloIttYohkGPDU3HCuqBQzqOmnUvZtdg2sEw==","shasum":"2c12c2853e28fb72ba0f348c2fd58d36f4ae66d9","tarball":"https://registry.npmjs.org/@bad-hacking/remix-express-app/-/remix-express-app-0.0.4.tgz","fileCount":11,"unpackedSize":10250,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEThmi7Jib+KPWANzbsPTaz3cZ4xidNBtXuUFNO0/mEbAiEAt1LM3ocPPNuCyxF3t4p+bEZ4XjpqsthIq1mlXaLthp0="}]},"_npmUser":{"name":"ehyland","email":"ehyland90@gmail.com"},"directories":{},"maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remix-express-app_0.0.4_1724806714636_0.39354756018119863"},"_hasShrinkwrap":false}},"time":{"created":"2024-08-11T03:07:31.185Z","modified":"2024-08-28T00:58:35.029Z","0.0.1-dev.2024-08-11-13-07-24":"2024-08-11T03:07:31.497Z","0.0.1-dev.2024-08-11-13-10-58":"2024-08-11T03:11:06.276Z","0.0.1-dev.2024-08-11-13-15-58":"2024-08-11T03:16:04.683Z","0.0.1-dev.2024-08-11-13-18-26":"2024-08-11T03:18:32.736Z","0.0.1-dev.2024-08-11-13-23-13":"2024-08-11T03:23:19.421Z","0.0.1-dev.2024-08-11-13-32-03":"2024-08-11T03:32:09.625Z","0.0.1-dev.2024-08-11-13-55-17":"2024-08-11T03:55:23.853Z","0.0.2":"2024-08-11T10:21:21.074Z","0.0.3":"2024-08-11T10:27:05.186Z","0.0.3-dev.2024-08-28-08-37-41":"2024-08-28T00:37:47.486Z","0.0.3-dev.2024-08-28-08-40-02":"2024-08-28T00:40:07.625Z","0.0.4":"2024-08-28T00:58:34.828Z"},"description":"✨ Use the same express app in development & production builds.","maintainers":[{"name":"ehyland","email":"ehyland90@gmail.com"}],"readme":"# Remix Express App <!-- omit in toc -->\n\n✨ Use the same express app in development & production builds.\n\n✨ No additional builds required, fully integrated into the one vite build\n\n✨ Easily start background jobs,\n\n✨ Add additional middleware\n\n✨ Run async tasks before sever starts listening\n\n✨ Listen on a unix socket instead of http port\n\n![](docs/component-diagram.excalidraw.png)\n\n## Usage <!-- omit in toc -->\n\n- [1. Create you express app](#1-create-you-express-app)\n- [2. Create your loader context](#2-create-your-loader-context)\n- [3. Create your dev server entry file](#3-create-your-dev-server-entry-file)\n- [4. Create your production server entry file](#4-create-your-production-server-entry-file)\n- [5. Install vite plugin](#5-install-vite-plugin)\n\n### 1. Create you express app\n\n```ts\n// app/.server/app.ts\n\nimport { createApp } from '@bad-hacking/remix-express-app/create-app';\nimport { createRequestHandler } from '@remix-run/express';\nimport express from 'express';\n\nexport default createApp(async (args) => {\n  const app = express();\n\n  app.disable('x-powered-by');\n\n  // serve built assets\n  args.registerAssetMiddleware(app);\n\n  // non hashed assets like favicon\n  app.use(express.static('build/client', { maxAge: '1h' }));\n\n  // handle SSR requests\n  app.all(\n    '*',\n    createRequestHandler({\n      build: args.build,\n      getLoadContext: args.getLoadContext,\n    }),\n  );\n\n  const port = process.env.PORT || 3000;\n\n  /*\n    Do anything you want here \n\n    await db.connect()\n    await backgroundJobs.start()\n  */\n\n  app.listen(port, () =>\n    console.log(`Express server listening at http://localhost:${port}`),\n  );\n});\n```\n\n### 2. Create your loader context\n\n```ts\n// app/.server/get-load-context.ts\n\nimport { createStore } from '@bad-hacking/zustand';\nimport type { AppLoadContext } from '@remix-run/node';\nimport { type State, type Store, getInitialState } from '~/store/core';\n\ndeclare module '@remix-run/node' {\n  export interface AppLoadContext {\n    store: Store;\n  }\n}\n\nexport function getLoadContext(): AppLoadContext {\n  return {\n    store: createStore<State>(getInitialState()),\n  };\n}\n```\n\n### 3. Create your dev server entry file\n\n```ts\n// app/.server/dev-server.js\n\nimport { startDevServer } from '@bad-hacking/remix-express-app/dev-server';\n\nstartDevServer({\n  importPaths: {\n    expressApp: 'app/.server/app.ts',\n    getLoadContext: 'app/.server/get-load-context.ts',\n  },\n});\n```\n\n### 4. Create your production server entry file\n\n```ts\n// app/.server/prod-server.ts\n\nimport * as build from 'virtual:remix/server-build';\nimport express from 'express';\nimport startApp from './app';\nimport { getLoadContext } from './get-load-context';\n\nstartApp({\n  build: build,\n  getLoadContext: getLoadContext,\n  registerAssetMiddleware: (app) => {\n    app.use(\n      '/assets',\n      express.static('build/client/assets', { immutable: true, maxAge: '1y' }),\n    );\n  },\n});\n```\n\n### 5. Install vite plugin\n\n```ts\n// vite.config.ts\n\nimport { vitePlugin as remix } from '@remix-run/dev';\nimport { remixExpressAppPlugin } from '@bad-hacking/remix-express-app/vite-plugin';\nimport { defineConfig } from 'vite';\n\nexport default defineConfig({\n  plugins: [\n    remix(),\n    remixExpressAppPlugin({\n      productionServerEntry: 'app/.server/prod-server.ts',\n    }),\n  ],\n});\n```\n","readmeFilename":"README.md"}