@bessemer/cornerstone 0.5.107 → 0.5.109

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 +1 @@
1
- {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,yCAAyC,CAAA;AAElF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,UAAU,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAWhE,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,UAAU,QAAQ,KAAG,OAAO,CAAC,IAAI,CAItD,CAAA"}
1
+ {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,yCAAyC,CAAA;AAGlF,eAAO,MAAM,OAAO,+CAAe,CAAA;AAEnC,eAAO,MAAM,KAAK,GAAI,UAAU,QAAQ,KAAG,OAAO,CAAC,IAAI,CAItD,CAAA"}
package/dist/async.js CHANGED
@@ -1,17 +1,7 @@
1
1
  // src/async.ts
2
2
  import { toMilliseconds } from "@bessemer/cornerstone/temporal/duration";
3
- var execute = (runnable) => {
4
- return new Promise(async (resolve, reject) => {
5
- setTimeout(async () => {
6
- try {
7
- const value = await runnable();
8
- resolve(value);
9
- } catch (e) {
10
- reject(e);
11
- }
12
- }, 0);
13
- });
14
- };
3
+ import { executeAsync } from "@bessemer/cornerstone/internal";
4
+ var execute = executeAsync;
15
5
  var sleep = (duration) => {
16
6
  return new Promise((resolve) => {
17
7
  setTimeout(resolve, toMilliseconds(duration));
package/dist/async.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/async.ts"],"sourcesContent":["import { Duration, toMilliseconds } from '@bessemer/cornerstone/temporal/duration'\n\nexport const execute = <T>(runnable: () => Promise<T>): Promise<T> => {\n return new Promise(async (resolve, reject) => {\n setTimeout(async () => {\n try {\n const value = await runnable()\n resolve(value)\n } catch (e) {\n reject(e)\n }\n }, 0)\n })\n}\n\nexport const sleep = (duration: Duration): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, toMilliseconds(duration))\n })\n}\n"],"mappings":";AAAA,SAAmB,sBAAsB;AAElC,IAAM,UAAU,CAAI,aAA2C;AACpE,SAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,eAAW,YAAY;AACrB,UAAI;AACF,cAAM,QAAQ,MAAM,SAAS;AAC7B,gBAAQ,KAAK;AAAA,MACf,SAAS,GAAG;AACV,eAAO,CAAC;AAAA,MACV;AAAA,IACF,GAAG,CAAC;AAAA,EACN,CAAC;AACH;AAEO,IAAM,QAAQ,CAAC,aAAsC;AAC1D,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,SAAS,eAAe,QAAQ,CAAC;AAAA,EAC9C,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../src/async.ts"],"sourcesContent":["import { Duration, toMilliseconds } from '@bessemer/cornerstone/temporal/duration'\nimport { executeAsync } from '@bessemer/cornerstone/internal'\n\nexport const execute = executeAsync\n\nexport const sleep = (duration: Duration): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, toMilliseconds(duration))\n })\n}\n"],"mappings":";AAAA,SAAmB,sBAAsB;AACzC,SAAS,oBAAoB;AAEtB,IAAM,UAAU;AAEhB,IAAM,QAAQ,CAAC,aAAsC;AAC1D,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,SAAS,eAAe,QAAQ,CAAC;AAAA,EAC9C,CAAC;AACH;","names":[]}
package/dist/either.d.ts CHANGED
@@ -7,7 +7,7 @@ export type Right<RightType> = {
7
7
  value: RightType;
8
8
  isRight: true;
9
9
  isLeft: false;
10
- map: <T>(mapper: (element: RightType) => T) => Right<T>;
10
+ map: <T>(mapper: (element: RightType) => T) => T extends Promise<infer U> ? Promise<Right<U>> : Right<T>;
11
11
  mapLeft: () => Right<RightType>;
12
12
  [Symbol.iterator](): Generator<Either<RightType, never>, RightType>;
13
13
  };
@@ -17,7 +17,7 @@ export type Left<LeftType> = {
17
17
  isRight: false;
18
18
  isLeft: true;
19
19
  map: () => Left<LeftType>;
20
- mapLeft: <T>(mapper: (element: LeftType) => T) => Left<T>;
20
+ mapLeft: <T>(mapper: (element: LeftType) => T) => T extends Promise<infer U> ? Promise<Left<U>> : Left<T>;
21
21
  [Symbol.iterator](): Generator<Either<never, LeftType>, never>;
22
22
  };
23
23
  export type Either<RightType, LeftType> = Left<LeftType> | Right<RightType>;
@@ -27,7 +27,7 @@ export declare class RightImpl<RightType> implements Right<RightType> {
27
27
  readonly isRight = true;
28
28
  readonly isLeft = false;
29
29
  constructor(value: RightType);
30
- map: <T>(mapper: (element: RightType) => T) => Right<T>;
30
+ map: <T>(mapper: (element: RightType) => T) => T extends Promise<infer U> ? Promise<Right<U>> : Right<T>;
31
31
  mapLeft: () => Right<RightType>;
32
32
  [Symbol.iterator](): Generator<Either<RightType, never>, RightType>;
33
33
  }
@@ -38,7 +38,7 @@ export declare class LeftImpl<LeftType> implements Left<LeftType> {
38
38
  readonly isLeft = true;
39
39
  constructor(value: LeftType);
40
40
  map: () => Left<LeftType>;
41
- mapLeft: <T>(mapper: (element: LeftType) => T) => Left<T>;
41
+ mapLeft: <T>(mapper: (element: LeftType) => T) => T extends Promise<infer U> ? Promise<Left<U>> : Left<T>;
42
42
  [Symbol.iterator](): Generator<Either<never, LeftType>, never>;
43
43
  }
44
44
  export declare const left: <LeftType>(value: LeftType) => Left<LeftType>;
