{"_id":"@apostrophecms/blog","_rev":"17-1bb746a0c86d364ba71d61619130e27c","name":"@apostrophecms/blog","dist-tags":{"latest":"1.0.6"},"versions":{"1.0.0":{"name":"@apostrophecms/blog","version":"1.0.0","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/blog@1.0.0","maintainers":[{"name":"mhiggins","email":"mhiggins.louis@gmail.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"}],"homepage":"https://github.com/apostrophecms/a3-blog#readme","bugs":{"url":"https://github.com/apostrophecms/a3-blog/issues"},"dist":{"shasum":"64aa2b415e51356acfaf89724f298e79774fa626","tarball":"https://registry.npmjs.org/@apostrophecms/blog/-/blog-1.0.0.tgz","fileCount":13,"integrity":"sha512-f9bOC7VCu0uetCZdyK/Jy0bKKnHALhWgRya6KCohT3f8hxmPnPj4y5y4pyGO5K3i33ryx9swIJGVJo86sMMuXg==","signatures":[{"sig":"MEUCIEONMLPttLNcwpDE0PyNku9IvZbaWw4aPGu0ekpN1M/DAiEA9TtJ4h+SVHCopiLHxwi5D7i70VIUjPHwbNBv3PsOJ/4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16538,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjOvopACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpRZQ//QVcPtSVYSHhXOgrxLngVVLxEtDX4qgMsTSZnsSdrH/QUBS23\r\nLP5zRBaclAKr2NE6PN+udu+gWDerjh19tL8o4mkErsKrDE99UxudCrQB45nV\r\nI/fxfpmyfhaevAsui3FL3uXrGiMgQ3YfbPXSqnC4BKHHuJtBrPbuEWCAviFb\r\njIv7+S1j6quzM/zWNP0J2rzOHaC7c0nN779+CR1PinnSAi7dBHWR3pFzSZPm\r\nwf+YwaboH53wNmR7w12fzhLkicAY24/HtCRj2d94fXyLjwWz49PhBzhPnoJr\r\nPs0vuktFza8dSvOyfmfPH9FD+wfSIhIOVsk02e3kqugOoLZhDC2oXSlqGicA\r\nmur3maOP5Yjhl7lB7hqH0swxrE6Bw0hVoiuCUI+SExlc0z2dPkvJE3h0EXjS\r\nqSir+cUPYeTaYSShINjc5pel9JZNMmaQhlm/jcAmIfKlpGF9bB9uYf7EUPVt\r\nxTrE6ZNekoZcM/Qg+aUzdkrMOVzY2LvAofCNGjIqJ0XtTMqOqQ/apzeD/hix\r\nJlQCLjvCZOJAfmXO1Q069FWkPhO0febbaYUvIQ6s63X7ucfWgloxZSj1byvp\r\nyAih+ug1gfirqfd5pAE3+rG/hCGyuSmphUB9ya5bxGFE5gf+SWM5Ji2g/kB+\r\nCOZYlJKb9dKU9cjKZhLA9bcgK58DAVhVlrI=\r\n=Nm20\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"25e16d54d340c3e4352f8edb6ce8f62ff4882a24","scripts":{"lint":"npm run eslint","test":"npm run lint","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"prettier":{"semi":true,"tabWidth":2,"singleQuote":true,"trailingComma":"none","bracketSpacing":true},"repository":{"url":"git+https://github.com/apostrophecms/a3-blog.git","type":"git"},"_npmVersion":"8.12.1","description":"Blog module for Apostrophe 3 websites","directories":{},"_nodeVersion":"16.15.0","dependencies":{"dayjs":"^1.10.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/blog_1.0.0_1664809513287_0.7824328017692075","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@apostrophecms/blog","version":"1.0.1","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/blog@1.0.1","maintainers":[{"name":"mhiggins","email":"mhiggins.louis@gmail.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"}],"homepage":"https://github.com/apostrophecms/a3-blog#readme","bugs":{"url":"https://github.com/apostrophecms/a3-blog/issues"},"dist":{"shasum":"19b22207fc9f691e95c11fd3cfbb59e52c2826c5","tarball":"https://registry.npmjs.org/@apostrophecms/blog/-/blog-1.0.1.tgz","fileCount":14,"integrity":"sha512-FrGeje2cJGacqgRSIyXolw2/HdP0oBCU3/dLQq+KQ0MGR961csL/6603OC0GBt/XEr5c4oGaIr/fdFXE2VTChw==","signatures":[{"sig":"MEQCIAVYPtOAuAAWyieIoqgx6yCDpecV7ovr9Kt3BYwBL+FdAiBWEIZqmr5dVmkfVK4ayHxKX2WqkQlXvnXeuURmNe9F0A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16907,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjhOaeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpspQ/8CCeKDWId3+jqfibCVL6y0cV6PLjWuJ+ioyfKWSv15MEA8mcM\r\nnZyC9sWfbKjazPrsFcA107HHZfcQ4Huk9urDBovBOMkcl2Vv41mtU7CJaZgE\r\n0SrMeOxdT5c3aSkX/kElIqzlJ1H/t/Rotp4zBKLxHCgwUvECKUMACSRpLZTV\r\ngGwnf/jMNxGaa5J9qj6JFrldJ+N3jDKJfxlmMRFoYPHAq0uB2ZgypMh2+6cj\r\nFtJJSWutqQNloQmJrxb+7jb5Sr1yfwB6xaSKUQ9m5siNvRqSShnyV+5/e/P2\r\n52cQ2GxMWCQRaxgcwGMx1WgzvARTDVnEMnfXlygMVEAc/DzRyDiR1gwGzrz9\r\noSCCrQakfm8BME38lHQILuffNHshOkLqFw3jMgepneHKeSKfFR+ZTyFIT3YD\r\nN5CuNhwFl6M25FhYJPs3QL/kiflkbJ1kcVDs/m0vvEp2fUgCN+o+ygQuI/JJ\r\n0f67YTwMfgwLQYbcn62me4YKZKqSUqQnPUJeHVXbjtmKwowjXyy2jD4bYUSg\r\nP7Ag/+JpPdltGUGGI9fB27yOOVyveNfrlNKPV3fP+D0oFXoNm4B+eQRdrkc3\r\nF5FmCgg7mHchoSE80HMb+BHVwO4f5T6VAakZzijIexwfb1tj3feT0WDYzXFU\r\n3crf0zQ+Z1CJVaIaRRi54SWgUqfJlllNpeU=\r\n=vKjI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"cc909d5001f33563bb8d5cbf56dadc948f57b090","scripts":{"lint":"npm run eslint","test":"npm run lint","eslint":"eslint ."},"_npmUser":{"name":"etlaurent","email":"etldev@tuta.io"},"prettier":{"semi":true,"tabWidth":2,"singleQuote":true,"trailingComma":"none","bracketSpacing":true},"repository":{"url":"git+https://github.com/apostrophecms/a3-blog.git","type":"git"},"_npmVersion":"8.19.2","description":"Blog module for Apostrophe 3 websites","directories":{},"_nodeVersion":"14.20.0","dependencies":{"dayjs":"^1.10.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/blog_1.0.1_1669654174099_0.36513491302694634","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@apostrophecms/blog","version":"1.0.2","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/blog@1.0.2","maintainers":[{"name":"falkodev","email":"anthony@apostrophecms.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"mhiggins","email":"mhiggins.louis@gmail.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"}],"homepage":"https://github.com/apostrophecms/blog#readme","bugs":{"url":"https://github.com/apostrophecms/blog/issues"},"dist":{"shasum":"f1901220ef2b92dc0e4de3e9d3ba59ad59b7c86a","tarball":"https://registry.npmjs.org/@apostrophecms/blog/-/blog-1.0.2.tgz","fileCount":13,"integrity":"sha512-M1V507SjksmcRsIpn3lIpmRgF2RYRsj2wpuVt3Sv3sNxy4BVxBjugW9YNV8tayTbeyl/1M0RIZFU439OLjchVg==","signatures":[{"sig":"MEUCIQCDAK9uLe1o/61SeTYX0MPplOiX9qrDljRSN7H3Q+DwLwIgJcE8grAouNMoLnC5gWb/fJIeV/gdLC2BM0HNorYc3Qs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16898,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj2nzZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoQzw//QozboeWtKyhk3FnRqD5YkBJ6krBMjVhDj9FLcMX46ztc5X+t\r\nXofnPcVNaKzKetSOPnb8zaoMJ+QtIEteIMfIYDcqi2ebobs94pghF2rNSTzd\r\n0TBv47r0v0NfjQlNMOOGzeWzUhveFiItUnLxvDkqjTgD/3gL9ICLMaIf4o7r\r\n8UWFwRmDNvETZw5wDNJQiBiBZCTfA+6Gc0Rs1YRt4yWBhnUgUwT8SzPXcEqw\r\ndXKmM7b7G0AKxZU0kJEilIF3JPVfTz0XcNPJApLRx2TQMmONtNJnv9/Dy9+y\r\nt0hrCYN2UYV7/4+5soN96J9AxuaARRiV2hzJBMdjNl84yMzyOKtnGzh6x8Yf\r\n6wcQs13G0RFu6uPb+rsuy/QA2n+9xEEAXZRcXs36Q0UzEXl6hfCZxNlx5Fvd\r\nRf4Fq1ARLKiJWd5+aFDCasq9VGgCHID0ACGCkzMp/fw3cC5BmJYkRGdvPgVy\r\nNyLoPfA/vUgG1tJz191PvdWSE4wBAyBiUJ/Ui1Hgy6gdHdksV4ALETkjrM7Q\r\nrIwtWVa3+rKOa/MnMZdjYyB3F0SeUEIo6obnqvs/wbD6TRJ0HeH6Zl32gi4N\r\nwn3e+nYdhm1GSD4fbv8yPVcVOV8yjTk6At1cLfGXO/Y6G5u5Yk50Xk98NPp8\r\nu7VLTew3CVWkStZnOQc7y2I9NkyxwwPt5Y4=\r\n=P8E+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"10035689a646597fa2bc793d3b135353d6a89c5c","scripts":{"lint":"npm run eslint","test":"npm run lint","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"prettier":{"semi":true,"tabWidth":2,"singleQuote":true,"trailingComma":"none","bracketSpacing":true},"repository":{"url":"git+https://github.com/apostrophecms/blog.git","type":"git"},"_npmVersion":"8.19.2","description":"Blog module for Apostrophe 3 websites","directories":{},"_nodeVersion":"16.15.0","dependencies":{"dayjs":"^1.10.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/blog_1.0.2_1675263192818_0.7725798709544545","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@apostrophecms/blog","version":"1.0.3","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/blog@1.0.3","maintainers":[{"name":"falkodev","email":"anthony@apostrophecms.com"},{"name":"triskuit","email":"tristan.krug@protonmail.com"},{"name":"mhiggins","email":"mhiggins.louis@gmail.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"}],"homepage":"https://github.com/apostrophecms/blog#readme","bugs":{"url":"https://github.com/apostrophecms/blog/issues"},"dist":{"shasum":"609a80d0df8b1661cea63bd48e0098f0e528fe51","tarball":"https://registry.npmjs.org/@apostrophecms/blog/-/blog-1.0.3.tgz","fileCount":13,"integrity":"sha512-ElZ5E1QNuNGXMSI+KB38aY1b7YSO10ihm3NzlhSWSC2LHrcLUH2q6Ds14IFhegOdIELyAdNoeJQpuuDhfdByvQ==","signatures":[{"sig":"MEYCIQDpCpXVbtkYagNCwlBtq8rVFYGgo26qFYHiN7XmClkc7gIhANZrmsNgnPxN9GL0zkVQW+AySD/3DaQHwYhAY1hAEKtJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17035,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7+SYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq/CQ/+Mt5JunHN7EDotv54OCln4iw6J951B/BmImAQ/zi9iTzOqTKd\r\nJf6fY2lgPnanYJUhGySlWoeVWGXS3P92TD/+LHFXCqwQzi9LJb/klIFIise6\r\nFFySYS3bwe06w5TMlWI+9CUia9eGrr9KnEQrWEH3Zk5PEOQul+Bf+TCq4BZf\r\nz83yaNnCoFEXGG8QDEvFZCR2B6lPATGcMbiRHB3BbEEGEDc+TRxe0hN+L3Si\r\nYpw4XjWuj5IMDdhtCxCJ/kNCK6+DhWNcbYHi6/UGJyUdJK0QuPDkaGZtIl6e\r\n9AKCQ0/gouaYRirQQDHtcAo97n4oGeQamttLrW2PDykHR+TY6+W1fj3Jpfxj\r\nqIE7RPrqGBaLeRqVmJI0XPhi3pNnNl4Kuf8Yi+Ry1n5BOU9Wk9pcvidrrfrX\r\naAxwHH2RKi4aFQERmIKEkxVTIVkzeo4XnYKSo/QHEFUhzCVT8E1zkQezb9rp\r\nANKY5Pjz4IoH0T5pd4PMmeLBmcwOoKPxFW82/LzV6+61Q8aNd7n/BuO+pEc/\r\nTT/bTURys8vLf3UD74peZb3PUvj7OnlvxLMWFelZxcFujgwBSN3jvZKj/4Nm\r\nqYW6PAayPHDsasm7riff5g0oE9ujkSK8PJjMWU5eg+Okygav3YA95Pzg3L0U\r\nJxCyPQlyFNPjogRQqKCEW09e8BkhPmxPIL8=\r\n=8WG3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"7997c65c20da7f88a79fe15b2b8a5fb50d6af423","scripts":{"lint":"npm run eslint","test":"npm run lint","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"prettier":{"semi":true,"tabWidth":2,"singleQuote":true,"trailingComma":"none","bracketSpacing":true},"repository":{"url":"git+https://github.com/apostrophecms/blog.git","type":"git"},"_npmVersion":"6.14.15","description":"Blog module for Apostrophe 3 websites","directories":{},"_nodeVersion":"12.22.6","dependencies":{"dayjs":"^1.10.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/blog_1.0.3_1676666008009_0.685763744851704","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@apostrophecms/blog","version":"1.0.4","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/blog@1.0.4","maintainers":[{"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"}],"homepage":"https://github.com/apostrophecms/blog#readme","bugs":{"url":"https://github.com/apostrophecms/blog/issues"},"dist":{"shasum":"b298893be89345f8f663bd38a6b63aba3021582b","tarball":"https://registry.npmjs.org/@apostrophecms/blog/-/blog-1.0.4.tgz","fileCount":13,"integrity":"sha512-I6hEArZ3fvkxN68GskUoKUb15Lfxnfe5GHjs+QJDyFznZNpx5B6weYfAolMhGxMcmz2Y7OI3Dwtd/lFZ1F82tA==","signatures":[{"sig":"MEQCIGyzfwCb0Ua51MZ3qkBXYlfUZRdCNi0+p3z5vF0H6J6CAiAoSh8m5OGrBDqIZ2l3XkyPaFLSg2wy+S735PTirymmPA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17055},"main":"index.js","gitHead":"bade33527188320e35faf790a179ef7bd6627d70","scripts":{"lint":"npm run eslint","test":"npm run lint","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"prettier":{"semi":true,"tabWidth":2,"singleQuote":true,"trailingComma":"none","bracketSpacing":true},"repository":{"url":"git+https://github.com/apostrophecms/blog.git","type":"git"},"_npmVersion":"9.5.0","description":"Blog module for Apostrophe 3 websites","directories":{},"_nodeVersion":"18.15.0","dependencies":{"dayjs":"^1.10.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/blog_1.0.4_1695836497385_0.9053250272397773","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@apostrophecms/blog","version":"1.0.5","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/blog@1.0.5","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"}],"homepage":"https://github.com/apostrophecms/blog#readme","bugs":{"url":"https://github.com/apostrophecms/blog/issues"},"dist":{"shasum":"58028c116683a4a3be5b0238723c180c0118d0d0","tarball":"https://registry.npmjs.org/@apostrophecms/blog/-/blog-1.0.5.tgz","fileCount":19,"integrity":"sha512-PNmP3ltie3qFv8EGlZP3iTPnvRbQERQMLifIyYBYgMg2GXd/X/av7nnEPnt6tdRvhc+DPS8Ach6d44hYVsKAPg==","signatures":[{"sig":"MEUCIQDOoNakFtH4KT/+s2DBIxStLx2jIGsFSn1aaKr91QICogIgZtm+5p+3gZdNCZnnn1uxEqIYwQJrPGbYMWIqBaRJNSI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19534},"main":"index.js","gitHead":"06986a80563001641dc9db8466b57e8860755767","scripts":{"lint":"npm run eslint","test":"npm run lint","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"prettier":{"semi":true,"tabWidth":2,"singleQuote":true,"trailingComma":"none","bracketSpacing":true},"repository":{"url":"git+https://github.com/apostrophecms/blog.git","type":"git"},"_npmVersion":"10.9.2","description":"Blog module for ApostropheCMS websites","directories":{},"_nodeVersion":"18.20.4","dependencies":{"dayjs":"^1.10.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/blog_1.0.5_1744825982594_0.7930448594677488","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@apostrophecms/blog","version":"1.0.6","author":{"name":"Apostrophe Technologies"},"license":"MIT","_id":"@apostrophecms/blog@1.0.6","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"}],"homepage":"https://github.com/apostrophecms/blog#readme","bugs":{"url":"https://github.com/apostrophecms/blog/issues"},"dist":{"shasum":"5ddea348e3f85f416c1070edd583ed3ef20428c0","tarball":"https://registry.npmjs.org/@apostrophecms/blog/-/blog-1.0.6.tgz","fileCount":19,"integrity":"sha512-OOlNC9vrmoaS20seeZ3AIejhSUYOXqqlph3Gi9EZqfG6NbubCa5eu9/nk+V2yvdHcfnAD2ZaW4LQMMOR4zKNoQ==","signatures":[{"sig":"MEYCIQCTKPsivV1vbt2QwtlO9qwL8K9Kg3/MSjWrMv6UvBmvswIhANv95CDt/mNAYcXQJizrVpcWQare50EjRIStnSnB9Eml","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20969},"main":"index.js","gitHead":"0aa9196f2b6cf08ef4736d038fd0317723b6c142","scripts":{"lint":"npm run eslint","test":"npm run lint","eslint":"eslint ."},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"prettier":{"semi":true,"tabWidth":2,"singleQuote":true,"trailingComma":"none","bracketSpacing":true},"repository":{"url":"git+https://github.com/apostrophecms/blog.git","type":"git"},"_npmVersion":"10.8.2","description":"Blog module for ApostropheCMS websites","directories":{},"_nodeVersion":"20.19.3","dependencies":{"dayjs":"^1.10.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^7.9.0","eslint-plugin-node":"^11.1.0","eslint-plugin-import":"^2.22.0","eslint-plugin-promise":"^4.2.1","eslint-config-standard":"^14.1.1","eslint-plugin-standard":"^4.0.1","eslint-config-apostrophe":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/blog_1.0.6_1756907480987_0.05823129598857402","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2022-10-03T15:05:13.203Z","modified":"2026-01-26T19:09:04.676Z","1.0.0":"2022-10-03T15:05:13.464Z","1.0.1":"2022-11-28T16:49:34.288Z","1.0.2":"2023-02-01T14:53:12.992Z","1.0.3":"2023-02-17T20:33:28.229Z","1.0.4":"2023-09-27T17:41:37.520Z","1.0.5":"2025-04-16T17:53:02.798Z","1.0.6":"2025-09-03T13:51:21.151Z"},"bugs":{"url":"https://github.com/apostrophecms/blog/issues"},"author":{"name":"Apostrophe Technologies"},"license":"MIT","homepage":"https://github.com/apostrophecms/blog#readme","repository":{"url":"git+https://github.com/apostrophecms/blog.git","type":"git"},"description":"Blog module for ApostropheCMS websites","maintainers":[{"email":"alex@apostrophecms.com","name":"alexgilbert"},{"email":"tom@apostrophecms.com","name":"boutell"},{"email":"stuart+npm@apostrophecms.com","name":"romanek"},{"email":"robert.means1969+apostrophecms@gmail.com","name":"bodonkey"}],"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>Apostrophe Blog</h1>\n  <p>\n    <a aria-label=\"Apostrophe logo\" href=\"https://docs.apostrophecms.org\">\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    <a aria-label=\"License\" href=\"https://github.com/apostrophecms/blog/blob/main/LICENSE.md\">\n      <img alt=\"\" src=\"https://img.shields.io/static/v1?style=for-the-badge&labelColor=000000&label=License&message=MIT&color=3DA639\">\n    </a>\n  </p>\n</div>\n\n**Add blog functionality to ApostropheCMS sites** with article management, date-based filtering, and multiple blog support. Provides both the blog piece type and page templates to get started quickly.\n\n## Features\n\n- **📝 Blog Article Management** - Complete CRUD interface for blog posts with publication dates\n- **🗓️ Date-based Filtering** - Built-in year/month/day query filters for archives and navigation\n- **🎨 Fully Customizable** — Override templates, add fields, and style it to match your brand\n- **🔗 Multiple Blog Types** - Extend to create different blog categories (news, updates, etc.)\n- **⏰ Publication Control** - Articles only appear when published date is in the past\n\n## Installation\n\nTo install the module, use the command line to run this command in an Apostrophe project's root directory:\n\n```bash\nnpm install @apostrophecms/blog\n```\n\n## Usage\n\nConfigure the blog modules in your `app.js` file:\n\n```javascript\nimport apostrophe from 'apostrophe';\n\nexport default apostrophe({\n  root: import.meta,\n  shortName: 'my-project',\n  bundles: [ '@apostrophecms/blog' ],\n  modules: {\n    '@apostrophecms/blog': {},\n    '@apostrophecms/blog-page': {}\n  }\n});\n```\n\n### Enable the page type\n\nAdd the blog page type to your page configuration:\n\n```javascript\n// modules/@apostrophecms/page/index.js\nexport default {\n  options: {\n    types: [\n      {\n        name: '@apostrophecms/home-page',\n        label: 'Home'\n      },\n      {\n        name: '@apostrophecms/blog-page',\n        label: 'Blog'\n      }\n    ]\n  }\n};\n```\n\n## Customizing Templates\n\nThe included templates (`index.html`, `show.html`, `filters.html`) are starting points that demonstrate the available data. Override them in your project to implement your own styling and layout:\n\n```\nmodules/\n├── @apostrophecms/\n│   └── blog-page/\n│       └── views/\n│           ├── index.html      # Blog listing page\n│           ├── show.html       # Individual blog post\n│           └── filters.html    # Date filtering controls\n```\n\n## Date-based Filtering\n\nThe blog includes built-in query filters for creating archive navigation and date-based URLs:\n\n| Filter | Format | Example URL |\n|--------|--------|-------------|\n| `year` | `YYYY` | `/blog?year=2024` |\n| `month` | `YYYY-MM` | `/blog?month=2024-03` |\n| `day` | `YYYY-MM-DD` | `/blog?day=2024-03-15` |\n\n### Publication Control\n\nBlog posts use the `publishedAt` field to control visibility. Only articles with publication dates in the past appear on the public site. Editors see all articles in the admin interface.\n\n> **Note:** This doesn't automatically publish draft changes on the publication date. For scheduled publishing of draft content, consider the [@apostrophecms/scheduled-publishing](https://apostrophecms.com/extensions/scheduled-publishing) module.\n\n## Multiple Blog Types\n\nSometimes a website needs multiple, distinct types of blog posts. If the blog posts types can be managed together, it might be easiest to [add a new field](https://docs.apostrophecms.org/guide/content-schema.html#using-existing-field-groups) and [query builder](https://docs.apostrophecms.org/reference/module-api/module-overview.html#queries-self-query) to customize blog views. But if the blog posts types should be managed completely separately, it may be better to create separate piece types for each.\n\n### Creating a Custom Blog Type\n\n```javascript\n// modules/news-blog/index.js - for news articles\nexport default {\n  extend: '@apostrophecms/blog',\n  options: {\n    label: 'News Article',\n    pluralLabel: 'News Articles'\n  },\n  fields: {\n    add: {\n      priority: {\n        type: 'select',\n        choices: [\n          { label: 'Standard', value: 'standard' },\n          { label: 'Breaking', value: 'breaking' },\n          { label: 'Featured', value: 'featured' }\n        ]\n      },\n      source: {\n        type: 'string',\n        label: 'News Source',\n        help: 'Original source of this news item'\n      }\n    },\n    group: {\n      basics: { fields: ['priority', 'source'] }\n    }\n  }\n};\n```\n\nEvery blog piece type needs a corresponding page type that extends `@apostrophecms/blog-page`:\n\n```javascript\n// modules/news-blog-page/index.js - page type for news articles\nexport default {\n  extend: '@apostrophecms/blog-page'\n};\n```\n\n### Custom Templates for Blog Types\n\nEach blog type can have its own templates. Create them in the corresponding page module:\n\n```\nmodules/\n├── news-blog-page/\n│   └── views/\n│       ├── index.html      # News listing page\n│       ├── show.html       # Individual news article\n│       └── filters.html    # Custom filters for news\n└── @apostrophecms/\n    └── blog-page/\n        └── views/\n            ├── index.html  # Default blog listing\n            └── show.html   # Default blog post\n```\n\nThis allows you to:\n- Style news articles differently from regular blog posts\n- Add custom filtering options specific to news content\n- Display different fields or layouts for each blog type\n- Create distinct navigation and user experiences\n\nThis approach works well when blog types have different:\n- **Content structures** - News articles vs. technical tutorials vs. company announcements\n- **Editorial workflows** - Different teams managing different content types\n- **Display requirements** - Unique styling, filtering, or organization needs\n- **URL patterns** - `/blog/`, `/news/`, `/updates/` with distinct navigation\n\n## Field Reference\n\nThe blog piece type includes these fields by default:\n\n- **Title** (`title`) - Article headline\n- **Slug** (`slug`) - URL-friendly identifier  \n- **Publication Date** (`publishedAt`) - Controls public visibility\n- **Content** (`body`) - Rich text content area\n- **Meta Description** (`metaDescription`) - SEO description\n- **Tags** (`tags`) - Taxonomy for categorization\n\n---\n*Built with ❤️ by the ApostropheCMS team.*\n---\n**Found this useful?** [Give us a star on GitHub](https://github.com/apostrophecms/blog) ⭐","readmeFilename":"README.md"}