From e95ff6445d6b1c61401fe07687b3b21f8d8f777d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?= Date: Sun, 22 Feb 2026 16:34:40 -0300 Subject: [PATCH 1/8] test: add angular required input reproduction --- packages/angular-pacer/package.json | 4 + .../tests/queuer/injectQueuedValue.spec.ts | 38 +++ packages/angular-pacer/tests/test-setup.ts | 5 + packages/angular-pacer/tsconfig.base.json | 3 + packages/angular-pacer/tsconfig.json | 11 +- packages/angular-pacer/tsconfig.lib.json | 5 + packages/angular-pacer/tsconfig.spec.json | 11 + packages/angular-pacer/tsdown.config.ts | 1 + packages/angular-pacer/vitest.config.ts | 5 +- pnpm-lock.yaml | 224 ++++++++++++++++++ 10 files changed, 300 insertions(+), 7 deletions(-) create mode 100644 packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts create mode 100644 packages/angular-pacer/tests/test-setup.ts create mode 100644 packages/angular-pacer/tsconfig.base.json create mode 100644 packages/angular-pacer/tsconfig.lib.json create mode 100644 packages/angular-pacer/tsconfig.spec.json diff --git a/packages/angular-pacer/package.json b/packages/angular-pacer/package.json index 3c8a443d9..f5f8d5222 100644 --- a/packages/angular-pacer/package.json +++ b/packages/angular-pacer/package.json @@ -112,7 +112,11 @@ "@tanstack/pacer": "workspace:*" }, "devDependencies": { + "@analogjs/vite-plugin-angular": "^2.2.3", + "@analogjs/vitest-angular": "^2.2.3", + "@angular/compiler": "^21.2.12", "@angular/core": "^21.2.12", + "jsdom": "^28.1.0", "@types/node": "^25.7.0" }, "peerDependencies": { diff --git a/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts b/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts new file mode 100644 index 000000000..a998396d0 --- /dev/null +++ b/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts @@ -0,0 +1,38 @@ +import { Component, input } from '@angular/core' +import { TestBed } from '@angular/core/testing' +import { injectQueuedValue } from '../../src/queuer/injectQueuedValue' + +describe('injectQueuedValue', () => { + describe("with input signals", () => { + @Component({ + selector: 'pacer-test-child', + standalone: true, + template: '', + }) + class ChildComponent { + readonly value = input.required() + readonly queued = injectQueuedValue(this.value, { wait: 0 }) + } + + @Component({ + selector: 'pacer-test-host', + standalone: true, + imports: [ChildComponent], + template: '', + }) + class HostComponent { } + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [HostComponent], + }).compileComponents() + }) + + it('does not throw when used with input.required() during component initialization', () => { + expect(() => { + const fixture = TestBed.createComponent(HostComponent) + fixture.detectChanges() + }).not.toThrow() + }) + }) +}) \ No newline at end of file diff --git a/packages/angular-pacer/tests/test-setup.ts b/packages/angular-pacer/tests/test-setup.ts new file mode 100644 index 000000000..046722c7f --- /dev/null +++ b/packages/angular-pacer/tests/test-setup.ts @@ -0,0 +1,5 @@ +import '@angular/compiler' +import '@analogjs/vitest-angular/setup-snapshots' +import { setupTestBed } from '@analogjs/vitest-angular/setup-testbed' + +setupTestBed() diff --git a/packages/angular-pacer/tsconfig.base.json b/packages/angular-pacer/tsconfig.base.json new file mode 100644 index 000000000..4082f16a5 --- /dev/null +++ b/packages/angular-pacer/tsconfig.base.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/angular-pacer/tsconfig.json b/packages/angular-pacer/tsconfig.json index 66baec5ea..b64539f8d 100644 --- a/packages/angular-pacer/tsconfig.json +++ b/packages/angular-pacer/tsconfig.json @@ -1,8 +1,7 @@ { - "extends": "../../tsconfig.json", - "compilerOptions": { - "jsx": "preserve" - }, - "include": ["src", "vitest.config.ts", "tests"], - "exclude": ["eslint.config.js"] + "files": [], + "references": [ + { "path": "./tsconfig.lib.json" }, + { "path": "./tsconfig.spec.json" } + ] } diff --git a/packages/angular-pacer/tsconfig.lib.json b/packages/angular-pacer/tsconfig.lib.json new file mode 100644 index 000000000..19aa5520e --- /dev/null +++ b/packages/angular-pacer/tsconfig.lib.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.base.json", + "include": ["src", "vitest.config.ts"], + "exclude": ["eslint.config.js", "tests"] +} diff --git a/packages/angular-pacer/tsconfig.spec.json b/packages/angular-pacer/tsconfig.spec.json new file mode 100644 index 000000000..07715c859 --- /dev/null +++ b/packages/angular-pacer/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "noEmit": false, + "target": "ES2022", + "types": ["vitest/globals", "node"] + }, + "files": ["tests/test-setup.ts"], + "include": ["tests/**/*.spec.ts", "tests/**/*.d.ts"], + "references": [{ "path": "./tsconfig.lib.json" }] +} diff --git a/packages/angular-pacer/tsdown.config.ts b/packages/angular-pacer/tsdown.config.ts index 24dd8a5c6..bbd20035a 100644 --- a/packages/angular-pacer/tsdown.config.ts +++ b/packages/angular-pacer/tsdown.config.ts @@ -1,6 +1,7 @@ import { defineConfig } from 'tsdown' export default defineConfig({ + tsconfig: './tsconfig.lib.json', entry: [ './src/index.ts', './src/async-batcher/index.ts', diff --git a/packages/angular-pacer/vitest.config.ts b/packages/angular-pacer/vitest.config.ts index 514aa720b..3d33b308a 100644 --- a/packages/angular-pacer/vitest.config.ts +++ b/packages/angular-pacer/vitest.config.ts @@ -1,12 +1,15 @@ import { defineConfig } from 'vitest/config' +import angular from '@analogjs/vite-plugin-angular' import packageJson from './package.json' with { type: 'json' } export default defineConfig({ + plugins: [angular()], test: { name: packageJson.name, dir: './tests', watch: false, - environment: 'happy-dom', + environment: 'jsdom', globals: true, + setupFiles: ['./tests/test-setup.ts'], }, }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 97cef0aae..16a7ae3f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4328,12 +4328,24 @@ importers: specifier: workspace:* version: link:../pacer devDependencies: + '@analogjs/vite-plugin-angular': + specifier: ^2.2.3 + version: 2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)) + '@analogjs/vitest-angular': + specifier: ^2.2.3 + version: 2.2.3(@analogjs/vite-plugin-angular@2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)))(@angular-devkit/architect@0.2102.13(chokidar@5.0.0))(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0))) + '@angular/compiler': + specifier: ^21.2.12 + version: 21.2.15 '@angular/core': specifier: ^21.2.12 version: 21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2) '@types/node': specifier: ^25.7.0 version: 25.7.0 + jsdom: + specifier: ^28.1.0 + version: 28.1.0 packages/pacer: dependencies: @@ -4536,6 +4548,9 @@ importers: packages: + '@acemir/cssom@0.9.31': + resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} + '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} @@ -4599,6 +4614,24 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@analogjs/vite-plugin-angular@2.2.3': + resolution: {integrity: sha512-OqVfiJsaHdHMxzvK0heVvp8MenSXh+xib6/p+v3d44kJ3J7ooD4gRx/jKC350zkgRKwcZc3a0ybGUnG6LEF7mg==} + peerDependencies: + '@angular-devkit/build-angular': ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 + '@angular/build': ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 + peerDependenciesMeta: + '@angular-devkit/build-angular': + optional: true + '@angular/build': + optional: true + + '@analogjs/vitest-angular@2.2.3': + resolution: {integrity: sha512-514A8RqT4sQnWj/3pHnoGrvDLYjcUTWL3d00GCQ4MVRUpisUg2R8tC/PZ/3ZARK5SskIwy5LwPEg4RFX0iOSug==} + peerDependencies: + '@analogjs/vite-plugin-angular': '*' + '@angular-devkit/architect': '>=0.1500.0 < 0.2200.0' + vitest: ^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 + '@angular-devkit/architect@0.2102.13': resolution: {integrity: sha512-fheyi0gPx6b7tT+WQ+ePlzdGqKjPLUK72wg5Z9pkVtQ5+VN/8yB9mlRlmoivngd2FeNG9wMeNynWZGYycnOWVw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} @@ -4736,6 +4769,9 @@ packages: resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + '@asamuzakjp/dom-selector@7.1.1': resolution: {integrity: sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -7169,6 +7205,9 @@ packages: peerDependencies: preact: '>=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0' + '@ts-morph/common@0.22.0': + resolution: {integrity: sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==} + '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -7817,6 +7856,9 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + code-block-writer@12.0.0: + resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -7889,6 +7931,10 @@ packages: css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssstyle@6.2.0: + resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} + engines: {node: '>=20'} + csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -8823,6 +8869,15 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + jsdom@28.1.0: + resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsdom@29.1.1: resolution: {integrity: sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} @@ -9142,6 +9197,11 @@ packages: resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -9403,6 +9463,9 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -10069,6 +10132,9 @@ packages: peerDependencies: typescript: '>=4.0.0' + ts-morph@21.0.1: + resolution: {integrity: sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==} + ts-pattern@5.9.0: resolution: {integrity: sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg==} @@ -10600,6 +10666,8 @@ packages: snapshots: + '@acemir/cssom@0.9.31': {} + '@adobe/css-tools@4.4.4': {} '@algolia/abtesting@1.14.1': @@ -10691,6 +10759,18 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 + '@analogjs/vite-plugin-angular@2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0))': + dependencies: + ts-morph: 21.0.1 + optionalDependencies: + '@angular/build': 21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0) + + '@analogjs/vitest-angular@2.2.3(@analogjs/vite-plugin-angular@2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)))(@angular-devkit/architect@0.2102.13(chokidar@5.0.0))(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))': + dependencies: + '@analogjs/vite-plugin-angular': 2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)) + '@angular-devkit/architect': 0.2102.13(chokidar@5.0.0) + vitest: 4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)) + '@angular-devkit/architect@0.2102.13(chokidar@5.0.0)': dependencies: '@angular-devkit/core': 21.2.13(chokidar@5.0.0) @@ -10719,6 +10799,61 @@ snapshots: transitivePeerDependencies: - chokidar + '@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@angular-devkit/architect': 0.2102.13(chokidar@5.0.0) + '@angular/compiler': 21.2.15 + '@angular/compiler-cli': 21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3) + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-split-export-declaration': 7.24.7 + '@inquirer/confirm': 5.1.21(@types/node@25.7.0) + '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.97.3)(yaml@2.9.0)) + beasties: 0.4.1 + browserslist: 4.28.2 + esbuild: 0.27.3 + https-proxy-agent: 7.0.6 + istanbul-lib-instrument: 6.0.3 + jsonc-parser: 3.3.1 + listr2: 9.0.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + parse5-html-rewriting-stream: 8.0.0 + picomatch: 4.0.4 + piscina: 5.1.4 + rolldown: 1.0.0-rc.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + sass: 1.97.3 + semver: 7.7.4 + source-map-support: 0.5.21 + tinyglobby: 0.2.15 + tslib: 2.8.1 + typescript: 6.0.3 + undici: 7.24.4 + vite: 7.3.2(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.97.3)(yaml@2.9.0) + watchpack: 2.5.1 + optionalDependencies: + '@angular/core': 21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2) + '@angular/platform-browser': 21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)) + lmdb: 3.5.1 + postcss: 8.5.15 + vitest: 4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + - '@types/node' + - chokidar + - jiti + - lightningcss + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + optional: true + '@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)': dependencies: '@ampproject/remapping': 2.3.0 @@ -10863,6 +10998,14 @@ snapshots: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 + '@asamuzakjp/dom-selector@6.8.1': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.2.1 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.3.5 + '@asamuzakjp/dom-selector@7.1.1': dependencies: '@asamuzakjp/generational-cache': 1.0.1 @@ -12951,6 +13094,13 @@ snapshots: '@testing-library/dom': 8.20.1 preact: 10.29.2 + '@ts-morph/common@0.22.0': + dependencies: + fast-glob: 3.3.3 + minimatch: 9.0.9 + mkdirp: 3.0.1 + path-browserify: 1.0.1 + '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@4.1.0': @@ -13642,6 +13792,8 @@ snapshots: clsx@2.1.1: {} + code-block-writer@12.0.0: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -13708,6 +13860,13 @@ snapshots: css.escape@1.5.1: {} + cssstyle@6.2.0: + dependencies: + '@asamuzakjp/css-color': 5.1.11 + '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) + css-tree: 3.2.1 + lru-cache: 11.3.5 + csstype@3.2.3: {} data-urls@7.0.0: @@ -14778,6 +14937,33 @@ snapshots: dependencies: argparse: 2.0.1 + jsdom@28.1.0: + dependencies: + '@acemir/cssom': 0.9.31 + '@asamuzakjp/dom-selector': 6.8.1 + '@bramus/specificity': 2.4.2 + '@exodus/bytes': 1.15.0 + cssstyle: 6.2.0 + data-urls: 7.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 6.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + parse5: 8.0.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 6.0.1 + undici: 7.25.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.1 + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - '@noble/hashes' + - supports-color + jsdom@29.1.1: dependencies: '@asamuzakjp/css-color': 5.1.11 @@ -15102,6 +15288,8 @@ snapshots: dependencies: minipass: 7.1.3 + mkdirp@3.0.1: {} + mri@1.2.0: {} mrmime@2.0.1: {} @@ -15568,6 +15756,8 @@ snapshots: parseurl@1.3.3: {} + path-browserify@1.0.1: {} + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -16293,6 +16483,11 @@ snapshots: picomatch: 4.0.4 typescript: 6.0.3 + ts-morph@21.0.1: + dependencies: + '@ts-morph/common': 0.22.0 + code-block-writer: 12.0.0 + ts-pattern@5.9.0: {} tsconfig-paths@4.2.0: @@ -16545,6 +16740,35 @@ snapshots: optionalDependencies: vite: 8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0) + vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.7 + '@vitest/mocker': 4.1.7(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.7 + '@vitest/runner': 4.1.7 + '@vitest/snapshot': 4.1.7 + '@vitest/spy': 4.1.7 + '@vitest/utils': 4.1.7 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.1.2 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 25.7.0 + happy-dom: 20.9.0 + jsdom: 28.1.0 + transitivePeerDependencies: + - msw + vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.7 From 4656d83ff9d5583485eca4a6bc05deb67868e91b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?= Date: Sun, 22 Feb 2026 17:11:45 -0300 Subject: [PATCH 2/8] fix: call value inside linked signal --- packages/angular-pacer/src/queuer/injectQueuedValue.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/angular-pacer/src/queuer/injectQueuedValue.ts b/packages/angular-pacer/src/queuer/injectQueuedValue.ts index 9eff79c03..7fffdc7f6 100644 --- a/packages/angular-pacer/src/queuer/injectQueuedValue.ts +++ b/packages/angular-pacer/src/queuer/injectQueuedValue.ts @@ -69,10 +69,6 @@ export function injectQueuedValue< const hasInitialValue = (initialOptionsOrSelector !== undefined && !hasSelector) || maybeSelector !== undefined - - const initialValue = hasInitialValue - ? (initialValueOrOptions as TValue) - : value() const initialOptions = hasInitialValue ? (initialOptionsOrSelector as QueuerOptions) : (initialValueOrOptions as QueuerOptions) @@ -83,7 +79,11 @@ export function injectQueuedValue< | undefined) const linkedValue = linkedSignal(() => value()) - const queuedValue = signal(initialValue) + const queuedValue = linkedSignal(() => { + return hasInitialValue + ? (initialValueOrOptions as TValue) + : untracked(value) + }) const queued = injectQueuedSignal( (item) => { From f431ed165f1e77f732b6da03a39b1f897d420bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?= Date: Sun, 22 Feb 2026 17:25:56 -0300 Subject: [PATCH 3/8] fix: align angular queued value api --- .../injectQueuedValue/src/app/app.html | 2 +- .../angular/injectQueuedValue/src/app/app.ts | 2 +- .../injectQueuedValue/src/app/inputapp.ts | 2 +- .../src/queuer/injectQueuedValue.ts | 28 ++++++--- .../tests/queuer/injectQueuedValue.spec.ts | 62 ++++++++++++++++++- 5 files changed, 80 insertions(+), 16 deletions(-) diff --git a/examples/angular/injectQueuedValue/src/app/app.html b/examples/angular/injectQueuedValue/src/app/app.html index ad483d978..b445f9c8f 100644 --- a/examples/angular/injectQueuedValue/src/app/app.html +++ b/examples/angular/injectQueuedValue/src/app/app.html @@ -4,7 +4,7 @@

