iter-fest 0.2.2-main.fdb3230 → 0.3.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.
Files changed (43) hide show
  1. package/README.md +47 -32
  2. package/dist/chunk-4P4GJT2O.mjs +195 -0
  3. package/dist/chunk-4P4GJT2O.mjs.map +1 -0
  4. package/dist/chunk-6ZEIOTH6.mjs +9 -0
  5. package/dist/chunk-6ZEIOTH6.mjs.map +1 -0
  6. package/dist/{chunk-2DE3J4J7.mjs → chunk-AMBNMMKA.mjs} +2 -1
  7. package/dist/chunk-AMBNMMKA.mjs.map +1 -0
  8. package/dist/{chunk-ANRVAYLW.mjs → chunk-P6MH6RRG.mjs} +2 -1
  9. package/dist/chunk-P6MH6RRG.mjs.map +1 -0
  10. package/dist/chunk-YGRCFTJT.mjs +13 -0
  11. package/dist/chunk-YGRCFTJT.mjs.map +1 -0
  12. package/dist/iter-fest.asyncGeneratorWithLastValue.js +1 -0
  13. package/dist/iter-fest.asyncGeneratorWithLastValue.js.map +1 -1
  14. package/dist/iter-fest.asyncGeneratorWithLastValue.mjs +1 -1
  15. package/dist/iter-fest.d.mts +1 -0
  16. package/dist/iter-fest.d.ts +1 -0
  17. package/dist/iter-fest.generatorWithLastValue.js +1 -0
  18. package/dist/iter-fest.generatorWithLastValue.js.map +1 -1
  19. package/dist/iter-fest.generatorWithLastValue.mjs +1 -1
  20. package/dist/iter-fest.js +203 -47
  21. package/dist/iter-fest.js.map +1 -1
  22. package/dist/iter-fest.mjs +11 -7
  23. package/dist/iter-fest.observableValues.js +1 -45
  24. package/dist/iter-fest.observableValues.js.map +1 -1
  25. package/dist/iter-fest.observableValues.mjs +1 -2
  26. package/dist/iter-fest.readableStreamValues.d.mts +6 -1
  27. package/dist/iter-fest.readableStreamValues.d.ts +6 -1
  28. package/dist/iter-fest.readableStreamValues.js +2 -19
  29. package/dist/iter-fest.readableStreamValues.js.map +1 -1
  30. package/dist/iter-fest.readableStreamValues.mjs +1 -1
  31. package/dist/iter-fest.readableStreamValuesWithSignal.d.mts +15 -0
  32. package/dist/iter-fest.readableStreamValuesWithSignal.d.ts +15 -0
  33. package/dist/iter-fest.readableStreamValuesWithSignal.js +221 -0
  34. package/dist/iter-fest.readableStreamValuesWithSignal.js.map +1 -0
  35. package/dist/iter-fest.readableStreamValuesWithSignal.mjs +7 -0
  36. package/dist/iter-fest.readableStreamValuesWithSignal.mjs.map +1 -0
  37. package/package.json +23 -13
  38. package/dist/chunk-2DE3J4J7.mjs.map +0 -1
  39. package/dist/chunk-ANRVAYLW.mjs.map +0 -1
  40. package/dist/chunk-RVIERPEV.mjs +0 -26
  41. package/dist/chunk-RVIERPEV.mjs.map +0 -1
  42. package/dist/chunk-WMTE2GGJ.mjs +0 -38
  43. package/dist/chunk-WMTE2GGJ.mjs.map +0 -1
package/dist/iter-fest.js CHANGED
@@ -79,7 +79,8 @@ __export(src_exports, {
79
79
  observableSubscribeAsReadable: () => observableSubscribeAsReadable,
80
80
  observableValues: () => observableValues,
81
81
  readableStreamFrom: () => readableStreamFrom,
82
- readableStreamValues: () => readableStreamValues
82
+ readableStreamValues: () => readableStreamValues,
83
+ readableStreamValuesWithSignal: () => readableStreamValuesWithSignal
83
84
  });
84
85
  module.exports = __toCommonJS(src_exports);
85
86
 
