{"_id":"@axel669/ipsen","_rev":"11-e8bfaa880d0a56a00ebd24d3f735a4f3","name":"@axel669/ipsen","dist-tags":{"latest":"0.4.1","beta":"0.4.0-beta.7"},"versions":{"0.1.0":{"name":"@axel669/ipsen","version":"0.1.0","description":"Library for generating documentation sites from markdown embedded in code comments","main":"lib/main.mjs","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"bin":{"ipsen":"lib/main.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"fast-glob":"^3.2.12","fs-jetpack":"^5.1.0"},"gitHead":"1989bbb2ebb7924fe2ee1039e4cc482a010913ed","_id":"@axel669/ipsen@0.1.0","_nodeVersion":"18.12.1","_npmVersion":"8.5.3","dist":{"integrity":"sha512-+tL1PvjPqn9QJFoPL8/+OWKXE85/MM78K/0/OInwiMaSHi37fJQ+c7m0IYFSVl0K/CfFjyQHnSuB3r744Nu1Xw==","shasum":"62b4c462ac1ee8279fc62b7f13f5ed5ea23cfd72","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.1.0.tgz","fileCount":10,"unpackedSize":122505,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDPbphccnHpLp+BLmJxRNGLVO6WAX3vLiUIz9rRUURHkAiEAuzj/bRokmjbz8k3RSybkU0z7RWuCPsqKS18minN49js="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj9t3WACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq2Lg/+MjdP8xDFsZapdQ6dmG0+k5GzPHDKyz8u7cvEp0F0LkZ6DFAC\r\nKJzOoWQcPtkFIZtJaWtCGP5rlD35IS3qTyVwaDluVWupQd4b088G0VnFfSL/\r\n7ILIiO9+wm3SEA5kMeXIFJu0dO4fATTaI20r1d/c5vkjDDvswJoz1DunHuWd\r\nMqK/eLaZxJg2aqlVrzMPywkRXI0983lqNz0+zNyyHdt9TsEBqDjeEp+thR5v\r\nu+wyPm2N8XrlHM6wvGF+0zz+ZCIgtBGneNxE7VKT84BjHXlbIW6OSjgRYa0I\r\nYlSU8r1lREDPPVAmX0pV+hwYLP9DcwbpP8bDJEjhfUJrCmWmq1hi47oxM5U0\r\nfShHyCZ/2bYPvKtk//zn+AIaDSPCX7Y3ETPDnYgDmsiXhGpUrQ5rfqrqojKg\r\n9QH6Y9fxQpFdvbGDSdh2wiSz3scbuF91aGiMpt9xttDSJZy+NPmOxfTKPfko\r\nme/ca5/lSW7TlXBtW+n+7fgNTTRHwUmWHuAOJ2FexZCUvrfdIu9OPdF+sCTj\r\nGUdBcMwnM6AYwDqe9IFHS2eWomducjDvEBW8/2Yg7nTOfTUr36sp91w8exhV\r\nigdYysWaWsvruCSj8J730N0n0sICC3xF4MNSODe+rSuFrhIfOjCUTAuh91s7\r\nCL8/QDRWnMAsLSRB94HQxk4SlFEres+kVCk=\r\n=svlY\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.1.0_1677123030464_0.18790996480133293"},"_hasShrinkwrap":false},"0.2.0":{"name":"@axel669/ipsen","version":"0.2.0","description":"Library for generating documentation sites from markdown embedded in code comments","main":"lib/main.mjs","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"bin":{"ipsen":"lib/main.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"@axel669/array-sort":"^0.1.0","fast-glob":"^3.2.12","fs-jetpack":"^5.1.0"},"gitHead":"551fe378752ea7f2dd476ffba3b8a081d6d824e5","_id":"@axel669/ipsen@0.2.0","_nodeVersion":"18.12.1","_npmVersion":"8.5.3","dist":{"integrity":"sha512-l5Pf3Ht5HGB0CBYoTKVDCfSaXCR2o23O178xdG1n9X+zX/PY2CoJxs7lY6VWViaAInN4NhQpwrKIyRa/ouJmow==","shasum":"6a3a41ed9a5843dbe6384381abc4f22886cf2940","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.2.0.tgz","fileCount":10,"unpackedSize":127167,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCe85myBbyZCpn94D7Jjg+6XBsfWF4Hg5Hf7yRr6dPZhgIgBGfgOU2Y+XBGte/EDDCkgXkoQi1dRz+ASd0HwEIoJv0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj+E1nACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrPzxAAoBMX/Zvvn4z9zQdQW2FnV81/jkhnPd1umJ6a6x9yQlqf94gH\r\n5MXr1X7dBT5mMTvP2Fz+8CVAziZ+R9NOMGsUa/kygmjlwItnZ4iadlfGaUWP\r\nXCi9KjYMMf/FKk5xQt7rcHC2qFlvLoCUggTxuOr8RZYghZvbj1fcQNLWHccu\r\nn5tEca5Vy4ULCkCqaFNeYyKN/+Fje/hnukKgXPGQILQlE9uvxZ1lZCgF5XP/\r\nevoa3bVgaONNjm8y2WVhFiUoaGztjjtRXFnS34NBjYkK1xdThz6ARHNVAYp+\r\nEYudpLgQgAqlayiQjUydjVpM6Lp5+0M4qN9k/y4SeXZrGlEjILwUBL8datjq\r\ntc+6MqD6yGvRkuuZToiJ4yyUmk7Xn1k2jJZYI4zxLdF0gTJXyzmz6tLnebwS\r\nw2avsA7T6DuxZYvK5ISacf7a/4HGhSjGY/jiy3Ct3KQCkLLt1MgpsYsX7pMf\r\nzoNQwwSi7Swg8J75yykBaSNNOPSXAWULlGLtjq86Wt5cD0frzwQJ+UYwo4w9\r\nS1QbyQ02H0XCm5InfpPYf0WAO3osTABk5NhBsN7gfEZ7gsx9WjDt1b2KJkPo\r\nfXo2rXDYIEg49JZIhErxKZeO1JKLLPdpTb2Lp4qeNOfz2LRqkwPbF+Bq1+JF\r\nXG6NCoM4xTc5hSHLJwd1wufkCF1IqQONgo0=\r\n=HZ6z\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.2.0_1677217127657_0.975993406850107"},"_hasShrinkwrap":false},"0.3.0":{"name":"@axel669/ipsen","version":"0.3.0","description":"Library for generating documentation sites from markdown embedded in code comments","main":"lib/main.mjs","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"bin":{"ipsen":"lib/main.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"@axel669/array-sort":"^0.1.0","fast-glob":"^3.2.12","fs-jetpack":"^5.1.0","marked":"^4.2.12"},"imports":{"#config":"./lib/config.mjs"},"gitHead":"881d71c40013b5766d38feb1813aa3f5ab11cc12","_id":"@axel669/ipsen@0.3.0","_nodeVersion":"18.12.1","_npmVersion":"8.5.3","dist":{"integrity":"sha512-9wcRV5CA09TKdLD5QiFzr2MEjmNwI6TuAGmEOEn7/Iqn9/4mPEyUVwsDnVKfST4LofPtBQQcEV5+P09oiG1MUg==","shasum":"cf0c8742ebb6137a5128caddbd01e574de29b774","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.3.0.tgz","fileCount":15,"unpackedSize":118094,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5ICF5ZWGQg18g5rXFCf+3N2jwH+09NVBKZAfaULmhoQIgPpQcqYmpMXGLEnuOs9nIyXN5cqRWP9gEii9Xv+ztBK4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkAX04ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqkFhAAjOEPlfTlE7r1bD6RC8/BcMZnyJgrTTh9orfJAYmrGzyaISe3\r\noUs8MeA7AB+CSVuLyDIkzilDCMpEro5es21P/o+yGYbFqtkKrRVP6X+ZgtbA\r\nJRAdLrIflEZ2ii6fm+GYwzP0fXd3L0VPYw5opEhJdWCvAFms060bkh070NN1\r\ntHweE5IkFb5lUNoqXtiyQnZNYp9EI7PBJlyGY6sVjk0Nrto9uxUMpDhOloRf\r\nNFASB3Rno8A7JV3DJPOPKMBSk3INJsBCaEbFvoEa+T4Hv9rldmrk6OLKWoxY\r\nwd8LpCmdfyR7jtPUaz4NgSxKyPV5wWuKcQTfKCbTw4VaCoL1SC+/VTM0ByaZ\r\n2MLLsMLBySfstNVL9QF0+S0BowPChl5hFm764nsnk4AVRonQTsWnYbktTASd\r\nAqjmto2nbKXViUHFL87jv8FSPz+Q3oPV+JapPlMUqBYai5f9VP+iiqU+V3JH\r\najwXdxK051/0Lb2xm5l3Gr67lKiDaGZ415nGby07mV+gn9Uz1TlfCC4snIHv\r\n57uz4e+J+5D30oM7Dd28OExmLClb/FGZkRbU6G8jcGAb82FQCokQ7+E7ziWx\r\n5fnTQbD0pJCnuF4Kp3X7+CyyRbrGLkqlSFHtOW1BC9S0fpNRfGWmnjOBgJaB\r\n6FvVC71kLwzkPU6WjpWAFgWdItA+fyZW15Q=\r\n=j44b\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.3.0_1677819192585_0.023407429824773063"},"_hasShrinkwrap":false},"0.3.1":{"name":"@axel669/ipsen","version":"0.3.1","description":"Library for generating documentation sites from markdown embedded in code comments","main":"lib/main.mjs","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"bin":{"ipsen":"lib/main.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"@axel669/array-sort":"^0.1.0","fast-glob":"^3.2.12","fs-jetpack":"^5.1.0","marked":"^4.2.12","yaml":"^2.2.1"},"imports":{"#config":"./lib/config.mjs"},"gitHead":"743ab4d5d8b6b12f6f21553441f6221ed0086c9e","_id":"@axel669/ipsen@0.3.1","_nodeVersion":"18.12.1","_npmVersion":"8.5.3","dist":{"integrity":"sha512-YXKE5gv/HWUIdNcb4Rd2zpziKXQy7FtN8A2cY7wzlnXQfl+g5qrLWlzVlYy4EMK5D6jYNB+8lNUVqsF3vYXkJQ==","shasum":"6f5302ed18157229c81bc7c20e10d0b4ad7873ba","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.3.1.tgz","fileCount":15,"unpackedSize":121333,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBXLMjJfRDVykGA3uui3T0wkF/yqL89h+QZlK+Sx6t9EAiEAypZPcYfNnpqt+2w6JUf1zE5YrEPJ34wPDqa15h9Dxbw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkKlBHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpsAxAAnmszehvscLp6Qn69pvVRiEeikQxODgl19AFUAZ8v2u9AVs/m\r\nuBjSCYXaaGkt/54efklgYsnmSn6fNedPKtx1hwUP2D0icR7Lz7dg0LTdFDSw\r\ngN3KitqjdMwf+bhGPPdYf9RbOnv1LTzg/p2cxyz+GHB+IRyPfm2IooA5ixw2\r\n/CKn76FQh7m+hpvpTgPVkX32RMiCALKFhdr0U+g1W8JMzJYzdxbRg00DUFOr\r\nl38Xtlp/WkUHPjBmTFnLYdxlp4TqeNCUZBWA3GJuDXjqXev51lLrGbM/VV1O\r\nH6cVB8oPkZHmGY1vqDnP8RxRyMTMgJROi6lpj2gsmbxoqjz+vhjYnk8Dx2kO\r\n9h43aKctXBGJyWyeoSVNQekG6Gz1r/EgGVTpnoowOkpyEQBWdUOmSBIOwTiO\r\n1ae/pCX1F7j0PQ9THGLmkzIBKqiFTQ1sXR2amShlOzga60wAYbwuVBgTmDmu\r\nqG1ufKVpEGJFmY4EAhjsEkrLG6Pom6zkB8PSHYZad6Z5AxFBZbUNIlgc7KbR\r\nct6fTmY0mM21qvVVylQG7hJrzYVboaLY84qKm0tFOn+LfxhGxy032ApyirWU\r\ng1+H5i0SzSlhkt02zbcIAijKLybjOWjZmmQcmFHIMHre87vXzy+sTsN8ZaP6\r\nv4t0wk5SkYTp03C6LRt5Z7V++K2VOKJvhvM=\r\n=o8f/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.3.1_1680494663272_0.6868765722334715"},"_hasShrinkwrap":false},"0.4.0":{"name":"@axel669/ipsen","version":"0.4.0","description":"A static site generator that aims to be simple and powerful.","main":"lib/main.mjs","type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"bin":{"ipsen":"lib/cli.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"fs-jetpack":"^5.1.0","js-yaml":"^4.1.0","marked":"^9.0.2","xml-beautifier":"^0.5.0","yaml-front-matter":"^4.1.1"},"readme":"# Ipsen\n\nA static site generator that aims to be simple and powerful.\n\n> ⚠ this documentation is very limited while more testing is going on.\n> More comprehensive documentation will be available when Ipsen is closer to\n> a production release.\n\n## Installation\n```bash\npnpm add @axel669/ipsen\n```\n\n## Usage\nIpsen uses a `.ipsen` folder in project root to determine configuration and\nother things (see below).\n```bash\nnpx ipsen\n```\nThat's really it. All the configuration and custom files are read from the\n`.ipsen` folder.\n\n## .ipsen Folder\nThe `config.yml` file is the only file required by ipsen. The other folders are\noptional, and only used when rendering from custom templates/parsers.\n\nIf the data folder is present, the files will be loaded from it using the\nparsers configured in the config and loaded into `$.data[<filename>]` for the\ntemplates to use.\n```\nproject\n    .ipsen\n        config.yml\n        parser\n        static\n        template\n            page.html\n            vars.json\n            static\n            <other template files>\n    <project files>\n```\n\n### config.yml\n```yml\n# The source markdown file that lists the contents of the site.\nsource: site.md\n# The folder to save the generated files into.\ndest: site\n# Custom parsers for loading data out of files and into marked areas to make api\n# documentation easier, and allowing the api docs to stay in the code files.\n# Parsers starting with \"@\" will be loaded from the parsers available in Ipsen.\n# Each extension needs to be configured individually even if they use the same\n# parser.\nparsers:\n  mjs: \"@js\"\n  js: \"@js\"\n  cjs: \"@js\"\n  py: \"@py\"\n  yaml: \"@yaml\"\n  json: \"@json\"\n# The name of the template to use for generating the site. Names starting with\n# \"@\" will resolve to the templates provided by ipsen, any other name will be\n# resolved in the .ipsen/template folder in the project.\n# The template will always load the page.html file from the template folder and\n# use it to render the pages of the site.\ntemplate: \"@basic\"\n# extra options available to the template as $.options. Any type of value allowed.\noptions:\n  theme: dark\n```\n\n> The `.ipsen` folder and the `source`/`dest` options of the config are relative\n> to the cwd where Ipsen is being run.\n\n### site.md\nThe `site.md` file should list the contents of the site that need to be rendered\nand will also serve to build the sidebar menu for site navigation. Links will\ndetermine which files are rendered (and their titles), and text can be used to\nname any section of files in the list without rendering content at that point.\n\nOnly one link should be outside of a list, and it will be used as the index\nfile for the site. All files except the index will generate an html file of the\nsame name with the extension changed. The index file will always be saved as\n`index.html` to allow standard website configurations to play nice with the\nrendered content.\n\n```md\n[Home](readme.md)\n\n- Python Stuff\n    - [Test](py-stuff/test.md)\n```\n\n> Currently Ipsen assumes the static site will be at the root of the domain\n> it's hosted at, so all paths are `/<file>` within the html to make sure that\n> any file can link to any othe file without needing to calculate the relative\n> path between every file and every other file in the output.\n","readmeFilename":"readme.md","gitHead":"d9098c813b6081d340b1eb3673b0cf3fbd835199","_id":"@axel669/ipsen@0.4.0","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-DCE7O8vjd7vtnu+yzLsdOYsaYfRkLUqL1QbD4OOhBXr//NFAFndB16ipZbeIG1sLtrtZgT3I7SlVqYPMIQN91g==","shasum":"7b9a82710cabde0c48a15ee09da16329051ef766","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.4.0.tgz","fileCount":53,"unpackedSize":75651,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE3zKPj24K2wnHTmN6YeknF+yJ5+z0v4idMHoSp+mJloAiEA1sRtHaBGoB/uZUWgJY0fbHMxwakiDOj1Fwv1+Fewt/M="}]},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.4.0_1697243725726_0.2568456387581399"},"_hasShrinkwrap":false},"0.4.0-beta.1":{"name":"@axel669/ipsen","version":"0.4.0-beta.1","description":"A static site generator that aims to be simple and powerful.","main":"lib/main.mjs","type":"module","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"bin":{"ipsen":"lib/cli.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"fs-jetpack":"^5.1.0","js-yaml":"^4.1.0","marked":"^9.0.2","xml-beautifier":"^0.5.0","yaml-front-matter":"^4.1.1"},"readme":"# Ipsen\n\nA static site generator that aims to be simple and powerful.\n\n> ⚠ this documentation is very limited while more testing is going on.\n> More comprehensive documentation will be available when Ipsen is closer to\n> a production release.\n\n## Installation\n```bash\npnpm add @axel669/ipsen\n```\n\n## Usage\nIpsen uses a `.ipsen` folder in project root to determine configuration and\nother things (see below).\n```bash\nnpx ipsen\n```\nThat's really it. All the configuration and custom files are read from the\n`.ipsen` folder.\n\n## .ipsen Folder\nThe `config.yml` file is the only file required by ipsen. The other folders are\noptional, and only used when rendering from custom templates/parsers.\n\nIf the data folder is present, the files will be loaded from it using the\nparsers configured in the config and loaded into `$.data[<filename>]` for the\ntemplates to use.\n```\nproject\n    .ipsen\n        config.yml\n        parser\n        static\n        template\n            page.html\n            vars.json\n            static\n            <other template files>\n    <project files>\n```\n\n### config.yml\n```yml\n# The source markdown file that lists the contents of the site.\nsource: site.md\n# The folder to save the generated files into.\ndest: site\n# Custom parsers for loading data out of files and into marked areas to make api\n# documentation easier, and allowing the api docs to stay in the code files.\n# Parsers starting with \"@\" will be loaded from the parsers available in Ipsen.\n# Each extension needs to be configured individually even if they use the same\n# parser.\nparsers:\n  mjs: \"@js\"\n  js: \"@js\"\n  cjs: \"@js\"\n  py: \"@py\"\n  yaml: \"@yaml\"\n  json: \"@json\"\n# The name of the template to use for generating the site. Names starting with\n# \"@\" will resolve to the templates provided by ipsen, any other name will be\n# resolved in the .ipsen/template folder in the project.\n# The template will always load the page.html file from the template folder and\n# use it to render the pages of the site.\ntemplate: \"@basic\"\n# extra options available to the template as $.options. Any type of value allowed.\noptions:\n  theme: dark\n```\n\n> The `.ipsen` folder and the `source`/`dest` options of the config are relative\n> to the cwd where Ipsen is being run.\n\n### site.md\nThe `site.md` file should list the contents of the site that need to be rendered\nand will also serve to build the sidebar menu for site navigation. Links will\ndetermine which files are rendered (and their titles), and text can be used to\nname any section of files in the list without rendering content at that point.\n\nOnly one link should be outside of a list, and it will be used as the index\nfile for the site. All files except the index will generate an html file of the\nsame name with the extension changed. The index file will always be saved as\n`index.html` to allow standard website configurations to play nice with the\nrendered content.\n\n```md\n[Home](readme.md)\n\n- Python Stuff\n    - [Test](py-stuff/test.md)\n```\n\n> Currently Ipsen assumes the static site will be at the root of the domain\n> it's hosted at, so all paths are `/<file>` within the html to make sure that\n> any file can link to any othe file without needing to calculate the relative\n> path between every file and every other file in the output.\n","readmeFilename":"readme.md","gitHead":"d9098c813b6081d340b1eb3673b0cf3fbd835199","_id":"@axel669/ipsen@0.4.0-beta.1","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-+u/Ej/2B4RHaG8DWL3QUPNtgNI8uG4q3Vi/t0gp9SRx0lioWM9gBsBQ+3x+tzdOKr43U/eZ+rUMEauNJq/egLw==","shasum":"e8da554bd742cfc966d742afce4d2db504f590cd","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.4.0-beta.1.tgz","fileCount":45,"unpackedSize":66561,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDt8rdV2Y5qzzc4lkKAb//LLHrBUTB/nuLGioTsBN0J7gIgcs2wlDc91tQ9uZCn3/qBffp1BEwNzgGPKtw2F8uyOmk="}]},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.4.0-beta.1_1697598615644_0.9605108492040908"},"_hasShrinkwrap":false},"0.4.0-beta.2":{"name":"@axel669/ipsen","version":"0.4.0-beta.2","description":"A static site generator that aims to be simple and powerful.","main":"lib/main.mjs","type":"module","scripts":{},"bin":{"ipsen":"lib/cli.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"fs-jetpack":"^5.1.0","js-yaml":"^4.1.0","marked":"^9.0.2","prismjs":"^1.29.0","xml-beautifier":"^0.5.0","yaml-front-matter":"^4.1.1"},"readme":"# Ipsen\n\nA static site generator that aims to be simple and powerful.\n\n> ⚠ this documentation is very limited while more testing is going on.\n> More comprehensive documentation will be available when Ipsen is closer to\n> a production release.\n\n## Installation\n```bash\npnpm add @axel669/ipsen\n```\n\n## Usage\nIpsen uses a `.ipsen` folder in project root to determine configuration and\nother things (see below).\n```bash\nnpx ipsen\n```\nOr in `package.json`\n```json\n{\n  ...,\n  \"scripts\": {\n    \"render-docs\": \"ipsen\"\n  },\n  ...\n}\n```\nThat's really it. All the configuration and custom files are read from the\n`.ipsen` folder.\n\n## .ipsen Folder\nThe `config.yml` file is the only file required by ipsen. The other folders are\noptional, and only used when rendering from custom templates/parsers.\n\nIf the data folder is present, the files will be loaded from it using the\nparsers configured in the config and loaded into `$.data[<filename>]` for the\ntemplates to use.\n```\nproject\n    .ipsen\n        config.yml\n        parser\n        static\n        template\n            code.html\n            page.html\n            vars.json\n            static\n            &lt;other template files>\n    &lt;project files>\n```\n\n### config.yml\n```yml\n# The source markdown file that lists the contents of the site.\nsource: site.md\n# The folder to save the generated files into.\ndest: site\n# Custom parsers for loading data out of files and into marked areas to make api\n# documentation easier, and allowing the api docs to stay in the code files.\n# Parsers starting with \"@\" will be loaded from the parsers available in Ipsen.\n# Each extension needs to be configured individually even if they use the same\n# parser.\nparsers:\n  mjs: \"@js\"\n  js: \"@js\"\n  cjs: \"@js\"\n  py: \"@py\"\n  yaml: \"@yaml\"\n  json: \"@json\"\n# The name of the template to use for generating the site. Names starting with\n# \"@\" will resolve to the templates provided by ipsen, any other name will be\n# resolved in the .ipsen/template folder in the project.\n# The template will always load the page.html file from the template folder and\n# use it to render the pages of the site.\ntemplate: \"@basic\"\n# extra options available to the template as $.options. Any type of value allowed.\noptions:\n  theme: dark\n```\n\n> The `.ipsen` folder and the `source`/`dest` options of the config are relative\n> to the cwd where Ipsen is being run.\n\n### source (site.md)\nThe source file should be a markdown file and list the contents of the site that\nneed to be rendered. It will also serve to build the sidebar menu for site\nnavigation. Links will determine which files are rendered (and their titles),\nand text can be used to name any section of files in the list without rendering\ncontent at that point.\n\nOnly one link should be outside of a list, and it will be used as the index\nfile for the site. All files except the index will generate an html file of the\nsame name with the extension changed. The index file will always be saved as\n`index.html` to allow standard website configurations to play nice with the\nrendered content.\n\nThe link targets can optionally have a hash that says which file within the\ntemplate should be used to render the page, defaults to `page.html`.\n\n```md\n[Home](readme.md)\n\n- Python Stuff\n    - [Test](py-stuff/test.md#thing.html)\n```\n\n> Currently Ipsen assumes the static site will be at the root of the domain\n> it's hosted at, so all paths are `/<file>` within the html to make sure that\n> any file can link to any othe file without needing to calculate the relative\n> path between every file and every other file in the output.\n\n### Parsers\nNeed something here for docs.\n\n### Static Folder\nIf there is a static folder in the `.ipsen` folder, the files will be\ncopied to the output directory when the site is rendered.\n\n## Template Folder\nThe template folder within the `.ipsen` folder can have a number of files that\nwill be used by the Burger Template engine within ipsen to generate the pages\nfor the static site. Ipsen also has a `@basic` template available that can be\nused, or copied and modified for further customization.\n\n### page.html\nThe default file that ipsen will look for when rendering a page.\n\n### code.html\nWhen a code block is rendered, Ipsen will look for this file in the template\nand use it to render the syntax highlighted html for the code. The basic\ntemplate uses this file to add a copy button to quickly copy code. If this\nfile is not found, Ipsen will just render the highlighted code with no extra\ncontrols or other modifications.\n\n### vars.json\nA json file that can have any number of variables available to templates as\n`$.vars`. Ipsen does not read the contents of this file for anything it does on\nits own, so it can have any format the template wants.\n","readmeFilename":"readme.md","gitHead":"a8a106ab4939c937e225ff18987d889eb472d843","_id":"@axel669/ipsen@0.4.0-beta.2","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-nBnfOvoKgj6CzEbkUwpXGPnGtPGo4webCnflHtwZhb/eSJVhmNlNH2c7gPHNNfcFjoeC5wYoIsjWVSHTE+34Sg==","shasum":"d438d77d3a74de5b5eb4bd4a220630b47001503c","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.4.0-beta.2.tgz","fileCount":47,"unpackedSize":130651,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEyihJNPrKxoa4OqcdxT0SJEZ9DcIrlSrThpo3htbpqSAiBH8LeArQ4Sypv3sRtNI1D/8ZdYqpaneOr8rCG0TcpsZQ=="}]},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.4.0-beta.2_1698291582937_0.7291807135313386"},"_hasShrinkwrap":false},"0.4.0-beta.3":{"name":"@axel669/ipsen","version":"0.4.0-beta.3","description":"A static site generator that aims to be simple and powerful.","main":"lib/main.mjs","type":"module","scripts":{},"bin":{"ipsen":"lib/cli.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"fs-jetpack":"^5.1.0","js-yaml":"^4.1.0","marked":"^9.0.2","prismjs":"^1.29.0","xml-beautifier":"^0.5.0","yaml-front-matter":"^4.1.1"},"readme":"# Ipsen\n\nA static site generator that aims to be simple and powerful.\n\n> ⚠ this documentation is very limited while more testing is going on.\n> More comprehensive documentation will be available when Ipsen is closer to\n> a production release.\n\n## Installation\n```bash\npnpm add @axel669/ipsen\n```\n\n## Usage\nIpsen uses a `.ipsen` folder in project root to determine configuration and\nother things (see below).\n```bash\nnpx ipsen\n```\nOr in `package.json`\n```json\n{\n  ...,\n  \"scripts\": {\n    \"render-docs\": \"ipsen\"\n  },\n  ...\n}\n```\nThat's really it. All the configuration and custom files are read from the\n`.ipsen` folder.\n\n## .ipsen Folder\nThe `config.yml` file is the only file required by ipsen. The other folders are\noptional, and only used when rendering from custom templates/parsers.\n\nIf the data folder is present, the files will be loaded from it using the\nparsers configured in the config and loaded into `$.data[<filename>]` for the\ntemplates to use.\n```\nproject\n    .ipsen\n        config.yml\n        parser\n        static\n        template\n            code.html\n            page.html\n            vars.json\n            static\n            &lt;other template files>\n    &lt;project files>\n```\n\n### config.yml\n```yml\n# The source markdown file that lists the contents of the site.\nsource: site.md\n# The folder to save the generated files into.\ndest: site\n# Custom parsers for loading data out of files and into marked areas to make api\n# documentation easier, and allowing the api docs to stay in the code files.\n# Parsers starting with \"@\" will be loaded from the parsers available in Ipsen.\n# Each extension needs to be configured individually even if they use the same\n# parser.\nparsers:\n  mjs: \"@js\"\n  js: \"@js\"\n  cjs: \"@js\"\n  py: \"@py\"\n  yaml: \"@yaml\"\n  json: \"@json\"\n# The name of the template to use for generating the site. Names starting with\n# \"@\" will resolve to the templates provided by ipsen, any other name will be\n# resolved in the .ipsen/template folder in the project.\n# The template will always load the page.html file from the template folder and\n# use it to render the pages of the site.\ntemplate: \"@basic\"\n# extra options available to the template as $.options. Any type of value allowed.\noptions:\n  theme: dark\n```\n\n> The `.ipsen` folder and the `source`/`dest` options of the config are relative\n> to the cwd where Ipsen is being run.\n\n### source (site.md)\nThe source file should be a markdown file and list the contents of the site that\nneed to be rendered. It will also serve to build the sidebar menu for site\nnavigation. Links will determine which files are rendered (and their titles),\nand text can be used to name any section of files in the list without rendering\ncontent at that point.\n\nOnly one link should be outside of a list, and it will be used as the index\nfile for the site. All files except the index will generate an html file of the\nsame name with the extension changed. The index file will always be saved as\n`index.html` to allow standard website configurations to play nice with the\nrendered content.\n\nThe link targets can optionally have a hash that says which file within the\ntemplate should be used to render the page, defaults to `page.html`.\n\n```md\n[Home](readme.md)\n\n- Python Stuff\n    - [Test](py-stuff/test.md#thing.html)\n```\n\n> Currently Ipsen assumes the static site will be at the root of the domain\n> it's hosted at, so all paths are `/<file>` within the html to make sure that\n> any file can link to any othe file without needing to calculate the relative\n> path between every file and every other file in the output.\n\n### Parsers\nNeed something here for docs.\n\n### Static Folder\nIf there is a static folder in the `.ipsen` folder, the files will be\ncopied to the output directory when the site is rendered.\n\n## Template Folder\nThe template folder within the `.ipsen` folder can have a number of files that\nwill be used by the Burger Template engine within ipsen to generate the pages\nfor the static site. Ipsen also has a `@basic` template available that can be\nused, or copied and modified for further customization.\n\nDetails for the Buger Template syntax can be found in the page about the\ntemplates accesible from the sidebar menu.\n\n### page.html\nThe default file that ipsen will look for when rendering a page.\n\n### code.html\nWhen a code block is rendered, Ipsen will look for this file in the template\nand use it to render the syntax highlighted html for the code. The basic\ntemplate uses this file to add a copy button to quickly copy code. If this\nfile is not found, Ipsen will just render the highlighted code with no extra\ncontrols or other modifications.\n\n### vars.json\nA json file that can have any number of variables available to templates as\n`$.vars`. Ipsen does not read the contents of this file for anything it does on\nits own, so it can have any format the template wants.\n","readmeFilename":"readme.md","gitHead":"0aff62efc72c454b9e61bd7fc9449a731f30c870","_id":"@axel669/ipsen@0.4.0-beta.3","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-/XbGySp9mJBMAvLHl/iZV4oI8s0F2pJdKFX7mmJwFQRlweWzYVRbp9+Rmbz34Fw6h9I3TW0yzAHx3wXDJTSvfQ==","shasum":"85482ed7a615195ec4dc8bff0a9e25ed8dbf35f1","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.4.0-beta.3.tgz","fileCount":47,"unpackedSize":131254,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIqw4hgdXPcHVchbd1smOoUKWgH6z60zk3m+zxMlZqrAiEAkDJfROiQ13mCFFQ3SidJefSuHcck0be/AI0TjANM7WY="}]},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.4.0-beta.3_1699336726697_0.2681492128519414"},"_hasShrinkwrap":false},"0.4.0-beta.5":{"name":"@axel669/ipsen","version":"0.4.0-beta.5","description":"A static site generator that aims to be simple and powerful.","main":"lib/main.mjs","type":"module","scripts":{},"bin":{"ipsen":"lib/cli.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"fs-jetpack":"^5.1.0","js-yaml":"^4.1.0","marked":"^9.0.2","prismjs":"^1.29.0","xml-beautifier":"^0.5.0","yaml-front-matter":"^4.1.1"},"readme":"# Ipsen (Beta)\n\nA static site generator that aims to be simple and powerful.\n\n> ⚠ this documentation is very limited while more testing is going on.\n> More comprehensive documentation will be available when Ipsen is closer to\n> a production release.\n\n## Installation\n```bash\npnpm add @axel669/ipsen@0.4.0-beta.5\n```\n\n## Usage\nIpsen uses a `.ipsen` folder in project root to determine configuration and\nother things (see below).\n```bash\nnpx ipsen\n```\nOr in `package.json`\n```json\n{\n  ...,\n  \"scripts\": {\n    \"render-docs\": \"ipsen\"\n  },\n  ...\n}\n```\nThat's really it. All the configuration and custom files are read from the\n`.ipsen` folder.\n\n## .ipsen Folder\nThe `config.yml` file is the only file required by ipsen. The other folders are\noptional, and only used when rendering from custom templates/parsers.\n\n```\nproject\n    .ipsen\n        config.yml\n        parser\n        static\n        template\n            code.html\n            page.html\n            vars.json\n            static\n            &lt;other template files>\n    &lt;project files>\n```\n\n### config.yml\n```yaml\n# The source markdown file that lists the contents of the site.\nsource: site.md\n# The folder to save the generated files into.\ndest: site\n# Custom parsers for loading data out of files and into marked areas to make api\n# documentation easier, and allowing the api docs to stay in the code files.\n# Parsers starting with \"@\" will be loaded from the parsers available in Ipsen.\n# Each extension needs to be configured individually even if they use the same\n# parser.\nparsers:\n  mjs: \"@js\"\n  js: \"@js\"\n  cjs: \"@js\"\n  py: \"@py\"\n  yaml: \"@yaml\"\n  json: \"@json\"\n# The name of the template to use for generating the site. Names starting with\n# \"@\" will resolve to the templates provided by ipsen, any other name will be\n# resolved in the .ipsen/template folder in the project.\n# The template will always load the page.html file from the template folder and\n# use it to render the pages of the site.\ntemplate: \"@basic\"\n# extra options available to the template as $.options. Any type of value allowed.\noptions:\n  theme: dark\n```\n\n> The `.ipsen` folder and the `source`/`dest` options of the config are relative\n> to the cwd where Ipsen is being run.\n\n### source (site.md)\nThe source file should be a markdown file and list the contents of the site that\nneed to be rendered. It will also serve to build the sidebar menu for site\nnavigation. Links will determine which files are rendered (and their titles),\nand text can be used to name any section of files in the list without rendering\ncontent at that point.\n\nOnly one link should be outside of a list, and it will be used as the index\nfile for the site. All files except the index will generate an html file of the\nsame name with the extension changed. The index file will always be saved as\n`index.html` to allow standard website configurations to play nice with the\nrendered content.\n\nThe link targets can optionally have a hash that says which file within the\ntemplate should be used to render the page, defaults to `page.html`.\n\n```md\n[Home](readme.md)\n\n- Python Stuff\n    - [Test](py-stuff/test.md#thing.html)\n```\n\n> Currently Ipsen assumes the static site will be at the root of the domain\n> it's hosted at, so all paths are `/<file>` within the html to make sure that\n> any file can link to any othe file without needing to calculate the relative\n> path between every file and every other file in the output.\n\n### Parsers\nNeed something here for docs.\n\n### Static Folder\nIf there is a static folder in the `.ipsen` folder, the files will be\ncopied to the output directory when the site is rendered.\n\n## Template Folder\nThe template folder within the `.ipsen` folder can have a number of files that\nwill be used by the Burger Template engine within ipsen to generate the pages\nfor the static site. Ipsen also has a `@basic` template available that can be\nused, or copied and modified for further customization.\n\nDetails for the Buger Template syntax can be found in the page about the\ntemplates accesible from the sidebar menu.\n\n### page.html\nThe default file that ipsen will look for when rendering a page.\n\n### code.html\nWhen a code block is rendered, Ipsen will look for this file in the template\nand use it to render the syntax highlighted html for the code. The basic\ntemplate uses this file to add a copy button to quickly copy code. If this\nfile is not found, Ipsen will just render the highlighted code with no extra\ncontrols or other modifications.\n\n### vars.json\nA json file that can have any number of variables available to templates as\n`$.vars`. Ipsen does not read the contents of this file for anything it does on\nits own, so it can have any format the template wants.\n\n### Extending Templates\nTemplates can be extended by putting a file named `.extend` inside the root of\nthe template folder. The file should contain the name of the template to be\nextended, and follows the same rules for the name as the config file. Ipsen will\ncollect the list of files from each template and merge them into a single\nlist where templates later in a chain have priority, effectively overriding\nany files if they share a name. An extending template can override any file\nprovided by they extend, including ones like `page.html` and `code.html`.\n\nThe `vars.json` file will also be loaded from all templates in a chain, with the\nlater variables overriding the earlier ones.\n\n```js\n// Example: custom template extends @basic template\n\n// custom template files\n[\n  \"page.html\",\n  \"new-thing.html\"\n]\n// @basic template files\n[\n  \"page.html\",\n  \"sidebar.html\"\n]\n\n// resolved mapping\n{\n  // custom overrides the template before it\n  \"page.html\": \"custom/page.html\",\n  // no previous entry, file is just added as another entry\n  \"new-thing\": \"custom/new-thing.html\",\n  // no entry overriding the built-in file, added as another entry\n  \"sidebar.html\": \"@basic/sidebar.html\"\n}\n```\n","readmeFilename":"readme.md","gitHead":"416026b2244953d32537830f5727a5c6d23f2288","_id":"@axel669/ipsen@0.4.0-beta.5","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-J+qJJ1mbHCcBJGb7giKu+Tne7vnY/bmbDpUs0n1PTDjRqsIWbzsnOBNAxTcGQ7FNmlUBh2RkOWj3LktFJxVBrg==","shasum":"fcd0cd92804fdfcfaff91fe88d2f3d2439bf3b99","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.4.0-beta.5.tgz","fileCount":55,"unpackedSize":138082,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHCCrOf8hyY6HNqejU/PWGDCOngUm+CTAKWx1WCziN1LAiEAzZ+tZP0iKc9Dxsr+S9kWG+1a4OEpkJ6P3IAkVijOrlM="}]},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.4.0-beta.5_1702173474145_0.8092543054788464"},"_hasShrinkwrap":false},"0.4.0-beta.6":{"name":"@axel669/ipsen","version":"0.4.0-beta.6","description":"A static site generator that aims to be simple and powerful.","main":"lib/main.mjs","type":"module","scripts":{},"bin":{"ipsen":"lib/cli.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"fs-jetpack":"^5.1.0","js-yaml":"^4.1.0","marked":"^9.0.2","prismjs":"^1.29.0","xml-beautifier":"^0.5.0","yaml-front-matter":"^4.1.1"},"devDependencies":{"prism-svelte":"^0.5.0"},"readme":"# Ipsen (Beta)\n\nA static site generator that aims to be simple and powerful.\n\n> ⚠ this documentation is very limited while more testing is going on.\n> More comprehensive documentation will be available when Ipsen is closer to\n> a production release.\n\n## Installation\n```bash\npnpm add @axel669/ipsen@0.4.0-beta.5\n```\n\n## Usage\nIpsen uses a `.ipsen` folder in project root to determine configuration and\nother things (see below).\n```bash\nnpx ipsen\n```\nOr in `package.json`\n```json\n{\n  ...,\n  \"scripts\": {\n    \"render-docs\": \"ipsen\"\n  },\n  ...\n}\n```\nThat's really it. All the configuration and custom files are read from the\n`.ipsen` folder.\n\n## .ipsen Folder\nThe `config.yml` file is the only file required by ipsen. The other folders are\noptional, and only used when rendering from custom templates/parsers.\n\n```\nproject\n    .ipsen\n        config.yml\n        parser\n        static\n        template\n            code.html\n            page.html\n            vars.json\n            static\n            &lt;other template files>\n    &lt;project files>\n```\n\n### config.yml\n```yaml\n# The source markdown file that lists the contents of the site.\nsource: site.md\n# The folder to save the generated files into.\ndest: site\n# Custom parsers for loading data out of files and into marked areas to make api\n# documentation easier, and allowing the api docs to stay in the code files.\n# Parsers starting with \"@\" will be loaded from the parsers available in Ipsen.\n# Each extension needs to be configured individually even if they use the same\n# parser.\nparsers:\n  mjs: \"@js\"\n  js: \"@js\"\n  cjs: \"@js\"\n  py: \"@py\"\n  yaml: \"@yaml\"\n  json: \"@json\"\n# The name of the template to use for generating the site. Names starting with\n# \"@\" will resolve to the templates provided by ipsen, any other name will be\n# resolved in the .ipsen/template folder in the project.\n# The template will always load the page.html file from the template folder and\n# use it to render the pages of the site.\ntemplate: \"@basic\"\n# extra options available to the template as $.options. Any type of value allowed.\noptions:\n  theme: dark\n```\n\n> The `.ipsen` folder and the `source`/`dest` options of the config are relative\n> to the cwd where Ipsen is being run.\n\n### source (site.md)\nThe source file should be a markdown file and list the contents of the site that\nneed to be rendered. It will also serve to build the sidebar menu for site\nnavigation. Links will determine which files are rendered (and their titles),\nand text can be used to name any section of files in the list without rendering\ncontent at that point.\n\nOnly one link should be outside of a list, and it will be used as the index\nfile for the site. All files except the index will generate an html file of the\nsame name with the extension changed. The index file will always be saved as\n`index.html` to allow standard website configurations to play nice with the\nrendered content.\n\nThe link targets can optionally have a hash that says which file within the\ntemplate should be used to render the page, defaults to `page.html`.\n\n```md\n[Home](readme.md)\n\n- Python Stuff\n    - [Test](py-stuff/test.md#thing.html)\n```\n\n> Currently Ipsen assumes the static site will be at the root of the domain\n> it's hosted at, so all paths are `/<file>` within the html to make sure that\n> any file can link to any othe file without needing to calculate the relative\n> path between every file and every other file in the output.\n\n### Parsers\nNeed something here for docs.\n\n### Static Folder\nIf there is a static folder in the `.ipsen` folder, the files will be\ncopied to the output directory when the site is rendered.\n\n## Template Folder\nThe template folder within the `.ipsen` folder can have a number of files that\nwill be used by the Burger Template engine within ipsen to generate the pages\nfor the static site. Ipsen also has a `@basic` template available that can be\nused, or copied and modified for further customization.\n\nDetails for the Buger Template syntax can be found in the page about the\ntemplates accesible from the sidebar menu.\n\n### page.html\nThe default file that ipsen will look for when rendering a page.\n\n### code.html\nWhen a code block is rendered, Ipsen will look for this file in the template\nand use it to render the syntax highlighted html for the code. The basic\ntemplate uses this file to add a copy button to quickly copy code. If this\nfile is not found, Ipsen will just render the highlighted code with no extra\ncontrols or other modifications.\n\n### vars.json\nA json file that can have any number of variables available to templates as\n`$.vars`. Ipsen does not read the contents of this file for anything it does on\nits own, so it can have any format the template wants.\n\n### Extending Templates\nTemplates can be extended by putting a file named `.extend` inside the root of\nthe template folder. The file should contain the name of the template to be\nextended, and follows the same rules for the name as the config file. Ipsen will\ncollect the list of files from each template and merge them into a single\nlist where templates later in a chain have priority, effectively overriding\nany files if they share a name. An extending template can override any file\nprovided by they extend, including ones like `page.html` and `code.html`.\n\nThe `vars.json` file will also be loaded from all templates in a chain, with the\nlater variables overriding the earlier ones.\n\n```js\n// Example: custom template extends @basic template\n\n// custom template files\n[\n  \"page.html\",\n  \"new-thing.html\"\n]\n// @basic template files\n[\n  \"page.html\",\n  \"sidebar.html\"\n]\n\n// resolved mapping\n{\n  // custom overrides the template before it\n  \"page.html\": \"custom/page.html\",\n  // no previous entry, file is just added as another entry\n  \"new-thing\": \"custom/new-thing.html\",\n  // no entry overriding the built-in file, added as another entry\n  \"sidebar.html\": \"@basic/sidebar.html\"\n}\n```\n","readmeFilename":"readme.md","gitHead":"4ba4b21934eab6e5c40bb463fce638cbad4f76a6","_id":"@axel669/ipsen@0.4.0-beta.6","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-LTEFPhfT6rQkyHVh+51z6tbv2XbNvLORqomhOxaY0tSmEcDfMTi0onFYjBt0OOTJyw4yvy7ipsXc9v7mnGHDqQ==","shasum":"ef68444eab178ada0c0139e9fe6147854f533aed","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.4.0-beta.6.tgz","fileCount":55,"unpackedSize":138236,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhpZtHrU82nycS2dHHUqkPhTzOdtAFyatLX1tkyvi3qgIgdXVFPMbNQ3nsaGdopxi2l0JrNVPfDdPcaizfzXad9WY="}]},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.4.0-beta.6_1702245383041_0.6813403604072472"},"_hasShrinkwrap":false},"0.4.0-beta.7":{"name":"@axel669/ipsen","version":"0.4.0-beta.7","description":"A static site generator that aims to be simple and powerful.","main":"lib/main.mjs","type":"module","scripts":{},"bin":{"ipsen":"lib/cli.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"fs-jetpack":"^5.1.0","js-yaml":"^4.1.0","marked":"^9.0.2","prismjs":"^1.29.0","xml-beautifier":"^0.5.0","yaml-front-matter":"^4.1.1"},"devDependencies":{"prism-svelte":"^0.5.0"},"readme":"# Ipsen (Beta)\n\nA static site generator that aims to be simple and powerful.\n\n> ⚠ this documentation is very limited while more testing is going on.\n> More comprehensive documentation will be available when Ipsen is closer to\n> a production release.\n\n## Installation\n```bash\npnpm add @axel669/ipsen@0.4.0-beta.5\n```\n\n## Usage\nIpsen uses a `.ipsen` folder in project root to determine configuration and\nother things (see below).\n```bash\nnpx ipsen\n```\nOr in `package.json`\n```json\n{\n  ...,\n  \"scripts\": {\n    \"render-docs\": \"ipsen\"\n  },\n  ...\n}\n```\nThat's really it. All the configuration and custom files are read from the\n`.ipsen` folder.\n\n## .ipsen Folder\nThe `config.yml` file is the only file required by ipsen. The other folders are\noptional, and only used when rendering from custom templates/parsers.\n\n```\nproject\n    .ipsen\n        config.yml\n        parser\n        static\n        template\n            code.html\n            page.html\n            vars.json\n            static\n            &lt;other template files>\n    &lt;project files>\n```\n\n### config.yml\n```yaml\n# The source markdown file that lists the contents of the site.\nsource: site.md\n# The folder to save the generated files into.\ndest: site\n# Custom parsers for loading data out of files and into marked areas to make api\n# documentation easier, and allowing the api docs to stay in the code files.\n# Parsers starting with \"@\" will be loaded from the parsers available in Ipsen.\n# Each extension needs to be configured individually even if they use the same\n# parser.\nparsers:\n  mjs: \"@js\"\n  js: \"@js\"\n  cjs: \"@js\"\n  py: \"@py\"\n  yaml: \"@yaml\"\n  json: \"@json\"\n# The name of the template to use for generating the site. Names starting with\n# \"@\" will resolve to the templates provided by ipsen, any other name will be\n# resolved in the .ipsen/template folder in the project.\n# The template will always load the page.html file from the template folder and\n# use it to render the pages of the site.\ntemplate: \"@basic\"\n# extra options available to the template as $.options. Any type of value allowed.\noptions:\n  theme: dark\n```\n\n> The `.ipsen` folder and the `source`/`dest` options of the config are relative\n> to the cwd where Ipsen is being run.\n\n### source (site.md)\nThe source file should be a markdown file and list the contents of the site that\nneed to be rendered. It will also serve to build the sidebar menu for site\nnavigation. Links will determine which files are rendered (and their titles),\nand text can be used to name any section of files in the list without rendering\ncontent at that point.\n\nOnly one link should be outside of a list, and it will be used as the index\nfile for the site. All files except the index will generate an html file of the\nsame name with the extension changed. The index file will always be saved as\n`index.html` to allow standard website configurations to play nice with the\nrendered content.\n\nThe link targets can optionally have a hash that says which file within the\ntemplate should be used to render the page, defaults to `page.html`.\n\n```md\n[Home](readme.md)\n\n- Python Stuff\n    - [Test](py-stuff/test.md#thing.html)\n```\n\n> Currently Ipsen assumes the static site will be at the root of the domain\n> it's hosted at, so all paths are `/<file>` within the html to make sure that\n> any file can link to any othe file without needing to calculate the relative\n> path between every file and every other file in the output.\n\n### Parsers\nNeed something here for docs.\n\n### Static Folder\nIf there is a static folder in the `.ipsen` folder, the files will be\ncopied to the output directory when the site is rendered.\n\n## Template Folder\nThe template folder within the `.ipsen` folder can have a number of files that\nwill be used by the Burger Template engine within ipsen to generate the pages\nfor the static site. Ipsen also has a `@basic` template available that can be\nused, or copied and modified for further customization.\n\nDetails for the Buger Template syntax can be found in the page about the\ntemplates accesible from the sidebar menu.\n\n### page.html\nThe default file that ipsen will look for when rendering a page.\n\n### code.html\nWhen a code block is rendered, Ipsen will look for this file in the template\nand use it to render the syntax highlighted html for the code. The basic\ntemplate uses this file to add a copy button to quickly copy code. If this\nfile is not found, Ipsen will just render the highlighted code with no extra\ncontrols or other modifications.\n\n### vars.json\nA json file that can have any number of variables available to templates as\n`$.vars`. Ipsen does not read the contents of this file for anything it does on\nits own, so it can have any format the template wants.\n\n### Extending Templates\nTemplates can be extended by putting a file named `.extend` inside the root of\nthe template folder. The file should contain the name of the template to be\nextended, and follows the same rules for the name as the config file. Ipsen will\ncollect the list of files from each template and merge them into a single\nlist where templates later in a chain have priority, effectively overriding\nany files if they share a name. An extending template can override any file\nprovided by they extend, including ones like `page.html` and `code.html`.\n\nThe `vars.json` file will also be loaded from all templates in a chain, with the\nlater variables overriding the earlier ones.\n\n```js\n// Example: custom template extends @basic template\n\n// custom template files\n[\n  \"page.html\",\n  \"new-thing.html\"\n]\n// @basic template files\n[\n  \"page.html\",\n  \"sidebar.html\"\n]\n\n// resolved mapping\n{\n  // custom overrides the template before it\n  \"page.html\": \"custom/page.html\",\n  // no previous entry, file is just added as another entry\n  \"new-thing\": \"custom/new-thing.html\",\n  // no entry overriding the built-in file, added as another entry\n  \"sidebar.html\": \"@basic/sidebar.html\"\n}\n```\n","readmeFilename":"readme.md","gitHead":"de82d87dd44529bbcd280d73136a551c6223940f","_id":"@axel669/ipsen@0.4.0-beta.7","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-f10Xp/XtOMgJhMfZyUYWSKS2FwnwZ+tEjLsP3Rjd2ABcFwTk5zSm3FUetRV4A6gjiubAw0drVo3VPvMSrPEH0w==","shasum":"38f5bc2d52989f7399a290ae54f633b9ebd75bf6","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.4.0-beta.7.tgz","fileCount":57,"unpackedSize":146253,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC0WD2IesykUnFsobIgxveNhlRXBGl2Iw4Csz3ruwWvgwIgUzKu87CYOK0dztbPglP91hufJqszkzosTrjX/l1/RAg="}]},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.4.0-beta.7_1702361066229_0.5425401147621864"},"_hasShrinkwrap":false},"0.4.1":{"name":"@axel669/ipsen","version":"0.4.1","description":"A static site generator that aims to be simple and powerful.","main":"lib/main.mjs","type":"module","scripts":{},"bin":{"ipsen":"lib/cli.mjs"},"keywords":[],"author":{"name":"Axel"},"license":"MIT","dependencies":{"fs-jetpack":"^5.1.0","js-yaml":"^4.1.0","marked":"^9.0.2","prismjs":"^1.29.0","xml-beautifier":"^0.5.0","yaml-front-matter":"^4.1.1"},"devDependencies":{"prism-svelte":"^0.5.0"},"_id":"@axel669/ipsen@0.4.1","gitHead":"3e1ce202c229ce5d58929631b2fa1243b8a28c5c","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-hpJDLA7ev13aHnWfBd7gJRYr1u12xlT2R0zATVvdX/y7e8NZT0t9/aSnSBv5Xu0dUCBs2TRVD4vPaWEafwcvvw==","shasum":"22e3477e97c3c6666e372f4436b3d910bd8dbf9b","tarball":"https://registry.npmjs.org/@axel669/ipsen/-/ipsen-0.4.1.tgz","fileCount":57,"unpackedSize":150287,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGZEGj+qOQ3p4F3+3uGwOoYlxzad4/YjrxHgyj8AJ6wsAiEAlEdwMbGdfj2MIh9EAR2Y02HWJ7EKrTiEboPoye78e4Q="}]},"_npmUser":{"name":"axel669","email":"axel@axel669.net"},"directories":{},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ipsen_0.4.1_1713418104746_0.9900511270012442"},"_hasShrinkwrap":false}},"time":{"created":"2023-02-23T03:30:30.387Z","0.1.0":"2023-02-23T03:30:30.736Z","modified":"2024-04-18T05:28:25.184Z","0.2.0":"2023-02-24T05:38:47.786Z","0.3.0":"2023-03-03T04:53:12.745Z","0.3.1":"2023-04-03T04:04:23.523Z","0.4.0":"2023-10-14T00:35:26.010Z","0.4.0-beta.1":"2023-10-18T03:10:15.870Z","0.4.0-beta.2":"2023-10-26T03:39:43.302Z","0.4.0-beta.3":"2023-11-07T05:58:46.887Z","0.4.0-beta.5":"2023-12-10T01:57:54.391Z","0.4.0-beta.6":"2023-12-10T21:56:23.260Z","0.4.0-beta.7":"2023-12-12T06:04:26.436Z","0.4.1":"2024-04-18T05:28:24.991Z"},"maintainers":[{"name":"axel669","email":"axel@axel669.net"}],"description":"A static site generator that aims to be simple and powerful.","keywords":[],"author":{"name":"Axel"},"license":"MIT","readme":"# Ipsen\r\n\r\nA static site generator that aims to be simple and powerful.\r\n\r\n> ⚠ this documentation is very limited while more testing is going on.\r\n> More comprehensive documentation will be available when Ipsen is closer to\r\n> a production release.\r\n\r\n## Installation\r\n```bash\r\npnpm add @axel669/ipsen@0.4.1\r\n```\r\n\r\n## Usage\r\nIpsen uses a `.ipsen` folder in project root to determine configuration and\r\nother things (see below).\r\n```bash\r\nnpx ipsen\r\n```\r\nOr in `package.json`\r\n```json\r\n{\r\n  ...,\r\n  \"scripts\": {\r\n    \"render-docs\": \"ipsen\"\r\n  },\r\n  ...\r\n}\r\n```\r\nThat's really it. All the configuration and custom files are read from the\r\n`.ipsen` folder.\r\n\r\n## .ipsen Folder\r\nThe `config.yml` file is the only file required by ipsen. The other folders are\r\noptional, and only used when rendering from custom templates/parsers.\r\n\r\n```\r\nproject\r\n    .ipsen\r\n        config.yml\r\n        parser\r\n        static\r\n        template\r\n            code.html\r\n            page.html\r\n            vars.json\r\n            static\r\n            &lt;other template files>\r\n    &lt;project files>\r\n```\r\n\r\n### config.yml\r\n```yaml\r\n# The source markdown file that lists the contents of the site.\r\nsource: site.md\r\n# The folder to save the generated files into.\r\ndest: site\r\n# Custom parsers for loading data out of files and into marked areas to make api\r\n# documentation easier, and allowing the api docs to stay in the code files.\r\n# Parsers starting with \"@\" will be loaded from the parsers available in Ipsen.\r\n# Each extension needs to be configured individually even if they use the same\r\n# parser.\r\nparsers:\r\n  mjs: \"@js\"\r\n  js: \"@js\"\r\n  cjs: \"@js\"\r\n  py: \"@py\"\r\n  yaml: \"@yaml\"\r\n  json: \"@json\"\r\n# The name of the template to use for generating the site. Names starting with\r\n# \"@\" will resolve to the templates provided by ipsen, any other name will be\r\n# resolved in the .ipsen/template folder in the project.\r\n# The template will always load the page.html file from the template folder and\r\n# use it to render the pages of the site.\r\ntemplate: \"@basic\"\r\n# extra options available to the template as $.options. Any type of value allowed.\r\noptions:\r\n  theme: dark\r\n```\r\n\r\n> The `.ipsen` folder and the `source`/`dest` options of the config are relative\r\n> to the cwd where Ipsen is being run.\r\n\r\n### source (site.md)\r\nThe source file should be a markdown file and list the contents of the site that\r\nneed to be rendered. It will also serve to build the sidebar menu for site\r\nnavigation. Links will determine which files are rendered (and their titles),\r\nand text can be used to name any section of files in the list without rendering\r\ncontent at that point.\r\n\r\nOnly one link should be outside of a list, and it will be used as the index\r\nfile for the site. All files except the index will generate an html file of the\r\nsame name with the extension changed. The index file will always be saved as\r\n`index.html` to allow standard website configurations to play nice with the\r\nrendered content.\r\n\r\nThe link targets can optionally have a hash that says which file within the\r\ntemplate should be used to render the page, defaults to `page.html`.\r\n\r\n```md\r\n[Home](readme.md)\r\n\r\n- Python Stuff\r\n    - [Test](py-stuff/test.md#thing.html)\r\n```\r\n\r\n> Currently Ipsen assumes the static site will be at the root of the domain\r\n> it's hosted at, so all paths are `/<file>` within the html to make sure that\r\n> any file can link to any othe file without needing to calculate the relative\r\n> path between every file and every other file in the output.\r\n\r\n### Parsers\r\nNeed something here for docs.\r\n\r\n### Static Folder\r\nIf there is a static folder in the `.ipsen` folder, the files will be\r\ncopied to the output directory when the site is rendered.\r\n\r\n## Template Folder\r\nThe template folder within the `.ipsen` folder can have a number of files that\r\nwill be used by the Burger Template engine within ipsen to generate the pages\r\nfor the static site. Ipsen also has a `@basic` template available that can be\r\nused, or copied and modified for further customization.\r\n\r\nDetails for the Buger Template syntax can be found in the page about the\r\ntemplates accesible from the sidebar menu.\r\n\r\n### page.html\r\nThe default file that ipsen will look for when rendering a page.\r\n\r\n### code.html\r\nWhen a code block is rendered, Ipsen will look for this file in the template\r\nand use it to render the syntax highlighted html for the code. The basic\r\ntemplate uses this file to add a copy button to quickly copy code. If this\r\nfile is not found, Ipsen will just render the highlighted code with no extra\r\ncontrols or other modifications.\r\n\r\n### vars.json\r\nA json file that can have any number of variables available to templates as\r\n`$.vars`. Ipsen does not read the contents of this file for anything it does on\r\nits own, so it can have any format the template wants.\r\n\r\n### Extending Templates\r\nTemplates can be extended by putting a file named `.extend` inside the root of\r\nthe template folder. The file should contain the name of the template to be\r\nextended, and follows the same rules for the name as the config file. Ipsen will\r\ncollect the list of files from each template and merge them into a single\r\nlist where templates later in a chain have priority, effectively overriding\r\nany files if they share a name. An extending template can override any file\r\nprovided by they extend, including ones like `page.html` and `code.html`.\r\n\r\nThe `vars.json` file will also be loaded from all templates in a chain, with the\r\nlater variables overriding the earlier ones.\r\n\r\n```js\r\n// Example: custom template extends @basic template\r\n\r\n// custom template files\r\n[\r\n  \"page.html\",\r\n  \"new-thing.html\"\r\n]\r\n// @basic template files\r\n[\r\n  \"page.html\",\r\n  \"sidebar.html\"\r\n]\r\n\r\n// resolved mapping\r\n{\r\n  // custom overrides the template before it\r\n  \"page.html\": \"custom/page.html\",\r\n  // no previous entry, file is just added as another entry\r\n  \"new-thing\": \"custom/new-thing.html\",\r\n  // no entry overriding the built-in file, added as another entry\r\n  \"sidebar.html\": \"@basic/sidebar.html\"\r\n}\r\n```\r\n","readmeFilename":"readme.md"}