brass-runtime 1.0.1 → 1.2.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 (80) hide show
  1. package/README.md +88 -311
  2. package/dist/examples/canceler.d.ts +2 -0
  3. package/dist/examples/canceler.d.ts.map +1 -0
  4. package/dist/examples/canceler.js +30 -0
  5. package/dist/examples/canceler.js.map +1 -0
  6. package/dist/examples/demo.d.ts +3 -0
  7. package/dist/examples/demo.d.ts.map +1 -0
  8. package/dist/examples/demo.js +40 -30
  9. package/dist/examples/demo.js.map +1 -0
  10. package/dist/examples/fiberFinalizer.d.ts +2 -0
  11. package/dist/examples/fiberFinalizer.d.ts.map +1 -0
  12. package/dist/examples/fiberFinalizer.js +28 -5
  13. package/dist/examples/fiberFinalizer.js.map +1 -0
  14. package/dist/examples/fromPromise.d.ts +3 -0
  15. package/dist/examples/fromPromise.d.ts.map +1 -0
  16. package/dist/examples/fromPromise.js +44 -0
  17. package/dist/examples/fromPromise.js.map +1 -0
  18. package/dist/examples/index.d.ts +7 -0
  19. package/dist/examples/index.d.ts.map +1 -0
  20. package/dist/examples/index.js +9 -0
  21. package/dist/examples/index.js.map +1 -0
  22. package/dist/examples/resourceExample.d.ts +2 -0
  23. package/dist/examples/resourceExample.d.ts.map +1 -0
  24. package/dist/examples/resourceExample.js +4 -4
  25. package/dist/examples/resourceExample.js.map +1 -0
  26. package/dist/examples/toPromise.d.ts +2 -0
  27. package/dist/examples/toPromise.d.ts.map +1 -0
  28. package/dist/examples/toPromise.js +13 -0
  29. package/dist/examples/toPromise.js.map +1 -0
  30. package/dist/fibers/fiber.d.ts +24 -0
  31. package/dist/fibers/fiber.d.ts.map +1 -0
  32. package/dist/fibers/fiber.js +100 -33
  33. package/dist/fibers/fiber.js.map +1 -0
  34. package/dist/{index.js → index.cjs} +2 -3
  35. package/dist/index.d.ts +9 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/scheduler/scheduler.d.ts +11 -0
  39. package/dist/scheduler/scheduler.d.ts.map +1 -0
  40. package/dist/scheduler/scheduler.js +36 -11
  41. package/dist/scheduler/scheduler.js.map +1 -0
  42. package/dist/scheduler/scope.d.ts +28 -0
  43. package/dist/scheduler/scope.d.ts.map +1 -0
  44. package/dist/scheduler/scope.js +20 -3
  45. package/dist/scheduler/scope.js.map +1 -0
  46. package/dist/stream/buffer.d.ts +3 -0
  47. package/dist/stream/buffer.d.ts.map +1 -0
  48. package/dist/stream/buffer.js +81 -0
  49. package/dist/stream/buffer.js.map +1 -0
  50. package/dist/stream/queue.d.ts +9 -0
  51. package/dist/stream/queue.d.ts.map +1 -0
  52. package/dist/stream/queue.js +98 -0
  53. package/dist/stream/queue.js.map +1 -0
  54. package/dist/stream/stream.d.ts +37 -0
  55. package/dist/stream/stream.d.ts.map +1 -0
  56. package/dist/stream/stream.js +70 -37
  57. package/dist/stream/stream.js.map +1 -0
  58. package/dist/stream/structuredConcurrency.d.ts +25 -0
  59. package/dist/stream/structuredConcurrency.d.ts.map +1 -0
  60. package/dist/stream/structuredConcurrency.js +1 -0
  61. package/dist/stream/structuredConcurrency.js.map +1 -0
  62. package/dist/types/asyncEffect.d.ts +44 -0
  63. package/dist/types/asyncEffect.d.ts.map +1 -0
  64. package/dist/types/asyncEffect.js +42 -0
  65. package/dist/types/asyncEffect.js.map +1 -0
  66. package/dist/types/cancel.d.ts +21 -0
  67. package/dist/types/cancel.d.ts.map +1 -0
  68. package/dist/types/cancel.js +1 -0
  69. package/dist/types/cancel.js.map +1 -0
  70. package/dist/types/effect.d.ts +20 -0
  71. package/dist/types/effect.d.ts.map +1 -0
  72. package/dist/types/effect.js +19 -123
  73. package/dist/types/effect.js.map +1 -0
  74. package/dist/types/option.d.ts +11 -0
  75. package/dist/types/option.d.ts.map +1 -0
  76. package/dist/types/option.js +1 -0
  77. package/dist/types/option.js.map +1 -0
  78. package/package.json +21 -7
  79. package/dist/scheduler/acquireRelease.js +0 -16
  80. package/dist/scheduler/withScope.js +0 -19
