{"_id":"@anarchitects/nest-angular-ssr","_rev":"4-882b41972bffaf1a92b05e4e3e659fa6","name":"@anarchitects/nest-angular-ssr","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@anarchitects/nest-angular-ssr","version":"0.1.0","license":"MIT","_id":"@anarchitects/nest-angular-ssr@0.1.0","maintainers":[{"name":"vrxj81","email":"johan@anarchitects.dev"}],"homepage":"https://github.com/anarchitects/anarchitecture-community/tree/main/packages/nest/angular-ssr#readme","bugs":{"url":"https://github.com/anarchitects/anarchitecture-community/issues"},"nx":{"name":"nest-angular-ssr","targets":{"test":{"options":{"reportsDirectory":"coverage/packages/nest/angular-ssr"},"outputs":["{options.reportsDirectory}"],"executor":"@nx/vitest:test"}}},"dist":{"shasum":"6e02e90a5196e41ab793292965d39956b4e2100d","tarball":"https://registry.npmjs.org/@anarchitects/nest-angular-ssr/-/nest-angular-ssr-0.1.0.tgz","fileCount":17,"integrity":"sha512-CBemBifiNQpq6vMZXrX5VzDo5sdpSEIRVZKEDTfpqSj+FHZlBAmMLf60WIE38KsUBWavIgO4dUb8LXpCrA57Tw==","signatures":[{"sig":"MEYCIQD+TWy1pBA0Up8ojQX7fRmbgsglrByGGbcM7GMSZzBUWgIhAL8H7t9C8DEZ49dkCTrTDf7tOhQNqahb2najuAVuZZx5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27091},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","@anarchitecture-community/source":"./src/index.ts"},"./package.json":"./package.json"},"gitHead":"7ad2463fc3596ec0ac2a5fcffb80ddb7092e128a","_npmUser":{"name":"vrxj81","email":"johan@anarchitects.dev"},"repository":{"url":"git+https://github.com/anarchitects/anarchitecture-community.git","type":"git","directory":"packages/nest/angular-ssr"},"_npmVersion":"10.9.7","description":"Angular SSR integration for NestJS on Fastify, built on `@angular/ssr`.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"tslib":"^2.3.0","@fastify/static":"^8.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0","@angular/ssr":"^21.0.0","@nestjs/core":"^11.0.0","@nestjs/common":"^11.0.0","@nestjs/platform-fastify":"^11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nest-angular-ssr_0.1.0_1774537573231_0.5540426517398593","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@anarchitects/nest-angular-ssr","version":"0.2.0","license":"MIT","_id":"@anarchitects/nest-angular-ssr@0.2.0","maintainers":[{"name":"vrxj81","email":"johan@anarchitects.dev"}],"homepage":"https://github.com/anarchitects/anarchitecture-community/tree/main/packages/nest/angular-ssr#readme","bugs":{"url":"https://github.com/anarchitects/anarchitecture-community/issues"},"nx":{"name":"nest-angular-ssr","targets":{"test":{"options":{"reportsDirectory":"coverage/packages/nest/angular-ssr"},"outputs":["{options.reportsDirectory}"],"executor":"@nx/vitest:test"}}},"dist":{"shasum":"45a413c77ce91da2bbc66bd03f5131a8b2c44ea3","tarball":"https://registry.npmjs.org/@anarchitects/nest-angular-ssr/-/nest-angular-ssr-0.2.0.tgz","fileCount":21,"integrity":"sha512-kMGm0TxdTLHgkyhvS+Hf7vyRdRwBNgfBISGAdB5mfYZAtVvqPTIfA/C6Kphcgx7BW2LYec2mMqVB6IYynwDfLA==","signatures":[{"sig":"MEQCIF92MKzoJK1BsNMVWNcnYfrDcaU0mBY0nZBNvduXkin7AiBE4QMWzXE9osPapPtkmGBH2PdltgToQ7uyhj2I/F5lQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37326},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","@anarchitecture-community/source":"./src/index.ts"},"./package.json":"./package.json"},"gitHead":"62ea1f577e9fe6b48ab85c2114eb04c9a73261eb","_npmUser":{"name":"vrxj81","email":"johan@anarchitects.dev"},"repository":{"url":"git+https://github.com/anarchitects/anarchitecture-community.git","type":"git","directory":"packages/nest/angular-ssr"},"_npmVersion":"10.9.7","description":"Angular SSR integration for NestJS on Fastify, built on `@angular/ssr`.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@fastify/static":"^8.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0","@angular/ssr":"^21.0.0","@nestjs/core":"^11.0.0","@angular/core":"^21.0.0","@nestjs/common":"^11.0.0","@angular/router":"^21.0.0","reflect-metadata":"^0.2.0","@nestjs/platform-fastify":"^11.0.0","@angular/platform-browser":"^21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nest-angular-ssr_0.2.0_1776342194745_0.15603261449324402","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@anarchitects/nest-angular-ssr","version":"0.2.1","license":"Apache-2.0","_id":"@anarchitects/nest-angular-ssr@0.2.1","maintainers":[{"name":"vrxj81","email":"johan@anarchitects.dev"}],"homepage":"https://github.com/anarchitects/anarchitecture-community/tree/main/packages/nest/angular-ssr#readme","bugs":{"url":"https://github.com/anarchitects/anarchitecture-community/issues"},"nx":{"name":"nest-angular-ssr","targets":{"test":{"options":{"reportsDirectory":"coverage/packages/nest/angular-ssr"},"outputs":["{options.reportsDirectory}"],"executor":"@nx/vitest:test"}}},"dist":{"shasum":"8c8880930ab91aafee728c6d3c31ed4d512fc2ec","tarball":"https://registry.npmjs.org/@anarchitects/nest-angular-ssr/-/nest-angular-ssr-0.2.1.tgz","fileCount":21,"integrity":"sha512-YGP563KBCpVFBiC8MhfDpFu/nVIu5khoHTGduAiy4l59A8n/nhywl4X9vH58FGwBBE0jIXBgoOV0vzK76XGwzQ==","signatures":[{"sig":"MEUCIQDMKyo/zJSed2D0j6GPpQX3AbyZCq/ldz+otLxPZXz60AIgMj3LcU3TMhGeSPdBNZq0gFAh+kh8e3sBwsPdTt8FLLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anarchitects%2fnest-angular-ssr@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":37662},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","@anarchitecture-community/source":"./src/index.ts"},"./package.json":"./package.json"},"gitHead":"8c98218c00e4cec451fee07054a0181f59686a27","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4e1eb7b6-3da0-4dcb-a577-acf11a9ff1b0"}},"repository":{"url":"git+https://github.com/anarchitects/anarchitecture-community.git","type":"git","directory":"packages/nest/angular-ssr"},"_npmVersion":"11.13.0","description":"Angular SSR integration for NestJS on Fastify, built on `@angular/ssr`.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"@fastify/static":"^8.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"fastify":"^5.0.0","@angular/ssr":"^21.0.0","@nestjs/core":"^11.0.0","@angular/core":"^21.0.0","@nestjs/common":"^11.0.0","@angular/router":"^21.0.0","reflect-metadata":"^0.2.0","@nestjs/platform-fastify":"^11.0.0","@angular/platform-browser":"^21.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nest-angular-ssr_0.2.1_1780814506115_0.7430906036350213","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@anarchitects/nest-angular-ssr","version":"0.3.0","license":"Apache-2.0","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/anarchitects/anarchitecture-community.git","directory":"packages/nest/angular-ssr"},"bugs":{"url":"https://github.com/anarchitects/anarchitecture-community/issues"},"homepage":"https://github.com/anarchitects/anarchitecture-community/tree/main/packages/nest/angular-ssr#readme","exports":{"./package.json":"./package.json",".":{"@anarchitecture-community/source":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs","default":"./dist/index.js"}},"publishConfig":{"access":"public"},"peerDependencies":{"@angular/core":"^21.0.0 || ^22.0.0","@angular/platform-browser":"^21.0.0 || ^22.0.0","@angular/router":"^21.0.0 || ^22.0.0","@angular/ssr":"^21.0.0 || ^22.0.0","@nestjs/common":"^11.0.0","@nestjs/core":"^11.0.0","@nestjs/platform-fastify":"^11.0.0","fastify":"^5.0.0","reflect-metadata":"^0.2.0"},"nx":{"name":"nest-angular-ssr","targets":{"typecheck":{"parallelism":false},"test":{"executor":"@nx/vitest:test","outputs":["{options.reportsDirectory}"],"options":{"reportsDirectory":"coverage/packages/nest/angular-ssr"}}}},"dependencies":{"@fastify/static":"^8.2.0"},"gitHead":"c76589dcb5cda4cea0d963063932fe0d27b8c03b","_id":"@anarchitects/nest-angular-ssr@0.3.0","description":"Angular SSR integration for NestJS on Fastify, built on `@angular/ssr`.","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-b9OCukYxEmRdch0s3DGTGuVzg3lKCuI/+Nuew9f5Ftl7yfAbinf040YDQuei61JN3jwuQShzP4K+MhGIEUMq3g==","shasum":"e9638cefeb15c9beae8748305250dc0d3bf96c53","tarball":"https://registry.npmjs.org/@anarchitects/nest-angular-ssr/-/nest-angular-ssr-0.3.0.tgz","fileCount":28,"unpackedSize":57553,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anarchitects%2fnest-angular-ssr@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD9weuB4WZxiGAcEmDapqxkty+yBs/o8Y8kCDiFkz1cJAIgOTpsyRbqCB4bCGnz2o57JBd/0+Vd7yoMVkuhT07J7BY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4e1eb7b6-3da0-4dcb-a577-acf11a9ff1b0"}},"directories":{},"maintainers":[{"name":"vrxj81","email":"johan@anarchitects.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nest-angular-ssr_0.3.0_1787921961402_0.8052637378080043"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-26T15:06:13.127Z","modified":"2026-08-28T12:59:21.839Z","0.1.0":"2026-03-26T15:06:13.364Z","0.2.0":"2026-04-16T12:23:14.890Z","0.2.1":"2026-06-07T06:41:46.252Z","0.3.0":"2026-08-28T12:59:21.552Z"},"bugs":{"url":"https://github.com/anarchitects/anarchitecture-community/issues"},"license":"Apache-2.0","homepage":"https://github.com/anarchitects/anarchitecture-community/tree/main/packages/nest/angular-ssr#readme","repository":{"type":"git","url":"git+https://github.com/anarchitects/anarchitecture-community.git","directory":"packages/nest/angular-ssr"},"description":"Angular SSR integration for NestJS on Fastify, built on `@angular/ssr`.","maintainers":[{"name":"vrxj81","email":"johan@anarchitects.dev"}],"readme":"# `@anarchitects/nest-angular-ssr`\n\nAngular SSR integration for NestJS on Fastify, built on `@angular/ssr`.\n\nThis package provides three usage levels:\n\n- easiest: `NestAngularSsrModule.forRoot(...)` in a normal Nest `AppModule`\n- explicit: `bootstrapNestAngularSsr(...)` during Nest bootstrap\n- advanced: direct renderer/integration composition\n\n## Support matrix\n\nRelease `0.3.x` supports Node 24, NestJS 11, Fastify 5, and these tested\nAngular/Nx combinations. Nx is test infrastructure, not a peer dependency of\nthis library.\n\n| Angular | TypeScript | Nx             | Status    |\n| ------- | ---------- | -------------- | --------- |\n| 21.2    | 5.9        | 22.6 (minimum) | Supported |\n| 21.2    | 5.9        | 23.1           | Supported |\n| 22      | 6.0        | 23.1           | Supported |\n\nThe cells are centrally defined in\n[`tools/fixtures/nest-angular-ssr-compatibility-matrix.json`](../../../tools/fixtures/nest-angular-ssr-compatibility-matrix.json)\nand run as isolated packed-tarball consumers in CI.\n\n## Runtime support\n\nRuntime behavior:\n\n| Request                    | Behavior                                      |\n| -------------------------- | --------------------------------------------- |\n| `/api/...`                 | Bypasses SSR and stays in Nest/Fastify        |\n| Existing browser asset     | Served directly                               |\n| Other `GET` / `HEAD` route | Rendered through Angular SSR                  |\n| SSR returns `null`         | Falls back to Nest/Fastify not-found handling |\n\nValidated consumer compatibility:\n\n| Consumer shape             | Status    | Notes                      |\n| -------------------------- | --------- | -------------------------- |\n| CommonJS-oriented Nest app | Supported | Direct module import works |\n| ESM Nest app               | Supported | Direct module import works |\n\nThe compatibility result above is backed by the fixture validation note at [`docs/validation/nest-angular-ssr-consumers.md`](../../../docs/validation/nest-angular-ssr-consumers.md).\n\n## Requirements\n\n- NestJS 11+ with the Fastify adapter\n- Angular 21 or 22 SSR built on `@angular/ssr`\n- A built Angular `outputMode: \"server\"` application (recommended), or the\n  legacy app-owned bootstrap/template inputs\n\nPeer dependencies:\n\n- `@angular/ssr`\n- `@nestjs/common`\n- `@nestjs/core`\n- `@nestjs/platform-fastify`\n- `fastify`\n\n## Recommended Usage\n\n### Split Angular/Nest build output (recommended)\n\nBuild Angular separately with `outputMode: \"server\"` and an explicit\n`ssr.entry`. Construct and export the engine from that entry so the Nest\nprocess never creates a second Angular runtime:\n\n```ts\n// frontend/src/server.ts\nimport { AngularNodeAppEngine } from '@angular/ssr/node';\n\nexport const angularSsrEngine = new AngularNodeAppEngine({\n  allowedHosts: ['localhost', '127.0.0.1'],\n});\n```\n\nRegister the built output before `listen()`. The package finds the `browser/`\nassets and Angular ESM server bundle under the single output root. The runtime\nimport is safe when this Nest entry is compiled into a CommonJS webpack bundle.\n\n```ts\nawait bootstrapNestAngularSsr(app, {\n  angular: {\n    buildOutput: {\n      root: 'dist/apps/frontend',\n      // Optional overrides:\n      // serverBundleCandidates: ['server/server.mjs'],\n      // engineExport: 'angularSsrEngine',\n    },\n    allowedHosts: ['localhost', '127.0.0.1'],\n  },\n  routing: { apiPrefix: 'api' },\n});\n\nawait app.listen(3000, '0.0.0.0');\n```\n\nFor customized split deployments, explicit bootstrap is the recommended\nintegration. `NestAngularSsrModule.forRoot(...)` and `forRootAsync(...)` use\nthe same normalization and registration path and remain suitable for standard\nNest startup. Set `enabled: false` for tests and API-only deployments where no\nfrontend artifacts are available.\n\n### Legacy colocated source mode\n\nUse this mode only when Angular bootstrap code and its server template are\nintentionally colocated with Nest.\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { join } from 'node:path';\nimport {\n  type AngularSsrRegistrationOptions,\n  NestAngularSsrModule,\n} from '@anarchitects/nest-angular-ssr';\nimport { bootstrapServerApplication } from './main.server';\n\nconst angular = {\n  bootstrap: async () => bootstrapServerApplication,\n  templatePath: join(process.cwd(), 'src/index.server.html'),\n  routeExtractionUrl: 'http://127.0.0.1/',\n  allowedHosts: ['127.0.0.1', 'localhost'],\n  inlineCriticalCss: false,\n} satisfies AngularSsrRegistrationOptions;\n\n@Module({\n  imports: [\n    NestAngularSsrModule.forRoot({\n      angular,\n      routing: {\n        browserAssetsDir: 'dist/apps/web/browser',\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport {\n  FastifyAdapter,\n  type NestFastifyApplication,\n} from '@nestjs/platform-fastify';\n\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestFastifyApplication>(\n    AppModule,\n    new FastifyAdapter(),\n  );\n\n  app.setGlobalPrefix('api');\n  await app.listen(3000, '0.0.0.0');\n}\n\nvoid bootstrap();\n```\n\nNotes:\n\n- `browserAssetsDir` is required.\n- `angular.bootstrap` is required and remains application-owned.\n- `angular.templatePath` should point to your server HTML document, typically `src/index.server.html`.\n- `angular.baseHref` defaults to `'/'`.\n- `angular.inlineCriticalCss` defaults to `false`.\n- `angular.routeExtractionUrl` defaults to `http://localhost/`.\n- `angular.allowedHosts` is optional. Leave it unset unless you want explicit host restrictions for the Angular SSR engine.\n- Angular/Nx SSR generator output can usually be reused directly: keep your `main.server.ts` as the bootstrap entry and point `templatePath` at the generated `index.server.html`.\n- When your app uses `app.setGlobalPrefix(...)`, SSR routing follows that prefix automatically.\n- Set `routing.apiPrefix` only when you need to override the detected Nest global prefix.\n- `NestAngularSsrModule.forRootAsync(...)` is available when the same option shape needs to come from Nest DI or async config.\n- `@angular/compiler` may be required by this direct-source/JIT path. It is not\n  loaded or required by the recommended build-output path.\n\n```ts\nNestAngularSsrModule.forRootAsync({\n  inject: [ConfigService],\n  useFactory: (config: ConfigService) => ({\n    angular: {\n      bootstrap: async () => bootstrapServerApplication,\n      templatePath: config.getOrThrow<string>('WEB_INDEX_SERVER_TEMPLATE'),\n    },\n    routing: {\n      browserAssetsDir: config.getOrThrow<string>('WEB_BROWSER_ASSETS_DIR'),\n    },\n  }),\n});\n```\n\n### Explicit Bootstrap Helper (legacy inputs)\n\nUse this when you want explicit bootstrap wiring in `main.ts`.\n\n```ts\nimport { NestFactory } from '@nestjs/core';\nimport { join } from 'node:path';\nimport {\n  FastifyAdapter,\n  type NestFastifyApplication,\n} from '@nestjs/platform-fastify';\nimport { bootstrapNestAngularSsr } from '@anarchitects/nest-angular-ssr';\n\nimport { AppModule } from './app.module';\nimport { bootstrapServerApplication } from './main.server';\n\nasync function bootstrap() {\n  const app = await NestFactory.create<NestFastifyApplication>(\n    AppModule,\n    new FastifyAdapter(),\n  );\n\n  app.setGlobalPrefix('api');\n\n  await bootstrapNestAngularSsr(app, {\n    angular: {\n      bootstrap: async () => bootstrapServerApplication,\n      templatePath: join(process.cwd(), 'src/index.server.html'),\n    },\n    routing: {\n      browserAssetsDir: 'dist/apps/web/browser',\n    },\n  });\n\n  await app.listen(3000, '0.0.0.0');\n}\n\nvoid bootstrap();\n```\n\n`BootstrapNestAngularSsrOptions` keeps three explicit groups:\n\n- `angular`: public Angular SSR registration/bootstrap input\n- `integration`: renderer injection or request-context customization\n- `routing`: browser assets directory and optional API-prefix override\n\n## Advanced Composition\n\nUse the lower-level APIs only if the module or bootstrap helper is too opinionated for your app:\n\n- `createAngularSsrRenderer(...)`\n- `AngularNodeSsrRenderer`\n- `createNestAngularSsrIntegration(...)`\n- `registerNestAngularSsrRoutes(...)`\n\nAt the renderer layer, `createAngularSsrRenderer({ registration })` is the advanced entry point for package-owned Angular registration without the Nest module/bootstrap helpers.\n\nIf you want to normalize a template file up front, use `createAngularSsrRegistration(...)`:\n\n```ts\nimport { join } from 'node:path';\nimport { createAngularSsrRegistration } from '@anarchitects/nest-angular-ssr';\n\nconst registration = await createAngularSsrRegistration({\n  bootstrap: async () => bootstrapServerApplication,\n  templatePath: join(process.cwd(), 'src/index.server.html'),\n});\n```\n\nThese APIs keep the public boundary small:\n\n- SSR core stays on Web `Request` / `Response`\n- Nest integration is Fastify-only in v1\n- routing and bootstrap remain explicit concerns\n\n## Existing Option Shapes\n\n- `AngularSsrRegistrationOptions`\n  - `bootstrap: AngularSsrServerBootstrapLoader`\n  - `templatePath: string`\n  - `baseHref?: string`\n  - `inlineCriticalCss?: boolean`\n  - `routeExtractionUrl?: string | URL`\n  - `allowedHosts?: readonly string[]`\n- `ResolvedAngularSsrRegistrationOptions`\n  - `bootstrap: AngularSsrServerBootstrapLoader`\n  - `templatePath: string`\n  - `document: string`\n  - `baseHref?: string`\n  - `inlineCriticalCss?: boolean`\n  - `routeExtractionUrl?: string | URL`\n  - `allowedHosts?: readonly string[]`\n- `AngularNodeSsrRendererOptions`\n  - `registration?: AngularSsrRegistrationOptions | ResolvedAngularSsrRegistrationOptions`\n  - `engine?: AngularSsrEngine`\n  - `engineOptions?: AngularSsrEngineOptions`\n- `CreateNestAngularSsrIntegrationOptions<TContext>`\n  - `renderer?: AngularSsrRenderer<TContext>`\n  - `rendererOptions?: AngularNodeSsrRendererOptions`\n  - `createRequestContext?: (request, reply) => TContext | Promise<TContext>`\n- `RegisterNestAngularSsrRoutesOptions`\n  - `browserAssetsDir?: string` (derived from build output when omitted)\n  - `apiPrefix?: string`\n  - `allowedHosts?: readonly string[]`\n- `BootstrapNestAngularSsrOptions<TContext>`\n  - `enabled?: boolean`\n  - `angular?: AngularSsrRegistrationOptions | AngularSsrBuildOutputOptions`\n  - `integration?: CreateNestAngularSsrIntegrationOptions<TContext>`\n  - `routing: RegisterNestAngularSsrRoutesOptions`\n- `NestAngularSsrModuleOptions<TContext>`\n  - alias of `BootstrapNestAngularSsrOptions<TContext>`\n\nThe mutually exclusive pairs are enforced in code:\n\n- renderer `registration` vs `engine`\n- renderer `registration` vs `engineOptions`\n- renderer `engine` vs `engineOptions`\n- integration `renderer` vs `rendererOptions`\n- bootstrap `angular` vs `integration.renderer`\n- bootstrap `angular` vs `integration.rendererOptions`\n\n## Constraints and Non-Goals\n\nv1 intentionally does not do the following:\n\n- support Express or non-Fastify Nest adapters\n- use `ServeStaticModule`\n- add hidden auto-bootstrap outside the Nest module lifecycle or explicit helper call\n- take ownership of your Angular server bootstrap implementation\n- claim support for every Nest/Angular deployment shape\n- recreate legacy Universal APIs exactly\n\nThis package is intentionally scoped to modern Angular SSR on Nest + Fastify.\n\n## Troubleshooting\n\n- `browser assets directory was not found`: build the Angular application\n  before Nest and point `angular.buildOutput.root` at the directory containing\n  `browser/` and `server/`.\n- `Angular server bundle was not found`: keep `outputMode: \"server\"`, configure\n  `ssr.entry`, or provide explicit `serverBundleCandidates`.\n- `does not export an engine`: export `angularSsrEngine` from `ssr.entry`, or\n  configure `engineExport` to match your chosen name.\n- `request host is not allowed`: add the public hostname to `allowedHosts`.\n  Rejected hosts deliberately return HTTP 400 instead of an empty CSR shell.\n- Do not import or instantiate `AngularNodeAppEngine` in Nest for split mode;\n  the single engine instance must be owned by the Angular server bundle.\n\n## License\n\nCopyright © 2026 Optimalist BV and Anarchitects contributors.\n\nLicensed under the Apache License, Version 2.0. See the repository [LICENSE](../../../LICENSE) and [NOTICE](../../../NOTICE) files.\n","readmeFilename":"README.md"}