{"_id":"@remix-run/assets","_rev":"16-a67e44a268ce0cfba11272c3c5ac39f4","name":"@remix-run/assets","dist-tags":{"latest":"1.0.1"},"versions":{"0.0.0":{"name":"@remix-run/assets","version":"0.0.0","keywords":[],"author":"","license":"MIT","_id":"@remix-run/assets@0.0.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"5246406da291b6a6521c8055e5ae5f9ff81b90d1","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.0.0.tgz","fileCount":2,"integrity":"sha512-rzklbV/6egjz4aHPuzR0K4+B271rl5Lxon8BeEuGCyPZPbt/tcoQdTbN8M+2Vz4zgXzHQFmyqYKwV/CakgV/YQ==","signatures":[{"sig":"MEUCIHEerMcSuOsxQUuYgEqo7MHU4FZt1nprLSeFf3zTiLMPAiEA/GlALzu+y88oI8KPaNPyQqMLEEtstvbalYY3vB3pZYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":615},"main":"index.js","type":"commonjs","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"mjackson","email":"mjijackson+npm@gmail.com"},"repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.12.1","description":"Placeholder package for Remix CI/OIDC setup","directories":{},"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/assets_0.0.0_1776896540372_0.24332364008187302","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@remix-run/assets","version":"0.1.0","keywords":["remix","scripts","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.1.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"dd1225b191408d31cddc67c8bfd2204c00b00fa9","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.1.0.tgz","fileCount":67,"integrity":"sha512-uDHdabZZS5frhh1FQL0fr4kMF/4SOX5wU1Dqk7bn08lup5zAjbnbtGqqjWSzC7FuUDkjpla/QYWFt2hf9WH/Vg==","signatures":[{"sig":"MEUCIQCv3QA+00FqJ8OtjKGVu4TcHKroouurUblpbTqx269QlAIgENdhwaA4e3c8YT5wcqMLOXgFgPivuObF1fADoEa86QY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":253766},"type":"module","_from":"file:remix-run-assets-0.1.0.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"pnpm --dir ./bench run bench","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/9fee9a963bd46f28e60e2fe8e78cbda3/remix-run-assets-0.1.0.tgz","_integrity":"sha512-uDHdabZZS5frhh1FQL0fr4kMF/4SOX5wU1Dqk7bn08lup5zAjbnbtGqqjWSzC7FuUDkjpla/QYWFt2hf9WH/Vg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.12.1","description":"Fetch-based server for compiling browser JS/TS assets on demand","directories":{},"_nodeVersion":"24.15.0","dependencies":{"chokidar":"^5.0.0","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","es-module-lexer":"^2.0.0","@remix-run/headers":"0.19.0","@remix-run/route-pattern":"0.20.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.1.0_1776904664753_0.21615866565325148","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@remix-run/assets","version":"0.2.0","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.2.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"bae2b6b729b447b74042233108390122a1e4b5c4","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.2.0.tgz","fileCount":87,"integrity":"sha512-nGqZATiB/24b4ZGY7vdDk5o3gtyqj29b86XOIJeSZPmGSNhCsFf+pDZ/MWmeBmG2tBlbjWIxGUYhGByvVgBTOg==","signatures":[{"sig":"MEYCIQCUT1i1l5ymIUgL1uu1wwx3TDzX4OzS56JDgHncwrr22QIhAMrufC5iuw8119QM1hD9RgCY5tHz+wI+K0S9smTvGSPJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":346686},"type":"module","_from":"file:remix-run-assets-0.2.0.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","bench":"pnpm --dir ./bench run bench","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/0d40da730f5d9e95abc1eece30ae02b1/remix-run-assets-0.2.0.tgz","_integrity":"sha512-nGqZATiB/24b4ZGY7vdDk5o3gtyqj29b86XOIJeSZPmGSNhCsFf+pDZ/MWmeBmG2tBlbjWIxGUYhGByvVgBTOg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.11.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","es-module-lexer":"^2.0.0","@remix-run/headers":"0.19.0","@remix-run/route-pattern":"0.20.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@types/picomatch":"^4.0.3","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.2.0_1777483774165_0.45107055971940246","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@remix-run/assets","version":"0.3.0","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.3.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"b4a0c44f62c55b52c7e9467f8b5fa3b6147ff0a0","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.3.0.tgz","fileCount":91,"integrity":"sha512-WmnAgg+D4BA70r4VccW3LF/XPl192NY+7+SicBCeMLu6KKH7lNW5cFqL9e0GM2bmyL9lP8EVNEd/Ld/c9kCxyg==","signatures":[{"sig":"MEQCIFuX0djr/Mj6sUyNKYBwolJwutyShPT8ryiJ7rty0COtAiBKGdqw0ltIWdvT1ewnOtIcGOrueWe5siRHxJFz74tpmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":367254},"type":"module","_from":"file:remix-run-assets-0.3.0.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./package.json":"./package.json"},"scripts":{"test":"remix-test","bench":"pnpm --dir ./bench run bench","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix-test","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/4fff5992ba2372dfe9b2a8c9fc9eaa94/remix-run-assets-0.3.0.tgz","_integrity":"sha512-WmnAgg+D4BA70r4VccW3LF/XPl192NY+7+SicBCeMLu6KKH7lNW5cFqL9e0GM2bmyL9lP8EVNEd/Ld/c9kCxyg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.11.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","es-module-lexer":"^2.0.0","@remix-run/headers":"0.19.0","@oxc-project/runtime":"^0.121.0","@remix-run/route-pattern":"0.20.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.3.0","@types/picomatch":"^4.0.3","@remix-run/assert":"0.2.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.3.0_1777576263230_0.38933027713565393","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@remix-run/assets","version":"0.4.0","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.4.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"4b23273cb31e6b1c779bef1ed653ee0f81088e48","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.4.0.tgz","fileCount":103,"integrity":"sha512-iIaeQBZx5gNthgATAv10SoZFC1SLnb3GUG+OkwCo0taSPX22XdOdredgpR/jBqVgxI+Jva8QQeAYfPH5WGSKxg==","signatures":[{"sig":"MEQCIDzv6CoCgWb3GTroSvHhOE/I5BDB6uqOOzmEil+pKSs3AiBoco8d7wVRvSC1amwQsxI4I47adiYAUAscCRoBzwxS2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":506866},"type":"module","_from":"file:remix-run-assets-0.4.0.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./package.json":"./package.json"},"scripts":{"test":"remix-test","bench":"pnpm --dir ./bench run bench","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix-test","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/d6567ece7f1b2188266cdb8e1967cef1/remix-run-assets-0.4.0.tgz","_integrity":"sha512-iIaeQBZx5gNthgATAv10SoZFC1SLnb3GUG+OkwCo0taSPX22XdOdredgpR/jBqVgxI+Jva8QQeAYfPH5WGSKxg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.12.1","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.15.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"0.4.1","es-module-lexer":"^2.0.0","@remix-run/headers":"0.20.0","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"0.13.4","@remix-run/route-pattern":"0.21.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.4.0","@types/picomatch":"^4.0.3","@remix-run/assert":"0.2.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.4.0_1779247346364_0.4562721091725581","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@remix-run/assets","version":"0.4.1","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.4.1","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"5df013d4773791f0f017254a8bb1cb5b1517ccfc","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.4.1.tgz","fileCount":107,"integrity":"sha512-Voz6sv+vHTm9hImF0uz1FsYMbWiSYJDKxljBD65LCqUmlVP6bwsXm/wkyybhx3OzpybczejuYQvJ07wA0lCYcg==","signatures":[{"sig":"MEUCIQDG6grjWqKyi8baD5hOW9o1sXIl/x9MSDxC6dhbWhQSdQIgYjeD40PKmftOSHK8vBI6/Bva+BAnDrSiP2HK7epK8LM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":508121},"type":"module","_from":"file:remix-run-assets-0.4.1.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./package.json":"./package.json"},"scripts":{"test":"remix-test","bench":"pnpm --dir ./bench run bench","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix-test","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/f143ad6fd2b09f3dba2c821509c57e06/remix-run-assets-0.4.1.tgz","_integrity":"sha512-Voz6sv+vHTm9hImF0uz1FsYMbWiSYJDKxljBD65LCqUmlVP6bwsXm/wkyybhx3OzpybczejuYQvJ07wA0lCYcg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.12.1","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.15.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"0.4.1","es-module-lexer":"^2.0.0","@remix-run/headers":"0.21.0","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"0.13.5","@remix-run/route-pattern":"0.21.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.4.1","@types/picomatch":"^4.0.3","@remix-run/assert":"0.2.1","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.4.1_1779308327595_0.42414568467417313","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@remix-run/assets","version":"0.4.2","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.4.2","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"5f20519b07a12869031b51ef66b0d55c1051ceb7","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.4.2.tgz","fileCount":103,"integrity":"sha512-ecPwUF0fL3RIQNthpd5ZihwyqW+Huc15pUraSroBTPN99WvK7e72m6Q4v+G3kukyygHyZLHOiirbxhE6iwOgFw==","signatures":[{"sig":"MEUCIAoLidzVjsfOFOZJyHUWvskHYv+sK39H8VLBbjCJqsFOAiEAycbNKyE181MgdfYS99z1tW3MBViMYPITezvnw8Xt8DI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":502930},"type":"module","_from":"file:remix-run-assets-0.4.2.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./package.json":"./package.json"},"scripts":{"test":"remix-test","bench":"pnpm --dir ./bench run bench","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix-test","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/9f860ef9de8b88a514a276600476cfcb/remix-run-assets-0.4.2.tgz","_integrity":"sha512-ecPwUF0fL3RIQNthpd5ZihwyqW+Huc15pUraSroBTPN99WvK7e72m6Q4v+G3kukyygHyZLHOiirbxhE6iwOgFw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.13.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.16.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"0.4.1","es-module-lexer":"^2.0.0","@remix-run/headers":"0.21.1","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"0.13.6","@remix-run/route-pattern":"0.22.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.4.2","@types/picomatch":"^4.0.3","@remix-run/assert":"0.2.1","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.4.2_1780078674477_0.09900173446301008","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@remix-run/assets","version":"0.4.3","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.4.3","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"4f1bc6e5546bab95f39117f4e8c3ee8781f53a30","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.4.3.tgz","fileCount":103,"integrity":"sha512-3YKANQIc/dATxy9+7VpaILXZ4KPOP7y888EbyAphvEu++jOILpjHxMi5N+fhXoRZxpmL+CXaB7PKEwbsAAnKpA==","signatures":[{"sig":"MEUCIQDIkyvr0b6gT/SdOM2ld5RqftXtFs3fRtB/mqkA7l7UvQIgOBCLBmlbEljk0NuOIjdjEsix6eJ4OYefqs9jPUDKe7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":502930},"type":"module","_from":"file:remix-run-assets-0.4.3.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./package.json":"./package.json"},"scripts":{"test":"remix-test","bench":"pnpm --dir ./bench run bench","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix-test","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/9d21c09d9f7f971533f08a51c5896fbd/remix-run-assets-0.4.3.tgz","_integrity":"sha512-3YKANQIc/dATxy9+7VpaILXZ4KPOP7y888EbyAphvEu++jOILpjHxMi5N+fhXoRZxpmL+CXaB7PKEwbsAAnKpA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.13.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.16.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"0.4.1","es-module-lexer":"^2.0.0","@remix-run/headers":"0.21.1","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"0.13.6","@remix-run/route-pattern":"0.22.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.5.0","@types/picomatch":"^4.0.3","@remix-run/assert":"0.3.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.4.3_1780683969370_0.17718752384809378","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@remix-run/assets","version":"0.4.4","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.4.4","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"6a865802b666b89a10345dc61b7fe29934b85c7a","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.4.4.tgz","fileCount":103,"integrity":"sha512-RvENzqsz4avj+PuBRy4AarY0JVGzacy7v9VH/LQuP14xpLPjC134hvKcQJNPkc8vV83d7r8WA/5JXcEESqyiUQ==","signatures":[{"sig":"MEQCIGbenVUwyag4qY9X673SoVrkdMIKQGVt26T0glDrnDtLAiA51Xr2QngfpoMHndN4X306GrdrPE4GkeYHL8h0KLPdBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":503235},"type":"module","_from":"file:remix-run-assets-0.4.4.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./package.json":"./package.json"},"scripts":{"test":"remix-test","bench":"pnpm --dir ./bench run bench","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix-test","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/c500c331468817c6a77adf130ee91bff/remix-run-assets-0.4.4.tgz","_integrity":"sha512-RvENzqsz4avj+PuBRy4AarY0JVGzacy7v9VH/LQuP14xpLPjC134hvKcQJNPkc8vV83d7r8WA/5JXcEESqyiUQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.13.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.17.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"0.4.2","es-module-lexer":"^2.0.0","@remix-run/headers":"0.21.1","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"0.13.7","@remix-run/route-pattern":"0.23.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.5.0","@types/picomatch":"^4.0.3","@remix-run/assert":"0.3.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.4.4_1782932603629_0.4889279009285197","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@remix-run/assets","version":"0.5.0","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.5.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"82e16e2e75df570a0fe0a9c3be2a9233cd64ae28","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.5.0.tgz","fileCount":117,"integrity":"sha512-wz6+3gX85ZalGuFPf9mBnozlUt0sK8634xmH8tU63DrsThkyi5oFtZHwFs8mAsTUR7PEzUbJIkjUb2qM2IXsXA==","signatures":[{"sig":"MEUCIQCr7jk7D21UyeDrdoMSAQ6drbOvOl+S3+sE0sVIrNov1QIgInygNjHZ4krMwMMVguPcOSDwAKieaBQvxuAxa6WeD90=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":665632},"type":"module","_from":"file:remix-run-assets-0.5.0.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./types/hmr":{"types":"./dist/types/hmr.d.ts"},"./package.json":"./package.json"},"scripts":{"test":"remix test","bench":"pnpm --dir ./bench run bench","build":"tsc -p tsconfig.build.json && node ../../scripts/copy-package-type-only-exports.ts .","clean":"git clean -fdX","test:bun":"bun x --bun remix test --type server","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/df99a706fb82ac18113797f11b43f4b7/remix-run-assets-0.5.0.tgz","_integrity":"sha512-wz6+3gX85ZalGuFPf9mBnozlUt0sK8634xmH8tU63DrsThkyi5oFtZHwFs8mAsTUR7PEzUbJIkjUb2qM2IXsXA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.16.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.18.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"^0.4.2","es-module-lexer":"^2.0.0","@remix-run/headers":"^0.21.1","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"^0.13.7","@remix-run/route-pattern":"^0.24.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/ui":"0.5.0","@remix-run/test":"0.6.0","@types/picomatch":"^4.0.3","@remix-run/assert":"0.3.0","@remix-run/node-hmr":"^0.1.0","@remix-run/node-tsx":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.5.0_1786666467339_0.09992967795360874","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@remix-run/assets","version":"0.6.0","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.6.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"ad4b50c22f509fc9793eef861b6c30bdd3161558","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.6.0.tgz","fileCount":121,"integrity":"sha512-mIYfP8PCCn5thlEhUhYffb9XbNqNVSmsXfW9+Fsp7go5BW0XTJtugMW1K7oo8TbXEo/xHXSGg4hWPdrBmTnsDg==","signatures":[{"sig":"MEUCIFLS4xk2R7Oelkqxh6ycVYuOZKDvCR3295KW7Xsja9+ZAiEAjZUBp9JCIbep3nbGU3a2hNvvDi+7AY4ZHNBaTRMoFC4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":691716},"type":"module","_from":"file:/tmp/remix-publish-assets-Tch4Zd/remix-run-assets-0.6.0.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./types/hmr":{"types":"./dist/types/hmr.d.ts"},"./package.json":"./package.json"},"scripts":{"test":"remix test","bench":"pnpm --dir ./bench run bench","build":"tsc -p tsconfig.build.json && node ../../scripts/copy-package-type-only-exports.ts .","clean":"git clean -fdX","test:bun":"bun x --bun remix test --type server","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/remix-publish-assets-Tch4Zd/remix-run-assets-0.6.0.tgz","_integrity":"sha512-mIYfP8PCCn5thlEhUhYffb9XbNqNVSmsXfW9+Fsp7go5BW0XTJtugMW1K7oo8TbXEo/xHXSGg4hWPdrBmTnsDg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.17.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.19.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"^0.4.2","es-module-lexer":"^2.0.0","@remix-run/headers":"^0.21.1","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"^0.13.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/ui":"0.8.0","@remix-run/test":"0.6.0","@types/picomatch":"^4.0.3","@remix-run/assert":"0.3.0","@remix-run/node-hmr":"^0.1.0","@remix-run/node-tsx":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.6.0_1788202609883_0.6766709791631262","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@remix-run/assets","version":"0.7.0","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.7.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"9ece2fcb5c22ea05abc1eff26fc6ef9708c252ec","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.7.0.tgz","fileCount":129,"integrity":"sha512-zdYyxyzh+lBH+cNfj2Vm+sItTMPAbIpUGgqHxiDDbFgXEyrct8vNLnBE7NXeIEGO7QOiez1yGzo7NR316VAhhA==","signatures":[{"sig":"MEUCIE1A/zigTn0ts9/dpGtZdbl23L63bTNFaL1q4A7nm2BDAiEAuYN1nWTbR6P1S0GtE+Kc9F0W+ESIYESmKdHhiJH2TvU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":759166},"type":"module","_from":"file:/tmp/remix-publish-assets-C2HpwD/remix-run-assets-0.7.0.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./types/hmr":{"types":"./dist/types/hmr.d.ts"},"./package.json":"./package.json"},"scripts":{"test":"remix test","bench":"pnpm --dir ./bench run bench","build":"tsc -p tsconfig.build.json && node ../../scripts/copy-package-type-only-exports.ts .","clean":"git clean -fdX","test:bun":"bun x --bun remix test --type server","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/remix-publish-assets-C2HpwD/remix-run-assets-0.7.0.tgz","_integrity":"sha512-zdYyxyzh+lBH+cNfj2Vm+sItTMPAbIpUGgqHxiDDbFgXEyrct8vNLnBE7NXeIEGO7QOiez1yGzo7NR316VAhhA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.19.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.20.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"^0.4.2","es-module-lexer":"^2.0.0","@remix-run/headers":"^0.21.1","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"^0.13.7"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.60.0","typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/ui":"0.9.0","@remix-run/test":"0.6.0","@types/picomatch":"^4.0.3","@remix-run/assert":"0.3.0","@remix-run/node-hmr":"^0.2.0","@remix-run/node-tsx":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.7.0_1788908535545_0.04667425288338256","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@remix-run/assets","version":"0.7.1","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.7.1","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"92972ecdcf4463d2a3bf38f6961827578af68d1b","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.7.1.tgz","fileCount":129,"integrity":"sha512-DzKt33VzM/ARaYD32vku98cX+OHzKB+uWvfV1JqXX+spQuehAPRyn2rk9eaqxX+svGy8KZ6pJZdOSq6Hn8Rgvg==","signatures":[{"sig":"MEUCIHmyk8GdXxPvu9pu6TVFHWh8zk6T8EJ+VHjzSgvUrYm8AiEA51D7HIAR16GjH2+sVGg73b1wz8769L0BGSijKgmoQpU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCByrDVOW3pXfK1NdP0nScIqS/xza0AdE7Mv2u5V+Nh7wIhAJB3AGAmOZR6ZmxGy7LpKmci6mU+Xvpz9SU65Pk+yIsw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":759167},"type":"module","_from":"file:/tmp/remix-publish-assets-M2V6Lc/remix-run-assets-0.7.1.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./types/hmr":{"types":"./dist/types/hmr.d.ts"},"./package.json":"./package.json"},"scripts":{"test":"remix test","bench":"pnpm --dir ./bench run bench","build":"tsc -p tsconfig.build.json && node ../../scripts/copy-package-type-only-exports.ts .","clean":"git clean -fdX","test:bun":"bun x --bun remix test --type server","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/remix-publish-assets-M2V6Lc/remix-run-assets-0.7.1.tgz","_integrity":"sha512-DzKt33VzM/ARaYD32vku98cX+OHzKB+uWvfV1JqXX+spQuehAPRyn2rk9eaqxX+svGy8KZ6pJZdOSq6Hn8Rgvg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.19.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"_nodeVersion":"24.20.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"^0.4.2","es-module-lexer":"^2.0.0","@remix-run/headers":"^0.21.2","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"^0.13.7"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.60.0","typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/ui":"0.10.0","@remix-run/test":"0.6.1","@types/picomatch":"^4.0.3","@remix-run/assert":"0.3.0","@remix-run/node-hmr":"^0.2.0","@remix-run/node-tsx":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.7.1_1789770868436_0.7368160800860566","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@remix-run/assets","version":"0.8.0","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@0.8.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"4bc5eb23d1eb3faa41a0db02475c8a84d1cc15a8","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-0.8.0.tgz","fileCount":145,"integrity":"sha512-+/mLP7w9bynLYRf77bQ5adwtQT2TgtrS7iu1VLtdkMsDOvowJ+XJ08MIS+DEJAhk4HG8jUnf0M+hoRBiFRK3QA==","signatures":[{"sig":"MEQCIA6+fuujNQcLDDu1XzxlaPN6rIY6X8UejBaJbBxMWezgAiB+5hTr427RfckmiRtn1qsLV7cfUUu/A0ialq+Osy301g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFtqx6prytHekvcra4jsitI2LzNpujyvotb9GV6aYjW+AiBWnsSpjLvUmWK54ahk1joXegnx6vBST1Nv28KGvVHnhw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":867117},"type":"module","_from":"file:/tmp/remix-publish-assets-AT6ZBG/remix-run-assets-0.8.0.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./types/hmr":{"types":"./dist/types/hmr.d.ts"},"./package.json":"./package.json"},"scripts":{"test":"remix test","bench":"pnpm --dir ./bench run bench","build":"tsc -p tsconfig.build.json && node ../../scripts/copy-package-type-only-exports.ts .","clean":"git clean -fdX","test:bun":"bun x --bun remix test --type server","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/remix-publish-assets-AT6ZBG/remix-run-assets-0.8.0.tgz","_integrity":"sha512-+/mLP7w9bynLYRf77bQ5adwtQT2TgtrS7iu1VLtdkMsDOvowJ+XJ08MIS+DEJAhk4HG8jUnf0M+hoRBiFRK3QA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.19.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"^0.4.3","es-module-lexer":"^2.0.0","@remix-run/headers":"^0.21.3","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"^0.13.8"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.60.0","typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/ui":"0.11.0","@remix-run/test":"0.6.2","@types/picomatch":"^4.0.3","@remix-run/assert":"0.3.1","@remix-run/node-hmr":"^0.2.1","@remix-run/node-tsx":"^0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/assets_0.8.0_1790631661791_0.46661298834794285","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@remix-run/assets","version":"1.0.0","keywords":["remix","scripts","styles","css","assets","transform","server"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/assets@1.0.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"954d405a07e4e7419f15b822b08e0cf02e46fa8c","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-1.0.0.tgz","fileCount":145,"integrity":"sha512-eJbsMBtN1QgWep7pNvjbw9+8ZiOfEpjZ6kcCoGFr4KggnmSCKf0QFw3xf5OGy790fvKPLw+8f9GjUZVnk3YHoQ==","signatures":[{"sig":"MEUCIDKPBRGWaaw3aD3ofk2ENF+J3nX8p+fr4T93Mpp0vGaSAiEA7HukuJr2AUjJbY4DwffM6gIsTCKXf95FZX1FrsAMNJw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCr3ejubtvdzSlllUv1GtaSCqf1Jw95XRa/oHE4xb6V7wIhAN/Lk+CSxhOLajgrM7RJxXk1l0+A0IX1298ogDofX2UM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":867216},"type":"module","_from":"file:/tmp/remix-publish-assets-l0NflL/remix-run-assets-1.0.0.tgz","exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./types/hmr":{"types":"./dist/types/hmr.d.ts"},"./package.json":"./package.json"},"scripts":{"test":"remix test","bench":"pnpm --dir ./bench run bench","build":"tsc -p tsconfig.build.json && node ../../scripts/copy-package-type-only-exports.ts .","clean":"git clean -fdX","test:bun":"bun x --bun remix test --type server","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"de38ccc7-2eb3-467d-93c1-47183251c86b"}},"_resolved":"/tmp/remix-publish-assets-l0NflL/remix-run-assets-1.0.0.tgz","_integrity":"sha512-eJbsMBtN1QgWep7pNvjbw9+8ZiOfEpjZ6kcCoGFr4KggnmSCKf0QFw3xf5OGy790fvKPLw+8f9GjUZVnk3YHoQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.19.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"^1.0.0","es-module-lexer":"^2.0.0","@remix-run/headers":"^1.0.0","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.60.0","typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/test":"1.0.0","@types/picomatch":"^4.0.3","@remix-run/assert":"1.0.0","@remix-run/node-hmr":"^1.0.0","@remix-run/node-tsx":"^1.0.0","@remix-run/component":"1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/assets_1.0.0_1790895388398_0.4613264782137416","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"_id":"@remix-run/assets@1.0.1","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"2440059aabb9a96fb645c3545d51fc01cb7ab58e","tarball":"https://registry.npmjs.org/@remix-run/assets/-/assets-1.0.1.tgz","fileCount":145,"integrity":"sha512-Dt5vjD8FgQRhCfwqCS1ivWVIsR39QQXDseqBIbWDyfvNk39cHG99vImKERZmbHfT2wgO0yOX7Kq7qpZhso9tYg==","signatures":[{"sig":"MEYCIQDAFp/msMP3KwVu7JogelXgypwrFg7UjWem70WzGK/rCgIhAK+9zlAlVn4ZVZUBocucxlWjeB72xwHhr5eTtHdEv/yb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD//+5J7q2viV71lwSubZGETrIg9kIunZTdM/79bcEUFwIgYDDSsZLSU6fM667fUo82rt8ZB8qu7EcSoFlpO1zdGgA="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fassets@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":874845},"name":"@remix-run/assets","type":"module","_from":"file:/tmp/remix-publish-assets-ojibu2/remix-run-assets-1.0.1.tgz","author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"exports":{".":{"types":"./dist/assets.d.ts","default":"./dist/assets.js"},"./types/hmr":{"types":"./dist/types/hmr.d.ts"},"./package.json":"./package.json"},"license":"MIT","scripts":{"test":"remix test","bench":"pnpm --dir ./bench run bench","build":"tsc -p tsconfig.build.json && node ../../scripts/copy-package-type-only-exports.ts .","clean":"git clean -fdX","test:bun":"bun x --bun remix test --type server","typecheck":"tsc --noEmit"},"version":"1.0.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"de38ccc7-2eb3-467d-93c1-47183251c86b"}},"homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","keywords":["remix","scripts","styles","css","assets","transform","server"],"_resolved":"/tmp/remix-publish-assets-ojibu2/remix-run-assets-1.0.1.tgz","_integrity":"sha512-Dt5vjD8FgQRhCfwqCS1ivWVIsR39QQXDseqBIbWDyfvNk39cHG99vImKERZmbHfT2wgO0yOX7Kq7qpZhso9tYg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"_npmVersion":"11.19.0","description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","directories":{},"maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"chokidar":"^5.0.0","picomatch":"^4.0.4","oxc-minify":"^0.121.0","oxc-parser":"^0.121.0","get-tsconfig":"^4.13.6","lightningcss":"^1.32.0","magic-string":"^0.30.21","oxc-resolver":"^11.19.1","oxc-transform":"^0.121.0","source-map-js":"^1.2.1","@remix-run/mime":"^1.0.0","es-module-lexer":"^2.0.0","@remix-run/headers":"^1.0.1","@oxc-project/runtime":"^0.121.0","@remix-run/file-storage":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"^1.60.0","typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/test":"1.0.0","@types/picomatch":"^4.0.3","@remix-run/assert":"1.0.0","@remix-run/node-hmr":"^1.0.0","@remix-run/node-tsx":"^1.0.0","@remix-run/component":"1.1.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/assets_1.0.1_1792780704847_0.731799372662411"}}},"time":{"created":"2026-04-22T22:22:20.270Z","modified":"2026-10-23T18:38:25.345Z","0.0.0":"2026-04-22T22:22:20.512Z","0.1.0":"2026-04-23T00:37:44.906Z","0.2.0":"2026-04-29T17:29:34.321Z","0.3.0":"2026-04-30T19:11:03.365Z","0.4.0":"2026-05-20T03:22:26.497Z","0.4.1":"2026-05-20T20:18:47.744Z","0.4.2":"2026-05-29T18:17:54.624Z","0.4.3":"2026-06-05T18:26:09.519Z","0.4.4":"2026-07-01T19:03:23.773Z","0.5.0":"2026-08-14T00:14:27.503Z","0.6.0":"2026-08-31T18:56:50.087Z","0.7.0":"2026-09-08T23:02:15.730Z","0.7.1":"2026-09-18T22:34:28.558Z","0.8.0":"2026-09-28T21:41:01.884Z","1.0.0":"2026-10-01T22:56:28.515Z","1.0.1":"2026-10-23T18:38:24.938Z"},"bugs":{"url":"https://github.com/remix-run/remix/issues"},"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","homepage":"https://github.com/remix-run/remix/tree/main/packages/assets#readme","keywords":["remix","scripts","styles","css","assets","transform","server"],"repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/assets"},"description":"Fetch-based server for compiling browser JS/TS and CSS assets on demand","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"readme":"# assets\n\nFetch-based server for compiling browser assets on demand.\n\n## Features\n\n- **On-Demand Compilation** - Compile browser scripts and styles on demand\n- **File Serving** - Serve configured file assets like images and fonts with optional transforms\n- **Access Control** - Control exactly which files and packages can be served\n- **Preloads** - Generate preload URLs for scripts and styles based on imports\n- **Inspection** - List browser-reachable assets and explain URL-to-file mappings\n- **Caching** - Conservative caching by default with stable URLs, ETags, and revalidation\n- **Optional Fingerprinting** - Content-based fingerprinted URLs for long-lived browser caching\n- **Source Maps** - Serve inline or external sourcemaps\n- **Hot Module Reloading** - Handle live code updates in development\n- **Script Loaders** - Post-process compiled JavaScript with Node-compatible loaders\n\n## Installation\n\n```sh\nnpm i remix\n```\n\nThe optional image transform examples also use Sharp:\n\n```sh\nnpm i sharp\n```\n\n## Usage\n\nUse `createAssetServer` to serve browser assets from a URL namespace in your app.\n\n```ts\nimport { createRouter } from 'remix/router'\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  files: {\n    extensions: ['.svg', '.png', '.jpg', '.jpeg', '.woff2'],\n  },\n})\n\nlet router = createRouter()\n\nrouter.get('/assets/*', ({ request }) => {\n  return assetServer.fetch(request)\n})\n```\n\nThis example gives you an `/assets/*` endpoint that serves compiled browser source from `public/` directories throughout `app/` and from the `remix` package.\n\n## Shared Configuration\n\nKeep JSON-compatible asset mapping, access, and file-type settings in `remix.json` so the running\nserver and Remix CLI use the same configuration:\n\n```jsonc\n{\n  \"$schema\": \"./node_modules/remix/schema/remix.json\",\n  \"assets\": {\n    \"basePath\": \"/assets\",\n    \"mounts\": {\n      \"app\": \"app\",\n      \"npm\": \"node_modules\",\n    },\n    \"allowFiles\": [\"app/routes.ts\", \"app/**/public/**\"],\n    \"allowPackages\": [\"remix\"],\n    \"denyFiles\": [\"app/**/*.test.*\"],\n    \"files\": {\n      \"extensions\": [\".svg\", \".png\", \".jpg\", \".woff2\"],\n    },\n  },\n}\n```\n\nLoad it from application code and add runtime-only behavior there:\n\n```ts\nimport { createAssetServer, defineFileTransform } from 'remix/assets'\nimport { loadConfig } from 'remix/cli'\nimport sharp from 'sharp'\n\nlet config = await loadConfig(import.meta.dirname)\nif (config.assets === undefined) throw new Error('Missing assets configuration')\nif (config.assets.files === undefined) throw new Error('Missing asset file configuration')\n\nlet assetServer = createAssetServer({\n  ...config.assets,\n  files: {\n    ...config.assets.files,\n    transforms: {\n      webp: defineFileTransform({\n        extensions: ['.png', '.jpg'],\n        async transform(bytes) {\n          return {\n            content: await sharp(bytes).webp({ quality: 80 }).toBuffer(),\n            extension: '.webp',\n          }\n        },\n      }),\n    },\n  },\n})\n```\n\n`loadConfig()` accepts either a config file or a directory. When given a directory, it searches\nupward for the nearest `remix.json`. Run `remix assets` to list reachable files, or\n`remix assets inspect <url-or-file>` to inspect one mapping and its access decision.\n\n## Root Directory\n\nUse `rootDir` to specify the root directory of the asset server, which is used to resolve relative file paths. Defaults to `process.cwd()`.\n\n```ts\nimport * as path from 'node:path'\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  rootDir: path.resolve(import.meta.dirname, '..'),\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n})\n```\n\n## Access Control\n\nYou must provide an `allowFiles` list to specify which files are allowed to be served. You can also allow whole packages by name with `allowPackages`. `denyFiles` is optional and takes precedence over both `allowFiles` and `allowPackages`.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  denyFiles: ['app/**/*.server.*'],\n})\n```\n\nValues for `allowFiles` and `denyFiles` are file paths or globs. Relative values are resolved from `rootDir`. Absolute file paths match exactly, and absolute directory paths also match their descendants.\n\nValues for `allowPackages` are exact package names. Dependencies and installed optional dependencies of packages in `allowPackages` are also allowed automatically. Peer dependencies must be listed explicitly if they should be browser-reachable. Allowed package files must still be reachable through `mounts`.\n\n## Mounts\n\nBy default, the asset server mounts the `app` directory at `/app` and `node_modules` at `/npm`. Use `mounts` to replace these defaults. Keys are public paths relative to `basePath`, and values are directory paths relative to `rootDir`.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  mounts: {\n    source: 'app',\n    vendor: 'node_modules',\n  },\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n})\n```\n\nPackage managers that install outside `rootDir`, such as pnpm's global virtual store, are handled without configuration: the asset server reads the store location from the nearest `node_modules/.modules.yaml` and mounts it internally so those package files still resolve to public URLs. A store that a configured mount already covers, such as pnpm's default `node_modules/.pnpm`, is left alone.\n\n### File watching\n\nThe file system is watched by default so source changes are picked up without requiring a server restart.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n})\n```\n\nWhen finished with the asset server, call `await assetServer.close()` to clean up the file watcher.\n\n```ts\nawait assetServer.close()\n```\n\nYou can disable file watching if the files on disk won't change, or if watching is managed at a higher level (e.g. Node's `--watch` flag).\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  watch: false,\n})\n```\n\nYou can optionally provide an array of glob patterns to the `watch.ignore` option:\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  watch: {\n    ignore: ['**/node_modules/**'],\n  },\n})\n```\n\n## Script Entries\n\nUse `assetServer.getScriptEntry()` to get everything needed to load a script and its dependencies.\n\n```ts\nlet { href, importMap, preloads } = await assetServer.getScriptEntry('app/assets/entry.tsx')\n```\n\nScript entry metadata is cached between calls and refreshed when a watched file changes. Each\ncall returns a separate copy, so changing the returned object does not affect later calls.\n\nThis can be used when rendering a document shell:\n\n```tsx\nimport type { Handle, RemixNode } from 'remix/component'\nimport { ImportMap } from 'remix/component/server'\nimport { assetServer } from './assets.ts'\n\nlet { href, importMap, preloads } = await assetServer.getScriptEntry('app/assets/entry.tsx')\n\nexport function Document(handle: Handle<{ children: RemixNode }>) {\n  return () => (\n    <html>\n      <head>\n        {/* ... */}\n        <ImportMap value={importMap} />\n        {preloads.map((preload) => (\n          <link rel=\"modulepreload\" href={preload} />\n        ))}\n        <script type=\"module\" src={href} />\n      </head>\n      <body>{handle.props.children}</body>\n    </html>\n  )\n}\n```\n\nThis can also be used for resolved client entries in [`remix/component`](https://github.com/remix-run/remix/tree/main/packages/component) when using `import.meta.url` as the client entry ID:\n\n```tsx\nimport { renderToStream } from 'remix/component/server'\nimport { assetServer } from './assets.ts'\n\nlet stream = renderToStream(<App />, {\n  async resolveClientEntry(entryId, component) {\n    let { href, importMap, preloads } = await assetServer.getScriptEntry(entryId)\n\n    return {\n      href,\n      importMap,\n      preloads,\n      exportName: entryId.split('#')[1] || component.name,\n    }\n  },\n  // ...\n})\n```\n\n## Hrefs\n\nUse `assetServer.getHref()` when you need the public URL for a served asset. You can provide a root-relative or absolute file path, or a `file://` URL.\n\n```ts\nlet src = await assetServer.getHref('app/media/public/logo.svg')\n// '/assets/app/media/public/logo.svg'\n```\n\n## Inspection\n\nUse `getAssets()` for a sorted list of files that are currently browser-reachable through the\nasset server. Use `getAssetDetails()` with a public URL or file path to inspect its mapping, file\ntype, access rules, and reachability status.\n\n```ts\nlet assets = await assetServer.getAssets()\n// [{ url: '/assets/app/actions/public/entry.ts', filePath: '/project/app/actions/public/entry.ts', ... }]\n\nlet details = await assetServer.getAssetDetails('/assets/app/actions/public/entry.ts')\n// { status: 'reachable', type: 'script', ... }\n```\n\nFor configured `files` assets, you can also pass a `transform` pipeline to build a request URL with custom file transforms. Basic transforms are written as strings, while dynamic transforms use `[name, param]` tuples.\n\n```ts\nlet src = await assetServer.getHref('app/media/public/image.png', {\n  transform: [['resize', '100x100'], 'webp'],\n})\n// '/assets/app/media/public/image.png?transform=resize%3A100x100&transform=webp'\n```\n\n## Import Maps\n\nScripts retain their imports as authored and rely on import maps for resolution in the browser. `assetServer.getScriptEntry()` returns the import map for a single rendered script entry. Use `assetServer.getImportMap()` directly when you need to generate a combined import map for multiple script roots or other custom graph-level behavior.\n\n```ts\nlet importMap = await assetServer.getImportMap(['app/assets/entry.tsx', 'app/assets/search.tsx'])\n```\n\nWithout fingerprinting, import maps resolve authored specifiers to stable asset URLs. With fingerprinting enabled, the same import maps resolve stable asset URLs to content-fingerprinted asset URLs.\n\n## Preloads\n\nUse `assetServer.getPreloads()` when rendering HTML so you can turn the returned URLs into `<link rel=\"modulepreload\">`, stylesheet preload tags, or `Link` headers for one or more assets and their dependencies. You can provide root-relative or absolute file paths, or `file://` URLs.\n\n```ts\nlet preloads = await assetServer.getPreloads([\n  'app/actions/public/entry.ts',\n  'app/search/public/search.tsx',\n])\n// [\n//   '/assets/app/actions/public/entry.ts',\n//   '/assets/app/search/public/search.tsx',\n//   '/assets/app/search/public/utils.ts',\n//   '/assets/npm/remix/component/index.js',\n//   ...etc\n// ]\n```\n\n## Fingerprinting\n\nBy default, assets are served at stable URLs with ETags and `Cache-Control: no-cache`.\n\nIf you want clients to cache assets aggressively without revalidation, you can opt into content-based fingerprinting.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  watch: false,\n  fingerprint: true,\n})\n```\n\nWhen fingerprinting is enabled, assets use a `.@<fingerprint>` segment before the file extension and are served with `Cache-Control: public, max-age=31536000, immutable`.\n\nFingerprints are based on emitted asset contents. This allows unchanged assets to keep the same URL across deployments, but it assumes that files on disk won't change after a URL is generated, so fingerprinting requires `watch: false`.\n\n## Target\n\nUse `target` to lower emitted syntax to a specific browser support policy and/or ECMAScript version.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  target: {\n    chrome: '109',\n    ios: '15.6',\n    es: '2020',\n  },\n})\n```\n\nSupported target options are `chrome`, `firefox`, `safari`, `edge`, `opera`, `ios`, `samsung`, and `es` (ECMAScript version).\n\n### Source Maps\n\nEnable sourcemaps with either `'external'` or `'inline'` using `sourceMaps`:\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  sourceMaps: 'external',\n})\n```\n\nBy default, sourcemap `sources` use URLs so they're presented alongside the compiled output in your browser's developer tools. You can also use file system paths instead with `sourceMapSourcePaths`:\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  sourceMaps: 'inline',\n  sourceMapSourcePaths: 'absolute',\n})\n```\n\n### Minification\n\nEnable minification with `minify`:\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  minify: true,\n})\n```\n\n## Optimizing Barrel File Imports\n\nThe asset server rewrites named imports through eligible barrel files to the modules that provide their bindings. This avoids intermediary requests and unused dependency branches.\n\nAn import can only be optimized if every module removed from its dependency graph is marked side-effect free by its owning `package.json`.\n\n```json\n{\n  \"sideEffects\": false\n}\n```\n\nIf only some modules have side effects, `sideEffects` can be set to an array of file paths or glob patterns.\n\n```json\n{\n  \"sideEffects\": [\"./register.ts\"]\n}\n```\n\nFor example, an application might import `css` from `remix/component`:\n\n```ts\n// entry.ts\nimport { css } from 'remix/component'\n```\n\nThat binding passes through two barrel files before reaching its implementation:\n\n```ts\n// remix/src/component.ts\nexport * from '@remix-run/component'\n```\n\n```ts\n// @remix-run/component/dist/index.js\nexport { css } from './style/css-mixin.js'\n// ...other exports\n```\n\nAfter optimization, the served `entry.ts` module imports the binding directly from its implementation and skips all other exports from the barrel file:\n\n```ts\n// entry.ts\nimport { css } from '/assets/npm/@remix-run/component/dist/style/css-mixin.js'\n```\n\n## Script Options\n\n### Define\n\nUse `scripts.define` to replace global identifiers with constant expressions.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  scripts: {\n    define: {\n      'process.env.NODE_ENV': '\"production\"',\n    },\n  },\n})\n```\n\nValues are injected exactly as defined, so string literals must include their own quotes, e.g. `process.env.NODE_ENV` must be `\"production\"` rather than `production`.\n\n### External Imports\n\nUse `scripts.external` to leave specific import specifiers unchanged by providing an array of specifiers.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  scripts: {\n    external: ['my-external-import'],\n  },\n})\n```\n\n### Loaders\n\nUse `scripts.loaders` to post-process compiled JavaScript. Loaders use the same function signature and chaining behavior as synchronous [`load` hooks in Node's module API](https://nodejs.org/api/module.html#customization-hooks).\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  denyFiles: ['app/**/*.test.*'],\n  scripts: {\n    loaders: [\n      (url, context, nextLoad) => {\n        let result = nextLoad(url, context)\n        return {\n          ...result,\n          source: `${result.source}\\nconsole.log('loaded')`,\n        }\n      },\n    ],\n  },\n})\n```\n\nLoaders receive JavaScript after the asset server transforms TypeScript and JavaScript, and run before HMR analysis and minification. They must return `format: 'module'`. Import attributes are not supported.\n\n## File Options\n\nUse `files` to serve additional leaf assets like images and fonts. File extensions must include the leading dot and are only served when explicitly configured.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  files: {\n    extensions: ['.svg', '.png', '.jpg', '.jpeg', '.woff2'],\n  },\n})\n```\n\nJavaScript/TypeScript and CSS extensions not supported in `files.extensions` as they are not leaf assets and have their own module systems.\n\n### File transforms\n\nFiles can optionally be transformed before serving.\n\nUse `files.transforms` for named transforms that callers can opt into per request, provided via the `transform` option when calling `assetServer.getHref()`.\n\n```ts\nimport { createAssetServer, defineFileTransform } from 'remix/assets'\nimport sharp from 'sharp'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  files: {\n    extensions: ['.svg', '.png', '.jpg', '.jpeg', '.woff2'],\n    transforms: {\n      webp: defineFileTransform({\n        extensions: ['.png', '.jpg', '.jpeg'],\n        async transform(bytes) {\n          return {\n            content: await sharp(bytes).webp({ quality: 80 }).toBuffer(),\n            extension: '.webp',\n          }\n        },\n      }),\n    },\n  },\n})\n\nlet imageUrl = await assetServer.getHref('app/media/public/photo.jpg', {\n  transform: ['webp'],\n})\n```\n\nTransforms can also accept a single string param value, provided as a `[name, param]` tuple in the `transform` array when calling `assetServer.getHref()`.\n\n```ts\nimport { createAssetServer, defineFileTransform } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  files: {\n    extensions: ['.svg', '.png', '.jpg', '.jpeg', '.woff2'],\n    transforms: {\n      recolor: defineFileTransform({\n        extensions: ['.svg'],\n        param: true,\n        async transform(bytes, { param }) {\n          if (!/^#?(?:[\\da-f]{3,4}|[\\da-f]{6}(?:[\\da-f]{2})?)$/i.test(param)) {\n            throw new TypeError('Expected a hex color, with or without a leading #')\n          }\n\n          let svg = new TextDecoder().decode(bytes)\n          return svg.replaceAll('currentColor', `${!param.startsWith('#') ? '#' : ''}${param}`)\n        },\n      }),\n    },\n  },\n})\n\nlet imageUrl = await assetServer.getHref('app/media/public/logo.svg', {\n  transform: [['recolor', '0000ff']],\n})\n```\n\nHand-authored URLs use repeated `transform` search params with `name` or `name:param` values:\n\n```css\n.selector {\n  background-image: url('/assets/app/media/public/image.png?transform=resize:100x100&transform=webp');\n}\n```\n\n#### Global file transforms\n\nUse `files.globalTransforms` to define transforms that should always happen before a file is served. These transforms are run after any request-level transforms for all configured file extensions, and can return `null` to skip themselves for a given input.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\nimport { optimize as optimizeSvg } from 'svgo'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  files: {\n    extensions: ['.svg', '.png', '.jpg', '.jpeg', '.woff2'],\n    globalTransforms: [\n      {\n        extensions: ['.svg'],\n        async transform(bytes) {\n          let svg = new TextDecoder().decode(bytes)\n          return optimizeSvg(svg, { multipass: true }).data\n        },\n      },\n    ],\n  },\n})\n```\n\n#### File transform caching\n\nTransformed file outputs are recomputed per request unless you configure `files.cache`. Set it to `createFsFileCache()` to use the built-in disk cache in `node_modules/.cache/remix/assets`, relative to `process.cwd()`. This cache evicts the least recently used entries when it reaches 1,024 entries or 256 MiB of stored data. Each stored entry can be at most 4 MiB, including cache metadata. Reads and writes refresh recency. Larger outputs are served normally without caching. Omitting `files.cache` disables transformed-output caching.\n\n`files.cacheKey` namespaces transformed outputs. Use a stable identifier, such as a commit SHA, to reuse them across server restarts for the same build. Change it when sources or transform implementations change. Without it, each server instance uses a random namespace. A namespace identifies a set of cached outputs; it does not create a separate cache instance.\n\n```ts\nimport { createAssetServer, createFsFileCache } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  files: {\n    cache: createFsFileCache(),\n    cacheKey: process.env.GIT_COMMIT_SHA,\n    extensions: ['.svg', '.png', '.jpg', '.jpeg', '.woff2'],\n    transforms: {\n      /*...*/\n    },\n  },\n})\n```\n\nCall `createFsFileCache()` to use the default directory and limits. Pass an options object to customize them:\n\n```ts\nimport { createAssetServer, createFsFileCache } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/**/public/**'],\n  files: {\n    cache: createFsFileCache({\n      directory: '/var/cache/my-app/assets',\n      maxEntries: 2048,\n      maxFileSize: 8 * 1024 * 1024,\n      maxTotalSize: 512 * 1024 * 1024,\n    }),\n    cacheKey: process.env.GIT_COMMIT_SHA,\n    extensions: ['.svg', '.png'],\n    transforms: {\n      /*...*/\n    },\n  },\n})\n```\n\nUse a directory dedicated to this cache. Relative paths resolve from `process.cwd()` when the factory is called, independently of the asset server's `rootDir`. The directory is created on first use. All options are optional. Limits accept positive safe integers:\n\n| Option         | Default                              | Description                                        |\n| -------------- | ------------------------------------ | -------------------------------------------------- |\n| `directory`    | `'node_modules/.cache/remix/assets'` | Cache directory, relative to `process.cwd()`       |\n| `maxEntries`   | `1024`                               | Number of stored entries                           |\n| `maxFileSize`  | `4 * 1024 * 1024`                    | Bytes per entry, including cache metadata          |\n| `maxTotalSize` | `256 * 1024 * 1024`                  | Total stored entry bytes, including cache metadata |\n\nStorage metadata and filesystem overhead are additional to the byte budgets. All namespaces using a cache share its limits. Use one cache instance per directory. If multiple asset servers in one process need the same cache, pass them the same instance. For shared multi-process caching, supply a custom `FileCache`.\n\nThe cache tracks recency and total size in memory. Reads refresh recency without writing to disk. On first use, it rebuilds the index from stored record sizes and write timestamps and enforces the configured limits. Cached files survive restarts, but read recency does not. An interrupted write or invalid accounting metadata resets the stored cache on recovery, and outputs are recomputed as needed.\n\nFor custom persistence or eviction, supply a `FileCache` with `get` and `put` methods. Both may be synchronous or asynchronous. This pseudocode delegates to your own storage backend:\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/**/public/**'],\n  files: {\n    extensions: ['.svg', '.png'],\n    cache: {\n      async get(key) {\n        return backend.readFile(key) // Return a File, or null on a miss.\n      },\n      async put(key, file) {\n        await backend.writeFile(key, file)\n      },\n    },\n  },\n})\n```\n\nKeys are opaque strings. Your cache controls limits, eviction, and persistence, and must preserve each file's bytes and metadata. Existing `FileStorage` backends can also be passed directly to `files.cache`.\n\n#### Request transform limits\n\nUse `files.maxRequestTransforms` to cap request transform pipelines. It defaults to `5`.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  files: {\n    maxRequestTransforms: 5,\n    extensions: ['.svg', '.png', '.jpg', '.jpeg', '.woff2'],\n    transforms: {\n      /*...*/\n    },\n  },\n})\n```\n\n## CSS Imports\n\nRelative CSS `@import` rules and `url()` references are rewritten to asset server URLs.\n\n```css\n/* Rewritten to asset server URLs: */\n@import './reset.css';\n.selector {\n  background-image: url('./image.png');\n}\n\n/* External URLs: */\n@import 'https://fonts.googleapis.com/css2?family=Inter';\n.selector {\n  background-image: url('https://example.com/logo.svg');\n}\n```\n\nFile transforms can also be applied to relative CSS `url()` references:\n\n```css\n.selector {\n  background-image: url('./image.png?transform=resize:100x100&transform=webp');\n}\n```\n\n## Error Handling\n\nUse `onError` to report unexpected compilation failures and/or return a custom response.\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  onError(error) {\n    console.error('Failed to build client assets', error)\n    return new Response('Client asset build failed', { status: 500 })\n  },\n})\n```\n\nIf `onError` returns nothing, the asset server responds with the default `500 Internal Server Error` response.\n\n## Hot Module Reloading\n\nUse `hmr` with `watch` to enable the `import.meta.hot` API for browser modules. The `hmr` option is designed for integrating assets with a server-level HMR runtime such as [`node-hmr`](https://github.com/remix-run/remix/tree/main/packages/node-hmr) so server and browser updates can be coordinated.\n\nThe `hmr` option accepts an async function that creates a `BrowserHmrChannel`, such as the `createBrowserHmrChannel` function from [`node-hmr`](https://github.com/remix-run/remix/tree/main/packages/node-hmr):\n\n```ts\nimport { createAssetServer } from 'remix/assets'\n\nlet isDevelopment = process.env.NODE_ENV === 'development'\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  hmr: isDevelopment\n    ? async () => (await import('remix/node-hmr/runtime')).createBrowserHmrChannel()\n    : undefined,\n  watch: isDevelopment,\n})\n```\n\nUse `moduleImporter` to customize how HMR dynamically imports updated browser modules. It is resolved relative to the asset server's root directory and must point to a browser module exporting:\n\n```ts\nexport function importModule(specifier: string, parentUrl: string): Promise<Record<string, unknown>>\n```\n\nHMR appends mappings for updated modules to the document in additional `<script type=\"importmap\">` elements. Use `remix/multiple-import-maps-polyfill` when these updates must work in browsers without native support for multiple import maps:\n\n```ts\nimport { createAssetServer } from 'remix/assets'\nimport { createBrowserHmrChannel } from 'remix/node-hmr/runtime'\n\nlet assetServer = createAssetServer({\n  basePath: '/assets',\n  allowFiles: ['app/routes.ts', 'app/**/public/**'],\n  allowPackages: ['remix'],\n  hmr: {\n    channel: createBrowserHmrChannel,\n    moduleImporter: 'remix/multiple-import-maps-polyfill',\n  },\n  watch: true,\n})\n```\n\n### `import.meta.hot`\n\nThe `import.meta.hot` API provided by `assets` is a small runtime contract for modules that can handle updates without reloading the page. It is primarily intended for browser modules compiled by `assets`, but it can also be used directly.\n\nTo type `import.meta.hot`, add the HMR types to your TypeScript config:\n\n```json\n{\n  \"compilerOptions\": {\n    \"types\": [\"remix/assets/types/hmr\"]\n  }\n}\n```\n\nHMR accept calls are statically analyzed. Write them directly as `import.meta.hot.accept(...)`. Dependency accepts must use string literals or arrays of string literals; do not alias `import.meta.hot` or pass dynamically constructed dependency lists.\n\n```ts\nif (import.meta.hot) {\n  import.meta.hot.accept()\n}\n```\n\n### Accepting updates\n\nCalling `accept()` makes the current module an HMR boundary. When the module changes, `assets` evaluates the updated module and calls your callback with its exports.\n\n```ts\nexport let value = 1\n\nif (import.meta.hot) {\n  import.meta.hot.accept((module) => {\n    if (typeof module.value !== 'number') {\n      import.meta.hot?.invalidate('Updated module no longer exports value')\n      return\n    }\n\n    value = module.value\n  })\n}\n```\n\nYou can also accept updates from direct dependencies.\n\n```ts\nimport { value } from './value.ts'\n\nlet currentValue = value\n\nexport function readValue() {\n  return currentValue\n}\n\nif (import.meta.hot) {\n  import.meta.hot.accept('./value.ts', (module) => {\n    if (typeof module.value !== 'number') {\n      import.meta.hot?.invalidate('Updated dependency no longer exports value')\n      return\n    }\n\n    currentValue = module.value\n  })\n}\n```\n\nMultiple dependencies can be accepted at once. The callback receives an array where only the changed dependency is defined.\n\n```ts\nif (import.meta.hot) {\n  import.meta.hot.accept(['./one.ts', './two.ts'], ([oneModule, twoModule]) => {\n    // oneModule is defined when ./one.ts changed.\n    // twoModule is defined when ./two.ts changed.\n  })\n}\n```\n\n### Cleaning up\n\nRegister cleanup that should run before the module is replaced or disposed.\n\n```ts\nlet interval = setInterval(refreshCache, 30_000)\n\nif (import.meta.hot) {\n  import.meta.hot.dispose(() => {\n    clearInterval(interval)\n  })\n}\n```\n\nThe `data` object is preserved across updates for the same module. Use it for small pieces of state.\n\n```ts\nlet count = Number(import.meta.hot?.data.count ?? 0)\n\nexport function increment() {\n  count++\n}\n\nif (import.meta.hot) {\n  import.meta.hot.dispose((data) => {\n    data.count = count\n  })\n}\n```\n\n### Invalidating updates\n\nCall `invalidate()` inside an accept callback when the update cannot be applied safely. If no other boundary accepts the update, the browser reloads.\n\n```ts\nif (import.meta.hot) {\n  import.meta.hot.accept((module) => {\n    if (typeof module.value !== 'number') {\n      import.meta.hot?.invalidate('Updated module no longer exports value')\n      return\n    }\n  })\n}\n```\n\n### Server update events\n\nWhen the browser HMR channel comes from `remix/node-hmr/runtime`, server updates are sent to browser modules as `server:update` events.\n\n```ts\nif (import.meta.hot) {\n  import.meta.hot.on('server:update', () => {\n    window.location.reload()\n  })\n}\n```\n\n## Related Packages\n\n- [`fetch-router`](https://github.com/remix-run/remix/tree/main/packages/fetch-router) - A Fetch-based router that pairs naturally with `assets`\n- [`node-hmr`](https://github.com/remix-run/remix/tree/main/packages/node-hmr) - Provides the server-side `import.meta.hot` runtime and browser HMR channel used by `hmr`\n- [`component-hmr`](https://github.com/remix-run/remix/tree/main/packages/component-hmr) - Provides a Remix component HMR loader for `scripts.loaders`\n\n## License\n\nSee [LICENSE](https://github.com/remix-run/remix/blob/main/LICENSE)\n","readmeFilename":"README.md"}