@@ -1,11 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.async = exports.asyncTotal = exports.asyncSync = exports.asyncFail = exports.asyncSucceed = void 0;
4
+ exports.asyncFold = asyncFold;
5
+ exports.asyncCatchAll = asyncCatchAll;
6
+ exports.asyncMapError = asyncMapError;
7
+ exports.unit = unit;
4
8
  exports.asyncMap = asyncMap;
5
9
  exports.asyncFlatMap = asyncFlatMap;
10
+ exports.toPromise = toPromise;
6
11
  exports.fromPromise = fromPromise;
7
12
  exports.tryPromiseAbortable = tryPromiseAbortable;
8
13
  exports.fromPromiseAbortable = fromPromiseAbortable;
14
+ exports.acquireRelease = acquireRelease;
15
+ exports.asyncInterruptible = asyncInterruptible;
16
+ const fiber_1 = require("../fibers/fiber");
17
+ function asyncFold(fa, onFailure, onSuccess) {
18
+ return { _tag: "Fold", first: fa, onFailure, onSuccess };
19
+ }
20
+ function asyncCatchAll(fa, handler) {
21
+ return asyncFold(fa, (e) => handler(e), (a) => (0, exports.asyncSucceed)(a));
22
+ }
23
+ function asyncMapError(fa, f) {
24
+ return asyncFold(fa, (e) => (0, exports.asyncFail)(f(e)), (a) => (0, exports.asyncSucceed)(a));
25
+ }
26
+ function unit() {
27
+ return (0, exports.asyncSync)(() => undefined);
28
+ }
9
29
  const asyncSucceed = (value) => ({
10
30
  _tag: "Succeed",
11
31
  value,
@@ -38,6 +58,18 @@ function asyncFlatMap(fa, f) {
38
58
  andThen: f,
39
59
  };
40
60
  }
61
+ function toPromise(eff, env) {
62
+ return new Promise((resolve, reject) => {
63
+ const fiber = (0, fiber_1.fork)(eff, env);
64
+ fiber.join((exit) => {
65
+ const ex = exit;
66
+ if (ex._tag === "Success")
67
+ resolve(ex.value);
68
+ else
69
+ reject(ex.error);
70
+ });
71
+ });
72
+ }
41
73
  function fromPromise(thunk, onError) {
42
74
  return (0, exports.async)((env, cb) => {
43
75
  thunk(env)
@@ -79,3 +111,13 @@ function fromPromiseAbortable(thunk, onError) {
79
111
  };
80
112
  });
81
113
  }
114
+ function acquireRelease(acquire, release, scope) {
115
+ return asyncFlatMap(acquire, (resource) => {
116
+ scope.addFinalizer((exit) => release(resource, exit));
117
+ return (0, exports.asyncSucceed)(resource);
118
+ });
119
+ }
120
+ function asyncInterruptible(register) {
121
+ return (0, exports.async)(register);
122
+ }
123
+ //# sourceMappingURL=asyncEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncEffect.js","sourceRoot":"","sources":["../../src/types/asyncEffect.ts"],"names":[],"mappings":";;;AAsBA,8BAMC;AAED,sCASC;AAGD,sCASC;AAGD,oBAEC;AA6BD,4BAKC;AAED,oCASC;AAED,8BASC;AAED,kCASC;AASD,kDAQC;AAED,oDA2BC;AAED,wCAUC;AAED,gDAIC;AAxLD,2CAAiD;AAmBjD,SAAgB,SAAS,CACrB,EAAkB,EAClB,SAAmC,EACnC,SAAmC;IAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAC7D,CAAC;AAED,SAAgB,aAAa,CACzB,EAAkB,EAClB,OAAmC;IAEnC,OAAO,SAAS,CACZ,EAAS,EACT,CAAC,CAAI,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAQ,EAC3B,CAAC,CAAI,EAAE,EAAE,CAAC,IAAA,oBAAY,EAAC,CAAC,CAAQ,CAC5B,CAAC;AACb,CAAC;AAGD,SAAgB,aAAa,CACzB,EAAkB,EAClB,CAAe;IAEf,OAAO,SAAS,CACZ,EAAS,EACT,CAAC,CAAI,EAAE,EAAE,CAAC,IAAA,iBAAS,EAAC,CAAC,CAAC,CAAC,CAAC,CAAQ,EAChC,CAAC,CAAI,EAAE,EAAE,CAAC,IAAA,oBAAY,EAAC,CAAC,CAAQ,CAC5B,CAAC;AACb,CAAC;AAGD,SAAgB,IAAI;IAChB,OAAO,IAAA,iBAAS,EAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAEM,MAAM,YAAY,GAAG,CAAI,KAAQ,EAA4B,EAAE,CAAC,CAAC;IACpE,IAAI,EAAE,SAAS;IACf,KAAK;CACR,CAAC,CAAC;AAHU,QAAA,YAAY,gBAGtB;AAEI,MAAM,SAAS,GAAG,CAAI,KAAQ,EAA4B,EAAE,CAAC,CAAC;IACjE,IAAI,EAAE,MAAM;IACZ,KAAK;CACR,CAAC,CAAC;AAHU,QAAA,SAAS,aAGnB;AAEI,MAAM,SAAS,GAAG,CACrB,KAAoB,EACA,EAAE,CAAC,CAAC;IACxB,IAAI,EAAE,MAAM;IACZ,KAAK;CACR,CAAC,CAAC;AALU,QAAA,SAAS,aAKnB;AAEI,MAAM,UAAU,GAAG,CAAI,KAAc,EAA8B,EAAE,CACxE,IAAA,iBAAS,EAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AADhB,QAAA,UAAU,cACM;AAEtB,MAAM,KAAK,GAAG,CACjB,QAAqE,EACvD,EAAE,CAAC,CAAC;IAClB,IAAI,EAAE,OAAO;IACb,QAAQ;CACX,CAAC,CAAC;AALU,QAAA,KAAK,SAKf;AAEH,SAAgB,QAAQ,CACpB,EAAkB,EAClB,CAAc;IAEd,OAAO,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oBAAY,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,YAAY,CACxB,EAAkB,EAClB,CAA2B;IAE3B,OAAO;QACH,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,CAAC;KACb,CAAC;AACN,CAAC;AAED,SAAgB,SAAS,CAAU,GAAmB,EAAE,GAAM;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,IAAA,YAAI,EAAC,GAAU,EAAE,GAAG,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,CAAC,IAA4B,EAAE,EAAE;YACxC,MAAM,EAAE,GAAG,IAAkB,CAAC;YAC9B,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;;gBACxC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAgB,WAAW,CACvB,KAA6B,EAC7B,OAA0B;IAE1B,OAAO,IAAA,aAAK,EAAC,CAAC,GAAM,EAAE,EAA8B,EAAE,EAAE;QACpD,KAAK,CAAC,GAAG,CAAC;aACL,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;aAC7C,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,6HAA6H;AAC7H,MAAM,YAAY,GAAG,CAAC,CAAU,EAAW,EAAE,CACzC,OAAO,CAAC,KAAK,QAAQ;IACrB,CAAC,KAAK,IAAI;IACV,MAAM,IAAI,CAAC;IACV,CAAS,CAAC,IAAI,KAAK,YAAY,CAAC;AAErC,SAAgB,mBAAmB,CAC/B,KAAkD;IAElD,OAAO,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAc,EAAE,CACjD,YAAY,CAAC,CAAC,CAAC;QACX,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;QACnB,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,EAAE,CAC/C,CAAC;AACN,CAAC;AAED,SAAgB,oBAAoB,CAChC,KAAkD,EAClD,OAA0B;IAE1B,OAAO,IAAA,aAAK,EAAC,CAAC,GAAM,EAAE,EAA8B,EAAmB,EAAE;QACrE,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,IAAI,GAAG,KAAK,CAAC;QAEjB,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAE,EAAE;YAChC,IAAI,IAAI;gBAAE,OAAO;YACjB,IAAI,GAAG,IAAI,CAAC;YACZ,EAAE,CAAC,IAAI,CAAC,CAAC;QACb,CAAC,CAAC;QAEF,IAAI,CAAC;YACD,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;iBAChD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,GAAG,EAAE;YACR,IAAI,GAAG,IAAI,CAAC;YACZ,EAAE,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAgB,cAAc,CAC1B,OAAuB,EACvB,OAA2D,EAC3D,KAAe;IAEf,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;QACtC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAEtD,OAAO,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAgB,kBAAkB,CAC9B,QAAqE;IAErE,OAAO,IAAA,aAAK,EAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type Canceler = () => void;
2
+ export type CancelToken = {
3
+ /** true si ya fue cancelado */
4
+ readonly isCancelled: () => boolean;
5
+ /**
6
+ * Registra un callback que se ejecuta cuando se cancela.
7
+ * Si ya estaba cancelado, lo ejecuta inmediatamente.
8
+ * Devuelve un "unsubscribe" para desregistrar.
9
+ */
10
+ readonly onCancel: (f: Canceler) => Canceler;
11
+ };
12
+ /** Implementación simple de CancelToken */
13
+ export declare function makeCancelToken(): CancelToken & {
14
+ cancel: Canceler;
15
+ };
16
+ /**
17
+ * Helper: conecta un AbortController a un CancelToken.
18
+ * Devuelve una función para desenganchar (unsubscribe).
19
+ */
20
+ export declare function linkAbortController(token: CancelToken, ac: AbortController): Canceler;
21
+ //# sourceMappingURL=cancel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/types/cancel.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAElC,MAAM,MAAM,WAAW,GAAG;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC;IAEpC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC;CAChD,CAAC;AAEF,2CAA2C;AAC3C,wBAAgB,eAAe,IAAI,WAAW,GAAG;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CA2BpE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,eAAe,GAAG,QAAQ,CAErF"}
@@ -43,3 +43,4 @@ function makeCancelToken() {
43
43
  function linkAbortController(token, ac) {
44
44
  return token.onCancel(() => ac.abort());
45
45
  }
46
+ //# sourceMappingURL=cancel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/types/cancel.ts"],"names":[],"mappings":";;AAeA,0CA2BC;AAMD,kDAEC;AApCD,2CAA2C;AAC3C,SAAgB,eAAe;IAC3B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IAEtC,MAAM,MAAM,GAAG,GAAG,EAAE;QAChB,IAAI,SAAS;YAAE,OAAO;QACtB,SAAS,GAAG,IAAI,CAAC;QACjB,mBAAmB;QACnB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC;gBAAC,CAAC,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAC9C,CAAC;QACD,SAAS,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,OAAO;QACH,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS;QAC5B,QAAQ,EAAE,CAAC,CAAW,EAAE,EAAE;YACtB,IAAI,SAAS,EAAE,CAAC;gBACZ,+CAA+C;gBAC/C,IAAI,CAAC;oBAAC,CAAC,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;gBACrC,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YACpB,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM;KACT,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,KAAkB,EAAE,EAAmB;IACvE,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Async } from "./asyncEffect";
2
+ import type { Option } from "./option";
3
+ export type Exit<E, A> = {
4
+ readonly _tag: "Success";
5
+ readonly value: A;
6
+ } | {
7
+ readonly _tag: "Failure";
8
+ readonly error: E;
9
+ };
10
+ export type ZIO<R, E, A> = Async<R, E, A>;
11
+ export declare const succeed: <A>(value: A) => ZIO<unknown, never, A>;
12
+ export declare const fail: <E>(error: E) => ZIO<unknown, E, never>;
13
+ export declare const sync: <R, A>(thunk: (env: R) => A) => ZIO<R, unknown, A>;
14
+ export declare const map: <R, E, A, B>(fa: ZIO<R, E, A>, f: (a: A) => B) => Async<R, E, B>;
15
+ export declare const flatMap: <R, E, A, R2, E2, B>(fa: ZIO<R, E, A>, f: (a: A) => ZIO<R2, E2, B>) => ZIO<R & R2, E | E2, B>;
16
+ export declare const mapError: <R, E, E2, A>(fa: ZIO<R, E, A>, f: (e: E) => E2) => any;
17
+ export declare const catchAll: <R, E, A, R2, E2, B>(fa: ZIO<R, E, A>, handler: (e: E) => ZIO<R2, E2, B>) => ZIO<R & R2, E2, A | B>;
18
+ export declare function orElseOptional<R, E, A, R2, A2>(fa: ZIO<R, Option<E>, A>, that: () => ZIO<R2, Option<E>, A2>): ZIO<R & R2, Option<E>, A | A2>;
19
+ export declare const end: <E>() => ZIO<unknown, Option<E>, never>;
20
+ //# sourceMappingURL=effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../src/types/effect.ts"],"names":[],"mappings":"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"}
@@ -1,130 +1,26 @@
1
1
  "use strict";
2
- // src/effect.ts
3
- // Resultado de ejecutar un efecto
4
2
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.fromThunk = exports.sync = exports.fail = exports.succeed = void 0;
6
- exports.map = map;
7
- exports.flatMap = flatMap;
8
- exports.mapError = mapError;
9
- exports.catchAll = catchAll;
3
+ exports.end = exports.catchAll = exports.mapError = exports.flatMap = exports.map = exports.sync = exports.fail = exports.succeed = void 0;
10
4
  exports.orElseOptional = orElseOptional;
11
- exports.zip = zip;
12
- exports.tap = tap;
13
- exports.as = as;
14
- exports.asUnit = asUnit;
15
- exports.foreach = foreach;
16
- exports.collectAll = collectAll;
17
- // ---------- Constructores básicos ----------
18
- const succeed = (value) => (_) => ({ _tag: "Success", value });
5
+ const asyncEffect_1 = require("./asyncEffect");
6
+ const option_1 = require("./option");
7
+ const succeed = (value) => (0, asyncEffect_1.asyncSucceed)(value);
19
8
  exports.succeed = succeed;
20
- const fail = (error) => () => ({ _tag: "Failure", error });
9
+ const fail = (error) => (0, asyncEffect_1.asyncFail)(error);
21
10
  exports.fail = fail;
22
- const sync = (thunk) => (env) => {
23
- try {
24
- return { _tag: "Success", value: thunk(env) };
25
- }
26
- catch (e) {
27
- return { _tag: "Failure", error: e };
28
- }
29
- };
11
+ const sync = (thunk) => (0, asyncEffect_1.asyncSync)((env) => thunk(env));
30
12
  exports.sync = sync;
31
- const fromThunk = (thunk) => (0, exports.sync)(() => thunk());
32
- exports.fromThunk = fromThunk;
33
- // ---------- Combinadores de valor ----------
34
- function map(eff, f) {
35
- return (env) => {
36
- const exit = eff(env);
37
- if (exit._tag === "Success") {
38
- return { _tag: "Success", value: f(exit.value) };
39
- }
40
- return exit;
41
- };
42
- }
43
- function flatMap(eff, f) {
44
- return (env) => {
45
- const exit1 = eff(env);
46
- if (exit1._tag === "Failure") {
47
- return exit1;
48
- }
49
- return f(exit1.value)(env);
50
- };
51
- }
52
- function mapError(eff, f) {
53
- return (env) => {
54
- const exit = eff(env);
55
- if (exit._tag === "Failure") {
56
- return { _tag: "Failure", error: f(exit.error) };
57
- }
58
- return exit;
59
- };
60
- }
61
- function catchAll(eff, handler) {
62
- return (env) => {
63
- const exit = eff(env);
64
- if (exit._tag === "Failure") {
65
- return handler(exit.error)(env);
66
- }
67
- return exit;
68
- };
69
- }
70
- /**
71
- * Versión estilo ZIO.orElseOptional:
72
- * eff: Effect<R, Option<E>, A>
73
- * - Failure(Some(e)) => se propaga
74
- * - Failure(None) => se ejecuta `that`
75
- */
76
- function orElseOptional(eff, that) {
77
- return (env) => {
78
- const exit1 = eff(env);
79
- if (exit1._tag === "Success")
80
- return exit1;
81
- const opt = exit1.error;
82
- if (opt._tag === "Some")
83
- return exit1; // error real
84
- return that()(env); // None => probamos alternativa
85
- };
86
- }
87
- // ---------- Más combinadores ----------
88
- function zip(fa, fb) {
89
- return (env) => {
90
- const ea = fa(env);
91
- if (ea._tag === "Failure")
92
- return ea;
93
- const eb = fb(env);
94
- if (eb._tag === "Failure")
95
- return eb;
96
- return { _tag: "Success", value: [ea.value, eb.value] };
97
- };
98
- }
99
- function tap(eff, f) {
100
- return (env) => {
101
- const ea = eff(env);
102
- if (ea._tag === "Failure")
103
- return ea;
104
- const eb = f(ea.value)(env);
105
- if (eb._tag === "Failure")
106
- return eb;
107
- return ea;
108
- };
109
- }
110
- function as(eff, value) {
111
- return map(eff, () => value);
112
- }
113
- function asUnit(eff) {
114
- return as(eff, undefined);
115
- }
116
- function foreach(items, f) {
117
- return (env) => {
118
- const out = [];
119
- for (const a of items) {
120
- const exit = f(a)(env);
121
- if (exit._tag === "Failure")
122
- return exit;
123
- out.push(exit.value);
124
- }
125
- return { _tag: "Success", value: out };
126
- };
127
- }
128
- function collectAll(effects) {
129
- return foreach(effects, (e) => e);
13
+ const map = (fa, f) => (0, asyncEffect_1.asyncMap)(fa, f);
14
+ exports.map = map;
15
+ const flatMap = (fa, f) => (0, asyncEffect_1.asyncFlatMap)(fa, (a) => f(a));
16
+ exports.flatMap = flatMap;
17
+ const mapError = (fa, f) => (0, asyncEffect_1.asyncMapError)(fa, f);
18
+ exports.mapError = mapError;
19
+ const catchAll = (fa, handler) => (0, asyncEffect_1.asyncFold)(fa, (e) => handler(e), (a) => (0, asyncEffect_1.asyncSucceed)(a));
20
+ exports.catchAll = catchAll;
21
+ function orElseOptional(fa, that) {
22
+ return (0, asyncEffect_1.asyncFold)(fa, (opt) => (opt._tag === "Some" ? (0, asyncEffect_1.asyncFail)(opt) : that()), (a) => (0, asyncEffect_1.asyncSucceed)(a));
130
23
  }
24
+ const end = () => (0, exports.fail)(option_1.none);
25
+ exports.end = end;
26
+ //# sourceMappingURL=effect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect.js","sourceRoot":"","sources":["../../src/types/effect.ts"],"names":[],"mappings":";;;AAqCA,wCASC;AA7CD,+CAAqH;AAErH,qCAAgC;AAQzB,MAAM,OAAO,GAAG,CAAI,KAAQ,EAA0B,EAAE,CAAC,IAAA,0BAAY,EAAC,KAAK,CAAC,CAAC;AAAvE,QAAA,OAAO,WAAgE;AAC7E,MAAM,IAAI,GAAG,CAAI,KAAQ,EAA0B,EAAE,CAAC,IAAA,uBAAS,EAAC,KAAK,CAAC,CAAC;AAAjE,QAAA,IAAI,QAA6D;AAEvE,MAAM,IAAI,GAAG,CAAO,KAAoB,EAAsB,EAAE,CACnE,IAAA,uBAAS,EAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AADtB,QAAA,IAAI,QACkB;AAE5B,MAAM,GAAG,GAAG,CAAa,EAAgB,EAAE,CAAc,EAAE,EAAE,CAAC,IAAA,sBAAQ,EAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAAxE,QAAA,GAAG,OAAqE;AAE9E,MAAM,OAAO,GAAG,CACnB,EAAgB,EAChB,CAA2B,EACL,EAAE,CACxB,IAAA,0BAAY,EAAC,EAAS,EAAE,CAAC,CAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAQ,CAAQ,CAAC;AAJ7C,QAAA,OAAO,WAIsC;AAEnD,MAAM,QAAQ,GAAG,CAAc,EAAgB,EAAE,CAAe,EAAE,EAAE,CAAC,IAAA,2BAAa,EAAC,EAAS,EAAE,CAAQ,CAAQ,CAAC;AAAzG,QAAA,QAAQ,YAAiG;AAE/G,MAAM,QAAQ,GAAG,CACpB,EAAgB,EAChB,OAAiC,EACX,EAAE,CACxB,IAAA,uBAAS,EACL,EAAS,EACT,CAAC,CAAI,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAQ,EAC3B,CAAC,CAAI,EAAE,EAAE,CAAC,IAAA,0BAAY,EAAC,CAAC,CAAQ,CAC5B,CAAC;AARA,QAAA,QAAQ,YAQR;AAEb,SAAgB,cAAc,CAC1B,EAAwB,EACxB,IAAkC;IAElC,OAAO,IAAA,uBAAS,EACZ,EAAS,EACT,CAAC,GAAc,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,uBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAE,IAAI,EAAU,CAAC,EAC5E,CAAC,CAAI,EAAE,EAAE,CAAC,IAAA,0BAAY,EAAC,CAAC,CAAQ,CAC5B,CAAC;AACb,CAAC;AAEM,MAAM,GAAG,GAAG,GAAsC,EAAE,CAAC,IAAA,YAAI,EAAC,aAAiB,CAAC,CAAC;AAAvE,QAAA,GAAG,OAAoE"}
@@ -0,0 +1,11 @@
1
+ export type None = {
2
+ readonly _tag: "None";
3
+ };
4
+ export type Some<A> = {
5
+ readonly _tag: "Some";
6
+ readonly value: A;
7
+ };
8
+ export type Option<A> = None | Some<A>;
9
+ export declare const none: Option<never>;
10
+ export declare const some: <A>(value: A) => Option<A>;
11
+ //# sourceMappingURL=option.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.d.ts","sourceRoot":"","sources":["../../src/types/option.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7C,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAEvC,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,KAAK,CAAoB,CAAC;AAEpD,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,MAAM,CAAC,CAAC,CAA8B,CAAC"}
@@ -4,3 +4,4 @@ exports.some = exports.none = void 0;
4
4
  exports.none = { _tag: "None" };
5
5
  const some = (value) => ({ _tag: "Some", value });
6
6
  exports.some = some;
7
+ //# sourceMappingURL=option.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.js","sourceRoot":"","sources":["../../src/types/option.ts"],"names":[],"mappings":";;;AAKa,QAAA,IAAI,GAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAE7C,MAAM,IAAI,GAAG,CAAI,KAAQ,EAAa,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAA7D,QAAA,IAAI,QAAyD"}
package/package.json CHANGED
@@ -1,21 +1,34 @@
1
1
  {
2
2
  "name": "brass-runtime",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "Effect runtime utilities for TypeScript",
5
5
  "license": "ISC",
6
6
  "author": "",
7
- "type": "commonjs",
8
- "main": "dist/index.js",
9
- "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "sideEffects": false,
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js",
16
+ "require": "./dist/index.cjs"
17
+ },
18
+ "./package.json": "./package.json"
19
+ },
10
20
  "files": [
11
21
  "dist",
12
22
  "README.md",
13
- "LICENSE"
23
+ "LICENSE",
24
+ "package.json"
14
25
  ],
15
26
  "scripts": {
16
27
  "dev": "ts-node-dev src/examples/demo.ts",
17
- "build": "tsc",
18
- "test": "node -e \"console.log('no tests yet')\"",
28
+ "build": "npm run build:esm && npm run build:cjs",
29
+ "build:esm": "tsc -p tsconfig.esm.json",
30
+ "build:cjs": "tsc -p tsconfig.cjs.json && node -e \"import fs from 'fs'; if (fs.existsSync('dist/index.cjs')) fs.unlinkSync('dist/index.cjs'); fs.renameSync('dist/index.js','dist/index.cjs')\"",
31
+ "test": "tsx src/examples/index.ts",
19
32
  "prepublishOnly": "npm run build"
20
33
  },
21
34
  "devDependencies": {
@@ -28,6 +41,7 @@
28
41
  "conventional-changelog-conventionalcommits": "^7.x.x",
29
42
  "semantic-release": "^25.0.2",
30
43
  "ts-node-dev": "^2.0.0",
44
+ "tsx": "^4.21.0",
31
45
  "typescript": "^5.9.3"
32
46
  }
33
47
  }
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.acquireRelease = acquireRelease;
4
- const asyncEffect_1 = require("../types/asyncEffect");
5
- /**
6
- * acquireRelease:
7
- * acquire: Async<R, E, A>
8
- * release: (A, Exit) => Async<R, never, void>
9
- */
10
- function acquireRelease(acquire, release, scope) {
11
- return (0, asyncEffect_1.asyncFlatMap)(acquire, (resource) => {
12
- // registrar finalizer
13
- scope.addFinalizer((exit) => release(resource, exit));
14
- return (0, asyncEffect_1.asyncSucceed)(resource);
15
- });
16
- }
@@ -1,19 +0,0 @@
1
- "use strict";
2
- // src/withScope.ts
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.withScope = withScope;
5
- const scope_1 = require("./scope");
6
- /**
7
- * Ejecuta una función dentro de un scope estructurado.
8
- * Al final (éxito o error), se cierra el scope garantizando cleanup.
9
- */
10
- function withScope(body) {
11
- const scope = new scope_1.Scope();
12
- try {
13
- const result = body(scope);
14
- return result;
15
- }
16
- finally {
17
- scope.close(); // cleanup garantizado
18
- }
19
- }