{"_id":"@codemonster-ru/ssr-service","name":"@codemonster-ru/ssr-service","dist-tags":{"latest":"1.1.0"},"versions":{"1.1.0":{"name":"@codemonster-ru/ssr-service","version":"1.1.0","description":"Universal SSR engine and CLI with Vite integration for modern JavaScript frameworks.","license":"MIT","author":{"name":"Kirill Kolesnikov","email":"admin@codemonster.ru","url":"https://github.com/KolesnikovKirill"},"type":"module","bin":{"ssr":"dist/bin/cli.js"},"scripts":{"dev":"cross-env DEV_ROOT=./playgrounds/vue DEV_ENTRY_SERVER=./src/entry-server.ts tsx src/server.ts","build":"tsc","build:playground":"npm run build --prefix playgrounds/vue","pretest:unit":"npm run build:playground","pretest:e2e":"npm run build:playground","test":"vitest run","test:ci":"npm run build:playground && vitest run","test:unit":"vitest run tests/unit","test:e2e":"vitest run tests/e2e","start":"node ./dist/bin/cli.js server","release:patch":"npm version patch && git push --follow-tags","release:minor":"npm version minor && git push --follow-tags","release:major":"npm version major && git push --follow-tags"},"dependencies":{"@codemonster-ru/env":"^1.1.0","express":"^4.18.2","yargs":"^18.0.0"},"devDependencies":{"@types/express":"^4.17.21","@types/node":"^20.12.7","@types/yargs":"^17.0.33","cross-env":"^10.0.0","ts-node":"^10.9.2","tsx":"^4.20.5","typescript":"^5.6.3","vitest":"^1.0.0","execa":"^8.0.0","node-fetch":"^3.3.2","vite":"^7.0.0"},"peerDependencies":{"vite":">=5.0.0 <8.0.0"},"repository":{"type":"git","url":"git+https://github.com/codemonster-ru/ssr.git"},"bugs":{"url":"https://github.com/codemonster-ru/ssr/issues"},"homepage":"https://github.com/codemonster-ru/ssr#readme","keywords":["ssr","server-side-rendering","vite","express","cli","universal","nodejs","javascript","typescript","vue","react"],"_id":"@codemonster-ru/ssr-service@1.1.0","gitHead":"de8c1c47fb53b8066359d24edac6e0be26b3af59","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-X2f0rlxl7AWH1GsUqTN17eKwH66PqhnQTjknSMECqfhvi0p123tXaqRLvIFnWGcWctjQEBwPKPHoGjeHHaJDvA==","shasum":"b585fdd1c229df735d0e8987f4187eb05a8c42e8","tarball":"https://registry.npmjs.org/@codemonster-ru/ssr-service/-/ssr-service-1.1.0.tgz","fileCount":10,"unpackedSize":26353,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDVejvt5y0iIDbHm++Fvjx0cdaR3fJfMB/Qb5qdAlHQLAIgZQ9uC11MJBZhjkygubaxzJW8Eud6HMgllRR11Eqo6Jo="}]},"_npmUser":{"name":"kolesnikov_k_a","email":"kolesnikov-kiril@mail.ru"},"directories":{},"maintainers":[{"name":"kolesnikov_k_a","email":"kolesnikov-kiril@mail.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ssr-service_1.1.0_1758831834233_0.1504930907802764"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-25T20:23:54.127Z","1.1.0":"2025-09-25T20:23:54.426Z","modified":"2025-09-25T20:23:54.763Z"},"maintainers":[{"name":"kolesnikov_k_a","email":"kolesnikov-kiril@mail.ru"}],"description":"Universal SSR engine and CLI with Vite integration for modern JavaScript frameworks.","homepage":"https://github.com/codemonster-ru/ssr#readme","keywords":["ssr","server-side-rendering","vite","express","cli","universal","nodejs","javascript","typescript","vue","react"],"repository":{"type":"git","url":"git+https://github.com/codemonster-ru/ssr.git"},"author":{"name":"Kirill Kolesnikov","email":"admin@codemonster.ru","url":"https://github.com/KolesnikovKirill"},"bugs":{"url":"https://github.com/codemonster-ru/ssr/issues"},"license":"MIT","readme":"# @codemonster-ru/ssr-service\n\n[![npm\nversion](https://img.shields.io/npm/v/@codemonster-ru/ssr-service.svg?style=flat-square)](https://www.npmjs.com/package/@codemonster-ru/ssr-service)\n[![Tests](https://github.com/codemonster-ru/ssr/actions/workflows/tests.yml/badge.svg)](https://github.com/codemonster-ru/ssr/actions)\n[![License](https://img.shields.io/npm/l/@codemonster-ru/ssr-service.svg?style=flat-square)](LICENSE)\n\n🚀 A universal SSR service for [Annabel Framework](https://github.com/codemonster-ru/annabel) **and standalone use**.\n\nAllows you to render Vue (and potentially React, Svelte, Solid, etc.) components on the server (Server-Side Rendering) and use them in PHP applications via SSR Bridge or as a separate Node.js SSR service.\n\n## ✨ Possibilities\n\n-   Rendering Vue components (and other frameworks via Vite) on the server (Node.js).\n-   `POST /render` API for getting the finished HTML.\n-   Automatic HTML assembly:\n    -   Injects `<script type=\"module\">` for entry and chunks.\n    -   Injects `<link rel=\"stylesheet\">` for CSS.\n    -   Adds `<link rel=\"modulepreload\">` and `<link rel=\"preload\">` for JS, CSS, fonts, images (configurable).\n-   Easy integration with PHP via [`Annabel\\SSR\\Bridge`](https://github.com/codemonster-ru/annabel).\n-   Can be run:\n    -   Locally inside [Annabel Skeleton](https://github.com/codemonster-ru/annabel-skeleton).\n    -   As a standalone server (Node.js, Docker, PM2, systemd).\n\n## 📦 Installation\n\nGlobal:\n\n```bash\nnpm install -g @codemonster-ru/ssr-service\n```\n\nOr locally in the project:\n\n```bash\nnpm install @codemonster-ru/ssr-service\n```\n\n## 🚀 Launch\n\n### Via CLI\n\n```bash\nssr server\n```\n\nBy default the service runs at `http://localhost:3001`.\n\nOptions:\n\n```bash\nssr server --port 4000 --serverEntry ./dist/server/entry-server.js\n```\n\n### Via Node.js (locally)\n\n```bash\nnpx ssr server\n```\n\n### In development mode (tsx/ts-node)\n\n```bash\ncross-env DEV_ROOT=./playgrounds/vue DEV_ENTRY_SERVER=./src/entry-server.ts tsx src/server.ts\n```\n\n### In production\n\n```bash\nnpm run build\nnpm start\n```\n\n## 🔧 Configuration\n\nAll parameters can be set via **CLI**, **.env** or directly via `loadConfig`.\n\n| Param                   | Default                       | Description                                                                |\n| ----------------------- | ----------------------------- | -------------------------------------------------------------------------- |\n| `MODE`                  | `production`                  | Development or production or test                                          |\n| `CLI_MODE`              | `false`                       | To complete SSR correctly in CLI                                           |\n| `CLIENT_PATH`           | `dist/client`                 | Path to client build (static files)                                        |\n| `SERVER_ENTRY`          | `dist/server/entry-server.js` | Path to server entry (SSR build)                                           |\n| `MANIFEST_PATH`         | `dist/client/manifest.json`   | Path to `manifest.json`                                                    |\n| `DEV_ROOT`              | —                             | Project root for dev-mode (where `vite.config.ts` is)                      |\n| `DEV_ENTRY_SERVER`      | `./src/entry-server.ts`       | Entry for dev SSR                                                          |\n| `PORT`                  | `3001`                        | SSR server port                                                            |\n| `CLIENT_ENTRY`          | `/assets/entry-client.js`     | Fallback client entry if no manifest.json                                  |\n| `SCRIPT_ATTRS`          | `\"\"`                          | Attributes for all `<script>` tags (`defer`, `async`, `crossorigin`, etc.) |\n| `DISABLE_PRELOAD`       | `false`                       | Disable all preloads                                                       |\n| `DISABLE_JS_PRELOAD`    | `false`                       | Disable only JS preload                                                    |\n| `DISABLE_CSS_PRELOAD`   | `false`                       | Disable only CSS preload                                                   |\n| `DISABLE_FONT_PRELOAD`  | `false`                       | Disable only font preload                                                  |\n| `DISABLE_IMAGE_PRELOAD` | `false`                       | Disable only image preload                                                 |\n\n## 🔗 Using with PHP (via Bridge)\n\n```php\n// Local\n$bridge = new \\Annabel\\SSR\\Bridge('local');\n$html = $bridge->render('<h1>{{ title }}</h1>', ['title' => 'Hello from PHP']);\n\n// Remote\n$bridge = new \\Annabel\\SSR\\Bridge('http', 'http://127.0.0.1:3001');\n$html = $bridge->render('<h1>{{ title }}</h1>', ['title' => 'Hello from PHP']);\n```\n\n## 📑 Example HTML Output\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\" />\n        <title>Vue SSR playground</title>\n\n        <meta name=\"description\" content=\"Description of the page\" />\n        <meta property=\"og:title\" content=\"Vue SSR playground\" />\n\n        <link rel=\"modulepreload\" href=\"/assets/entry-client.abc.js\" />\n        <link rel=\"modulepreload\" href=\"/assets/chunk-xyz.def.js\" />\n        <link rel=\"preload\" as=\"style\" href=\"/assets/style.css\" />\n        <link rel=\"preload\" as=\"font\" href=\"/assets/font.woff2\" crossorigin />\n        <link rel=\"preload\" as=\"image\" href=\"/assets/logo.png\" />\n\n        <link rel=\"stylesheet\" href=\"/assets/style.css\" />\n        <link rel=\"stylesheet\" href=\"/assets/chunk-xyz.css\" />\n    </head>\n    <body>\n        <div id=\"app\"><!-- SSR HTML --></div>\n        <script>\n            window.__COMPONENT__ = 'App';\n            window.__PROPS__ = { message: 'Hello' };\n        </script>\n        <script type=\"module\" defer src=\"/assets/entry-client.abc.js\"></script>\n        <script type=\"module\" defer src=\"/assets/chunk-xyz.def.js\"></script>\n    </body>\n</html>\n```\n\n## 📖 Documentation\n\n-   [Annabel Framework](https://github.com/codemonster-ru/annabel)\n-   [Annabel Skeleton](https://github.com/codemonster-ru/annabel-skeleton)\n\n## 👨‍💻 Author\n\n[**Kirill Kolesnikov**](https://github.com/KolesnikovKirill)\n\n## 📜 License\n\n[MIT](https://github.com/codemonster-ru/ssr/blob/main/LICENSE)\n","readmeFilename":"README.md","_rev":"1-50de14be2540c28dafb27afbfdf23bd9"}