{"_id":"spark-ssr","_rev":"33-1232ff392fa89e97456d7ec1b899816c","name":"spark-ssr","dist-tags":{"rc":"1.0.0-rc.3","latest":"1.4.0"},"versions":{"0.1.0":{"name":"spark-ssr","version":"0.1.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.1.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"ef43fc0ba824c00de5bb1625468b4f3b4f6722bc","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.1.0.tgz","fileCount":10,"integrity":"sha512-cX4XfHbA7jDP7T7x4N91lcudF3qr1iRSs/zK+s6w6zPIRqRVWCyPQy9oc8sCwcxjQJuySPJLVeBKs+LprI0NWQ==","signatures":[{"sig":"MEUCIQDNaBf3LcTFNCTNCOMru1IsPE5tFrb243n9KEpF72wVvwIgVCpTLS/fyGWquzIRuIc94iHY1lXdDAz6E5VXSwT3CKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":66092},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"bdf4bec68273dd6f38f45c28185bc7553de6423d","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, <spark-ssr> declarative queries, auto CRUD APIs, sessions, uploads, middleware. No build step.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.1.0_1783155175649_0.3972727670375733","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"spark-ssr","version":"0.1.1","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.1.1","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"487663c8c6362244ddfb8710dddd16f1a67f284a","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.1.1.tgz","fileCount":10,"integrity":"sha512-NmbzS5sidrx0V+qd2z7OC308GxfQ0e5ADzh87FJeaRW+oiu59gcWj5LaH5EUiYGlLZ5o3TFiLAyhopznhkhgXA==","signatures":[{"sig":"MEUCIECcJmOpUpQ0xwyW85RKmqKihOy145120z+Jb7XxEnlCAiEA0x7CKMQ58j3n388Yi8CA9x0LQ7G5a4iICO35VI0Xo7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72088},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"b60f7b596cd53072580c5cba7ac52814e89b6588","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, <spark-ssr> declarative queries, auto CRUD APIs, sessions, uploads, middleware. No build step.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.7"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.1.1_1783176296020_0.7884000417568193","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"spark-ssr","version":"0.2.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.2.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"1f7b1c3762129ed84b9591e9e9bd84c9c089c82c","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.2.0.tgz","fileCount":10,"integrity":"sha512-UbLnQCYg+cGT0NihJDvZKHsM9jbXJXQ2ENJfg/hGhSLhSxs+sJSdJO03QlXZI6LXllKEI98bGBqO4cVM+mEAng==","signatures":[{"sig":"MEUCIFt4xBr7E3aHd0Dp05kZulh/8aEPUlvbulQm7Yzvd7vLAiEAr9yT/hWtFyLCxVEbJ8YvMIffHQRpZPViqIrI9WP0jXI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85843},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"0a7804d852507de023a0c2deb7eb76d7699884af","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, <spark-ssr> declarative queries, auto CRUD APIs, sessions, uploads, middleware. No build step.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.2.0_1783182270299_0.946160248815008","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"spark-ssr","version":"0.3.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.3.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"068a0487b7b689449e4d9e3be32faa85ce671fa6","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.3.0.tgz","fileCount":12,"integrity":"sha512-G0M/SnjgJkUo+OE0o6d/of15Abl/P6cLTcnBL2Za21E1fxdubsJzDssSkLcrriT2KTRjupugJBgq5GzC1J/v0Q==","signatures":[{"sig":"MEUCIDtXdKcePSdfF+HCtjnBeHYcqR0k/y1Xfk2OvYJXPIhTAiEAkgw6ArJYD7DQJv4ajM+Y+7Sg/mqVdqDmDCJtxMhLrLk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":145445},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"af8f93b0109226933359acc0ae3bde7e20cbb376","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.3.0_1783196244720_0.29116586840596814","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"spark-ssr","version":"0.3.1","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.3.1","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"68772c91bfb835b9a383b73c2ce4519cfc9b95eb","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.3.1.tgz","fileCount":12,"integrity":"sha512-fu80fv6iMtMwh4zlwP2gkyEdQNpxVPSd8u7+0weTGUyVtND1jQXJB7CrfqvGTlPjpMjlEIt7memu9JcIBJ8KOw==","signatures":[{"sig":"MEUCIQCJC/rhqySBWwIeAL9k/uuFeKCbThweOTIxuN9V8R94rwIgcPOGk/rEkIwJM3MTzUo1FdWxpRvc0Hf/Auniw8JfApQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":146338},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"a1f5bc32431da219bcd8dd8720731ee9b8a4230f","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.3.1_1783199593543_0.8362311259526805","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"spark-ssr","version":"0.3.2","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.3.2","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"042196b6098f532503f68b220d0aeb4619dc1360","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.3.2.tgz","fileCount":12,"integrity":"sha512-vaJiFU85WaxOVUHD7jZeK/3KeUVn0Mq+Ikd//aaLgXj3cc8VirkEu1lzbOfGsMvPpb8f0xEuLOWxQjdil/fobg==","signatures":[{"sig":"MEUCIB7nKvdY2na0cNv3Dm+X9rhi/qzgf+PyDjxg/V5r7o+RAiEAtRK524/GaXzAaAZWpk0q2KQfDntfb9qp6zfBdUv2B3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":147596},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"e64ba33bf3c2791c3f8ed401f058e5584309c799","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.3.2_1783214147709_0.7779092426829004","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"spark-ssr","version":"0.3.3","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.3.3","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"8352248a54d6416ab74b8103c9403eca94631e0a","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.3.3.tgz","fileCount":12,"integrity":"sha512-jLsVoS1WbW3+kr4Yb9fWUHG6nQCn1BzPgHAd7lOYb9V5PtPvYPxaWjfDZADgViL7zWWY2jWKBooX7U8qaqH+Ow==","signatures":[{"sig":"MEYCIQDbkbFMEbO5FwFOVj9R/vNkpMAgRYs+gijgSPeL68p1KQIhAN3yGKqvaPhkjG4Vk8+D3uGruefPNledObQVfxILT5cF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":148700},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"9b1fc67b3f2343f6a04de033acf16a32f00832fc","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.3.3_1783214972121_0.7118251318931654","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"spark-ssr","version":"0.3.4","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.3.4","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"e5c200df8e9e1eb179b29c13c594e2fd5776970f","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.3.4.tgz","fileCount":12,"integrity":"sha512-/LLnS2CfN5nyZGzJGYqztrsQTALNXj3MZ8fKeXwACTDQ3GD9wo4FFhZ3lS3y3KqDFNH4ObBBqcBOMckKpphkJA==","signatures":[{"sig":"MEYCIQDMw6vGmLyxXIaXjGqPgFsjYfnrZ+V0gspAdLHyGGYmtwIhAMdM3+x3fdy6YsLLK+O8FuSgfca/t38xfJqiSn5D0OnY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":149072},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"35dd633c63addbd44a73e7eb37d5e2b4a8e19405","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.3.4_1783236087361_0.6892476894673121","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"spark-ssr","version":"0.3.5","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.3.5","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"473f43f9b8d6aa98e8a438ca34685083859fecbd","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.3.5.tgz","fileCount":12,"integrity":"sha512-ONUTa2+20JfVGfSbIhMAVGO6MqCv/fuQGYOqICd/GF5fpMPxlr7Ko10ns2IENIFaR3ufIIn3yPr/XP3OkyhDIA==","signatures":[{"sig":"MEUCIQDXJOe/JKfZAP3NJYImhnT4VjwE/GJEg1+gRVS5fGhcDAIgbrJg9PKKibNVyqQTknnRdHiQZNwWabgJC1oxQoZ2E9E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":151808},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"4ab66ddb67eb2ac2c12a2f617f1160f53ff8430d","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.3.5_1783238111759_0.3937474138566359","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"spark-ssr","version":"0.4.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.4.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"6f60598b23b3ae653ef007b469b9581e31541c25","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.4.0.tgz","fileCount":12,"integrity":"sha512-9tB1BYm8fJvM64HzyLXUDwsmcXORIwGN3MVmxryDn3b8FrFDp/vX8BfjILISMfWu57xwv/txmPSC30tcEvOXyA==","signatures":[{"sig":"MEQCICtfdlu0eV8bnlbgkiQSFfC/gQ40QbUxZ3ny/cIrsrA+AiBeCJzXshGdJ27n1cOoOmRgklL/bBdlm+lXNj7fnimPPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":169110},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"5f568636b1056c12483d5e6a761aff88c3167eea","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.4.0_1783240398145_0.07440903045247893","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"spark-ssr","version":"0.5.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.5.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"3353079b2a24c7538f0f8a3e3302848b1489f9bf","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.5.0.tgz","fileCount":12,"integrity":"sha512-Hud/A41JsThFb0BdMlXSC2DJOCadjA3eq3D8Anzd1rzSXuhmQsLtU6+UwzuuRtWcc/4r56GZ44qOx0boB4Muow==","signatures":[{"sig":"MEQCICIu3A9WjVUIkoX4zFTflE3Q43HD4wvd6DU3Ukc54UU3AiALFR8vk0tHiX8y9fiTbcHMnzFPd9aTGHvLAwmA3r4NvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":184310},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"f09a5ba6a95b041a6c9cb9907308dbaf42fbba53","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.5.0_1783261850033_0.9566282032160414","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"spark-ssr","version":"0.6.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.6.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"d1b2797463522960444fa9d1a15000023c605561","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.6.0.tgz","fileCount":12,"integrity":"sha512-epmKxJh0OIjAM7VJGzvfJbCCxGmPutqQs1ZxVcuk82QdViVgRUGstK8VL19mutWrBdNe6hAdE40p/wmjYwzSTQ==","signatures":[{"sig":"MEUCIQCWmhji/KlC5PVC2qcMc8ON9ctcXU1rQAQ6sg9fOuNxXAIgRuL6J9mVdANT9XazadqZetmxxI6jt6cSpzMZ3Qy4wAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193845},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"96d25320b26d2ca0b796d967ffe3314f60702b09","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.6.0_1783268655468_0.15159906540472767","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"spark-ssr","version":"0.6.1","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.6.1","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"8d7df34c7164c595468ab481631493486937e8f1","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.6.1.tgz","fileCount":12,"integrity":"sha512-pqNhIobIahpTLWjswGDv1J226TisQ7my8ohbpDrJo9mX8etKONZ+S02TzVMzX1WT/cmf7tmRrEMXSBebSTlv8g==","signatures":[{"sig":"MEUCIHomcChgwXAWGy2iZVJZHfYo1IFxWVVfECfEbu2ZYis6AiEAwWRAgSPCZsoeO1PtzU+HXc6BHC9OAftx7jO7hEo4inQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":194210},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"d14c395fd93bdc6ff6352530d23fcca4e89809e2","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. No build ","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.6.1_1783270199527_0.047676337495626164","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"spark-ssr","version":"0.7.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.7.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"731e11092f1a0cafbf874a6bed002f8ca69533a2","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.7.0.tgz","fileCount":12,"integrity":"sha512-9Cs7FOvdQ6a+rbNq64/x4P4PPXNLyGrxeb3KR2UYG74MRcAqFpAK/lqE3/2OSe7RSisjY3F26v/pPyLqCDBSJA==","signatures":[{"sig":"MEYCIQD6gvb4FImwxEQCp8XMdcO8fjSigB/MZQr7DwIzgyz7DQIhAJrnr3pGIOF6pA3u/DxFqCWX4xtzRhtick3htENfhjXc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":215900},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"8432a0557380880b25ba5517217a974898053920","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.7.0_1783275735484_0.5179730739765884","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"spark-ssr","version":"0.7.1","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.7.1","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"ef40181146da75ef57ee26eabd479afe7bace0f6","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.7.1.tgz","fileCount":12,"integrity":"sha512-hKKPrmAGWTCt25Rf16jwSjlngeZgyCwRRIM/cD1oxcdy/yAIUe3YRyOx6eyq7sFJM0aRH/9kRI41XVmMlMBNjw==","signatures":[{"sig":"MEUCIQDdiPrYbobSYTWFGkM0naJjhLY7c+7n9wI+HZEA+5PGOgIgN1aZCr6sQQQruFZGoNBqt8LlDnPlVVfbPc9J2wauk+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":222250},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"a530c51dbfa556eaca83d95111bf6c95e169aa6b","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.7.1_1783317054630_0.9405586130135293","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"spark-ssr","version":"0.7.2","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.7.2","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"dabfc725fb548c0c366043eda570f5b8eaa11015","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.7.2.tgz","fileCount":12,"integrity":"sha512-Sb15dC2mUqhwOl5V7sPa7og+uTYuZTbkv2XRl5q44FjLN5jdRpvZr1Hwo45zmrLMgI5ZlOwCAWpF0gShhQzZ/Q==","signatures":[{"sig":"MEUCICHoddI1QjtsyZCJ0XhOBBQZQXZisfqMP+Kbe0lSEzswAiEA9VtIxEIYln+isoDOopT9d+7KcIuEG2FLty27b8VAhgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":224451},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"d6be165a3122b244f88914a587b9d8a299e9eb64","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.27.8","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.7.2_1783345119637_0.29954025593754063","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"spark-ssr","version":"0.8.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@0.8.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"898e2eb41228cfa4236db40bc2e4f015a7d55f61","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-0.8.0.tgz","fileCount":21,"integrity":"sha512-7Ob5Ox0EjqFJrTH9sfp3Z5THBtioOeO+5wZKw0Bvx1IhFr1Rt4DPQh8e74BSVfzd2moKzONbnw3CTxvknfaOwA==","signatures":[{"sig":"MEQCIHkSCVKd3zzVT+diflQGwD0+I4JiQa1Klv5fNa3aAojeAiBvS9kjSQ1IFf0lx+fZeN0qn6OcDXk13nqpcghUOG1GhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":244668},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"9b1fac6b84a3c7171ca8a89c8992c3b5035dda03","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html":"^0.30.0","spark-html-head":"^0.3.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_0.8.0_1783443298948_0.03446143670226909","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.1":{"name":"spark-ssr","version":"1.0.0-rc.1","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.0.0-rc.1","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"5ae7e0327a0833e4d09ab4a6a5b43f172142eb82","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.0.0-rc.1.tgz","fileCount":21,"integrity":"sha512-CiakUey/dT7NySaNp2qlZRGxgVFSqvexNzSJ5OYVqTsxgv5mUjKLkKnXEibBbc6ceqA8MDkGInNG1600rKGeGA==","signatures":[{"sig":"MEUCIAhhV0y3BbV3pDNxRUlpzS1e1F1gu/6RzMhHtQbwNLFUAiEA3VJAvn8eoPkLFgLNr3dddeabZLJ1KvTgZxQIWLi5UyI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.0.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":247890},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"8982d38a362a203c75c17efbc0dbcf497d32db21","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0-rc.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"spark-html":">=1.0.0-rc.1 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.0.0-rc.1_1783459547524_0.8502539230621537","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.2":{"name":"spark-ssr","version":"1.0.0-rc.2","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.0.0-rc.2","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"92a61df8dd6ef78c625933171882a6f7426fceb3","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.0.0-rc.2.tgz","fileCount":21,"integrity":"sha512-jkrq3fHYnOARs6nshC/byQAgg2WCYv03ogLHiKD3EiAOm0AgnF25wt2jhH9VNO/7dt8Gq9xboIaxQizNEuawdA==","signatures":[{"sig":"MEUCIQDibmMEb9vELK+pc51RVktZ9/R7O321cKvAe0mO40DUaQIgTHKnl0Y5jiC5BDhd6EBin1i6/Gcwo8h7zBLyzJ9IuS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.0.0-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":250304},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"fd66aaf5a9a1fd4a32a12e99f546892bbe5a80aa","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0-rc.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"spark-html":">=1.0.0-rc.1 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.0.0-rc.2_1783462034161_0.3433934678668291","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-rc.3":{"name":"spark-ssr","version":"1.0.0-rc.3","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.0.0-rc.3","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"6006986d4c93af20ad8b1834b941a26c3861ab33","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.0.0-rc.3.tgz","fileCount":21,"integrity":"sha512-tBeK+7JtfecUpj/ywTteBBrYNzc7Be+NSkhJxI1w3Dbp8/tzaScd/j/qnJYBIOXAB1zy46f6LeedA1mwswaNlA==","signatures":[{"sig":"MEUCIDcPKJu5KWf4u6WG/5KnXFL0A7DNclJaGwXuy/7PM9vsAiEAin6KsP5e4yQmdgiyNN7KypHv+VfyPGTOaakR5mjpH14=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.0.0-rc.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":252352},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"75e0ee50d6abd478f65536304a91e77e868add15","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0-rc.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"spark-html":">=1.0.0-rc.1 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.0.0-rc.3_1783469069290_0.9124821570125854","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"spark-ssr","version":"1.0.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.0.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"a51af885bc9cd87ce9d7e5d62caf991d05353f81","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.0.0.tgz","fileCount":21,"integrity":"sha512-tFqwD1HNLZ6/J5cF6ncBwzt5lSA5RlV0IdJ6PLCgOdVJGb0IZxL1//ZX7TGa0LaeG0oPRkZ4YewIXAV9++aVBw==","signatures":[{"sig":"MEQCIBaPi6aRzeqGe+nUbckQ7HNmGfkY1AmnUm1FH8/oMN2ZAiAj2XXM8Rw243mTIfp18IAHj5NtWulaImOHekVrExmaiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":252337},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"4b26738b80e2ee702d387d764f00e39abb2b3967","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.0.0_1783472965427_0.8169317916065861","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"spark-ssr","version":"1.0.1","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.0.1","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"b34424ecef947cf7ab8959a3422dd7e800168fb1","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.0.1.tgz","fileCount":21,"integrity":"sha512-GP/86aPZAAcGct4xs4FktRBDsIgGalh/Nr4wY9wLMi/6p83MZE07rieM1WgSoM5yyoDhraKxhqdgPLZdC2uuzQ==","signatures":[{"sig":"MEUCIQCaJqPM9e5VUyGd4WKIc+JQS5WH1pa10Sd+eJ0RLWI4SwIgLCmWMx4QCHKYcDH+bBRpm8K3fmH5d2R64Bf01yr+Nzo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":253653},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"85878091077f1be7f5c6c87371711261325c9939","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.0.1_1783523111983_0.3345895195917341","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"spark-ssr","version":"1.1.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.1.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"c03d540ca9eb3ca93568b36aa9b0c544f4920d16","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.1.0.tgz","fileCount":21,"integrity":"sha512-c0O6RCRjPzmm8ZuI+4VD0e1G7g/tlPE4qtb/2MjIx5L1oaMEtkh0uZ6zx5IeWuvx8u0OyQKvAxeJn1OqjT6M/g==","signatures":[{"sig":"MEYCIQC8ubuGFdV0XawdZTZf64uuKWTfzSQpwg/3OOYPo79u+gIhAKT0nudpsykYpUKkpxpqxinsS6DsJuQL5llKYHPu32FJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":255358},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"6e65be69d7aa7c6da2460ac010a8d209c160789c","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.1.0_1783572432747_0.04513769511165577","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"spark-ssr","version":"1.1.1","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.1.1","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"358508e58b0f0aa0ab87bfc8d81c4e6e4b41b1a1","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.1.1.tgz","fileCount":21,"integrity":"sha512-Db8o8qpvOtJkOV1phxtvEBwRyzN+MMzJ/JMyK7wfqMSjOKiPdMdzAJDIdK9ZESe6BsjGKEuR7QVbVTxCyQuEPw==","signatures":[{"sig":"MEQCIGOJzRR4jRLbmHTm8+ElwxxaYQSoLJKz7+nBnlg0QIGxAiAyGZ3PUJ2hSYhbCnHkjWfO+Xfvf8QU/D0iaY29fTLK+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":256824},"main":"./src/index.js","type":"module","engines":{"bun":">=1.2.0"},"exports":{".":{"default":"./src/index.js"}},"gitHead":"d7db7e2b6f39445ba8def1a4ff4ea6bcb9ca27aa","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.1.1_1783619134203_0.05693796733492684","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"spark-ssr","version":"1.2.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.2.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"84317a696e52c26e236ac40b500163779af89fc1","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.2.0.tgz","fileCount":22,"integrity":"sha512-Chqq03i9KUywDNTpv9UHfVNcfbRaAPhwAu24scOi2EvsRH2joK7RtG8DRmV8c4161e1rcLWXSWaQtmOO9pWwdQ==","signatures":[{"sig":"MEYCIQCv+bfVQFkt2IF/NmjgYfCMaNTvXOs3XxAXxgPPbPPQaQIhAM2N9ukGUnF6RKpl/j5EbtZBdsHZqGDPUlT/jOHVSLx5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":263707},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"gitHead":"76fc30b9437a47a98a09d8b29c0c06aec97f3c20","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0","spark-html-devtools":"^1.1.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.2.0_1783638705592_0.6653601178442441","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"spark-ssr","version":"1.2.1","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.2.1","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"f26d86272d8a84fd4eeb6eccd23e4d669adbfbba","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.2.1.tgz","fileCount":22,"integrity":"sha512-D0mu0nlNthnKXseN9czkTpeB8AYFoeDTNLSjfcUVk9hKj90nfE7kURdRcBe3rVnKBZ4H6sVeYq94P7WyndygEQ==","signatures":[{"sig":"MEUCICUcmeXvfVMlnGaeaYxThuemJXVlTX5AdmXe16KUYfxnAiEA6qyGxBCheZo3d/FbbX8agYBy0ykV+Re9EvIVkrSt238=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":265943},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"gitHead":"6e369992003fc66c88b0f7201e057fde3a5eabc9","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0","spark-html-devtools":"^1.1.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.2.1_1783664283311_0.9376794797713748","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"spark-ssr","version":"1.3.0","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.3.0","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"898a610bba8186b0bf3976fa52f6467fbbfd2994","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.3.0.tgz","fileCount":23,"integrity":"sha512-WHU5Uj6l8uXEFtF6gmKFH1gBk2/IlCw3L0J078c9h6x8Jc495bLLt4J+lwE8k1cCWdIEf4QSCkZX8VXp72ParQ==","signatures":[{"sig":"MEYCIQDdCExg7ThNpzTJ5GFs+0wHF5D2Lm40EwZoG6C1K9tIMwIhANvHP1Q6SrBmHCP6oo2oIcUe6vNqvZSPKUbyTYfs1zMP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":279195},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"gitHead":"deeeb2d2c87ef5f8176d846c639cb65d3d5a3f8f","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0","spark-html-devtools":"^1.1.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.3.0_1783840482482_0.6114077527578634","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"spark-ssr","version":"1.3.1","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.3.1","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"d97df6e68c39980ea1922fe8215d3f77192332b5","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.3.1.tgz","fileCount":23,"integrity":"sha512-GDIVg2KUezdC4K4u1gymVEDMcz/JuswlgA7e1u2ulxymX4vO5u8sX2k9m+JlNXlfEBtj9rqnDhl9My/uWoT/LA==","signatures":[{"sig":"MEYCIQD91SH21LfrNAloQAqLLc5MzseW40U9MVCvrTzs7Jk2SQIhAI5zXQnFWEqHLqbXDXxj2MrqPinSfD5l7PshHu7IS5bj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":280733},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"gitHead":"1cd98fb371dce59358d4204eccf24d6bd3cd6392","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0","spark-html-devtools":"^1.1.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.3.1_1783995243028_0.4129099541868275","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"spark-ssr","version":"1.3.2","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.3.2","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"5ce1f4f79c172dfb21497ae7097d113a0103b230","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.3.2.tgz","fileCount":23,"integrity":"sha512-/F1mr2mCwGarihWi6XgAU3em6iFsfdG0cgWVwYfXZOjdBBrrTdgHIXg9Cur1WO6Ed4n24gRmUa9bw9oKW3a8Bw==","signatures":[{"sig":"MEUCIDu11hfvB59U/w6xs38j+ZymIcfru/a23rF+bpcyJEnpAiEA+JHN65V9C8a8FNs0216so8yfMMMFx7TyfmeE0Xf1sqI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":282043},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"gitHead":"54073acb502e5c5e310d7a4f9c6c52800f042ba8","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0","spark-html-devtools":"^1.1.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.3.2_1784001182844_0.11428879609418319","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"spark-ssr","version":"1.3.3","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.3.3","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"207bb0a734b42755e6c081331ea1e010c5820dd8","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.3.3.tgz","fileCount":23,"integrity":"sha512-RsSGmLNYzKNd+/ZFf/0Ml+8UcA6QQcul2xbfsPe6R5UKIpNqY4HifMWLR59FX5qagSFETTtol4l3l/2ZmxySAQ==","signatures":[{"sig":"MEUCIBTMRgnQJL1V/l2T7+IQPhFnWNS6iruiisWsKVR0JFZpAiEAsedmUEyM/Tk3v/ao2RP21Ec/eEjhOqWvSHeH8YT5bQA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":282366},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"gitHead":"a469c0c4d6e445dcf5b01534569e068bbf7e37fe","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0","spark-html-devtools":"^1.1.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.3.3_1784014000458_0.006272668703847906","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"spark-ssr","version":"1.3.4","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.3.4","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"54dd0a8cc18ccd582a2ff0361423aecbb7bb97af","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.3.4.tgz","fileCount":23,"integrity":"sha512-+rL8B0Mkuq5PrMr1h6vnqK1Wq+d6D3D/cYLuL0zrHn30M4NDHl1ogTuNaveUWKrMvF6kMyJVdaOQwibYb86Zfw==","signatures":[{"sig":"MEUCIB/hKpWU1E0T92rNLXRVOBeLb9NH5JDqgjslR5gThvkCAiEA399225GbB+uf5fpJwtx/0jAUuhweAkjaqrI3pFdqL8Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":283695},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"gitHead":"53647b34593a01cab9ff6fceb1c2bfd6228f8501","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0","spark-html-devtools":"^1.1.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.3.4_1784097044627_0.8824091083835417","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"spark-ssr","version":"1.3.5","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","_id":"spark-ssr@1.3.5","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"homepage":"https://wilkinnovo.github.io/spark-html","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"bin":{"spark-ssr":"bin/cli.js"},"dist":{"shasum":"0d933aed7ba280eb031e90c19c2c2c6ad6f44d9d","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.3.5.tgz","fileCount":23,"integrity":"sha512-tbEv+5jUkg2CMoxlr0CjdHQeXzvXRCTTwNUqZHD9L9v7myBFmv5d0mQZVuS+NmxgtI7OEeTA327+0xDa6fvYkg==","signatures":[{"sig":"MEUCIQCSJBC2wUGXZtg7ZynNPyBaLTIyNAK5HHwuEI28C95gOgIgAt73vHqGGh0dqRqTzNUmYnKgecvw2g3xp4jH4w0C2VI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":284124},"main":"./src/index.js","type":"module","types":"./src/index.d.ts","engines":{"bun":">=1.2.0"},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"gitHead":"ff7710ca1754063d958114a7ca445c032f302981","scripts":{"test":"bun test/ssr.js"},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"repository":{"url":"git+https://github.com/wilkinnovo/spark-html.git","type":"git","directory":"packages/spark-ssr"},"_npmVersion":"11.16.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","directories":{},"_nodeVersion":"24.18.0","dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0","spark-html-devtools":"^1.1.0"},"_hasShrinkwrap":false,"peerDependencies":{"spark-html":">=1.0.0 <2"},"_npmOperationalInternal":{"tmp":"tmp/spark-ssr_1.3.5_1784098000336_0.1257772922788849","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"spark-ssr","version":"1.4.0","description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","homepage":"https://wilkinnovo.github.io/spark-html","type":"module","main":"./src/index.js","bin":{"spark-ssr":"bin/cli.js"},"exports":{".":{"types":"./src/index.d.ts","default":"./src/index.js"}},"engines":{"bun":">=1.2.0"},"scripts":{"test":"bun test/ssr.js"},"repository":{"type":"git","url":"git+https://github.com/wilkinnovo/spark-html.git","directory":"packages/spark-ssr"},"dependencies":{"linkedom":"^0.18.12","spark-html-head":"^1.0.0","spark-html-devtools":"^1.1.0"},"keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"license":"MIT","peerDependencies":{"spark-html":">=1.0.0 <2"},"types":"./src/index.d.ts","gitHead":"6c1ec5c9aaadd575e9e72197088af3329453a4bd","_id":"spark-ssr@1.4.0","bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-jnmf5/4HiX9Z0x5YXVy02uq7uaxGY2v9zx0YnxuSmJZIkPth7amQoEXG74gxYOhI4faUagsB7fbft/VPy5GdTA==","shasum":"c34ed1c8386b0448e378e918ded07b95fcff47e4","tarball":"https://registry.npmjs.org/spark-ssr/-/spark-ssr-1.4.0.tgz","fileCount":23,"unpackedSize":284956,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spark-ssr@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDaf26F+DVFkw2+Ix6fM7Tr0Bv7zMqBA9i/XtZe+0gu2gIhALH+Pds8oopnxMSwCE1LPSQVbXI2LOL30A0M+9I4/HrX"}]},"_npmUser":{"name":"wilkinnovo","email":"wilkin@novo.ws"},"directories":{},"maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spark-ssr_1.4.0_1784169754511_0.02109916447122817"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-04T08:52:55.529Z","modified":"2026-07-16T02:42:35.042Z","0.1.0":"2026-07-04T08:52:55.778Z","0.1.1":"2026-07-04T14:44:56.153Z","0.2.0":"2026-07-04T16:24:30.441Z","0.3.0":"2026-07-04T20:17:24.842Z","0.3.1":"2026-07-04T21:13:13.693Z","0.3.2":"2026-07-05T01:15:47.843Z","0.3.3":"2026-07-05T01:29:32.254Z","0.3.4":"2026-07-05T07:21:27.493Z","0.3.5":"2026-07-05T07:55:11.899Z","0.4.0":"2026-07-05T08:33:18.297Z","0.5.0":"2026-07-05T14:30:50.192Z","0.6.0":"2026-07-05T16:24:15.628Z","0.6.1":"2026-07-05T16:49:59.652Z","0.7.0":"2026-07-05T18:22:15.619Z","0.7.1":"2026-07-06T05:50:54.770Z","0.7.2":"2026-07-06T13:38:39.769Z","0.8.0":"2026-07-07T16:54:59.110Z","1.0.0-rc.1":"2026-07-07T21:25:47.719Z","1.0.0-rc.2":"2026-07-07T22:07:14.362Z","1.0.0-rc.3":"2026-07-08T00:04:29.418Z","1.0.0":"2026-07-08T01:09:25.599Z","1.0.1":"2026-07-08T15:05:12.189Z","1.1.0":"2026-07-09T04:47:12.893Z","1.1.1":"2026-07-09T17:45:34.326Z","1.2.0":"2026-07-09T23:11:45.732Z","1.2.1":"2026-07-10T06:18:03.454Z","1.3.0":"2026-07-12T07:14:42.618Z","1.3.1":"2026-07-14T02:14:03.162Z","1.3.2":"2026-07-14T03:53:03.007Z","1.3.3":"2026-07-14T07:26:40.577Z","1.3.4":"2026-07-15T06:30:44.925Z","1.3.5":"2026-07-15T06:46:40.514Z","1.4.0":"2026-07-16T02:42:34.705Z"},"bugs":{"url":"https://github.com/wilkinnovo/spark-html/issues"},"license":"MIT","homepage":"https://wilkinnovo.github.io/spark-html","keywords":["spark-html","ssr","bun","no-build","sql","html","server"],"repository":{"type":"git","url":"git+https://github.com/wilkinnovo/spark-html.git","directory":"packages/spark-ssr"},"description":"Zero-config SSR for spark-html on Bun. The HTML template infers everything: filesystem routing, layouts, <spark-ssr> declarative data (SQL, URLs, globs, modules), auto CRUD with validation, guards, no-JS forms, schema + seeds, live updates, SEO. Precompil","maintainers":[{"name":"wilkinnovo","email":"wilkin@novo.ws"}],"readme":"# spark-ssr\n\n**Zero config. No build. SSR the Spark way.**\n\nThe framework reads the HTML template and infers everything:\n\n```html\n<!-- index.html -->\n<h1>Tasks</h1>\n\n<template await=\"todos\">\n  <input bind:value=\"draft\" placeholder=\"New task\">\n  <button onclick={add}>Add</button>\n  <template each=\"todo in todos\">\n    <li>\n      <input type=\"checkbox\" bind:checked=\"todo.done\" onchange={patch}>\n      {todo.title}\n      <button onclick={remove}>✕</button>\n    </li>\n  </template>\n</template>\n\n<spark-ssr table=\"todos\" live />\n```\n\n```bash\nbun spark-ssr\n```\n\nThat's it — the table is **created for you** (the template is the schema),\nthe REST API exists, the page is server-rendered and hydrated, and `live`\nkeeps every open tab in sync.\n\n| The template says                               | The framework knows                          |\n| ----------------------------------------------- | -------------------------------------------- |\n| `<template each=\"todo in todos\">`               | You need data called `todos`                 |\n| `table=\"todos\"`                                 | It's backed by the `todos` table             |\n| `{todo.title}` interpolation                    | `title` is a TEXT column                     |\n| `bind:checked=\"todo.done\"`                      | `done` is a boolean column                   |\n| `onclick={add}` (outside the loop)              | `POST /api/todos` — insert                   |\n| `bind:checked` + `onchange={patch}` (in loop)   | `PATCH /api/todos/:id` — update `done`       |\n| `onclick={remove}` (inside the loop)            | `DELETE /api/todos/:id` — remove the row     |\n| `bind:value=\"draft\"`                            | Local state variable `draft`                 |\n| `user_id` column in the table                   | Auth — `WHERE user_id = :session.id`         |\n| `required maxlength=\"120\"` on a form input      | The server validates the same rules          |\n\nNo `<script>`. No SQL. No ORM. No server file. No setup.js. No build step.\n\n## Config (spark.json)\n\n```json\n{\n  \"db\": \"postgres://localhost:5432/myapp\",\n  \"auth\": { \"table\": \"users\", \"identity\": \"email\", \"secret\": \"ENV.SESSION_SECRET\" },\n  \"cors\": true,\n  \"fonts\": [{ \"family\": \"Inter\", \"google\": true, \"weights\": [400, 700] }]\n}\n```\n\n`sqlite://./dev.db` works too (Bun ships both drivers). `ENV.*` values resolve\nfrom the environment at startup. `cors: true` allows all origins on `/api/*`;\nan array allows specific ones. `fonts` renders spark-html-font's head tags\n(preloads, `@font-face` with a size-adjusted no-shift fallback, a\n`--font-<slug>` var) into every page — same shapes as its build-pipeline step.\n`mail` wires the sender for jobs and handlers (see below). `maxBodyMb` caps any\nrequest body (default 10) — an over-limit upload is rejected with `413` at the\nsocket, before it buffers.\n\n**No spark.json at all?** `db` defaults to `sqlite://./dev.db`, so\n`bun spark-ssr` runs on a folder holding one `index.html` — zero config to\nbegin. (A spark.json that *exists* but omits `db` stays deliberately\ndatabase-free — the markdown-blog mode.)\n\n## Routing\n\nThe filesystem is the router. `pages/index.html` → `/`,\n`pages/blog/[slug].html` → `/blog/:slug` (`:slug` binds into queries).\nWithout a `pages/` folder, `*.html` at the project root serve the same way.\n\n## Layouts — folders own their chrome\n\n`pages/_layout.html` wraps every page in the folder (nested folders nest\ntheir layouts). A layout is a component; `<slot>` is the page:\n\n```html\n<!-- pages/_layout.html -->\n<link rel=\"stylesheet\" href=\"/style.css\">\n<script type=\"module\" src=\"/app.js\"></script>\n<div import=\"/components/nav\" blog=\"{author.name}\"></div>\n<slot></slot>\n<footer>© {author.name}</footer>\n\n<spark-ssr>\n  author = SELECT id, name, bio FROM users LIMIT 1\n</spark-ssr>\n```\n\nThe layout's `<spark-ssr>` vars are in scope for every page it wraps. Head\ntags lift from layout AND page; the page wins on conflicts.\n\n## Named data — the block says what it feeds\n\n```html\n<spark-ssr>\n  posts  = SELECT * FROM posts WHERE published = 1 ORDER BY created_at DESC\n  author = SELECT id, name, bio FROM users LIMIT 1\n</spark-ssr>\n```\n\n`var = SELECT …` is page data with no endpoint exposed — what most pages\nactually want. Write `GET /api/posts → posts = SELECT …` when you also want\na public endpoint. Name/singular/fallback matching still works for\n`table=\"…\"` blocks and unnamed routes — nothing breaks.\n\n`:` params inject automatically: path params (`:slug`), query string (`:q`),\nform/JSON body (`:body.title`), session (`:session.id`), headers\n(`:header.x-forwarded-for`), uploads (`:file.url`).\n\n## Sources beyond SQL — same block, more worlds\n\n```html\n<spark-ssr>\n  repo    = https://api.github.com/repos/wilkinnovo/spark-html\n  posts   = ./content/posts/*.md\n  weather = ./lib/weather.js\n</spark-ssr>\n```\n\n- **URL** — server-side fetch, JSON parsed; `:slug`-style params interpolate.\n- **Glob** — files become rows: front-matter → columns, body → `.body`,\n  filename → `.slug`. A blog with no database at all. (`{post.body}` renders\n  text; markdown rendering is a companion package's job.)\n- **Module** — default export `(req, db) => value`. The escape hatch gets a\n  declarative front door.\n\n## Status, redirect, and guard\n\n```html\n<!-- blog/[slug].html -->\n<template if=\"post\"> … </template>\n<template else status=\"404\"><h1>Not found</h1></template>\n\n<!-- admin/index.html -->\n<spark-ssr guard=\"session\" redirect=\"/login\" />\n```\n\n`status=\"…\"` on a rendered branch sets the response status — crawlers stop\nindexing a 200-that-means-404. `guard=\"expr\"`: when falsy, `redirect=\"…\"`\nanswers 303, `status=\"401\"` sets the code, default 403. An `is_admin` (or\n`role`) column on the auth table rides into the session, so\n`guard=\"session.is_admin\"` works — and admins read scoped tables unscoped.\n\n**You rarely write the 404, though.** A `[param]` page whose single-row lookup\ncomes back empty **404s automatically** — the `<template else status=\"404\">`\nabove is only for a custom message. And every error status renders a **styled\ndefault page** with no file to write; drop a `pages/404.html` (or `500.html`,\nany `<status>.html`) to override it. With `auth` configured, a bare\n`guard=\"session\"` defaults to redirecting to `/login`.\n\n## Forms without JavaScript\n\nThe auto-CRUD endpoints answer a browser like a browser:\n\n```html\n<form action=\"/api/posts\" method=\"post\" redirect=\"/admin\">\n  <input name=\"title\" required maxlength=\"120\">\n  <textarea name=\"body\"></textarea>\n  <button>Save draft</button>\n</form>\n```\n\nA plain form post that succeeds 303s back to the referrer (or the form's\n`redirect=\"…\"`); the page re-renders with fresh data. **The app works with\nJavaScript disabled.** Login and logout are forms too:\n\n```html\n<form action=\"/api/users?auth\" method=\"post\">\n  <input type=\"email\" name=\"email\" required>\n  <input type=\"password\" name=\"password\" required>\n  <button>Sign in</button>\n</form>\n<form action=\"/api/logout\" method=\"post\"><button>Sign out</button></form>\n```\n\n### The form is the validator\n\n`required`, `maxlength`, `min`/`max`, `type=\"email\"`, `pattern` — the\nconstraint attributes you already wrote for the browser run again on the\nserver before the matching auto-CRUD write. Violations answer `422` with\n`{ errors: { title: \"…\" } }` (JSON) or re-render the page with `{errors.title}`\nand `{values.title}` in scope (form post).\n\n## The template is the schema\n\n```bash\nbun spark-ssr db        # show inferred schema vs live DB (a diff)\nbun spark-ssr db diff   # the pending plan, spelled out (alias of the above)\nbun spark-ssr db push   # apply additive changes (create tables, add columns)\nbun spark-ssr db push --force   # …and destructive ones (retype, drop columns)\n```\n\nColumn inference: `{todo.title}` → TEXT, `bind:checked` → boolean,\n`type=\"number\"` inputs → numeric, `id`/`created_at` always, `user_id` when\nauth is configured and the page reads the session. Seed rows sharpen types:\n\n```html\n<spark-ssr table=\"todos\" seed=\"./seed/todos.json\" live />\n```\n\nSeeds apply once, idempotently (only into an empty table; auth-table\npasswords hash on the way in). `serve` runs the safe half automatically —\nmissing tables are created and seeds applied at startup, so a fresh clone\nruns on `bun spark-ssr` alone. **Safe evolution:** additive changes (new\ntables, new columns) apply freely; a destructive one — dropping a column the\ntemplates no longer name, or a **retype** (a column whose implied type\nchanged) — is reported by `db diff` and needs `db push --force`. On SQLite a\nforced retype rebuilds the table and copies the rows across; it never silently\ndrops data. Seed files are never served as static assets.\n\n## `live` — HTML that reacts across the wire\n\n```html\n<spark-ssr table=\"todos\" live />\n```\n\nEvery write through the server pings `/__spark/live` (SSE) with the table\nname; hydrated pages refetch through their own session — every open tab\nupdates, scoping intact. No socket code, no pub/sub. spark-html-websocket\nstays for custom protocols; `live` is the zero-config 90%.\n\n## Lists — `?page`, `?sort`, `?q`\n\n```html\n<spark-ssr table=\"recipes\" limit=\"20\" search=\"title,ingredients\" />\n```\n\n- `?page=2` → `LIMIT/OFFSET`, plus `{recipes.total}` and `{recipes.pages}`.\n- `?sort=created_at:desc` → validated against real columns, then `ORDER BY`.\n- `?q=…` → `LIKE` across the block's `search=\"…\"` columns.\n\n`cache=\"60\"` on any block adds a per-source TTL, invalidated automatically\nwhen a table it reads from changes.\n\n## Background jobs & mail\n\n```html\n<spark-ssr job=\"digest\"  every=\"1d\" />              <!-- jobs/digest.js on a schedule -->\n<spark-ssr job=\"onOrder\" on=\"insert:orders\" />      <!-- …after every matching write -->\n```\n\nA job is a module `jobs/<name>.js` with the same shape as a data source —\n`export default (req, db) => …`. `every=\"…\"` (`ms`/`s`/`m`/`h`/`d`) schedules\nit; `on=\"insert:orders\"` (or `update:`/`delete:`/`*:`) fires it after a write,\nwith the affected row on `req.row`.\n\nMail is one line of config — `\"mail\"` in spark.json is a module\n(`\"./lib/mail.js\"`, default export `(msg, ctx)`) or a `{ url, from, headers }`\nwebhook. `mail()` is in scope in every page/api/middleware `<script>` and on\n`req.mail` in jobs; with nothing configured it logs, so it always resolves.\n\n```js\n// jobs/onOrder.js\nexport default async (req, db) => {\n  await req.mail({ to: 'ops@shop.co', subject: `Order ${req.row.id}`, text: '…' });\n};\n```\n\n## OpenAPI + a typed client — generated, never authored\n\n- **`/__spark/openapi.json`** — an OpenAPI 3.1 document of every endpoint the\n  templates imply, with path params and request/response shapes.\n- **`/__spark/client.ts`** — a typed `createClient()` with one method per\n  route. External consumers and tests get types for free.\n\nBoth derive from the live route table and ship in production too.\n\n## Dev tools\n\n- **Error overlay** — a failing query or throwing page script puts the real\n  error (message, stack) on the page instead of a bare 500.\n- **Unresolved-var banner** — \"this page reads `{posts}` but no source\n  provides it — nearest source: `published`\". The silent-blank bug becomes\n  a sentence.\n- **`/__spark/plan`** — every route, table, endpoint, and each page's\n  var → source bindings. \"View source\" for the inferred backend.\n- **Live reload** — every edit (pages, layouts, components, queries,\n  middleware, css, markdown) refreshes the browser via SSE.\n\nAll dev-only; `start` and compiled builds ship none of it.\n\n## The page owns its \\<head\\> — and SEO comes free\n\nLiteral `<title>`/`<meta>`/`<link>` tags at the top of a page lift into the\ndocument head, `{expr}`-interpolated against the page's data\n(spark-html-head's `/ssr` module does the lifting):\n\n```html\n<title>{post.title} · My Blog</title>\n<meta name=\"description\" content=\"{post.excerpt}\">\n```\n\n`og:title`/`og:description` derive from those unless overridden.\n`/sitemap.xml` is generated from the pages — `[param]` routes enumerate\ntheir bound query. `/robots.txt` honors `<meta name=\"robots\" content=\"noindex\">`\nand guards. Author your own files in `public/` to override any of it.\n\n## Client scripts and the family\n\nA page's plain `<script>` runs on the **server** (the escape hatch) — *unless*\nthe page is interactive (has handlers or `bind:`s) and declares a data source.\nThen it becomes the page's **client component** script: the four ambient\nhelpers below are in scope, your state is seeded from the page's data, any\nhandler the template references but you didn't write is synthesized, and your\ncode is appended. `<script type=\"module\">` and `<script src>` are always\n**client** scripts — they lift into `<head>` after an auto-generated importmap,\nso bare imports of the Spark family just work, no build:\n\n```js\n// public/app.js\nimport { theme } from 'spark-html-theme';\ntheme();\n```\n\nEvery `spark-html-*` package in your dependencies is importmap-mapped and\nserved at `/@modules/<name>/…`. Depend on **spark-html-theme** and the\nno-flash init snippet is inlined in every head automatically; depend on\n**spark-html-image** and `spark-ssr build` runs its webp/srcset pass over\n`dist/` — and uploads get a webp variant at write time (`:file.url` points\nat it; `:file.original` keeps the source file).\n\n## Page scripts — ambient helpers, less boilerplate\n\nAn interactive page (handlers or `bind:`s) that declares data hydrates, and its\n`<script>` becomes the client component. One deliberate limit to know: on a\nhydrating page that script runs on the **client only** — the server renders\nfrom the data sources alone and never executes it. Compute display fields\n(formatted dates, view counts, derived text) in the **data source** (SQL\nexpression or a module source), not in the page script, or the first\nserver-rendered paint won't have them. (A page with no handlers or binds keeps\nthe classic behavior: its plain `<script>` runs on the server — the escape\nhatch.) Four helpers are always in scope — no imports, no `fetch()` plumbing:\n\n| Helper | Does |\n|---|---|\n| `api_create(body)` | POST to the page's table, returns the row |\n| `api_update(id, body)` | PATCH a row by id |\n| `api_delete(id)` | DELETE a row by id |\n| `refresh()` | Re-run **every** source (table, SQL, URL, glob, module) and reassign the page's vars |\n\nYour state is seeded from the page's data (don't re-declare it), and every\nhandler the template references is **synthesized if you don't write it** — so an\nadmin page can be just its custom bits:\n\n```html\n<input bind:value=\"title\"><button onclick={create}>Save</button>\n<template each=\"p in posts\">\n  <button onclick={toggle(p)}>{p.published ? 'Unpublish' : 'Publish'}</button>\n  <button onclick={remove(p)}>Delete</button>   <!-- synthesized -->\n</template>\n<script>\n  async function create() {\n    const slug = title.toLowerCase().replace(/[^a-z0-9]+/g, '-');\n    await api_create({ slug, title });\n    title = ''; refresh();\n  }\n  async function toggle(p) { await api_update(p.id, { published: p.published ? 0 : 1 }); refresh(); }\n</script>\n<spark-ssr table=\"posts\" />\n```\n\n`<spark-ssr auto=\"create,remove\">` narrows which handlers are synthesized;\n`auto=\"none\"` keeps only the helpers. Several tables on one page? Pass the table\nexplicitly: `api_create('posts', {…})`, `api_update('todos', id, {…})`. Want\nnone of it — write your own `fetch()` and don't set `table=`; that's the\nclassic escape hatch, untouched.\n\nHydration is **source-agnostic**: a markdown glob, a JS module (any ORM), a URL\nmashup — all hydrate and `refresh()` the same way, no database required.\n\n## Custom endpoints — api/\n\n`api/stats.html` auto-serves as `GET /api/stats`:\n\n```html\n<spark-ssr>\n  GET → SELECT COUNT(*) AS videos FROM videos\n</spark-ssr>\n```\n\nOr drop to a `<script>` (runs server-side; `req`, `res`, `db`, `fetch` in\nscope; the return value becomes the JSON response).\n\n## Everything else\n\n- **Components** — `<div import=\"/components/card\" title=\"{post.title}\">`\n  inlines at render time; components are pure UI.\n- **Auth** — built-in email/password sessions (`POST /api/users?auth` logs in,\n  passwords hash on insert), or a plugin (`auth.plugin` in spark.json) for\n  OAuth/magic-link flows — the plugin answers \"who is this person?\", the\n  framework still does sessions and cookies. Configuring `auth` also gives you\n  working **`/login`, `/signup` and `/logout` pages** with zero UI written —\n  drop a `pages/login.html` (etc.) to override them.\n- **Relations** — `<template each=\"c in post.comments\">` declares a `comments`\n  table with a `post_id` foreign key and joins it onto the post. Nested data,\n  no SQL join in the template.\n- **Flash messages** — `flash=\"Saved\"` on a form sets a one-shot message that\n  survives the redirect; render it with `{flash}` or the default `<spark-flash>`\n  toast. `{session}` and `{path}` are ambient in server-rendered template\n  expressions and server-only `<script>`s — **not** in a hydrating page's\n  client component script; there, read the user's id from a declared data\n  source (e.g. `me.id`), not `session`.\n- **List UI** — `<spark-pager for=\"posts\"/>` and `<spark-search/>` are drop-in,\n  no-JS `?page`/`?sort`/`?q` controls over the list conventions below.\n- **Middleware** — `middleware.html` runs on every request (`req`, `res`,\n  `rateLimit`, `state` in scope; return `{ status, body }` to short-circuit).\n- **Uploads** — multipart bodies stream to `uploads/`; `:file.url` binds the\n  stored URL into your INSERT.\n- **Error pages** — a styled default for every status out of the box; override\n  with `pages/404.html` / `500.html` (any `<status>.html`), or one at the\n  project root.\n- **Static assets** — `public/` plus co-located page assets, served as-is.\n  Project internals (spark.json, package.json, `*.db`, seeds, dotfiles) are\n  never served.\n- **Hydration** — interactive pages (any data source) ship fully-rendered HTML\n  plus a generated client component; `mount()` takes over with the same\n  spark-html runtime, and your page `<script>` rides along with the ambient\n  helpers above.\n- **Auth-table hygiene** — the auth table's auto CRUD never returns password\n  hashes, and GET/PATCH/DELETE are own-account only (admins read the full\n  table; anonymous GET is 401 — registered emails are never enumerable).\n  Public author data belongs in a named `SELECT` that picks its public\n  columns. Configuring `auth` registers the table (login/signup endpoints)\n  without any page declaring it; disable public signup in `middleware.html`\n  if the app is invite-only.\n\n## Performance — fast by default, nothing to configure\n\nThe request path allocates almost nothing:\n\n- **Precompiled templates.** Every page and component is parsed **once**\n  (mtime-invalidated) and compiled into a flat render program; a request is a\n  loop that emits strings. No DOM is built, no HTML is re-parsed, no\n  serializer runs per request. A 1,000-row table renders ~6× faster than the\n  0.6 renderer and RSS stays flat under load.\n- **Full-page response cache.** In production, anonymous GETs of pages whose\n  output is a pure function of `(path, query)` are served straight from\n  memory — auto-detected (no per-request `<script>`, no module sources, no\n  header/body-reading SQL; requests carrying a session or flash cookie always\n  bypass it) and invalidated by the same write hooks that power `live`.\n  `\"responseCache\"` in spark.json: a number overrides the 60 s TTL, `false`\n  disables. A public blog page serves at in-memory-string speed.\n- **Streaming.** Production list pages flush the `<head>` immediately and\n  stream rows as they render — first byte before the first row.\n- **Batched relations.** `each=\"c in post.comments\"` over a 50-post list is\n  one `WHERE post_id IN (…)` query, not 50.\n- **Bounded caches.** Per-source `cache=\"…\"` entries live in an LRU indexed\n  by table (writes invalidate exactly the affected keys); glob sources re-read\n  only files whose mtime moved; page/handler scripts compile once; column\n  metadata is cached per table.\n\n`test/bench.js` measures all of it (p50/p99 latency + RSS) — run it around\nany render-path change.\n\n## Security\n\nspark-ssr ships auth, sessions, SQL, uploads, and file serving — a security\nproduct with a framework attached. The audited posture lives in\n[`SECURITY.md`](SECURITY.md), and every item is pinned by a test in\n`test/security.js` that fails if the protection is removed:\n\n- **Sessions** — HMAC-signed, `HttpOnly; SameSite=Lax`, `timingSafeEqual`\n  verify; `Secure` added over HTTPS (trusted `X-Forwarded-Proto`). Production\n  refuses to start if `auth` is configured without `auth.secret`.\n- **No open redirect / header injection** — `_redirect` and `?next` must stay\n  on-origin (no `//host`, no CRLF).\n- **SQL** — all values parameterized; `?sort` is allowlisted against real\n  columns, never interpolated from input.\n- **Files** — no `..` traversal, and the static server never serves the\n  server-only trees (`node_modules/`, `jobs/`, `lib/`, `api/`, `dist/`).\n- **Uploads/DoS** — `maxBodyMb` cap (413 at the socket). **Login** —\n  per-IP rate limit (429).\n\nCSRF stance: `SameSite=Lax` (no token by default) — a documented decision, see\n`SECURITY.md`.\n\n## Deploy\n\n```bash\nbun spark-ssr build            # dist/ with a compiled single binary\nbun spark-ssr build --docker   # …plus a Dockerfile: copy, run\nbun spark-ssr start            # run in production (watch + live reload off)\n```\n\nMIT\n","readmeFilename":"README.md"}