{"_id":"@barelyhuman/preact-island-plugins","_rev":"35-d181eb41d05353c18b20f2850a12b892","name":"@barelyhuman/preact-island-plugins","dist-tags":{"latest":"0.1.4","beta":"0.1.5-beta.1"},"versions":{"0.0.2":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.2","license":"MIT","type":"module","main":"index.cjs","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"module":"index.js","types":"index.d.ts","publishConfig":{"access":"public"},"exports":{".":{"types":"./index.d.ts","require":"./index.cjs","import":"./index.js"},"./esbuild":{"types":"./esbuild.d.ts","require":"./esbuild.cjs","import":"./esbuild.js"},"./rollup":{"types":"./rollup.d.ts","require":"./rollup.cjs","import":"./rollup.js"},"./*":"./*"},"typesVersions":{"*":{"*":["./*"]}},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"scripts":{"build":"tsup","build:post":"node scripts/postbuild.js","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/generator":"^7.21.1","@babel/parser":"^7.21.1"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/node":"^18.14.0","bumpp":"^9.0.0","fast-glob":"^3.2.12","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0"},"peerDependencies":{"vite":"^4.1.0"},"gitHead":"9bfaea9a54f83c24b232619e3cdc1ee903fa1ff3","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.2","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-wvrT5DJPQu8AED97OfF4VkDI877tlA6pWTtT0BzWxz+M7O4Y7dpdq8AYRiDjmRdbKgODepJ/VYMsBN9g4wqTKQ==","shasum":"bb7de0585d34321005c9d19c4f217120ea817355","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.2.tgz","fileCount":19,"unpackedSize":47348,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDefQfNF5JIQkCJH0d6f8+ZB/BU7PbatlqBAyRiIpoo9AIhAJkTubGb2Bd95W5R0YnW1wyTDeDcNeTWDTTxOVhtzrnB"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkC5HQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrhrw/7BJEYHxUXFV963/DDxIXUXA1IgVS/GZjkUugdFHyC0nZIM9vI\r\nOJ2NWGMfCoqPGd/E/1NnWzwdS7vhgSn4vJplm+qj7w+xxx4xkvBwHyDN0MLL\r\nCGkJOsvUBGINAix8oLkl7JttJzwxa2dXTzHMHHzm0XH+JbGNnK85M3sYvne6\r\n2Q0QyXOAF8rA6hDsGSVeXKvMNY1i0vHS92TI6u/whn99H7HGJoYhyVMmew0z\r\ncisBf6GidfNqCyoeP/ofEp4+wNUm8yTLvpHuVfaa5ILJsYqh4d0uZNwDMjgO\r\nd91BkP7S9Piqeu6GdpWecb1WcafSWsV/g0+FBpAPv1/OUvU60roLndTpUQMr\r\nb+Qy6j3w71gz4wNCBXi49pwVdyRTTYOs2o6kvAeHLUrd29krfzVzig+P7vVh\r\nFBh8i1O5+rCBebnygyQlgO8oqSurIJ+9c+y10E2p2xSO3sd2n/J9rNynwzgo\r\nDIt+/eqLVKdw7Pd2pJ4Ly94e3k2NaMG2WxTGHIDiCAkjcP6CY/V2yfNF/Y4r\r\nZgZbfJ6hI+YqI/HmzGuTSiayqf9aNqCuAybvwhXOGlZVn8aAvp7jOK+9fg+0\r\nK0zAkH0R22q+gbE52gcTkWJ1dsrK8KhXbeGAnexG5QpizBdjRFAYvMOmzrVa\r\nE7N5ZjvSYWpD0YqeSDDG1pHpX0vpej0OIck=\r\n=8wz2\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.2_1678479824168_0.8875938639397265"},"_hasShrinkwrap":false},"0.0.3":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.3","license":"MIT","type":"module","main":"index.cjs","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"module":"index.js","types":"index.d.ts","publishConfig":{"access":"public"},"exports":{".":{"types":"./index.d.ts","require":"./index.cjs","import":"./index.js"},"./esbuild":{"types":"./esbuild.d.ts","require":"./esbuild.cjs","import":"./esbuild.js"},"./rollup":{"types":"./rollup.d.ts","require":"./rollup.cjs","import":"./rollup.js"},"./*":"./*"},"typesVersions":{"*":{"*":["./*"]}},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"scripts":{"build":"tsup","build:post":"node scripts/postbuild.js","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/generator":"^7.21.1","@babel/parser":"^7.21.1"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/node":"^18.14.0","bumpp":"^9.0.0","fast-glob":"^3.2.12","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0"},"peerDependencies":{"vite":"^4.1.0"},"gitHead":"81f3f4bad3ad9bb81a880fe3f85ace017b7533cc","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.3","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-ItDj70uMc3YiYe8SPzKskFkZlNsBSm1kQmMgXJqbhC0abTV/09NKFhDMk8UGU1rb5IdVq6kbrMdUrSe0Li3dCQ==","shasum":"eda1c02a67117bf0d21666470e3c76fc5f99f0b4","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.3.tgz","fileCount":19,"unpackedSize":48188,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqA33gGFVtN9DlafcdT6tHxc6dzdQT139oCgPWmt/lsQIgXCccRVWLfQS9+C2biR7VS077sjQ0g7mNtUfzxF00g0w="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkC5WoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqVFg//S9U5oMaA88w2pWEteHEiNDr0GEEWUhUKvD0fIRfJKifSV5bu\r\nII152u+E3esb9didYHXkvdagfhKtU3qgVMZ00A0B16bCPdD6HTrrneEFO9rs\r\n8IqeeIlZHuVmkGLy78bR4W56hTaJuDddpNc9jJsUyAZtLUHogdpInCgpJbIm\r\n+b6kU/lLjQCZnZV5s0WcIAij1T6aU7IsvkfRVuuG8C4uBDBAr12mdv8tG0I5\r\nrl7xbrQSCF02vOdIvAWTbGPL4vyefWkNdEjt/ZltMFC/Bi/ikVy+rVvnLCnB\r\n6GNJn+F6r6wcZEZ3P4COhJsC7oAs5KC/RfthmLdCZ2lUKSv1sUUtYFNsE+zd\r\nR4GQwTyeWoLNvZu/cB2Sztxf1TJvH2hmVS/AJi+bgrIUfZGG3RYQFuxJoBFN\r\nhDS8hFKV5P48O5i9PGdRm/Ki6eai5szdXqBpKKhCmc72t1eVyigex5Qf4fNc\r\nK1ZkGZ0PnBwYqiLULigaVk/tH5lE9twpZgtV+//HOF6X3D87H/bgO1L8G6ch\r\n4tbLgFFq6/GiBsxjrnqwiFtes3LqmQuHpiOvzyUdY5CD8RCBod8556KnrAD7\r\nlso9Kn50CiueqdYfpM73zYbvrmWW7vkFhDi/NruxIs0GgYcgSdjNRd6y6B6S\r\nEoWe5Rl3enWh/5IAdwwDbKJBW3RyUUkbPtA=\r\n=M/0p\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.3_1678480808453_0.3638841037069498"},"_hasShrinkwrap":false},"0.0.5":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.5","license":"MIT","type":"module","main":"index.cjs","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"module":"index.js","types":"index.d.ts","publishConfig":{"access":"public"},"exports":{".":{"types":"./index.d.ts","require":"./index.cjs","import":"./index.js"},"./esbuild":{"types":"./esbuild.d.ts","require":"./esbuild.cjs","import":"./esbuild.js"},"./rollup":{"types":"./rollup.d.ts","require":"./rollup.cjs","import":"./rollup.js"},"./*":"./*"},"typesVersions":{"*":{"*":["./*"]}},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"scripts":{"build":"tsup","build:post":"node scripts/postbuild.js","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","fast-glob":"^3.2.12","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0"},"peerDependencies":{"vite":"^4.1.0"},"gitHead":"0c30212a6f11a577aae7f5caf1a8b2ef33623b74","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.5","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-XE4gb3SunwaQK+zzkVkwg8fmUYzs5p5Hje2MRsR/NvKcAB6uNxNdLi3biVsrSgAoH0wQbNDuSwGidMd5RqiLTg==","shasum":"98bcb23952cde98fdf2a0dc65e70126c30e27386","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.5.tgz","fileCount":19,"unpackedSize":50284,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEBxQby3CrPejQTzjt/hT7NKVt385UMdyVTHMDiOmqE1AiEAjBPtxxzxYMCNShnge21d0BDU/EtVNNGCakclHDk6ZZc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIBNIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqHiA/+IlYrO/4yOQGsBneE17uhe+ahAGwGgUmT7uUcA6roTlhFAe/4\r\npTbhxYOamKcWHC4n0KUqv5ARQTi+0Jwj7SgMTL1rA+JcpDx6PZEnV05o9JLN\r\njnzRzF+AiLNkY8b6mnDmpV5+KUvbZ8nZr+isz4EIl3brFDocZ7KMWu/0HEy+\r\nbAPDIedj3AxZVwfK4G1Ka5iJujGoJZv4NqSKVfltM+utzp95MJttkxJ3c1k4\r\n8lTaIE3CoZIPz88DjqRUcZZ4CUnKvmW7qsDrOvoT1nAFVaxw4J6Ku7ZD+VTa\r\nxRYGW56qeybxfV4NaOJmigTJy2RbyrVH53wse9TDYwdgCqm71awsO+0xIWlO\r\n3eGHj0w7wrB8h/jXNIGIt183DMwYN73bYl7Uio+DUHA3G+YdHy51uRUNdB3E\r\n5Xso0mPxXx5tFaPS6ROYRFgRA6L3yASNa8KITNlFVAE8LBNSP272N9W56BCV\r\nvwpkzn3xmMU0Av0c2moYFSkDtad1RiG8m5jq+O/EKl87IbrtOj3pqY1ZNh0P\r\nQd9GJ6SNZpurvp/015jDAbFeAdOjg3HX9UQSZzRi7ZURkDfWzLWAWfo4xH5A\r\n9jarxnwURsuKWVV6QU/G+fZBPokoEUjqfXj13VBGTwCAl/GXJN1ATTHn5koQ\r\nVGzBLZY0QOvKEEpF1aC7arU/338Nue3ovWw=\r\n=mf/D\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.5_1679823688197_0.38363082496675016"},"_hasShrinkwrap":false},"0.0.6":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.6","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","exports":{".":{"types":"./index.d.ts","require":"./index.cjs","import":"./index.js"},"./esbuild":{"types":"./esbuild.d.ts","require":"./esbuild.cjs","import":"./esbuild.js"},"./rollup":{"types":"./rollup.d.ts","require":"./rollup.cjs","import":"./rollup.js"},"./*":"./*"},"main":"index.cjs","module":"index.js","types":"index.d.ts","typesVersions":{"*":{"*":["./*"]}},"scripts":{"build":"tsup","build:post":"node scripts/postbuild.js","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","esbuild":"^0.17.16","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0"},"peerDependencies":{"esbuild":"^0.17.16","vite":"^4.1.0"},"peerDependenciesMeta":{"esbuild":{"optional":true},"vite":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"767826e519eaa899394cbdc8e8630621ddf72704","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.6","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-OXboRkrtcF6G6kvAR3uHOS2KYyt40KP8opkbxcd2+bPjkiVdTsZuVYLV841wVRpfBUXurtWc1ymEO2UbfLkQ+A==","shasum":"06d81124ce19d768094b137a5fbea8405cb4b3e4","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.6.tgz","fileCount":19,"unpackedSize":57737,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbWFvUGWcJxtZgZ3JO/V2y33JLTWsnsQX5p67/LeA/xAIgUmqwkItg8olCsYvkhT9xIDrEmbaWAxmdHHHq8/KVWcw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkR9xDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpOQxAAhfP2Q5jE/TALkWEtudnhzN4eC7fO0jOKO8PeEAjyRWoYUnXK\r\nw8MICELUVClEGKN0C8r1W/boj27AgoAzS3pOE1QomOnmAJp/8HULJHfzbYxu\r\nIPZDTIcapxmC+SqjCxSEJOEuUAwNxnV5/JW9JjdbzV69uyizk/xjFMkSjfsB\r\np79Mycm+d3rVVqWXDzsd9phMshxCRg0fLrO8vjP4MkFJjZbt9KT7bzsNBSHF\r\nSPKNolb4A4W14U78BsYi3qKndekqLuqyMj4yeIDT0qjsfeocUhaXIB//Y1e9\r\nXrv8Nf0nbFfKUtKUPhrqSa4GkGWTAFDI1t9HswhXqwOlE2nARwpwG4WeB/R7\r\nhQq3kKhh5oWIqPFXsEmR9eS94P+OhiuFzu4RSG1AZMfkWVq888FuQNSFtzcq\r\nqBjQSaubNMA9G0oE9G/zA0ldEm4v8+6OX2xXt0aia/hf3HuhHHbUQGARYf8/\r\n93E5A1wQ1pV2J5p7xKSMOm0rl0LHEGSadU0vPfbPimfcMKlxAfvai4deFC6R\r\n7hnVyakYDy5aS6QZ8hSknYYqKp98N+Q2IDFg56SOv3QdJj5M0AgMV1eNKgfo\r\nbC4uJJXpKDuFq0HAw9QKQdOLTLNLoEWYpYKMUZUfSc+oD/amOQUK6p+XI0Fi\r\n51k88MEcYwdkHa7uSnsxBoUr0p9x/kvQGZs=\r\n=z9YR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.6_1682431043704_0.9806056182661773"},"_hasShrinkwrap":false},"0.0.7":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.7","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","exports":{".":{"types":"./index.d.ts","require":"./index.cjs","import":"./index.js"},"./esbuild":{"types":"./esbuild.d.ts","require":"./esbuild.cjs","import":"./esbuild.js"},"./rollup":{"types":"./rollup.d.ts","require":"./rollup.cjs","import":"./rollup.js"},"./*":"./*"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","esbuild":"^0.17.16","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0"},"peerDependencies":{"esbuild":"^0.17.16","vite":"^4.1.0"},"peerDependenciesMeta":{"esbuild":{"optional":true},"vite":{"optional":true}},"publishConfig":{"access":"public"},"scripts":{"build":"tsup","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.7","_integrity":"sha512-mcP/XHueabOrEPRGeD7VZOnecdH2vq4nAJScxtF9ahyPk5KUuxAkGn3HfYpznodi0YFv/4QhDTQEM9sXGqlrZg==","_resolved":"/private/var/folders/_c/n0z_x_ks6wnflt55j252sjnr0000gn/T/b2f51952177d08b5a57c5c2958eb16f1/barelyhuman-preact-island-plugins-0.0.7.tgz","_from":"file:barelyhuman-preact-island-plugins-0.0.7.tgz","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-mcP/XHueabOrEPRGeD7VZOnecdH2vq4nAJScxtF9ahyPk5KUuxAkGn3HfYpznodi0YFv/4QhDTQEM9sXGqlrZg==","shasum":"1e4d7e0fb15dd03a1fef3ffe27ef6df221b3726f","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.7.tgz","fileCount":71,"unpackedSize":58241,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFFlxs8EjNsIkr3i2Sld1/GfAzqt61Qcg6HHoCXSPGYOAiEAroAj23rqCzPQRrfhe9ScldxpHgRRXGQAaK71AzbCjjs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSePmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqulw/8DcQWSD+Gtgaa7Lc45mLsBDFA2Bv0Yn3UEGIIWSmUQIOpbUD8\r\n6Narnia/foQ65UMYQ/n9+e/JKVnnRDYp95lm56XMD77tGiCK5hN/qoFxIECP\r\nBSHWO/8elEv2m/4PONMKpauau9x1EAhLbvxxIsQU4/lk9Z7+ZsKS036qLaId\r\nSJCYM+NsAcGUHh9X7W1PlZXKkm7x9DuS/Q/78GS4Wqh3ut4G6IhanFb+51+T\r\nsplLa7PmZyp1j3AMNiGEAvMsjEYZVNKv7slZhLSvDzrEyqrl3MzHavYI673z\r\nKrh7I1l+WoT6wlW/qh7sSPCVeVXqHWx6XeoYslqe7mJK75hgT/D0EeTpCoJa\r\na0uzwLWQ+m6ksT8eQXb4xLwXzy5qdrG+Rz0m3YJ2QuGv4r0BslujCNy1VkGr\r\nBYeMDB0Xek3TZWoqdYYG+JVhigMXpcLkQ//KNzdBnkOiFhZMBCTiD+6np0Tm\r\nqt0LF5o+lxAsYMTQOuJZwNqUjyQXJjkunXP5T8aZ1HM3x9qnqtTH2p0oKNt9\r\nKnyu5CKQav9k6zotGAi1+Py05ljj5tEB+BSG5AgjWaq2L0vN51gRUl/dJ6a3\r\nMQkgCYfgNSAdx7IxqTNxLWSzFApu8MWWXUA0cbpfcNraFcBSObthrSEaVJdX\r\nmq5bWoFJe01UG5BpSN9NVDtpXvu1B0IU9/g=\r\n=v84Q\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.7_1682564069937_0.46569324357243747"},"_hasShrinkwrap":false},"0.0.8":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.8","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.js"},"./esbuild":{"types":"./dist/esbuild.d.ts","require":"./dist/esbuild.cjs","import":"./dist/esbuild.js"},"./rollup":{"types":"./dist/rollup.d.ts","require":"./dist/rollup.cjs","import":"./dist/rollup.js"},"./*":"./*"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","esbuild":"^0.17.16","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0"},"peerDependencies":{"esbuild":"^0.17.16","vite":"^4.1.0"},"peerDependenciesMeta":{"esbuild":{"optional":true},"vite":{"optional":true}},"publishConfig":{"access":"public"},"scripts":{"build":"tsup","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.8","_integrity":"sha512-YlNDM+ssbPp3iqslkejV2KQW9m6DHw5AHjvSFp/tbHa4MexlrLKlS4gjd+imGZU7E6tKopQf9YGwnFs94y+TSQ==","_resolved":"/private/var/folders/_c/n0z_x_ks6wnflt55j252sjnr0000gn/T/aa848df9446c3d64c2ba94e8293eeba8/barelyhuman-preact-island-plugins-0.0.8.tgz","_from":"file:barelyhuman-preact-island-plugins-0.0.8.tgz","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-YlNDM+ssbPp3iqslkejV2KQW9m6DHw5AHjvSFp/tbHa4MexlrLKlS4gjd+imGZU7E6tKopQf9YGwnFs94y+TSQ==","shasum":"5d3a9d28b83a1f059184e4bd97b3c2246d534eac","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.8.tgz","fileCount":28,"unpackedSize":75004,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7DGlfjCeclpwChCiNaPMm3HouTRye1p5katAUAO3IdAiEA4VbXCoZsYV3EwnJJUWs8hv8HpJPQa/whGTXsLfbNMfk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSeTlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpyYQ/9Gvylaka2L1qVe2dDQU/WfNgZvMYv9aM+RAOMxFKhpF8KwhkT\r\nnYEhsA7XqMDW4B9mKZKP3ZjVtsLo3wz0YrdmpcZA5JGAPCeWysEyy/2i485v\r\ng2A84k9N1IZhTYllaH1hw8Nm2rZ9yWHld0+Y25fZLieO01AvYW/buTiRRVzi\r\nEgMV/tZHiEUAlE+RcOV80U5FZ/ERd24euo0HhSF5Plqx6D5JHYUl/csj0f9G\r\nR5EQvEBGugfXn6avqYje1rvkcfZ4gZO6oUEsur2mZ2aZ/hknJnueRYiVN7i1\r\ne+e/myBJuWu7jZd9rFYX76wEUSerTDMIkHj5OZFOnfRXRDXSMd5/nPgy7eAP\r\nLYXvMiAHsbaa3rG294MU05lfYKEAhyl/e0kkjTKVPTkS+XyNBv4R6GNA9Ah6\r\nx5CW3opu+5Ou3PyRNGW/0dRdgedUO7tIuZhLb9ETnegskHiYAiZAbbv91w2P\r\nWwHi2Y7NP/EXPFXO74oZRMpppYj1goWQfQNPzZiEiFA9EH6MkG+rKjuQRb4/\r\nmo9KqoD10Ze06CRmYXGQ+RrMtVnDWZGzQGctnz1VuF/3AwlGsmA+lvEDDqBM\r\nheSb5ao/YAkPJPTFSLFvjCT6DGduIjM0riR6KdFxlZ5n2y5OF2IIm57DpaHD\r\n6regsfXspheOuTsBWGLrO3Q63ju5ahZva9k=\r\n=2hCo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.8_1682564325271_0.2001296555333707"},"_hasShrinkwrap":false},"0.0.9":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.9","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.js"},"./esbuild":{"types":"./dist/esbuild.d.ts","require":"./dist/esbuild.cjs","import":"./dist/esbuild.js"},"./rollup":{"types":"./dist/rollup.d.ts","require":"./dist/rollup.cjs","import":"./dist/rollup.js"},"./vite":{"types":"./dist/vite.d.ts","require":"./dist/vite.cjs","import":"./dist/vite.js"},"./*":"./*"},"scripts":{"build":"tsup","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","esbuild":"^0.17.16","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0"},"peerDependencies":{"esbuild":"^0.17.16","vite":"^4.1.0"},"peerDependenciesMeta":{"esbuild":{"optional":true},"vite":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"80878adced25e3ca5f42d5ae01d0086d34927ec2","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.9","_nodeVersion":"16.20.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-zUaT9daAsFFLQYgTVlcwouHDVP+RyupG2Km4xHShAJ5VRXl1qzC3csCTiFAuoddIRZNdOWLYyxbdGOSmmNOCLw==","shasum":"343c8200922368936513e17bdd6506f32b1c3bec","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.9.tgz","fileCount":29,"unpackedSize":79771,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9J3wfSdah/YbofYwyppR02S2FMnLAnjD6SablYRSZ2AIhAMTXkjJGc6pbm++ZqGTNnVPpzEHgvkbd4xTjRtH3MzLq"}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.9_1684771272007_0.30190429696349863"},"_hasShrinkwrap":false},"0.0.10":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.10","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.js"},"./esbuild":{"types":"./dist/esbuild.d.ts","require":"./dist/esbuild.cjs","import":"./dist/esbuild.js"},"./rollup":{"types":"./dist/rollup.d.ts","require":"./dist/rollup.cjs","import":"./dist/rollup.js"},"./vite":{"types":"./dist/vite.d.ts","require":"./dist/vite.cjs","import":"./dist/vite.js"},"./*":"./*"},"scripts":{"build":"tsup","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","esbuild":"^0.17.16","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0"},"peerDependencies":{"esbuild":"^0.17.16","vite":"^4.1.0"},"peerDependenciesMeta":{"esbuild":{"optional":true},"vite":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"12208301322b4040d2080c343d1e11498f993ada","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.10","_nodeVersion":"16.20.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-1NSS+AjiZEURzZRxtYPZoA+Wcf31jrOr7qW3CUmm+2X7/8xbbkV6/890zkmq3sNG6bMlC4jeLMBhpB9jmmPOcQ==","shasum":"049edcc5f713ad0197a999900d9e7397ca7c4feb","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.10.tgz","fileCount":29,"unpackedSize":81471,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEq9EidW6dENgGe9Z8D3nM3uUl88UewchR0eJ1CgLXNqAiEApUUKcgEMYVUYK5bmKrf/EwOcvr2wZzdYNnz/lWm5AxA="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.10_1684781346862_0.32486479525759915"},"_hasShrinkwrap":false},"0.0.11":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.11","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.js"},"./esbuild":{"types":"./dist/esbuild.d.ts","require":"./dist/esbuild.cjs","import":"./dist/esbuild.js"},"./rollup":{"types":"./dist/rollup.d.ts","require":"./dist/rollup.cjs","import":"./dist/rollup.js"},"./vite":{"types":"./dist/vite.d.ts","require":"./dist/vite.cjs","import":"./dist/vite.js"},"./*":"./*"},"scripts":{"build":"tsup","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","esbuild":"^0.17.16","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0"},"peerDependencies":{"esbuild":"^0.17.16","vite":"^4.1.0"},"peerDependenciesMeta":{"esbuild":{"optional":true},"vite":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"79b578309f6c223eb40e8aad7d9d5b55adf01d6b","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.11","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-XooG5f2fCma3zahyGX0pTA7blGKWOgFhjcvqMjos6mByO1JFZ0+oAi81NPvY11pquZiergAIRimPldsIBZHF2A==","shasum":"5c54152a9a3f675fcd6ca4307fcb1dbb6aa49c40","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.11.tgz","fileCount":29,"unpackedSize":87498,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVQQFqOiJpqtDr/lMrjimPDkvYftiCRNFNIyTZC+RtcAIhANwmoeuBWU9+lbTsc+9JybZtZk3b107v4zTLcXqdX1kB"}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.11_1686680592494_0.8082701530445373"},"_hasShrinkwrap":false},"0.0.12":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.12","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.js"},"./esbuild":{"types":"./dist/esbuild.d.ts","require":"./dist/esbuild.cjs","import":"./dist/esbuild.js"},"./rollup":{"types":"./dist/rollup.d.ts","require":"./dist/rollup.cjs","import":"./dist/rollup.js"},"./vite":{"types":"./dist/vite.d.ts","require":"./dist/vite.cjs","import":"./dist/vite.js"},"./*":"./*"},"scripts":{"build":"tsup","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","esbuild":"^0.17.16","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0","vitest":"^0.32.0"},"peerDependencies":{"esbuild":"^0.17.16","vite":"^4.1.0"},"peerDependenciesMeta":{"esbuild":{"optional":true},"vite":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"8910bb862c52c9c0f07ccc3e7f76ff9f71fa79d8","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.12","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-xQcVkRasbikPY6bc0QIkk8tpGfPjYnhesJ9dJuSWcaj2iCGjHedcaHpdK7gEEA3Mjp12AturVKsNYTnn4df5fg==","shasum":"79f20c1f9996b685ac9d95a5a5102a8b90087fc3","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.12.tgz","fileCount":29,"unpackedSize":87533,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6lnUjJbss3bRw0Uv/FtOVOGWSCr6j9cgJKtnkxbEKBwIhAKLF4AN4IcjGZ5woKBFVAR/RSNeeyIRMwcM8LqIiyxu+"}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.12_1686683081234_0.4466377396788024"},"_hasShrinkwrap":false},"0.0.13":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.13","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.js"},"./esbuild":{"types":"./dist/esbuild.d.ts","require":"./dist/esbuild.cjs","import":"./dist/esbuild.js"},"./rollup":{"types":"./dist/rollup.d.ts","require":"./dist/rollup.cjs","import":"./dist/rollup.js"},"./vite":{"types":"./dist/vite.d.ts","require":"./dist/vite.cjs","import":"./dist/vite.js"},"./*":"./*"},"scripts":{"build":"tsup","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","esbuild":"^0.17.16","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0","vitest":"^0.32.0"},"peerDependencies":{"esbuild":"^0.17.16","vite":"^4.1.0"},"peerDependenciesMeta":{"esbuild":{"optional":true},"vite":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"1539ac07cd73689a9cec014490c7ed6985b54f0b","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.13","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-Q0DzhtJBwcH8GvxXquxYpdtjSFb9/UbblV8hQ46ky1AJ+mPJBnWvgM5thw08FDkgIMaEShaQm6mB6UlFENiFXA==","shasum":"61d26913743858d0c9389547165e0dd5cf0c4737","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.13.tgz","fileCount":29,"unpackedSize":90221,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHCTweWsmogiEUPdL1t/qk1pRmkoKEe8KY83pNTRaN0cAiEAgTtwoudQTe5BI6N3AksmGQGJPzTd+fzRChzaJB6kh0o="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.13_1686747263687_0.1343678773860404"},"_hasShrinkwrap":false},"0.0.14-beta.2":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.14-beta.2","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","require":"./index.cjs","import":"./index.js"},"./esbuild":{"types":"./esbuild.d.ts","require":"./esbuild.cjs","import":"./esbuild.js"},"./rollup":{"types":"./rollup.d.ts","require":"./rollup.cjs","import":"./rollup.js"},"./vite":{"types":"./vite.d.ts","require":"./vite.cjs","import":"./vite.js"},"./*":"./*"},"scripts":{"build":"tsup; nr copy","copy":"cp package.json dist/ ;cp README.md dist/ ;cp LICENSE dist/","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0","esbuild":"^0.17.16"},"devDependencies":{"@antfu/ni":"^0.21.4","@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","unplugin":"^1.3.1","vite":"^4.1.0","vitest":"^0.32.0"},"peerDependencies":{"esbuild":"^0.17.16","rollup":"^3.17.3","vite":"^4.1.0"},"peerDependenciesMeta":{"vite":{"optional":true},"rollup":{"optional":true},"esbuild":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"7600ca9b6fc56fd8ce9456499b352a6aa2d2f57c","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.14-beta.2","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-/kJy4zzljwbtZdPmEcWjzHTVqlQAR2jBeCy15UN9ij08RzVt0wB24U7xoPOncUjvexUE3PWgWQuFM+39zcKgbw==","shasum":"4ce48a6f5b9d54648abcb041133fc2577238ca64","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.14-beta.2.tgz","fileCount":3,"unpackedSize":7247,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDFFXRwhEMpj3IGwpNgyqJVubeR33vZBw9MnTnKjNmI9AiEAzWFAVR7JFURhqDU9hUgUE6lprIQUzETzTyIspT46Igs="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.14-beta.2_1688578912102_0.5123089265837664"},"_hasShrinkwrap":false},"0.0.14-beta.3":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.14-beta.3","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","require":"./index.cjs","import":"./index.js"},"./esbuild":{"types":"./esbuild.d.ts","require":"./esbuild.cjs","import":"./esbuild.js"},"./rollup":{"types":"./rollup.d.ts","require":"./rollup.cjs","import":"./rollup.js"},"./vite":{"types":"./vite.d.ts","require":"./vite.cjs","import":"./vite.js"},"./*":"./*"},"scripts":{"build":"tsup; nr copy","copy":"cp package.json dist/ ;cp README.md dist/ ;cp LICENSE dist/","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0","esbuild":"^0.17.16"},"devDependencies":{"@antfu/ni":"^0.21.4","@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","unplugin":"^1.3.1","vite":"^4.1.0","vitest":"^0.32.0"},"peerDependencies":{"esbuild":"^0.17.16","rollup":"^3.17.3","vite":"^4.1.0"},"peerDependenciesMeta":{"vite":{"optional":true},"rollup":{"optional":true},"esbuild":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"527cbe8de2c5c3edcf0feca7dc2a373a5b88910c","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.14-beta.3","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-4Y9nRmuw0IefHhafjIq1vuIp1z5K5eyxsT2cP4sM4f7Yuhq9KOr3r4L8TyBL2/Rzm4hu7uVTnKPUA31F9T82cw==","shasum":"e30ab63d67edeb53c9c819a40f2e14e643089d3e","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.14-beta.3.tgz","fileCount":20,"unpackedSize":2198578,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPYpKC6sezJ6ebN4P+maC6wv7APe8B5bEp/wCRRUzNxQIgUaT0BmKbBTw3JrzsMpjWcaUpVa1BPAfPgs6loVig2KU="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.14-beta.3_1688579513155_0.4708230046532622"},"_hasShrinkwrap":false},"0.0.14-beta.4":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.14-beta.4","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","require":"./index.cjs","import":"./index.js"},"./esbuild":{"types":"./esbuild.d.ts","require":"./esbuild.cjs","import":"./esbuild.js"},"./rollup":{"types":"./rollup.d.ts","require":"./rollup.cjs","import":"./rollup.js"},"./vite":{"types":"./vite.d.ts","require":"./vite.cjs","import":"./vite.js"},"./*":"./*"},"scripts":{"build":"tsup; nr copy","copy":"cp package.json dist/ ;cp README.md dist/ ;cp LICENSE dist/","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0","esbuild":"^0.17.16"},"devDependencies":{"@antfu/ni":"^0.21.4","@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","unplugin":"^1.3.1","vite":"^4.1.0","vitest":"^0.32.0"},"peerDependencies":{"esbuild":"^0.17.16","rollup":"^3.17.3","vite":"^4.1.0"},"peerDependenciesMeta":{"vite":{"optional":true},"rollup":{"optional":true},"esbuild":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"4a0d625a1b5d30c9018c28ce4a6bbad2ce92454b","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.14-beta.4","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-bTYHxq3dFROQ0ebieV7CaogBv5lVKXqAferBElOY97tLZLRHhvM0lpy5kjSMoEpjCchbwzJHV5s9LM23qQHbVg==","shasum":"5b5cd078898f4c04290d604e20167c3a0dd2ccc1","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.14-beta.4.tgz","fileCount":20,"unpackedSize":2199110,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDlC1vFHgaKnN/JNmiPqgR3iH2rNlhg7GYbtxxRNRswRAiAqu75jeiUgVPN1IHBoGXtYGyPToDaeXHfrwge3kiZxaA=="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.14-beta.4_1688581359060_0.8086469809669459"},"_hasShrinkwrap":false},"0.0.14":{"name":"@barelyhuman/preact-island-plugins","version":"0.0.14","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.js"},"./esbuild":{"types":"./dist/esbuild.d.ts","require":"./dist/esbuild.cjs","import":"./dist/esbuild.js"},"./rollup":{"types":"./dist/rollup.d.ts","require":"./dist/rollup.cjs","import":"./dist/rollup.js"},"./vite":{"types":"./dist/vite.d.ts","require":"./dist/vite.cjs","import":"./dist/vite.js"},"./*":"./*"},"scripts":{"build":"tsup","dev":"tsup --watch src","fix":"npx prettier --write .","next":"bumpp","test":"echo 'done'"},"lint-staged":{"*.{js,ts,tsx,jsx,md,json}":["npx prettier --write"]},"prettier":"@barelyhuman/prettier-config","dependencies":{"@babel/core":"^7.21.3","@babel/generator":"^7.21.1","@babel/parser":"^7.21.1","@babel/preset-typescript":"^7.21.0"},"devDependencies":{"@barelyhuman/prettier-config":"^1.1.0","@types/babel__core":"^7.20.0","@types/node":"^18.14.0","bumpp":"^9.0.0","esbuild":"^0.17.16","fast-glob":"^3.2.12","husky":"^8.0.3","lint-staged":"^13.1.2","prettier":"^2.8.4","tsup":"^6.6.3","typescript":"^4.9.5","vite":"^4.1.0","vitest":"^0.32.0"},"peerDependencies":{"esbuild":"^0.17.16","vite":"^4.1.0"},"peerDependenciesMeta":{"esbuild":{"optional":true},"vite":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"2e7582a85758831b72c82a487f904b14b07309cf","description":"> Collection of plugins for different bundlers to treat `.island.js` files as > preact islands","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.0.14","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-vmJynvpsrJZQkP8soIiIrYU1OyeJxVMnO3J8d8rcgQ5WceB6AKFrGtB8YLnqFRgzFa0qXLqBK4kwQrOs9qC20g==","shasum":"27894c0c575a5dcd6b89e6bcab5342ed2fcaa30b","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.0.14.tgz","fileCount":29,"unpackedSize":90221,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHzyBlO18lS97Xa0QUHdqI74026RonUrhs9rKhV4JP8QCIQC3emkiih1/g1bY0YbenkpLVPJG+LeReC20aBX6h7fYnQ=="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.0.14_1688584290880_0.12129791529028955"},"_hasShrinkwrap":false},"0.1.1-beta.0":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1-beta.0","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","astring-jsx":"^1.0.1","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"c8052727e67eedccc148570a13f3df3ec37482ca","readme":"# preact-island-plugins\n\n> Bundler plugins to make preact islands a breeze to work with\n\n## Description\n\nThe aim of the project is to make it easy for both users and frameworks to be\nable to build preact islands by just plugging the functionality into the\nbundler.\n\nThis allows anyone go be able to create a Server Rendered, Partially hydrated\napp without getting locked into a framework\n\n## Features\n\n- Bundler plugins for Rollup, ESBuild, Webpack(Soon)\n- Works with preact (duh.)\n- Easy island declarations\n  - File based `.island.js`\n  - Comment Based `//@island`\n\n## Installation\n\n```sh\nnpm i @barelyhuman/preact-island-plugins\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Bundler plugins to make preact islands a breeze to work with","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1-beta.0","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-6Q+jQsDmcrGV9llWSu1xUp34ao1axIp2gRy1oTjpGUOqUXtCIqlYqJdQf1XgTndTzmZDHOStUkEWErK7kjiO5w==","shasum":"1bee0c9489962cee8ca8991fb1832c078541d518","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1-beta.0.tgz","fileCount":14,"unpackedSize":19709,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCxq7TG+wjOIe05ooXcguOLyFJn0D/sxHnpt93pGqHrtQIhAKPa4+8Us6IzAH4S7dMGF1Zn/7NKzXm+g9A5vinnRDd6"}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1-beta.0_1691420681813_0.8750893237186705"},"_hasShrinkwrap":false},"0.1.1-beta.1":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1-beta.1","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","astring-jsx":"^1.0.1","esbuild":"^0.18.11","xtend":"^4.0.2"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"cd2bb3eceb30a184b7111b7147ecee7c06c5d958","readme":"# preact-island-plugins\n\n> Bundler plugins to make preact islands a breeze to work with\n\n## Description\n\nThe aim of the project is to make it easy for both users and frameworks to be\nable to build preact islands by just plugging the functionality into the\nbundler.\n\nThis allows anyone go be able to create a Server Rendered, Partially hydrated\napp without getting locked into a framework\n\n## Features\n\n- Bundler plugins for Rollup, ESBuild, Webpack(Soon)\n- Works with preact (duh.)\n- Easy island declarations\n  - File based `.island.js`\n  - Comment Based `//@island`\n\n## Installation\n\n```sh\nnpm i @barelyhuman/preact-island-plugins\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Bundler plugins to make preact islands a breeze to work with","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1-beta.1","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-WSC6c5iqNskVSgJBRJhO/MA0XCJ/2GF+r/cLcwBkr5l2ct7mgDVvbkBfSZ2Go+8hpOg1Lsb0JB9n8OwYsqXENQ==","shasum":"5169ef98d10b8e42ea32a6aa771e8058efee6fb2","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1-beta.1.tgz","fileCount":15,"unpackedSize":20700,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJLeqDyhj7SJqT+W+NlfsYWtqv5DxdrinlN0TklTbE1AiEA9lO7/ffIwTKiSBrvBS3LtL+0IDq02D2E9hv1yzcwImk="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1-beta.1_1691446525877_0.8825963665586967"},"_hasShrinkwrap":false},"0.1.1-beta.2":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1-beta.2","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","astring-jsx":"^1.0.1","esbuild":"^0.18.11","xtend":"^4.0.2"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"52b04a6cff37322655d43f0ca9aa94d1a9b50330","readme":"# preact-island-plugins\n\n> Bundler plugins to make preact islands a breeze to work with\n\n## Description\n\nThe aim of the project is to make it easy for both users and frameworks to be\nable to build preact islands by just plugging the functionality into the\nbundler.\n\nThis allows anyone go be able to create a Server Rendered, Partially hydrated\napp without getting locked into a framework\n\n## Features\n\n- Bundler plugins for Rollup, ESBuild, Webpack(Soon)\n- Works with preact (duh.)\n- Easy island declarations\n  - File based `.island.js`\n  - Comment Based `//@island`\n\n## Installation\n\n```sh\nnpm i @barelyhuman/preact-island-plugins\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Bundler plugins to make preact islands a breeze to work with","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1-beta.2","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-VU9b6U1EeDRFgLL3vQQ3P4q1qLXApbZUtviDZN5jYDsGDe8zA1B/Rm42uMttvUgEM/BWwbxgVisOcCBeHBOalA==","shasum":"44d2cd949e50c0be0dd6ded2bc1aa207ffb9094a","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1-beta.2.tgz","fileCount":16,"unpackedSize":27579,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8AZ0QrF9TGDrrP1nrEF4Ht/aBCT2bQUj2093aBpr60AIhAMeZ5HjPYcCYR2GWiSVrmLfuZPC9bfnyaq/C7CQK2PWF"}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1-beta.2_1691625362471_0.641090124611652"},"_hasShrinkwrap":false},"0.1.1-beta.3":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1-beta.3","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","astring-jsx":"^1.0.1","esbuild":"^0.18.11","xtend":"^4.0.2"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"bd767d676bcb93a01200bf759451922962055348","readme":"# preact-island-plugins\n\n> Bundler plugins to make preact islands a breeze to work with\n\n## Description\n\nThe aim of the project is to make it easy for both users and frameworks to be\nable to build preact islands by just plugging the functionality into the\nbundler.\n\nThis allows anyone go be able to create a Server Rendered, Partially hydrated\napp without getting locked into a framework\n\n## Features\n\n- Bundler plugins for Rollup, ESBuild, Webpack(Soon)\n- Works with preact (duh.)\n- Easy island declarations\n  - File based `.island.js`\n  - Comment Based `//@island`\n\n## Installation\n\n```sh\nnpm i @barelyhuman/preact-island-plugins\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Bundler plugins to make preact islands a breeze to work with","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1-beta.3","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-dGRlXOKBVj3zh/aptL7yiORmAKCJLaU1nTPgB71URlnvuFkVHebnG+d3zT3ktW3ZJeMm8gURvsNIhirhSr3eug==","shasum":"bb890662e94f04781a58816a0fe524cbb9beac39","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1-beta.3.tgz","fileCount":16,"unpackedSize":28251,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID5aQC9lUr7lXm3h4+5Yug1/JDm5hFwM1AeTnZG4v5E+AiEA8Zx7sTM1AdAJccSeB4sKF68asjMY6uSEbpIswkbXex8="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1-beta.3_1691626758043_0.7108582016688567"},"_hasShrinkwrap":false},"0.1.1-beta.4":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1-beta.4","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","@barelyhuman/astring-jsx":"^2.0.0","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"784a8985681e5401d1384e8a3e71cd9488cc23bc","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom ](#file-name-extensiom)\n  - [Top Level comments ](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\n```sh\nnpm i @barelyhuman/preact-island-plugins\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\\\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\\\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\\\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1-beta.4","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-+wf3jLWNjuLxkB9Or8YUMN+5AguTXBN1TzSBWqLPqLDffxlfZ9DlTDFO83reF3Dkb2sJUFint7TgDx9uqofRZw==","shasum":"b34ea0d552b7b2f5ec923375d7c074d95b1cc2f6","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1-beta.4.tgz","fileCount":15,"unpackedSize":34798,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3VPmmJSuOv4+MhWtggJXMfJK8Ww+tVP1Yj5Pvwc2+DgIgG0gUsYskDyNGk3uk001UDCQr3CBszmXFb0tB2x8wKKc="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1-beta.4_1692816044053_0.9145507938994328"},"_hasShrinkwrap":false},"0.1.1-beta.5":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1-beta.5","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","@barelyhuman/astring-jsx":"^2.0.0","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"74f10ceb968421c4015cf956c50152e53892e7cf","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom ](#file-name-extensiom)\n  - [Top Level comments ](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\n```sh\nnpm i @barelyhuman/preact-island-plugins\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\\\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\\\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\\\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1-beta.5","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-HExg/jZmfwLioRS60Z6tafHwFDBX0nTJDjc8o2P/rMHhTDxPRJwzZKn8x0PrER40HZzR62vqwTFt6aB6JDFPPw==","shasum":"35399bcfe9bd2324eed6e21ca3d68336930f6c55","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1-beta.5.tgz","fileCount":15,"unpackedSize":34799,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXozJcjmW+pFzXp2i+5nuehT8ytb6haq3nWOho7eN05wIgAwJXqzY/JlGB25XoNAeCIzPvfHK+Q6Dnf+aza3icytg="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1-beta.5_1693224578763_0.49650574361251576"},"_hasShrinkwrap":false},"0.1.1-beta.6":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1-beta.6","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","@barelyhuman/astring-jsx":"^2.0.0","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"8c8289d2880dae5ae310091d078d8d64981571f1","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom ](#file-name-extensiom)\n  - [Top Level comments ](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\n```sh\nnpm i @barelyhuman/preact-island-plugins\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\\\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\\\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\\\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1-beta.6","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-xJ0L2k7lSgIMdlkWMm9M/XQPwf22jxdWzQdRopekQLhzInZfAL1bVVn83AnATAH3w/JQfedttCY5Quy8V7o2Bw==","shasum":"5407dcd9158441e88dc4b32caf5e1177ce95218e","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1-beta.6.tgz","fileCount":16,"unpackedSize":35113,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBzfcxOh+QaCkiDVLgihHuFEZxAZSSsp6b6fkfoJ/eR5AiEAtBnj3DT4kb1UifvQSzK53ZkrLDHJ6Et/V/rzMUP5Sn0="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1-beta.6_1693240409041_0.15150718032117605"},"_hasShrinkwrap":false},"0.1.1-beta.7":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1-beta.7","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","@barelyhuman/astring-jsx":"^2.0.0","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"70ef5805449bd49c5e1db2add6bcc199b0e01af9","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom ](#file-name-extensiom)\n  - [Top Level comments ](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\n```sh\nnpm i @barelyhuman/preact-island-plugins\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\\\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\\\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\\\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1-beta.7","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-GjXjbc4RsdiZZO4PT3P5AGkEY69rTEAN5gfDTPpnEbxpmMxEP0Ifc1WHohpeCVRGumqQXIjYUiPrcKqX0NEi6w==","shasum":"5e9790f3370bf32f211132f36b8ddc8f10f00db4","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1-beta.7.tgz","fileCount":16,"unpackedSize":35117,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDagXvQhYsC//MIP9mzZ/2R5MnHf7BSggD7bxb2AjetQAIgZohwdwEFjLED1feUA4IsjjRlC2moR0MNwJNUJq0MLxQ="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1-beta.7_1693241061960_0.9702347284626138"},"_hasShrinkwrap":false},"0.1.1-beta.8":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1-beta.8","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","@barelyhuman/astring-jsx":"^2.0.0","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"9e0918ac702daceb354d3fa8ad7e3ce4128dcad1","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom ](#file-name-extensiom)\n  - [Top Level comments ](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\n```sh\nnpm i @barelyhuman/preact-island-plugins\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\\\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\\\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\\\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1-beta.8","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-sa2H3mYPjd5N7lDCuBNLT7kTLPtoxEzKV+1a1Q5hjnRmF1g2N7Xp5bWwQViS0SWukE/WONgBOUsyK1XFlCCK6A==","shasum":"693b6b099adcd98dcf4162d6ed6509921f011cc2","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1-beta.8.tgz","fileCount":16,"unpackedSize":35116,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDCJd1ku390jaNu3nmae/ElomJAe+Mpj6c2dtqm7mIHWAiBEAC/hbbFvrm0REcsimjKBLlB8UYMG3Kc7QdKOroVvig=="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1-beta.8_1693241901414_0.6712787503737412"},"_hasShrinkwrap":false},"0.1.1":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.1","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","@barelyhuman/astring-jsx":"^2.0.0","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"1d1d298acf004cf1367aabfdd9d4b600d8e77cbe","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.1","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-afytvL2CtPpG5jloWSPOJLRrzH/mAIdY4BvIYeWAV0QCv2jyl5Q9Rp9CsFm4Hw+8TG+QeWwJzgyIO03Blhk5vg==","shasum":"c2ac46032c184c5b0607609fa3f529fc241d8284","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.1.tgz","fileCount":16,"unpackedSize":35109,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaOExD5Ecw4vOxbnfnRBi+E4I8AdSHCWWj1+s08fruUAIgMzx1LIPEuL6Y2ED8YMAJ0RgJgQMnH2LC11oGt0REwtA="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.1_1694452286021_0.8458079368753246"},"_hasShrinkwrap":false},"0.1.2-beta.0":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.2-beta.0","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.0","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"gitHead":"a5b5d8c5d74e7f424a99153f314238680707274b","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom](#file-name-extensiom)\n  - [Top Level comments](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\nThe installation differs based on which plugin you wish to use.\n\n### esbuild\n\n```sh\nnpm i esbuild @barelyhuman/preact-island-plugins preact\n```\n\n### rollup\n\n```sh\nnpm i rollup preact @barelyhuman/preact-island-plugins @rollup/plugin-babel @rollup/plugin-node\n```\n\nif using `typescript`, you should also add that when using `rollup`\n\n```sh\nnpm i @rollup/plugin-typescript\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_id":"@barelyhuman/preact-island-plugins@0.1.2-beta.0","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-/gRUyQiDH/dF59Ku++J38XFPwlcoVuUteUmuNCLOmlXXFHccDJk01mL7Zlua9UrC8qtNFcZ+oBMXX42ouXkrtA==","shasum":"2779f8ce64316b19b48c2001067111f25b1aa8e4","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.2-beta.0.tgz","fileCount":16,"unpackedSize":35656,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEGH6nTBSwbDffkP169vSytVHXOy4eIWlOVWy1QP271HAiA2yKrYMwlhAleoxWRqEz6HbkTxQQRsSRwMqycLBO5dyA=="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.2-beta.0_1694831444198_0.8606904272935958"},"_hasShrinkwrap":false},"0.1.2-beta.1":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.2-beta.1","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"echo 'tested'"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.0","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-walk":"^8.2.0","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","prettier":"^3.0.0","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.2-beta.1","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom](#file-name-extensiom)\n  - [Top Level comments](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\nThe installation differs based on which plugin you wish to use.\n\n### esbuild\n\n```sh\nnpm i esbuild @barelyhuman/preact-island-plugins preact\n```\n\n### rollup\n\n```sh\nnpm i rollup preact @barelyhuman/preact-island-plugins @rollup/plugin-babel @rollup/plugin-node\n```\n\nif using `typescript`, you should also add that when using `rollup`\n\n```sh\nnpm i @rollup/plugin-typescript\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","gitHead":"aba8ea06a8832bdd6efb960068e18a04705a7cbb","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.18.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-QlM9om29MtBeC5pbImvNLg1NXM9HsXQgmyu5q5aVvQydvZG+2fdkT6BOpDj/RAye7xuPYbQ0wH698UV0lN+4Ig==","shasum":"e6b70930d1cc812780f65a0e19b93aa7954f3020","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.2-beta.1.tgz","fileCount":16,"unpackedSize":39122,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRGORaAPNbyJeQde8EVOWp3I4QADerRubyrC6LcGWe3wIhAJGp2pTcznnMnzwsZ3JlXn6dfh58YB7YZ2O7UmP+XeAU"}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.2-beta.1_1696112104272_0.5408499424245634"},"_hasShrinkwrap":false},"0.1.2-beta.2":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.2-beta.2","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"uvu"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.0","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","acorn-walk":"^8.2.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","magic-string":"^0.30.4","prettier":"^3.0.0","pretty-format":"^29.7.0","rollup":"^3.26.2","typescript":"^5.1.6","uvu":"^0.5.6","uvu-inline-snapshot":"^0.0.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.2-beta.2","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom](#file-name-extensiom)\n  - [Top Level comments](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\nThe installation differs based on which plugin you wish to use.\n\n### esbuild\n\n```sh\nnpm i esbuild @barelyhuman/preact-island-plugins preact\n```\n\n### rollup\n\n```sh\nnpm i rollup preact @barelyhuman/preact-island-plugins @rollup/plugin-babel @rollup/plugin-node-resolve\n```\n\nif using `typescript`, you should also add that when using `rollup`\n\n```sh\nnpm i @rollup/plugin-typescript\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","gitHead":"f957109dfb10deb391ad1e74a938b44b1d2705aa","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.18.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-znPE3+KyGL9ptDRm7h23TclNmWjbIgw2bNYMgQXkBUzYKcXPRZu4A1rVO+ioDunKsB/b0NelN236MzFn0nSGSA==","shasum":"f3843cbe9af64c7caf1324e64b20ba0a9fe5ac19","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.2-beta.2.tgz","fileCount":16,"unpackedSize":39190,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG0VoYGXHuNNlMT4/WkpQfU1APxQ8/pDUhWVMOdvUqQ3AiBW38r52gUjz/kjUIFN2NW5wrJuxKeVtsp9oEOUBPS5uA=="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.2-beta.2_1696251620662_0.9366331478825829"},"_hasShrinkwrap":false},"0.1.2-beta.3":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.2-beta.3","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"uvu"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.0","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","acorn-walk":"^8.2.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","magic-string":"^0.30.4","prettier":"^3.0.0","pretty-format":"^29.7.0","rollup":"^3.26.2","typescript":"^5.1.6","uvu":"^0.5.6","uvu-inline-snapshot":"^0.0.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.2-beta.3","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom](#file-name-extensiom)\n  - [Top Level comments](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\nThe installation differs based on which plugin you wish to use.\n\n### esbuild\n\n```sh\nnpm i esbuild @barelyhuman/preact-island-plugins preact\n```\n\n### rollup\n\n```sh\nnpm i rollup preact @barelyhuman/preact-island-plugins @rollup/plugin-babel @rollup/plugin-node-resolve\n```\n\nif using `typescript`, you should also add that when using `rollup`\n\n```sh\nnpm i @rollup/plugin-typescript\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","gitHead":"95f3424d99aa6ef6555fda2af9f4ad61b5821ecc","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.18.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-UO7VoUBq5yZZvLIEBt9rf/42oIhepRowkUZsngVnuPQBxYbLxkGasgVM4+i/C51Zsta7CK55PktFO7Kjboehww==","shasum":"33734ed6eefb029de168a64dc63db4ea07dce7c8","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.2-beta.3.tgz","fileCount":16,"unpackedSize":39212,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6g+uyHsAcbZ3Ur9lvRR0R/jbZbXFtAJ0ouz7agpmQhgIgSjaEWzyUaQXs0rj0vW/MbvvVEMi+RxWaOCkHxbN4w7A="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.2-beta.3_1696782094182_0.006514551765287369"},"_hasShrinkwrap":false},"0.1.2-beta.4":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.2-beta.4","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"uvu"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.1","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","acorn-walk":"^8.2.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","magic-string":"^0.30.4","prettier":"^3.0.0","pretty-format":"^29.7.0","rollup":"^3.26.2","typescript":"^5.1.6","uvu":"^0.5.6","uvu-inline-snapshot":"^0.0.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.2-beta.4","readme":"# preact-island-plugins\n\n> Preact server rendered, partial hydration and islands for everyone!\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom](#file-name-extensiom)\n  - [Top Level comments](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n- Lazy loaded components\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\nThe installation differs based on which plugin you wish to use.\n\n### esbuild\n\n```sh\nnpm i esbuild @barelyhuman/preact-island-plugins preact\n```\n\n### rollup\n\n```sh\nnpm i rollup preact @barelyhuman/preact-island-plugins @rollup/plugin-babel @rollup/plugin-node-resolve\n```\n\nif using `typescript`, you should also add that when using `rollup`\n\n```sh\nnpm i @rollup/plugin-typescript\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS used by the app. A\nlot of frameworks come with this already setup for you.\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only difference being you don't have to\nmigrate your whole app to these frameworks just to enjoy islands or get rid of\nlet's say something like old JQuery dependencies. I like JQuery but it'll\nprobably be easier to use something better at handling state today.\n\nYou can also be someone who doesn't like frameworks and would prefer working\nwith their own set of choices / decisions in tech. This is also where something\nlike this might be helpful.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\n\n- Anyone who wishes to setup the partial hydration on a server framework.\n- You could be someone with an express / fastify / hapi server using nunjucks or\n  pug and jquery / alpine.js / htmx to add in interactivity.\n- You can add this in and use preact islands to add interactivity to your apps\n  without thinking about it.\n\n**Examples, please?**\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you an issue setting\n  it up still,feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","gitHead":"bac03dde2d8b68e6c808dffb0858b7bf104176e1","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.18.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-QodT1iBCFAhsdfvhQyj1sgVwLURk8/kpwAG83Ablvbiqh/5AQIIQ4+kMVhi+hArnZxmAipDo9XSwq9EKAVkB5g==","shasum":"8a88c60c23c8eef3ded077c75f2b1854053297ea","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.2-beta.4.tgz","fileCount":16,"unpackedSize":39212,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEQCWRf/hpt7sRybTqNcLToNZb4sEakn8Sk8Iu54lmEUAiAPOXzAvKnK3WS9lRH3VWbRk+zTMLq398wCDPiU0GXicA=="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.2-beta.4_1696785002173_0.7303666797038548"},"_hasShrinkwrap":false},"0.1.2":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.2","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"uvu"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.1","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","acorn-walk":"^8.2.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","husky":"^8.0.3","lint-staged":"^13.2.3","magic-string":"^0.30.4","prettier":"^3.0.0","pretty-format":"^29.7.0","rollup":"^3.26.2","typescript":"^5.1.6","uvu":"^0.5.6","uvu-inline-snapshot":"^0.0.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.2","gitHead":"579d584a930babf9ab7a75961cc7f0e50a01610d","description":"> Preact server rendered, partial hydration and islands for everyone!","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.18.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-QKGJe2tYak1oSB9ZLpgt/6p6tkoKSvjJFF2Eq9NR8l4yl8/gFLceY33wwNYyI5V0MbLtOC/JonBIfFdmj92HRQ==","shasum":"e478afc72633c5a33421f480e85b09161cca7f99","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.2.tgz","fileCount":16,"unpackedSize":39205,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICOh65NYFikFLfM4RCL1G3af7kewDrxrDzq9e3AU+Vh6AiEA6qpTUqrzUJ2WqsVdnE3dj2bCUylxoiB38/VurNLadiQ="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.2_1697232199062_0.43942971459926294"},"_hasShrinkwrap":false},"0.1.3":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.3","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"uvu","test:ci":"c8 uvu"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.1","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","acorn-walk":"^8.2.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","c8":"^8.0.1","husky":"^8.0.3","lint-staged":"^13.2.3","magic-string":"^0.30.4","prettier":"^3.0.0","pretty-format":"^29.7.0","rollup":"^3.26.2","typescript":"^5.1.6","uvu":"^0.5.6","uvu-inline-snapshot":"^0.0.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.3","gitHead":"7b6c9e6753498e3008b4d6f80bdca86b0ceb6722","description":"<blockquote style=\"display:flex; align-items:center\"> <img height=20 src=\"https://preactjs.com/favicon.ico\" /> Preact server rendered, partial hydration and islands for everyone! </blockquote>","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.18.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-UUa03nlYzLwXkZtj9d5w827L/DAA/ulWBQ+b6SQeQqcek3rNTtLqFQ4hHK25hFs+96IAoZspWLo/YN98Dag2HQ==","shasum":"03c3fe008972e3587b53ad810bc79c72419dffd7","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.3.tgz","fileCount":16,"unpackedSize":39272,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICE+IH8PrmkghY69B2iGwFv+Q7RpzOreEaNirQOE7cKNAiB+07prjUVsq7ZAaCr8FNgUL3A+ckGBzyUjtziPGihUnA=="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.3_1697283089797_0.5915845033061509"},"_hasShrinkwrap":false},"0.1.4-beta.1":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.4-beta.1","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"uvu","test:ci":"c8 uvu"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.1","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","acorn-walk":"^8.2.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","c8":"^8.0.1","husky":"^8.0.3","lint-staged":"^13.2.3","magic-string":"^0.30.4","prettier":"^3.0.0","pretty-format":"^29.7.0","rollup":"^3.26.2","typescript":"^5.1.6","uvu":"^0.5.6","uvu-inline-snapshot":"^0.0.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.4-beta.1","readme":"# preact-island-plugins\n\n<blockquote style=\"display:flex; align-items:center\">\n<img height=20 src=\"https://preactjs.com/favicon.ico\" /> Preact server rendered, partial hydration and islands for everyone!\n</blockquote>\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom](#file-name-extensiom)\n  - [Top Level comments](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n  - Automatic detection of an island (`since v0.1.2`)\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\nThe installation differs based on which plugin you wish to use.\n\n### esbuild\n\n```sh\nnpm i esbuild @barelyhuman/preact-island-plugins preact\n```\n\n### rollup\n\n```sh\nnpm i rollup preact @barelyhuman/preact-island-plugins @rollup/plugin-babel @rollup/plugin-node-resolve\n```\n\nif using `typescript`, you should also add that when using `rollup`\n\n```sh\nnpm i @rollup/plugin-typescript\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\nFor rollup, it might look something like this\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS sent to the client\nby your app. A lot of frameworks already handle this for you, a few examples\nare:\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only reason to choose this plugin would be\nthat you don't have to migrate your whole app to the framework just to enjoy\nislands or get rid of let's say something like old JQuery dependencies. I like\nJQuery but it'll probably be easier to use something better at handling state\ntoday.\n\nThis can also be used by someone who doesn't like frameworks and would prefer\nworking with their own set of choices / decisions in their tech stack.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\n\n- Anyone who wishes to setup partial hydration on an existing server codebase.\n- People building meta frameworks for preact\n\n**Examples, please?**\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you have any\n  problems setting it up still, feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","gitHead":"ca59931b7937ae5a2188451e944600fa43e7fe0c","description":"<blockquote style=\"display:flex; align-items:center\"> <img height=20 src=\"https://preactjs.com/favicon.ico\" /> Preact server rendered, partial hydration and islands for everyone! </blockquote>","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-CN9tQCa116K4SoCH1YNLdKLDUVeOoZNb/DpFfJ4XH3ntXz+iUYajimo76ASeMr3+h46EDjPXfCYA7dX++M1ldA==","shasum":"3da62fb6a199019c2457017aab4689733ae6ee5d","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.4-beta.1.tgz","fileCount":16,"unpackedSize":39685,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTXQKwLLJamcXb228dE5PaKncKy6Fh+ihSDdFnNWKA0wIhANTzLKUGWxcI+8EbuyrfGjOPjEfYKByd55zr+xt/Ldsy"}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.4-beta.1_1699490320929_0.5411911400751033"},"_hasShrinkwrap":false},"0.1.4":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.4","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"uvu","test:ci":"c8 uvu"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.1","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-logical-assignment":"^0.1.4","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","acorn-walk":"^8.2.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","c8":"^8.0.1","husky":"^8.0.3","lint-staged":"^13.2.3","magic-string":"^0.30.4","prettier":"^3.0.0","pretty-format":"^29.7.0","rollup":"^3.26.2","typescript":"^5.1.6","uvu":"^0.5.6","uvu-inline-snapshot":"^0.0.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.4","gitHead":"010bf380de2280d517b4ecb805e1cc54d9f23e18","description":"<blockquote style=\"display:flex; align-items:center\"> <img height=20 src=\"https://preactjs.com/favicon.ico\" /> Preact server rendered, partial hydration and islands for everyone! </blockquote>","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.18.2","_npmVersion":"9.8.1","dist":{"integrity":"sha512-jePH3XhrwBjEYHIkG/d3+ud3n8N+FTBWmtvecb3iQnmW2BR2GN4UExSreJXBmvbSrCoK3qtJqC+yH1wceFiHCA==","shasum":"b9b3cab18a30b15e2e890b755bf609462df4d806","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.4.tgz","fileCount":16,"unpackedSize":39678,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdEvBR173Tn8zI4yCo9CRJTBCk/ySzAPpPL7m2LOfOggIgR6u9pMCvSCgiDXPVJkmLAVaoG0otcortl6ZmenlwzJU="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.4_1699501544206_0.6415690867803949"},"_hasShrinkwrap":false},"0.1.5-beta.0":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.5-beta.0","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"uvu","test:ci":"c8 uvu"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.1","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-logical-assignment":"^0.1.4","acorn-private-class-elements":"^1.0.0","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","acorn-walk":"^8.2.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","c8":"^8.0.1","husky":"^8.0.3","lint-staged":"^13.2.3","magic-string":"^0.30.4","prettier":"^3.0.0","pretty-format":"^29.7.0","rollup":"^3.26.2","typescript":"^5.1.6","uvu":"^0.5.6","uvu-inline-snapshot":"^0.0.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.5-beta.0","readme":"# preact-island-plugins\n\n<blockquote style=\"display:flex; align-items:center\">\n<img height=20 src=\"https://preactjs.com/favicon.ico\" /> Preact server rendered, partial hydration and islands for everyone!\n</blockquote>\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom](#file-name-extensiom)\n  - [Top Level comments](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n  - Automatic detection of an island (`since v0.1.2`)\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\nThe installation differs based on which plugin you wish to use.\n\n### esbuild\n\n```sh\nnpm i esbuild @barelyhuman/preact-island-plugins preact\n```\n\n### rollup\n\n```sh\nnpm i rollup preact @barelyhuman/preact-island-plugins @rollup/plugin-babel @rollup/plugin-node-resolve\n```\n\nif using `typescript`, you should also add that when using `rollup`\n\n```sh\nnpm i @rollup/plugin-typescript\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\nFor rollup, it might look something like this\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS sent to the client\nby your app. A lot of frameworks already handle this for you, a few examples\nare:\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only reason to choose this plugin would be\nthat you don't have to migrate your whole app to the framework just to enjoy\nislands or get rid of let's say something like old JQuery dependencies. I like\nJQuery but it'll probably be easier to use something better at handling state\ntoday.\n\nThis can also be used by someone who doesn't like frameworks and would prefer\nworking with their own set of choices / decisions in their tech stack.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\n\n- Anyone who wishes to setup partial hydration on an existing server codebase.\n- People building meta frameworks for preact\n\n**Examples, please?**\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you have any\n  problems setting it up still, feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","gitHead":"e8f714be03d4cb9f85ed33664ab65e66d5997b12","description":"<blockquote style=\"display:flex; align-items:center\"> <img height=20 src=\"https://preactjs.com/favicon.ico\" /> Preact server rendered, partial hydration and islands for everyone! </blockquote>","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.19.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-Z7QiqZwom8e6PGrA2JcB8AOcv4K7lAB/VgQaALhLLHFU0SIEtD7j1DKaCZkQbQAHELP0rCmaqQOQq+D66jDMUQ==","shasum":"ef0f8c8bcd1b95199631e792740a1f7a43e58c36","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.5-beta.0.tgz","fileCount":16,"unpackedSize":39820,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3xY/RBLntDn5mtRI1c2ohycFO767tMkypPolZccjH+QIgJ0S72v+eT+Amf0+gFbMpaRqieuwljcuKULOP68/RRuc="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.5-beta.0_1703452733223_0.9669813751799479"},"_hasShrinkwrap":false},"0.1.5-beta.1":{"name":"@barelyhuman/preact-island-plugins","version":"0.1.5-beta.1","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"license":"MIT","author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"exports":{".":"./index.js","./internals":"./internals.js","./esbuild":"./esbuild.js","./rollup":"./rollup.js"},"main":"index.js","scripts":{"fix":"npx prettier --write .","next":"bumpp","play":"cd playground; node build.js; node dist/server.js","play:build:esbuild":"cd playground; npm run build:esbuild","play:build:rollup":"cd playground; npm run build:rollup","prepare":"husky install","test":"uvu","test:ci":"c8 uvu"},"lint-staged":{"*.{js,css,md,json}":"prettier --write"},"prettier":"@barelyhuman/prettier-config","dependencies":{"@barelyhuman/astring-jsx":"^2.0.1","acorn":"^8.10.0","acorn-class-fields":"^1.0.0","acorn-import-assertions":"^1.7.2","acorn-jsx":"^5.3.1","acorn-jsx-walk":"^2.0.0","acorn-logical-assignment":"^0.1.4","acorn-loose":"^8.4.0","acorn-private-class-elements":"^1.0.0","acorn-private-methods":"^1.0.0","acorn-static-class-features":"^1.0.0","acorn-walk":"^8.2.0","astring":"^1.8.6","defu":"^6.1.2","esbuild":"^0.18.11"},"devDependencies":{"@babel/core":"^7.22.8","@babel/plugin-transform-react-jsx":"^7.22.5","@barelyhuman/prettier-config":"^1.1.0","@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":"^11.1.2","bumpp":"^9.1.1","c8":"^8.0.1","husky":"^8.0.3","lint-staged":"^13.2.3","magic-string":"^0.30.4","prettier":"^3.0.0","pretty-format":"^29.7.0","rollup":"^3.26.2","typescript":"^5.1.6","uvu":"^0.5.6","uvu-inline-snapshot":"^0.0.2"},"peerDependencies":{"@rollup/plugin-babel":"^6.0.3","@rollup/plugin-node-resolve":"^15.1.0","@rollup/plugin-typescript":">=11.1.2","esbuild":"^0.18.11","preact":"^10.15.1","rollup":"^3.26.2","typescript":"^5.1.6"},"peerDependenciesMeta":{"esbuild":{"optional":true},"rollup":{"optional":true}},"publishConfig":{"access":"public"},"_id":"@barelyhuman/preact-island-plugins@0.1.5-beta.1","readme":"# preact-island-plugins\n\n<blockquote style=\"display:flex; align-items:center\">\n<img height=20 src=\"https://preactjs.com/favicon.ico\" /> Preact server rendered, partial hydration and islands for everyone!\n</blockquote>\n\n## TOC\n\n- [Highlights](#highlights)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Concepts](#concepts)\n  - [File Name Extensiom](#file-name-extensiom)\n  - [Top Level comments](#top-level-comments)\n  - [Lazy Hydration](#lazy-hydration)\n- [Limitations](#limitations)\n- [Example Configs](#example-configurations)\n- [How](#how)\n- [FAQs](#faqs)\n- [Contributing](#contributing)\n\n## Highlights\n\n- Tiny\n- Tree Shakeable\n- Flexibile / Not dependent on folder structure\n  - Use either `.island.js` file extensions for initialize islands\n  - or `//@island` top level file comments\n  - Automatic detection of an island (`since v0.1.2`)\n- Lazy Hydration Modifiers - `//@island lazy`\n\n## Installation\n\nThe installation differs based on which plugin you wish to use.\n\n### esbuild\n\n```sh\nnpm i esbuild @barelyhuman/preact-island-plugins preact\n```\n\n### rollup\n\n```sh\nnpm i rollup preact @barelyhuman/preact-island-plugins @rollup/plugin-babel @rollup/plugin-node-resolve\n```\n\nif using `typescript`, you should also add that when using `rollup`\n\n```sh\nnpm i @rollup/plugin-typescript\n```\n\n## Usage\n\n```js\n// Single Import\nconst preactIslands = require('@barelyhuman/preact-island-plugins')\n\npreactIslands.rollup(options)\n// or\npreactIslands.esbuild(options)\n\n// Tree Shakeable Import\n\n// For rollup\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\n\n// for esbuild\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n```\n\nBoth bundlers use the same Options type, please read through the API options\nbelow to configure the behaviour of the island generation\n\n```ts\nexport interface Options {\n  // The working directory of the project, Defaults to '.'\n  rootDir: string\n  // If using `atomic` components, use the baseURL to specific the path where the JS Assets will be available\n  baseURL: string\n  // when true, each island has it's own script for lazy loading JS and Interactivity\n  atomic?: boolean\n  // If working with bundlers where hashing isn't available, you can set the `hash` to true to get browsers\n  //  to load the correct JS after loads\n  hash?: boolean\n  // The plugins use your bundler (rollup, esbuild, etc) to also bundle the client asset with it's own imports\n  // so the `client` options define the behavior for that\n  client: {\n    // path of where to output the bundled components\n    output: string\n  }\n}\n```\n\n#### Concepts\n\nThe overall idea is to be able to define islands without thinking about it.\n\nThe plugins provide 2 ways to do this.\n\n##### File name extensiom\n\nYou name the file `.island.js` or `.island.tsx` and this will generate the\nisland files for you according to your build configs. Make sure you go through\nthe [playground](/playground) to better understand this.\n\n##### Top Level comments\n\nThe other options is to prefix the code with `//@island` and this is to be done\nwhere you start the file without knowing if it's going to be an islad or not.\n\nThis might look, something like this\n\n```js\n//@island\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n##### Lazy Hydration\n\nThe islands generated by this plugin is already lazy loaded, so you don't have\nto ever set it up and the browser will take care of handling the cache of the\nfile. Though, we do provide with lazy hydration which can help with performance\nwhere the JS is downloaded earlier but is not applied to the DOM element unless\nit's in view.\n\nIt would look something like this\n\n```js\n//@island lazy\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\nYou can also define the threshold of visibility by adding a number from `0` to\n`1` to the `lazy` modifier.\n\n- `0` - Hydrate as soon as the element is in view.\n- `0.5`(default) - Hydrate after at least 50% of the element is in view\n- `1` - Hydrate after the whole element is in view\n\n```js\n//@island lazy:0.2\n//              ^ hydrate Counter after 20% of the element is in the viewport\n\nexport default function Counter() {\n  const [count, setCount] = useState(0)\n  return <>{count}</>\n}\n```\n\n### Limitations\n\n- Only allows Single default export to be an island\n  [right now](https://github.com/barelyhuman/preact-island-plugins/issues/10)\n- Bug with Text based containers\n  [#4](https://github.com/barelyhuman/preact-island-plugins/issues/4)\n\n## Example Configurations\n\n```js\n// build.js\n// for esbuild\nconst esbuild = require('esbuild')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/esbuild')\n\nesbuild\n  .build({\n    entryPoints: ['./server.js'],\n    format: 'cjs',\n    target: 'node16',\n    platform: 'node',\n    bundle: true,\n    jsx: 'automatic',\n    jsxImportSource: 'preact',\n    loader: {\n      '.js': 'jsx',\n    },\n    outdir: 'dist',\n    plugins: [preactIslands()],\n  })\n  .then(_ => process.exit(0))\n  .catch(_ => process.exit(1))\n```\n\nFor rollup, it might look something like this\n\n```js\n// rollup.config.js\nconst { nodeResolve } = require('@rollup/plugin-node-resolve')\nconst { babel } = require('@rollup/plugin-babel')\nconst preactIslands = require('@barelyhuman/preact-island-plugins/rollup')\nconst { DEFAULT_EXTENSIONS } = require('@babel/core')\nconst typescript = require('@rollup/plugin-typescript').default\n\n/**\n * @type {import(\"rollup\").RollupOptions}\n */\nmodule.exports = {\n  input: 'server.js',\n  output: {\n    dir: 'dist',\n    format: 'cjs',\n  },\n  plugins: [\n    // helper plugins to handle typescript for the remaining of the server\n    typescript({\n      compilerOptions: {\n        jsx: 'react-jsx',\n        jsxImportSource: 'preact',\n      },\n    }),\n    preactPlugin(),\n    // subset handlers for the remaining of the server to handle jsx\n    babel({\n      plugins: [\n        [\n          '@babel/plugin-transform-react-jsx',\n          { runtime: 'automatic', importSource: 'preact' },\n        ],\n      ],\n      babelHelpers: 'bundled',\n      extensions: [...DEFAULT_EXTENSIONS, '.ts', '.tsx'],\n    }),\n  ],\n}\n```\n\n## How ?\n\nThe source code is pretty small but if it's just the concept behind that you\nwish to understand, then please keep reading this.\n\nIslands are normally interactive elements or tiny apps that are mounted on parts\nof a static html. This is done to minimize the amount of JS sent to the client\nby your app. A lot of frameworks already handle this for you, a few examples\nare:\n\n- [Astro.build](http://astro.build/)\n- [Deno Fresh](http://fresh.deno.dev/)\n\nThere's tiny differences in the implementations that each of us use but the\noverall concept remains same. The only reason to choose this plugin would be\nthat you don't have to migrate your whole app to the framework just to enjoy\nislands or get rid of let's say something like old JQuery dependencies. I like\nJQuery but it'll probably be easier to use something better at handling state\ntoday.\n\nThis can also be used by someone who doesn't like frameworks and would prefer\nworking with their own set of choices / decisions in their tech stack.\n\nOverall, it's tiny enough to build your own framework on top off and also shove\nit down the structure you already have.\n\n# FAQS\n\n**What on earth in islands?**\n\n- Glad you asked, You can\n  [read about it on here](https://barelyhuman.github.io/preact-islands-diy/)\n\n**Who's this library/plugins for?**\n\n- Anyone who wishes to setup partial hydration on an existing server codebase.\n- People building meta frameworks for preact\n\n**Examples, please?**\n\n- Sure, you can go through the [playground](/playground) folder to see how to\n  use it with esbuild and rollup with an express server. If you have any\n  problems setting it up still, feel free to raise an issue.\n\n## Contributing\n\nContributions are welcome! Here's how you can get involved:\n\n1. Fork the project repository.\n2. Create a new branch for your feature or bug fix.\n3. Make your changes and commit them, following the project's code style\n   guidelines.\n4. Push your changes to your forked repository.\n5. Submit a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the [MIT License](/LICENSE).\n","readmeFilename":"README.md","gitHead":"3648985ca98c6c01780575a4329f81eb00a91c43","description":"<blockquote style=\"display:flex; align-items:center\"> <img height=20 src=\"https://preactjs.com/favicon.ico\" /> Preact server rendered, partial hydration and islands for everyone! </blockquote>","bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","_nodeVersion":"18.19.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-f4Se6JLO9Iu5d51JxP8WujM0hyHe9X54gaL3qDQdWg7nhcrZOMkYPqTOi10cIRxQomnMV8tbEZqQYo6bdDIEpg==","shasum":"91d478df05b084b5701e9929efc652e9e42a4df8","tarball":"https://registry.npmjs.org/@barelyhuman/preact-island-plugins/-/preact-island-plugins-0.1.5-beta.1.tgz","fileCount":16,"unpackedSize":39923,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA1Cm6q2BJqvt+jBKxWeiGgUon19jYM0giCCMMrQE0hDAiEAgR+lgaf5WV+CZ6TptHaitDI+0B4UcMWNxZEf2Wz3xtc="}]},"_npmUser":{"name":"barelyreaper","email":"sidgroks@gmail.com"},"directories":{},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/preact-island-plugins_0.1.5-beta.1_1703454276954_0.5029078269098259"},"_hasShrinkwrap":false}},"time":{"created":"2023-03-10T20:23:44.106Z","0.0.2":"2023-03-10T20:23:44.308Z","modified":"2023-12-24T21:44:37.366Z","0.0.3":"2023-03-10T20:40:08.651Z","0.0.5":"2023-03-26T09:41:28.354Z","0.0.6":"2023-04-25T13:57:23.885Z","0.0.7":"2023-04-27T02:54:30.172Z","0.0.8":"2023-04-27T02:58:45.421Z","0.0.9":"2023-05-22T16:01:12.180Z","0.0.10":"2023-05-22T18:49:07.049Z","0.0.11":"2023-06-13T18:23:12.709Z","0.0.12":"2023-06-13T19:04:41.410Z","0.0.13":"2023-06-14T12:54:23.921Z","0.0.14-beta.2":"2023-07-05T17:41:52.237Z","0.0.14-beta.3":"2023-07-05T17:51:53.411Z","0.0.14-beta.4":"2023-07-05T18:22:39.306Z","0.0.14":"2023-07-05T19:11:31.101Z","0.1.1-beta.0":"2023-08-07T15:04:41.947Z","0.1.1-beta.1":"2023-08-07T22:15:26.075Z","0.1.1-beta.2":"2023-08-09T23:56:02.642Z","0.1.1-beta.3":"2023-08-10T00:19:18.273Z","0.1.1-beta.4":"2023-08-23T18:40:44.221Z","0.1.1-beta.5":"2023-08-28T12:09:38.954Z","0.1.1-beta.6":"2023-08-28T16:33:29.208Z","0.1.1-beta.7":"2023-08-28T16:44:22.179Z","0.1.1-beta.8":"2023-08-28T16:58:21.656Z","0.1.1":"2023-09-11T17:11:26.210Z","0.1.2-beta.0":"2023-09-16T02:30:44.390Z","0.1.2-beta.1":"2023-09-30T22:15:04.580Z","0.1.2-beta.2":"2023-10-02T13:00:20.874Z","0.1.2-beta.3":"2023-10-08T16:21:34.360Z","0.1.2-beta.4":"2023-10-08T17:10:02.428Z","0.1.2":"2023-10-13T21:23:19.270Z","0.1.3":"2023-10-14T11:31:30.004Z","0.1.4-beta.1":"2023-11-09T00:38:41.266Z","0.1.4":"2023-11-09T03:45:44.386Z","0.1.5-beta.0":"2023-12-24T21:18:53.482Z","0.1.5-beta.1":"2023-12-24T21:44:37.170Z"},"maintainers":[{"name":"barelyreaper","email":"sidgroks@gmail.com"}],"description":"<blockquote style=\"display:flex; align-items:center\"> <img height=20 src=\"https://preactjs.com/favicon.ico\" /> Preact server rendered, partial hydration and islands for everyone! </blockquote>","homepage":"https://github.com/barelyhuman/preact-island-plugins#readme","repository":{"type":"git","url":"git+https://github.com/barelyhuman/preact-island-plugins.git"},"author":{"name":"reaper","email":"ahoy@barelyhuman.dev"},"bugs":{"url":"https://github.com/barelyhuman/preact-island-plugins/issues"},"license":"MIT","readme":"","readmeFilename":""}