@@ -116,6 +117,7 @@ var STILL_ITERATING = Symbol();
116
117
  function asyncGeneratorWithLastValue(generator) {
117
118
  let lastValue = STILL_ITERATING;
118
119
  const asyncGeneratorWithLastValue2 = {
120
+ ...generator,
119
121
  [Symbol.asyncIterator]() {
120
122
  return asyncGeneratorWithLastValue2;
121
123
  },
@@ -230,6 +232,7 @@ var STILL_ITERATING2 = Symbol();
230
232
  function generatorWithLastValue(generator) {
231
233
  let lastValue = STILL_ITERATING2;
232
234
  const generatorWithLastValue2 = {
235
+ ...generator,
233
236
  [Symbol.iterator]() {
234
237
  return generatorWithLastValue2;
235
238
  },
@@ -648,53 +651,9 @@ function observableSubscribeAsReadable(observable) {
648
651
  });
649
652
  }
650
653
 
651
- // src/readableStreamValues.ts
652
- function readableStreamValues(readable) {
653
- const reader = readable.getReader();
654
- const iterable = {
655
- [Symbol.asyncIterator]() {
656
- return iterable;
657
- },
658
- async next() {
659
- const result = await Promise.race([reader.read(), reader.closed]);
660
- if (!result || result.done) {
661
- return { done: true, value: void 0 };
662
- }
663
- return { value: result.value };
664
- },
665
- async return() {
666
- reader.releaseLock();
667
- return { done: true, value: void 0 };
668
- }
669
- };
670
- return iterable;
671
- }
672
-
673
654
  // src/observableValues.ts
674
655
  function observableValues(observable) {
675
- const readable = observableSubscribeAsReadable(observable);
676
- const iterable = readableStreamValues(readable);
677
- const cancellableIterable = {
678
- [Symbol.asyncIterator]() {
679
- return cancellableIterable;
680
- },
681
- next() {
682
- return iterable.next();
683
- },
684
- return() {
685
- var _a;
686
- try {
687
- return ((_a = iterable.return) == null ? void 0 : _a.call(iterable)) ?? Promise.resolve({ done: true, value: void 0 });
688
- } finally {
689
- readable.cancel();
690
- }
691
- },
692
- throw(error) {
693
- var _a;
694
- return ((_a = iterable.throw) == null ? void 0 : _a.call(iterable, error)) ?? Promise.resolve({ done: true, value: void 0 });
695
- }
696
- };
697
- return cancellableIterable;
656
+ return observableSubscribeAsReadable(observable).values();
698
657
  }
699
658
 
700
659
  // src/readableStreamFrom.ts
@@ -714,6 +673,202 @@ function readableStreamFrom(anyIterable) {
714
673
  }
715
674
  });
716
675
  }
