effect 2.4.17 → 2.4.19

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 (136) hide show
  1. package/Readable/package.json +6 -0
  2. package/RegExp/package.json +6 -0
  3. package/Subscribable/package.json +6 -0
  4. package/dist/cjs/Duration.js +39 -2
  5. package/dist/cjs/Duration.js.map +1 -1
  6. package/dist/cjs/List.js +5 -4
  7. package/dist/cjs/List.js.map +1 -1
  8. package/dist/cjs/Logger.js +11 -1
  9. package/dist/cjs/Logger.js.map +1 -1
  10. package/dist/cjs/Readable.js +79 -0
  11. package/dist/cjs/Readable.js.map +1 -0
  12. package/dist/cjs/RegExp.js +24 -0
  13. package/dist/cjs/RegExp.js.map +1 -0
  14. package/dist/cjs/Subscribable.js +91 -0
  15. package/dist/cjs/Subscribable.js.map +1 -0
  16. package/dist/cjs/SubscriptionRef.js.map +1 -1
  17. package/dist/cjs/TestAnnotation.js +2 -1
  18. package/dist/cjs/TestAnnotation.js.map +1 -1
  19. package/dist/cjs/index.js +8 -2
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/cjs/internal/cause.js +3 -2
  22. package/dist/cjs/internal/cause.js.map +1 -1
  23. package/dist/cjs/internal/configProvider.js +2 -2
  24. package/dist/cjs/internal/configProvider.js.map +1 -1
  25. package/dist/cjs/internal/core-effect.js +28 -14
  26. package/dist/cjs/internal/core-effect.js.map +1 -1
  27. package/dist/cjs/internal/core.js +16 -85
  28. package/dist/cjs/internal/core.js.map +1 -1
  29. package/dist/cjs/internal/effect/circular.js +5 -0
  30. package/dist/cjs/internal/effect/circular.js.map +1 -1
  31. package/dist/cjs/internal/errors.js +13 -0
  32. package/dist/cjs/internal/errors.js.map +1 -0
  33. package/dist/cjs/internal/fiberRuntime.js +94 -61
  34. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  35. package/dist/cjs/internal/hashMap.js +1 -1
  36. package/dist/cjs/internal/hashMap.js.map +1 -1
  37. package/dist/cjs/internal/matcher.js +5 -4
  38. package/dist/cjs/internal/matcher.js.map +1 -1
  39. package/dist/cjs/internal/ref.js +6 -1
  40. package/dist/cjs/internal/ref.js.map +1 -1
  41. package/dist/cjs/internal/schedule/intervals.js +2 -1
  42. package/dist/cjs/internal/schedule/intervals.js.map +1 -1
  43. package/dist/cjs/internal/subscriptionRef.js +8 -0
  44. package/dist/cjs/internal/subscriptionRef.js.map +1 -1
  45. package/dist/cjs/internal/trie.js +1 -1
  46. package/dist/cjs/internal/trie.js.map +1 -1
  47. package/dist/cjs/internal/version.js +1 -1
  48. package/dist/dts/Duration.d.ts +16 -0
  49. package/dist/dts/Duration.d.ts.map +1 -1
  50. package/dist/dts/List.d.ts.map +1 -1
  51. package/dist/dts/Logger.d.ts +10 -0
  52. package/dist/dts/Logger.d.ts.map +1 -1
  53. package/dist/dts/Readable.d.ts +55 -0
  54. package/dist/dts/Readable.d.ts.map +1 -0
  55. package/dist/dts/Ref.d.ts +2 -2
  56. package/dist/dts/Ref.d.ts.map +1 -1
  57. package/dist/dts/RegExp.d.ts +17 -0
  58. package/dist/dts/RegExp.d.ts.map +1 -0
  59. package/dist/dts/Subscribable.d.ts +59 -0
  60. package/dist/dts/Subscribable.d.ts.map +1 -0
  61. package/dist/dts/SubscriptionRef.d.ts +2 -2
  62. package/dist/dts/SubscriptionRef.d.ts.map +1 -1
  63. package/dist/dts/TestAnnotation.d.ts.map +1 -1
  64. package/dist/dts/index.d.ts +14 -0
  65. package/dist/dts/index.d.ts.map +1 -1
  66. package/dist/dts/internal/errors.d.ts +5 -0
  67. package/dist/dts/internal/errors.d.ts.map +1 -0
  68. package/dist/esm/Duration.js +38 -1
  69. package/dist/esm/Duration.js.map +1 -1
  70. package/dist/esm/List.js +4 -3
  71. package/dist/esm/List.js.map +1 -1
  72. package/dist/esm/Logger.js +10 -0
  73. package/dist/esm/Logger.js.map +1 -1
  74. package/dist/esm/Readable.js +45 -0
  75. package/dist/esm/Readable.js.map +1 -0
  76. package/dist/esm/RegExp.js +17 -0
  77. package/dist/esm/RegExp.js.map +1 -0
  78. package/dist/esm/Subscribable.js +56 -0
  79. package/dist/esm/Subscribable.js.map +1 -0
  80. package/dist/esm/SubscriptionRef.js.map +1 -1
  81. package/dist/esm/TestAnnotation.js +2 -1
  82. package/dist/esm/TestAnnotation.js.map +1 -1
  83. package/dist/esm/index.js +14 -0
  84. package/dist/esm/index.js.map +1 -1
  85. package/dist/esm/internal/cause.js +3 -2
  86. package/dist/esm/internal/cause.js.map +1 -1
  87. package/dist/esm/internal/configProvider.js +2 -2
  88. package/dist/esm/internal/configProvider.js.map +1 -1
  89. package/dist/esm/internal/core-effect.js +25 -12
  90. package/dist/esm/internal/core-effect.js.map +1 -1
  91. package/dist/esm/internal/core.js +13 -82
  92. package/dist/esm/internal/core.js.map +1 -1
  93. package/dist/esm/internal/effect/circular.js +5 -0
  94. package/dist/esm/internal/effect/circular.js.map +1 -1
  95. package/dist/esm/internal/errors.js +6 -0
  96. package/dist/esm/internal/errors.js.map +1 -0
  97. package/dist/esm/internal/fiberRuntime.js +90 -57
  98. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  99. package/dist/esm/internal/hashMap.js +1 -1
  100. package/dist/esm/internal/hashMap.js.map +1 -1
  101. package/dist/esm/internal/matcher.js +4 -3
  102. package/dist/esm/internal/matcher.js.map +1 -1
  103. package/dist/esm/internal/ref.js +6 -1
  104. package/dist/esm/internal/ref.js.map +1 -1
  105. package/dist/esm/internal/schedule/intervals.js +2 -1
  106. package/dist/esm/internal/schedule/intervals.js.map +1 -1
  107. package/dist/esm/internal/subscriptionRef.js +8 -0
  108. package/dist/esm/internal/subscriptionRef.js.map +1 -1
  109. package/dist/esm/internal/trie.js +1 -1
  110. package/dist/esm/internal/trie.js.map +1 -1
  111. package/dist/esm/internal/version.js +1 -1
  112. package/package.json +25 -1
  113. package/src/Duration.ts +54 -1
  114. package/src/List.ts +5 -3
  115. package/src/Logger.ts +12 -0
  116. package/src/Readable.ts +92 -0
  117. package/src/Ref.ts +2 -2
  118. package/src/RegExp.ts +17 -0
  119. package/src/Subscribable.ts +99 -0
  120. package/src/SubscriptionRef.ts +2 -2
  121. package/src/TestAnnotation.ts +2 -1
  122. package/src/index.ts +17 -0
  123. package/src/internal/cause.ts +3 -2
  124. package/src/internal/configProvider.ts +2 -3
  125. package/src/internal/core-effect.ts +78 -66
  126. package/src/internal/core.ts +13 -150
  127. package/src/internal/effect/circular.ts +7 -1
  128. package/src/internal/errors.ts +7 -0
  129. package/src/internal/fiberRuntime.ts +136 -111
  130. package/src/internal/hashMap.ts +1 -1
  131. package/src/internal/matcher.ts +5 -3
  132. package/src/internal/ref.ts +8 -2
  133. package/src/internal/schedule/intervals.ts +2 -1
  134. package/src/internal/subscriptionRef.ts +8 -0
  135. package/src/internal/trie.ts +1 -1
  136. package/src/internal/version.ts +1 -1