injectQueuedValue

Source (instant): {{ source() }}

Value (queued): {{ queued() }}

-

Queue length: {{ queued().length }}

+

Queue length: {{ queued.queuer.state().items.length }}

diff --git a/examples/angular/injectQueuedValue/src/app/app.ts b/examples/angular/injectQueuedValue/src/app/app.ts index c1e04c46d..7c48b6979 100644 --- a/examples/angular/injectQueuedValue/src/app/app.ts +++ b/examples/angular/injectQueuedValue/src/app/app.ts @@ -12,7 +12,7 @@ export class App { protected readonly source = signal('') // A queued value: changes are applied in-order, with an optional delay between items. - // `value()` is the current processed value, and `items()` exposes the pending queue. + // `queued()` is the current processed value, and `queued.queuer.state().items` exposes the pending queue. protected readonly queued = injectQueuedValue(this.source, { wait: 500 }, (state) => ({ items: state.items, })) diff --git a/examples/angular/injectQueuedValue/src/app/inputapp.ts b/examples/angular/injectQueuedValue/src/app/inputapp.ts index 978d1cb7f..96341b6c7 100644 --- a/examples/angular/injectQueuedValue/src/app/inputapp.ts +++ b/examples/angular/injectQueuedValue/src/app/inputapp.ts @@ -8,7 +8,7 @@ import { injectQueuedValue } from '@tanstack/angular-pacer'

NG0950

value: {{ value() }}

Value (queued): {{ queued() }}

-

Queue length: {{ queued().length }}

+

Queue length: {{ queued.queuer.state().items.length }}

`, }) diff --git a/packages/angular-pacer/src/queuer/injectQueuedValue.ts b/packages/angular-pacer/src/queuer/injectQueuedValue.ts index 7fffdc7f6..8dde185bb 100644 --- a/packages/angular-pacer/src/queuer/injectQueuedValue.ts +++ b/packages/angular-pacer/src/queuer/injectQueuedValue.ts @@ -1,8 +1,14 @@ -import { effect, linkedSignal, signal } from '@angular/core' +import { effect, linkedSignal, untracked } from '@angular/core' import { injectQueuedSignal } from './injectQueuedSignal' -import type { QueuedSignal } from './injectQueuedSignal' import type { Signal } from '@angular/core' import type { QueuerOptions, QueuerState } from '@tanstack/pacer/queuer' +import { AngularQueuer } from './injectQueuer' + +export interface QueuedValueSignal { + (): TValue + addItem: AngularQueuer['addItem'] + queuer: AngularQueuer +} /** * An Angular function that creates a queued value that processes state changes in order with an optional delay. @@ -38,7 +44,7 @@ export function injectQueuedValue< value: Signal, options?: QueuerOptions, selector?: (state: QueuerState) => TSelected, -): QueuedSignal +): QueuedValueSignal export function injectQueuedValue< TValue, TSelected extends Pick, 'items'> = Pick< @@ -50,7 +56,7 @@ export function injectQueuedValue< initialValue: TValue, options?: QueuerOptions, selector?: (state: QueuerState) => TSelected, -): QueuedSignal +): QueuedValueSignal export function injectQueuedValue< TValue, TSelected extends Pick, 'items'> = Pick< @@ -64,7 +70,7 @@ export function injectQueuedValue< | QueuerOptions | ((state: QueuerState) => TSelected), maybeSelector?: (state: QueuerState) => TSelected, -): QueuedSignal { +): QueuedValueSignal { const hasSelector = typeof initialOptionsOrSelector === 'function' const hasInitialValue = (initialOptionsOrSelector !== undefined && !hasSelector) || @@ -75,10 +81,9 @@ export function injectQueuedValue< const selector = hasInitialValue ? maybeSelector : (initialOptionsOrSelector as - | ((state: QueuerState) => TSelected) - | undefined) + | ((state: QueuerState) => TSelected) + | undefined) - const linkedValue = linkedSignal(() => value()) const queuedValue = linkedSignal(() => { return hasInitialValue ? (initialValueOrOptions as TValue) @@ -94,8 +99,11 @@ export function injectQueuedValue< ) effect(() => { - queued.addItem(linkedValue()) + queued.addItem(value()) }) - return queued + return Object.assign(queuedValue, { + addItem: queued.addItem.bind(queued), + queuer: queued.queuer, + }) as QueuedValueSignal } diff --git a/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts b/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts index a998396d0..f21049013 100644 --- a/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts +++ b/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts @@ -1,9 +1,65 @@ -import { Component, input } from '@angular/core' +import { Component, input, signal } from '@angular/core' import { TestBed } from '@angular/core/testing' +import { vi } from 'vitest' import { injectQueuedValue } from '../../src/queuer/injectQueuedValue' +beforeEach(() => { + vi.useFakeTimers() +}) + +afterEach(() => { + vi.useRealTimers() +}) + describe('injectQueuedValue', () => { - describe("with input signals", () => { + describe('behaviour', () => { + it('returns a queued signal with addItem and queuer', () => { + const value = signal('initial') + const queued = TestBed.runInInjectionContext(() => + injectQueuedValue(value, { + wait: 0, + }), + ) + expect(typeof queued).toBe('function') + expect(queued.addItem).toBeDefined() + expect(queued.queuer).toBeDefined() + }) + + it('pushes source signal value into the queue when it changes', () => { + const value = signal('initial') + const queued = TestBed.runInInjectionContext(() => + injectQueuedValue(value, { + wait: 0, + }), + ) + TestBed.tick() + expect(queued()).toBe('initial') + value.set('second') + TestBed.tick() + expect(queued()).toBe('second') + }) + + it('waits for the wait time before processing the next item', () => { + const value = signal('initial') + const queued = TestBed.runInInjectionContext(() => + injectQueuedValue(value, { + wait: 1000, + }), + ) + TestBed.tick() + value.set('second') + TestBed.tick() + value.set('third') + TestBed.tick() + expect(queued()).toBe('initial') + vi.advanceTimersByTime(1000) + expect(queued()).toBe('second') + vi.advanceTimersByTime(1000) + expect(queued()).toBe('third') + }) + }) + + describe('with input signals', () => { @Component({ selector: 'pacer-test-child', standalone: true, @@ -35,4 +91,4 @@ describe('injectQueuedValue', () => { }).not.toThrow() }) }) -}) \ No newline at end of file +}) From 8bc8a9ebed920ca9d8bd13a5c2cd54a9a04e0dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?= Date: Sun, 22 Feb 2026 17:51:11 -0300 Subject: [PATCH 4/8] fix: linting with new angular ts config --- packages/angular-pacer/eslint.config.js | 17 ++++++++++++++++- .../src/queuer/injectQueuedValue.ts | 6 +++--- .../tests/queuer/injectQueuedValue.spec.ts | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/angular-pacer/eslint.config.js b/packages/angular-pacer/eslint.config.js index 50a11bbd5..c5af2db87 100644 --- a/packages/angular-pacer/eslint.config.js +++ b/packages/angular-pacer/eslint.config.js @@ -1,6 +1,21 @@ // @ts-check import rootConfig from '../../eslint.config.js' +import { fileURLToPath } from 'node:url' + +const tsconfigRootDir = fileURLToPath(new URL('.', import.meta.url)) /** @type {import('eslint').Linter.Config[]} */ -export default [...rootConfig] +export default [ + ...rootConfig, + { + name: 'angular-pacer/typescript-projects', + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.lib.json', './tsconfig.spec.json'], + tsconfigRootDir, + }, + }, + }, +] diff --git a/packages/angular-pacer/src/queuer/injectQueuedValue.ts b/packages/angular-pacer/src/queuer/injectQueuedValue.ts index 8dde185bb..e65e27e94 100644 --- a/packages/angular-pacer/src/queuer/injectQueuedValue.ts +++ b/packages/angular-pacer/src/queuer/injectQueuedValue.ts @@ -2,7 +2,7 @@ import { effect, linkedSignal, untracked } from '@angular/core' import { injectQueuedSignal } from './injectQueuedSignal' import type { Signal } from '@angular/core' import type { QueuerOptions, QueuerState } from '@tanstack/pacer/queuer' -import { AngularQueuer } from './injectQueuer' +import type { AngularQueuer } from './injectQueuer' export interface QueuedValueSignal { (): TValue @@ -81,8 +81,8 @@ export function injectQueuedValue< const selector = hasInitialValue ? maybeSelector : (initialOptionsOrSelector as - | ((state: QueuerState) => TSelected) - | undefined) + | ((state: QueuerState) => TSelected) + | undefined) const queuedValue = linkedSignal(() => { return hasInitialValue diff --git a/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts b/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts index f21049013..13e5c607c 100644 --- a/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts +++ b/packages/angular-pacer/tests/queuer/injectQueuedValue.spec.ts @@ -76,7 +76,7 @@ describe('injectQueuedValue', () => { imports: [ChildComponent], template: '', }) - class HostComponent { } + class HostComponent {} beforeEach(async () => { await TestBed.configureTestingModule({ From da00bff56a53ed3eba9d1d35f7caada0173633fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?= Date: Sun, 22 Feb 2026 17:57:57 -0300 Subject: [PATCH 5/8] docs: update angular generated docs --- .../reference/functions/injectQueuedValue.md | 26 ++++--- docs/framework/angular/reference/index.md | 1 + .../reference/interfaces/AsyncQueuedSignal.md | 10 +-- .../reference/interfaces/QueuedSignal.md | 10 +-- .../reference/interfaces/QueuedValueSignal.md | 78 +++++++++++++++++++ .../src/queuer/injectQueuedValue.ts | 7 +- packages/angular-pacer/tsconfig.docs.json | 5 +- 7 files changed, 110 insertions(+), 27 deletions(-) create mode 100644 docs/framework/angular/reference/interfaces/QueuedValueSignal.md diff --git a/docs/framework/angular/reference/functions/injectQueuedValue.md b/docs/framework/angular/reference/functions/injectQueuedValue.md index 9c3ed8576..7e3fe4a92 100644 --- a/docs/framework/angular/reference/functions/injectQueuedValue.md +++ b/docs/framework/angular/reference/functions/injectQueuedValue.md @@ -11,10 +11,10 @@ title: injectQueuedValue function injectQueuedValue( value, options?, -selector?): QueuedSignal; +selector?): QueuedValueSignal; ``` -Defined in: [angular-pacer/src/queuer/injectQueuedValue.ts:31](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/queuer/injectQueuedValue.ts#L31) +Defined in: [angular-pacer/src/queuer/injectQueuedValue.ts:38](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/queuer/injectQueuedValue.ts#L38) An Angular function that creates a queued value that processes state changes in order with an optional delay. This function uses injectQueuedSignal internally to manage a queue of state changes and apply them sequentially. @@ -23,9 +23,10 @@ The queued value will process changes in the order they are received, with optio processing each change. This is useful for handling state updates that need to be processed in a specific order, like animations or sequential UI updates. -The function returns a tuple containing: -- A Signal that provides the current queued value -- The queuer instance with control methods +The function returns a callable object containing: +- `queued()`: A signal-like function that provides the current queued value +- `queued.addItem(...)`: A method to enqueue additional values +- `queued.queuer`: The queuer instance with control methods and state ### Type Parameters @@ -53,7 +54,7 @@ The function returns a tuple containing: ### Returns -[`QueuedSignal`](../interfaces/QueuedSignal.md)\<`TValue`, `TSelected`\> +[`QueuedValueSignal`](../interfaces/QueuedValueSignal.md)\<`TValue`, `TSelected`\> ### Example @@ -75,10 +76,10 @@ function injectQueuedValue( value, initialValue, options?, -selector?): QueuedSignal; +selector?): QueuedValueSignal; ``` -Defined in: [angular-pacer/src/queuer/injectQueuedValue.ts:42](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/queuer/injectQueuedValue.ts#L42) +Defined in: [angular-pacer/src/queuer/injectQueuedValue.ts:49](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/queuer/injectQueuedValue.ts#L49) An Angular function that creates a queued value that processes state changes in order with an optional delay. This function uses injectQueuedSignal internally to manage a queue of state changes and apply them sequentially. @@ -87,9 +88,10 @@ The queued value will process changes in the order they are received, with optio processing each change. This is useful for handling state updates that need to be processed in a specific order, like animations or sequential UI updates. -The function returns a tuple containing: -- A Signal that provides the current queued value -- The queuer instance with control methods +The function returns a callable object containing: +- `queued()`: A signal-like function that provides the current queued value +- `queued.addItem(...)`: A method to enqueue additional values +- `queued.queuer`: The queuer instance with control methods and state ### Type Parameters @@ -121,7 +123,7 @@ The function returns a tuple containing: ### Returns -[`QueuedSignal`](../interfaces/QueuedSignal.md)\<`TValue`, `TSelected`\> +[`QueuedValueSignal`](../interfaces/QueuedValueSignal.md)\<`TValue`, `TSelected`\> ### Example diff --git a/docs/framework/angular/reference/index.md b/docs/framework/angular/reference/index.md index 7dd3a08be..88d69e1c6 100644 --- a/docs/framework/angular/reference/index.md +++ b/docs/framework/angular/reference/index.md @@ -30,6 +30,7 @@ title: "@tanstack/angular-pacer" - [AsyncQueuedSignal](interfaces/AsyncQueuedSignal.md) - [DebouncedSignal](interfaces/DebouncedSignal.md) - [QueuedSignal](interfaces/QueuedSignal.md) +- [QueuedValueSignal](interfaces/QueuedValueSignal.md) - [RateLimitedSignal](interfaces/RateLimitedSignal.md) - [ThrottledSignal](interfaces/ThrottledSignal.md) diff --git a/docs/framework/angular/reference/interfaces/AsyncQueuedSignal.md b/docs/framework/angular/reference/interfaces/AsyncQueuedSignal.md index 889c95eab..e6235557c 100644 --- a/docs/framework/angular/reference/interfaces/AsyncQueuedSignal.md +++ b/docs/framework/angular/reference/interfaces/AsyncQueuedSignal.md @@ -33,7 +33,7 @@ Defined in: [angular-pacer/src/async-queuer/injectAsyncQueuedSignal.ts:10](https ### addItem() ```ts -addItem: (item, position?, runOnItemsChange?) => boolean; +addItem: (item, position, runOnItemsChange) => boolean; ``` Defined in: [angular-pacer/src/async-queuer/injectAsyncQueuedSignal.ts:11](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/async-queuer/injectAsyncQueuedSignal.ts#L11) @@ -47,13 +47,13 @@ Items can be inserted based on priority or at the front/back depending on config `TValue` -##### position? +##### position -`QueuePosition` +`QueuePosition` = `...` -##### runOnItemsChange? +##### runOnItemsChange -`boolean` +`boolean` = `true` #### Returns diff --git a/docs/framework/angular/reference/interfaces/QueuedSignal.md b/docs/framework/angular/reference/interfaces/QueuedSignal.md index 3e2842f51..52962fbf2 100644 --- a/docs/framework/angular/reference/interfaces/QueuedSignal.md +++ b/docs/framework/angular/reference/interfaces/QueuedSignal.md @@ -33,7 +33,7 @@ Defined in: [angular-pacer/src/queuer/injectQueuedSignal.ts:7](https://github.co ### addItem() ```ts -addItem: (item, position?, runOnItemsChange?) => boolean; +addItem: (item, position, runOnItemsChange) => boolean; ``` Defined in: [angular-pacer/src/queuer/injectQueuedSignal.ts:8](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/queuer/injectQueuedSignal.ts#L8) @@ -55,13 +55,13 @@ queuer.addItem('task2', 'front'); `TValue` -##### position? +##### position -`QueuePosition` +`QueuePosition` = `...` -##### runOnItemsChange? +##### runOnItemsChange -`boolean` +`boolean` = `true` #### Returns diff --git a/docs/framework/angular/reference/interfaces/QueuedValueSignal.md b/docs/framework/angular/reference/interfaces/QueuedValueSignal.md new file mode 100644 index 000000000..177d0b938 --- /dev/null +++ b/docs/framework/angular/reference/interfaces/QueuedValueSignal.md @@ -0,0 +1,78 @@ +--- +id: QueuedValueSignal +title: QueuedValueSignal +--- + +# Interface: QueuedValueSignal()\ + +Defined in: [angular-pacer/src/queuer/injectQueuedValue.ts:7](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/queuer/injectQueuedValue.ts#L7) + +## Type Parameters + +### TValue + +`TValue` + +### TSelected + +`TSelected` = \{ +\} + +```ts +QueuedValueSignal(): TValue; +``` + +Defined in: [angular-pacer/src/queuer/injectQueuedValue.ts:8](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/queuer/injectQueuedValue.ts#L8) + +## Returns + +`TValue` + +## Properties + +### addItem() + +```ts +addItem: (item, position, runOnItemsChange) => boolean; +``` + +Defined in: [angular-pacer/src/queuer/injectQueuedValue.ts:9](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/queuer/injectQueuedValue.ts#L9) + +Adds an item to the queue. If the queue is full, the item is rejected and onReject is called. +Items can be inserted based on priority or at the front/back depending on configuration. + +Returns true if the item was added, false if the queue is full. + +Example usage: +```ts +queuer.addItem('task'); +queuer.addItem('task2', 'front'); +``` + +#### Parameters + +##### item + +`TValue` + +##### position + +`QueuePosition` = `...` + +##### runOnItemsChange + +`boolean` = `true` + +#### Returns + +`boolean` + +*** + +### queuer + +```ts +queuer: AngularQueuer; +``` + +Defined in: [angular-pacer/src/queuer/injectQueuedValue.ts:10](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/queuer/injectQueuedValue.ts#L10) diff --git a/packages/angular-pacer/src/queuer/injectQueuedValue.ts b/packages/angular-pacer/src/queuer/injectQueuedValue.ts index e65e27e94..5601f8a24 100644 --- a/packages/angular-pacer/src/queuer/injectQueuedValue.ts +++ b/packages/angular-pacer/src/queuer/injectQueuedValue.ts @@ -18,9 +18,10 @@ export interface QueuedValueSignal { * processing each change. This is useful for handling state updates that need to be processed * in a specific order, like animations or sequential UI updates. * - * The function returns a tuple containing: - * - A Signal that provides the current queued value - * - The queuer instance with control methods + * The function returns a callable object containing: + * - `queued()`: A signal-like function that provides the current queued value + * - `queued.addItem(...)`: A method to enqueue additional values + * - `queued.queuer`: The queuer instance with control methods and state * * @example * ```ts diff --git a/packages/angular-pacer/tsconfig.docs.json b/packages/angular-pacer/tsconfig.docs.json index 20ccb038c..a12189d95 100644 --- a/packages/angular-pacer/tsconfig.docs.json +++ b/packages/angular-pacer/tsconfig.docs.json @@ -1,8 +1,9 @@ { - "extends": "./tsconfig.json", + "extends": "./tsconfig.lib.json", "compilerOptions": { "paths": { - "@tanstack/pacer": ["../pacer/src"] + "@tanstack/pacer": ["../pacer/src"], + "@tanstack/pacer/*": ["../pacer/src/*"] } }, "include": ["src"] From f0895e3a2fcdd5f66caf6b41e57044b7558f9011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?= Date: Sun, 22 Feb 2026 18:09:04 -0300 Subject: [PATCH 6/8] chore: add changeset --- .changeset/big-jobs-call.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/big-jobs-call.md diff --git a/.changeset/big-jobs-call.md b/.changeset/big-jobs-call.md new file mode 100644 index 000000000..fd2613caa --- /dev/null +++ b/.changeset/big-jobs-call.md @@ -0,0 +1,5 @@ +--- +'@tanstack/angular-pacer': minor +--- + +injectQueuedValue returns queued value instead of array From 27dcd2fc58f8dec21ff674413341ed1c0e1f0319 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?= Date: Sat, 6 Jun 2026 10:21:24 -0400 Subject: [PATCH 7/8] chore: use local type definition --- .../functions/injectAsyncBatchedCallback.md | 3 ++- .../functions/injectAsyncDebouncedCallback.md | 3 ++- .../functions/injectAsyncQueuedSignal.md | 2 +- .../injectAsyncRateLimitedCallback.md | 3 ++- .../functions/injectAsyncThrottledCallback.md | 3 ++- .../functions/injectBatchedCallback.md | 3 ++- .../functions/injectDebouncedCallback.md | 3 ++- .../functions/injectDebouncedSignal.md | 2 +- .../functions/injectDebouncedValue.md | 8 +++--- .../reference/functions/injectQueuedSignal.md | 2 +- .../reference/functions/injectQueuedValue.md | 4 +-- .../functions/injectRateLimitedCallback.md | 3 ++- .../functions/injectRateLimitedSignal.md | 2 +- .../functions/injectRateLimitedValue.md | 8 +++--- .../functions/injectThrottledCallback.md | 3 ++- .../functions/injectThrottledSignal.md | 2 +- .../functions/injectThrottledValue.md | 8 +++--- .../injectAsyncBatchedCallback.ts | 4 +-- .../injectAsyncDebouncedCallback.ts | 4 +-- .../async-queuer/injectAsyncQueuedSignal.ts | 10 +++---- .../injectAsyncRateLimitedCallback.ts | 4 +-- .../injectAsyncThrottledCallback.ts | 4 +-- .../src/batcher/injectBatchedCallback.ts | 4 +-- .../src/debouncer/injectDebouncedCallback.ts | 4 +-- .../src/debouncer/injectDebouncedSignal.ts | 10 +++---- .../src/debouncer/injectDebouncedValue.ts | 26 ++++++++++++------- .../src/queuer/injectQueuedSignal.ts | 6 ++--- .../src/queuer/injectQueuedValue.ts | 16 ++++++------ .../rate-limiter/injectRateLimitedCallback.ts | 4 +-- .../rate-limiter/injectRateLimitedSignal.ts | 10 +++---- .../rate-limiter/injectRateLimitedValue.ts | 26 ++++++++++++------- .../src/throttler/injectThrottledCallback.ts | 4 +-- .../src/throttler/injectThrottledSignal.ts | 10 +++---- .../src/throttler/injectThrottledValue.ts | 26 ++++++++++++------- 34 files changed, 130 insertions(+), 104 deletions(-) diff --git a/docs/framework/angular/reference/functions/injectAsyncBatchedCallback.md b/docs/framework/angular/reference/functions/injectAsyncBatchedCallback.md index 78b24980d..52b770e6b 100644 --- a/docs/framework/angular/reference/functions/injectAsyncBatchedCallback.md +++ b/docs/framework/angular/reference/functions/injectAsyncBatchedCallback.md @@ -43,7 +43,8 @@ Consider using the `injectAsyncBatcher` function instead. ### options -`AsyncBatcherOptions`\<`TValue`\> +[`AngularAsyncBatcherOptions`](../interfaces/AngularAsyncBatcherOptions.md)\<`TValue`, \{ +\}\> ## Returns diff --git a/docs/framework/angular/reference/functions/injectAsyncDebouncedCallback.md b/docs/framework/angular/reference/functions/injectAsyncDebouncedCallback.md index 1c1eaef0c..efe6e3028 100644 --- a/docs/framework/angular/reference/functions/injectAsyncDebouncedCallback.md +++ b/docs/framework/angular/reference/functions/injectAsyncDebouncedCallback.md @@ -44,7 +44,8 @@ Consider using the `injectAsyncDebouncer` function instead. ### options -`AsyncDebouncerOptions`\<`TFn`\> +[`AngularAsyncDebouncerOptions`](../interfaces/AngularAsyncDebouncerOptions.md)\<`TFn`, \{ +\}\> ## Returns diff --git a/docs/framework/angular/reference/functions/injectAsyncQueuedSignal.md b/docs/framework/angular/reference/functions/injectAsyncQueuedSignal.md index 9c34f3558..a3908a29d 100644 --- a/docs/framework/angular/reference/functions/injectAsyncQueuedSignal.md +++ b/docs/framework/angular/reference/functions/injectAsyncQueuedSignal.md @@ -43,7 +43,7 @@ The function returns a callable object: ### options -`AsyncQueuerOptions`\<`TValue`\> = `{}` +[`AngularAsyncQueuerOptions`](../interfaces/AngularAsyncQueuerOptions.md)\<`TValue`, `TSelected`\> = `{}` ### selector diff --git a/docs/framework/angular/reference/functions/injectAsyncRateLimitedCallback.md b/docs/framework/angular/reference/functions/injectAsyncRateLimitedCallback.md index a0bc18024..6ecf6ab12 100644 --- a/docs/framework/angular/reference/functions/injectAsyncRateLimitedCallback.md +++ b/docs/framework/angular/reference/functions/injectAsyncRateLimitedCallback.md @@ -40,7 +40,8 @@ Consider using the `injectAsyncRateLimiter` function instead. ### options -`AsyncRateLimiterOptions`\<`TFn`\> +[`AngularAsyncRateLimiterOptions`](../interfaces/AngularAsyncRateLimiterOptions.md)\<`TFn`, \{ +\}\> ## Returns diff --git a/docs/framework/angular/reference/functions/injectAsyncThrottledCallback.md b/docs/framework/angular/reference/functions/injectAsyncThrottledCallback.md index 79ee16812..59ccb9f9b 100644 --- a/docs/framework/angular/reference/functions/injectAsyncThrottledCallback.md +++ b/docs/framework/angular/reference/functions/injectAsyncThrottledCallback.md @@ -42,7 +42,8 @@ Consider using the `injectAsyncThrottler` function instead. ### options -`AsyncThrottlerOptions`\<`TFn`\> +[`AngularAsyncThrottlerOptions`](../interfaces/AngularAsyncThrottlerOptions.md)\<`TFn`, \{ +\}\> ## Returns diff --git a/docs/framework/angular/reference/functions/injectBatchedCallback.md b/docs/framework/angular/reference/functions/injectBatchedCallback.md index 510d62133..48fda14b1 100644 --- a/docs/framework/angular/reference/functions/injectBatchedCallback.md +++ b/docs/framework/angular/reference/functions/injectBatchedCallback.md @@ -42,7 +42,8 @@ Consider using the `injectBatcher` function instead. ### options -`BatcherOptions`\<`TValue`\> +[`AngularBatcherOptions`](../interfaces/AngularBatcherOptions.md)\<`TValue`, \{ +\}\> ## Returns diff --git a/docs/framework/angular/reference/functions/injectDebouncedCallback.md b/docs/framework/angular/reference/functions/injectDebouncedCallback.md index ccf75c755..b89d68fd6 100644 --- a/docs/framework/angular/reference/functions/injectDebouncedCallback.md +++ b/docs/framework/angular/reference/functions/injectDebouncedCallback.md @@ -43,7 +43,8 @@ Consider using the `injectDebouncer` function instead. ### options -`DebouncerOptions`\<`TFn`\> +[`AngularDebouncerOptions`](../interfaces/AngularDebouncerOptions.md)\<`TFn`, \{ +\}\> ## Returns diff --git a/docs/framework/angular/reference/functions/injectDebouncedSignal.md b/docs/framework/angular/reference/functions/injectDebouncedSignal.md index 17d305f35..103074483 100644 --- a/docs/framework/angular/reference/functions/injectDebouncedSignal.md +++ b/docs/framework/angular/reference/functions/injectDebouncedSignal.md @@ -64,7 +64,7 @@ Available debouncer state properties: ### initialOptions -`DebouncerOptions`\<`Setter`\<`TValue`\>\> +[`AngularDebouncerOptions`](../interfaces/AngularDebouncerOptions.md)\<`Setter`\<`TValue`\>, `TSelected`\> ### selector? diff --git a/docs/framework/angular/reference/functions/injectDebouncedValue.md b/docs/framework/angular/reference/functions/injectDebouncedValue.md index 73a5e291a..b064c0ab6 100644 --- a/docs/framework/angular/reference/functions/injectDebouncedValue.md +++ b/docs/framework/angular/reference/functions/injectDebouncedValue.md @@ -14,7 +14,7 @@ function injectDebouncedValue( selector?): DebouncedSignal; ``` -Defined in: [angular-pacer/src/debouncer/injectDebouncedValue.ts:77](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/debouncer/injectDebouncedValue.ts#L77) +Defined in: [angular-pacer/src/debouncer/injectDebouncedValue.ts:75](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/debouncer/injectDebouncedValue.ts#L75) An Angular function that creates a debounced value that updates only after a specified delay. Unlike injectDebouncedSignal, this function automatically tracks changes to the input signal @@ -69,7 +69,7 @@ Available debouncer state properties: #### initialOptions -`DebouncerOptions`\<`Setter`\<`TValue`\>\> +[`AngularDebouncerOptions`](../interfaces/AngularDebouncerOptions.md)\<`Setter`\<`TValue`\>, `TSelected`\> #### selector? @@ -119,7 +119,7 @@ function injectDebouncedValue( selector?): DebouncedSignal; ``` -Defined in: [angular-pacer/src/debouncer/injectDebouncedValue.ts:82](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/debouncer/injectDebouncedValue.ts#L82) +Defined in: [angular-pacer/src/debouncer/injectDebouncedValue.ts:80](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/debouncer/injectDebouncedValue.ts#L80) An Angular function that creates a debounced value that updates only after a specified delay. Unlike injectDebouncedSignal, this function automatically tracks changes to the input signal @@ -178,7 +178,7 @@ Available debouncer state properties: #### initialOptions -`DebouncerOptions`\<`Setter`\<`TValue`\>\> +[`AngularDebouncerOptions`](../interfaces/AngularDebouncerOptions.md)\<`Setter`\<`TValue`\>, `TSelected`\> #### selector? diff --git a/docs/framework/angular/reference/functions/injectQueuedSignal.md b/docs/framework/angular/reference/functions/injectQueuedSignal.md index 5304edc89..2adfae202 100644 --- a/docs/framework/angular/reference/functions/injectQueuedSignal.md +++ b/docs/framework/angular/reference/functions/injectQueuedSignal.md @@ -43,7 +43,7 @@ The function returns a callable object: ### options -`QueuerOptions`\<`TValue`\> = `{}` +[`AngularQueuerOptions`](../interfaces/AngularQueuerOptions.md)\<`TValue`, `TSelected`\> = `{}` ### selector diff --git a/docs/framework/angular/reference/functions/injectQueuedValue.md b/docs/framework/angular/reference/functions/injectQueuedValue.md index 7e3fe4a92..e0a185c7c 100644 --- a/docs/framework/angular/reference/functions/injectQueuedValue.md +++ b/docs/framework/angular/reference/functions/injectQueuedValue.md @@ -46,7 +46,7 @@ The function returns a callable object containing: #### options? -`QueuerOptions`\<`TValue`\> +[`AngularQueuerOptions`](../interfaces/AngularQueuerOptions.md)\<`TValue`, `TSelected`\> #### selector? @@ -115,7 +115,7 @@ The function returns a callable object containing: #### options? -`QueuerOptions`\<`TValue`\> +[`AngularQueuerOptions`](../interfaces/AngularQueuerOptions.md)\<`TValue`, `TSelected`\> #### selector? diff --git a/docs/framework/angular/reference/functions/injectRateLimitedCallback.md b/docs/framework/angular/reference/functions/injectRateLimitedCallback.md index ae04820fe..42402c779 100644 --- a/docs/framework/angular/reference/functions/injectRateLimitedCallback.md +++ b/docs/framework/angular/reference/functions/injectRateLimitedCallback.md @@ -43,7 +43,8 @@ Consider using the `injectRateLimiter` function instead. ### options -`RateLimiterOptions`\<`TFn`\> +[`AngularRateLimiterOptions`](../interfaces/AngularRateLimiterOptions.md)\<`TFn`, \{ +\}\> ## Returns diff --git a/docs/framework/angular/reference/functions/injectRateLimitedSignal.md b/docs/framework/angular/reference/functions/injectRateLimitedSignal.md index 1410dd49d..3debcfb2c 100644 --- a/docs/framework/angular/reference/functions/injectRateLimitedSignal.md +++ b/docs/framework/angular/reference/functions/injectRateLimitedSignal.md @@ -55,7 +55,7 @@ full control over when your component tracks state changes. ### initialOptions -`RateLimiterOptions`\<`Setter`\<`TValue`\>\> +[`AngularRateLimiterOptions`](../interfaces/AngularRateLimiterOptions.md)\<`Setter`\<`TValue`\>, `TSelected`\> ### selector? diff --git a/docs/framework/angular/reference/functions/injectRateLimitedValue.md b/docs/framework/angular/reference/functions/injectRateLimitedValue.md index 58742cf01..d572403ad 100644 --- a/docs/framework/angular/reference/functions/injectRateLimitedValue.md +++ b/docs/framework/angular/reference/functions/injectRateLimitedValue.md @@ -14,7 +14,7 @@ function injectRateLimitedValue( selector?): RateLimitedSignal; ``` -Defined in: [angular-pacer/src/rate-limiter/injectRateLimitedValue.ts:50](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/rate-limiter/injectRateLimitedValue.ts#L50) +Defined in: [angular-pacer/src/rate-limiter/injectRateLimitedValue.ts:48](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/rate-limiter/injectRateLimitedValue.ts#L48) An Angular function that creates a rate-limited value that updates at most a certain number of times within a time window. Unlike injectRateLimitedSignal, this function automatically tracks changes to the input signal @@ -56,7 +56,7 @@ full control over when your component tracks state changes. #### initialOptions -`RateLimiterOptions`\<`Setter`\<`TValue`\>\> +[`AngularRateLimiterOptions`](../interfaces/AngularRateLimiterOptions.md)\<`Setter`\<`TValue`\>, `TSelected`\> #### selector? @@ -93,7 +93,7 @@ function injectRateLimitedValue( selector?): RateLimitedSignal; ``` -Defined in: [angular-pacer/src/rate-limiter/injectRateLimitedValue.ts:55](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/rate-limiter/injectRateLimitedValue.ts#L55) +Defined in: [angular-pacer/src/rate-limiter/injectRateLimitedValue.ts:53](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/rate-limiter/injectRateLimitedValue.ts#L53) An Angular function that creates a rate-limited value that updates at most a certain number of times within a time window. Unlike injectRateLimitedSignal, this function automatically tracks changes to the input signal @@ -139,7 +139,7 @@ full control over when your component tracks state changes. #### initialOptions -`RateLimiterOptions`\<`Setter`\<`TValue`\>\> +[`AngularRateLimiterOptions`](../interfaces/AngularRateLimiterOptions.md)\<`Setter`\<`TValue`\>, `TSelected`\> #### selector? diff --git a/docs/framework/angular/reference/functions/injectThrottledCallback.md b/docs/framework/angular/reference/functions/injectThrottledCallback.md index e11c559d7..aba9cbafe 100644 --- a/docs/framework/angular/reference/functions/injectThrottledCallback.md +++ b/docs/framework/angular/reference/functions/injectThrottledCallback.md @@ -43,7 +43,8 @@ Consider using the `injectThrottler` function instead. ### options -`ThrottlerOptions`\<`TFn`\> +[`AngularThrottlerOptions`](../interfaces/AngularThrottlerOptions.md)\<`TFn`, \{ +\}\> ## Returns diff --git a/docs/framework/angular/reference/functions/injectThrottledSignal.md b/docs/framework/angular/reference/functions/injectThrottledSignal.md index bdf7d3e53..65bc319cb 100644 --- a/docs/framework/angular/reference/functions/injectThrottledSignal.md +++ b/docs/framework/angular/reference/functions/injectThrottledSignal.md @@ -65,7 +65,7 @@ Available throttler state properties: ### initialOptions -`ThrottlerOptions`\<`Setter`\<`TValue`\>\> +[`AngularThrottlerOptions`](../interfaces/AngularThrottlerOptions.md)\<`Setter`\<`TValue`\>, `TSelected`\> ### selector? diff --git a/docs/framework/angular/reference/functions/injectThrottledValue.md b/docs/framework/angular/reference/functions/injectThrottledValue.md index 1dc50fa3d..1ec06b87c 100644 --- a/docs/framework/angular/reference/functions/injectThrottledValue.md +++ b/docs/framework/angular/reference/functions/injectThrottledValue.md @@ -14,7 +14,7 @@ function injectThrottledValue( selector?): ThrottledSignal; ``` -Defined in: [angular-pacer/src/throttler/injectThrottledValue.ts:75](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/throttler/injectThrottledValue.ts#L75) +Defined in: [angular-pacer/src/throttler/injectThrottledValue.ts:73](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/throttler/injectThrottledValue.ts#L73) An Angular function that creates a throttled value that updates at most once within a specified time window. Unlike injectThrottledSignal, this function automatically tracks changes to the input signal @@ -70,7 +70,7 @@ Available throttler state properties: #### initialOptions -`ThrottlerOptions`\<`Setter`\<`TValue`\>\> +[`AngularThrottlerOptions`](../interfaces/AngularThrottlerOptions.md)\<`Setter`\<`TValue`\>, `TSelected`\> #### selector? @@ -118,7 +118,7 @@ function injectThrottledValue( selector?): ThrottledSignal; ``` -Defined in: [angular-pacer/src/throttler/injectThrottledValue.ts:80](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/throttler/injectThrottledValue.ts#L80) +Defined in: [angular-pacer/src/throttler/injectThrottledValue.ts:78](https://github.com/TanStack/pacer/blob/main/packages/angular-pacer/src/throttler/injectThrottledValue.ts#L78) An Angular function that creates a throttled value that updates at most once within a specified time window. Unlike injectThrottledSignal, this function automatically tracks changes to the input signal @@ -178,7 +178,7 @@ Available throttler state properties: #### initialOptions -`ThrottlerOptions`\<`Setter`\<`TValue`\>\> +[`AngularThrottlerOptions`](../interfaces/AngularThrottlerOptions.md)\<`Setter`\<`TValue`\>, `TSelected`\> #### selector? diff --git a/packages/angular-pacer/src/async-batcher/injectAsyncBatchedCallback.ts b/packages/angular-pacer/src/async-batcher/injectAsyncBatchedCallback.ts index 83b597d70..038c636b2 100644 --- a/packages/angular-pacer/src/async-batcher/injectAsyncBatchedCallback.ts +++ b/packages/angular-pacer/src/async-batcher/injectAsyncBatchedCallback.ts @@ -1,5 +1,5 @@ import { injectAsyncBatcher } from './injectAsyncBatcher' -import type { AsyncBatcherOptions } from '@tanstack/pacer/async-batcher' +import type { AngularAsyncBatcherOptions } from './injectAsyncBatcher' /** * An Angular function that creates an async batched version of a callback function. @@ -41,7 +41,7 @@ import type { AsyncBatcherOptions } from '@tanstack/pacer/async-batcher' */ export function injectAsyncBatchedCallback( fn: (items: Array) => Promise, - options: AsyncBatcherOptions, + options: AngularAsyncBatcherOptions, ): (item: TValue) => Promise { const batcher = injectAsyncBatcher(fn, options) return (item: TValue) => batcher.addItem(item) diff --git a/packages/angular-pacer/src/async-debouncer/injectAsyncDebouncedCallback.ts b/packages/angular-pacer/src/async-debouncer/injectAsyncDebouncedCallback.ts index 221765aa8..043b5f1c7 100644 --- a/packages/angular-pacer/src/async-debouncer/injectAsyncDebouncedCallback.ts +++ b/packages/angular-pacer/src/async-debouncer/injectAsyncDebouncedCallback.ts @@ -1,5 +1,5 @@ import { injectAsyncDebouncer } from './injectAsyncDebouncer' -import type { AsyncDebouncerOptions } from '@tanstack/pacer/async-debouncer' +import type { AngularAsyncDebouncerOptions } from './injectAsyncDebouncer' import type { AnyAsyncFunction } from '@tanstack/pacer/types' /** @@ -39,7 +39,7 @@ import type { AnyAsyncFunction } from '@tanstack/pacer/types' */ export function injectAsyncDebouncedCallback( fn: TFn, - options: AsyncDebouncerOptions, + options: AngularAsyncDebouncerOptions, ): (...args: Parameters) => Promise> | undefined> { const debouncer = injectAsyncDebouncer(fn, options) return async (...args: Parameters) => { diff --git a/packages/angular-pacer/src/async-queuer/injectAsyncQueuedSignal.ts b/packages/angular-pacer/src/async-queuer/injectAsyncQueuedSignal.ts index 7271c20de..19c635a01 100644 --- a/packages/angular-pacer/src/async-queuer/injectAsyncQueuedSignal.ts +++ b/packages/angular-pacer/src/async-queuer/injectAsyncQueuedSignal.ts @@ -1,10 +1,10 @@ import { computed } from '@angular/core' import { injectAsyncQueuer } from './injectAsyncQueuer' -import type { AngularAsyncQueuer } from './injectAsyncQueuer' import type { - AsyncQueuerOptions, - AsyncQueuerState, -} from '@tanstack/pacer/async-queuer' + AngularAsyncQueuer, + AngularAsyncQueuerOptions, +} from './injectAsyncQueuer' +import type { AsyncQueuerState } from '@tanstack/pacer/async-queuer' export interface AsyncQueuedSignal { (): Array @@ -57,7 +57,7 @@ export function injectAsyncQueuedSignal< >, >( fn: (value: TValue) => Promise, - options: AsyncQueuerOptions = {}, + options: AngularAsyncQueuerOptions = {}, selector: (state: AsyncQueuerState) => TSelected = (state) => ({ items: state.items }) as TSelected, ): AsyncQueuedSignal { diff --git a/packages/angular-pacer/src/async-rate-limiter/injectAsyncRateLimitedCallback.ts b/packages/angular-pacer/src/async-rate-limiter/injectAsyncRateLimitedCallback.ts index 5894a912b..03a5b72aa 100644 --- a/packages/angular-pacer/src/async-rate-limiter/injectAsyncRateLimitedCallback.ts +++ b/packages/angular-pacer/src/async-rate-limiter/injectAsyncRateLimitedCallback.ts @@ -1,5 +1,5 @@ import { injectAsyncRateLimiter } from './injectAsyncRateLimiter' -import type { AsyncRateLimiterOptions } from '@tanstack/pacer/async-rate-limiter' +import type { AngularAsyncRateLimiterOptions } from './injectAsyncRateLimiter' import type { AnyAsyncFunction } from '@tanstack/pacer/types' /** @@ -42,7 +42,7 @@ import type { AnyAsyncFunction } from '@tanstack/pacer/types' */ export function injectAsyncRateLimitedCallback( fn: TFn, - options: AsyncRateLimiterOptions, + options: AngularAsyncRateLimiterOptions, ): (...args: Parameters) => Promise> | undefined> { const rateLimiter = injectAsyncRateLimiter(fn, options) return async (...args: Parameters) => { diff --git a/packages/angular-pacer/src/async-throttler/injectAsyncThrottledCallback.ts b/packages/angular-pacer/src/async-throttler/injectAsyncThrottledCallback.ts index 85257c097..f97006f95 100644 --- a/packages/angular-pacer/src/async-throttler/injectAsyncThrottledCallback.ts +++ b/packages/angular-pacer/src/async-throttler/injectAsyncThrottledCallback.ts @@ -1,5 +1,5 @@ import { injectAsyncThrottler } from './injectAsyncThrottler' -import type { AsyncThrottlerOptions } from '@tanstack/pacer/async-throttler' +import type { AngularAsyncThrottlerOptions } from './injectAsyncThrottler' import type { AnyAsyncFunction } from '@tanstack/pacer/types' /** @@ -40,7 +40,7 @@ import type { AnyAsyncFunction } from '@tanstack/pacer/types' */ export function injectAsyncThrottledCallback( fn: TFn, - options: AsyncThrottlerOptions, + options: AngularAsyncThrottlerOptions, ): (...args: Parameters) => Promise> | undefined> { const throttler = injectAsyncThrottler(fn, options) return async (...args: Parameters) => { diff --git a/packages/angular-pacer/src/batcher/injectBatchedCallback.ts b/packages/angular-pacer/src/batcher/injectBatchedCallback.ts index 73d7f5791..11e23b281 100644 --- a/packages/angular-pacer/src/batcher/injectBatchedCallback.ts +++ b/packages/angular-pacer/src/batcher/injectBatchedCallback.ts @@ -1,5 +1,5 @@ import { injectBatcher } from './injectBatcher' -import type { BatcherOptions } from '@tanstack/pacer/batcher' +import type { AngularBatcherOptions } from './injectBatcher' /** * An Angular function that creates a batched version of a callback function. @@ -39,7 +39,7 @@ import type { BatcherOptions } from '@tanstack/pacer/batcher' */ export function injectBatchedCallback( fn: (items: Array) => void, - options: BatcherOptions, + options: AngularBatcherOptions, ): (item: TValue) => void { const batcher = injectBatcher(fn, options) return (item: TValue) => batcher.addItem(item) diff --git a/packages/angular-pacer/src/debouncer/injectDebouncedCallback.ts b/packages/angular-pacer/src/debouncer/injectDebouncedCallback.ts index a76e4c4fe..9a04f49b4 100644 --- a/packages/angular-pacer/src/debouncer/injectDebouncedCallback.ts +++ b/packages/angular-pacer/src/debouncer/injectDebouncedCallback.ts @@ -1,5 +1,5 @@ import { injectDebouncer } from './injectDebouncer' -import type { DebouncerOptions } from '@tanstack/pacer/debouncer' +import type { AngularDebouncerOptions } from './injectDebouncer' import type { AnyFunction } from '@tanstack/pacer/types' /** @@ -39,7 +39,7 @@ import type { AnyFunction } from '@tanstack/pacer/types' */ export function injectDebouncedCallback( fn: TFn, - options: DebouncerOptions, + options: AngularDebouncerOptions, ): (...args: Parameters) => void { const debouncer = injectDebouncer(fn, options) return (...args: Parameters) => debouncer.maybeExecute(...args) diff --git a/packages/angular-pacer/src/debouncer/injectDebouncedSignal.ts b/packages/angular-pacer/src/debouncer/injectDebouncedSignal.ts index bce0cdf00..fc63af481 100644 --- a/packages/angular-pacer/src/debouncer/injectDebouncedSignal.ts +++ b/packages/angular-pacer/src/debouncer/injectDebouncedSignal.ts @@ -1,10 +1,10 @@ import { signal } from '@angular/core' import { injectDebouncer } from './injectDebouncer' -import type { AngularDebouncer } from './injectDebouncer' import type { - DebouncerOptions, - DebouncerState, -} from '@tanstack/pacer/debouncer' + AngularDebouncer, + AngularDebouncerOptions, +} from './injectDebouncer' +import type { DebouncerState } from '@tanstack/pacer/debouncer' type Setter = (value: T | ((prev: T) => T)) => void @@ -62,7 +62,7 @@ export interface DebouncedSignal { */ export function injectDebouncedSignal( value: TValue, - initialOptions: DebouncerOptions>, + initialOptions: AngularDebouncerOptions, TSelected>, selector?: (state: DebouncerState>) => TSelected, ): DebouncedSignal { const debouncedValue = signal(value) diff --git a/packages/angular-pacer/src/debouncer/injectDebouncedValue.ts b/packages/angular-pacer/src/debouncer/injectDebouncedValue.ts index 5c20e5660..4c96417fc 100644 --- a/packages/angular-pacer/src/debouncer/injectDebouncedValue.ts +++ b/packages/angular-pacer/src/debouncer/injectDebouncedValue.ts @@ -2,10 +2,8 @@ import { effect } from '@angular/core' import { injectDebouncedSignal } from './injectDebouncedSignal' import type { DebouncedSignal } from './injectDebouncedSignal' import type { Signal } from '@angular/core' -import type { - DebouncerOptions, - DebouncerState, -} from '@tanstack/pacer/debouncer' +import type { AngularDebouncerOptions } from './injectDebouncer' +import type { DebouncerState } from '@tanstack/pacer/debouncer' type Setter = (value: T | ((prev: T) => T)) => void @@ -76,20 +74,22 @@ type Setter = (value: T | ((prev: T) => T)) => void */ export function injectDebouncedValue( value: Signal, - initialOptions: DebouncerOptions>, + initialOptions: AngularDebouncerOptions, TSelected>, selector?: (state: DebouncerState>) => TSelected, ): DebouncedSignal export function injectDebouncedValue( value: Signal, initialValue: TValue, - initialOptions: DebouncerOptions>, + initialOptions: AngularDebouncerOptions, TSelected>, selector?: (state: DebouncerState>) => TSelected, ): DebouncedSignal export function injectDebouncedValue( value: Signal, - initialValueOrOptions: TValue | DebouncerOptions>, + initialValueOrOptions: + | TValue + | AngularDebouncerOptions, TSelected>, initialOptionsOrSelector?: - | DebouncerOptions> + | AngularDebouncerOptions, TSelected> | ((state: DebouncerState>) => TSelected), maybeSelector?: (state: DebouncerState>) => TSelected, ): DebouncedSignal { @@ -103,8 +103,14 @@ export function injectDebouncedValue( ? (initialValueOrOptions as TValue) : (undefined as unknown as TValue) const initialOptions = hasInitialValue - ? (initialOptionsOrSelector as DebouncerOptions>) - : (initialValueOrOptions as DebouncerOptions>) + ? (initialOptionsOrSelector as AngularDebouncerOptions< + Setter, + TSelected + >) + : (initialValueOrOptions as AngularDebouncerOptions< + Setter, + TSelected + >) const selector = hasInitialValue ? maybeSelector : (initialOptionsOrSelector as diff --git a/packages/angular-pacer/src/queuer/injectQueuedSignal.ts b/packages/angular-pacer/src/queuer/injectQueuedSignal.ts index a34372e57..96e128127 100644 --- a/packages/angular-pacer/src/queuer/injectQueuedSignal.ts +++ b/packages/angular-pacer/src/queuer/injectQueuedSignal.ts @@ -1,7 +1,7 @@ import { computed } from '@angular/core' import { injectQueuer } from './injectQueuer' -import type { AngularQueuer } from './injectQueuer' -import type { QueuerOptions, QueuerState } from '@tanstack/pacer/queuer' +import type { AngularQueuer, AngularQueuerOptions } from './injectQueuer' +import type { QueuerState } from '@tanstack/pacer/queuer' export interface QueuedSignal { (): Array @@ -48,7 +48,7 @@ export function injectQueuedSignal< >, >( fn: (item: TValue) => void, - options: QueuerOptions = {}, + options: AngularQueuerOptions = {}, selector: (state: QueuerState) => TSelected = (state) => ({ items: state.items }) as TSelected, ): QueuedSignal { diff --git a/packages/angular-pacer/src/queuer/injectQueuedValue.ts b/packages/angular-pacer/src/queuer/injectQueuedValue.ts index 5601f8a24..f96a678ca 100644 --- a/packages/angular-pacer/src/queuer/injectQueuedValue.ts +++ b/packages/angular-pacer/src/queuer/injectQueuedValue.ts @@ -1,8 +1,8 @@ import { effect, linkedSignal, untracked } from '@angular/core' import { injectQueuedSignal } from './injectQueuedSignal' import type { Signal } from '@angular/core' -import type { QueuerOptions, QueuerState } from '@tanstack/pacer/queuer' -import type { AngularQueuer } from './injectQueuer' +import type { QueuerState } from '@tanstack/pacer/queuer' +import type { AngularQueuer, AngularQueuerOptions } from './injectQueuer' export interface QueuedValueSignal { (): TValue @@ -43,7 +43,7 @@ export function injectQueuedValue< >, >( value: Signal, - options?: QueuerOptions, + options?: AngularQueuerOptions, selector?: (state: QueuerState) => TSelected, ): QueuedValueSignal export function injectQueuedValue< @@ -55,7 +55,7 @@ export function injectQueuedValue< >( value: Signal, initialValue: TValue, - options?: QueuerOptions, + options?: AngularQueuerOptions, selector?: (state: QueuerState) => TSelected, ): QueuedValueSignal export function injectQueuedValue< @@ -66,9 +66,9 @@ export function injectQueuedValue< >, >( value: Signal, - initialValueOrOptions?: TValue | QueuerOptions, + initialValueOrOptions?: TValue | AngularQueuerOptions, initialOptionsOrSelector?: - | QueuerOptions + | AngularQueuerOptions | ((state: QueuerState) => TSelected), maybeSelector?: (state: QueuerState) => TSelected, ): QueuedValueSignal { @@ -77,8 +77,8 @@ export function injectQueuedValue< (initialOptionsOrSelector !== undefined && !hasSelector) || maybeSelector !== undefined const initialOptions = hasInitialValue - ? (initialOptionsOrSelector as QueuerOptions) - : (initialValueOrOptions as QueuerOptions) + ? (initialOptionsOrSelector as AngularQueuerOptions) + : (initialValueOrOptions as AngularQueuerOptions) const selector = hasInitialValue ? maybeSelector : (initialOptionsOrSelector as diff --git a/packages/angular-pacer/src/rate-limiter/injectRateLimitedCallback.ts b/packages/angular-pacer/src/rate-limiter/injectRateLimitedCallback.ts index 9babbf8b8..3405e3df0 100644 --- a/packages/angular-pacer/src/rate-limiter/injectRateLimitedCallback.ts +++ b/packages/angular-pacer/src/rate-limiter/injectRateLimitedCallback.ts @@ -1,5 +1,5 @@ import { injectRateLimiter } from './injectRateLimiter' -import type { RateLimiterOptions } from '@tanstack/pacer/rate-limiter' +import type { AngularRateLimiterOptions } from './injectRateLimiter' import type { AnyFunction } from '@tanstack/pacer/types' /** @@ -38,7 +38,7 @@ import type { AnyFunction } from '@tanstack/pacer/types' */ export function injectRateLimitedCallback( fn: TFn, - options: RateLimiterOptions, + options: AngularRateLimiterOptions, ): (...args: Parameters) => boolean { const rateLimiter = injectRateLimiter(fn, options) return (...args: Parameters) => rateLimiter.maybeExecute(...args) diff --git a/packages/angular-pacer/src/rate-limiter/injectRateLimitedSignal.ts b/packages/angular-pacer/src/rate-limiter/injectRateLimitedSignal.ts index 992e4c309..0fa2df836 100644 --- a/packages/angular-pacer/src/rate-limiter/injectRateLimitedSignal.ts +++ b/packages/angular-pacer/src/rate-limiter/injectRateLimitedSignal.ts @@ -1,10 +1,10 @@ import { signal } from '@angular/core' import { injectRateLimiter } from './injectRateLimiter' -import type { AngularRateLimiter } from './injectRateLimiter' import type { - RateLimiterOptions, - RateLimiterState, -} from '@tanstack/pacer/rate-limiter' + AngularRateLimiter, + AngularRateLimiterOptions, +} from './injectRateLimiter' +import type { RateLimiterState } from '@tanstack/pacer/rate-limiter' type Setter = (value: T | ((prev: T) => T)) => void @@ -56,7 +56,7 @@ export interface RateLimitedSignal { */ export function injectRateLimitedSignal( value: TValue, - initialOptions: RateLimiterOptions>, + initialOptions: AngularRateLimiterOptions, TSelected>, selector?: (state: RateLimiterState) => TSelected, ): RateLimitedSignal { const rateLimitedValue = signal(value) diff --git a/packages/angular-pacer/src/rate-limiter/injectRateLimitedValue.ts b/packages/angular-pacer/src/rate-limiter/injectRateLimitedValue.ts index 23bab1040..14c114d58 100644 --- a/packages/angular-pacer/src/rate-limiter/injectRateLimitedValue.ts +++ b/packages/angular-pacer/src/rate-limiter/injectRateLimitedValue.ts @@ -2,10 +2,8 @@ import { effect } from '@angular/core' import { injectRateLimitedSignal } from './injectRateLimitedSignal' import type { RateLimitedSignal } from './injectRateLimitedSignal' import type { Signal } from '@angular/core' -import type { - RateLimiterOptions, - RateLimiterState, -} from '@tanstack/pacer/rate-limiter' +import type { AngularRateLimiterOptions } from './injectRateLimiter' +import type { RateLimiterState } from '@tanstack/pacer/rate-limiter' type Setter = (value: T | ((prev: T) => T)) => void @@ -49,20 +47,22 @@ type Setter = (value: T | ((prev: T) => T)) => void */ export function injectRateLimitedValue( value: Signal, - initialOptions: RateLimiterOptions>, + initialOptions: AngularRateLimiterOptions, TSelected>, selector?: (state: RateLimiterState) => TSelected, ): RateLimitedSignal export function injectRateLimitedValue( value: Signal, initialValue: TValue, - initialOptions: RateLimiterOptions>, + initialOptions: AngularRateLimiterOptions, TSelected>, selector?: (state: RateLimiterState) => TSelected, ): RateLimitedSignal export function injectRateLimitedValue( value: Signal, - initialValueOrOptions: TValue | RateLimiterOptions>, + initialValueOrOptions: + | TValue + | AngularRateLimiterOptions, TSelected>, initialOptionsOrSelector?: - | RateLimiterOptions> + | AngularRateLimiterOptions, TSelected> | ((state: RateLimiterState) => TSelected), maybeSelector?: (state: RateLimiterState) => TSelected, ): RateLimitedSignal { @@ -76,8 +76,14 @@ export function injectRateLimitedValue( ? (initialValueOrOptions as TValue) : (undefined as unknown as TValue) const initialOptions = hasInitialValue - ? (initialOptionsOrSelector as RateLimiterOptions>) - : (initialValueOrOptions as RateLimiterOptions>) + ? (initialOptionsOrSelector as AngularRateLimiterOptions< + Setter, + TSelected + >) + : (initialValueOrOptions as AngularRateLimiterOptions< + Setter, + TSelected + >) const selector = hasInitialValue ? maybeSelector : (initialOptionsOrSelector as diff --git a/packages/angular-pacer/src/throttler/injectThrottledCallback.ts b/packages/angular-pacer/src/throttler/injectThrottledCallback.ts index f92e8285b..98f900fb5 100644 --- a/packages/angular-pacer/src/throttler/injectThrottledCallback.ts +++ b/packages/angular-pacer/src/throttler/injectThrottledCallback.ts @@ -1,5 +1,5 @@ import { injectThrottler } from './injectThrottler' -import type { ThrottlerOptions } from '@tanstack/pacer/throttler' +import type { AngularThrottlerOptions } from './injectThrottler' import type { AnyFunction } from '@tanstack/pacer/types' /** @@ -38,7 +38,7 @@ import type { AnyFunction } from '@tanstack/pacer/types' */ export function injectThrottledCallback( fn: TFn, - options: ThrottlerOptions, + options: AngularThrottlerOptions, ): (...args: Parameters) => void { const throttler = injectThrottler(fn, options) return (...args: Parameters) => throttler.maybeExecute(...args) diff --git a/packages/angular-pacer/src/throttler/injectThrottledSignal.ts b/packages/angular-pacer/src/throttler/injectThrottledSignal.ts index 37cd1aace..14d191d05 100644 --- a/packages/angular-pacer/src/throttler/injectThrottledSignal.ts +++ b/packages/angular-pacer/src/throttler/injectThrottledSignal.ts @@ -1,10 +1,10 @@ import { signal } from '@angular/core' import { injectThrottler } from './injectThrottler' -import type { AngularThrottler } from './injectThrottler' import type { - ThrottlerOptions, - ThrottlerState, -} from '@tanstack/pacer/throttler' + AngularThrottler, + AngularThrottlerOptions, +} from './injectThrottler' +import type { ThrottlerState } from '@tanstack/pacer/throttler' type Setter = (value: T | ((prev: T) => T)) => void @@ -63,7 +63,7 @@ export interface ThrottledSignal { */ export function injectThrottledSignal( value: TValue, - initialOptions: ThrottlerOptions>, + initialOptions: AngularThrottlerOptions, TSelected>, selector?: (state: ThrottlerState>) => TSelected, ): ThrottledSignal { const throttledValue = signal(value) diff --git a/packages/angular-pacer/src/throttler/injectThrottledValue.ts b/packages/angular-pacer/src/throttler/injectThrottledValue.ts index 8a91cc10f..ba08edeca 100644 --- a/packages/angular-pacer/src/throttler/injectThrottledValue.ts +++ b/packages/angular-pacer/src/throttler/injectThrottledValue.ts @@ -2,10 +2,8 @@ import { effect } from '@angular/core' import { injectThrottledSignal } from './injectThrottledSignal' import type { ThrottledSignal } from './injectThrottledSignal' import type { Signal } from '@angular/core' -import type { - ThrottlerOptions, - ThrottlerState, -} from '@tanstack/pacer/throttler' +import type { AngularThrottlerOptions } from './injectThrottler' +import type { ThrottlerState } from '@tanstack/pacer/throttler' type Setter = (value: T | ((prev: T) => T)) => void @@ -74,20 +72,22 @@ type Setter = (value: T | ((prev: T) => T)) => void */ export function injectThrottledValue( value: Signal, - initialOptions: ThrottlerOptions>, + initialOptions: AngularThrottlerOptions, TSelected>, selector?: (state: ThrottlerState>) => TSelected, ): ThrottledSignal export function injectThrottledValue( value: Signal, initialValue: TValue, - initialOptions: ThrottlerOptions>, + initialOptions: AngularThrottlerOptions, TSelected>, selector?: (state: ThrottlerState>) => TSelected, ): ThrottledSignal export function injectThrottledValue( value: Signal, - initialValueOrOptions: TValue | ThrottlerOptions>, + initialValueOrOptions: + | TValue + | AngularThrottlerOptions, TSelected>, initialOptionsOrSelector?: - | ThrottlerOptions> + | AngularThrottlerOptions, TSelected> | ((state: ThrottlerState>) => TSelected), maybeSelector?: (state: ThrottlerState>) => TSelected, ): ThrottledSignal { @@ -101,8 +101,14 @@ export function injectThrottledValue( ? (initialValueOrOptions as TValue) : (undefined as unknown as TValue) const initialOptions = hasInitialValue - ? (initialOptionsOrSelector as ThrottlerOptions>) - : (initialValueOrOptions as ThrottlerOptions>) + ? (initialOptionsOrSelector as AngularThrottlerOptions< + Setter, + TSelected + >) + : (initialValueOrOptions as AngularThrottlerOptions< + Setter, + TSelected + >) const selector = hasInitialValue ? maybeSelector : (initialOptionsOrSelector as From 55025adc74da4dcbdee32ed30d0790654e8b5cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjam=C3=ADn=20Vicente?= Date: Sat, 6 Jun 2026 10:59:35 -0400 Subject: [PATCH 8/8] chore: bump angular deps --- packages/angular-pacer/package.json | 8 +- pnpm-lock.yaml | 429 +++++++++++++++++----------- 2 files changed, 268 insertions(+), 169 deletions(-) diff --git a/packages/angular-pacer/package.json b/packages/angular-pacer/package.json index f5f8d5222..5d3e0a61e 100644 --- a/packages/angular-pacer/package.json +++ b/packages/angular-pacer/package.json @@ -112,12 +112,12 @@ "@tanstack/pacer": "workspace:*" }, "devDependencies": { - "@analogjs/vite-plugin-angular": "^2.2.3", - "@analogjs/vitest-angular": "^2.2.3", + "@analogjs/vite-plugin-angular": "^2.6.0", + "@analogjs/vitest-angular": "^2.6.0", "@angular/compiler": "^21.2.12", "@angular/core": "^21.2.12", - "jsdom": "^28.1.0", - "@types/node": "^25.7.0" + "@types/node": "^25.7.0", + "jsdom": "^29.1.1" }, "peerDependencies": { "@angular/core": ">=17.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16a7ae3f4..b3812ee94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4329,11 +4329,11 @@ importers: version: link:../pacer devDependencies: '@analogjs/vite-plugin-angular': - specifier: ^2.2.3 - version: 2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)) + specifier: ^2.6.0 + version: 2.6.0(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)) '@analogjs/vitest-angular': - specifier: ^2.2.3 - version: 2.2.3(@analogjs/vite-plugin-angular@2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)))(@angular-devkit/architect@0.2102.13(chokidar@5.0.0))(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0))) + specifier: ^2.6.0 + version: 2.6.0(688197b90c183dc7305df80ff2aff7c1) '@angular/compiler': specifier: ^21.2.12 version: 21.2.15 @@ -4344,8 +4344,8 @@ importers: specifier: ^25.7.0 version: 25.7.0 jsdom: - specifier: ^28.1.0 - version: 28.1.0 + specifier: ^29.1.1 + version: 29.1.1 packages/pacer: dependencies: @@ -4548,9 +4548,6 @@ importers: packages: - '@acemir/cssom@0.9.31': - resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} - '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} @@ -4614,23 +4611,31 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@analogjs/vite-plugin-angular@2.2.3': - resolution: {integrity: sha512-OqVfiJsaHdHMxzvK0heVvp8MenSXh+xib6/p+v3d44kJ3J7ooD4gRx/jKC350zkgRKwcZc3a0ybGUnG6LEF7mg==} + '@analogjs/vite-plugin-angular@2.6.0': + resolution: {integrity: sha512-fPo2RgkJxLijIe9o+VSrUmfzZDEXVqXX5a86vpj/cAuuY62Of02g6G6QrqHtIkDFSUdEK8cbY/8zAiZlXW0/Hw==} peerDependencies: - '@angular-devkit/build-angular': ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 - '@angular/build': ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 + '@angular-devkit/build-angular': ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0 + '@angular/build': ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@angular-devkit/build-angular': optional: true '@angular/build': optional: true + vite: + optional: true - '@analogjs/vitest-angular@2.2.3': - resolution: {integrity: sha512-514A8RqT4sQnWj/3pHnoGrvDLYjcUTWL3d00GCQ4MVRUpisUg2R8tC/PZ/3ZARK5SskIwy5LwPEg4RFX0iOSug==} + '@analogjs/vitest-angular@2.6.0': + resolution: {integrity: sha512-vf3ZhUU3fzdCm+IXLj+ySFzCw+p7T4pXGegC6puow406fpnSpTt7L5AIrNUsSAsMWJRZh7bCzIxTNPdfQykSJw==} peerDependencies: '@analogjs/vite-plugin-angular': '*' - '@angular-devkit/architect': '>=0.1500.0 < 0.2200.0' + '@angular-devkit/architect': '>=0.1700.0 < 0.2300.0 || >=0.2200.0 < 0.2300.0' + '@angular-devkit/schematics': '>=17.0.0' vitest: ^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 + zone.js: '>=0.14.0' + peerDependenciesMeta: + zone.js: + optional: true '@angular-devkit/architect@0.2102.13': resolution: {integrity: sha512-fheyi0gPx6b7tT+WQ+ePlzdGqKjPLUK72wg5Z9pkVtQ5+VN/8yB9mlRlmoivngd2FeNG9wMeNynWZGYycnOWVw==} @@ -4769,9 +4774,6 @@ packages: resolution: {integrity: sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@6.8.1': - resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} - '@asamuzakjp/dom-selector@7.1.1': resolution: {integrity: sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -6159,48 +6161,97 @@ packages: cpu: [x64] os: [win32] + '@oxc-parser/binding-android-arm-eabi@0.121.0': + resolution: {integrity: sha512-n07FQcySwOlzap424/PLMtOkbS7xOu8nsJduKL8P3COGHKgKoDYXwoAHCbChfgFpHnviehrLWIPX0lKGtbEk/A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + '@oxc-parser/binding-android-arm-eabi@0.133.0': resolution: {integrity: sha512-l/44caGse+VpnY9gx0yvvc5QnnG3yG1FO3KZgYvNL1GZrfK86zIwAOgGEVlxDyRymzrU/KHiblPFpevKOmJmUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] + '@oxc-parser/binding-android-arm64@0.121.0': + resolution: {integrity: sha512-/Dd1xIXboYAicw+twT2utxPD7bL8qh7d3ej0qvaYIMj3/EgIrGR+tSnjCUkiCT6g6uTC0neSS4JY8LxhdSU/sA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@oxc-parser/binding-android-arm64@0.133.0': resolution: {integrity: sha512-KUHmPMziLBp4u+zbrLdB7iWS7KshuZe+RAp7ELnY9SI9nNXBZ+dp8fiBqWOxhXqn+FQg3a4UcQhwmsJOKV8Jjg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] + '@oxc-parser/binding-darwin-arm64@0.121.0': + resolution: {integrity: sha512-A0jNEvv7QMtCO1yk205t3DWU9sWUjQ2KNF0hSVO5W9R9r/R1BIvzG01UQAfmtC0dQm7sCrs5puixurKSfr2bRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@oxc-parser/binding-darwin-arm64@0.133.0': resolution: {integrity: sha512-q8dWmnU/8ea2tga9w2f1PinQ5rcMPDUGkF64T189b65YMjUomET4oy5oRldOr4AwOQkneOG/Zttnz1Dvrc62wg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@oxc-parser/binding-darwin-x64@0.121.0': + resolution: {integrity: sha512-SsHzipdxTKUs3I9EOAPmnIimEeJOemqRlRDOp9LIj+96wtxZejF51gNibmoGq8KoqbT1ssAI5po/E3J+vEtXGA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@oxc-parser/binding-darwin-x64@0.133.0': resolution: {integrity: sha512-cOKeIELIB2bJnCKwqx4Rdj+1Lss/U6uCbLxRySZrhyOOQa1flKhwZFjEHRHxk8fU1NKmhK5OnTdPQ4CpjuFuVw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@oxc-parser/binding-freebsd-x64@0.121.0': + resolution: {integrity: sha512-v1APOTkCp+RWOIDAHRoaeW/UoaHF15a60E8eUL6kUQXh+i4K7PBwq2Wi7jm8p0ymID5/m/oC1w3W31Z/+r7HQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@oxc-parser/binding-freebsd-x64@0.133.0': resolution: {integrity: sha512-OpaSv4pW3KgFrMYQxTaS0aOE4T1DQF3qZE/4B6uqqv1KgPWWd4UQhJALi8PJPX1RRV5K7ThKXRfF7qGg2+3l1A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': + resolution: {integrity: sha512-PmqPQuqHZyFVWA4ycr0eu4VnTMmq9laOHZd+8R359w6kzuNZPvmmunmNJ8ybkm769A0nCoVp3TJ6dUz7B3FYIQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxc-parser/binding-linux-arm-gnueabihf@0.133.0': resolution: {integrity: sha512-JGK1wlGrGwxBIlVSF7KWTX1/ru6BEtf28fRROztDRkLfiW+Kxa4onnriezMIiogfn9hVw2KzYcKiLjkLR2ns8A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': + resolution: {integrity: sha512-vF24htj+MOH+Q7y9A8NuC6pUZu8t/C2Fr/kDOi2OcNf28oogr2xadBPXAbml802E8wRAVfbta6YLDQTearz+jw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxc-parser/binding-linux-arm-musleabihf@0.133.0': resolution: {integrity: sha512-yuZO533Ftonxn/iyoqQzURzLQHMspvsIyfiCSNi1t/ER4eIQaR0SsmUOUm5b/lmSig7IWIUa5/BrbEkAPwcilQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@oxc-parser/binding-linux-arm64-gnu@0.121.0': + resolution: {integrity: sha512-wjH8cIG2Lu/3d64iZpbYr73hREMgKAfu7fqpXjgM2S16y2zhTfDIp8EQjxO8vlDtKP5Rc7waZW72lh8nZtWrpA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-arm64-gnu@0.133.0': resolution: {integrity: sha512-hvpbqT5pN2rR+3+xtWeizwfR/aZ0vGceg6TqYMl+ToxMpk9/tmnX7kSvQnfEUkoua8mhogzvIKsAkn0wxgblBA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6208,6 +6259,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-arm64-musl@0.121.0': + resolution: {integrity: sha512-qT663J/W8yQFw3dtscbEi9LKJevr20V7uWs2MPGTnvNZ3rm8anhhE16gXGpxDOHeg9raySaSHKhd4IGa3YZvuw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-arm64-musl@0.133.0': resolution: {integrity: sha512-wJQGamIosQBoJHW9+S5XxrtKRo3eyJxsnS1XCPrqN0LHi8uw1pTqqTfn3t/NVuvbBg7Pumn4ez9Eidgcn0xbEg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6215,6 +6273,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': + resolution: {integrity: sha512-mYNe4NhVvDBbPkAP8JaVS8lC1dsoJZWH5WCjpw5E+sjhk1R08wt3NnXYUzum7tIiWPfgQxbCMcoxgeemFASbRw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-ppc64-gnu@0.133.0': resolution: {integrity: sha512-Koaz32/O5+abIfrNGdyndgRvdOZ9jEf5/z3Ep9h3h2QWpdDiUQpVwgH0OcMXCs+l9aXxPLtkupqyVig9W6FDKw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6222,6 +6287,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': + resolution: {integrity: sha512-+QiFoGxhAbaI/amqX567784cDyyuZIpinBrJNxUzb+/L2aBRX67mN6Jv40pqduHf15yYByI+K5gUEygCuv0z9w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-riscv64-gnu@0.133.0': resolution: {integrity: sha512-R4vOjWzxhnNWHnVLeiB6jNuIifdy9vcMXZGPc7StXcxBovI+U2zg1QhZ9o8OjV80oGivs1lX5NfPLzk4IPqlRA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6229,6 +6301,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-riscv64-musl@0.121.0': + resolution: {integrity: sha512-9ykEgyTa5JD/Uhv2sttbKnCfl2PieUfOjyxJC/oDL2UO0qtXOtjPLl7H8Kaj5G7p3hIvFgu3YWvAxvE0sqY+hQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-riscv64-musl@0.133.0': resolution: {integrity: sha512-iwgBNUTHiMdxARLYuM0SBlnYeb19iw1Ea5M+4ERZupCsBMLArti6FyZ6UfFjJxIiTDr2oW2DGQFxlQVQ/dW9rA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6236,6 +6315,13 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-linux-s390x-gnu@0.121.0': + resolution: {integrity: sha512-DB1EW5VHZdc1lIRjOI3bW/wV6R6y0xlfvdVrqj6kKi7Ayu2U3UqUBdq9KviVkcUGd5Oq+dROqvUEEFRXGAM7EQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-s390x-gnu@0.133.0': resolution: {integrity: sha512-ZwZNo8FZmB/gVfboQl+wXilBigGl+6nQQs+nITOeAP/HcAOjiHl6XZJL9F/KXNEspODQcbjAiyjUbeCJd9a0fA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6243,6 +6329,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.121.0': + resolution: {integrity: sha512-s4lfobX9p4kPTclvMiH3gcQUd88VlnkMTF6n2MTMDAyX5FPNRhhRSFZK05Ykhf8Zy5NibV4PbGR6DnK7FGNN6A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@oxc-parser/binding-linux-x64-gnu@0.133.0': resolution: {integrity: sha512-govCvWx1dBlED3uu4qXctxpRcouu9I8Kn+DBktGCl760JtlGJzc9l/OmPJKlYWSbrRqKkMZehNeZ/4Wfma7uSA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6250,6 +6343,13 @@ packages: os: [linux] libc: [glibc] + '@oxc-parser/binding-linux-x64-musl@0.121.0': + resolution: {integrity: sha512-P9KlyTpuBuMi3NRGpJO8MicuGZfOoqZVRP1WjOecwx8yk4L/+mrCRNc5egSi0byhuReblBF2oVoDSMgV9Bj4Hw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@oxc-parser/binding-linux-x64-musl@0.133.0': resolution: {integrity: sha512-ssTlpXD5Mq9uCssDJPzlRWqBt4Y7Zzd9i+XZhWmK/9Y6KUIuAxVYTYiI8lxcGWi0+3/Cz4A8q9UrD4NK9Y2j7g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6257,29 +6357,58 @@ packages: os: [linux] libc: [musl] + '@oxc-parser/binding-openharmony-arm64@0.121.0': + resolution: {integrity: sha512-R+4jrWOfF2OAPPhj3Eb3U5CaKNAH9/btMveMULIrcNW/hjfysFQlF8wE0GaVBr81dWz8JLgQlsxwctoL78JwXw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@oxc-parser/binding-openharmony-arm64@0.133.0': resolution: {integrity: sha512-51aByfXhPtLEdWG4a2Ihdw6cPWV1ei1AarALpFdDP8MLWDLE2NuUMgbo3DERR2Kt8fT/ok1GUvBiLxVGke9uUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@oxc-parser/binding-wasm32-wasi@0.121.0': + resolution: {integrity: sha512-5TFISkPTymKvsmIlKasPVTPuWxzCcrT8pM+p77+mtQbIZDd1UC8zww4CJcRI46kolmgrEX6QpKO8AvWMVZ+ifw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@oxc-parser/binding-wasm32-wasi@0.133.0': resolution: {integrity: sha512-2e16tkKp+wDO2GTAmXfxbBcCmGEaFPIJEIRBBmVKNVXSc8/fJsSIaBGyFTPHM9ST5GNWgJcYIt94rDTks+PLwA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] + '@oxc-parser/binding-win32-arm64-msvc@0.121.0': + resolution: {integrity: sha512-V0pxh4mql4XTt3aiEtRNUeBAUFOw5jzZNxPABLaOKAWrVzSr9+XUaB095lY7jqMf5t8vkfh8NManGB28zanYKw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@oxc-parser/binding-win32-arm64-msvc@0.133.0': resolution: {integrity: sha512-KPTNDKbxH1cglrqTyVeXHb4Pk4oksz8EcE1/v8zqU7N4UXbiHfA/IwtXZ2U77fnRAWBbgVkl/lZbL7o3hRdejg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@oxc-parser/binding-win32-ia32-msvc@0.121.0': + resolution: {integrity: sha512-4Ob1qvYMPnlF2N9rdmKdkQFdrq16QVcQwBsO8yiPZXof0fHKFF+LmQV501XFbi7lHyrKm8rlJRfQ/M8bZZPVLw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + '@oxc-parser/binding-win32-ia32-msvc@0.133.0': resolution: {integrity: sha512-Una1bNYv9zCavQrfnDR9wuZVB3itLjCEH4Oz7i6CwAJN/Xq9b+zbbcxmvdkKvvJt4Ngc/MBmIYlbLo3zS4TQ0A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.121.0': + resolution: {integrity: sha512-BOp1KCzdboB1tPqoCPXgntgFs0jjeSyOXHzgxVFR7B/qfr3F8r4YDacHkTOUNXtDgM8YwKnkf3rE5gwALYX7NA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxc-parser/binding-win32-x64-msvc@0.133.0': resolution: {integrity: sha512-kjBhCiOGSYTwDJQuuZa7a94JbP8htWu7J0X1KwH74kV2K5eYf6eyJRYmkpCDvr0XEL8tMxYI4WU1VekblFCLgg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -6289,6 +6418,9 @@ packages: '@oxc-project/types@0.113.0': resolution: {integrity: sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==} + '@oxc-project/types@0.121.0': + resolution: {integrity: sha512-CGtOARQb9tyv7ECgdAlFxi0Fv7lmzvmlm2rpD/RdijOO9rfk/JvB1CjT8EnoD+tjna/IYgKKw3IV7objRb+aYw==} + '@oxc-project/types@0.132.0': resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} @@ -7931,10 +8063,6 @@ packages: css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} - cssstyle@6.2.0: - resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} - engines: {node: '>=20'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -8869,15 +8997,6 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@28.1.0: - resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - peerDependencies: - canvas: ^3.0.0 - peerDependenciesMeta: - canvas: - optional: true - jsdom@29.1.1: resolution: {integrity: sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} @@ -9391,6 +9510,10 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + oxc-parser@0.121.0: + resolution: {integrity: sha512-ek9o58+SCv6AV7nchiAcUJy1DNE2CC5WRdBcO0mF+W4oRjNQfPO7b3pLjTHSFECpHkKGOZSQxx3hk8viIL5YCg==} + engines: {node: ^20.19.0 || >=22.12.0} + oxc-parser@0.133.0: resolution: {integrity: sha512-661RSx+ZcjBmjBYid+Fpp/2F5EbtildpeoZh5HdgnGs+jZ03nqQEQW8yGkt4BGyOC3OMPDQQRl8M5kqD2/g6jw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -10666,8 +10789,6 @@ packages: snapshots: - '@acemir/cssom@0.9.31': {} - '@adobe/css-tools@4.4.4': {} '@algolia/abtesting@1.14.1': @@ -10759,17 +10880,26 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@analogjs/vite-plugin-angular@2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0))': + '@analogjs/vite-plugin-angular@2.6.0(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0))': dependencies: + magic-string: 0.30.21 + obug: 2.1.1 + oxc-parser: 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + tinyglobby: 0.2.17 ts-morph: 21.0.1 optionalDependencies: - '@angular/build': 21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0) + '@angular/build': 21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0) + vite: 8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - '@analogjs/vitest-angular@2.2.3(@analogjs/vite-plugin-angular@2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)))(@angular-devkit/architect@0.2102.13(chokidar@5.0.0))(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))': + '@analogjs/vitest-angular@2.6.0(688197b90c183dc7305df80ff2aff7c1)': dependencies: - '@analogjs/vite-plugin-angular': 2.2.3(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)) + '@analogjs/vite-plugin-angular': 2.6.0(@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)) '@angular-devkit/architect': 0.2102.13(chokidar@5.0.0) - vitest: 4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)) + '@angular-devkit/schematics': 21.2.13(chokidar@5.0.0) + vitest: 4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)) '@angular-devkit/architect@0.2102.13(chokidar@5.0.0)': dependencies: @@ -10799,61 +10929,6 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2102.13(chokidar@5.0.0) - '@angular/compiler': 21.2.15 - '@angular/compiler-cli': 21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3) - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-split-export-declaration': 7.24.7 - '@inquirer/confirm': 5.1.21(@types/node@25.7.0) - '@vitejs/plugin-basic-ssl': 2.1.4(vite@7.3.2(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.97.3)(yaml@2.9.0)) - beasties: 0.4.1 - browserslist: 4.28.2 - esbuild: 0.27.3 - https-proxy-agent: 7.0.6 - istanbul-lib-instrument: 6.0.3 - jsonc-parser: 3.3.1 - listr2: 9.0.5 - magic-string: 0.30.21 - mrmime: 2.0.1 - parse5-html-rewriting-stream: 8.0.0 - picomatch: 4.0.4 - piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - sass: 1.97.3 - semver: 7.7.4 - source-map-support: 0.5.21 - tinyglobby: 0.2.15 - tslib: 2.8.1 - typescript: 6.0.3 - undici: 7.24.4 - vite: 7.3.2(@types/node@25.7.0)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.97.3)(yaml@2.9.0) - watchpack: 2.5.1 - optionalDependencies: - '@angular/core': 21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2) - '@angular/platform-browser': 21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)) - lmdb: 3.5.1 - postcss: 8.5.15 - vitest: 4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - optional: true - '@angular/build@21.2.13(@angular/compiler-cli@21.2.15(@angular/compiler@21.2.15)(typescript@6.0.3))(@angular/compiler@21.2.15)(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(@angular/platform-browser@21.2.15(@angular/common@21.2.15(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.15(@angular/compiler@21.2.15)(rxjs@7.8.2)))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.7.0)(chokidar@5.0.0)(jiti@2.7.0)(lightningcss@1.32.0)(postcss@8.5.15)(tslib@2.8.1)(typescript@6.0.3)(vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)))(yaml@2.9.0)': dependencies: '@ampproject/remapping': 2.3.0 @@ -10998,14 +11073,6 @@ snapshots: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@asamuzakjp/dom-selector@6.8.1': - dependencies: - '@asamuzakjp/nwsapi': 2.3.9 - bidi-js: 1.0.3 - css-tree: 3.2.1 - is-potential-custom-element-name: 1.0.1 - lru-cache: 11.3.5 - '@asamuzakjp/dom-selector@7.1.1': dependencies: '@asamuzakjp/generational-cache': 1.0.1 @@ -12282,54 +12349,110 @@ snapshots: '@nx/nx-win32-x64-msvc@22.7.5': optional: true + '@oxc-parser/binding-android-arm-eabi@0.121.0': + optional: true + '@oxc-parser/binding-android-arm-eabi@0.133.0': optional: true + '@oxc-parser/binding-android-arm64@0.121.0': + optional: true + '@oxc-parser/binding-android-arm64@0.133.0': optional: true + '@oxc-parser/binding-darwin-arm64@0.121.0': + optional: true + '@oxc-parser/binding-darwin-arm64@0.133.0': optional: true + '@oxc-parser/binding-darwin-x64@0.121.0': + optional: true + '@oxc-parser/binding-darwin-x64@0.133.0': optional: true + '@oxc-parser/binding-freebsd-x64@0.121.0': + optional: true + '@oxc-parser/binding-freebsd-x64@0.133.0': optional: true + '@oxc-parser/binding-linux-arm-gnueabihf@0.121.0': + optional: true + '@oxc-parser/binding-linux-arm-gnueabihf@0.133.0': optional: true + '@oxc-parser/binding-linux-arm-musleabihf@0.121.0': + optional: true + '@oxc-parser/binding-linux-arm-musleabihf@0.133.0': optional: true + '@oxc-parser/binding-linux-arm64-gnu@0.121.0': + optional: true + '@oxc-parser/binding-linux-arm64-gnu@0.133.0': optional: true + '@oxc-parser/binding-linux-arm64-musl@0.121.0': + optional: true + '@oxc-parser/binding-linux-arm64-musl@0.133.0': optional: true + '@oxc-parser/binding-linux-ppc64-gnu@0.121.0': + optional: true + '@oxc-parser/binding-linux-ppc64-gnu@0.133.0': optional: true + '@oxc-parser/binding-linux-riscv64-gnu@0.121.0': + optional: true + '@oxc-parser/binding-linux-riscv64-gnu@0.133.0': optional: true + '@oxc-parser/binding-linux-riscv64-musl@0.121.0': + optional: true + '@oxc-parser/binding-linux-riscv64-musl@0.133.0': optional: true + '@oxc-parser/binding-linux-s390x-gnu@0.121.0': + optional: true + '@oxc-parser/binding-linux-s390x-gnu@0.133.0': optional: true + '@oxc-parser/binding-linux-x64-gnu@0.121.0': + optional: true + '@oxc-parser/binding-linux-x64-gnu@0.133.0': optional: true + '@oxc-parser/binding-linux-x64-musl@0.121.0': + optional: true + '@oxc-parser/binding-linux-x64-musl@0.133.0': optional: true + '@oxc-parser/binding-openharmony-arm64@0.121.0': + optional: true + '@oxc-parser/binding-openharmony-arm64@0.133.0': optional: true + '@oxc-parser/binding-wasm32-wasi@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + optional: true + '@oxc-parser/binding-wasm32-wasi@0.133.0': dependencies: '@emnapi/core': 1.10.0 @@ -12337,17 +12460,28 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true + '@oxc-parser/binding-win32-arm64-msvc@0.121.0': + optional: true + '@oxc-parser/binding-win32-arm64-msvc@0.133.0': optional: true + '@oxc-parser/binding-win32-ia32-msvc@0.121.0': + optional: true + '@oxc-parser/binding-win32-ia32-msvc@0.133.0': optional: true + '@oxc-parser/binding-win32-x64-msvc@0.121.0': + optional: true + '@oxc-parser/binding-win32-x64-msvc@0.133.0': optional: true '@oxc-project/types@0.113.0': {} + '@oxc-project/types@0.121.0': {} + '@oxc-project/types@0.132.0': {} '@oxc-project/types@0.133.0': {} @@ -13860,13 +13994,6 @@ snapshots: css.escape@1.5.1: {} - cssstyle@6.2.0: - dependencies: - '@asamuzakjp/css-color': 5.1.11 - '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) - css-tree: 3.2.1 - lru-cache: 11.3.5 - csstype@3.2.3: {} data-urls@7.0.0: @@ -14937,33 +15064,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@28.1.0: - dependencies: - '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.8.1 - '@bramus/specificity': 2.4.2 - '@exodus/bytes': 1.15.0 - cssstyle: 6.2.0 - data-urls: 7.0.0 - decimal.js: 10.6.0 - html-encoding-sniffer: 6.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - is-potential-custom-element-name: 1.0.1 - parse5: 8.0.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 6.0.1 - undici: 7.25.0 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 8.0.1 - whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.1 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - '@noble/hashes' - - supports-color - jsdom@29.1.1: dependencies: '@asamuzakjp/css-color': 5.1.11 @@ -15626,6 +15726,34 @@ snapshots: outdent@0.5.0: {} + oxc-parser@0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + dependencies: + '@oxc-project/types': 0.121.0 + optionalDependencies: + '@oxc-parser/binding-android-arm-eabi': 0.121.0 + '@oxc-parser/binding-android-arm64': 0.121.0 + '@oxc-parser/binding-darwin-arm64': 0.121.0 + '@oxc-parser/binding-darwin-x64': 0.121.0 + '@oxc-parser/binding-freebsd-x64': 0.121.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.121.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.121.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.121.0 + '@oxc-parser/binding-linux-arm64-musl': 0.121.0 + '@oxc-parser/binding-linux-ppc64-gnu': 0.121.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.121.0 + '@oxc-parser/binding-linux-riscv64-musl': 0.121.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.121.0 + '@oxc-parser/binding-linux-x64-gnu': 0.121.0 + '@oxc-parser/binding-linux-x64-musl': 0.121.0 + '@oxc-parser/binding-openharmony-arm64': 0.121.0 + '@oxc-parser/binding-wasm32-wasi': 0.121.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@oxc-parser/binding-win32-arm64-msvc': 0.121.0 + '@oxc-parser/binding-win32-ia32-msvc': 0.121.0 + '@oxc-parser/binding-win32-x64-msvc': 0.121.0 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + oxc-parser@0.133.0: dependencies: '@oxc-project/types': 0.133.0 @@ -16740,35 +16868,6 @@ snapshots: optionalDependencies: vite: 8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0) - vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@28.1.0)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)): - dependencies: - '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.7 - '@vitest/runner': 4.1.7 - '@vitest/snapshot': 4.1.7 - '@vitest/spy': 4.1.7 - '@vitest/utils': 4.1.7 - es-module-lexer: 2.0.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.1.2 - tinyglobby: 0.2.17 - tinyrainbow: 3.1.0 - vite: 8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.7.0 - happy-dom: 20.9.0 - jsdom: 28.1.0 - transitivePeerDependencies: - - msw - vitest@4.1.7(@types/node@25.7.0)(happy-dom@20.9.0)(jsdom@29.1.1)(vite@8.0.16(@types/node@25.7.0)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.97.3)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.7