{"_id":"@abortor/angular","_rev":"5-5d70e28b39b7e8602c4446ac553054d9","name":"@abortor/angular","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@abortor/angular","version":"0.1.0","_id":"@abortor/angular@0.1.0","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"dist":{"shasum":"2bebaff76322771262b63199ac3b4cb0fd1fd5e6","tarball":"https://registry.npmjs.org/@abortor/angular/-/angular-0.1.0.tgz","fileCount":6,"integrity":"sha512-8Mq+DcVbo7wu6tE7BZUL3TQ+EhBWHA/vBUvQauXeC08O5dVNKfHsTiDzbiJmL4F83TJc/M/URbKZkYQgNhYJSQ==","signatures":[{"sig":"MEQCIBfw/0iUUAOW4Lg3KnOEZvidSwJyscI4WuM98xmY7QVDAiB9U4GMEmE9aYTTZgNcmG7Frvl/eE21vxrCyWU8NDeYiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5647},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"aee9d77065a060ed23309e920e22c09f9aaa103f","scripts":{"tsc":"tsc -p tsconfig.json","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"michael.","email":"michaelvandaele2@gmail.com"},"_npmVersion":"11.3.0","description":"Angular integration for `@abortor/core`, providing scoped cancellation tied to Angular’s lifecycle.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","typescript":"^5.6.3","@abortor/core":"workspace:*","@angular/core":"^19.1.0"},"peerDependencies":{"rxjs":"^7 || ^8","@abortor/core":"^0.1.0","@angular/core":">=16 <21"},"_npmOperationalInternal":{"tmp":"tmp/angular_0.1.0_1755481286638_0.11737392384224599","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@abortor/angular","version":"0.1.1","_id":"@abortor/angular@0.1.1","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"dist":{"shasum":"e7d6ed45edc781362d6ccd3dc26b5c5ae613d46a","tarball":"https://registry.npmjs.org/@abortor/angular/-/angular-0.1.1.tgz","fileCount":6,"integrity":"sha512-JKTmdvRTO/t2zLK/QpASZTnrzm4FcevAHw+3t+itaDJ2nnZupG3w2JetYwvE2ERzJ53vnGJQZVlpXkjm8xzbJg==","signatures":[{"sig":"MEYCIQCE6VP3/yLhZVkSf/SmxdTKA6cfNysNMp/bwZcL0dRkPAIhALbVCMutzHCFgSUGXlpZsJfw7BylaaEej/ifATveHXCh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5647},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"aee9d77065a060ed23309e920e22c09f9aaa103f","scripts":{"tsc":"tsc -p tsconfig.json","build":"tsc -p tsconfig.json"},"_npmUser":{"name":"michael.","email":"michaelvandaele2@gmail.com"},"_npmVersion":"11.3.0","description":"Angular integration for `@abortor/core`, providing scoped cancellation tied to Angular’s lifecycle.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.1","typescript":"^5.6.3","@abortor/core":"workspace:*","@angular/core":"^19.1.0"},"peerDependencies":{"rxjs":"^7 || ^8","@abortor/core":"^0.1.0","@angular/core":">=16 <21"},"_npmOperationalInternal":{"tmp":"tmp/angular_0.1.1_1755537559611_0.22923745230372705","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@abortor/angular","version":"0.1.2","_id":"@abortor/angular@0.1.2","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"dist":{"shasum":"00fce311b285420ec63f55ccf1101cda85fb0167","tarball":"https://registry.npmjs.org/@abortor/angular/-/angular-0.1.2.tgz","fileCount":5,"integrity":"sha512-GNE+kO5bHrTVDljmECkK3GfUbgJ5gamBl5++Yo9TvprTsUJfsZUAfd779XAR+s8dNiXCqKgjkNNk2sX8kwcbAg==","signatures":[{"sig":"MEYCIQCjee47fhEsIm994LvruF5mvgYcm6ViXFC2DsZfHdMjowIhANl4NwFIfhlB9SwyF6QScWSlHSkn1Tj+rMf/c+Yg1lj2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8417},"type":"module","_from":"file:abortor-angular-0.1.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"build":"tsup","clean":"rimraf dist"},"_npmUser":{"name":"michael.","email":"michaelvandaele2@gmail.com"},"_resolved":"C:\\Users\\User\\AppData\\Local\\Temp\\cb405be0998936df5b332b834cc1c32e\\abortor-angular-0.1.2.tgz","_integrity":"sha512-GNE+kO5bHrTVDljmECkK3GfUbgJ5gamBl5++Yo9TvprTsUJfsZUAfd779XAR+s8dNiXCqKgjkNNk2sX8kwcbAg==","_npmVersion":"11.3.0","description":"Angular integration for `@abortor/core`, providing scoped cancellation tied to Angular’s lifecycle.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":">=7","@abortor/core":">=0.1.1","@angular/core":">=17"},"_npmOperationalInternal":{"tmp":"tmp/angular_0.1.2_1755553827325_0.5968084570893122","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@abortor/angular","version":"0.1.3","keywords":["abortor","angular","dependency injection","abort-scope","cancellation","typescript"],"author":{"name":"MVD"},"license":"MIT","_id":"@abortor/angular@0.1.3","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"dist":{"shasum":"356d80751d24fb440bff1edfa3f0e521a2a70f23","tarball":"https://registry.npmjs.org/@abortor/angular/-/angular-0.1.3.tgz","fileCount":5,"integrity":"sha512-JNElrZCvoIcPK6KAwB3689zFo0BJHRkuicMUGClIzOek+YgO8Hro3H03UvT9ctIYuTWRL4NmSAn7H0xrdaT3Gw==","signatures":[{"sig":"MEYCIQCzdXu+2GJ7K5kWNzn77MEomuZGDAfE8v1JY/Al7bziuAIhAKNK6xHtuDXUZSGViIZEUHKL5KEJbqr/Ff8+ikWW8qMd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8561},"type":"module","_from":"file:abortor-angular-0.1.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"build":"tsup","clean":"rimraf dist"},"_npmUser":{"name":"michael.","email":"michaelvandaele2@gmail.com"},"_resolved":"C:\\Users\\User\\AppData\\Local\\Temp\\9b132de9f7369cd4cdc8e0be8ff2f938\\abortor-angular-0.1.3.tgz","_integrity":"sha512-JNElrZCvoIcPK6KAwB3689zFo0BJHRkuicMUGClIzOek+YgO8Hro3H03UvT9ctIYuTWRL4NmSAn7H0xrdaT3Gw==","_npmVersion":"11.3.0","description":"Angular integration for `@abortor/core`, providing scoped cancellation tied to Angular’s lifecycle.","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":">=7","@abortor/core":">=0.1.1","@angular/core":">=17"},"_npmOperationalInternal":{"tmp":"tmp/angular_0.1.3_1755586434072_0.6725229390941807","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@abortor/angular","version":"0.1.4","type":"module","license":"MIT","author":{"name":"MVD"},"keywords":["abortor","angular","dependency injection","abort-scope","cancellation","typescript"],"sideEffects":false,"peerDependencies":{"@angular/core":">=17","rxjs":">=7","@abortor/core":">=0.1.1"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"types":"./dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"build":"tsup","clean":"rimraf dist","ci:publish":"pnpm publish --access public --no-git-checks"},"_id":"@abortor/angular@0.1.4","description":"Angular integration for `@abortor/core`, providing scoped cancellation tied to Angular’s lifecycle.","_integrity":"sha512-qcSDitOWgbILQijCd1G2ZDQoNS+RfF00EiHu5vGV9EmFVzaG3VupkZ/NMMA3QEiCykncWuqlj1yB67pR0QNpLg==","_resolved":"C:\\Users\\User\\AppData\\Local\\Temp\\ad63aaa3c9932089e113d17cfc9e22fc\\abortor-angular-0.1.4.tgz","_from":"file:abortor-angular-0.1.4.tgz","_nodeVersion":"22.14.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-qcSDitOWgbILQijCd1G2ZDQoNS+RfF00EiHu5vGV9EmFVzaG3VupkZ/NMMA3QEiCykncWuqlj1yB67pR0QNpLg==","shasum":"c9a8edaae9d4a3de58a3dea99f284d0a79ff25ca","tarball":"https://registry.npmjs.org/@abortor/angular/-/angular-0.1.4.tgz","fileCount":5,"unpackedSize":8702,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGjQYVw3+SrKV7BoOvrgxJNVD2h4J+XWNEzyvUPvLfuBAiEAp8kTKd3zYCRoKot87xWylw6Q2K189eQmNJevHq35ijs="}]},"_npmUser":{"name":"michael.","email":"michaelvandaele2@gmail.com"},"directories":{},"maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/angular_0.1.4_1755875712899_0.9414696855699616"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-18T01:41:26.532Z","modified":"2025-08-22T15:15:13.316Z","0.1.0":"2025-08-18T01:41:26.813Z","0.1.1":"2025-08-18T17:19:19.826Z","0.1.2":"2025-08-18T21:50:27.533Z","0.1.3":"2025-08-19T06:53:54.255Z","0.1.4":"2025-08-22T15:15:13.117Z"},"author":{"name":"MVD"},"license":"MIT","keywords":["abortor","angular","dependency injection","abort-scope","cancellation","typescript"],"description":"Angular integration for `@abortor/core`, providing scoped cancellation tied to Angular’s lifecycle.","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"readme":"# @abortor/angular\n\nAngular integration for `@abortor/core`, providing scoped cancellation tied to Angular’s lifecycle.\n\n## Features\n\n- **Scoped automatic cancellation**: Use `injectAbortScope()` to get a `Scope` that automatically disposes when the component (or service) is destroyed.\n- **Root and child scope support**: Offer `provideAbortor()` at app level, then `injectRootedAbortScope()` for per-component/sub-context scoping.\n- **Perfect for RxJS and HttpClient**: Works smoothly with `takeUntilDestroyed` and gives you fetch-like cancellation via `signal`.\n\n## Installation\n\n```bash\nnpm install @abortor/angular\n```\n\n> Supports Angular 16–20 and RxJS 7+.\n> Make sure your project also depends on `@abortor/core`.\n\n## Quick Start\n\n### Provide a root scope in your app:\n\n```ts\nimport { bootstrapApplication } from \"@angular/platform-browser\";\nimport { provideRouter } from \"@angular/router\";\nimport { provideAbortor } from \"@abortor/angular\";\nimport { AppComponent } from \"./app.component\";\nimport { appRoutes } from \"./app.routes\";\n\nbootstrapApplication(AppComponent, {\n  providers: [\n    provideRouter(appRoutes),\n    provideAbortor({ label: \"root-scope\" }),\n  ],\n});\n```\n\n### Inject and use a scoped cancellation in a component:\n\n```ts\nimport { Component, inject, DestroyRef, signal } from '@angular/core';\nimport { injectRootedAbortScope } from '@abortor/angular';\n\n@Component({...})\nexport class UsersComponent {\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly scope = injectRootedAbortScope('UsersComponent');\n\n  users = signal<any[]>([]);\n  error = signal<string | null>(null);\n\n  async reload() {\n    const req = this.scope.child({ label: 'users:reload' });\n    try {\n      const res = await req.fetch('/api/users', {\n        signal: (AbortSignal as any).timeout?.(10000),\n      });\n      if (!res.ok) throw new Error(res.statusText);\n      if (req.signal.aborted) return;\n      this.users.set(await res.json());\n    } catch (e: any) {\n      if (!['AbortError', 'TimeoutError'].includes(e.name)) {\n        this.error.set(e.message || String(e));\n      }\n    } finally {\n      req.dispose();\n    }\n  }\n}\n```\n\n## API Overview\n\n- **`provideAbortor(opts?)`**: Registers a root `Scope` via Angular DI.\n- **`injectAbortScope(opts?)`**: Creates a scope tied to the current `DestroyRef`.\n- **`injectRootedAbortScope(label?)`**: Like `injectAbortScope`, but falls back to the root scope if provided.\n\n## Why It Matters\n\n- Avoids manual `AbortController` cleanup in Angular constructs.\n- Works smoothly with built-in lifecycle (`DestroyRef`) and router cancellation patterns.\n- Adds timeout, hierarchy, and diagnostics capabilities on top of browser APIs.\n\n## API Reference\n\n[View the Reference Docs](https://abortor.netlify.app/)\n","readmeFilename":"README.md"}