{"_id":"@curlytag/curlytag","_rev":"2-9cb62d32c04ff2345c72539365019519","name":"@curlytag/curlytag","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@curlytag/curlytag","version":"0.1.0","keywords":["template","template-engine","html","javascript","twig"],"author":{"name":"Daniel Kerr"},"license":"MIT","_id":"@curlytag/curlytag@0.1.0","maintainers":[{"name":"danielkerr","email":"blueyon@gmail.com"},{"name":"trydalcoholic","email":"gatalsky94@yandex.ru"}],"homepage":"https://www.curlytag.com/","bugs":{"url":"https://github.com/curlytag/curlytag/issues"},"dist":{"shasum":"87ba5a993038a3e315136094343c627a06c735d2","tarball":"https://registry.npmjs.org/@curlytag/curlytag/-/curlytag-0.1.0.tgz","fileCount":4,"integrity":"sha512-4A54JySmhTbrnC9Wt77lEgaznqIxijoRAXfDiiweSIsehUjWLWP/86XTd9j4mWi4cCPkqlCDvw5OXGOHnYkRIQ==","signatures":[{"sig":"MEUCIQCCN7I3JQVnKcebE+to2wtXD8aLNG6zS6tNjjHHTPQYigIgcJk06hbJAN+tq4Hrj1N6qHOmdbDz5+Xa3B0owYO8w9k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34278},"main":"curlytag.js","type":"module","exports":{".":"./curlytag.js"},"gitHead":"3c3da4bfc243099cb9480d9b69701b3c4e79db7c","scripts":{"fmt":"vp fmt","lint":"vp lint","test":"vp test","check":"vp check","prepare":"vp config"},"_npmUser":{"name":"trydalcoholic","email":"gatalsky94@yandex.ru"},"repository":{"url":"git+https://github.com/curlytag/curlytag.git","type":"git"},"_npmVersion":"11.9.0","description":"CurlyTag - Open Source JavaScript Template Engine","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"packageManager":"npm@11.12.1","devDependencies":{"vite-plus":"^0.1.14","@vitest/ui":"^4.1.2"},"_npmOperationalInternal":{"tmp":"tmp/curlytag_0.1.0_1774792569195_0.18123797323888846","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@curlytag/curlytag","version":"0.1.1","description":"CurlyTag - Open Source JavaScript Template Engine","keywords":["html","javascript","template","template-engine","twig"],"homepage":"https://www.curlytag.com/","bugs":{"url":"https://github.com/curlytag/curlytag/issues"},"license":"MIT","author":{"name":"Daniel Kerr"},"repository":{"type":"git","url":"git+https://github.com/curlytag/curlytag.git"},"type":"module","main":"curlytag.js","exports":{".":"./curlytag.js"},"scripts":{"check":"vp check","lint":"vp lint","fmt":"vp fmt","test":"vp test","prepare":"vp config","release":"changelogen --release"},"devDependencies":{"@codemirror/lang-html":"^6.4.11","@codemirror/lang-json":"^6.0.2","@codemirror/state":"^6.6.0","@codemirror/view":"^6.41.1","@fontsource-variable/martian-mono":"^5.2.7","@vitest/browser":"^4.1.5","@vitest/browser-playwright":"^4.1.5","@vitest/ui":"^4.1.5","changelogen":"^0.6.2","codemirror":"^6.0.2","playwright":"^1.59.1","remixicon":"^4.9.1","shiki":"^4.0.2","vite-plus":"^0.1.19"},"packageManager":"npm@11.13.0","gitHead":"2862b936efffdd1ac983b3695d075a24017b075e","_id":"@curlytag/curlytag@0.1.1","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-aB+vczWzsPCdaBhMaEUxrUjjoYKP8c0377xeYjKUCQW7/cm0U7pcEM/wEhqr9tRnnmHlHD7+gwH4GmAu2vXNdw==","shasum":"5b114a8b57bca84926f2ec54f621256dc7674f0c","tarball":"https://registry.npmjs.org/@curlytag/curlytag/-/curlytag-0.1.1.tgz","fileCount":4,"unpackedSize":39464,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBw16JTkdBMTWkRWek0BtKp/D7H+RoXTBFxStEFFZUO5AiAxTBvjEZmpO5N5vyUMdcPx6icAklHBGoz6fcaV2DKlRA=="}]},"_npmUser":{"name":"trydalcoholic","email":"gatalsky94@yandex.ru"},"directories":{},"maintainers":[{"name":"danielkerr","email":"blueyon@gmail.com"},{"name":"trydalcoholic","email":"gatalsky94@yandex.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/curlytag_0.1.1_1776972070320_0.28083100130077865"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-29T13:56:09.039Z","modified":"2026-04-23T19:21:10.630Z","0.1.0":"2026-03-29T13:56:09.342Z","0.1.1":"2026-04-23T19:21:10.482Z"},"bugs":{"url":"https://github.com/curlytag/curlytag/issues"},"author":{"name":"Daniel Kerr"},"license":"MIT","homepage":"https://www.curlytag.com/","keywords":["html","javascript","template","template-engine","twig"],"repository":{"type":"git","url":"git+https://github.com/curlytag/curlytag.git"},"description":"CurlyTag - Open Source JavaScript Template Engine","maintainers":[{"name":"danielkerr","email":"blueyon@gmail.com"},{"name":"trydalcoholic","email":"gatalsky94@yandex.ru"}],"readme":"# curlytag\n\n[![npm version](https://img.shields.io/npm/v/@curlytag/curlytag)](https://www.npmjs.com/package/@curlytag/curlytag)\n[![npm downloads](https://img.shields.io/npm/dm/@curlytag/curlytag)](https://www.npmjs.com/package/@curlytag/curlytag)\n[![license](https://img.shields.io/npm/l/@curlytag/curlytag)](LICENSE)\n[![CI](https://github.com/curlytag/curlytag/actions/workflows/ci.yml/badge.svg)](https://github.com/curlytag/curlytag/actions/workflows/ci.yml)\n\nCurlyTag - Open Source JavaScript Template Engine\n\n## Quick Start\n\n```js\nimport { template } from './curlytag.js';\n\ntemplate.parse('Hello, {{ name }}!', { name: 'World' });\n// → Hello, World!\n```\n\n```js\ntemplate.addPath('views/');\nconst html = await template.render('home', { title: 'Welcome' });\n```\n\nFull documentation: [curlytag.com](https://www.curlytag.com/)\n\n## Development\n\nThis project uses [Vite+](https://viteplus.dev/) for formatting (Oxfmt), linting (Oxlint), and commit hooks.\n\n### Using Dev Container (recommended)\n\nOpen the project in VS Code and select **\"Reopen in Container\"**. The container will automatically:\n\n- Install Node.js (LTS)\n- Install `vp` CLI (Vite+)\n- Install project dependencies\n\nAfter the container starts, you're ready to work.\n\n### Without Dev Container\n\n1. Install [Vite+](https://viteplus.dev/guide/):\n\n    **macOS / Linux:**\n\n    ```bash\n    curl -fsSL https://vite.plus | bash\n    ```\n\n    **Windows:**\n\n    ```powershell\n    irm https://vite.plus/ps1 | iex\n    ```\n\n    Alternatively, download and run `vp-setup.exe` from [setup.viteplus.dev](https://setup.viteplus.dev/).\n\n> [!NOTE]\n>\n> `vp-setup.exe` is not yet code-signed. Your browser may show a warning when downloading. Click \"...\" → \"Keep\" → \"Keep anyway\" to proceed. If Windows Defender SmartScreen blocks the file when you run it, click \"More info\" → \"Run anyway\".\n\n2. Install dependencies:\n\n    ```bash\n    vp install\n    ```\n\n3. Set up commit hooks:\n\n    ```bash\n    vp config\n    ```\n\n### Commands\n\n```bash\nvp check          # Format, lint, and type-check\nvp check --fix    # Auto-fix formatting and lint issues\nvp lint           # Lint only\nvp fmt            # Format only\nvp test           # Run tests once\n```\n\n### Test Layout\n\nTests are organized by feature and should stay split across small files instead of growing a shared catch-all suite.\n\n- `tests/output/` contains plain output and `{{ }}` variable rendering tests.\n- `tests/filters/` contains filter tests, with array filters in `tests/filters/array/`.\n- `tests/tags/` contains tag behavior tests.\n- `tests/render.test.js` and `tests/add-filter.test.js` stay at the top level because they cover broader integration behavior.\n\nWhen adding a new filter or tag, prefer creating or extending a focused file in the matching directory rather than restoring cases to a monolithic `curlytag.test.js` file.\n\n### Playground\n\nRun the playground in development mode:\n\n```bash\nvp dev\n```\n\nVite serves the playground from `playground/` using the config in `vite.config.ts`. Open the local URL printed by the command to work on the editors and examples.\n\n### Development Workflow\n\nRun tests in watch mode — tests re-run automatically on file changes:\n\n```bash\nvp test --watch\n```\n\nRun tests with a browser UI for interactive exploration:\n\n```bash\nvp test --ui --watch\n```\n\n> [!NOTE]\n>\n> The UI starts at `http://localhost:51204/__vitest__/` and stays open as long as the process is running. Always use `--watch` together with `--ui`, otherwise the server exits right after the test run.\n","readmeFilename":"README.md"}