{"_id":"@apostrophecms/apostrophe-astro","_rev":"44-7dc8af20c64cc69ed2fa6330a21e547f","name":"@apostrophecms/apostrophe-astro","dist-tags":{"beta":"1.12.0-beta.1","alpha":"1.13.0-alpha.1","latest":"1.16.0"},"versions":{"1.0.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.0","maintainers":[{"name":"itsrogil","email":"romain.gilles1@gmail.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"50d7fbe4fedd1a36a4a3af5547f399b3b76d311a","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.0.tgz","fileCount":19,"integrity":"sha512-si9b0Sc2Fqnsvdc2nFsw6l5cJcgmWp6e7l553MLojhF9a3X/q94M4QHJLcjggAzdTMXZhc9fPc//XvjSihsa0Q==","signatures":[{"sig":"MEYCIQCQyr7fEZz+YaINNKkO1aRRrq3/4TFJCo2VoVJ16i2H1AIhAN8nvK1Qw4mstTEXfvUpj+ST44Gvgdp436MY4HS/bida","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37626},"main":"index.js","type":"module","gitHead":"931daede5fd2b59185bb9a8e752e9a96a2e61d8a","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"9.5.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.0_1703172807493_0.41654949047300915","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.1","maintainers":[{"name":"itsrogil","email":"romain.gilles1@gmail.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"636b6ffb8de8dfbbac33ef5a26d9d9cc4e3a175e","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.1.tgz","fileCount":19,"integrity":"sha512-uiY54pAJmlv21dlxoNjlxlekWfIqq0n/YDa0R9ydskHigHSxs+vKTSJ9BKwDMA/XRRc42kNmsYutRRa23OOYvg==","signatures":[{"sig":"MEYCIQDTXqd9FHszwpboBNeUWZqR7GkPSUmGzqo0ntPCn3f+LQIhAN66RGDh7xkl6q+zLzNFxbLvD0u+CcFLmHUxMFURNsT4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38163},"main":"index.js","type":"module","gitHead":"4b84392c3553e205a8e1def365d496e4e17e0506","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"9.5.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.1_1703174249040_0.4015368712918237","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.2","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.2","maintainers":[{"name":"itsrogil","email":"romain.gilles1@gmail.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"5fabd4058a08a6afa82170c487fa4ddc911b40a3","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.2.tgz","fileCount":19,"integrity":"sha512-EzuhXrThXUczjgykVVEdd8Iqz6JrxWug+TKOXfHmFn7qs+pLSqAy8nLuX3tb7ol0FS2Gpsd5niH+MvG/kyNGtw==","signatures":[{"sig":"MEQCIEtvaJdHnsyN81jkorNL3ajqn2qpLKW0vdT2NnBwKOXjAiAKcSibWmgG9dGEVLw5bY6vvfBcxrhR84D11R+cSOa6tA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38808},"main":"index.js","type":"module","gitHead":"7296f2e63b87c01e9c76a5639c08ad48c9a796a7","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"9.5.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.2_1703275261195_0.4912207902920305","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.3","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.3","maintainers":[{"name":"itsrogil","email":"romain.gilles1@gmail.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"cc7f9ea5364716ac04ad1def05993eee5ee90017","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.3.tgz","fileCount":19,"integrity":"sha512-STmFfoswblV/lBlixt/Ys4Y9FMCB7AiDLgw8eFQd6jZFDAMTZKS3/UTEH/UIYoYnXtEld0CJ6dP/9+fYatws7Q==","signatures":[{"sig":"MEYCIQCBwv2DozxWOrGDDbzUE5Qg49Rv0zZW1UdENcVs0tKb1gIhAMVXP113CSeirGU0fWfhEm7kRjHlYOBMT/Jqfp/T6Fyc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38912},"main":"index.js","type":"module","gitHead":"3b305a428e860673438ed82924abb5e13139644d","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"9.5.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.3_1703697559052_0.3504843901965511","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.4","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.4","maintainers":[{"name":"itsrogil","email":"romain.gilles1@gmail.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"73f30ce458ee588fc5a76c346cf0fc05f1331ea5","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.4.tgz","fileCount":19,"integrity":"sha512-UVOcc/4appsQwbnEjjuqoo7Npu2auLqX8l8SBliqQxtSG6DaLQ9uZE1D6Xtk51Am0LruSs0Ji/5+HRwJveg9IA==","signatures":[{"sig":"MEUCIAOOVaKl7Y+z+DXeBleDLKqw25DyiL+4jTtHPgMdY+hkAiEAgsSp6YCl7xZY4NIJZZ2REQupNGLTjql5Ja+3P6lSw+A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39230},"main":"index.js","type":"module","gitHead":"7bbeca9b4bdc42d75afe9d49339c74424c50fedd","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"9.5.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.4_1705938847741_0.637246329707932","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.5","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.5","maintainers":[{"name":"itsrogil","email":"romain.gilles1@gmail.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"e854bc132ea512f39b00b8778194a0babcf90bd5","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.5.tgz","fileCount":19,"integrity":"sha512-oCR3o0ofDyUlC7gudbonaVLRL/34jswgkaj4VuN/wTIZQl6JChOFXzUN5L9hZ4B4NeUr94TWSJGwrst/dGCK/A==","signatures":[{"sig":"MEYCIQDH8yUKhkO+d8d3WUsxwmE1TquDLwYQgxehJkJE0lz5PwIhAKS4unhI+uROkYVSf+/KSOYdrkuisS9Q9f1hHItCI5Fh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40483},"main":"index.js","type":"module","gitHead":"c54aabe150e513a4a36ddb47b02ec3ae1a4ec980","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"9.5.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.5_1707400218036_0.5156399860891998","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.6","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.6","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"itsrogil","email":"romain.gilles1@gmail.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"e2faff428215f59e7ebc31c426c9a8a547884cd0","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.6.tgz","fileCount":19,"integrity":"sha512-LeexDjuqboVegHc4NpKN8grCc5eZ+Z/T9CSIMWycoE88b9euLhEBoHyDWtDPixWWL38pYLxqh69nCas5m35vSQ==","signatures":[{"sig":"MEUCIGyUbHzU3oBR50/GHPI+Dgmo+ngfHeJBLF4dS3QsnurNAiEA+qxhCw7YelS1AZ+mLrHQl2cmzOoReeUhAMKk63HoLkc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40948},"main":"index.js","type":"module","gitHead":"6f133cfc741291f0a4aa6eb4597e644350b73897","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.2.4","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.19.1","dependencies":{"undici":"^6.10.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.6_1711476067311_0.7410401134488753","host":"s3://npm-registry-packages"}},"1.0.7":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.7","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.7","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"itsrogil","email":"romain.gilles1@gmail.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"alexbea","email":"abea@mailbox.org"},{"name":"gregvanbrug","email":"greg.vanbrug@gmail.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"ba68f555ffb10e992372f93d2377d99ceda0840d","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.7.tgz","fileCount":19,"integrity":"sha512-f0FMrDsZyEH6hMdRQoD/Ew5AGcBWJ3mU4Tfi5SBOYXAB94OofsoXE1SP5pUo9iAZBSdmtCMZOFTCLPC6ogz6ng==","signatures":[{"sig":"MEUCICbmk4bZdvze+fYYit2k/gmRSgDtz+Ek7kPvim9WyusXAiEA3Uiun4dgdg/kxy8VyqK5x8UNsO7TBxTogX8MkL8Zlxw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42051},"main":"index.js","type":"module","gitHead":"b89ea81edca01c760dc7c6fdc6bf84235ea74705","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.5.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.20.0","dependencies":{"undici":"^6.10.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.7_1711630169798_0.4781500301951136","host":"s3://npm-registry-packages"}},"1.0.8":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.8","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.8","dist":{"shasum":"3c33deb5a9f20d918aece9fd9ebb5aa510a1597e","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.8.tgz","fileCount":19,"integrity":"sha512-zyYCOrhWIzEk9YLCDDNANwLUnGzCrrhccr03IWFEigTQ5Ix0pDnYS1rrgOQaHNN0bmZyJGE7WFKGofdjCMiOSA==","signatures":[{"sig":"MEQCICpT+YMvp/JPm02cUxGPJMmcVz4PMfXCVHi6jXOMSM+wAiAOIukvSdUamFZZmXBmwpyrSmG8R8RDxXaQ/X4PufPnDg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42456},"main":"index.js","type":"module","gitHead":"9f9d7127834527879508403b2f59d4deb08c24f0","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.5.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.20.0","dependencies":{"undici":"^6.10.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.8_1719927872606_0.6024936954490245","host":"s3://npm-registry-packages"}},"1.0.9":{"name":"@apostrophecms/apostrophe-astro","version":"1.0.9","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.0.9","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"9a09c6a5b2618d25472815de75bd5979a4fdb22f","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.0.9.tgz","fileCount":20,"integrity":"sha512-nyipecC8T3TA8xYNzHfwFC8rnHyW7kx85wEJb/XVb/uBSDwF8pSm09OvNymUVMcV7hky+59Fi7HdbUNOaF0fOA==","signatures":[{"sig":"MEUCIQDzz216ewu3LYLKLbk3J0SkHL5l+AP9TT2UyqM+K+rQ4gIgAhbL2rLQLUmIU7JhNLbTKvbXGF7DuImKlOEvPaFwmTQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":42925},"main":"index.js","type":"module","gitHead":"c8e28a403b01fec95fa70d4af2bb38f0d24768b6","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.7.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.20.4","dependencies":{"undici":"^6.10.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.0.9_1729682467753_0.07927986100030493","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.1.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.1.0","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"dist":{"shasum":"21ee626e5c0236145cbc2d5f9c534fb42621e327","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.1.0.tgz","fileCount":20,"integrity":"sha512-K1pyvYuuA8TB30IWPsedX1CuK35OSc/+tfd2I3pbykSvT2AQFe/317XszFGmS7fbygn2WbmyKRNF+fYU+yc8ZQ==","signatures":[{"sig":"MEYCIQDHwfyKdFBvYWr3CaZa4InRsIjmS+/6D3dhsmax9oWJ4gIhAIxypEBRHdy5O43Wuu3ySLMv7snwXf4/1XJNBGMuXOew","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43579},"main":"index.js","type":"module","gitHead":"ffc7b184679f6eebc637934135818b01b627a00d","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.9.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.20.4","dependencies":{"undici":"^6.10.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.1.0_1732126720863_0.6717250221474786","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.2.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.2.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"haroun","email":"haroun.npm@icloud.com"}],"dist":{"shasum":"b4451ad8802f5eabec15661c398089fc422f9d28","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.2.0.tgz","fileCount":20,"integrity":"sha512-aw5y2Q5+lUQvxFuwCbP4zPP/MIxvkTIXL3z5RorgOz/p/Jci+P1BpVE5E8CSZKAnz4QHL88gFYARW7PKJ+02/w==","signatures":[{"sig":"MEUCIQDOPrXrng68i4wFpaTDr6w4kyeiPbuvnb/DznOE05I4BgIgfpRL2LAi6uUoWSRGnP1mGebP8QGATV+Bh2HEkf2pD7Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46729},"main":"index.js","type":"module","gitHead":"270c5e3d924e777819510f2ba224d41006e38872","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.20.4","dependencies":{"undici":"^6.10.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.2.0_1738005217095_0.9027353489851053","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@apostrophecms/apostrophe-astro","version":"1.2.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.2.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"haroun","email":"haroun.npm@icloud.com"}],"dist":{"shasum":"828aee5197041fcbe5b745c1971c2556a0aeccdf","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.2.1.tgz","fileCount":20,"integrity":"sha512-LELpa33QwyiiOZOCs+Bre+f0xOx8zxc6dyQ2wL9V5yO3/CIaNzaN/qVUHj3aVS4ZAxxZzndJ1ObeRDMGUxileQ==","signatures":[{"sig":"MEYCIQC/EQDIRST8Hzpy8R5qLQxR+QOfzpUnzZh3CN+BkYrBvQIhAIVfSkGfg5uT/2VsHYGoV5J9pEjslqG8GHLfjGKmRInw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46855},"main":"index.js","type":"module","gitHead":"10dfb1a952fcd9d2584482972d0b49c99e4f9a41","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.20.4","dependencies":{"undici":"^6.10.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.2.1_1742400208246_0.793198205288437","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.3.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.3.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"dist":{"shasum":"9658d8d6859c1f5cd933e63a3b5ae21796fb5d5c","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.3.0.tgz","fileCount":20,"integrity":"sha512-p2QiPfQL1xw7ohqAaygRi1xxcF5qV2uZf05pjSstQBarnAVRL2eXHuVTQf3zK3kAIueAwU1Cng5WzqgAVNxtHA==","signatures":[{"sig":"MEYCIQDYpUuFpHoXAxXs/suYkFUb17BCxs/G93eVqRglEOkn0wIhAKAPCVbNBJMBK0MMMQ1t30ZsgfOmv1RXQPRctQD/QrM/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50372},"main":"index.js","type":"module","gitHead":"29a9d97283891e5b0e49eb8d6acb1d52c2fb700b","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.20.4","dependencies":{"undici":"^6.10.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.3.0_1744826248196_0.6587719656593014","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@apostrophecms/apostrophe-astro","version":"1.3.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.3.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"dist":{"shasum":"da28a92d25e6306803585269b7e5ab747a13dd86","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.3.1.tgz","fileCount":20,"integrity":"sha512-g3Rx7efmjixHM8xBugaACtsfewnEWYlTe5UY+H46/NPZt/JygBKW4tBsB6QAZO4j0KD+nS98sQM1WafXgeysnQ==","signatures":[{"sig":"MEQCIBbp5JQyhYp6K74C1UGGjvdSrW/uwRBOThD6MIJxhSSMAiAu2fUNDxdrBvubOXNmpOPcvOuR2Rt1w1tPH6y/+7ihNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50847},"main":"index.js","type":"module","gitHead":"5177dedbe6dddbf2bd76c5c03fe44781f29d5b03","_npmUser":{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"22.14.0","dependencies":{"undici":"^6.10.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.3.1_1748007412397_0.8979596720588785","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.4.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.4.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"dist":{"shasum":"306d3501781be4c5919524fe0611d58611047737","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.4.0.tgz","fileCount":22,"integrity":"sha512-B72ENT7ywl8wEp0u0chGFDLASNznYBPx2FTR/aRtkPdc/nyEuIKI6QXUsum9+CypCLKVDdTkTYNA8nEFfqFFyA==","signatures":[{"sig":"MEQCICg+/k360AF96YebOWbCW/0F98OmcG59R9wL8+TrAtzuAiBy1Fq1j+IqjY7pbD3Yche1D6qd5rlderW+/8h3dsmmow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59008},"main":"index.js","type":"module","gitHead":"200ccd36c289934c26ebebef58433424971e91e1","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"18.20.4","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.4.0_1749657925400_0.5730853823497066","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.5.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.5.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"dist":{"shasum":"7f69eda4a19179b1b4952d4024b068b483feee13","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.5.0.tgz","fileCount":22,"integrity":"sha512-OOME6R1vZ3f/bTMTeAIvl81sAsslv+L0xZ1jnOl/oQZ7ViXSuLzsJdnPiIBAU0cHGj8aYl3Jdiwqk1AL4RFXZw==","signatures":[{"sig":"MEYCIQCVPtQ0hW2A19bn6fiTvsH9GKHkbwDrMZxDa3+ljmCbhwIhAMZZO/ipuAnafqYToxlA/bre/wxzQBsbsYzeMRO4g2q/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60064},"main":"index.js","type":"module","gitHead":"659f36006307b8c51d661278ba2989ca4f11e705","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.8.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"20.19.3","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.5.0_1754497472010_0.22863405601765407","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@apostrophecms/apostrophe-astro","version":"1.5.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.5.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"dist":{"shasum":"0f1c3b06867fd459baefe3ac6672fabddbf8670a","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.5.1.tgz","fileCount":22,"integrity":"sha512-fruAQKuQciPnbna5PCOkHCZNaNFwuJvESrCvjyy46oDVKB29PX91gGYMRnSNBEAlfVf6OsckBqtasYdaHxhMkg==","signatures":[{"sig":"MEQCIG2i5MJRPayDQbsfChZELJFqCiTOzYRLmz7sXOho5l0AAiAJbuJBgynemgB3xfXG862bnMIU3VdGaNO5/jz9F7EmCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61008},"main":"index.js","type":"module","gitHead":"cff6aa5002d207702857673860b419462615231e","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.8.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"20.19.3","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.5.1_1757359741640_0.916493493680425","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@apostrophecms/apostrophe-astro","version":"1.5.2","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.5.2","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"dist":{"shasum":"9c51f4c3394c774ffc3fff58405026a62e76282c","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.5.2.tgz","fileCount":22,"integrity":"sha512-fgrn5RVAWkgi2TOTDrr7ZpCv67fKJS/bzX0afxjFffQni0si9D0gmlhpfytS/X1Qd67DZxrh/7GPjntYuUUy6w==","signatures":[{"sig":"MEUCIEVwXe+PzfOYtKXYJ8+eENE9SS3tEl9bkdQyIEXKvtVyAiEAlHtrrnpL4T/G504eJ+MyvvpEkfjaVI+L159Hdb6zkv4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61136},"main":"index.js","type":"module","gitHead":"ee5c5719cceb898362dc7ce9e6047e64b1dbc7bc","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.8.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"20.19.3","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.5.2_1757425231691_0.24373544353517973","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.6.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.6.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"dist":{"shasum":"7a1e356604d750344d07c558bbcf352564d3e059","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.6.0.tgz","fileCount":22,"integrity":"sha512-RHdEO3nI7anPLkQwEpgH6J43d8SC2pQmnmQtaouJTsVe4pgLzjSNtF1Pgx+g06JEJT4i+YhLEbow1gD7kNjvtQ==","signatures":[{"sig":"MEYCIQCLlA416i/tL55J3tm/1QmeAO6t8SCefN+WA6Yd7Cd5TwIhAL/j/RPNZJi2A6QZQ2llZ1qlq49LbUTp0BKXJAnkJVQj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63199},"main":"index.js","type":"module","gitHead":"ddcc8ca5880abc662579df88ce9beb6ce2e31cb4","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"20.19.3","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.6.0_1759343046444_0.3421831096387915","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.7.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.7.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"dist":{"shasum":"edb7064ab15ee66c3c240b36f273ebe19c194906","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.7.0.tgz","fileCount":27,"integrity":"sha512-My0Cf5XRd6BqivAZS2JyriJ6KBG9TLAa1c2FtOZXrL83KbNGQOCZor9+83s3+VMQ8WGMPFmyYGlkZRoR3ALwTQ==","signatures":[{"sig":"MEUCIQDnR78NzTq4PPWEJVriabTeOBnd1wTnWJp7BmY7XiaJEAIgUdoj+SWUbpDOCDDx5k1UL1354GhVT13YHMZEgiroLsk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72038},"main":"index.js","type":"module","gitHead":"f000ef91637397a73eaf4f2e0189ef1823b72482","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"20.19.3","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.7.0_1761843881713_0.05159118798310858","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@apostrophecms/apostrophe-astro","version":"1.7.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.7.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"dist":{"shasum":"09653a9088111cdee92eaeade87376aefc8c529c","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.7.1.tgz","fileCount":27,"integrity":"sha512-8PsC3SfNfwyO0lzlQeyNh+OCXZPtFUGx0n7T7xde4BfV5PBF2/SCLhj0tagakViW4Cds0Z3O4iEWS+7e+XHMow==","signatures":[{"sig":"MEUCICifNeaRsDSFmBbcjypaLKiUYGzlhN8xnYnfZJHnh8p5AiEA6e+fdL4zWANG9eCxH2WkxPxLchMHQgR5nNNNg5bV2WY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72522},"main":"index.js","type":"module","gitHead":"98e911834c70bc53ede558a52b11dcdf4807eafe","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"20.19.3","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.7.1_1764095988747_0.7685966670505118","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.8.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.8.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"4cd9f9978b04798303fccbe27c2eb36fe7f892b0","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.8.0.tgz","fileCount":28,"integrity":"sha512-jgItkp2bzRrC8J9N1xea2V84HKk27bSz5pvVt7VZIm5uXt9jjd9PrzhKcnikBdDfIM5acmqkEPrsxj79Kzw+5g==","signatures":[{"sig":"MEUCIQC521a/mHnW+z1CTqktWhoqL7lR1dWs6xns+d0RVGNsMQIgeS5jtx8ZnAnJgzXFNiA/GAvimY6Z8vjFw6Rl0Ot4KKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81248},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.8.0.tgz","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_resolved":"/private/var/folders/lg/7k83x5ys71d90nvc40mj1tbr0000gn/T/68af4456877c185d56698a32e0dcbd6e/apostrophecms-apostrophe-astro-1.8.0.tgz","_integrity":"sha512-jgItkp2bzRrC8J9N1xea2V84HKk27bSz5pvVt7VZIm5uXt9jjd9PrzhKcnikBdDfIM5acmqkEPrsxj79Kzw+5g==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"20.19.3","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.8.0_1769447371865_0.49475470436753","host":"s3://npm-registry-packages-npm-production"}},"1.9.0-alpha.1":{"name":"@apostrophecms/apostrophe-astro","version":"1.9.0-alpha.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.9.0-alpha.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"febd12e4901a2b6086229977a45c853d41674416","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.9.0-alpha.1.tgz","fileCount":28,"integrity":"sha512-l9TXi+tx6i8+1DagOHJ7WaQmLVwGa2X39NNu1vV7BL7UhXvQVzkgMcpi7FtTctobSWrN0YSiO0ft9DCmBi3EtA==","signatures":[{"sig":"MEUCIDAPR0QP2svEwwXOkfTrgoDTxJiXoEowaUGZZrvvi4l/AiEAqeOJCFqUr6OhE1v0ko8mihT0kFjmItjGX1HgWUf3Kxw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81406},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.9.0-alpha.1.tgz","_npmUser":{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},"_resolved":"/private/var/folders/1r/s8d0zxkj0077spyr8jzvx2200000gn/T/ddcff9e15db3bef6c5f0aea48ca913fb/apostrophecms-apostrophe-astro-1.9.0-alpha.1.tgz","_integrity":"sha512-l9TXi+tx6i8+1DagOHJ7WaQmLVwGa2X39NNu1vV7BL7UhXvQVzkgMcpi7FtTctobSWrN0YSiO0ft9DCmBi3EtA==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.5.1","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"22.14.0","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.9.0-alpha.1_1770403318794_0.37724403419149866","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.9.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.9.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"06362e2a828d8b7a77b73ffe0559d50140107244","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.9.0.tgz","fileCount":27,"integrity":"sha512-Pv7qKM0I8nzuJp0tvJt/pVf6fLL7otTpbZWgCxTtmPO7B8ipA8nqwAeLGeAuxCVgjvYZNCwjTV3aiO3QfL2/NA==","signatures":[{"sig":"MEUCIQDA444td5JGlbL7h1sfpHAxEeL9p3DVmwfr91du2vhhdgIgeOVS7o6Udg1iV8X4goxZWmD9XVBkIV6PqD0d++GJrU0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81547},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.9.0.tgz","_npmUser":{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},"_resolved":"/private/var/folders/1r/s8d0zxkj0077spyr8jzvx2200000gn/T/78336dd1ad4d8b41952859aa4102939b/apostrophecms-apostrophe-astro-1.9.0.tgz","_integrity":"sha512-Pv7qKM0I8nzuJp0tvJt/pVf6fLL7otTpbZWgCxTtmPO7B8ipA8nqwAeLGeAuxCVgjvYZNCwjTV3aiO3QfL2/NA==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.5.1","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"22.14.0","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.9.0_1771446979938_0.7975470653804673","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.10.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.10.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"34d17ca6a06c1dec2be6d2171518e25fe7a4ad0c","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.10.0.tgz","fileCount":33,"integrity":"sha512-QtOkM5eacmPSWzr5pO4tZaPWjEnfqu9+yjjGfeRkFypgLHk86JM5da/pV0WZT0g1WJ5fKE1HhV96U57mK4vrqQ==","signatures":[{"sig":"MEYCIQDgRQCNsM0J4QwwZvS1PA+kOH0oLcRIm1Zyk+XANan3dQIhAK0nsF7NeTV3LURgsceCVSABjz+Q2jtUtc/xKLHsC8Sb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":119385},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.10.0.tgz","_npmUser":{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},"_resolved":"/private/var/folders/1r/s8d0zxkj0077spyr8jzvx2200000gn/T/b092d45a1859dd2b61f0789c8920ec11/apostrophecms-apostrophe-astro-1.10.0.tgz","_integrity":"sha512-QtOkM5eacmPSWzr5pO4tZaPWjEnfqu9+yjjGfeRkFypgLHk86JM5da/pV0WZT0g1WJ5fKE1HhV96U57mK4vrqQ==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.5.1","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"22.14.0","dependencies":{"sluggo":"^1.0.0","undici":"^6.21.1","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.10.0_1773856793498_0.02197474737027094","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.11.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.11.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"07ced6abd1e088c4f5f6269bbdf3205352dd0bb0","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.11.0.tgz","fileCount":33,"integrity":"sha512-WXwu5qSEEHFSMhmFW6zdwNDyQkXYVEKrS1ydSlYKc+dk5lcJ3oe4STtU0S1+75m2ltaIslh3E4u2wMiWz5gfww==","signatures":[{"sig":"MEQCIB0WJD+5QORZgxbowAheVla7eYiMdDcbJ6mG/ak2K84tAiADQYz7NaMn4u+0bkUt7RFR3V/yMqStO17JftL6VQ+d/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":120756},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.11.0.tgz","_npmUser":{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},"_resolved":"/private/var/folders/1r/s8d0zxkj0077spyr8jzvx2200000gn/T/186bbaf69a7155c7f04228fbb8f5203b/apostrophecms-apostrophe-astro-1.11.0.tgz","_integrity":"sha512-WXwu5qSEEHFSMhmFW6zdwNDyQkXYVEKrS1ydSlYKc+dk5lcJ3oe4STtU0S1+75m2ltaIslh3E4u2wMiWz5gfww==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.5.1","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"22.14.0","dependencies":{"sluggo":"^1.0.0","undici":"^6.24.0","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.11.0_1776275281603_0.04406569389819093","host":"s3://npm-registry-packages-npm-production"}},"1.12.0-beta.1":{"name":"@apostrophecms/apostrophe-astro","version":"1.12.0-beta.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.12.0-beta.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"4f3709cbe0797f6fb8dae7e0f8c0794b8805d1f2","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.12.0-beta.1.tgz","fileCount":33,"integrity":"sha512-OCE7JTwNAc7Vzm4yNiNvMGj1H97ZScGy+Ipu+PUejH5Roab2D+AuHL4oOOHbqGRUF+ZAqfmGMzXJxa4/kQEwbw==","signatures":[{"sig":"MEUCIBnagX8NRyrbqpBFvVGEZFt5KBiBrcWhQuATFYcsa66/AiEAhLAotPGFFOUytgu1KB/wQULHX8iYdBBKo0TaE1VgdIE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121026},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.12.0-beta.1.tgz","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_resolved":"/private/var/folders/lg/7k83x5ys71d90nvc40mj1tbr0000gn/T/55a4fdc08ab88ca8bdd5d6deb591f03b/apostrophecms-apostrophe-astro-1.12.0-beta.1.tgz","_integrity":"sha512-OCE7JTwNAc7Vzm4yNiNvMGj1H97ZScGy+Ipu+PUejH5Roab2D+AuHL4oOOHbqGRUF+ZAqfmGMzXJxa4/kQEwbw==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.12.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"20.19.3","dependencies":{"sluggo":"^1.0.0","undici":"^6.24.0","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.12.0-beta.1_1776874589136_0.34161218061828236","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.12.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.12.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"ee6d95e2d827cfbf6ce5160abade67e14566eb66","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.12.0.tgz","fileCount":33,"integrity":"sha512-en23ar4hqsekOHOTQcnwTn4UaAo8j2ycmwW74LN2kOt8WVbWpGDuup0APLKSo88jngocRdMq31mUAiGCp4+/LA==","signatures":[{"sig":"MEQCIEIAy1kE7fw1fpXpKfMsunRhu+PBXD9Lm6P4bC+Ix8HpAiAL8KFYSmX4uprskIScGd3I4ZQ0yevwV2ETtJwrdEjBAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":122240},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.12.0.tgz","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_resolved":"/private/var/folders/lg/7k83x5ys71d90nvc40mj1tbr0000gn/T/3ae742e00b036ef3a7243d928bfd6986/apostrophecms-apostrophe-astro-1.12.0.tgz","_integrity":"sha512-en23ar4hqsekOHOTQcnwTn4UaAo8j2ycmwW74LN2kOt8WVbWpGDuup0APLKSo88jngocRdMq31mUAiGCp4+/LA==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.12.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"20.19.3","dependencies":{"sluggo":"^1.0.0","undici":"^6.24.0","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.12.0_1778680857588_0.459127492985264","host":"s3://npm-registry-packages-npm-production"}},"1.13.0-alpha.1":{"name":"@apostrophecms/apostrophe-astro","version":"1.13.0-alpha.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.13.0-alpha.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"11eccd6a9e40087e711279bd85a97fb9974d7661","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.13.0-alpha.1.tgz","fileCount":33,"integrity":"sha512-eccTSO4pG9kp01yMz9854cnuh4RqDESFfDKonWw9ZxSqYDufE8nPUzo1mHUgcP+mztja+g8wO0R3MMmgMn2chg==","signatures":[{"sig":"MEUCIESSqCj+FnI/M5e8UgZvmubUgpPDMss9RdNcTY5gztwmAiEAjfENq/Ulef59IiR+z2O1JD0xdrxQthDMwRB0VpXYje4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125142},"main":"index.js","type":"module","gitHead":"e1d7f04c7d875b5589c2b6db3b23d3a749c4ba0d","_npmUser":{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"10.9.2","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"22.14.0","dependencies":{"sluggo":"^1.0.0","undici":"^6.24.0","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.13.0-alpha.1_1780594103575_0.2299960896211597","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.13.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.13.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"4c6ab1cb2b368200b193446cd9a5e98a3961a91d","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.13.0.tgz","fileCount":33,"integrity":"sha512-xQBMF8Z60atkkpVzAs8dFw+w2p7+1SHkD9bfr+2AihrR37u5oLYMMUYnii34rt9wVQTQOlQJVGydI3szoEb2nQ==","signatures":[{"sig":"MEQCICEBkZxXq5FjUD2zghb6oeGPfrmSLuqXe0AjTros0M3mAiA/OvhKVQJNW8TE/8hPB/MUcUfyR68YgJq+Qg3D5MlmtQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124701},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.13.0.tgz","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_resolved":"/private/var/folders/lg/7k83x5ys71d90nvc40mj1tbr0000gn/T/32e1561f529e041f41a02402ff38a17e/apostrophecms-apostrophe-astro-1.13.0.tgz","_integrity":"sha512-xQBMF8Z60atkkpVzAs8dFw+w2p7+1SHkD9bfr+2AihrR37u5oLYMMUYnii34rt9wVQTQOlQJVGydI3szoEb2nQ==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.6.1","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"24.10.0","dependencies":{"sluggo":"^1.0.0","undici":"^6.24.0","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.13.0_1781111653403_0.05333980305135344","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.14.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.14.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"b6b4c43bf0928c9cb97420a749e87ec16f969a9b","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.14.0.tgz","fileCount":72,"integrity":"sha512-dgwubUNeYf8ywCKmGau5VK0wWoixZQKPG3Yg97OMoTTMkK63lxGc5TcGHL07Sl5FO4Ah5jiUrGEwRblY3Rn5JA==","signatures":[{"sig":"MEUCIQC4jp7DvKMINUczFyN8++Zx9zdsW467bIFiTeAEE/R5/wIgT60tG/5DHzV32jlMbmCsBq66QJie3P8FM8I6o+J0QTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218493},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.14.0.tgz","types":"types/index.d.ts","scripts":{"test":"mocha","build:types":"tsc"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_resolved":"/private/var/folders/lg/7k83x5ys71d90nvc40mj1tbr0000gn/T/27405d3c8ec5f1ebc43036836dfefec4/apostrophecms-apostrophe-astro-1.14.0.tgz","_integrity":"sha512-dgwubUNeYf8ywCKmGau5VK0wWoixZQKPG3Yg97OMoTTMkK63lxGc5TcGHL07Sl5FO4Ah5jiUrGEwRblY3Rn5JA==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.16.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"24.18.0","dependencies":{"sluggo":"^1.0.0","undici":"^8.5.0","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.7.6","esmock":"^2.7.6","typescript":"^6.0.3"},"peerDependencies":{"astro":">=5.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.14.0_1783706737632_0.9990262897925177","host":"s3://npm-registry-packages-npm-production"}},"1.14.1-beta.1":{"name":"@apostrophecms/apostrophe-astro","version":"1.14.1-beta.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.14.1-beta.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"41b8d94023215d4049f6887e0982c86ce39389ce","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.14.1-beta.1.tgz","fileCount":73,"integrity":"sha512-UoDg6PfIwWzBE6lHTed2nBcxgs0aZIwcv/bnBhtYG5fOwMUti8+enwCz4c5MxMIYP/C9q1sfnc3RH+yNLtxhFA==","signatures":[{"sig":"MEUCIQDERDyDN2PMsliSWRfdKPaLEgmwCZPYptx9NuXQWVTMOQIgJDBsyjGv3K0ObrUzw5BancZrPNonsRnY8U7CJb0z7Rk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222277},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.14.1-beta.1.tgz","types":"types/index.d.ts","scripts":{"test":"mocha","build:types":"tsc"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_resolved":"/private/var/folders/lg/7k83x5ys71d90nvc40mj1tbr0000gn/T/ad38ba082b98987d65acf296c3b03f0a/apostrophecms-apostrophe-astro-1.14.1-beta.1.tgz","_integrity":"sha512-UoDg6PfIwWzBE6lHTed2nBcxgs0aZIwcv/bnBhtYG5fOwMUti8+enwCz4c5MxMIYP/C9q1sfnc3RH+yNLtxhFA==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.16.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"24.18.0","dependencies":{"sluggo":"^1.0.0","undici":"^8.5.0","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.7.6","esmock":"^2.7.6","typescript":"^6.0.3"},"peerDependencies":{"astro":">=5.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.14.1-beta.1_1785160626406_0.38573033444235794","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@apostrophecms/apostrophe-astro","version":"1.15.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/apostrophe-astro@1.15.0","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"074ab919ced323a78f9a5f075f4b8982621ec4e5","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.15.0.tgz","fileCount":73,"integrity":"sha512-YRjgbuEM9SUr0sJqmHje9xWX20lYwQoV3GXPlAvRNpIMQSRDa4rwiOhiWJcZ0jabEaHapdB66ooQDNHTjWST9g==","signatures":[{"sig":"MEUCIQDJyXJSM9+2ZXEvM9TuzaI1BlTmjF/iPUY4u8mX8cGeDwIgf0LBSp4jieh7puurBvAepuB9y41I0B4zYv/VmX068KQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222495},"main":"index.js","type":"module","_from":"file:apostrophecms-apostrophe-astro-1.15.0.tgz","types":"types/index.d.ts","scripts":{"test":"mocha","build:types":"tsc"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"_resolved":"/private/var/folders/lg/7k83x5ys71d90nvc40mj1tbr0000gn/T/45637f8d73ad45010dbbdcdd51fd65da/apostrophecms-apostrophe-astro-1.15.0.tgz","_integrity":"sha512-YRjgbuEM9SUr0sJqmHje9xWX20lYwQoV3GXPlAvRNpIMQSRDa4rwiOhiWJcZ0jabEaHapdB66ooQDNHTjWST9g==","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.16.0","description":"Apostrophe integration for Astro","directories":{},"_nodeVersion":"24.18.0","dependencies":{"sluggo":"^1.0.0","undici":"^8.5.0","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.7.6","esmock":"^2.7.6","typescript":"^6.0.3"},"peerDependencies":{"astro":">=5.0.0 <8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/apostrophe-astro_1.15.0_1786635870255_0.29861541260730506","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"_id":"@apostrophecms/apostrophe-astro@1.16.0","bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"dist":{"shasum":"48b9d768a12bfdd68d8e55b9ddea1b046ab5432f","tarball":"https://registry.npmjs.org/@apostrophecms/apostrophe-astro/-/apostrophe-astro-1.16.0.tgz","fileCount":76,"integrity":"sha512-OtXncxMi+s1J2/5Ip56aOQoHw5MX+J15mhlQGcJT+GWZHAKr4ZyYarK+yKeSp17ReU/njEVHJgvkyedFeczuqw==","signatures":[{"sig":"MEUCIQCxdBzXaiYxe1Fyp7RY2eUCeNAhBzMtcjHMytPqIq3ZFgIgcDow9jKwm+ccFvFSmIuUfp6rbzL0Nm+bFf57mhDvZIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDw1i+hdwog8HT4PgTG+KxQpOtdgDXoQsSU2/yFBSzReAiEAns6tPuk/t5UzNHgS9M6eZSNjKejZDMq7FwhbRG5y0xA="}],"unpackedSize":243451},"main":"index.js","name":"@apostrophecms/apostrophe-astro","type":"module","types":"types/index.d.ts","author":{"name":"Apostrophe Technologies"},"gitHead":"9500b8b0e1d630d5e07fbb5fd2c25ed0943845ce","license":"MIT","scripts":{"test":"mocha","build:types":"tsc"},"version":"1.16.0","_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"_npmVersion":"11.19.0","description":"Apostrophe integration for Astro","directories":{},"maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"_nodeVersion":"24.20.0","dependencies":{"sluggo":"^1.0.1","undici":"^8.10.1","lodash.deburr":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.8.0","esmock":"^2.7.6","typescript":"^6.0.3"},"peerDependencies":{"astro":">=5.0.0 <8.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/apostrophe-astro_1.16.0_1790796508898_0.8097421941693572"}}},"time":{"created":"2023-12-21T15:33:27.392Z","modified":"2026-09-30T19:28:29.182Z","1.0.0":"2023-12-21T15:33:27.717Z","1.0.1":"2023-12-21T15:57:29.261Z","1.0.2":"2023-12-22T20:01:01.421Z","1.0.3":"2023-12-27T17:19:19.182Z","1.0.4":"2024-01-22T15:54:07.891Z","1.0.5":"2024-02-08T13:50:18.274Z","1.0.6":"2024-03-26T18:01:07.492Z","1.0.7":"2024-03-28T12:49:29.954Z","1.0.8":"2024-07-02T13:44:32.760Z","1.0.9":"2024-10-23T11:21:07.963Z","1.1.0":"2024-11-20T18:18:41.049Z","1.2.0":"2025-01-27T19:13:37.376Z","1.2.1":"2025-03-19T16:03:28.443Z","1.3.0":"2025-04-16T17:57:28.399Z","1.3.1":"2025-05-23T13:36:52.602Z","1.4.0":"2025-06-11T16:05:25.595Z","1.5.0":"2025-08-06T16:24:32.203Z","1.5.1":"2025-09-08T19:29:01.817Z","1.5.2":"2025-09-09T13:40:31.912Z","1.6.0":"2025-10-01T18:24:06.685Z","1.7.0":"2025-10-30T17:04:41.908Z","1.7.1":"2025-11-25T18:39:48.950Z","1.8.0":"2026-01-26T17:09:32.028Z","1.9.0-alpha.1":"2026-02-06T18:41:58.969Z","1.9.0":"2026-02-18T20:36:20.078Z","1.10.0":"2026-03-18T17:59:53.657Z","1.11.0":"2026-04-15T17:48:01.762Z","1.12.0-beta.1":"2026-04-22T16:16:29.279Z","1.12.0":"2026-05-13T14:00:57.761Z","1.13.0-alpha.1":"2026-06-04T17:28:23.726Z","1.13.0":"2026-06-10T17:14:13.528Z","1.14.0":"2026-07-10T18:05:37.839Z","1.14.1-beta.1":"2026-07-27T13:57:06.560Z","1.15.0":"2026-08-13T15:44:30.389Z","1.16.0":"2026-09-30T19:28:28.990Z"},"bugs":{"url":"https://github.com/apostrophecms/apostrophe/issues"},"author":{"name":"Apostrophe Technologies"},"license":"MIT","homepage":"https://github.com/apostrophecms/apostrophe/tree/main/packages/apostrophe-astro#readme","repository":{"url":"git+https://github.com/apostrophecms/apostrophe.git","type":"git","directory":"packages/apostrophe-astro"},"description":"Apostrophe integration for Astro","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"}],"readme":"<div align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/apostrophecms/apostrophe/main/logo.svg\" alt=\"ApostropheCMS logo\" width=\"80\" height=\"80\">\n\n  <h1>@apostrophecms/apostrophe-astro</h1>\n  <p>\n    <a aria-label=\"Apostrophe logo\" href=\"https://apostrophecms.com/docs/\">\n      <img src=\"https://img.shields.io/badge/MADE%20FOR%20ApostropheCMS-000000.svg?style=for-the-badge&logo=Apostrophe&labelColor=6516dd\">\n    </a>\n    <a aria-label=\"Join the community on Discord\" href=\"http://chat.apostrophecms.org\">\n      <img alt=\"\" src=\"https://img.shields.io/discord/517772094482677790?color=5865f2&label=Join%20the%20Discord&logo=discord&logoColor=fff&labelColor=000&style=for-the-badge&logoWidth=20\">\n    </a>\n  </p>\n</div>\n\n- [Astro integration for ApostropheCMS](#astro-integration-for-apostrophecms)\n  - [About Astro](#about-astro)\n  - [Bringing ApostropheCMS and Astro together](#bringing-apostrophecms-and-astro-together)\n  - [Installation](#installation)\n  - [Security](#security)\n  - [Configuration (Astro)](#configuration-astro)\n  - [Options](#options)\n    - [`aposHost` (mandatory)](#aposhost-mandatory)\n    - [`widgetsMapping` (mandatory)](#widgetsmapping-mandatory)\n    - [`templatesMapping` (mandatory)](#templatesmapping-mandatory)\n    - [`onBeforeWidgetRender` (optional)](#onbeforewidgetrender-optional)\n    - [`viewTransitionWorkaround` (optional)](#viewtransitionworkaround-optional)\n    - [`includeResponseHeaders`](#includeresponseheaders)\n    - [`excludeRequestHeaders`](#excluderequestheaders)\n    - [`forwardHeaders` (deprecated)](#forwardheaders-deprecated)\n    - [`proxyRoutes` (optional)](#proxyroutes-optional)\n    - [`aposPrefix` (optional)](#aposprefix-optional)\n    - [`staticBuild` (optional)](#staticbuild-optional)\n  - [Mapping Apostrophe templates to Astro components](#mapping-apostrophe-templates-to-astro-components)\n    - [How Apostrophe template names work](#how-apostrophe-template-names-work)\n    - [Special template names](#special-template-names)\n  - [Mapping Apostrophe widgets to Astro components](#mapping-apostrophe-widgets-to-astro-components)\n  - [Creating the `[...slug.astro]` component and fetching Apostrophe data](#creating-the-slugastro-component-and-fetching-apostrophe-data)\n    - [Understanding `AposLayout`](#understanding-aposlayout)\n    - [Understanding `AposTemplate`](#understanding-apostemplate)\n  - [Creating Astro page components](#creating-astro-page-components)\n    - [Understanding the `AposArea` component](#understanding-the-aposarea-component)\n    - [Understanding the `AposField` component](#understanding-the-aposfield-component)\n  - [Creating Astro widget components](#creating-astro-widget-components)\n    - [Placeholders are important in widgets that use them](#placeholders-are-important-in-widgets-that-use-them)\n    - [Remember, relationship properties might not be populated](#remember-relationship-properties-might-not-be-populated)\n  - [Accessing image and URLs](#accessing-image-and-urls)\n  - [What to change in your Apostrophe project](#what-to-change-in-your-apostrophe-project)\n  - [Starting up your combined project](#starting-up-your-combined-project)\n  - [Logging in](#logging-in)\n  - [Redirections](#redirections)\n  - [404 Not Found](#404-not-found)\n  - [Reserved routes](#reserved-routes)\n  - [What about widget players?](#what-about-widget-players)\n  - [`aposSetQueryParameter`: working with query parameters](#apossetqueryparameter-working-with-query-parameters)\n  - [Other helper functions](#other-helper-functions)\n  - [What about Vue, React, SvelteJS, etc.?](#what-about-vue-react-sveltejs-etc)\n  - [A note on production use](#a-note-on-production-use)\n  - [Static builds](#static-builds)\n  - [Output and logging](#output-and-logging)\n  - [Debugging](#debugging)\n    - [Widget Render Hook](#widget-render-hook)\n  - [Enabling the `render-area` option to ApostropheCMS REST APIs](#enabling-the-render-area-option-to-apostrophecms-rest-apis)\n  - [Enabling the `@apostrophecms/layout-widget` in an existing project](#enabling-the-apostrophecmslayout-widget-in-an-existing-project)\n    - [Backend updates](#backend-updates)\n    - [Frontend updates](#frontend-updates)\n  - [Conclusion](#conclusion)\n  - [Acknowledgements](#acknowledgements)\n\n# Astro integration for ApostropheCMS\n\nThis module integrates ApostropheCMS into your [Astro](https://astro.build/) application.\n\n## About Astro\n\nAstro provides a \"universal bridge\" to run modern frontend frameworks like React, Vue,\nand SvelteJS on the server side, as well as a straightforward, JSX-like template\nlanguage of its own to meld everything together.\n\n## Bringing ApostropheCMS and Astro together\n\nThe intent of this integration is to let Apostrophe manage content, handle routing of URLs and fetch content,\nand let Astro take the responsibility for the rendering of pages\nand any associated logic using your framework(s) of choice like React, Vue.js,\nSvelte, etc. (see the [Astro integrations page](https://docs.astro.build/en/guides/integrations-guide/) for more).\n\n**This module also brings the ApostropheCMS Admin UI in your Astro application**, so you can manage your site exactly as if you were in a \"normal\" Apostrophe instance.\n\nWhen you use this module, you will have **two** projects:\n\n1. An Astro project. This is where you write your templates and frontend code.\n\n2. An Apostrophe project. This is where you define your page types, widget types\nand other content types with their schemas and other customizations.\n\nThis kind of dual-project CMS integration is typical for Astro.\n\nThe best way to keep everything consistent is to build these in `frontend` and `backend` subdirectories of the same git repository.\n\nTo get you started quickly, we recommend one of our official Astro starter kits:\n\n* [apostrophecms/starter-kit-astro-essentials](https://github.com/apostrophecms/starter-kit-astro-essentials) is best for a clean start with as little extra code as possible.\n* [apostrophecms/astro-public-demo](https://github.com/apostrophecms/astro-public-demo) is a full-fledged project with a blog, custom widgets, and other nice touches. It can also be loaded with the same data as found in our online [public demo](https://demo.apostrophecms.com/?utm_source=github&utm_medium=readme&utm_campaign=apostrophe-astro)\n\n> 💡 These combined Astro + Apostrophe projects can be launched by using npm create apostrophe@latest and selecting either \"Barebones\" or \"Demo\" from the available options.\n\nYou can also adapt your own existing ApostropheCMS project as explained below.\n\n> Note that this module, `@apostrophecms/apostrophe-astro`, is meant to be installed as a dependency of your *Astro project*,\n> not your Apostrophe project.\n\nThis module is primarily designed for use with Astro's `output: 'server'` setting (SSR mode), so that you can edit your content directly on the page. It also supports `output: 'static'` for publishing a fully static build of your site — see [Static builds](#static-builds) below. Content editing always requires a running Apostrophe backend, so a static build is a publishing target, not a replacement for the SSR development workflow.\n\n## Installation\n\nIf you are not starting from one of the projects above, you will need to install this\nmodule into your Astro project. Install this module in your\n**Astro project**, not your ApostropheCMS project:\n\n```shell\ncd my-astro-project\nnpm install @apostrophecms/apostrophe-astro\n```\n\n*Astro 5.x, 6.x and 7.x are supported (`astro >=5.0.0 <8.0.0`). Node.js 22.19 or newer is required.*\n\n> If you are upgrading from an earlier release of this integration, see [MIGRATION.md](./MIGRATION.md) for\n> the Astro v6/v7 notes, the deprecated `lib/` import paths, and the removal of the private Vite virtual modules.\n\n## Security\n\nYou **must** set the `APOS_EXTERNAL_FRONT_KEY` environment variable to a secret\nvalue when running your Astro project, and also set the same variable to the same value when running your Apostrophe application.\nThis ensures that other sites on the web cannot fetch excessive amounts of\ninformation from ApostropheCMS without your permission.\n\n## Configuration (Astro)\n\nSince this is an Astro integration, you will need to add it to your Astro project's `astro.config.mjs` file.\nHere is a working `astro.config.mjs` file for a project with an Apostrophe CMS backend.\n\n```js\nimport { defineConfig } from 'astro/config';\nimport apostrophe from '@apostrophecms/apostrophe-astro';\n\n// For production. You can use other adapters that support\n// `output: 'server'`\nimport node from '@astrojs/node';\n\nexport default defineConfig({\n  output: 'server',\n  adapter: node({\n    mode: 'standalone'\n  }),\n  integrations: [\n    apostrophe({\n      aposHost: 'http://localhost:3000',\n      widgetsMapping: './src/widgets',\n      templatesMapping: './src/templates',\n      onBeforeWidgetRender: './src/hooks/before-widget-render.js', // Optional\n      viewTransitionWorkaround: false,\n      includeResponseHeaders: [\n        'content-security-policy',\n        'strict-transport-security',\n        'x-frame-options',\n        'referrer-policy',\n        'cache-control'\n      ],\n      excludeRequestHeaders: [\n        // For single-site setups or hosting on multiple servers, block the host header\n        'host'\n      ],\n      proxyRoutes: [\n        // Custom URLs that should be proxied to Apostrophe.\n        // Note that all of `/api/v1` is already proxied, and literal\n        // content files declared by Apostrophe modules (robots.txt,\n        // sitemap.xml, llms.txt, ...) are routed automatically, so\n        // this is usually unnecessary\n      ]\n    })\n  ]\n});\n```\n\n> Earlier versions of this document asked you to add a `vite.ssr.noExternal` entry for\n> `@apostrophecms/apostrophe-astro` to your own config. The integration now applies that itself\n> (for both the SSR and prerender Vite environments), so you no longer need it. Leaving an existing\n> entry in place is harmless.\n\n## Options\n\n### `aposHost` (mandatory)\n\nThis option is the base URL of your Apostrophe instance. It must contain the\nport number if testing locally and/or communicating directly with another instance\non the same server in a small production deployment. This option can be overriden\nat runtime with the `APOS_HOST` environment variable.\n\nDuring development it defaults automatically to: `http://localhost:3000`\n\n### `widgetsMapping` (mandatory)\n\nThe file in your project that contains the mapping between Apostrophe widget types and your Astro components (see below).\n\n### `templatesMapping` (mandatory)\n\nThe file in your project that contains the mapping between Apostrophe templates and your Astro templates (see below).\n\n### `onBeforeWidgetRender` (optional)\n\nPath to a hook function that runs before rendering widgets in edit mode. See [Widget Render Hook](#widget-render-hook) for details.\n\n### `viewTransitionWorkaround` (optional)\n\nIf set to `true`, Apostrophe will refresh its admin UI JavaScript on\nevery page transition, to ensure compatibility with Astro\n[view transitions](https://docs.astro.build/en/guides/view-transitions/).\nIf you are not using this feature of Astro, you can omit this flag to\nimprove performance for editors. Ordinary website visitors are\nnot impacted in any case. We are seeking an alternative solution to\neliminate this option.\n\n### `includeResponseHeaders`\n\nAn array of HTTP headers that you want to include from Apostrophe to the final response sent to the browser - useful if you want to use an Apostrophe module like `@apostrophecms/security-headers` and want to keep those headers as configured in Apostrophe and to preserve Apostrophe's caching headers.\n\nAt the present time, Astro is not compatible with the `nonce` property of `content-security-policy` `script-src` value. So this is automatically removed with that integration. The rest of the CSP header remains unchanged.\n\n### `excludeRequestHeaders`\n\nAn array of HTTP headers that you want to prevent from being forwarded from the browser to Apostrophe. This is particularly useful in single-site setups where you want to block the `host` header to allow Astro and Apostrophe to run on different hostnames.\n\nBy default, all headers are forwarded except those specified in this array.\n\n### `forwardHeaders` (deprecated)\n\nThis option has been replaced by `includeResponseHeaders` which provides clearer naming for its purpose. If both options are provided, `includeResponseHeaders` takes precedence. `forwardHeaders` will be removed in a future version.\n\n### `proxyRoutes` (optional)\n\nAn array of additional Astro route patterns that should be proxied straight through to Apostrophe rather than\nrendered as Astro pages. All of `/api/v1` is proxied already (see [Reserved routes](#reserved-routes)), and since\nv1.14.0 literal content files declared by your Apostrophe modules — `robots.txt`, `sitemap.xml`, `llms.txt` and\nfriends — are routed automatically, so this option is usually unnecessary. It remains available for any other URL\nyou want Apostrophe to answer directly.\n\nThis option has no effect in a static build, where there is no server to proxy through.\n\n### `aposPrefix` (optional)\n\nA URL path prefix matching the `prefix` option of your Apostrophe backend, for example `'/my-repo'`. When omitted it\nis inferred from Astro's own `base` config, with any trailing slashes removed. This option can be overridden at\nruntime with the `APOS_PREFIX` environment variable, which takes precedence over both the option and `base`.\n\n### `staticBuild` (optional)\n\nOptions controlling a static build, used when your Astro config sets `output: 'static'`. They are ignored in SSR mode.\nEvery one of them can be overridden by an environment variable, so that a CI or deployment pipeline can change the\nbehaviour without editing code — the environment variable always wins.\n\n| Option | Default | Environment variable | Purpose |\n|---|---|---|---|\n| `attachments` | `true` | `APOS_SKIP_ATTACHMENTS` (`1` disables, `0` enables) | Copy attachments into the build output. |\n| `attachmentSizes` | all sizes | `APOS_ATTACHMENT_SIZES` (comma-separated, e.g. `max,full`) | Restrict output to specific image sizes. |\n| `attachmentSkipSizes` | `['original']` | `APOS_ATTACHMENT_SKIP_SIZES` (comma-separated) | Image sizes to exclude. |\n| `attachmentFilter` | `'all'` | `APOS_ATTACHMENT_FILTER` | `'all'` writes both uploadfs attachments and pretty URL files; `'prettyOnly'` skips the uploadfs attachments, which is what you want when those are served by a CDN. Pretty URL files are always written because they are backend-served. No effect when `attachments` is `false`. |\n| `attachmentScope` | `'used'` | `APOS_ATTACHMENT_SCOPE` | `'used'` limits output to attachments referenced by the pages actually built; `'all'` includes every attachment in the database. |\n\n```js\napostrophe({\n  aposHost: 'http://localhost:3000',\n  widgetsMapping: './src/widgets',\n  templatesMapping: './src/templates',\n  staticBuild: {\n    attachmentFilter: 'prettyOnly',\n    attachmentSizes: [ 'max', 'full' ]\n  }\n})\n```\n\nA static build still talks to Apostrophe at build time: `APOS_HOST` (or `aposHost`) and `APOS_EXTERNAL_FRONT_KEY`\nmust both be set, or the attachment and literal-content steps are skipped silently.\n\n## Mapping Apostrophe templates to Astro components\n\nSince the front end of our project is entirely Astro, we'll need to create Astro components corresponding to each\ntemplate that Apostrophe would normally render with JSX or Nunjucks.\n\nCreate your template mapping in `src/templates/index.js` file.\nAs shown above, this file path must then be added to your `astro.config.mjs` file,\nin the `templatesMapping` option of the `apostrophe` integration.\n\n```js\n// src/templates/index.js\nimport HomePage from './HomePage.astro';\nimport DefaultPage from './DefaultPage.astro';\nimport BlogIndexPage from './BlogIndexPage.astro';\nimport BlogShowPage from './BlogShowPage.astro';\nimport NotFoundPage from './NotFoundPage.astro';\n\nconst templateComponents = {\n  '@apostrophecms/home-page': HomePage,\n  'default-page': DefaultPage,\n  '@apostrophecms/blog-page:index': BlogIndexPage,\n  '@apostrophecms/blog-page:show': BlogShowPage,\n  '@apostrophecms/page:notFound': NotFoundPage\n};\n\nexport default templateComponents;\n```\n\n### How Apostrophe template names work\n\nFor ordinary page templates, like the home page or a typical \"default\" page type\nin an Apostrophe project, you can just specify the Apostrophe module name.\n\nFor special templates like `notFound`, and for modules that serve more than one\ntemplate, you'll need to specify the complete name. For instance, Apostrophe's\n`@apostrophecms/blog` module contains an `@apostrophecms/blog-page` page type\nthat renders an `index` template when viewing the main page of the blog, and\na `show` template when viewing a single blog post (a \"permalink\" page).\n\nIf you don't specify the template name, `:page` is assumed, which is just right\nfor ordinary page types.\n\nFor the \"404 Not Found\" page, use `@apostrophecms/page:notFound`, which is\nthe standard name for this template in ApostropheCMS.\n\n### Special template names\n\nThe integration comes with two additional special template names that can be mapped to Astro templates.\nYou should not add a module name to these special names:\n\n* `apos-fetch-error`: served when Apostrophe generates a 500-class error. The integration will set Astro's response status to 500.\n* `apos-no-template`: served when there is no mapping corresponding to the Apostrophe page type for this page.\n\nSee below for an example Astro template for the `@apostrophe-cms/home-page` type. But first,\nlet's look at widgets.\n\n## Mapping Apostrophe widgets to Astro components\n\nSimilar to Astro page components, Astro widget components replace Apostrophe's usual\nwidget rendering.\n\nCreate your template mapping in a file in your application, for example in a\n`src/widgets/index.js` file. This file path must then be added to your `astro.config.mjs` file,\nin the `widgetsMapping` option of the `apostrophe` integration, as seen above.\n\n```js\n// src/widgets/index.js\n\nimport RichTextWidget from './RichTextWidget.astro';\nimport ImageWidget from './ImageWidget.astro';\nimport VideoWidget from './VideoWidget.astro';\nimport LayoutWidget from '@apostrophecms/apostrophe-astro/widgets/LayoutWidget.astro';\nimport LayoutColumnWidget from '@apostrophecms/apostrophe-astro/widgets/LayoutColumnWidget.astro';\n\nconst widgetComponents = {\n  // Standard widgets, but we must provide our own Astro components for them\n  '@apostrophecms/rich-text': RichTextWidget,\n  '@apostrophecms/image': ImageWidget,\n  '@apostrophecms/video': VideoWidget,\n  '@apostrophecms/layout': LayoutWidget,\n  '@apostrophecms/layout-column': LayoutColumnWidget\n};\n\nexport default widgetComponents;\n```\n\n> Note that even basic widget types like `@apostrophecms/image` do need an Astro\ntemplate in your project. This integration does not currently ship with built-in\nAstro templates for all of the common Apostrophe widgets. However, all of the starter kits referenced in this document include all the necessary code for the most common core widgets.\n\nNote that the Apostrophe widget name (on the left) is the name of your widget module **without**\nthe `-widget` part.\n\n> [!TIP]\n> The `@apostrophecms/layout-widget` needs some extra configuration and addition to areas in your ApostropheCMS project. You can read more in the [documentation](https://apostrophecms.com/docs/guide/core-widgets.html#layout-widget).\n\nThe naming of your Astro widget templates is up to you. The above convention is just\na suggestion.\n\n## Creating the `[...slug.astro]` component and fetching Apostrophe data\n\nSince Apostrophe is responsible for managing URLs to content, including creating new content and pages\non the fly, you will only need one top-level Astro page component: the `[...slug].astro` route.\n\nThe integration comes with an `aposPageFetch` method that can be used to automatically\nfetch the relevant data for the current URL.\n\nYour `[...slug].astro` component should look like this:\n\n```js\n---\nimport aposPageFetch from '@apostrophecms/apostrophe-astro/lib/aposPageFetch.js';\nimport AposLayout from '@apostrophecms/apostrophe-astro/components/layouts/AposLayout.astro';\nimport AposTemplate from '@apostrophecms/apostrophe-astro/components/AposTemplate.astro';\n\nconst aposData = await aposPageFetch(Astro.request);\nconst bodyClass = `myclass`;\n\nif (aposData.redirect) {\n  return Astro.redirect(aposData.url, aposData.status);\n}\nif (aposData.notFound) {\n  Astro.response.status = 404;\n}\n---\n<AposLayout title={aposData.page?.title} {aposData} {bodyClass}>\n    <Fragment slot=\"standardHead\">\n      <meta name=\"description\" content={aposData.page?.seoDescription} />\n      <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n      <meta charset=\"UTF-8\" />\n    </Fragment>\n    <AposTemplate {aposData} slot=\"main\" />\n</AposLayout>\n```\n\nThanks to the `aposPageFetch` call, the `aposData` object will then contain all of\nthe information normally provided by `data` in an ApostropheCMS Nunjucks template.\nThis includes, but is not limited to:\n\n* `page`: the page document for the current URL, if any\n* `piece`: the piece document when on a \"show page\" for a piece page type\n* `pieces`: an array of pieces when on an \"index page\" for a piece page type\n* `user`: information about the currently logged-in user\n* `global`: the ApostropheCMS global document e.g. global settings, editable global\nheaders and footers, etc.\n* `query`: the `req.query` object, giving access to query parameters in the URL.\n\nAny other data that your custom Apostrophe code attaches to `req.data` is also\navailable here.\n\n### Understanding `AposLayout`\n\nThis integration comes with a full managed global layout, replacing the `outerLayout.html`\nused in Nunjucks page templates.\n\nIn your `[...slug].astro` file, use the `AposLayout` component built into this\nintegration to leverage the global layout.\n\nTo override any aspect of the global layout, take advantage of the following Astro slots,\nwhich are closely related to what ApostropheCMS offers in Nunjucks:\n\n* `startHead`: slot in the very beginning of the `<head>`\n* `standardHead`: slot in the middle of `<head>`, just after `<title>`\n* `extraHead`: still in the HTML `<head>`, at the very end\n* `startBody`: at the very beginning of the `<body>` - this is not part of the refresh zone in edit mode\n* `beforeMain`: at the very beginning of the main body zone - part of the refresh zone in edit mode\n* `main`: the inner part of the main body zone - part of the refresh zone in edit mode\n* `afterMain`: at the very end of the main body zone - part of the refresh zone in edit mode\n* `endBody`: at the very end of the `<body>` - this is not part of the refresh zone in edit mode\n\nIn addition, the `AposLayout` component expects four props:\n\n* `aposData`: the data fetched from Apostrophe\n* `title`: this will go in the `<title>` HTML tag\n* `lang` which will be set in the `<html>` `lang` attribute\n* `bodyClass`: this will be added in the `class` attribute of the `<body>` element\n\nThis layout component will automatically manage the switch between support for\nthe editing UI if a user is logged in and a simpler \"Run Layout\" for all other\npage requests.\n\n### Understanding `AposTemplate`\n\nThe role of `AposTemplate` is to automatically find the right Astro component\nto render based on the template mapping you created earlier. It accepts one\nprop, the full `aposData` object.\n\n## Creating Astro page components\n\nNext we'll look at how to write Astro page components, such as the\n`src/templates/HomePage.astro` file mentioned above.\n\n> We do not recommend placing these in `src/pages` because their names are not\n> routes and Astro should not try to compile them as routes. Place them in\n> `src/templates` instead. `src/pages` should only contain the `[...slug.astro]` file.\n\nAs an example, let's take a look at a simple home page template:\n\n```js\n---\n// src/templates/HomePage.astro\nimport AposArea from '@apostrophecms/apostrophe-astro/components/AposArea.astro';\nconst { page } = Astro.props.aposData;\nconst { main } = page;\n---\n\n<section>\n  <h1>{ page.title }</h>\n  <AposArea area={main} />\n</section>\n```\n\nNotice that we receive the `page` object from Apostrophe, which gives us\naccess to `page.title`. This is similar to `data.page` in a Nunjucks template.\n\n### Understanding the `AposArea` component\n\nThis component allows Astro to render Apostrophe areas, and provides a\nstandard Apostrophe editing experience when doing so. Astro will automatically\ncall our widget components once content exists in the area. All we have to do is\npass on the area object, in this case the `main` schema field of `page`.\n\nNote that we can also pass area objects that are schema fields of widgets.\nThis allows for nested widgets, such as multiple-column widgets often used\nfor page layout.\n\nNote that additional props can be passed to the `AposArea` component and will be made\naccessible to widget components.\n\n### Understanding the `AposField` component\n\nIn the template above, `{ page.title }` displays the title but cannot be\nedited on the page: to change it the user has to open the editor modal. The\n`AposField` component displays a schema field *and* lets the user edit it\nright where it appears, the way an area is edited in place. It is the Astro\nequivalent of Apostrophe's `{% field %}` tag.\n\n```js\n---\n// src/templates/HomePage.astro\nimport AposArea from '@apostrophecms/apostrophe-astro/components/AposArea.astro';\nimport AposField from '@apostrophecms/apostrophe-astro/components/AposField.astro';\nconst { page } = Astro.props.aposData;\n---\n\n<section>\n  <AposField doc={page} name=\"title\" tag=\"h1\" />\n  <AposArea area={page.main} />\n</section>\n```\n\nFor areas, keep using `AposArea`: an area is editable in place already, and\nits own component knows all about widgets.\n\n#### Telling Apostrophe which fields you render\n\nApostrophe sends your data before your templates run, so it cannot tell which\nfields you display in place. You have to say so, or the field will be\ndisplayed but not editable. There are two ways, and they do the same thing:\n\n```js\n// backend/modules/article/index.js\nexport default {\n  extend: '@apostrophecms/piece-type',\n  options: {\n    // For fields you did not declare here, like the inherited `title`\n    wysiwygFields: [ 'title' ]\n  },\n  fields: {\n    add: {\n      subhead: {\n        type: 'string',\n        label: 'Subhead',\n        // For fields you did declare\n        wysiwyg: true\n      },\n      body: {\n        type: 'richText',\n        label: 'Body',\n        wysiwyg: true\n      }\n    }\n  }\n};\n```\n\nUse the `wysiwygFields` option for fields that come from a base type, such as\n`title`. Adding `title` again just to set `wysiwyg: true` would replace the\nwhole inherited definition, `required` and all. A name in `wysiwygFields` that\nis not in the schema is an error at startup, so a typo says so rather than\nleaving a field mysteriously uneditable.\n\nOnly field types with an in-place editor can be opted in. Today those are\n`string` and `richText`; setting `wysiwyg: true` on any other type does\nnothing. Fields inside arrays and objects work the same way — put `wysiwyg:\ntrue` on the subfield.\n\nWhile developing, `AposField` writes a note to the terminal when it displays a\nfield Apostrophe sent no editing information for, naming the field and the\noption to set.\n\n#### Why the opt in\n\nEditing a field in place costs a few hundred bytes of the page's JSON, and a\nreal page has dozens of fields no template renders — every SEO field, every\nOpen Graph field, every slug, on the page, its ancestors, its children and any\npieces alongside them. On a demo site, annotating all of them added 70% to the\nresponse. Opting in keeps the cost to the fields you actually use, and an\nanonymous visitor, who cannot edit anything, is only sent what it takes to\ndisplay them.\n\nEach field is named by its id rather than carrying its own copy of its\ndefinition, so a page with fifty fields of the same type does not repeat that\ndefinition fifty times: the schema it already carries is looked up in the\nbrowser.\n\n#### Props\n\n| Prop | Description |\n| --- | --- |\n| `doc` | The document, widget, array item or object the field belongs to. Required. |\n| `name` | The name of the field in that object's schema. Required. |\n| `tag` | The HTML tag to render. Defaults to what the field type asks for: `div` for rich text, `span` for a single line string, so a string sits on the line the template put it on. |\n| `class` | Added to the classes the field type asks for, never replacing them. |\n| `style`, `attrs` | Passed through to the tag. `attrs` is an object of additional attributes. |\n| `edit` | `false` never offers editing, even to a user who could. |\n\nAny other props are passed to the editor as its options, exactly as the `with`\nclause of the `{% field %}` tag does.\n\nFields of the *context* document, the one the page is about, are editable.\nFields of any other document are displayed and not edited, just as areas are:\nedit them on their own page. Documents your templates fetched straight from\nthe REST API carry this information only when the request asked for\n`render-areas`; without it their fields are displayed but never editable.\nFields of `global` are displayed and not edited.\n\n## Creating Astro widget components\n\nEarlier we created a mapping from Apostrophe widget names to Astro components.\nLet's take a look at how to implement these.\n\nYou Astro widget will receive a `widget` property, in addition to any custom props\nyou passed to the `AposArea` component. This `widget` property contains the\nthe schema fields of your Apostrophe widget.  \n\nAs an example, here is a simple Astro component to render `@apostrophecms/image` widgets:\n\n```js\n---\nconst { widget } = Astro.props;\nconst placeholder = widget?.aposPlaceholder;\nconst src = placeholder ?\n  '/images/image-widget-placeholder.jpg' :\n  widget?._image[0]?.attachment?._urls['full'];\n---\n<style>\n  .img-widget {\n    width: 100%;\n  }\n</style>\n<img class=\"img-widget\" {src} />\n```\n\n### Placeholders are important in widgets that use them\n\nWhy are we checking for `aposPlaceholder`? Apostrophe's `@apostrophecms/image`\nwidget displays a placeholder image until the user clicks the edit pencil to\nselect their image of choice. When rendered by Astro, Apostrophe still expects\nthis to be the case. So we need to provide our own placeholder rendering.\n\nIn this case, a suitably named file must exist in `public/images` in our Astro project.\n\n### Remember, relationship properties might not be populated\n\nIt is always possible that the image associated with an image widget has\nbeen archived. The `?.` syntax is a simple way to avoid a 500 error\nin such a situation. You may wish to add a more sophisticated fallback.\n\n## Accessing image and URLs\n\nProperties like `.attachment._urls['full']` exist on all image pieces,\nwhile properties like `.attachment._url` exist on non-image attachments\nsuch as PDFs. For more information, see\nthe [attachment field format](https://apostrophecms.com/docs/reference/api/field-formats.html#attachment).\n\n## What to change in your Apostrophe project\n\nNothing! Well, almost.\n\n* Your project must be using Apostrophe 4.x.\n* You'll need to `npm update` your project to the latest version of `apostrophe`.\n* You'll need to set the `APOS_EXTERNAL_FRONT_KEY` environment variable to a secret\nvalue of your choosing when running Apostrophe.\n* Make sure you set that **same value** when running your Astro project.\n* To avoid developer confusion, we recommend changing any page templates in your\nApostrophe project to provide a link to your Astro frontend site and\nremove all other output. Everyone, editors included, should go straight to Astro.\n\n## Starting up your combined project\n\nTo start your Astro project, follow the usual practice:\n\n```bash\ncd my-astro-project\nnpm install\nexport APOS_EXTERNAL_FRONT_KEY=your-secret-goes-here\nnpm run dev\n```\n\nIn an adjacent terminal, start your Apostrophe project:\n\n```bash\ncd my-apostrophe-project\nnpm install\nexport APOS_EXTERNAL_FRONT_KEY=your-secret-goes-here\nnpm run dev\n```\n\nFor convenience, Astro generally defaults to port `4321`, while\nApostrophe defaults to port `3000`.\n\n## Logging in\n\nOnce your integration is complete, you will be able to reach the login page in\nthe usual way at `http://localhost:4321/login`. Astro proxies this route directly\nto Apostrophe. Therefore any additional extensions you have added such as\nApostrophe's hCaptcha and TOTP modules will work as expected.\n\n## Redirections\n\nWhen Apostrophe sends a response as a redirection, you will receive a specially\nformatted `aposData` object containing `redirect: true`, a `url` property for the url\nto redirect to, and a `status` for the redirection HTTP status code. This is handled\nin the earlier example, repeated here for convenience:\n\n```js\nconst aposData = await aposPageFetch(Astro.request)\n// Redirect\nif (aposData.redirect) {\n  return Astro.redirect(aposData.url, aposData.status);\n}\n```\n\n## 404 Not Found\n\nMuch like the redirect case, when Apostrophe determines that the page was not\nfound, `aposData.notFound` will be set to true. The example `[...slug].astro`\nfile provided above includes logic to set Astro's status code to 404 in this\nsituation.\n\n## Reserved routes\n\nAs this integration proxies certain Apostrophe endpoints, there are some routes that are taken by those endpoints:\n\n* `/apos-frontend/[...slug]` for serving Apostrophe assets\n* `/uploads/[...slug]` for serving Apostrophe uploaded assets\n* `/api/v1/[...slug]` and `/[locale]/api/v1/[...slug]` for Apostrophe API endpoints\n* `/login` and `/[locale]/login` for the login page\n\nIn addition, literal content files declared by your Apostrophe modules — `robots.txt`, `sitemap.xml`, `llms.txt`\nand any others — are recognised at request time by a middleware and sent to the raw proxy instead of the page\nrenderer. Since v1.14.0 you no longer need to list these individually in `proxyRoutes`.\n\nThese routes exist in SSR mode only. A static build injects none of them.\n\nAs all Apostrophe API endpoints are proxied, you can expose new api routes as usual in your Apostrophe modules, and be able to request them through your Astro application.\nThose proxies are forwarding all of the original request headers, such as cookies, so that Apostrophe login works normally.\n\n## What about widget players?\n\nApostropheCMS is very unopinionated on the front end, but it does include one\nimportant front end feature: widget players. These provide a way for developers\nto provide special behavior to widgets, calling each widget's player exactly\nonce at page load and when new widgets are inserted or replaced with new values.\nUsers appreciate this and expect interactive widget features to work normally\nwithout a page refresh, even if the widget was just added to the page.\n\nIn Astro, web components are a recommended strategy to achieve the same thing.\nDefining and using a web component in an Astro widget component has much\nthe same effect as defining a widget player in a standalone Apostrophe project.\n\nHere is a simple outline of such a web component. For a complete example of\nthe same widget, check out the source code of `VideoWidget.astro` in our\n[Astro Essentials Starter Kit](https://github.com/apostrophecms/starter-kit-astro-essentials/blob/main/frontend/src/widgets/VideoWidget.astro) project.\n\n```js\n---\n// src/widgets/VideoWidget.astro\nconst { widget } = Astro.props;\nconst placeholder = widget?.aposPlaceholder ? 'true' : '';\nconst url = widget?.video?.url;\n---\n<style>\n  video-widget {\n    width: 100%;\n  }\n</style>\n<video-widget\n  url={placeholder ? 'https://youtu.be/Q5UX9yexEyM' : url }\n>\n</video-widget>\n<script>\n  class VideoWidget extends HTMLElement {\n    constructor() {\n      super();\n      this.init();\n    }\n    async init() {\n      const videoUrl = this.getAttribute('url');\n      // Your logic here!\n      //\n      // Fetch details about the video URL,\n      // create an iframe to embed it, append it\n      // to the component's HTML element with this.append(),\n      // etc.\n    }\n  }\n  customElements.define('video-widget', VideoWidget);\n</script>\n```\n\n> Note that Astro script tags aren't really plain vanilla HTML script tags.\n> They are efficiently compiled, support TypeScript and are only executed\n> once even if the component appears may times on the page. Defining a\n> web component allows us to leverage that code more than once by using\n> the newly defined element as often as we wish.\n\n## `aposSetQueryParameter`: working with query parameters\n\nOne last thing: query parameters. Sometimes we want to create pagination\nlinks with page numbers, add filters to a URL's query string, and so on.\nBut, working with query parameters coming from Apostrophe can\nbe a little bit tricky because there are often special query parameters\npresent during editing that should not be part of a visible URL.\n\nAs a convenience, Apostrophe provides `aposSetQueryParameter` to abstract\nall that away.\n\nHere is how the `BlogIndexPage.astro` component of the\n[Starter Kit Astro Essentials](https://github.com/apostrophecms/starter-kit-astro-essentials/blob/main/frontend/src/templates/BlogIndexPage.astro) project generates\nlinks to each page of blog posts:\n\n```js\n---\nimport { aposSetQueryParameter as setParameter } from '@apostrophecms/apostrophe-astro/helpers/universal';\n\nconst {\n  page,\n  pieces,\n  currentPage,\n  totalPages\n} = Astro.props.aposData;\n\nconst pages = [];\nfor (let i = 1; (i <= totalPages); i++) {\n  pages.push({\n    number: i,\n    current: i === currentPage,\n    url: setParameter(Astro.url, 'page', i)\n  });\n}\n---\n\n<section class=\"bp-content\">\n  <h1>{ page.title }</h1>\n\n  <h2>Blog Posts</h2>\n\n  {pieces.map(piece => (\n    <h3>\n      <a href={ piece._url }>{ piece.title }</a>\n    </h3>\n  ))}\n\n  {pages.map(page => (\n    <a\n      class={page.current ? 'current' : ''}\n      href={page.url}>{page.number}\n    </a>\n  ))}\n</section>\n```\n\nImported here as `setParameter`, `aposSetQueryParameter` allows\nus to do two things:\n\n1. Take a URL and return a new URL with a certain query parameter set\nto a new value.\n2. Remove a query parameter completely by passing the empty string as\na value, or by passing `null` or `undefined`.\n\nWhile you can get the same result by manipulating `Astro.url` yourself,\nyou'll be able to avoid the confusing presence of query parameters\nlike `aposMode` by using this convenient feature.\n\n## Other helper functions\n\n`aposSetQueryParameter` is one of a number of helpers this package exports. They are split into two entry points\naccording to where they can safely run.\n\n`@apostrophecms/apostrophe-astro/helpers/universal` — pure functions, usable in both server code and browser\nscripts:\n\n* `aposSetQueryParameter`, `buildPageUrl`, `getFilterBaseUrl` — URL and query string construction\n* `slugify` — the same slug rules Apostrophe uses\n* `stylesAttributes`, `stylesElements` — render the styles system's output for a document or widget\n* `getAttachmentUrl`, `getAttachmentSrcset`, `getFocalPoint`, `getWidth`, `getHeight` — attachment and image helpers\n\n`@apostrophecms/apostrophe-astro/helpers/server` — server only, for Astro frontmatter, endpoints and prerendering.\nThese depend on the generated integration config and on Node internals, so do not import them from client-side\nscripts:\n\n* `aposFetch` — an authenticated fetch against your Apostrophe backend\n* `getAposHost`, `isStaticBuild` — resolved integration state\n* `getAllStaticPaths`, `getAllUrlMetadata`, `getLocales` — see [Static builds](#static-builds)\n\nImporting these from their old `lib/` paths still works but is deprecated; see [MIGRATION.md](./MIGRATION.md) for\nthe mapping.\n\n## What about Vue, React, SvelteJS, etc.?\n\nWhile not shown directly in the examples above, **Astro can import components\nwritten in any of these frameworks.** Just use `astro add` to install\nthe appropriate integration, then `import` your components freely in your\n`.astro` files. For complete documentation and examples, see the\n[`@astrojs/react` integration](https://docs.astro.build/en/guides/integrations-guide/react/).\n\nIn this way, Astro acts as a **universal bridge** to essentially all modern\nfrontend frameworks.\n\n## A note on production use\n\nFor production use, any Astro hosting adapter that supports `mode: 'server'` should\nbe acceptable. In particular, our [Starter Kit Astro Essentials](https://github.com/apostrophecms/starter-kit-astro-essentials) project comes pre-configured\nfor the `node` adapter, and includes `npm run build` and `npm run serve`\nsupport to take advantage of that. In `server` mode there is not a great\ndeal of difference between these and `npm run dev`, but there is less\noverhead and less information exposed to the public, so we recommend following\nthis best practice.\n\n## Static builds\n\nSetting `output: 'static'` in your Astro config switches the integration into static mode. Instead of proxying\nrequests to Apostrophe at runtime, it fetches everything at build time and writes a plain directory of files you\ncan host anywhere.\n\nIn static mode the integration does not inject the proxy routes at all — there is no server to proxy through — so\n`/login` and the admin UI are not available in the published output. Editing continues to happen against your SSR\ndevelopment site; the static build is what you publish.\n\nYour `[...slug].astro` supplies the list of pages through Astro's `getStaticPaths`:\n\n```js\n---\nimport { getAllStaticPaths } from '@apostrophecms/apostrophe-astro/helpers/server';\n\nexport async function getStaticPaths() {\n  return getAllStaticPaths({\n    aposHost: process.env.APOS_HOST,\n    aposExternalFrontKey: process.env.APOS_EXTERNAL_FRONT_KEY\n  });\n}\n---\n```\n\n`getAllStaticPaths` fetches the supported locales from Apostrophe, collects URL metadata for each non-private\nlocale, and returns a flat array of `{ params, props }` entries ready for Astro. Two lower-level helpers are\nexported alongside it from the same entry point: `getLocales`, and `getAllUrlMetadata` for a single locale.\n\nIf a component needs to behave differently depending on the mode, import `isStaticBuild` from\n`@apostrophecms/apostrophe-astro/helpers/server`.\n\nAfter Astro finishes writing pages, the integration's `astro:build:done` hook writes two more things into the\noutput directory: literal content declared by your Apostrophe modules (`robots.txt`, `sitemap.xml`, `llms.txt`\nand so on) and the attachment files your pages reference. What gets copied is controlled by the\n[`staticBuild`](#staticbuild-optional) option and its environment variables. Both steps need `APOS_HOST` and\n`APOS_EXTERNAL_FRONT_KEY` to be set at build time and are skipped silently if either is missing.\n\n> [!TIP]\n> If your project sets `security.allowedDomains` in `astro.config.mjs`, restrict it to SSR. Astro v6 and v7 read\n> request headers during prerendering, which produces a spurious warning for every page built. See\n> [MIGRATION.md](./MIGRATION.md) for the details.\n\n## Output and logging\n\nEverything this integration prints is Astro's output, not Apostrophe's: it runs in the Astro process, so it never travels through the Apostrophe log pipeline and is not affected by the `log` option of your Apostrophe project. Warnings and errors are written to the console with a consistent `[apostrophe-astro]` prefix and are colored only when the terminal accepts color, honoring `NO_COLOR`, `FORCE_COLOR` and `--no-color` like Astro itself.\n\n## Debugging\n\nIn most cases, Astro prints helpful error messages directly in the browser\nwhen in a development environment.\n\nThe integration writes its resolved configuration to real files under\n`node_modules/.apostrophe-astro-config/` (`config.js` and `doctypes.js`) during `astro:config:setup`, and\nregisters Vite aliases for them. Static builds additionally cache data in `node_modules/.apostrophe-astro-static/`.\n\nIf you see an import of `apostrophe-astro-config/config` or `apostrophe-astro-config/doctypes` fail to resolve,\nthose generated files are missing or stale — most often after switching branches or removing `node_modules`\npartially. Reinstall or clear the two directories above and restart the dev server so `astro:config:setup` runs again.\n\n> Earlier versions of this package used private Vite virtual modules named `virtual:apostrophe-config` and\n> `virtual:apostrophe-doctypes`. They have been removed. If your project imported either of them directly, see\n> [MIGRATION.md](./MIGRATION.md).\n\n### Widget Render Hook\n\nWhen using patterns that require per-request initialization (like `AsyncLocalStorage` for request-scoped state), normal page rendering works fine because the page component can run setup code before rendering widgets. However, in edit mode, the widget render endpoint renders widgets directly without any extension point for initialization.\n\nThe `onBeforeWidgetRender` hook solves this by providing a function that runs before each widget renders in edit mode.\n\n**Setup**\n\nUsing this hook requires two steps: configuring the path in your integration options and creating the hook file.\n\n#### 1. Configure the Integration\n\nAdd the `onBeforeWidgetRender` option to your `astro.config.mjs`:\n```javascript\n// astro.config.mjs\nexport default defineConfig({\n  integrations: [\n    apostrophe({\n      widgetsMapping: './src/widgets',\n      templatesMapping: './src/templates',\n      onBeforeWidgetRender: './src/hooks/before-widget-render.js'\n    })\n  ]\n});\n```\n\n#### 2. Create the Hook File\n```javascript\n// src/hooks/before-widget-render.js\n/**\n * Runs before rendering each widget in edit mode\n * @param {Object} context.widget - The widget being rendered\n * @param {Object} context.props - Props including global data\n * @param {Object} context.Astro - Astro global object\n */\nexport default function({ widget, props, Astro }) {\n  // Your initialization logic\n  console.log('Rendering widget:', widget.type);\n}\n```\n#### Notes\n\n- The hook **only runs in edit mode** (when rendering via `/api/v1/@apostrophecms/area/render-widget`)\n- The hook can be synchronous or asynchronous (return a Promise)\n- Errors in the hook are logged but don't prevent widget rendering\n- The hook receives the same `props` that would be passed to the widget component\n\n## Enabling the `render-area` option to ApostropheCMS REST APIs\n\nIn order to enable section template library previews, and also unlock the `?render-area=1` and `?render-area=inline` query parameters to ApostropheCMS REST APIs in general, you'll need to add the following route:\n\n```markup\n---\n// Place this file in: src/pages/api/apos-external-front/render-area.astro\n\nimport AposRenderAreaForApi from '@apostrophecms/apostrophe-astro/components/AposRenderAreaForApi.astro';\n---\n<AposRenderAreaForApi />\n```\n\nThis file provides a \"bridge\" between ApostropheCMS and Astro, allowing ApostropheCMS to \"call back\" to the Astro project to render the content for a particular area.\n\nOur recently updated starter kits already include this file.\n\n## Enabling the `@apostrophecms/layout-widget` in an existing project\nIf you are using any of our starter kits, or you are following the integration steps outlined above, you will have the core layout-widget installed. For existing projects you will have a few steps to activate it.\n\n### Backend updates\n1. Add `@apostrophecms/layout` to any areas where you will want to add the widget.\n\nBy default, the layout widget columns will include the core rich-text, image, and video widgets. If you want any additional widget types, you will have to follow several additional steps:\n\n1. Create a `backend/modules/@apostrophecms/layout-column-widget/index.js` file.\n2. Add the following code:\n```javascript\nexport default {\n  fields(self, options) {\n    return {\n      add: {\n        content: {\n          type: 'area',\n          label: 'Main Content',\n          options: {\n            widgets: {\n              // add any project-specific content widgets\n              // nesting layout widgets can lead to poor performance\n              // or rendering issues\n              '@apostrophecms/rich-text': {},\n              '@apostrophecms/image': {},\n              '@apostrophecms/video': {}\n            }\n          }\n        }\n      }\n    };\n  }\n};\n```\n\nThis file extends the default column widget to define which content widgets editors can add inside each column. Avoid nesting layout widgets inside other layouts to prevent excessive DOM complexity and performance issues.\n\n> [!TIP]\n> You can read more about configuring and using the layout-widget in the [documentation](https://apostrophecms.com/docs/guide/core-widgets.html#layout-widget).\n\n### Frontend updates\nThe `@apostrophecms/apostrophe-astro` package contains templates for the layout widget and column, but like the other widgets, they have to be mapped to the corresponding Apostrophe widgets.\n\n1. Open the `frontend/src/widgets/index.js` file.\n2. Import the `layout` and `layout-column` widgets\n  ``` javascript\n    import LayoutWidget from '@apostrophecms/apostrophe-astro/widgets/LayoutWidget.astro';\n    import LayoutColumnWidget from '@apostrophecms/apostrophe-astro/widgets/LayoutColumnWidget.astro';\n  ```\n3. Map the components in the `widgetComponents` object\n  ``` javascript\n    export const widgetComponents = {\n    ...widgetComponents,\n    '@apostrophecms/layout': LayoutWidget,\n    '@apostrophecms/layout-column': LayoutColumnWidget\n  };\n  ```\nOnce you’ve added these mappings, restart your Apostrophe server and refresh the editor. The layout widget should now appear as an option in any area that includes @apostrophecms/layout.\n\n## Conclusion\n\nThis module provides a new way to use ApostropheCMS: as a back end\nfor modern front end development in Astro. But more than that, it\nprovides a future-proof bridge to many different front-end frameworks.\n\nAlso important, Apostrophe fully maintains the on-page, in-context editing\nexperience when integrated with Astro, going beyond \"side-by-side\"\nediting experiences to achieve integration close enough that we often\nhave to look at the address bar to know whether we are looking at\nAstro or Apostrophe.\n\nThat being said, this integration is also new, and we encourage you\nto share your feedback.\n\n## Acknowledgements\n\nDevelopment of this module began with Stéphane Maccari and Clément Ravier of\nMichelin. We are grateful for their generous support of ApostropheCMS.\n","readmeFilename":"README.md"}