676
+
677
+ // src/readableStreamValues.ts
678
+ function readableStreamValues(readable, options) {
679
+ return readable.values(options);
680
+ }
681
+
682
+ // src/private/CriticalSection.ts
683
+ var CriticalSection = class {
684
+ #callbacks = [];
685
+ enter(fn) {
686
+ const fnResolver = Promise.withResolvers();
687
+ const callback = async () => {
688
+ var _a, _b;
689
+ try {
690
+ fnResolver.resolve(await fn());
691
+ } catch (error) {
692
+ fnResolver.reject(error);
693
+ }
694
+ if (this.#callbacks.shift() !== callback) {
695
+ throw new Error("ASSERTION: The first resolver must be self.");
696
+ }
697
+ (_b = (_a = this.#callbacks)[0]) == null ? void 0 : _b.call(_a);
698
+ };
699
+ this.#callbacks.push(callback);
700
+ this.#callbacks[0] === callback && callback();
701
+ return fnResolver.promise;
702
+ }
703
+ };
704
+
705
+ // src/private/AsyncIteratorMachinery.ts
706
+ var AsyncIteratorMachinery = class {
707
+ constructor(iterator) {
708
+ this.#criticalSection = new CriticalSection();
709
+ this.#done = false;
710
+ const enter = this.#criticalSection.enter.bind(this.#criticalSection);
711
+ const return_ = iterator.return && iterator.return.bind(iterator);
712
+ const throw_ = iterator.throw && iterator.throw.bind(iterator);
713
+ this.next = (...[value]) => enter(async () => {
714
+ if (this.#done) {
715
+ return Promise.resolve({ done: true, value: void 0 });
716
+ }
717
+ const result = await iterator.next(...value ? [value] : []);
718
+ if (result.done) {
719
+ this.#done = true;
720
+ }
721
+ return result;
722
+ });
723
+ if (return_) {
724
+ this.return = (value) => enter(async () => {
725
+ if (this.#done) {
726
+ return {
727
+ done: true,
728
+ value: typeof value === "undefined" ? value : await value
729
+ };
730
+ }
731
+ this.#done = true;
732
+ return return_(value);
733
+ });
734
+ }
735
+ if (throw_) {
736
+ this.throw = (reason) => enter(() => {
737
+ if (this.#done) {
738
+ return Promise.reject(reason);
739
+ }
740
+ this.#done = true;
741
+ return throw_(reason);
742
+ });
743
+ }
744
+ }
745
+ #criticalSection;
746
+ #done;
747
+ async [Symbol.asyncDispose]() {
748
+ }
749
+ [Symbol.asyncIterator]() {
750
+ return this;
751
+ }
752
+ next;
753
+ return;
754
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
755
+ throw;
756
+ };
757
+
758
+ // src/private/createAbortError.ts
759
+ var ERROR_MESSAGE = "The operation is aborted";
760
+ var ERROR_NAME = "AbortError";
761
+ function createAbortError() {
762
+ if (typeof globalThis.DOMException === "undefined") {
763
+ const error = new Error(ERROR_MESSAGE);
764
+ error.name = ERROR_NAME;
765
+ return error;
766
+ } else {
767
+ return new DOMException(ERROR_MESSAGE, ERROR_NAME);
768
+ }
769
+ }
770
+
771
+ // src/readableStreamValuesWithSignal.ts
772
+ var ReadableStreamIterator = class {
773
+ // The asynchronous iterator initialization steps for a ReadableStream, given stream, iterator, and args, are:
774
+ constructor(stream, args) {
775
+ var _a;
776
+ const reader = stream.getReader();
777
+ this.#reader = reader;
778
+ const preventCancel = !!args[0].preventCancel;
779
+ this.#preventCancel = preventCancel;
780
+ this.#signal = args[0].signal;
781
+ (_a = this.#signal) == null ? void 0 : _a.addEventListener(
782
+ "abort",
783
+ async () => {
784
+ this.#preventCancel || reader.cancel(createAbortError());
785
+ reader.releaseLock();
786
+ },
787
+ { once: true }
788
+ );
789
+ }
790
+ #preventCancel;
791
+ #reader;
792
+ #readRequests = [];
793
+ #signal;
794
+ [Symbol.asyncIterator]() {
795
+ return this;
796
+ }
797
+ async [Symbol.asyncDispose]() {
798
+ }
799
+ // The get the next iteration result steps for a ReadableStream, given stream and iterator, are:
800
+ // next(...[value]: [] | [any]): Promise<IteratorResult<T, any>> {
801
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
802
+ next = () => {
803
+ var _a;
804
+ if ((_a = this.#signal) == null ? void 0 : _a.aborted) {
805
+ return Promise.reject(createAbortError());
806
+ }
807
+ const nextResolvers = Promise.withResolvers();
808
+ const reader = this.#reader;
809
+ const resolvers = Promise.withResolvers();
810
+ const request = {
811
+ // chunk steps, given chunk
812
+ chunk(value) {
813
+ resolvers.resolve({ done: false, value });
814
+ },
815
+ // close steps
816
+ close() {
817
+ reader.releaseLock();
818
+ resolvers.resolve({ done: true, value: void 0 });
819
+ },
820
+ // error steps, given e
821
+ error(reason) {
822
+ reader.releaseLock();
823
+ resolvers.reject(reason);
824
+ }
825
+ };
826
+ this.#readRequests.push(request);
827
+ (async () => {
828
+ var _a2, _b;
829
+ try {
830
+ const result = await reader.read();
831
+ if (result.done) {
832
+ if ((_a2 = this.#signal) == null ? void 0 : _a2.aborted) {
833
+ request.error(createAbortError());
834
+ }
835
+ request.close();
836
+ } else {
837
+ request.chunk(result.value);
838
+ }
839
+ } catch (error) {
840
+ if ((_b = this.#signal) == null ? void 0 : _b.aborted) {
841
+ request.error(createAbortError());
842
+ } else {
843
+ request.error(error);
844
+ }
845
+ } finally {
846
+ nextResolvers.resolve();
847
+ }
848
+ })();
849
+ return resolvers.promise;
850
+ };
851
+ // The asynchronous iterator return steps for a ReadableStream, given stream, iterator, and arg, are:
852
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
853
+ async return(value) {
854
+ var _a;
855
+ if ((_a = this.#signal) == null ? void 0 : _a.aborted) {
856
+ return Promise.reject(createAbortError());
857
+ }
858
+ const reader = this.#reader;
859
+ if (!this.#preventCancel) {
860
+ const cancelPromise = reader.cancel(value);
861
+ reader.releaseLock();
862
+ await cancelPromise;
863
+ return { done: true, value };
864
+ }
865
+ reader.releaseLock();
866
+ return { done: true, value };
867
+ }
868
+ };
869
+ function readableStreamValuesWithSignal(stream, options) {
870
+ return new AsyncIteratorMachinery(new ReadableStreamIterator(stream, [options || {}]));
871
+ }
717
872
  // Annotate the CommonJS export names for ESM import in node:
718
873
  0 && (module.exports = {
719
874
  IterableWritableStream,
@@ -765,6 +920,7 @@ function readableStreamFrom(anyIterable) {
765
920
  observableSubscribeAsReadable,
766
921
  observableValues,
767
922
  readableStreamFrom,
768
- readableStreamValues
923
+ readableStreamValues,
924
+ readableStreamValuesWithSignal
769
925
  });
770
926
  //# sourceMappingURL=iter-fest.js.map