@@ -1094,31 +1094,23 @@ export class FiberRuntime {
1094
1094
  /** @internal */
1095
1095
  export const currentMinimumLogLevel = /*#__PURE__*/globalValue("effect/FiberRef/currentMinimumLogLevel", () => core.fiberRefUnsafeMake(LogLevel.fromLiteral("Info")));
1096
1096
  /** @internal */
1097
- export const getConsole = refs => {
1098
- const defaultServicesValue = FiberRefs.getOrDefault(refs, defaultServices.currentServices);
1099
- const cnsl = Context.get(defaultServicesValue, consoleTag);
1100
- return cnsl.unsafe;
1101
- };
1097
+ export const loggerWithConsoleLog = self => internalLogger.makeLogger(opts => {
1098
+ const services = FiberRefs.getOrDefault(opts.context, defaultServices.currentServices);
1099
+ Context.get(services, consoleTag).unsafe.log(self.log(opts));
1100
+ });
1102
1101
  /** @internal */
1103
- export const defaultLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/defaultLogger"), () => internalLogger.makeLogger(options => {
1104
- const formatted = internalLogger.stringLogger.log(options);
1105
- getConsole(options.context).log(formatted);
1106
- }));
1102
+ export const loggerWithConsoleError = self => internalLogger.makeLogger(opts => {
1103
+ const services = FiberRefs.getOrDefault(opts.context, defaultServices.currentServices);
1104
+ Context.get(services, consoleTag).unsafe.error(self.log(opts));
1105
+ });
1107
1106
  /** @internal */
