@jscutlery/rx-computed 0.5.13 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { assertInInjectionContext, computed, effect, inject, Injector, signal, } from '@angular/core';
1
+ import { assertInInjectionContext, computed, effect, inject, Injector, signal, untracked, } from '@angular/core';
2
2
  import { pending, suspensify } from '@jscutlery/operators';
3
3
  export function rxComputed(fn, { initialValue, injector, } = {}) {
4
4
  if (!injector)
@@ -8,9 +8,9 @@ export function rxComputed(fn, { initialValue, injector, } = {}) {
8
8
  effect((onCleanup) => {
9
9
  const sub = fn()
10
10
  .pipe(suspensify())
11
- .subscribe((value) => sig.set(value));
11
+ .subscribe((value) => untracked(() => sig.set(value)));
12
12
  onCleanup(() => sub.unsubscribe());
13
- }, { allowSignalWrites: true, injector });
13
+ }, { injector });
14
14
  return computed(() => {
15
15
  const suspense = sig();
16
16
  if (suspense.hasError) {
@@ -22,4 +22,4 @@ export function rxComputed(fn, { initialValue, injector, } = {}) {
22
22
  return initialValue;
23
23
  });
24
24
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtY29tcHV0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yeC1jb21wdXRlZC9zcmMvbGliL3J4LWNvbXB1dGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFZLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3JFLE1BQU0sVUFBVSxVQUFVLENBQ3hCLEVBQXVCLEVBQ3ZCLEVBQ0UsWUFBWSxFQUNaLFFBQVEsTUFDaUQsRUFBRTtJQUU3RCxJQUFJLENBQUMsUUFBUTtRQUFFLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUE4QixPQUFPLENBQUMsQ0FBQztJQUV6RCxNQUFNLENBQ0osQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNaLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRTthQUNiLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNsQixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUN0QyxDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ25CLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxPQUFPLFlBQTZCLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBzaWduYWwsXG4gIFNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwZW5kaW5nLCBTdXNwZW5zZSwgc3VzcGVuc2lmeSB9IGZyb20gJ0Bqc2N1dGxlcnkvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJ4Q29tcHV0ZWQ8VCwgSU5JVElBTF9WQUxVRSA9IFQgfCBudWxsIHwgdW5kZWZpbmVkPihcbiAgZm46ICgpID0+IE9ic2VydmFibGU8VD4sXG4gIHtcbiAgICBpbml0aWFsVmFsdWUsXG4gICAgaW5qZWN0b3IsXG4gIH06IHsgaW5pdGlhbFZhbHVlPzogSU5JVElBTF9WQUxVRTsgaW5qZWN0b3I/OiBJbmplY3RvciB9ID0ge31cbik6IFNpZ25hbDxUIHwgSU5JVElBTF9WQUxVRT4ge1xuICBpZiAoIWluamVjdG9yKSBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQocnhDb21wdXRlZCk7XG4gIGluamVjdG9yID8/PSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIGNvbnN0IHNpZyA9IHNpZ25hbDxTdXNwZW5zZTxUIHwgSU5JVElBTF9WQUxVRT4+KHBlbmRpbmcpO1xuXG4gIGVmZmVjdChcbiAgICAob25DbGVhbnVwKSA9PiB7XG4gICAgICBjb25zdCBzdWIgPSBmbigpXG4gICAgICAgIC5waXBlKHN1c3BlbnNpZnkoKSlcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHNpZy5zZXQodmFsdWUpKTtcbiAgICAgIG9uQ2xlYW51cCgoKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlLCBpbmplY3RvciB9XG4gICk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdXNwZW5zZSA9IHNpZygpO1xuICAgIGlmIChzdXNwZW5zZS5oYXNFcnJvcikge1xuICAgICAgdGhyb3cgc3VzcGVuc2UuZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHN1c3BlbnNlLmhhc1ZhbHVlKSB7XG4gICAgICByZXR1cm4gc3VzcGVuc2UudmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaXRpYWxWYWx1ZSBhcyBJTklUSUFMX1ZBTFVFO1xuICB9KTtcbn1cbiJdfQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtY29tcHV0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yeC1jb21wdXRlZC9zcmMvbGliL3J4LWNvbXB1dGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBWSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdyRSxNQUFNLFVBQVUsVUFBVSxDQUN4QixFQUF1QixFQUN2QixFQUNFLFlBQVksRUFDWixRQUFRLE1BQ2lELEVBQUU7SUFFN0QsSUFBSSxDQUFDLFFBQVE7UUFBRSx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRCxRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBOEIsT0FBTyxDQUFDLENBQUM7SUFFekQsTUFBTSxDQUNKLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDWixNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUU7YUFDYixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDbEIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxDQUNiLENBQUM7SUFFRixPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDbkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDeEIsQ0FBQztRQUVELE9BQU8sWUFBNkIsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgSW5qZWN0b3IsXG4gIHNpZ25hbCxcbiAgU2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGVuZGluZywgU3VzcGVuc2UsIHN1c3BlbnNpZnkgfSBmcm9tICdAanNjdXRsZXJ5L29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByeENvbXB1dGVkPFQsIElOSVRJQUxfVkFMVUUgPSBUIHwgbnVsbCB8IHVuZGVmaW5lZD4oXG4gIGZuOiAoKSA9PiBPYnNlcnZhYmxlPFQ+LFxuICB7XG4gICAgaW5pdGlhbFZhbHVlLFxuICAgIGluamVjdG9yLFxuICB9OiB7IGluaXRpYWxWYWx1ZT86IElOSVRJQUxfVkFMVUU7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKTogU2lnbmFsPFQgfCBJTklUSUFMX1ZBTFVFPiB7XG4gIGlmICghaW5qZWN0b3IpIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChyeENvbXB1dGVkKTtcbiAgaW5qZWN0b3IgPz89IGluamVjdChJbmplY3Rvcik7XG5cbiAgY29uc3Qgc2lnID0gc2lnbmFsPFN1c3BlbnNlPFQgfCBJTklUSUFMX1ZBTFVFPj4ocGVuZGluZyk7XG5cbiAgZWZmZWN0KFxuICAgIChvbkNsZWFudXApID0+IHtcbiAgICAgIGNvbnN0IHN1YiA9IGZuKClcbiAgICAgICAgLnBpcGUoc3VzcGVuc2lmeSgpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdW50cmFja2VkKCgpID0+IHNpZy5zZXQodmFsdWUpKSk7XG4gICAgICBvbkNsZWFudXAoKCkgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIH0sXG4gICAgeyBpbmplY3RvciB9LFxuICApO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3VzcGVuc2UgPSBzaWcoKTtcbiAgICBpZiAoc3VzcGVuc2UuaGFzRXJyb3IpIHtcbiAgICAgIHRocm93IHN1c3BlbnNlLmVycm9yO1xuICAgIH1cblxuICAgIGlmIChzdXNwZW5zZS5oYXNWYWx1ZSkge1xuICAgICAgcmV0dXJuIHN1c3BlbnNlLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBpbml0aWFsVmFsdWUgYXMgSU5JVElBTF9WQUxVRTtcbiAgfSk7XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { assertInInjectionContext, inject, Injector, signal, effect, computed } from '@angular/core';
1
+ import { assertInInjectionContext, inject, Injector, signal, effect, untracked, computed } from '@angular/core';
2
2
  import { pending, suspensify } from '@jscutlery/operators';
3
3
 
4
4
  function rxComputed(fn, { initialValue, injector, } = {}) {
@@ -9,9 +9,9 @@ function rxComputed(fn, { initialValue, injector, } = {}) {
9
9
  effect((onCleanup) => {
10
10
  const sub = fn()
11
11
  .pipe(suspensify())
12
- .subscribe((value) => sig.set(value));
12
+ .subscribe((value) => untracked(() => sig.set(value)));
13
13
  onCleanup(() => sub.unsubscribe());
14
- }, { allowSignalWrites: true, injector });
14
+ }, { injector });
15
15
  return computed(() => {
16
16
  const suspense = sig();
17
17
  if (suspense.hasError) {
@@ -1 +1 @@
1
- {"version":3,"file":"jscutlery-rx-computed.mjs","sources":["../../../../packages/rx-computed/src/lib/rx-computed.ts","../../../../packages/rx-computed/src/jscutlery-rx-computed.ts"],"sourcesContent":["import {\n assertInInjectionContext,\n computed,\n effect,\n inject,\n Injector,\n signal,\n Signal,\n} from '@angular/core';\nimport { pending, Suspense, suspensify } from '@jscutlery/operators';\nimport { Observable } from 'rxjs';\n\nexport function rxComputed<T, INITIAL_VALUE = T | null | undefined>(\n fn: () => Observable<T>,\n {\n initialValue,\n injector,\n }: { initialValue?: INITIAL_VALUE; injector?: Injector } = {}\n): Signal<T | INITIAL_VALUE> {\n if (!injector) assertInInjectionContext(rxComputed);\n injector ??= inject(Injector);\n\n const sig = signal<Suspense<T | INITIAL_VALUE>>(pending);\n\n effect(\n (onCleanup) => {\n const sub = fn()\n .pipe(suspensify())\n .subscribe((value) => sig.set(value));\n onCleanup(() => sub.unsubscribe());\n },\n { allowSignalWrites: true, injector }\n );\n\n return computed(() => {\n const suspense = sig();\n if (suspense.hasError) {\n throw suspense.error;\n }\n\n if (suspense.hasValue) {\n return suspense.value;\n }\n\n return initialValue as INITIAL_VALUE;\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAYM,SAAU,UAAU,CACxB,EAAuB,EACvB,EACE,YAAY,EACZ,QAAQ,GAAA,GACiD,EAAE,EAAA;AAE7D,IAAA,IAAI,CAAC,QAAQ;QAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC;AACpD,IAAA,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE9B,IAAA,MAAM,GAAG,GAAG,MAAM,CAA8B,OAAO,CAAC,CAAC;AAEzD,IAAA,MAAM,CACJ,CAAC,SAAS,KAAI;QACZ,MAAM,GAAG,GAAG,EAAE,EAAE;aACb,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,SAAS,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;KACpC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,CACtC,CAAC;IAEF,OAAO,QAAQ,CAAC,MAAK;AACnB,QAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACrB,MAAM,QAAQ,CAAC,KAAK,CAAC;SACtB;AAED,QAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACrB,OAAO,QAAQ,CAAC,KAAK,CAAC;SACvB;AAED,QAAA,OAAO,YAA6B,CAAC;AACvC,KAAC,CAAC,CAAC;AACL;;AC9CA;;AAEG;;;;"}
1
+ {"version":3,"file":"jscutlery-rx-computed.mjs","sources":["../../../../packages/rx-computed/src/lib/rx-computed.ts","../../../../packages/rx-computed/src/jscutlery-rx-computed.ts"],"sourcesContent":["import {\n assertInInjectionContext,\n computed,\n effect,\n inject,\n Injector,\n signal,\n Signal,\n untracked,\n} from '@angular/core';\nimport { pending, Suspense, suspensify } from '@jscutlery/operators';\nimport { Observable } from 'rxjs';\n\nexport function rxComputed<T, INITIAL_VALUE = T | null | undefined>(\n fn: () => Observable<T>,\n {\n initialValue,\n injector,\n }: { initialValue?: INITIAL_VALUE; injector?: Injector } = {},\n): Signal<T | INITIAL_VALUE> {\n if (!injector) assertInInjectionContext(rxComputed);\n injector ??= inject(Injector);\n\n const sig = signal<Suspense<T | INITIAL_VALUE>>(pending);\n\n effect(\n (onCleanup) => {\n const sub = fn()\n .pipe(suspensify())\n .subscribe((value) => untracked(() => sig.set(value)));\n onCleanup(() => sub.unsubscribe());\n },\n { injector },\n );\n\n return computed(() => {\n const suspense = sig();\n if (suspense.hasError) {\n throw suspense.error;\n }\n\n if (suspense.hasValue) {\n return suspense.value;\n }\n\n return initialValue as INITIAL_VALUE;\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAaM,SAAU,UAAU,CACxB,EAAuB,EACvB,EACE,YAAY,EACZ,QAAQ,GAAA,GACiD,EAAE,EAAA;AAE7D,IAAA,IAAI,CAAC,QAAQ;QAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC;AACpD,IAAA,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE9B,IAAA,MAAM,GAAG,GAAG,MAAM,CAA8B,OAAO,CAAC,CAAC;AAEzD,IAAA,MAAM,CACJ,CAAC,SAAS,KAAI;QACZ,MAAM,GAAG,GAAG,EAAE,EAAE;aACb,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,SAAS,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AACrC,KAAC,EACD,EAAE,QAAQ,EAAE,CACb,CAAC;IAEF,OAAO,QAAQ,CAAC,MAAK;AACnB,QAAA,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACrB,MAAM,QAAQ,CAAC,KAAK,CAAC;SACtB;AAED,QAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACrB,OAAO,QAAQ,CAAC,KAAK,CAAC;SACvB;AAED,QAAA,OAAO,YAA6B,CAAC;AACvC,KAAC,CAAC,CAAC;AACL;;AC/CA;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@jscutlery/rx-computed",
3
- "version": "0.5.13",
3
+ "version": "0.6.0",
4
4
  "peerDependencies": {
5
- "@angular/core": ">=16.0.0 <19.0.0",
5
+ "@angular/core": ">=16.0.0 <20.0.0",
6
6
  "@jscutlery/operators": "^2.0.0"
7
7
  },
8
8
  "dependencies": {