{"_id":"@abortor/core","_rev":"5-15bd38ebb92e0733ca181972125bbbec","name":"@abortor/core","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@abortor/core","version":"0.1.0","keywords":["abort","scope","fetch","abort-signal","cancellation","reactive","signals","typescript","core"],"author":{"name":"MVD"},"_id":"@abortor/core@0.1.0","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"dist":{"shasum":"c6f88393e2c895a04d0e826fc7a33af9e2c288ce","tarball":"https://registry.npmjs.org/@abortor/core/-/core-0.1.0.tgz","fileCount":32,"integrity":"sha512-6HbIL3vc/iF+TQ+KCDgesB7Yl+lo3lYMfKBmBy0KSd/PMRSD43tGNg0q/oV403bwml4JYXY2ceiaxjZyHAndog==","signatures":[{"sig":"MEYCIQDXwppYOflAiS2kYS38ltyYJojxNFTQU+aqlMoZwwBXwwIhALndzYjLL9lKL27aIVIB4zYYdd7G/WpD/c7VLRF3al6k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90632},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/src/public.d.ts","default":"./dist/esm/index.js"}},"gitHead":"dd394433e270db3473c15b51da281af4c551819c","scripts":{"test":"vitest run","build":"tsc -p ./tsconfig.json && api-extractor run --local && api-documenter markdown -i temp -o etc","api:build":"tsc -p ./tsconfig.json && api-extractor run --local --diagnostics","api:check":"api-extractor run --local","docs:build":"pnpm -s run api:build && pnpm -w exec typedoc --options packages/core/typedoc.json","test:watch":"vitest","docs:deploy":"gh-pages -d docs -b gh-pages","docs:preview":"npx http-server ./docs -p 5173 -c-1"},"_npmUser":{"name":"michael.","email":"michaelvandaele2@gmail.com"},"_npmVersion":"11.3.0","description":"Hierarchical cancel scopes for the modern web/runtime.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","@types/node":"^22.17.2","@microsoft/api-extractor":"^7.52.10"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.0_1755439398756_0.31491885453450896","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@abortor/core","version":"0.1.1","keywords":["abort","scope","fetch","abort-signal","cancellation","reactive","signals","typescript","core"],"author":{"name":"MVD"},"_id":"@abortor/core@0.1.1","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"dist":{"shasum":"9b9966f1ff5ce16e9b198a288918c951a19085ed","tarball":"https://registry.npmjs.org/@abortor/core/-/core-0.1.1.tgz","fileCount":14,"integrity":"sha512-M+AIOENNZfi2/gG9IIY8R/2MKNn8u7RyNANLvzyFRXbSJZ4nAHyuXAeVy80GtpOdSjRIDU0GB8LPX1fTmZcxrA==","signatures":[{"sig":"MEUCIQCrX13IPm6S6JpMGHjBn0udxUlfmLWqVq70Gl+EErM3+QIgKD88tsUNHL7y7+Sp0/GMlrTiH9NHKVyUy5rfbwp0MK8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29015},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"b8b20fbc90b7faca3a9a4116362e54e58496661b","scripts":{"test":"vitest run","build":"pnpm run build:js && pnpm run build:types","build:js":"tsup src/index.ts --format esm,cjs --out-dir dist --clean","api:build":"tsc -p ./tsconfig.json && api-extractor run --local --diagnostics","api:check":"api-extractor run --local","docs:build":"pnpm -s run api:build && pnpm -w exec typedoc --options packages/core/typedoc.json","test:watch":"vitest","build:types":"tsc -p tsconfig.build.json","docs:deploy":"gh-pages -d docs -b gh-pages","docs:preview":"npx http-server ./docs -p 5173 -c-1"},"_npmUser":{"name":"michael.","email":"michaelvandaele2@gmail.com"},"_npmVersion":"11.3.0","description":"Hierarchical cancellation scopes for modern JavaScript runtimes.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2","@types/node":"^22.17.2","@microsoft/api-extractor":"^7.52.10"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.1_1755455241764_0.8438495532011485","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@abortor/core","version":"0.1.2","keywords":["abort","scope","fetch","abort-signal","cancellation","reactive","signals","typescript","core"],"author":{"name":"MVD"},"license":"MIT","_id":"@abortor/core@0.1.2","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"dist":{"shasum":"dadb5c8de963ef5309703289b534b4de838ddb55","tarball":"https://registry.npmjs.org/@abortor/core/-/core-0.1.2.tgz","fileCount":14,"integrity":"sha512-h07kJVvFovuKrBj9n7OnApkLzsLZhnb0M2j1FGbAoNk51dZ4R9oKeZodt+Wl9d3C3rWA3sXsnm8qWWL+m2M9xA==","signatures":[{"sig":"MEQCIBaL0rrK/fmakt305wsP4OvZAIPtbd9BamFLZCMoo2kuAiAUS8O3mtAQ97vY+wFuo2YgtrzW9OJp7NuIFlKSMqZRgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29462},"main":"./dist/index.cjs","type":"module","_from":"file:abortor-core-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"pnpm run build:js && pnpm run build:types","build:js":"tsup src/index.ts --format esm,cjs --out-dir dist --clean","api:build":"tsc -p ./tsconfig.json && api-extractor run --local --diagnostics","api:check":"api-extractor run --local","docs:build":"pnpm -s run api:build && pnpm -w exec typedoc --options packages/core/typedoc.json","test:watch":"vitest","build:types":"tsc -p tsconfig.build.json","docs:deploy":"gh-pages -d docs -b gh-pages","docs:preview":"npx http-server ./docs -p 5173 -c-1"},"_npmUser":{"name":"michael.","email":"michaelvandaele2@gmail.com"},"_resolved":"C:\\Users\\User\\AppData\\Local\\Temp\\c479554aa7fb2cc200c19a810e65c23d\\abortor-core-0.1.2.tgz","_integrity":"sha512-h07kJVvFovuKrBj9n7OnApkLzsLZhnb0M2j1FGbAoNk51dZ4R9oKeZodt+Wl9d3C3rWA3sXsnm8qWWL+m2M9xA==","_npmVersion":"11.3.0","description":"Hierarchical cancellation scopes for modern JavaScript runtimes.","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2","@types/node":"^22.17.2","vitest-fetch-mock":"^0.4.5","@microsoft/api-extractor":"^7.52.10"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.2_1755586473130_0.43442006976226843","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@abortor/core","version":"0.1.3","keywords":["abort","scope","fetch","abort-signal","cancellation","reactive","signals","typescript","core"],"author":{"name":"MVD"},"license":"MIT","_id":"@abortor/core@0.1.3","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"dist":{"shasum":"3030c6b41027ba904aee74c35ae4e9f3084d0473","tarball":"https://registry.npmjs.org/@abortor/core/-/core-0.1.3.tgz","fileCount":14,"integrity":"sha512-Uid0X94GEwiFDa6X6rsnpt7VC2e0mfv8uSPAyTWXBl9kgenO8S5W5sdqG46ecrb7A5IuY/pqp2hJGLaShNT4RQ==","signatures":[{"sig":"MEYCIQCQCYBDyOP9eYNVynDiqpuWSPRFvuRGdSXdAjLbTES4QwIhAMPJcwog4dF8k4ZIM+EZLmrlN90M+dkfyNijj7vqU4bZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36700},"main":"./dist/index.cjs","type":"module","_from":"file:abortor-core-0.1.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"pnpm run build:js && pnpm run build:types","build:js":"tsup src/index.ts --format esm,cjs --out-dir dist --clean","api:build":"tsc -p ./tsconfig.json && api-extractor run --local --diagnostics","api:check":"api-extractor run --local","ci:publish":"pnpm publish --access public --no-git-checks","docs:build":"pnpm -s run api:build && pnpm -w exec typedoc --options packages/core/typedoc.json","test:watch":"vitest","build:types":"tsc -p tsconfig.build.json","docs:deploy":"gh-pages -d docs -b gh-pages","docs:preview":"npx http-server ./docs -p 5173 -c-1"},"_npmUser":{"name":"michael.","email":"michaelvandaele2@gmail.com"},"_resolved":"C:\\Users\\User\\AppData\\Local\\Temp\\e98562f908925372f9ba8282b9e8022d\\abortor-core-0.1.3.tgz","_integrity":"sha512-Uid0X94GEwiFDa6X6rsnpt7VC2e0mfv8uSPAyTWXBl9kgenO8S5W5sdqG46ecrb7A5IuY/pqp2hJGLaShNT4RQ==","_npmVersion":"11.3.0","description":"Hierarchical cancellation scopes for modern JavaScript runtimes.","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.0","vitest":"^3.2.4","typescript":"^5.9.2","@types/node":"^22.17.2","vitest-fetch-mock":"^0.4.5","@microsoft/api-extractor":"^7.52.10"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.3_1755874451815_0.910471731636417","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@abortor/core","version":"0.1.4","type":"module","author":{"name":"MVD"},"license":"MIT","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","keywords":["abort","scope","fetch","abort-signal","cancellation","reactive","signals","typescript","core"],"engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs","default":"./dist/index.js"},"./package.json":"./package.json"},"devDependencies":{"@microsoft/api-extractor":"^7.52.10","@types/node":"^22.17.2","tsup":"^8.5.0","typescript":"^5.9.2","vitest":"^3.2.4","vitest-fetch-mock":"^0.4.5"},"publishConfig":{"access":"public"},"scripts":{"test":"vitest run","test:watch":"vitest","api:build":"tsc -p ./tsconfig.json && api-extractor run --local --diagnostics","api:check":"api-extractor run --local","build:js":"tsup src/index.ts --format esm,cjs --out-dir dist --clean","build:types":"tsc -p tsconfig.build.json","build":"pnpm run build:js && pnpm run build:types","docs:build":"pnpm -s run api:build && pnpm -w exec typedoc --options packages/core/typedoc.json","docs:preview":"npx http-server ./docs -p 5173 -c-1","docs:deploy":"gh-pages -d docs -b gh-pages","ci:publish":"pnpm publish --access public --no-git-checks"},"_id":"@abortor/core@0.1.4","description":"Hierarchical cancellation scopes for modern JavaScript runtimes.","_integrity":"sha512-GxMi2kmYIOuJzTki1WmJMqp0qLUuEdiQOtm1Pgp0XIMYP+KRB+gBodAt21gz8k/kMgDAXY67+sz8a8eXcJuewQ==","_resolved":"C:\\Users\\User\\AppData\\Local\\Temp\\ed73e888bb41f3015afcaf14e3caf4e6\\abortor-core-0.1.4.tgz","_from":"file:abortor-core-0.1.4.tgz","_nodeVersion":"22.14.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-GxMi2kmYIOuJzTki1WmJMqp0qLUuEdiQOtm1Pgp0XIMYP+KRB+gBodAt21gz8k/kMgDAXY67+sz8a8eXcJuewQ==","shasum":"9395c7652b0e5b0e74e3514283f98fde60710764","tarball":"https://registry.npmjs.org/@abortor/core/-/core-0.1.4.tgz","fileCount":14,"unpackedSize":36700,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCC1e3j3iCx81VCh78/uFlfzwG3HZomG3e2sJumgz67KwIgFIEgU0qDaxuMzS4/NM+jl4p6vgvk9h1u4d5Ganl6mpM="}]},"_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/core_0.1.4_1755875680510_0.868856072387381"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-17T14:03:18.674Z","modified":"2025-08-22T15:14:40.922Z","0.1.0":"2025-08-17T14:03:18.950Z","0.1.1":"2025-08-17T18:27:21.963Z","0.1.2":"2025-08-19T06:54:33.291Z","0.1.3":"2025-08-22T14:54:11.988Z","0.1.4":"2025-08-22T15:14:40.690Z"},"author":{"name":"MVD"},"license":"MIT","keywords":["abort","scope","fetch","abort-signal","cancellation","reactive","signals","typescript","core"],"description":"Hierarchical cancellation scopes for modern JavaScript runtimes.","maintainers":[{"name":"michael.","email":"michaelvandaele2@gmail.com"}],"readme":"# @abortor/core\n\nHierarchical cancellation scopes for modern JavaScript runtimes.\n\nBuilt on top of the platform's native **AbortController** / **AbortSignal**, `@abortor/core` makes cancellation composable, structured, and developer‑friendly.\n\n---\n\n## Features\n\n- **Hierarchical cancellation**: disposing a parent scope cancels all of its descendants.\n- **Scoped async**: run work inside a `scope.run(fn)` and it automatically tracks lifetime.\n- **Fetch integration**: `scope.fetch()` threads the scope's signal into `fetch` calls.\n- **Timeouts & composition**: use `scope.timeout(ms)` or combine signals with `composeAny()`.\n- **Diagnostics**: dev‑mode warnings, strict mode checks, and perf marks for profiling.\n- **Fallbacks**: uses `AbortSignal.any()` and `AbortSignal.timeout()` if available; provides shims otherwise.\n\n---\n\n## Installation\n\n```bash\nnpm install @abortor/core\n# or\npnpm add @abortor/core\nyarn add @abortor/core\n```\n\nRequires Node.js 18+ or modern browsers with Abort APIs.\n\n---\n\n## Quick Start\n\n```ts\nimport { scope } from \"@abortor/core\";\n\n// Create a new scope (optionally label it)\nconst s = scope({ label: \"SearchBox\" });\n\n// Run async work inside the scope\nconst result = await s.run(async (sc) => {\n  const res = await sc.fetch(\"https://jsonplaceholder.typicode.com/users\");\n  return res.json();\n});\n\n// Later, cancel everything under this scope\ns.dispose(\"navigated away\");\n```\n\n---\n\n## API Overview\n\n### `scope(opts?)`\n\nCreates a new cancellation scope.\n\n```ts\nconst s = scope({ label: string, parent: Scope });\n```\n\nA `Scope` exposes:\n\n- `signal: AbortSignal` — propagate into APIs like `fetch`\n- `run(fn)` — run async work bound to the scope\n- `child(opts?)` — create a nested scope\n- `dispose(reason?)` — cancel this scope and all children\n- `fetch(input, init?)` — like `fetch`, but auto‑uses the scope’s signal\n- `timeout(ms, reason?)` — create a timeout signal combined with this scope\n- `race(promises)` / `all(promises)` — helpers that cancel correctly\n\n### `withScope(fn, opts?)`\n\nUtility to create a scope, run work, and auto‑dispose.\n\n```ts\nimport { withScope } from \"@abortor/core\";\n\nawait withScope(async (sc) => {\n  await sc.fetch(\"/api/data\");\n}); // auto‑disposed here\n```\n\n### Diagnostics\n\n```ts\nimport { configureDiagnostics } from \"@abortor/core\";\n\nconfigureDiagnostics({\n  warnings: true,\n  strict: false,\n  perf: false,\n});\n```\n\n- **warnings**: console.warn on leaks\n- **strict**: throw if missing signal usage\n- **perf**: mark/measure scopes in PerformanceTimeline\n\n---\n\n## Utilities\n\n### `composeAny(signals: AbortSignal[]): AbortSignal`\n\nCombine multiple signals; aborts when any does.\n\n### `withTimeout(ms: number, parent?: AbortSignal, reason?: string): AbortSignal`\n\nCreate a timeout signal, optionally combined with a parent.\n\n---\n\n---\n\n## Related packages\n\nAlso see:\n\n[`@abortor/angular`](https://www.npmjs.com/package/@abortor/angular) – Angular-specific integration with component lifecycle-aware cancellation.\n\n[`@abortor/react`](https://www.npmjs.com/package/@abortor/react) — React hooks and utilities for cancellation-aware components (requires React 18+).\n\n## API Reference\n\n[View the Reference Docs](https://abortor.netlify.app/)\n","readmeFilename":"README.md"}