1108
- export const jsonLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/jsonLogger"), () => internalLogger.makeLogger(options => {
1109
- const formatted = internalLogger.jsonLogger.log(options);
1110
- getConsole(options.context).log(formatted);
1111
- }));
1107
+ export const defaultLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/defaultLogger"), () => loggerWithConsoleLog(internalLogger.stringLogger));
1112
1108
  /** @internal */
1113
- export const logFmtLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/logFmtLogger"), () => internalLogger.makeLogger(options => {
1114
- const formatted = internalLogger.logfmtLogger.log(options);
1115
- getConsole(options.context).log(formatted);
1116
- }));
1109
+ export const jsonLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/jsonLogger"), () => loggerWithConsoleLog(internalLogger.jsonLogger));
1117
1110
  /** @internal */
1118
- export const structuredLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/structuredLogger"), () => internalLogger.makeLogger(options => {
1119
- const formatted = internalLogger.structuredLogger.log(options);
1120
- getConsole(options.context).log(formatted);
1121
- }));
1111
+ export const logFmtLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/logFmtLogger"), () => loggerWithConsoleLog(internalLogger.logfmtLogger));
1112
+ /** @internal */
1113
+ export const structuredLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/structuredLogger"), () => loggerWithConsoleLog(internalLogger.structuredLogger));
1122
1114
  /** @internal */
