{"_id":"cms","_rev":"28-1c0076df6b232f85b2c9822d2a6e7a87","name":"cms","dist-tags":{"latest":"1.8.2"},"versions":{"0.0.1-1":{"name":"cms","version":"0.0.1-1","keywords":["ghm","cms"],"author":{"url":"http://thomblake.com","name":"Thom Blake","email":"thethomblake@gmail.com"},"_id":"cms@0.0.1-1","maintainers":[{"name":"thomblake","email":"thethomblake@gmail.com"}],"bugs":{"url":"http://github.com/thomblake/cms/issues"},"dist":{"shasum":"cd886546c9f4b176eea662abdb76e8e038f0e536","tarball":"https://registry.npmjs.org/cms/-/cms-0.0.1-1.tgz","integrity":"sha512-Vavxhq6VK8/EBCp+XfH4AuhWESpVHQnaycriWL6PNjEYn8IVE8mplrL89SlTlGwMfM8zGMOEdsMDHYniTAjCNQ==","signatures":[{"sig":"MEYCIQDyBwp8F7I2D6UBldJRC4iLslAtP59Ibh5VjGFJSLm9xQIhAPyM5AnI9LPe1EbgGIM10P/OQ5V33pKXoOmJHbLCv/3T","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"engines":{"node":"*"},"scripts":{"start":"node server.js"},"_npmUser":{"name":"thomblake","email":"thethomblake@gmail.com"},"repository":{"url":"git://github.com/thomblake/cms.git","type":"git"},"_npmVersion":"1.0.105","description":"Lightweight content management system","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.11","dependencies":{"ghm":"*","yajet":"*","express":"*"},"_defaultsLoaded":true,"devDependencies":{},"_engineSupported":true},"1.0.0":{"name":"cms","version":"1.0.0","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.0.0","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"7f9602f408583e1974d7eccfc93ff7adce7f60af","tarball":"https://registry.npmjs.org/cms/-/cms-1.0.0.tgz","integrity":"sha512-3oTzBDVemUytoMYSVfl3sytbsua2V876MZ/ha0rVks0b79IyOOU9jAMHEIMZDCzDG7Nw+F/YjXLMRr783uRPfw==","signatures":[{"sig":"MEUCIQCo7EiABxEEUES0UBNSc5+w/A5Rkmcscggwbsnf7si6RwIgX7dZMWGBnY7qgpjS6VZ2imPQw7gAfasmtE4s4/XI7uU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"7f9602f408583e1974d7eccfc93ff7adce7f60af","gitHead":"31c120f7053acb77dd31e65dc36c5a4ada844a12","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.1","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^2.1.2","deepmerge":"^1.3.2","image-size":"^0.5.1","leprechaun":"0.0.2","lodash.template":"^4.4.0","meta-shortcodes":"^1.0.3","lodash.camelcase":"^4.3.0"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^6.10.3","eslint-config-airbnb":"^14.1.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.0.0.tgz_1491044832646_0.5682442365214229","host":"packages-18-east.internal.npmjs.com"}},"1.1.0":{"name":"cms","version":"1.1.0","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.1.0","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"84dcb36ee102a8771bd1ff5ef48aab954e8511cf","tarball":"https://registry.npmjs.org/cms/-/cms-1.1.0.tgz","integrity":"sha512-/00Y2/F5eLMNHTL3bcpESSxarP+EeRCShBxZEo9jAPmfOnC5OPLe9gQh4GC7PeRX1G3brdkBx6qfK2yER0PtRw==","signatures":[{"sig":"MEUCIGgZjLOkGhw5WUrnc/CjjlnGycbtOVnQsIicNeLuzPgVAiEA6DrEwtxQGxpR9Q8Rhj1lW/JKZ7eQH7i0EDXU12vGTfs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"84dcb36ee102a8771bd1ff5ef48aab954e8511cf","gitHead":"f0962aed0da7941b0b4971e6c41b32577ad90773","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.1","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^2.1.2","deepmerge":"^1.3.2","image-size":"^0.5.1","leprechaun":"0.0.2","lodash.template":"^4.4.0","meta-shortcodes":"^1.0.3","lodash.camelcase":"^4.3.0"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^6.10.3","eslint-config-airbnb":"^14.1.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.1.0.tgz_1491564937019_0.9785567543003708","host":"packages-18-east.internal.npmjs.com"}},"1.2.0":{"name":"cms","version":"1.2.0","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.2.0","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"7038141a4b70355207496578cce6b886a7fdd998","tarball":"https://registry.npmjs.org/cms/-/cms-1.2.0.tgz","integrity":"sha512-bmUk0+bn8zH9rXCzQcztVE/jMGBP/Cf8fQ3LU2lMFXW3rOzDch+xuquK/2qF8PI1QH2JzZhiOWzIxZ7haMrujQ==","signatures":[{"sig":"MEQCIGZtStzmIq43POXci3jkKkAc/h2RCakRyW9+YsQTxaLNAiA1oFKhmsihy7U4s9OWRlhqwJtIrmlC+gISywuqldxKkQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"7038141a4b70355207496578cce6b886a7fdd998","gitHead":"54ffab0387c8f08089deba9bf7a07bf3ba2163ce","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.1","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^2.1.2","deepmerge":"^1.3.2","image-size":"^0.5.1","leprechaun":"0.0.2","lodash.template":"^4.4.0","meta-shortcodes":"^1.0.3","lodash.camelcase":"^4.3.0"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^6.10.3","eslint-config-airbnb":"^14.1.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.2.0.tgz_1491573791528_0.5029246520716697","host":"packages-12-west.internal.npmjs.com"}},"1.2.1":{"name":"cms","version":"1.2.1","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.2.1","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"30f087be4db9a6cfc96a3efe629066246be55f76","tarball":"https://registry.npmjs.org/cms/-/cms-1.2.1.tgz","integrity":"sha512-it4uYHWD6TombwTw3/Np0YWXkTPx85iqEby1DZJJQ+6ZrfhX8ZHS5C1OJ/Tn5B72GfUeQd6mtMOqs2GcnX6gCw==","signatures":[{"sig":"MEQCIBIHefxEToPqlfMcgSInRNCwJdAQsRHfvUzoNsudcrcJAiBF3XWDSU8kbygiSW3h3BJ+03p7odQkRuhGk7t2i2ecug==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"30f087be4db9a6cfc96a3efe629066246be55f76","gitHead":"99d6821f77e594192ed0d8448ebf8f1535294cf3","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.1","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^2.1.2","deepmerge":"^1.3.2","image-size":"^0.5.1","leprechaun":"0.0.2","lodash.template":"^4.4.0","meta-shortcodes":"^1.0.3","lodash.camelcase":"^4.3.0"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^6.10.3","eslint-config-airbnb":"^14.1.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.2.1.tgz_1491646783462_0.3495847135782242","host":"packages-18-east.internal.npmjs.com"}},"1.2.2":{"name":"cms","version":"1.2.2","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.2.2","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"1ce2feb90f5a358917364a6f969871760a31d5d2","tarball":"https://registry.npmjs.org/cms/-/cms-1.2.2.tgz","integrity":"sha512-uaGeIsUBqo2bDXbX0d5hHvGpsgFhpWrIYbtygGn+RzCZYtc1JMDFUEWY7ZBrIfc0U4IITLybV7c2Go9pzfK9Yw==","signatures":[{"sig":"MEUCIQDMkx83YTn4+YHDsBIz3WEOkqKiRukTVItHzoiRxalXOwIgNJg5pdXKEZOKqOZkwHAUsvJwzDVzQ5Q0rQwryJLOLCQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"1ce2feb90f5a358917364a6f969871760a31d5d2","gitHead":"e0c8d2964e9d509ceee079ada98b03c84ec555de","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.1","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^2.1.2","deepmerge":"^1.3.2","image-size":"^0.5.1","leprechaun":"0.0.2","lodash.template":"^4.4.0","meta-shortcodes":"^1.0.3","lodash.camelcase":"^4.3.0"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^6.10.3","eslint-config-airbnb":"^14.1.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.2.2.tgz_1491653300226_0.9592211260460317","host":"packages-18-east.internal.npmjs.com"}},"1.2.3":{"name":"cms","version":"1.2.3","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.2.3","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"dcc1503e6c3028fb78973b0a38f5bd24ee01f7c9","tarball":"https://registry.npmjs.org/cms/-/cms-1.2.3.tgz","integrity":"sha512-IPJlrcxihqvX+LH+JRaekGOsHSklvTAAURcsKkJ52j3YdMYHRhOeiQ+SBGpYJqtK/54Lk1Um/+l4+OMRu53StQ==","signatures":[{"sig":"MEUCIH20L3B6NWGelBn97n1hLYnLtXR23Hd2BrtcphWIGx2AAiEAktk0MvZmGkCbZhb4yjzdGNSWzvWR9dbBcGR44EvryPU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"dcc1503e6c3028fb78973b0a38f5bd24ee01f7c9","gitHead":"58a730c2bae47f9ca08da0184d145ef9e8697d34","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.1","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^2.1.2","deepmerge":"^1.3.2","image-size":"^0.5.1","leprechaun":"0.0.2","lodash.template":"^4.4.0","meta-shortcodes":"^1.0.3","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^6.10.3","eslint-config-airbnb":"^14.1.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.2.3.tgz_1491689113350_0.9353341811802238","host":"packages-12-west.internal.npmjs.com"}},"1.2.4":{"name":"cms","version":"1.2.4","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.2.4","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"27b80da53b2c73e0bb60527c97ed6ef0224a3fc3","tarball":"https://registry.npmjs.org/cms/-/cms-1.2.4.tgz","integrity":"sha512-4JdG2AXQSpg7wVR2nLb1xy9XXKjMUHmy9IXE69p93QEAN5FOgAg+bzf5iRevcH1k7SM2XDVVAm4iOzbLZzSHww==","signatures":[{"sig":"MEUCIEryeWUCtm3qM1klYAv9QUzwmSTuEJr6IY+Bj4NK0kdRAiEAg+a1ZzsrCfh49yiP5E4YdkM00J+IHyswJIrg7mfqxQc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"27b80da53b2c73e0bb60527c97ed6ef0224a3fc3","gitHead":"21f44d8f8fe787ffccdcac352fd029b8f173d53d","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.1","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^2.1.2","deepmerge":"^1.3.2","image-size":"^0.5.1","leprechaun":"0.0.2","lodash.template":"^4.4.0","meta-shortcodes":"^1.0.3","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^6.10.3","eslint-config-airbnb":"^14.1.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.2.4.tgz_1491697036259_0.47408332978375256","host":"packages-18-east.internal.npmjs.com"}},"1.2.5":{"name":"cms","version":"1.2.5","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.2.5","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"05581f8f27ad98b4351adf17d466d69adfcf680a","tarball":"https://registry.npmjs.org/cms/-/cms-1.2.5.tgz","integrity":"sha512-iDjXyOBz11g73utszFtP30G01pXGgWYjG3JObOquTHXzek7YpwbHLbavY87qrpMJ0TK7AdElQH75kR+hcnSflQ==","signatures":[{"sig":"MEQCIF4qoZqXF66aqjj6wW4W2XUSzuRgM0670x1QFN3WpidiAiB9tsviLDBzL8XhQxRFj/HaP6RvxbKkWAE5u1ievOlpJQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"05581f8f27ad98b4351adf17d466d69adfcf680a","gitHead":"27d629106bd143d60a84383c59835d3c94237959","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.1","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^2.1.2","deepmerge":"^1.3.2","image-size":"^0.5.1","leprechaun":"0.0.2","lodash.template":"^4.4.0","meta-shortcodes":"^1.0.3","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^6.10.3","eslint-config-airbnb":"^14.1.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.2.5.tgz_1492892021426_0.046531557105481625","host":"packages-18-east.internal.npmjs.com"}},"1.3.0":{"name":"cms","version":"1.3.0","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.3.0","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"0497aceef3c040c09dbc2e2c3224bf35c0f1c4e4","tarball":"https://registry.npmjs.org/cms/-/cms-1.3.0.tgz","integrity":"sha512-VexGzdc5T9+qVCXqeCIFiQPyVr9SnELbNI8H7cWEiiCQHDKOuouEwbhOPvsuDMLZSHYqYVrei6e6Vvq4mxenew==","signatures":[{"sig":"MEYCIQDKS0Brdftbx2Ty4Wd3FgeD1xqEETRTDasMXnbR4Jz5DAIhALHgLFZiUioaxX7jE9IS3r3XodW0nCba8vVUp/jplT5i","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"0497aceef3c040c09dbc2e2c3224bf35c0f1c4e4","gitHead":"7d50d18973012ae9bcb716b152186d62120779bf","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.2","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^3.0.1","deepmerge":"^1.3.2","image-size":"^0.5.4","leprechaun":"0.0.2","shortcodes":"0.0.1","lodash.template":"^4.4.0","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^7.0.1","eslint-config-airbnb":"^15.0.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.3.0.tgz_1496088614237_0.08062855550087988","host":"s3://npm-registry-packages"}},"1.3.1":{"name":"cms","version":"1.3.1","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.3.1","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"a9e859e2a40071ba9fce78046835e5e9ffd20330","tarball":"https://registry.npmjs.org/cms/-/cms-1.3.1.tgz","integrity":"sha512-UQWfVhXE7P8V17vdwjRl99fguRKt3EUmOHOU1oxSukG6AhXTmRtd9ZWXwvpZvHJz97M9JTgqwDmUBkzkmsQU/g==","signatures":[{"sig":"MEQCIGZW/jTwyFKkrPGhg0nESJzOe3wyEYdEMa2s+aUhz92gAiBN8YgA+G1crWYzLbCRAxgKWfjYct5h7Lp4+eAIxv9wFw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"a9e859e2a40071ba9fce78046835e5e9ffd20330","gitHead":"245bcdcabb1b2b6838714621defe6a680e7c3200","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.2","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^3.0.1","deepmerge":"^1.3.2","image-size":"^0.5.4","leprechaun":"0.0.2","shortcodes":"0.0.1","lodash.template":"^4.4.0","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^7.0.1","eslint-config-airbnb":"^15.0.1","eslint-plugin-import":"^2.3.0","eslint-plugin-jsx-a11y":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.3.1.tgz_1496090543947_0.9098598835989833","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"cms","version":"1.4.0","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.4.0","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"da1edbdb2b879344cad3fa7d72101c2f10f6efc8","tarball":"https://registry.npmjs.org/cms/-/cms-1.4.0.tgz","integrity":"sha512-uBnQo/+sT8FsyL0UA3pGBP1BdiKmDWC6bJw3LrW1QyUsOe3FfbTvCT1ekZZQSBT95eEO95iW/4f3GVzV4k1UVQ==","signatures":[{"sig":"MEUCIEaG8NGOCCx+VPhl2sgTkh/jivL8yWcHyX4zB8XcmIPMAiEA5ZcYwvRPQ81kNa2RuQMBlv8fS/Xgc0iAXRur1+8rqco=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"da1edbdb2b879344cad3fa7d72101c2f10f6efc8","gitHead":"649e39d913181a4bb8eac4f8fc66ad33b14cd12f","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.2","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^3.0.1","deepmerge":"^1.4.4","image-size":"^0.5.5","leprechaun":"0.0.2","shortcodes":"0.0.1","lodash.template":"^4.4.0","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^7.1.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-import":"^2.6.0","eslint-plugin-jsx-a11y":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.4.0.tgz_1498953195798_0.6631196164526045","host":"s3://npm-registry-packages"}},"1.5.0":{"name":"cms","version":"1.5.0","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.5.0","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"6887957549090d81501239fddc9e315db816a6d7","tarball":"https://registry.npmjs.org/cms/-/cms-1.5.0.tgz","integrity":"sha512-EuCE8yvFjGlQhEmRYcRWuu+VGCLqCfTb8rfEvrRWURxmgIZtqg+Y1HDwd+gjtozP/XbEiSxUzW1gMskkMC181Q==","signatures":[{"sig":"MEUCIQDWGNGNf9DM0LNo8B3GZ3SHFx0ROgaqdCAAzTFZEc+L3AIgEAU49GuCKePeU42AY0YEeY3uNeM/2/cv0bE4AwzPriw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"6887957549090d81501239fddc9e315db816a6d7","gitHead":"011342b949e37eceb2008432934ed515f0f59149","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.2","mkdirp":"^0.5.1","rimraf":"^2.6.1","fs-extra":"^4.0.1","deepmerge":"^1.5.0","image-size":"^0.6.1","leprechaun":"0.0.2","shortcodes":"0.0.1","lodash.template":"^4.4.0","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":"true","devDependencies":{"eslint":"^3.19.0","eslint-plugin-react":"^7.1.0","eslint-config-airbnb":"^15.0.1","eslint-plugin-import":"^2.6.0","eslint-plugin-jsx-a11y":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.5.0.tgz_1501533271451_0.7267509626690298","host":"s3://npm-registry-packages"}},"1.6.0":{"name":"cms","version":"1.6.0","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.6.0","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"fc3ec9ab584adb237352c9d2a55ba82de66ae9cd","tarball":"https://registry.npmjs.org/cms/-/cms-1.6.0.tgz","integrity":"sha512-pfXZtW8HV0XTfXZHWJEmliX8yM6FK2TAa73aWEQ9/sQvufkUrfpCVIdSEaIFUis1RB/whxlk/pODc7BEvweXww==","signatures":[{"sig":"MEUCIHyRJ6xv4Fw5Iq9PYNiLuK53phU8ssCzwgx1Wr+yU0NgAiEA/fCIYvFyyK5CTi8DTt+gVnhsd2UEc2w2ftqvay4kP8g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"cms.js","_from":".","_shasum":"fc3ec9ab584adb237352c9d2a55ba82de66ae9cd","gitHead":"807de2a1d651711c473a4e34e6a835efd293a404","scripts":{"test":"eslint cms.js cli.js lib/*.js"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"3.10.10","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"6.9.5","dependencies":{"glob":"^7.1.2","mkdirp":"^0.5.1","rimraf":"^2.6.2","fs-extra":"^4.0.2","deepmerge":"^1.5.1","image-size":"^0.6.1","leprechaun":"0.0.2","shortcodes":"0.0.1","lodash.template":"^4.4.0","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":"true","devDependencies":{"eslint":"^4.7.0","eslint-plugin-import":"^2.7.0","eslint-config-airbnb-base":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cms-1.6.0.tgz_1505519948519_0.3750260304659605","host":"s3://npm-registry-packages"}},"1.7.0":{"name":"cms","version":"1.7.0","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.7.0","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"9b3f6f153e858676e815526359c494d9510379a5","tarball":"https://registry.npmjs.org/cms/-/cms-1.7.0.tgz","fileCount":13,"integrity":"sha512-w+X37xXQkYs9WUYObPzXt4mi4c9s1IwwxBRbhoocWhdQPIUroh9W2sS2vyRxsW8Sfb/jNA4S3tWf8r5U3aOGQg==","signatures":[{"sig":"MEUCIHAyasj4ypgjoJy0dUbWb+ZbPjrtGz45AKad+yxZP7DZAiEAn/QQUqcg9WIlZbYVPv6PkMHb9NcFKjybzaNohgFB+04=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdH3g2CRA9TVsSAnZWagAAPSAP/0phX5ZP/m38CZFHYSZM\n5URnK+h4iv3LElC5ju0THzAtAkTsa+shtBkuaBo2b6cp/fK0PznfqatumQwU\nGIRc6ncGSrcnB+TIPUWR8iOr8qlEEdNuifVDN8OIvqo5FSPgc+h8r+fwEtPO\ndolF+M1kDRFhOUU9r8g4IBi4cPc4988EwR5oyAE/ZBahsB6TrAsk7cUd9w06\nwa5L3MW3iLcsr/i9Z6sF8gSWZUdKZZobPsT+bgOtsDzlRCltIL087YDsmfVS\nlHxAW9M949Ieq04Cuwhedxt01Mrx0xWhBAYnZ+02uQ32a1r6a4OsdtRyzco9\nAu7252hbNoCLyn90bSsgv9Sux+l+dOAFpTcoLy0DAmTDprLHzpGnlgdvjo7h\n2CqdhoWGC8hXLM4zTpDBsp8qRqxCi1ZvA5zp+xRCc9ModbdwFx98fEJfhnU3\nTj0RxicEUFdFLduwfBVlNlG8lNzAPK8vzXPMo/B/J5GSox0XsyAhzsooEvHh\nlbETUnv3HZfZUU78ci1nPtmu9iyd3E8QnAZSvuQKLVHImgt0b22zRkvXW86s\neAwrWjr1szqnNFHWOq5dBFzDZHSWpADAp46CPbdBnr1RuVbX1KGPxg2sxZMz\nkcdHcl0wQUAZZGTqyEPsLAoZ3h/b662OTzPpgVggUBCmkrxpGZjuYbx1yQ9G\nE/Fm\r\n=0y3L\r\n-----END PGP SIGNATURE-----\r\n"},"main":"cms.js","gitHead":"e62b2080ac6105ee1e8f501b8dfca6e6819cae4c","scripts":{"test":"eslint '*.js' 'lib/*.js' 'tests/*.js' && jest --coverage"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"6.9.0","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"12.4.0","dependencies":{"glob":"^7.1.4","mkdirp":"^0.5.1","rimraf":"^2.6.3","fs-extra":"^8.1.0","image-size":"^0.7.4","leprechaun":"0.0.2","shortcodes":"0.0.1","lodash.merge":"^4.6.1","lodash.template":"^4.4.0","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","eslint":"^5.3.0","eslint-plugin-import":"^2.18.0","eslint-config-airbnb-base":"^13.2.0"},"_npmOperationalInternal":{"tmp":"tmp/cms_1.7.0_1562343477227_0.17589922431391236","host":"s3://npm-registry-packages"}},"1.7.1":{"name":"cms","version":"1.7.1","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.7.1","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"3430338526828d4a6c67eb4a341269f1630c1ce2","tarball":"https://registry.npmjs.org/cms/-/cms-1.7.1.tgz","fileCount":10,"integrity":"sha512-vdZU1kCriB/EZi3FWI9nVQHZ0xHNhdwSfhnRHFebGSOE6xuXVGJfmkY1cfcGzauZQ75mVNew3nvmKcj7D2zJRQ==","signatures":[{"sig":"MEUCIBDFopixXJ+am/htXcTMg+M8tdLyKuiv/DG6gYKI7LQ6AiEA4LIavaBZdrcuMvN4Uu1w8UfhpuffBUtjJqleYaRjWyo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32097,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdH6BPCRA9TVsSAnZWagAAhZwP/3dBp5o2+d1DfkOgj38B\nAoKLasRwIbW+qSi9TquByudMk/DVnqetnifweroEJZsGMl3coIrqJTR174Uy\n7Oyc6FqL+V3ITXymc2Vh9BvaT8eXWgav7RbOFPOIRCpFDBc2UtzsllXAsEfh\n9FuMcHuo0KB9kRxG0K0vkeZV8KWUuMtP4BzDIdYMZM3PU6Dat1zy95goaI0/\nYHxVxQzyqBWvr+esKVcDaP79rw8HQqC1qcE9NF3zNjkjRl+xQ4zYRnB66s6D\nYMyr1xqTL+hc8hkRGW096gMRbRecZySgR7hRJjtB6hUbFixXZj/S5zcPJov7\nIY7o0VMaPf1issD3lwvZpVsjvhHIWhjJnPcA1O5TNQwPKORoATzQ3mx7eaLc\njqflbMGL22SoEawLBp/CAlV71Hm35qGJyQCZTMo3gG0Qrd3SBG3aGMe4qjOl\napndzoquZeIFiZ9vmNRgbxtodqvlPQ4M4Oo6oqZBd6xELK6cXJtFZ7CpgV1d\nYeX2bVt6+3p+BThCLgzSIAFOkpK0dAnJiyzriOZO2NTff4EI+vFPwmwC1gmm\n956ZINR1/iIbA3EHmq4VH+NR3bbJAeR1VARNN5hVoF6lNb56ejEEONLF1+H9\nvc/YvXULjDKkHUrRnvaLLCsrbgECNX6kDnCwaZQrgPgn6fMzeuxbi5957gu4\naV1g\r\n=HX6T\r\n-----END PGP SIGNATURE-----\r\n"},"main":"cms.js","gitHead":"f2cf5a354ddf3c921c6df1177f1d7dcb194b021e","scripts":{"test":"eslint '*.js' 'lib/*.js' 'tests/*.js' && jest --coverage","coverage":"cat ./coverage/lcov.info | coveralls"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"6.9.0","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"12.4.0","dependencies":{"glob":"^7.1.4","mkdirp":"^0.5.1","rimraf":"^2.6.3","fs-extra":"^8.1.0","image-size":"^0.7.4","leprechaun":"0.0.2","shortcodes":"0.0.1","lodash.merge":"^4.6.1","lodash.template":"^4.4.0","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","eslint":"^5.3.0","coveralls":"^3.0.4","eslint-plugin-import":"^2.18.0","eslint-config-airbnb-base":"^13.2.0"},"_npmOperationalInternal":{"tmp":"tmp/cms_1.7.1_1562353742298_0.5530775429924406","host":"s3://npm-registry-packages"}},"1.8.0":{"name":"cms","version":"1.8.0","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.8.0","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"61ea9dd9b8bf226cbc1453a2dafce1da871e4bea","tarball":"https://registry.npmjs.org/cms/-/cms-1.8.0.tgz","fileCount":12,"integrity":"sha512-dL1UHAUT96RP4Mxp/AR1yDffvEWlhu7WPcGB34hyrzz33optxTNw9C3ZsBj4TvHsi2k9vvaMr3/B22b/RAnsrg==","signatures":[{"sig":"MEYCIQCFlx1XMkJ2Q1bRWzkHuDMFCxTvk8eqWIMd5R2IyuPJRQIhANtiOA641rlLb6nWzI1/FdyYNshEl/4vsbURmJ30LuOx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35210,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQzrxCRA9TVsSAnZWagAAUSIP/1uxrRDaFlonGRBE6ZlU\nPodHGrO+t6fFCrGO5dQUt1+GHuhV4gJg+ZvfIiWFVZOL5zyRRQmJf94bBdK7\n7UZb8mx/OHsuyTCaEoSyZCPQC3sAdphc76bjJ5TPZuOO4SbLXb58bPp/1ylW\nMKcX8d8EkaxculuTEd/aWv+7jYDszwSVWQO4/Qik39hmGQycuRdrjtkjpe93\nTtgBLkH9DbgT3Pho0QhxNeuXSTzRWdje6K7V7GsMm9W62mHSSrFQUSlCu2JP\na1hLulVTDtj5unVXxgGHgzhI1XMJXllgVAEhGMLmDJzaCggubOfuAkWtSDW+\n+zj4z5LKqFGNVd/bF3tYvID7xeSFN4WPNQ60uHEfr7gjTe4JxegzQCARCo1z\nXVshlzI0FYGrfWRIjFEVYLsXAhGzzvioqNmnojTS+Rm9IlfzQWIovskIThy4\nnU5xSWzULn1tKONNLakEsFF6YotF5ZnQpnemwEClTQN7FlegF4L3hZ2Qa6QD\nk8TfiI/hipNn/fseKhJAC1yXS7JPhuTPwZKQs49I4qAyCHISyVO4UtIamdec\nNouWbryzQCbPHnQIlaTmucQrtGSAB0tXgNrstuIoFisz818QOb9W7glc/r48\nEdfbI2JFkS4pE3TWzMN3xHe7TLvduImO156MkiJ93Z3X6HOm1iIUPXF0c/mf\nyzcN\r\n=phbo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"cms.js","gitHead":"fd3634ffff43b71ff135247dce2b601a95af37d1","scripts":{"test":"eslint '*.js' 'lib/*.js' 'tests/*.js' && jest --coverage","coverage":"cat ./coverage/lcov.info | coveralls"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"6.9.0","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"12.4.0","dependencies":{"glob":"^7.1.4","mkdirp":"^0.5.1","rimraf":"^2.6.3","fs-extra":"^8.1.0","image-size":"^0.7.4","leprechaun":"0.0.2","shortcodes":"0.0.1","lodash.merge":"^4.6.2","lodash.template":"^4.5.0","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","eslint":"^5.3.0","coveralls":"^3.0.5","eslint-plugin-import":"^2.18.2","eslint-config-airbnb-base":"^13.2.0"},"_npmOperationalInternal":{"tmp":"tmp/cms_1.8.0_1564687088627_0.6796333106828052","host":"s3://npm-registry-packages"}},"1.8.1":{"name":"cms","version":"1.8.1","keywords":["cms"],"author":{"url":"http://thomasrasshofer.com/","name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com"},"license":"MIT","_id":"cms@1.8.1","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"homepage":"https://github.com/rasshofer/cms#readme","bugs":{"url":"https://github.com/rasshofer/cms/issues"},"bin":{"cms":"cli.js"},"dist":{"shasum":"ddd9b580c6096bda5948c141d82fd1dd7c6b70c0","tarball":"https://registry.npmjs.org/cms/-/cms-1.8.1.tgz","fileCount":12,"integrity":"sha512-uPlkWl1hFJtDMh9uCnHnvfCxm8I0YezwXsJNFJnT9BP9wM4OTnB/1I3Qt7fa58lwMJQ6MOxt61Fxb3zQYPpEXA==","signatures":[{"sig":"MEUCIBhYpQpN9AgTN/o3VkAtkaGvOKbZR2YqXGp1jvenkzJWAiEA17o1Jsn8KlXfyLjbKHbFU6gBl139fV/uc+CNxr7yZsc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ0C4CRA9TVsSAnZWagAAWGcP+weYwlOhE/gXXXRdOIsv\nHwR/5YKSMG/3h47gSQqW+NXAndR6WJioMsxlL0tUMpRd/g2rrbded4h8rD+r\nxY6aOfGuw0OcFLk9fTwVnZcEe7kaoQy2RMVJZnnYVvEufRLSnoa/csZUQO7y\nWFOgbG3CwhxqzOFCEQteYhD4UdnjkmKU8ZiLh5CrSLjpe2ertiWI0gz0/khK\nD8Fg/oJk6Ex7ZMWcl6ghnWr8zZvlrC6qT9tHri0hZd29B2tzUwIXArADneh6\n/Yc/5uloFpp4yhat7atteItd9vG+DCPo0CjwvWkSmWQjeG0DOpJnljQZ/l+9\n/AtdaGFXqOiEysUBSBnI10ADOVTO3ihCvChFtIIKxUnBpBzGWneITPkDsUSf\n9uH2AwaAJp+uQxwb1EBxb8bpwh/4SWFCK+0Fs/wyqZn4zP4x9usQC3wZnBM2\nsVcEEHdYG7LYArQzXb6G2wtcj8DigqnBCmsR1uvIfgZtFMyw2bym4iDYSh03\nw2VbPEe+n8E/X/dIZhRXaUvGhDTxvb3zHXP1S9kbgMRXHQPkGp2DEMBCskxT\nimMP9V2qcZe7m1qiTXQfI+QXEWSkidJ5NDFW/UoAcGT+fmrMTsOpdgDRddQe\nsu+w8cuk74KCgA1DuWVQTLFY8tUtO+ut7ysf9nRLu9g23KgP4Yt1/qfWWaNu\nXAMw\r\n=ltex\r\n-----END PGP SIGNATURE-----\r\n"},"main":"cms.js","gitHead":"3ae9db9a0aaeda83580f216fefb773e47f6053a2","scripts":{"test":"eslint '*.js' 'lib/*.js' 'tests/*.js' && jest --coverage","coverage":"cat ./coverage/lcov.info | coveralls"},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"repository":{"url":"git://github.com/rasshofer/cms.git","type":"git"},"_npmVersion":"6.9.0","description":"An elegant and easy-to-use, file-based content management system for static pages","directories":{},"_nodeVersion":"12.4.0","dependencies":{"glob":"^7.1.4","mkdirp":"^0.5.1","rimraf":"^2.6.3","fs-extra":"^8.1.0","image-size":"^0.7.4","leprechaun":"0.0.2","shortcodes":"0.0.1","lodash.merge":"^4.6.2","lodash.template":"^4.5.0","lodash.camelcase":"^4.3.0","javascript-natural-sort":"^0.7.1"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","eslint":"^5.3.0","coveralls":"^3.0.5","eslint-plugin-import":"^2.18.2","eslint-config-airbnb-base":"^13.2.0"},"_npmOperationalInternal":{"tmp":"tmp/cms_1.8.1_1564688566918_0.15788640790257902","host":"s3://npm-registry-packages"}},"1.8.2":{"name":"cms","version":"1.8.2","description":"An elegant and easy-to-use, file-based content management system for static pages","author":{"name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com","url":"http://thomasrasshofer.com/"},"license":"MIT","repository":{"type":"git","url":"git://github.com/rasshofer/cms.git"},"bugs":{"url":"https://github.com/rasshofer/cms/issues"},"main":"cms.js","keywords":["cms"],"dependencies":{"fs-extra":"^8.1.0","glob":"^7.1.4","image-size":"^0.7.4","javascript-natural-sort":"^0.7.1","leprechaun":"0.0.2","lodash.camelcase":"^4.3.0","lodash.merge":"^4.6.2","lodash.template":"^4.5.0","mkdirp":"^0.5.1","rimraf":"^2.6.3","shortcodes":"0.0.1"},"devDependencies":{"coveralls":"^3.0.5","eslint":"^5.3.0","eslint-config-airbnb-base":"^13.2.0","eslint-plugin-import":"^2.18.2","jest":"^24.8.0"},"scripts":{"test":"eslint '*.js' 'lib/*.js' 'tests/*.js' && jest --coverage","coverage":"cat ./coverage/lcov.info | coveralls"},"preferGlobal":true,"bin":{"cms":"cli.js"},"_id":"cms@1.8.2","gitHead":"6cc3bdc58901ee499ceb043fa0ab479af3e71be5","homepage":"https://github.com/rasshofer/cms#readme","_nodeVersion":"20.18.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-kJtq/tpI63vSdgsuw6bPZWhHTzY6fDgzYB05QIQ2LVDbVynEPTN0a2rJyHnnV5CY6jKbnr+OWxd7SXpbU++w0Q==","shasum":"303e2bbe1be6e9f68ef42bdb628a8a35368b0e50","tarball":"https://registry.npmjs.org/cms/-/cms-1.8.2.tgz","fileCount":12,"unpackedSize":35334,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDcu2qv0hhGvtOAIbfZp2PzUU/4nd4tAxUI2Fc7BCQBjgIgM0Kw+XK75fAfPhoc0VonFdrWzGe49G/xgEo1WNqt2ZU="}]},"_npmUser":{"name":"rasshofer","email":"npm@thomasrasshofer.com"},"directories":{},"maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cms_1.8.2_1762709991562_0.4549318987706563"},"_hasShrinkwrap":false}},"time":{"created":"2011-11-15T20:36:36.830Z","modified":"2025-11-09T17:39:52.374Z","0.0.1-1":"2011-11-15T20:36:37.300Z","1.0.0":"2017-04-01T11:07:13.403Z","1.1.0":"2017-04-07T11:35:37.681Z","1.2.0":"2017-04-07T14:03:13.569Z","1.2.1":"2017-04-08T10:19:44.241Z","1.2.2":"2017-04-08T12:08:20.988Z","1.2.3":"2017-04-08T22:05:15.498Z","1.2.4":"2017-04-09T00:17:17.164Z","1.2.5":"2017-04-22T20:13:42.189Z","1.3.0":"2017-05-29T20:10:15.562Z","1.3.1":"2017-05-29T20:42:24.941Z","1.4.0":"2017-07-01T23:53:16.781Z","1.5.0":"2017-07-31T20:34:32.442Z","1.6.0":"2017-09-15T23:59:09.557Z","1.7.0":"2019-07-05T16:17:57.381Z","1.7.1":"2019-07-05T19:09:02.460Z","1.8.0":"2019-08-01T19:18:08.812Z","1.8.1":"2019-08-01T19:42:47.051Z","1.8.2":"2025-11-09T17:39:51.775Z"},"bugs":{"url":"https://github.com/rasshofer/cms/issues"},"author":{"name":"Thomas Rasshofer","email":"hello@thomasrasshofer.com","url":"http://thomasrasshofer.com/"},"license":"MIT","homepage":"https://github.com/rasshofer/cms#readme","keywords":["cms"],"repository":{"type":"git","url":"git://github.com/rasshofer/cms.git"},"description":"An elegant and easy-to-use, file-based content management system for static pages","maintainers":[{"name":"rasshofer","email":"npm@thomasrasshofer.com"}],"readme":"# CMS\n\n> An elegant and easy-to-use, file-based content management system for static pages\n\n[![Build Status](https://travis-ci.org/rasshofer/cms.svg)](https://travis-ci.org/rasshofer/cms)\n[![Coverage Status](https://coveralls.io/repos/github/rasshofer/cms/badge.svg)](https://coveralls.io/github/rasshofer/cms)\n[![Dependency Status](https://david-dm.org/rasshofer/cms/status.svg)](https://david-dm.org/rasshofer/cms)\n[![Dependency Status](https://david-dm.org/rasshofer/cms/dev-status.svg)](https://david-dm.org/rasshofer/cms)\n\n`cms` provides great flexibility without having to handle complicated installation steps or fighting with databases. It provides you all essentials, so you can focus on your contents. Regardless of whether you want to publish articles, galleries, simple pages, or big sized pages.\n\n## Usage\n\n```shell\nnpm install --save-dev cms\n```\n\n```js\nconst path = require('path');\nconst cms = require('cms');\n\ncms({\n  paths: {\n    output: path.resolve(__dirname, 'build')\n  }\n}).render().then(() => {\n  console.log('Done.');\n}).catch((error) => {\n  console.error(error);\n});\n```\n\n## Programmatic API\n\n### `cms(…).render()`\n\n> Renders the page(s) based on your configuration\n\nReturns: `Promise`\n\n### `cms(…).get()`\n\n> Returns the genesis page based on your configuration for further processing (e.g. headless use)\n\nReturns: `Page`\n\n### `cms(…).config()`\n\n> Returns the merged configuration (= defaults + your custom configuration)\n\nReturns: `Object`\n\n## CLI\n\n```shell\nnpm install -g cms\n```\n\n```shell\ncms\n```\n\n## Content and structure\n\nContent creation can be done very quick and easy. For each page, a folder containing a text file is placed within the `content` folder. While the folder names form the URLs, the name of the text file determines which template is used by the system. Using numbers as prefixes in front of the folder name, you’re able to order/sort the pages. In addition, those prefixes decide whether a page is 'visible' or 'invisible' – this may be used to control which sub pages are listed in menus, for example (see 'Visible and invisible pages' below for more details).\n\n## Managing content\n\nAll your site’s content is located in the `content` folder. The structure of your site will be identical to the structure inside this folder. So, if you have a `projects` folder inside your content folder, your site will automatically have a `http://example.com/projects` page.\n\nThe content text files are divisible by a YAML-ish syntax into any number of fields. Those fields allow you an unlimited use of the API in templates to display or to control the output of the content. The data structure is modifiable at any time. In addition, the flexibility of the data structure allows creating pages that require a variety of different content types and templates.\n\nYou can put as many subfolders inside of folders as you like to build the structure of your site.\n\n### Visible and invisible pages\n\nYou may recognize that some of the folders in the content folder have numbers prepended to their names…\n\n- `1-projects`\n- `2-about-us`\n- `3-contact`\n\n…while others don’t…\n\n- `imprint`\n- `error`\n\nThe idea behind this: folders with numbers are 'visible' pages, folders without numbers are 'invisible' pages. This may sound a bit weird at first glance, but the difference between those page types is pretty easy: only 'visible' pages will appear in your site’s menu later, while you can still link to 'invisible' pages (but they won’t appear in your menu).\n\nIn addition, those numbers in front of visible pages are used by `cms` to sort pages. This makes it easy to setup a site’s menu at the same time as setting up the general structure. All numbers are automatically stripped in URLs, thus the folder `1-projects` will nevertheless have the URL `http://example.com/projects` in the end.\n\n### Adding content\n\nEach folder inside the content folder has a text file in it, which holds all the content for that page. This file may be called `page.md` (or `post.txt` or …). Those text files are very easy to read/edit and still offer amazing possibilities to add content. Have a look at the following example (i.e. an example for a blog post).\n\n```md\nTitle: Hello world\n-----\nText: Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\n\nAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n-----\nDate: 2017-04-01T13:37:00\n```\n\nAs you can see, each field has a name (which needs to consist of characters from A-Z and 0-9 without whitespaces or other fancy characters as it will be casted to camelCase anyways) followed by its content. You have to add five dashes after each field and that’s it.\n\nTo structure things a bit more clear, you may want to use additional line breaks (any line breaks at the start and/or end will be trimmed automatically anyways).\n\n```md\nTitle: Hello world\n\n----\n\nText:\n\nLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\n\nAt vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n\n----\n\nDate: 2017-04-01T13:37:00\n```\n\nBy the way: if you want to do so, you can change the default file’s name as well as the separator characters (colon, five dashes) in your site’s configuration. See 'Configuration' below for details.\n\n### The right charset\n\nTo cut a long story short: You should always make sure to enter your text as UTF-8. This makes everything a lot easier and every decent text editor has support for UTF-8.\n\n## Managing media\n\n`cms` makes it super easy to add images, videos, sounds, or documents to your pages. Simply drop them into the folder for each page.\n\n<img src=\"https://cdn.rawgit.com/rasshofer/cms/master/docs/files.png\" alt=\"\" width=\"215\" height=\"247\">\n\n(You can sort files by prepending those numbers, just like pages.)\n\n### Adding meta data to your files and images\n\nJust like page content files, you may also create file content files, containing stuff like titles or captions. Simply add a text file for each file matching the full name of the file, followed by your content file extension (i.e. `test.jpg.md` for the file `test.jpg`). Inside those text files you can define your own fields and content, just like regular content files.\n\n```md\nTitle: Very nice image\n----\nCaption: This is a very nice image with loads of colors and stuff.\n```\n\n(`cms` will automatically fetch this data from the matching text files and add them to your file object, which you can access in the templates later.)\n\n### Anatomy of a page object\n\nThe following object dump represents the properties that are passed into the template engine next to globals and addons for every page.\n\n```js\nPage {\n  file: '/Users/johndoe/Repositories/my-fancy-website/content/home.md',\n  parent: undefined,\n  genesis: Page,\n  index: 0,\n  visible: false,\n  invisible: true,\n  identifier: '',\n  url: '/',\n  output: '/Users/johndoe/Repositories/my-fancy-website/build/index.html',\n  template: 'home',\n  children: [\n    Page,\n    Page,\n    …\n  ],\n  hasChildren: true,\n  files: [\n    File,\n    File,\n    …\n  ],\n  hasFiles: true,\n  images: [\n    Image,\n    Image,\n    …\n  ],\n  hasImages: true,\n  videos: [\n    File,\n    File,\n    …\n  ],\n  hasVideos: true,\n  sounds: [\n    File,\n    File,\n    …\n  ],\n  hasSounds: true,\n  documents: [\n    File,\n    File,\n    …\n  ],\n  hasDocuments: true,\n  title: 'Lorem ipsum dolor sit amet',\n  text: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.'\n}\n```\n\n`parent` may include a reference to the current page’s parent page. This may be useful for stuff like breadcrumb navigations. In case the page is a first level page, `parent` is simply `undefined`.\n\n`genesis` may include a reference to the root page. This may be useful for stuff like navigations (i.e. show all first level pages). In case the page is the first level page itself, `genesis` is simply a reference to `this` (= the page instance itself).\n\n`children` may contain any direct child pages of the current page. This may be useful for stuff like navigations. In case the page has no children, `children` will be an empty array.\n\n`images`, `videos`, `sounds`, and `documents` may contain any matching files of the current page. `files` contains all files combined. In case the page does not contain any files, these properties will be empty arrays.\n\n`title` and `text` are exemplary custom properties taken from the content file.\n\n## Virtual pages\n\nUsing virtual pages, you can combine the file-based architecture with content from any other data source like APIs or databases. Any page that doesn’t exist in the content folder is called a »virtual page«. You can add virtual pages to any existing page (even the genesis page) using the `addVirtualPage` method which accepts `properties` containing all necessarry page properties.\n\n### Properties\n\nThe following properties are expected by the system and can be extended using any amount of custom properties (e.g. `title`, `text`, …).\n\n#### `index` (Default: `0`)\n\nWhile number prefixes in front of folder names are used for ordering/sorting pages and defining their visibility for file-based pages, you may want to define the index explicitly for virtual pages.\n\n#### `identifier` (required)\n\nWhile the nested folder names of its text file determine the identifier of a page (and hence its URL), you have to define the full identifier explicitly for virtual pages.\n\n#### `template` (required)\n\nWhile the name of its text file determines which template is used by the system for file-based pages, you have to define the template name explicitly for virtual pages.\n\n### Example\n\n```js\nconst instance = cms({\n  …\n});\nconst genesis = instance.get();\nconst projects = genesis.findPageByUrl('/projects');\n\nconst virtualProject = projects.addVirtualPage({\n  identifier: 'projects/a',\n  template: 'project',\n  title: 'This is a virtual project',\n  text: 'Lorem ipsum',\n});\n\nconst somethingElse = virtualProject.addVirtualPage({\n  identifier: 'projects/a/a',\n  template: 'project',\n  title: 'This is a virtual project within another virtual project',\n  someWeirdFieldName: 'Test'\n});\n```\n\n## Helpers\n\n### `basepath(url)`\n\nCallback function which prepends the `base` option (see below) to the specified `url`. This may be useful if you’re planning to run your static site within a sub directory.\n\nExample:\n\n```html\n<link href=\"<%= basepath('/css/style.css') %>\" rel=\"stylesheet\">\n```\n\n### `has(key)`\n\nReturns a boolean indicating whether the current page has the specified property. This may be useful if you’re working with dynamic page properties.\n\nExample:\n\n```ejs\n<% if (has('description')) { %>\n<p><%= description %></p>\n<% } %>\n```\n\n### `get(key, defaultValue)`\n\nReturns the specified property (or the specified default value if it does not exist) for the current page. This may be useful if you’re working with dynamic page properties.\n\nExample:\n\n```ejs\n<% ['title', 'description'].forEach((prop) => { %>\n<p><%= get(prop, 'Something') %></p>\n<% }) %>\n```\n\n### `findPageByUrl(url, context)`\n\nSearches the page tree (starting at `context`, which equals the `genesis` page by default) recursively for the the page that has the URL `url`. This may be useful if you need to use properties of other pages located somewhere else in the page tree.\n\nExample:\n\n```ejs\n<% const contactPage = findPageByUrl('/contact') %>\n<a href=\"<%= contactPage.url %>\"><%= contactPage.title %></a>\n```\n\n## Shortcodes\n\nShortcodes let you do nifty things with very little effort by allowing you to create macros to be used in your page contents. A trivial shortcode example may look like this.\n\n```plain\n(youtube: jNQXAC9IVRw width: 480 height: 360)\n```\n\nThe example above shows a basic shortcode to embed a YouTube video. The actual embedment is done by an appropiate handler, called everytime the shortcode is used.\n\n```js\n{\n  youtube: (attrs) => {\n    return `<iframe src=\"https://www.youtube.com/embed/${attrs.youtube}\"${attrs.width ? ` width=\"${attrs.width}\"`: ''}${attrs.height ? ` height=\"${attrs.height}\"`: ''}></iframe>`;\n  }\n}\n```\n\nIn addition, the page object of the current page (which includes/invokes the shortcode) gets passed into the shortcode handler function as its (optional) second parameter. This allows shortcodes to interact with the page context.\n\n```js\n{\n  photo: (attrs, page) => {\n    const photo = page.images.find((item) => item.identifier === attrs.photo);\n\n    if (photo) {\n      return `\n        <figure>\n          <img src=\"${photo.url}\" alt=\"${photo.title}\">\n          ${photo.caption ? `<figcaption>${photo.caption}</figcaption>` : ''}\n        </figure>\n      `;  \n    }\n\n    return '';\n  }\n}\n```\n\n## Configuration\n\nCMS uses a [sane configuration by default](https://github.com/rasshofer/cms/blob/master/lib/defaults.js) that should cover most use cases. However, if you would like to adjust/extend the configuration, you can either create a file called `cms.js` within the root directory (where you’re running `cms` in) which exports the configuration object or pass the configuration object into your `cms` function call. In both cases, `cms` expects to receive a proper JavaScript object containing some of the following properties.\n\n### `template`\n\nFunction which is called using the parameters `file` (i.e. the path of the template) and `data` (i.e. locals) and which is supposed to return a Promise that resolves with the compiled template. This is the place where you would implement your preferred/custom template engine.\n\n```js\n(file, data) => Promise.resolve(template(fs.readFileSync(file, 'utf8'))(data))\n```\n\nYou may want to use [consolidate](https://www.npmjs.com/package/consolidate), a template engine consolidation library.\n\nDefault: A Promise-ified version of [Lodash’s template function](https://lodash.com/docs#template)\n\n### `permalink`\n\nCallback function which is called using the parameters `permalink` (i.e. the plain page permalink) and which is supposed to decorate and return the permalink for a page. This may be useful in case you’re not able to rewrite URLs.\n\nDefault:\n\n```js\n(permalink) => `${permalink}`\n```\n\nExample:\n\n```js\n(permalink) => `${permalink}/index.html`\n```\n\n### `base`\n\nPrefix that is prepended to all links (e.g. pages, files, …). This may be useful if you’re planning to run your static site within a sub directory.\n\nDefault: ∅\n\nExample: `/wiki`\n\n### `paths.content`\n\nPath to the directory containing all your content.\n\nDefault: `path.resolve(process.cwd(), 'content')`\n\n### `paths.templates`\n\nPath to the directory containing all your templates.\n\nDefault: `path.resolve(process.cwd(), 'templates')`\n\n### `paths.output`\n\nPath to the directory where `cms` is supposed to save the static build to.\n\nDefault: `path.resolve(process.cwd(), 'output')`\n\n### `separators.line`\n\nPattern that is used to separate lines/blocks within your content files.\n\nDefault: `-----`\n\n### `separators.values`\n\nPattern that is used to separate keys and values within your content files blocks.\n\nDefault: `:`\n\n### `extensions.content`\n\nArray of extensions your content files may use.\n\nDefault:\n\n```js\n[\n  'md'\n]\n```\n\n### `extensions.templates`\n\nArray of extensions your template files may use. In case you’re using a custom template engine, you most certainly will need to set the appropriate extensions here.\n\nDefault:\n\n```js\n[\n  'tpl'\n]\n```\n\n### `extensions.images`\n\nArray of extensions, your images within page content directories may use. These extensions are used to find matching images for each page (i.e. the `images` property).\n\nDefault:\n\n```js\n[\n  'jpg',\n  'jpeg',\n  'gif',\n  'png',\n  'webp'\n]\n```\n\n### `extensions.videos`\n\nArray of extensions, your videos within page content directories may use. These extensions are used to find matching videos for each page (i.e. the `videos` property).\n\nDefault:\n\n```js\n[\n  'mpg',\n  'mpeg',\n  'mp4',\n  'mov',\n  'avi',\n  'flv',\n  'ogv',\n  'webm'\n]\n```\n\n### `extensions.sounds`\n\nArray of extensions, your sounds within page content directories may use. These extensions are used to find matching sounds for each page (i.e. the `sounds` property).\n\nDefault:\n\n```js\n[\n  'mp3',\n  'wav',\n  'm4a',\n  'ogg',\n  'oga'\n]\n```\n\n### `extensions.documents`\n\nArray of extensions, your documents within page content directories may use. These extensions are used to find matching documents for each page (i.e. the `documents` property).\n\nDefault:\n\n```js\n[\n  'pdf',\n  'doc',\n  'xls',\n  'ppt',\n  'docx',\n  'xlsx',\n  'pptx'\n]\n```\n\n### `extensions.output`\n\nExtension of static output files.\n\nDefault: `html`\n\n### `globals`\n\nObject containing globals that will be passed into the `template` function next to the regular page data. This may be useful if you need to make data available to all pages. The object is deep-merged into the regular page data.\n\nDefault: `{}`\n\n### `addons`\n\nObject containing globals that will be passed into the `template` function next to the regular page data. This shall be used for all custom functions you would like to provide within your templates.\n\nDefault: `{}`\n\nExample:\n\n```js\n{\n  markdown: (input) => marked(input),\n  reverse: (input) => input.split('').reverse().join('')\n}\n```\n\n### `shortcodes`\n\nObject containing shortcode handlers that will be applied to page data. This shall be used to register any custom shortcode you would like to provide within your content.\n\nDefault: `{}`\n\nExample:\n\n```js\n{\n  youtube: (attrs) => {\n    return `<iframe src=\"https://www.youtube.com/embed/${attrs.youtube}\"${attrs.width ? ` width=\"${attrs.width}\"`: ''}${attrs.height ? ` height=\"${attrs.height}\"`: ''}></iframe>`;\n  }\n}\n```\n\n## Roadmap\n\nCurrently I’m working on the following for v2.\n\n- Full rewrite in TypeScript\n- Support for incremental builds (i.e. to speed up builds)\n\n## Changelog\n\n- 1.8.2\n  - Ensure proper sorting of virtual pages\n- 1.8.1\n  - Ensure proper sorting of virtual pages\n- 1.8.0\n  - Implement support for virtual pages\n  - Update dependencies\n- 1.7.1\n  - Collect test coverage\n  - Fix npm ignore list\n- 1.7.0\n  - Implement tests\n  - Implement new page methods `has` and `get`\n  - Update dependencies\n- 1.6.0\n  - Move programmatic rendering to `render` method and add `get`/`config` methods to allow headless use\n  - Enforce proper errors for promise rejections\n  - Update dependencies\n- 1.5.0\n  - Implement optional `context` parameter for shortcode helper\n  - Update dependencies\n- 1.4.0\n  - Hand over pages into shortcode handlers\n  - Update dependencies\n- 1.3.1\n  - Fix shortcode examples\n- 1.3.0\n  - Migrate to [shortcodes](https://www.npmjs.com/package/shortcodes) for shortcode parsing\n  - Update dependencies\n- 1.2.5\n  - Fix parsing of index prefixes to prevent misplaced digits within URLs\n- 1.2.4\n  - Fix parsing of index prefixes to prevent inaccurate digit replacements within URLs\n- 1.2.3\n  - Implement proper natural sorting of pages\n  - Implement more specific rejections in case a page is invalid (e.g. missing genesis page)\n- 1.2.2\n  - Apply `base` prefix and `permalink` callback to `findPageByUrl` helper queries automatically\n- 1.2.1\n  - Adjust `basepath` to only prepend the base path to an URL in case it isn’t there yet\n  - Fix typos in documentation\n- 1.2.0\n  - Implement new helper methods `basepath` and `findPageByUrl`\n- 1.1.0\n  - In case a page is the first level page itself, `genesis` is now a reference to `this` (= the page instance itself) instead of `undefined`\n- 1.0.0\n  - Initial version\n\n## Thanks\n\nSpecial thanks to [Thom Blake](http://thomblake.me/) for handing over the `cms` package name on npm to me. Please check out [thomblake/cms](https://github.com/thomblake/cms) in case you’re looking for the code of versions <1.0.0.\n\n## License\n\nCopyright (c) 2025 [Thomas Rasshofer](http://thomasrasshofer.com/)  \nLicensed under the MIT license.\n\nSee LICENSE for more info.\n","readmeFilename":"README.md","users":{"dev.weblab-technology":true}}