@@ -1 +1 @@
1
- {"version":3,"file":"either.d.ts","sourceRoot":"","sources":["../src/either.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"either.d.ts","sourceRoot":"","sources":["../src/either.ts"],"names":[],"mappings":"AAGA,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,KAAK,CAAC,SAAS,IAAI;IAC7B,IAAI,EAAE,UAAU,CAAC,KAAK,CAAA;IACtB,KAAK,EAAE,SAAS,CAAA;IAChB,OAAO,EAAE,IAAI,CAAA;IACb,MAAM,EAAE,KAAK,CAAA;IACb,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACxG,OAAO,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC,CAAA;IAC/B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,CAAA;CACpE,CAAA;AAED,MAAM,MAAM,IAAI,CAAC,QAAQ,IAAI;IAC3B,IAAI,EAAE,UAAU,CAAC,IAAI,CAAA;IACrB,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,KAAK,CAAA;IACd,MAAM,EAAE,IAAI,CAAA;IACZ,GAAG,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAA;IACzB,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACzG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;CAC/D,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;AAE3E,qBAAa,SAAS,CAAC,SAAS,CAAE,YAAW,KAAK,CAAC,SAAS,CAAC;aAK/B,KAAK,EAAE,SAAS;IAJ5C,SAAgB,IAAI,EAAE,UAAU,CAAC,KAAK,CAAmB;IACzD,SAAgB,OAAO,QAAO;IAC9B,SAAgB,MAAM,SAAQ;gBAEF,KAAK,EAAE,SAAS;IAE5C,GAAG,GAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,KAAK,CAAC,KAAG,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAOtG;IAED,OAAO,QAAO,KAAK,CAAC,SAAS,CAAC,CAE5B;IAEF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC;CAKpE;AAED,qBAAa,QAAQ,CAAC,QAAQ,CAAE,YAAW,IAAI,CAAC,QAAQ,CAAC;aAK3B,KAAK,EAAE,QAAQ;IAJ3C,SAAgB,IAAI,mBAAkB;IACtC,SAAgB,OAAO,SAAQ;IAC/B,SAAgB,MAAM,QAAO;gBAED,KAAK,EAAE,QAAQ;IAE3C,GAAG,QAAO,IAAI,CAAC,QAAQ,CAAC,CAEvB;IAED,OAAO,GAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,KAAK,CAAC,KAAG,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAOtG;IAEF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC;CAM/D;AAED,eAAO,MAAM,IAAI,GAAI,QAAQ,EAAE,OAAO,QAAQ,KAAG,IAAI,CAAC,QAAQ,CAAwB,CAAA;AACtF,eAAO,MAAM,KAAK,GAAI,SAAS,EAAE,OAAO,SAAS,KAAG,KAAK,CAAC,SAAS,CAAyB,CAAA;AAE5F,eAAO,MAAM,KAAK,GAAI,SAAS,EAAE,QAAQ,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAIxH,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS,MAAM,SAAS,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,EACvI,MAAM,CAAC,GAAG,EAAE,GAAG,KAAK,UAAU,KAC7B,CAAC,CACF,WAAW,EAAE,IAAI,KACd,IAAI,SAAS,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,GAClD,UAAU,GACV,IAAI,SAAS,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,GACtD,OAAO,CAAC,UAAU,CAAC,GACnB,KAAK,CA8BR,CAAA;AAID,wBAAgB,GAAG,CAAC,IAAI,SAAS,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAChE,WAAW,EAAE,IAAI,GAChB,IAAI,SAAS,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAA;AACrF,wBAAgB,GAAG,CAAC,IAAI,SAAS,MAAM,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EACrE,WAAW,EAAE,IAAI,GAChB,OAAO,CAAC,IAAI,SAAS,MAAM,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA"}
package/dist/either.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/either.ts
2
2
  import { isPromise } from "@bessemer/cornerstone/promise";
3
+ import { executeAsync } from "@bessemer/cornerstone/internal";
3
4
  var EitherType = /* @__PURE__ */ ((EitherType2) => {
4
5
  EitherType2["Left"] = "Left";
5
6
  EitherType2["Right"] = "Right";
@@ -13,7 +14,12 @@ var RightImpl = class {
13
14
  isRight = true;
14
15
  isLeft = false;
15
16
  map = (mapper) => {
16
- return right(mapper(this.value));
17
+ const mappedValue = mapper(this.value);
18
+ if (isPromise(mappedValue)) {
19
+ return executeAsync(async () => right(await mappedValue));
20
+ } else {
21
+ return right(mappedValue);
22
+ }
17
23
  };
18
24
  mapLeft = () => {
19
25
  return this;
@@ -35,7 +41,12 @@ var LeftImpl = class {
35
41
  return this;
36
42
  };
37
43
  mapLeft = (mapper) => {
38
- return left(mapper(this.value));
44
+ const mappedValue = mapper(this.value);
45
+ if (isPromise(mappedValue)) {
46
+ return executeAsync(async () => left(await mappedValue));
47
+ } else {
48
+ return left(mappedValue);
49
+ }
39
50
  };
40
51
  [Symbol.iterator]() {
41
52
  return function* () {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/either.ts"],"sourcesContent":["import { isPromise } from '@bessemer/cornerstone/promise'\n\nexport enum EitherType {\n Left = 'Left',\n Right = 'Right',\n}\n\nexport type Right<RightType> = {\n type: EitherType.Right\n value: RightType\n isRight: true\n isLeft: false\n map: <T>(mapper: (element: RightType) => T) => Right<T>\n mapLeft: () => Right<RightType>\n [Symbol.iterator](): Generator<Either<RightType, never>, RightType>\n}\n\nexport type Left<LeftType> = {\n type: EitherType.Left\n value: LeftType\n isRight: false\n isLeft: true\n map: () => Left<LeftType>\n mapLeft: <T>(mapper: (element: LeftType) => T) => Left<T>\n [Symbol.iterator](): Generator<Either<never, LeftType>, never>\n}\n\nexport type Either<RightType, LeftType> = Left<LeftType> | Right<RightType>\n\nexport class RightImpl<RightType> implements Right<RightType> {\n public readonly type: EitherType.Right = EitherType.Right\n public readonly isRight = true\n public readonly isLeft = false\n\n constructor(public readonly value: RightType) {}\n\n map = <T>(mapper: (element: RightType) => T): Right<T> => {\n return right(mapper(this.value))\n }\n\n mapLeft = (): Right<RightType> => {\n return this\n };\n\n [Symbol.iterator](): Generator<Either<RightType, never>, RightType> {\n return function* (this: Right<RightType>) {\n return this.value\n }.call(this)\n }\n}\n\nexport class LeftImpl<LeftType> implements Left<LeftType> {\n public readonly type = EitherType.Left\n public readonly isRight = false\n public readonly isLeft = true\n\n constructor(public readonly value: LeftType) {}\n\n map = (): Left<LeftType> => {\n return this\n }\n\n mapLeft = <T>(mapper: (element: LeftType) => T): Left<T> => {\n return left(mapper(this.value))\n };\n\n [Symbol.iterator](): Generator<Either<never, LeftType>, never> {\n return function* (this: Left<LeftType>) {\n yield this as any\n throw new Error('Illegal State')\n }.call(this)\n }\n}\n\nexport const left = <LeftType>(value: LeftType): Left<LeftType> => new LeftImpl(value)\nexport const right = <RightType>(value: RightType): Right<RightType> => new RightImpl(value)\n\nexport const split = <RightType, LeftType>(array: Array<Either<RightType, LeftType>>): [Array<LeftType>, Array<RightType>] => {\n const lefts = array.filter((it) => it.isLeft).map((it) => it.value)\n const rights = array.filter((it) => it.isRight).map((it) => it.value)\n return [lefts, rights]\n}\n\nexport const buildGenerator = <EitherType extends Either<any, any>, TGen extends () => Generator<EitherType> | AsyncGenerator<EitherType>>(\n lift: (val: any) => EitherType\n): ((\n generatorFn: TGen\n) => TGen extends () => Generator<EitherType, infer R>\n ? EitherType\n : TGen extends () => AsyncGenerator<EitherType, infer R>\n ? Promise<EitherType>\n : never) => {\n return (generatorFn) => {\n const generator = generatorFn()\n const firstNext = generator.next()\n if (isPromise(firstNext)) {\n return (async () => {\n let current = await firstNext\n while (!current.done) {\n const result = current.value\n if (result.isLeft) {\n return result\n }\n current = await generator.next(result.value)\n }\n return lift(current.value)\n })() as any\n } else {\n let current = firstNext\n while (!current.done) {\n const result = current.value\n if (result.isLeft) {\n return result\n }\n\n current = generator.next(result.value) as IteratorResult<EitherType>\n }\n\n return lift(current.value)\n }\n }\n}\n\nconst generator = buildGenerator((it) => right(it) as Either<any, any>)\n\nexport function gen<TGen extends () => Generator<Either<any, any>>>(\n generatorFn: TGen\n): TGen extends () => Generator<Either<any, infer L>, infer R> ? Either<R, L> : never\nexport function gen<TGen extends () => AsyncGenerator<Either<any, any>>>(\n generatorFn: TGen\n): Promise<TGen extends () => AsyncGenerator<Either<any, infer L>, infer R> ? Either<R, L> : never>\nexport function gen<TGen extends () => Generator<Either<any, any>> | AsyncGenerator<Either<any, any>>>(\n generatorFn: TGen\n): TGen extends () => Generator<Either<any, infer L>, infer R>\n ? Either<R, L>\n : TGen extends () => AsyncGenerator<Either<any, infer L>, infer R>\n ? Promise<Either<R, L>>\n : never {\n return generator(generatorFn)\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAEnB,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;AA2BL,IAAM,YAAN,MAAuD;AAAA,EAK5D,YAA4B,OAAkB;AAAlB;AAAA,EAAmB;AAAA,EAJ/B,OAAyB;AAAA,EACzB,UAAU;AAAA,EACV,SAAS;AAAA,EAIzB,MAAM,CAAI,WAAgD;AACxD,WAAO,MAAM,OAAO,KAAK,KAAK,CAAC;AAAA,EACjC;AAAA,EAEA,UAAU,MAAwB;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAoD;AAClE,WAAO,aAAmC;AACxC,aAAO,KAAK;AAAA,IACd,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAEO,IAAM,WAAN,MAAmD;AAAA,EAKxD,YAA4B,OAAiB;AAAjB;AAAA,EAAkB;AAAA,EAJ9B,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EAIzB,MAAM,MAAsB;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,CAAI,WAA8C;AAC1D,WAAO,KAAK,OAAO,KAAK,KAAK,CAAC;AAAA,EAChC;AAAA,EAEA,CAAC,OAAO,QAAQ,IAA+C;AAC7D,WAAO,aAAiC;AACtC,YAAM;AACN,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAEO,IAAM,OAAO,CAAW,UAAoC,IAAI,SAAS,KAAK;AAC9E,IAAM,QAAQ,CAAY,UAAuC,IAAI,UAAU,KAAK;AAEpF,IAAM,QAAQ,CAAsB,UAAmF;AAC5H,QAAM,QAAQ,MAAM,OAAO,CAAC,OAAO,GAAG,MAAM,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK;AAClE,QAAM,SAAS,MAAM,OAAO,CAAC,OAAO,GAAG,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK;AACpE,SAAO,CAAC,OAAO,MAAM;AACvB;AAEO,IAAM,iBAAiB,CAC5B,SAOY;AACZ,SAAO,CAAC,gBAAgB;AACtB,UAAMC,aAAY,YAAY;AAC9B,UAAM,YAAYA,WAAU,KAAK;AACjC,QAAI,UAAU,SAAS,GAAG;AACxB,cAAQ,YAAY;AAClB,YAAI,UAAU,MAAM;AACpB,eAAO,CAAC,QAAQ,MAAM;AACpB,gBAAM,SAAS,QAAQ;AACvB,cAAI,OAAO,QAAQ;AACjB,mBAAO;AAAA,UACT;AACA,oBAAU,MAAMA,WAAU,KAAK,OAAO,KAAK;AAAA,QAC7C;AACA,eAAO,KAAK,QAAQ,KAAK;AAAA,MAC3B,GAAG;AAAA,IACL,OAAO;AACL,UAAI,UAAU;AACd,aAAO,CAAC,QAAQ,MAAM;AACpB,cAAM,SAAS,QAAQ;AACvB,YAAI,OAAO,QAAQ;AACjB,iBAAO;AAAA,QACT;AAEA,kBAAUA,WAAU,KAAK,OAAO,KAAK;AAAA,MACvC;AAEA,aAAO,KAAK,QAAQ,KAAK;AAAA,IAC3B;AAAA,EACF;AACF;AAEA,IAAM,YAAY,eAAe,CAAC,OAAO,MAAM,EAAE,CAAqB;AAQ/D,SAAS,IACd,aAKQ;AACR,SAAO,UAAU,WAAW;AAC9B;","names":["EitherType","generator"]}
1
+ {"version":3,"sources":["../src/either.ts"],"sourcesContent":["import { isPromise } from '@bessemer/cornerstone/promise'\nimport { executeAsync } from '@bessemer/cornerstone/internal'\n\nexport enum EitherType {\n Left = 'Left',\n Right = 'Right',\n}\n\nexport type Right<RightType> = {\n type: EitherType.Right\n value: RightType\n isRight: true\n isLeft: false\n map: <T>(mapper: (element: RightType) => T) => T extends Promise<infer U> ? Promise<Right<U>> : Right<T>\n mapLeft: () => Right<RightType>\n [Symbol.iterator](): Generator<Either<RightType, never>, RightType>\n}\n\nexport type Left<LeftType> = {\n type: EitherType.Left\n value: LeftType\n isRight: false\n isLeft: true\n map: () => Left<LeftType>\n mapLeft: <T>(mapper: (element: LeftType) => T) => T extends Promise<infer U> ? Promise<Left<U>> : Left<T>\n [Symbol.iterator](): Generator<Either<never, LeftType>, never>\n}\n\nexport type Either<RightType, LeftType> = Left<LeftType> | Right<RightType>\n\nexport class RightImpl<RightType> implements Right<RightType> {\n public readonly type: EitherType.Right = EitherType.Right\n public readonly isRight = true\n public readonly isLeft = false\n\n constructor(public readonly value: RightType) {}\n\n map = <T>(mapper: (element: RightType) => T): T extends Promise<infer U> ? Promise<Right<U>> : Right<T> => {\n const mappedValue = mapper(this.value)\n if (isPromise(mappedValue)) {\n return executeAsync(async () => right(await mappedValue)) as any\n } else {\n return right(mappedValue) as any\n }\n }\n\n mapLeft = (): Right<RightType> => {\n return this\n };\n\n [Symbol.iterator](): Generator<Either<RightType, never>, RightType> {\n return function* (this: Right<RightType>) {\n return this.value\n }.call(this)\n }\n}\n\nexport class LeftImpl<LeftType> implements Left<LeftType> {\n public readonly type = EitherType.Left\n public readonly isRight = false\n public readonly isLeft = true\n\n constructor(public readonly value: LeftType) {}\n\n map = (): Left<LeftType> => {\n return this\n }\n\n mapLeft = <T>(mapper: (element: LeftType) => T): T extends Promise<infer U> ? Promise<Left<U>> : Left<T> => {\n const mappedValue = mapper(this.value)\n if (isPromise(mappedValue)) {\n return executeAsync(async () => left(await mappedValue)) as any\n } else {\n return left(mappedValue) as any\n }\n };\n\n [Symbol.iterator](): Generator<Either<never, LeftType>, never> {\n return function* (this: Left<LeftType>) {\n yield this as any\n throw new Error('Illegal State')\n }.call(this)\n }\n}\n\nexport const left = <LeftType>(value: LeftType): Left<LeftType> => new LeftImpl(value)\nexport const right = <RightType>(value: RightType): Right<RightType> => new RightImpl(value)\n\nexport const split = <RightType, LeftType>(array: Array<Either<RightType, LeftType>>): [Array<LeftType>, Array<RightType>] => {\n const lefts = array.filter((it) => it.isLeft).map((it) => it.value)\n const rights = array.filter((it) => it.isRight).map((it) => it.value)\n return [lefts, rights]\n}\n\nexport const buildGenerator = <EitherType extends Either<any, any>, TGen extends () => Generator<EitherType> | AsyncGenerator<EitherType>>(\n lift: (val: any) => EitherType\n): ((\n generatorFn: TGen\n) => TGen extends () => Generator<EitherType, infer R>\n ? EitherType\n : TGen extends () => AsyncGenerator<EitherType, infer R>\n ? Promise<EitherType>\n : never) => {\n return (generatorFn) => {\n const generator = generatorFn()\n const firstNext = generator.next()\n if (isPromise(firstNext)) {\n return (async () => {\n let current = await firstNext\n while (!current.done) {\n const result = current.value\n if (result.isLeft) {\n return result\n }\n current = await generator.next(result.value)\n }\n return lift(current.value)\n })() as any\n } else {\n let current = firstNext\n while (!current.done) {\n const result = current.value\n if (result.isLeft) {\n return result\n }\n\n current = generator.next(result.value) as IteratorResult<EitherType>\n }\n\n return lift(current.value)\n }\n }\n}\n\nconst generator = buildGenerator((it) => right(it) as Either<any, any>)\n\nexport function gen<TGen extends () => Generator<Either<any, any>>>(\n generatorFn: TGen\n): TGen extends () => Generator<Either<any, infer L>, infer R> ? Either<R, L> : never\nexport function gen<TGen extends () => AsyncGenerator<Either<any, any>>>(\n generatorFn: TGen\n): Promise<TGen extends () => AsyncGenerator<Either<any, infer L>, infer R> ? Either<R, L> : never>\nexport function gen<TGen extends () => Generator<Either<any, any>> | AsyncGenerator<Either<any, any>>>(\n generatorFn: TGen\n): TGen extends () => Generator<Either<any, infer L>, infer R>\n ? Either<R, L>\n : TGen extends () => AsyncGenerator<Either<any, infer L>, infer R>\n ? Promise<Either<R, L>>\n : never {\n return generator(generatorFn)\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,oBAAoB;AAEtB,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;AA2BL,IAAM,YAAN,MAAuD;AAAA,EAK5D,YAA4B,OAAkB;AAAlB;AAAA,EAAmB;AAAA,EAJ/B,OAAyB;AAAA,EACzB,UAAU;AAAA,EACV,SAAS;AAAA,EAIzB,MAAM,CAAI,WAAiG;AACzG,UAAM,cAAc,OAAO,KAAK,KAAK;AACrC,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAO,aAAa,YAAY,MAAM,MAAM,WAAW,CAAC;AAAA,IAC1D,OAAO;AACL,aAAO,MAAM,WAAW;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,UAAU,MAAwB;AAChC,WAAO;AAAA,EACT;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAoD;AAClE,WAAO,aAAmC;AACxC,aAAO,KAAK;AAAA,IACd,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAEO,IAAM,WAAN,MAAmD;AAAA,EAKxD,YAA4B,OAAiB;AAAjB;AAAA,EAAkB;AAAA,EAJ9B,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EAIzB,MAAM,MAAsB;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,CAAI,WAA8F;AAC1G,UAAM,cAAc,OAAO,KAAK,KAAK;AACrC,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAO,aAAa,YAAY,KAAK,MAAM,WAAW,CAAC;AAAA,IACzD,OAAO;AACL,aAAO,KAAK,WAAW;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,CAAC,OAAO,QAAQ,IAA+C;AAC7D,WAAO,aAAiC;AACtC,YAAM;AACN,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAEO,IAAM,OAAO,CAAW,UAAoC,IAAI,SAAS,KAAK;AAC9E,IAAM,QAAQ,CAAY,UAAuC,IAAI,UAAU,KAAK;AAEpF,IAAM,QAAQ,CAAsB,UAAmF;AAC5H,QAAM,QAAQ,MAAM,OAAO,CAAC,OAAO,GAAG,MAAM,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK;AAClE,QAAM,SAAS,MAAM,OAAO,CAAC,OAAO,GAAG,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK;AACpE,SAAO,CAAC,OAAO,MAAM;AACvB;AAEO,IAAM,iBAAiB,CAC5B,SAOY;AACZ,SAAO,CAAC,gBAAgB;AACtB,UAAMC,aAAY,YAAY;AAC9B,UAAM,YAAYA,WAAU,KAAK;AACjC,QAAI,UAAU,SAAS,GAAG;AACxB,cAAQ,YAAY;AAClB,YAAI,UAAU,MAAM;AACpB,eAAO,CAAC,QAAQ,MAAM;AACpB,gBAAM,SAAS,QAAQ;AACvB,cAAI,OAAO,QAAQ;AACjB,mBAAO;AAAA,UACT;AACA,oBAAU,MAAMA,WAAU,KAAK,OAAO,KAAK;AAAA,QAC7C;AACA,eAAO,KAAK,QAAQ,KAAK;AAAA,MAC3B,GAAG;AAAA,IACL,OAAO;AACL,UAAI,UAAU;AACd,aAAO,CAAC,QAAQ,MAAM;AACpB,cAAM,SAAS,QAAQ;AACvB,YAAI,OAAO,QAAQ;AACjB,iBAAO;AAAA,QACT;AAEA,kBAAUA,WAAU,KAAK,OAAO,KAAK;AAAA,MACvC;AAEA,aAAO,KAAK,QAAQ,KAAK;AAAA,IAC3B;AAAA,EACF;AACF;AAEA,IAAM,YAAY,eAAe,CAAC,OAAO,MAAM,EAAE,CAAqB;AAQ/D,SAAS,IACd,aAKQ;AACR,SAAO,UAAU,WAAW;AAC9B;","names":["EitherType","generator"]}
@@ -0,0 +1,2 @@
1
+ export declare const executeAsync: <T>(runnable: () => Promise<T>) => Promise<T>;
2
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,UAAU,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAWrE,CAAA"}
@@ -0,0 +1,17 @@
1
+ // src/internal.ts
2
+ var executeAsync = (runnable) => {
3
+ return new Promise(async (resolve, reject) => {
4
+ setTimeout(async () => {
5
+ try {
6
+ const value = await runnable();
7
+ resolve(value);
8
+ } catch (e) {
9
+ reject(e);
10
+ }
11
+ }, 0);
12
+ });
13
+ };
14
+ export {
15
+ executeAsync
16
+ };
17
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal.ts"],"sourcesContent":["export const executeAsync = <T>(runnable: () => Promise<T>): Promise<T> => {\n return new Promise(async (resolve, reject) => {\n setTimeout(async () => {\n try {\n const value = await runnable()\n resolve(value)\n } catch (e) {\n reject(e)\n }\n }, 0)\n })\n}\n"],"mappings":";AAAO,IAAM,eAAe,CAAI,aAA2C;AACzE,SAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,eAAW,YAAY;AACrB,UAAI;AACF,cAAM,QAAQ,MAAM,SAAS;AAC7B,gBAAQ,KAAK;AAAA,MACf,SAAS,GAAG;AACV,eAAO,CAAC;AAAA,MACV;AAAA,IACF,GAAG,CAAC;AAAA,EACN,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;CAAE,CAAA;AAEpH,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAE1E,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAQ/D,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,OAAK,cAAc,CAAC,CAAC,CAS5C,CAAA"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../src/promise.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;CAAE,CAAA;AAEpH,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAM1E,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAQ/D,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,OAAK,cAAc,CAAC,CAAC,CAS5C,CAAA"}
package/dist/promise.js CHANGED
@@ -1,5 +1,9 @@
1
1
  // src/promise.ts
2
+ import { isNil } from "@bessemer/cornerstone/object";
2
3
  var isPromise = (element) => {
4
+ if (isNil(element)) {
5
+ return false;
6
+ }
3
7
  return typeof element.then === "function";
4
8
  };
5
9
  var toPromise = (element) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/promise.ts"],"sourcesContent":["export type PromiseContext<T> = { promise: Promise<T>; resolve: (value: T) => void; reject: (reason?: any) => void }\n\nexport const isPromise = <T>(element: T | Promise<T>): element is Promise<T> => {\n return typeof (element as Promise<T>).then === 'function'\n}\n\nexport const toPromise = <T>(element: T | Promise<T>): Promise<T> => {\n if (isPromise(element)) {\n return element\n }\n\n const { resolve, promise } = create<T>()\n resolve(element)\n return promise\n}\n\nexport const create = <T>(): PromiseContext<T> => {\n let resolveVar\n let rejectVar\n const promise = new Promise<T>((resolve, reject) => {\n resolveVar = resolve\n rejectVar = reject\n })\n\n return { promise, resolve: resolveVar!, reject: rejectVar! }\n}\n"],"mappings":";AAEO,IAAM,YAAY,CAAI,YAAmD;AAC9E,SAAO,OAAQ,QAAuB,SAAS;AACjD;AAEO,IAAM,YAAY,CAAI,YAAwC;AACnE,MAAI,UAAU,OAAO,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,SAAS,QAAQ,IAAI,OAAU;AACvC,UAAQ,OAAO;AACf,SAAO;AACT;AAEO,IAAM,SAAS,MAA4B;AAChD,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,IAAI,QAAW,CAAC,SAAS,WAAW;AAClD,iBAAa;AACb,gBAAY;AAAA,EACd,CAAC;AAED,SAAO,EAAE,SAAS,SAAS,YAAa,QAAQ,UAAW;AAC7D;","names":[]}
1
+ {"version":3,"sources":["../src/promise.ts"],"sourcesContent":["import { isNil } from '@bessemer/cornerstone/object'\n\nexport type PromiseContext<T> = { promise: Promise<T>; resolve: (value: T) => void; reject: (reason?: any) => void }\n\nexport const isPromise = <T>(element: T | Promise<T>): element is Promise<T> => {\n if (isNil(element)) {\n return false\n }\n\n return typeof (element as Promise<T>).then === 'function'\n}\n\nexport const toPromise = <T>(element: T | Promise<T>): Promise<T> => {\n if (isPromise(element)) {\n return element\n }\n\n const { resolve, promise } = create<T>()\n resolve(element)\n return promise\n}\n\nexport const create = <T>(): PromiseContext<T> => {\n let resolveVar\n let rejectVar\n const promise = new Promise<T>((resolve, reject) => {\n resolveVar = resolve\n rejectVar = reject\n })\n\n return { promise, resolve: resolveVar!, reject: rejectVar! }\n}\n"],"mappings":";AAAA,SAAS,aAAa;AAIf,IAAM,YAAY,CAAI,YAAmD;AAC9E,MAAI,MAAM,OAAO,GAAG;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,OAAQ,QAAuB,SAAS;AACjD;AAEO,IAAM,YAAY,CAAI,YAAwC;AACnE,MAAI,UAAU,OAAO,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,SAAS,QAAQ,IAAI,OAAU;AACvC,UAAQ,OAAO;AACf,SAAO;AACT;AAEO,IAAM,SAAS,MAA4B;AAChD,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,IAAI,QAAW,CAAC,SAAS,WAAW;AAClD,iBAAa;AACb,gBAAY;AAAA,EACd,CAAC;AAED,SAAO,EAAE,SAAS,SAAS,YAAa,QAAQ,UAAW;AAC7D;","names":[]}
package/dist/result.d.ts CHANGED
@@ -3,7 +3,7 @@ import { Throwable } from '@bessemer/cornerstone/types';
3
3
  export type Success<SuccessType> = Omit<Right<SuccessType>, 'map' | 'mapLeft'> & {
4
4
  isSuccess: true;
5
5
  getOrThrow: () => SuccessType;
6
- map: <T>(mapper: (element: SuccessType) => T) => Success<T>;
6
+ map: <T>(mapper: (element: SuccessType) => T) => T extends Promise<infer U> ? Promise<Success<U>> : Success<T>;
7
7
  mapLeft: () => Success<SuccessType>;
8
8
  [Symbol.iterator](): Generator<Result<SuccessType, never>, SuccessType>;
9
9
  };
@@ -11,7 +11,7 @@ export type Failure<FailureType = unknown> = Omit<Left<FailureType>, 'map' | 'ma
11
11
  isSuccess: false;
12
12
  getOrThrow: () => never;
13
13
  map: () => Failure<FailureType>;
14
- mapLeft: <T>(mapper: (element: FailureType) => T) => Failure<T>;
14
+ mapLeft: <T>(mapper: (element: FailureType) => T) => T extends Promise<infer U> ? Promise<Failure<U>> : Failure<T>;
15
15
  [Symbol.iterator](): Generator<Result<never, FailureType>, never>;
16
16
  };
17
17
  export type Result<SuccessType, FailureType = unknown> = Failure<FailureType> | Success<SuccessType>;
@@ -1 +1 @@
1
- {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
package/dist/result.js CHANGED
@@ -1,6 +1,7 @@
1
1
  // src/result.ts
2
2
  import { buildGenerator, LeftImpl, RightImpl } from "@bessemer/cornerstone/either";
3
3
  import { isPromise } from "@bessemer/cornerstone/promise";
4
+ import { executeAsync } from "@bessemer/cornerstone/internal";
4
5
  var SuccessImpl = class extends RightImpl {
5
6
  isSuccess = true;
6
7
  constructor(value) {
@@ -10,7 +11,12 @@ var SuccessImpl = class extends RightImpl {
10
11
  return this.value;
11
12
  }
12
13
  map = (mapper) => {
13
- return success(mapper(this.value));
14
+ const mappedValue = mapper(this.value);
15
+ if (isPromise(mappedValue)) {
16
+ return executeAsync(async () => success(await mappedValue));
17
+ } else {
18
+ return success(mappedValue);
19
+ }
14
20
  };
15
21
  mapLeft = () => {
16
22
  return this;
@@ -33,7 +39,12 @@ var FailureImpl = class extends LeftImpl {
33
39
  return this;
34
40
  };
35
41
  mapLeft = (mapper) => {
36
- return failure(mapper(this.value));
42
+ const mappedValue = mapper(this.value);
43
+ if (isPromise(mappedValue)) {
44
+ return executeAsync(async () => failure(await mappedValue));
45
+ } else {
46
+ return failure(mappedValue);
47
+ }
37
48
  };
38
49
  [Symbol.iterator]() {
39
50
  return function* () {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/result.ts"],"sourcesContent":["import { buildGenerator, Left, LeftImpl, Right, RightImpl } from '@bessemer/cornerstone/either'\nimport { Throwable } from '@bessemer/cornerstone/types'\nimport { isPromise } from '@bessemer/cornerstone/promise'\n\nexport type Success<SuccessType> = Omit<Right<SuccessType>, 'map' | 'mapLeft'> & {\n isSuccess: true\n getOrThrow: () => SuccessType\n map: <T>(mapper: (element: SuccessType) => T) => Success<T>\n mapLeft: () => Success<SuccessType>\n [Symbol.iterator](): Generator<Result<SuccessType, never>, SuccessType>\n}\n\nexport type Failure<FailureType = unknown> = Omit<Left<FailureType>, 'map' | 'mapLeft'> & {\n isSuccess: false\n getOrThrow: () => never\n map: () => Failure<FailureType>\n mapLeft: <T>(mapper: (element: FailureType) => T) => Failure<T>\n [Symbol.iterator](): Generator<Result<never, FailureType>, never>\n}\n\nexport type Result<SuccessType, FailureType = unknown> = Failure<FailureType> | Success<SuccessType>\n\nclass SuccessImpl<SuccessType> extends RightImpl<SuccessType> implements Success<SuccessType> {\n public readonly isSuccess = true\n\n constructor(value: SuccessType) {\n super(value)\n }\n\n getOrThrow(): SuccessType {\n return this.value\n }\n\n override map = <T>(mapper: (element: SuccessType) => T): Success<T> => {\n return success(mapper(this.value))\n }\n\n override mapLeft = (): Success<SuccessType> => {\n return this\n };\n\n override [Symbol.iterator](): Generator<Result<SuccessType, never>, SuccessType> {\n return function* (this: Success<SuccessType>) {\n return this.value\n }.call(this)\n }\n}\n\nclass FailureImpl<FailureType> extends LeftImpl<FailureType> implements Failure<FailureType> {\n public readonly isSuccess = false\n\n constructor(value: FailureType) {\n super(value)\n }\n\n getOrThrow(): never {\n throw this.value\n }\n\n override map = (): Failure<FailureType> => {\n return this\n }\n\n override mapLeft = <T>(mapper: (element: FailureType) => T): Failure<T> => {\n return failure(mapper(this.value))\n };\n\n override [Symbol.iterator](): Generator<Result<never, FailureType>, never> {\n return function* (this: Failure<FailureType>) {\n yield this as any\n throw new Error('Illegal State')\n }.call(this)\n }\n}\n\nexport type AsyncResult<T, N = Throwable> = Promise<Result<T, N>>\n\nexport const success = <T>(value: T): Success<T> => {\n return new SuccessImpl<T>(value)\n}\n\nexport function failure(): Failure<never>\nexport function failure<N>(failure: N): Failure<N>\nexport function failure(failure?: unknown): Failure {\n return new FailureImpl<unknown>(failure)\n}\n\nexport function tryValue<SOURCE_VALUE>(resolver: () => Promise<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE): Result<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE | Promise<SOURCE_VALUE>): Result<SOURCE_VALUE> | Promise<Result<SOURCE_VALUE>> {\n try {\n let result = resolver()\n if (isPromise(result)) {\n return result.then((it) => success(it)).catch((it) => failure(it))\n } else {\n return success(result)\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE>): Result<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => AsyncResult<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE> | AsyncResult<SOURCE_VALUE>): ReturnType<typeof resolver> {\n try {\n let result = resolver()\n if (isPromise(result)) {\n return result.catch((it) => failure(it))\n } else {\n return result\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\nconst generator = buildGenerator((it) => success(it) as Result<any, any>)\n\nexport function gen<TGen extends () => Generator<Result<any, any>>>(\n generatorFn: TGen\n): TGen extends () => Generator<Result<any, infer L>, infer R> ? Result<R, L> : never\nexport function gen<TGen extends () => AsyncGenerator<Result<any, any>>>(\n generatorFn: TGen\n): Promise<TGen extends () => AsyncGenerator<Result<any, infer L>, infer R> ? Result<R, L> : never>\nexport function gen<TGen extends () => Generator<Result<any, any>> | AsyncGenerator<Result<any, any>>>(\n generatorFn: TGen\n): TGen extends () => Generator<Result<any, infer L>, infer R>\n ? Result<R, L>\n : TGen extends () => AsyncGenerator<Result<any, infer L>, infer R>\n ? Promise<Result<R, L>>\n : never {\n return generator(generatorFn)\n}\n"],"mappings":";AAAA,SAAS,gBAAsB,UAAiB,iBAAiB;AAEjE,SAAS,iBAAiB;AAoB1B,IAAM,cAAN,cAAuC,UAAuD;AAAA,EAC5E,YAAY;AAAA,EAE5B,YAAY,OAAoB;AAC9B,UAAM,KAAK;AAAA,EACb;AAAA,EAEA,aAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAES,MAAM,CAAI,WAAoD;AACrE,WAAO,QAAQ,OAAO,KAAK,KAAK,CAAC;AAAA,EACnC;AAAA,EAES,UAAU,MAA4B;AAC7C,WAAO;AAAA,EACT;AAAA,EAEA,CAAU,OAAO,QAAQ,IAAwD;AAC/E,WAAO,aAAuC;AAC5C,aAAO,KAAK;AAAA,IACd,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAEA,IAAM,cAAN,cAAuC,SAAsD;AAAA,EAC3E,YAAY;AAAA,EAE5B,YAAY,OAAoB;AAC9B,UAAM,KAAK;AAAA,EACb;AAAA,EAEA,aAAoB;AAClB,UAAM,KAAK;AAAA,EACb;AAAA,EAES,MAAM,MAA4B;AACzC,WAAO;AAAA,EACT;AAAA,EAES,UAAU,CAAI,WAAoD;AACzE,WAAO,QAAQ,OAAO,KAAK,KAAK,CAAC;AAAA,EACnC;AAAA,EAEA,CAAU,OAAO,QAAQ,IAAkD;AACzE,WAAO,aAAuC;AAC5C,YAAM;AACN,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAIO,IAAM,UAAU,CAAI,UAAyB;AAClD,SAAO,IAAI,YAAe,KAAK;AACjC;AAIO,SAAS,QAAQA,UAA4B;AAClD,SAAO,IAAI,YAAqBA,QAAO;AACzC;AAIO,SAAS,SAAuB,UAA4G;AACjJ,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAI,UAAU,MAAM,GAAG;AACrB,aAAO,OAAO,KAAK,CAAC,OAAO,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACnE,OAAO;AACL,aAAO,QAAQ,MAAM;AAAA,IACvB;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;AAIO,SAAS,UAAwB,UAA+F;AACrI,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAI,UAAU,MAAM,GAAG;AACrB,aAAO,OAAO,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACzC,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;AAEA,IAAM,YAAY,eAAe,CAAC,OAAO,QAAQ,EAAE,CAAqB;AAQjE,SAAS,IACd,aAKQ;AACR,SAAO,UAAU,WAAW;AAC9B;","names":["failure"]}
1
+ {"version":3,"sources":["../src/result.ts"],"sourcesContent":["import { buildGenerator, Left, LeftImpl, Right, RightImpl } from '@bessemer/cornerstone/either'\nimport { Throwable } from '@bessemer/cornerstone/types'\nimport { isPromise } from '@bessemer/cornerstone/promise'\nimport { executeAsync } from '@bessemer/cornerstone/internal'\n\nexport type Success<SuccessType> = Omit<Right<SuccessType>, 'map' | 'mapLeft'> & {\n isSuccess: true\n getOrThrow: () => SuccessType\n map: <T>(mapper: (element: SuccessType) => T) => T extends Promise<infer U> ? Promise<Success<U>> : Success<T>\n mapLeft: () => Success<SuccessType>\n [Symbol.iterator](): Generator<Result<SuccessType, never>, SuccessType>\n}\n\nexport type Failure<FailureType = unknown> = Omit<Left<FailureType>, 'map' | 'mapLeft'> & {\n isSuccess: false\n getOrThrow: () => never\n map: () => Failure<FailureType>\n mapLeft: <T>(mapper: (element: FailureType) => T) => T extends Promise<infer U> ? Promise<Failure<U>> : Failure<T>\n [Symbol.iterator](): Generator<Result<never, FailureType>, never>\n}\n\nexport type Result<SuccessType, FailureType = unknown> = Failure<FailureType> | Success<SuccessType>\n\nclass SuccessImpl<SuccessType> extends RightImpl<SuccessType> implements Success<SuccessType> {\n public readonly isSuccess = true\n\n constructor(value: SuccessType) {\n super(value)\n }\n\n getOrThrow(): SuccessType {\n return this.value\n }\n\n override map = <T>(mapper: (element: SuccessType) => T): T extends Promise<infer U> ? Promise<Success<U>> : Success<T> => {\n const mappedValue = mapper(this.value)\n if (isPromise(mappedValue)) {\n return executeAsync(async () => success(await mappedValue)) as any\n } else {\n return success(mappedValue) as any\n }\n }\n\n override mapLeft = (): Success<SuccessType> => {\n return this\n };\n\n override [Symbol.iterator](): Generator<Result<SuccessType, never>, SuccessType> {\n return function* (this: Success<SuccessType>) {\n return this.value\n }.call(this)\n }\n}\n\nclass FailureImpl<FailureType> extends LeftImpl<FailureType> implements Failure<FailureType> {\n public readonly isSuccess = false\n\n constructor(value: FailureType) {\n super(value)\n }\n\n getOrThrow(): never {\n throw this.value\n }\n\n override map = (): Failure<FailureType> => {\n return this\n }\n\n override mapLeft = <T>(mapper: (element: FailureType) => T): T extends Promise<infer U> ? Promise<Failure<U>> : Failure<T> => {\n const mappedValue = mapper(this.value)\n if (isPromise(mappedValue)) {\n return executeAsync(async () => failure(await mappedValue)) as any\n } else {\n return failure(mappedValue) as any\n }\n };\n\n override [Symbol.iterator](): Generator<Result<never, FailureType>, never> {\n return function* (this: Failure<FailureType>) {\n yield this as any\n throw new Error('Illegal State')\n }.call(this)\n }\n}\n\nexport type AsyncResult<T, N = Throwable> = Promise<Result<T, N>>\n\nexport const success = <T>(value: T): Success<T> => {\n return new SuccessImpl<T>(value)\n}\n\nexport function failure(): Failure<never>\nexport function failure<N>(failure: N): Failure<N>\nexport function failure(failure?: unknown): Failure {\n return new FailureImpl<unknown>(failure)\n}\n\nexport function tryValue<SOURCE_VALUE>(resolver: () => Promise<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE): Result<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE | Promise<SOURCE_VALUE>): Result<SOURCE_VALUE> | Promise<Result<SOURCE_VALUE>> {\n try {\n let result = resolver()\n if (isPromise(result)) {\n return result.then((it) => success(it)).catch((it) => failure(it))\n } else {\n return success(result)\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE>): Result<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => AsyncResult<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE> | AsyncResult<SOURCE_VALUE>): ReturnType<typeof resolver> {\n try {\n let result = resolver()\n if (isPromise(result)) {\n return result.catch((it) => failure(it))\n } else {\n return result\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\nconst generator = buildGenerator((it) => success(it) as Result<any, any>)\n\nexport function gen<TGen extends () => Generator<Result<any, any>>>(\n generatorFn: TGen\n): TGen extends () => Generator<Result<any, infer L>, infer R> ? Result<R, L> : never\nexport function gen<TGen extends () => AsyncGenerator<Result<any, any>>>(\n generatorFn: TGen\n): Promise<TGen extends () => AsyncGenerator<Result<any, infer L>, infer R> ? Result<R, L> : never>\nexport function gen<TGen extends () => Generator<Result<any, any>> | AsyncGenerator<Result<any, any>>>(\n generatorFn: TGen\n): TGen extends () => Generator<Result<any, infer L>, infer R>\n ? Result<R, L>\n : TGen extends () => AsyncGenerator<Result<any, infer L>, infer R>\n ? Promise<Result<R, L>>\n : never {\n return generator(generatorFn)\n}\n"],"mappings":";AAAA,SAAS,gBAAsB,UAAiB,iBAAiB;AAEjE,SAAS,iBAAiB;AAC1B,SAAS,oBAAoB;AAoB7B,IAAM,cAAN,cAAuC,UAAuD;AAAA,EAC5E,YAAY;AAAA,EAE5B,YAAY,OAAoB;AAC9B,UAAM,KAAK;AAAA,EACb;AAAA,EAEA,aAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAES,MAAM,CAAI,WAAuG;AACxH,UAAM,cAAc,OAAO,KAAK,KAAK;AACrC,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAO,aAAa,YAAY,QAAQ,MAAM,WAAW,CAAC;AAAA,IAC5D,OAAO;AACL,aAAO,QAAQ,WAAW;AAAA,IAC5B;AAAA,EACF;AAAA,EAES,UAAU,MAA4B;AAC7C,WAAO;AAAA,EACT;AAAA,EAEA,CAAU,OAAO,QAAQ,IAAwD;AAC/E,WAAO,aAAuC;AAC5C,aAAO,KAAK;AAAA,IACd,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAEA,IAAM,cAAN,cAAuC,SAAsD;AAAA,EAC3E,YAAY;AAAA,EAE5B,YAAY,OAAoB;AAC9B,UAAM,KAAK;AAAA,EACb;AAAA,EAEA,aAAoB;AAClB,UAAM,KAAK;AAAA,EACb;AAAA,EAES,MAAM,MAA4B;AACzC,WAAO;AAAA,EACT;AAAA,EAES,UAAU,CAAI,WAAuG;AAC5H,UAAM,cAAc,OAAO,KAAK,KAAK;AACrC,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAO,aAAa,YAAY,QAAQ,MAAM,WAAW,CAAC;AAAA,IAC5D,OAAO;AACL,aAAO,QAAQ,WAAW;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,CAAU,OAAO,QAAQ,IAAkD;AACzE,WAAO,aAAuC;AAC5C,YAAM;AACN,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAIO,IAAM,UAAU,CAAI,UAAyB;AAClD,SAAO,IAAI,YAAe,KAAK;AACjC;AAIO,SAAS,QAAQA,UAA4B;AAClD,SAAO,IAAI,YAAqBA,QAAO;AACzC;AAIO,SAAS,SAAuB,UAA4G;AACjJ,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAI,UAAU,MAAM,GAAG;AACrB,aAAO,OAAO,KAAK,CAAC,OAAO,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACnE,OAAO;AACL,aAAO,QAAQ,MAAM;AAAA,IACvB;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;AAIO,SAAS,UAAwB,UAA+F;AACrI,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAI,UAAU,MAAM,GAAG;AACrB,aAAO,OAAO,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACzC,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;AAEA,IAAM,YAAY,eAAe,CAAC,OAAO,QAAQ,EAAE,CAAqB;AAQjE,SAAS,IACd,aAKQ;AACR,SAAO,UAAU,WAAW;AAC9B;","names":["failure"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bessemer/cornerstone",
3
3
  "type": "module",
4
- "version": "0.5.107",
4
+ "version": "0.5.109",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "sideEffects": false,