1123
1115
  export const tracerLogger = /*#__PURE__*/globalValue( /*#__PURE__*/Symbol.for("effect/Logger/tracerLogger"), () => internalLogger.makeLogger(({
1124
1116
  annotations,
@@ -1611,7 +1603,7 @@ export const finalizersMask = strategy => self => core.contextWithEffect(context
1611
1603
  /* @internal */
1612
1604
  export const scopeWith = f => core.flatMap(scopeTag, f);
1613
1605
  /* @internal */
1614
- export const scopedEffect = effect => core.flatMap(scopeMake(), scope => scopeUse(scope)(effect));
1606
+ export const scopedEffect = effect => core.flatMap(scopeMake(), scope => scopeUse(effect, scope));
1615
1607
  /* @internal */
1616
1608
  export const sequentialFinalizers = self => core.contextWithEffect(context => Option.match(Context.getOption(context, scopeTag), {
1617
1609
  onNone: () => self,
@@ -1684,50 +1676,80 @@ export const withRuntimeFlagsScoped = update => {
1684
1676
  return pipe(core.updateRuntimeFlags(update), core.zipRight(addFinalizer(() => core.updateRuntimeFlags(revertRuntimeFlags))), core.asUnit);
1685
1677
  }), core.uninterruptible);
1686
1678
  };
1687
- // circular with ReleaseMap
1688
- /* @internal */
1689
- export const releaseMapReleaseAll = (strategy, exit) => self => core.suspend(() => {
1690
- switch (self.state._tag) {
1691
- case "Exited":
1692
- {
1693
- return core.unit;
1694
- }
1695
- case "Running":
1696
- {
1697
- const finalizersMap = self.state.finalizers;
1698
- const update = self.state.update;
1699
- const finalizers = Array.from(finalizersMap.keys()).sort((a, b) => b - a).map(key => finalizersMap.get(key));
1700
- self.state = {
1701
- _tag: "Exited",
1702
- nextKey: self.state.nextKey,
1703
- exit,
1704
- update
1705
- };
1706
- return executionStrategy.isSequential(strategy) ? pipe(finalizers, core.forEachSequential(fin => core.exit(update(fin)(exit))), core.flatMap(results => pipe(core.exitCollectAll(results), Option.map(core.exitAsUnit), Option.getOrElse(() => core.exitUnit)))) : executionStrategy.isParallel(strategy) ? pipe(forEachParUnbounded(finalizers, fin => core.exit(update(fin)(exit)), false), core.flatMap(results => pipe(core.exitCollectAll(results, {
1707
- parallel: true
1708
- }), Option.map(core.exitAsUnit), Option.getOrElse(() => core.exitUnit)))) : pipe(forEachParN(finalizers, strategy.parallelism, fin => core.exit(update(fin)(exit)), false), core.flatMap(results => pipe(core.exitCollectAll(results, {
1709
- parallel: true
1710
- }), Option.map(core.exitAsUnit), Option.getOrElse(() => core.exitUnit))));
1711
- }
1712
- }
1713
- });
1714
1679
  // circular with Scope
1715
1680
  /** @internal */
1716
1681
  export const scopeTag = /*#__PURE__*/Context.GenericTag("effect/Scope");
1717
1682
  /* @internal */
1718
1683
  export const scope = scopeTag;
1719
- /* @internal */
1720
- export const scopeMake = (strategy = executionStrategy.sequential) => core.map(core.releaseMapMake, rm => ({
1684
+ const scopeUnsafeAddFinalizer = (scope, fin) => {
1685
+ if (scope.state._tag === "Open") {
1686
+ scope.state.finalizers.add(fin);
1687
+ }
1688
+ };
1689
+ const ScopeImplProto = {
1721
1690
  [core.ScopeTypeId]: core.ScopeTypeId,
1722
1691
  [core.CloseableScopeTypeId]: core.CloseableScopeTypeId,
1723
- strategy,
1724
1692
  pipe() {
1725
1693
  return pipeArguments(this, arguments);
1726
1694
  },
1727
- fork: strategy => core.uninterruptible(pipe(scopeMake(strategy), core.flatMap(scope => pipe(core.releaseMapAdd(rm, exit => core.scopeClose(scope, exit)), core.tap(fin => core.scopeAddFinalizerExit(scope, fin)), core.as(scope))))),
1728
- close: exit => core.asUnit(releaseMapReleaseAll(strategy, exit)(rm)),
1729
- addFinalizer: fin => core.asUnit(core.releaseMapAdd(fin)(rm))
1730
- }));
1695
+ fork(strategy) {
1696
+ return core.sync(() => {
1697
+ const newScope = scopeUnsafeMake(strategy);
1698
+ if (this.state._tag === "Closed") {
1699
+ newScope.state = this.state;
1700
+ return newScope;
1701
+ }
1702
+ const fin = exit => newScope.close(exit);
1703
+ this.state.finalizers.add(fin);
1704
+ scopeUnsafeAddFinalizer(newScope, _ => core.sync(() => {
1705
+ if (this.state._tag === "Open") {
1706
+ this.state.finalizers.delete(fin);
1707
+ }
1708
+ }));
1709
+ return newScope;
1710
+ });
1711
+ },
1712
+ close(exit) {
1713
+ return core.suspend(() => {
1714
+ if (this.state._tag === "Closed") {
1715
+ return core.unit;
1716
+ }
1717
+ const finalizers = Array.from(this.state.finalizers.values()).reverse();
1718
+ this.state = {
1719
+ _tag: "Closed",
1720
+ exit
1721
+ };
1722
+ if (finalizers.length === 0) {
1723
+ return core.unit;
1724
+ }
1725
+ return executionStrategy.isSequential(this.strategy) ? pipe(core.forEachSequential(finalizers, fin => core.exit(fin(exit))), core.flatMap(results => pipe(core.exitCollectAll(results), Option.map(core.exitAsUnit), Option.getOrElse(() => core.exitUnit)))) : executionStrategy.isParallel(this.strategy) ? pipe(forEachParUnbounded(finalizers, fin => core.exit(fin(exit)), false), core.flatMap(results => pipe(core.exitCollectAll(results, {
1726
+ parallel: true
1727
+ }), Option.map(core.exitAsUnit), Option.getOrElse(() => core.exitUnit)))) : pipe(forEachParN(finalizers, this.strategy.parallelism, fin => core.exit(fin(exit)), false), core.flatMap(results => pipe(core.exitCollectAll(results, {
1728
+ parallel: true
1729
+ }), Option.map(core.exitAsUnit), Option.getOrElse(() => core.exitUnit))));
1730
+ });
1731
+ },
1732
+ addFinalizer(fin) {
1733
+ return core.suspend(() => {
1734
+ if (this.state._tag === "Closed") {
1735
+ return fin(this.state.exit);
1736
+ }
1737
+ this.state.finalizers.add(fin);
1738
+ return core.unit;
1739
+ });
1740
+ }
1741
+ };
1742
+ const scopeUnsafeMake = (strategy = executionStrategy.sequential) => {
1743
+ const scope = Object.create(ScopeImplProto);
1744
+ scope.strategy = strategy;
1745
+ scope.state = {
1746
+ _tag: "Open",
1747
+ finalizers: new Set()
1748
+ };
1749
+ return scope;
1750
+ };
1751
+ /* @internal */
1752
+ export const scopeMake = (strategy = executionStrategy.sequential) => core.sync(() => scopeUnsafeMake(strategy));
1731
1753
  /* @internal */
1732
1754
  export const scopeExtend = /*#__PURE__*/dual(2, (effect, scope) => core.mapInputContext(effect,
1733
1755
  // @ts-expect-error
@@ -1913,7 +1935,18 @@ export const interruptWhenPossible = /*#__PURE__*/dual(2, (self, all) => core.fi
1913
1935
  })));
1914
1936
  // circular Tracer
1915
1937
  /** @internal */
1916
- export const makeSpanScoped = (name, options) => acquireRelease(internalEffect.makeSpan(name, options), (span, exit) => span.status._tag === "Ended" ? core.unit : core.flatMap(internalEffect.currentTimeNanosTracing, endTime => core.sync(() => span.end(endTime, exit))));
1938
+ export const makeSpanScoped = (name, options) => core.uninterruptible(core.withFiberRuntime(fiber => {
1939
+ const scope = Context.unsafeGet(fiber.getFiberRef(core.currentContext), scopeTag);
1940
+ const span = internalEffect.unsafeMakeSpan(fiber, name, options);
1941
+ const timingEnabled = fiber.getFiberRef(core.currentTracerTimingEnabled);
1942
+ const clock_ = Context.get(fiber.getFiberRef(defaultServices.currentServices), clock.clockTag);
1943
+ return core.as(core.scopeAddFinalizerExit(scope, exit => core.sync(() => {
1944
+ if (span.status._tag === "Ended") {
1945
+ return;
1946
+ }
1947
+ span.end(timingEnabled ? clock_.unsafeCurrentTimeNanos() : BigInt(0), exit);
1948
+ })), span);
1949
+ }));
1917
1950
  /* @internal */
1918
1951
  export const withTracerScoped = value => fiberRefLocallyScopedWith(defaultServices.currentServices, Context.add(tracer.tracerTag, value));
1919
1952
  /** @internal */