@livestore/utils 0.0.55 → 0.0.56-dev.1

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.
package/dist/base64.d.ts CHANGED
@@ -9,4 +9,5 @@ export declare const encode: (data: ArrayBuffer | string) => string;
9
9
  * @param b64
10
10
  */
11
11
  export declare const decode: (b64: string) => Uint8Array;
12
+ export declare const decodeToString: (b64: string) => string;
12
13
  //# sourceMappingURL=base64.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAuEA;;;;GAIG;AACH,eAAO,MAAM,MAAM,SAAU,WAAW,GAAG,MAAM,KAAG,MA0BnD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAS,MAAM,KAAG,UASpC,CAAA"}
1
+ {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAyEA;;;;GAIG;AACH,eAAO,MAAM,MAAM,SAAU,WAAW,GAAG,MAAM,KAAG,MA0BnD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAS,MAAM,KAAG,UASpC,CAAA;AAGD,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,MAAyC,CAAA"}
package/dist/base64.js CHANGED
@@ -67,13 +67,14 @@ const base64abc = [
67
67
  '+',
68
68
  '/',
69
69
  ];
70
+ const textEncoder = new TextEncoder();
70
71
  /**
71
72
  * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
72
73
  * Encodes a given Uint8Array, ArrayBuffer or string into RFC4648 base64 representation
73
74
  * @param data
74
75
  */
75
76
  export const encode = (data) => {
76
- const uint8 = typeof data === 'string' ? new TextEncoder().encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data);
77
+ const uint8 = typeof data === 'string' ? textEncoder.encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data);
77
78
  let result = '', i;
78
79
  const l = uint8.length;
79
80
  for (i = 2; i < l; i += 3) {
@@ -111,4 +112,6 @@ export const decode = (b64) => {
111
112
  }
112
113
  return bytes;
113
114
  };
115
+ const textDecoder = new TextDecoder();
116
+ export const decodeToString = (b64) => textDecoder.decode(decode(b64));
114
117
  //# sourceMappingURL=base64.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base64.js","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qCAAqC;AACrC,2CAA2C;AAE3C,MAAM,SAAS,GAAG;IAChB,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACJ,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAA0B,EAAU,EAAE;IAC3D,MAAM,KAAK,GACT,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;IACtH,IAAI,MAAM,GAAG,EAAE,EACb,CAAC,CAAA;IACH,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;IACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,CAAA;QACvC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACzE,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACrE,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,CAAA;IACvC,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAChB,uBAAuB;QACvB,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,CAAA;QACvC,MAAM,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAChD,MAAM,IAAI,IAAI,CAAA;IAChB,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,wBAAwB;QACxB,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,CAAA;QACvC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACzE,MAAM,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAChD,MAAM,IAAI,GAAG,CAAA;IACf,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAc,EAAE;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAA;IAC7B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,qDAAqD;QACrD,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,9 @@ import type { ParseError } from '@effect/schema/ParseResult';
4
4
  import { Effect } from 'effect';
5
5
  export * from '@effect/schema/Schema';
6
6
  export * from './debug-diff.js';
7
+ export * from './msgpack.js';
7
8
  export declare const hash: (schema: Schema.Schema<any>) => number;
8
- declare const AnyError_base: Schema.transform<Schema.Struct<{
9
- message: typeof Schema.String;
10
- stack: Schema.optional<typeof Schema.String>;
11
- }>, typeof Schema.Any>;
12
- export declare class AnyError extends AnyError_base {
13
- }
14
9
  export declare const encodeWithTransferables: <A, I, R>(schema: Schema.Schema<A, I, R>, options?: ParseOptions | undefined) => (a: A, overrideOptions?: ParseOptions | undefined) => Effect.Effect<[I, Transferable[]], ParseError, R>;
10
+ export declare const swap: <A, I, R>(schema: Schema.Schema<A, I, R>) => Schema.Schema<I, A, R>;
11
+ export declare const Base64FromUint8Array: Schema.Schema<string, Uint8Array>;
15
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAQ,MAAM,QAAQ,CAAA;AAIrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA;AAK/B,eAAO,MAAM,IAAI,WAAY,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAS9C,CAAA;;;;;AAOD,qBAAa,QAAS,SAAQ,aAgB5B;CAAG;AAEL,eAAO,MAAM,uBAAuB,GACjC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,YAAY,YAAY,GAAG,SAAS,SACxE,CAAC,oBAAoB,YAAY,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAShG,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAQ,MAAM,QAAQ,CAAA;AAErC,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAK5B,eAAO,MAAM,IAAI,WAAY,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAS9C,CAAA;AAED,eAAO,MAAM,uBAAuB,GACjC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,YAAY,YAAY,GAAG,SAAS,SACxE,CAAC,oBAAoB,YAAY,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAShG,CAAA;AAEN,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAIhF,CAAA;AAEJ,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAqC,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { Transferable } from '@effect/platform';
2
- import { Schema } from '@effect/schema';
2
+ import { ParseResult, Schema } from '@effect/schema';
3
3
  import { Effect, Hash } from 'effect';
4
- import { objectToString } from '../../misc.js';
5
4
  export * from '@effect/schema/Schema';
6
5
  export * from './debug-diff.js';
6
+ export * from './msgpack.js';
7
7
  // NOTE this is a temporary workaround until Effect schema has a better way to hash schemas
8
8
  // https://github.com/Effect-TS/effect/issues/2719
9
9
  // TODO remove this once the issue is resolved
@@ -16,31 +16,14 @@ export const hash = (schema) => {
16
16
  return Hash.hash(schema.ast.toString());
17
17
  }
18
18
  };
19
- const errorStructSchema = Schema.Struct({
20
- message: Schema.String,
21
- stack: Schema.optional(Schema.String),
22
- });
23
- export class AnyError extends Schema.transform(errorStructSchema, Schema.Any, {
24
- decode: (errorStruct) => {
25
- const { message, stack } = errorStruct;
26
- const previousLimit = Error.stackTraceLimit;
27
- Error.stackTraceLimit = 0;
28
- // eslint-disable-next-line unicorn/error-message
29
- const error = new Error('');
30
- Error.stackTraceLimit = previousLimit;
31
- error.message = message;
32
- error.stack = stack;
33
- return error;
34
- },
35
- encode: (anyError) => ({
36
- message: objectToString(anyError).replace(/^Error: /, ''),
37
- stack: anyError.stack,
38
- }),
39
- }) {
40
- }
41
19
  export const encodeWithTransferables = (schema, options) => (a, overrideOptions) => Effect.gen(function* () {
42
20
  const collector = yield* Transferable.makeCollector;
43
21
  const encoded = yield* Schema.encode(schema, options)(a, overrideOptions).pipe(Effect.provideService(Transferable.Collector, collector));
44
22
  return [encoded, collector.unsafeRead()];
45
23
  });
24
+ export const swap = (schema) => Schema.transformOrFail(Schema.typeSchema(schema), Schema.encodedSchema(schema), {
25
+ decode: ParseResult.encode(schema),
26
+ encode: ParseResult.decode(schema),
27
+ });
28
+ export const Base64FromUint8Array = swap(Schema.Uint8ArrayFromBase64);
46
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAGvC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA;AAE/B,2FAA2F;AAC3F,kDAAkD;AAClD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAA0B,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CACV,qIAAqI,CACtI,CAAA;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IACzC,CAAC;AACH,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CACtC,CAAC,CAAA;AAEF,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,EAAE;IAC5E,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE;QACtB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW,CAAA;QACtC,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAA;QAC3C,KAAK,CAAC,eAAe,GAAG,CAAC,CAAA;QACzB,iDAAiD;QACjD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAA;QAC3B,KAAK,CAAC,eAAe,GAAG,aAAa,CAAA;QACrC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;QACvB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA;QACnB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QACzD,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC;CACH,CAAC;CAAG;AAEL,MAAM,CAAC,MAAM,uBAAuB,GAClC,CAAU,MAA8B,EAAE,OAAkC,EAAE,EAAE,CAChF,CAAC,CAAI,EAAE,eAA0C,EAAqD,EAAE,CACtG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,aAAa,CAAA;IAEnD,MAAM,OAAO,GAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,IAAI,CAC/E,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CACzD,CAAA;IAED,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAoB,CAAC,CAAA;AAC5D,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAGpD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAErC,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAE5B,2FAA2F;AAC3F,kDAAkD;AAClD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAA0B,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CACV,qIAAqI,CACtI,CAAA;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IACzC,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAClC,CAAU,MAA8B,EAAE,OAAkC,EAAE,EAAE,CAChF,CAAC,CAAI,EAAE,eAA0C,EAAqD,EAAE,CACtG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,aAAa,CAAA;IAEnD,MAAM,OAAO,GAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,IAAI,CAC/E,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CACzD,CAAA;IAED,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAoB,CAAC,CAAA;AAC5D,CAAC,CAAC,CAAA;AAEN,MAAM,CAAC,MAAM,IAAI,GAAG,CAAU,MAA8B,EAA0B,EAAE,CACtF,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;IAC9E,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CACnC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,oBAAoB,GAAsC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Schema } from '@effect/schema';
2
+ export declare const MsgPack: <A, I>(schema: Schema.Schema<A, I>) => Schema.transform<Schema.Schema<Uint8Array, Uint8Array, never>, Schema.Schema<A, I, never>>;
3
+ //# sourceMappingURL=msgpack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msgpack.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/msgpack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAGvC,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,+FAIrD,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { Schema } from '@effect/schema';
2
+ import * as msgpack from 'msgpackr';
3
+ export const MsgPack = (schema) => Schema.transform(Schema.Uint8ArrayFromSelf, schema, {
4
+ encode: (decoded) => msgpack.pack(decoded),
5
+ decode: (encodedBytes) => msgpack.unpack(encodedBytes),
6
+ });
7
+ //# sourceMappingURL=msgpack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msgpack.js","sourceRoot":"","sources":["../../../src/effect/Schema/msgpack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAA;AAEnC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAO,MAA2B,EAAE,EAAE,CAC3D,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE;IAClD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IAC1C,MAAM,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;CACvD,CAAC,CAAA"}
@@ -1,8 +1,8 @@
1
1
  import type { ParseResult } from '@effect/schema';
2
- import type { Either, Scope } from 'effect';
3
- import { Effect, Stream } from 'effect';
2
+ import type { Scope } from 'effect';
3
+ import { Effect, Either, Queue, Stream } from 'effect';
4
4
  import * as Schema from './Schema/index.js';
5
- export type BrowserChannel<MsgIn, MsgOut> = {
5
+ export type WebChannel<MsgIn, MsgOut> = {
6
6
  send: (a: MsgOut) => Effect.Effect<void, ParseResult.ParseError>;
7
7
  listen: Stream.Stream<Either.Either<MsgIn, ParseResult.ParseError>>;
8
8
  };
@@ -10,16 +10,21 @@ export declare const broadcastChannel: <MsgIn, MsgOut, MsgInEncoded, MsgOutEncod
10
10
  channelName: string;
11
11
  listenSchema: Schema.Schema<MsgIn, MsgInEncoded>;
12
12
  sendSchema: Schema.Schema<MsgOut, MsgOutEncoded>;
13
- }) => Effect.Effect<BrowserChannel<MsgIn, MsgOut>, never, Scope.Scope>;
13
+ }) => Effect.Effect<WebChannel<MsgIn, MsgOut>, never, Scope.Scope>;
14
14
  export declare const windowChannel: <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({ window, targetOrigin, listenSchema, sendSchema, }: {
15
15
  window: Window;
16
16
  targetOrigin?: string;
17
17
  listenSchema: Schema.Schema<MsgIn, MsgInEncoded>;
18
18
  sendSchema: Schema.Schema<MsgOut, MsgOutEncoded>;
19
- }) => Effect.Effect<BrowserChannel<MsgIn, MsgOut>, never, Scope.Scope>;
19
+ }) => Effect.Effect<WebChannel<MsgIn, MsgOut>, never, Scope.Scope>;
20
20
  export declare const messagePortChannel: <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({ port, listenSchema, sendSchema, }: {
21
21
  port: MessagePort;
22
22
  listenSchema: Schema.Schema<MsgIn, MsgInEncoded>;
23
23
  sendSchema: Schema.Schema<MsgOut, MsgOutEncoded>;
24
- }) => Effect.Effect<BrowserChannel<MsgIn, MsgOut>, never, Scope.Scope>;
25
- //# sourceMappingURL=BrowserChannel.d.ts.map
24
+ }) => Effect.Effect<WebChannel<MsgIn, MsgOut>, never, Scope.Scope>;
25
+ export declare const queueChannelProxy: <MsgIn, MsgOut>() => Effect.Effect<{
26
+ webChannel: WebChannel<MsgIn, MsgOut>;
27
+ sendQueue: Queue.Queue<MsgOut>;
28
+ listenQueue: Queue.Queue<MsgIn>;
29
+ }, never, Scope.Scope>;
30
+ //# sourceMappingURL=WebChannel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebChannel.d.ts","sourceRoot":"","sources":["../../src/effect/WebChannel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEtD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,MAAM,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,IAAI;IACtC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IAChE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;CACpE,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,8CAIxE;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAChD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACjD,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAkBU,CAAA;AAEzE,eAAO,MAAM,aAAa,GAAI,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,uDAKrE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAChD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACjD,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAaT,CAAA;AAEtD,eAAO,MAAM,kBAAkB,GAAI,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,uCAI1E;IACD,IAAI,EAAE,WAAW,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAChD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACjD,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAiBJ,CAAA;AAE3D,eAAO,MAAM,iBAAiB,GAAI,KAAK,EAAE,MAAM,OAAK,MAAM,CAAC,MAAM,CAC/D;IAAE,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;CAAE,EAC1G,KAAK,EACL,KAAK,CAAC,KAAK,CAaT,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Effect, Stream } from 'effect';
1
+ import { Effect, Either, Queue, Stream } from 'effect';
2
2
  import * as Schema from './Schema/index.js';
3
3
  export const broadcastChannel = ({ channelName, listenSchema, sendSchema, }) => Effect.gen(function* () {
4
4
  const channel = new BroadcastChannel(channelName);
@@ -10,7 +10,7 @@ export const broadcastChannel = ({ channelName, listenSchema, sendSchema, }) =>
10
10
  // TODO also listen to `messageerror` in parallel
11
11
  const listen = Stream.fromEventListener(channel, 'message').pipe(Stream.map((_) => Schema.decodeEither(listenSchema)(_.data)));
12
12
  return { send, listen };
13
- }).pipe(Effect.withSpan(`BrowserChannel:broadcastChannel(${channelName})`));
13
+ }).pipe(Effect.withSpan(`WebChannel:broadcastChannel(${channelName})`));
14
14
  export const windowChannel = ({ window, targetOrigin = '*', listenSchema, sendSchema, }) => Effect.gen(function* () {
15
15
  const send = (message) => Effect.gen(function* () {
16
16
  const [messageEncoded, transferables] = yield* Schema.encodeWithTransferables(sendSchema)(message);
@@ -18,7 +18,7 @@ export const windowChannel = ({ window, targetOrigin = '*', listenSchema, sendSc
18
18
  });
19
19
  const listen = Stream.fromEventListener(window, 'message').pipe(Stream.map((_) => Schema.decodeEither(listenSchema)(_.data)));
20
20
  return { send, listen };
21
- }).pipe(Effect.withSpan(`BrowserChannel:windowChannel`));
21
+ }).pipe(Effect.withSpan(`WebChannel:windowChannel`));
22
22
  export const messagePortChannel = ({ port, listenSchema, sendSchema, }) => Effect.gen(function* () {
23
23
  const send = (message) => Effect.gen(function* () {
24
24
  const [messageEncoded, transferables] = yield* Schema.encodeWithTransferables(sendSchema)(message);
@@ -28,5 +28,13 @@ export const messagePortChannel = ({ port, listenSchema, sendSchema, }) => Effec
28
28
  port.start();
29
29
  yield* Effect.addFinalizer(() => Effect.try(() => port.close()).pipe(Effect.ignoreLogged));
30
30
  return { send, listen };
31
- }).pipe(Effect.withSpan(`BrowserChannel:messagePortChannel`));
32
- //# sourceMappingURL=BrowserChannel.js.map
31
+ }).pipe(Effect.withSpan(`WebChannel:messagePortChannel`));
32
+ export const queueChannelProxy = () => Effect.gen(function* () {
33
+ const sendQueue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
34
+ const listenQueue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
35
+ const send = (message) => Queue.offer(sendQueue, message);
36
+ const listen = Stream.fromQueue(listenQueue).pipe(Stream.map(Either.right));
37
+ const webChannel = { send, listen };
38
+ return { webChannel, sendQueue, listenQueue };
39
+ });
40
+ //# sourceMappingURL=WebChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebChannel.js","sourceRoot":"","sources":["../../src/effect/WebChannel.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ export { Scope, Ref, SynchronizedRef, Queue, Fiber, FiberId, FiberSet, FiberMap,
3
3
  export { dual } from 'effect/Function';
4
4
  export * as Stream from './Stream.js';
5
5
  export * as SubscriptionRef from './SubscriptionRef.js';
6
- export * as BrowserChannel from './BrowserChannel.js';
6
+ export * as WebChannel from './WebChannel.js';
7
7
  export { TreeFormatter, AST as SchemaAST, Pretty as SchemaPretty, Equivalence as SchemaEquivalence, Serializable, JSONSchema, ParseResult, } from '@effect/schema';
8
8
  export * as Schema from './Schema/index.js';
9
9
  export * as OtelTracer from '@effect/opentelemetry/Tracer';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,EACL,GAAG,EACH,eAAe,EACf,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,cAAc,EACd,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,IAAI,aAAa,EACtB,MAAM,IAAI,cAAc,EACxB,SAAS,EACT,OAAO,EACP,OAAO,EACP,cAAc,EACd,MAAM,EACN,QAAQ,EACR,MAAM,EACN,KAAK,EACL,GAAG,EACH,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,KAAK,GACN,MAAM,QAAQ,CAAA;AAEf,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD,OAAO,EACL,aAAa,EACb,GAAG,IAAI,SAAS,EAChB,MAAM,IAAI,YAAY,EACtB,WAAW,IAAI,iBAAiB,EAChC,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACpH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE7E,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,EACL,GAAG,EACH,eAAe,EACf,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,cAAc,EACd,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,IAAI,aAAa,EACtB,MAAM,IAAI,cAAc,EACxB,SAAS,EACT,OAAO,EACP,OAAO,EACP,cAAc,EACd,MAAM,EACN,QAAQ,EACR,MAAM,EACN,KAAK,EACL,GAAG,EACH,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,KAAK,GACN,MAAM,QAAQ,CAAA;AAEf,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,OAAO,EACL,aAAa,EACb,GAAG,IAAI,SAAS,EAChB,MAAM,IAAI,YAAY,EACtB,WAAW,IAAI,iBAAiB,EAChC,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACpH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE7E,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
@@ -3,7 +3,7 @@ export { Scope, Ref, SynchronizedRef, Queue, Fiber, FiberId, FiberSet, FiberMap,
3
3
  export { dual } from 'effect/Function';
4
4
  export * as Stream from './Stream.js';
5
5
  export * as SubscriptionRef from './SubscriptionRef.js';
6
- export * as BrowserChannel from './BrowserChannel.js';
6
+ export * as WebChannel from './WebChannel.js';
7
7
  export { TreeFormatter, AST as SchemaAST, Pretty as SchemaPretty, Equivalence as SchemaEquivalence, Serializable, JSONSchema, ParseResult, } from '@effect/schema';
8
8
  export * as Schema from './Schema/index.js';
9
9
  export * as OtelTracer from '@effect/opentelemetry/Tracer';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,EACL,GAAG,EACH,eAAe,EACf,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,cAAc,EACd,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,IAAI,aAAa,EACtB,MAAM,IAAI,cAAc,EACxB,SAAS,EACT,OAAO,EACP,OAAO,EACP,cAAc,EACd,MAAM,EACN,QAAQ,EACR,MAAM,EACN,KAAK,EACL,GAAG,EACH,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,KAAK,GACN,MAAM,QAAQ,CAAA;AAEf,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD,OAAO,EACL,aAAa,EACb,GAAG,IAAI,SAAS,EAChB,MAAM,IAAI,YAAY,EACtB,WAAW,IAAI,iBAAiB,EAChC,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACpH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE7E,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AAErB,OAAO,EACL,KAAK,EACL,GAAG,EACH,eAAe,EACf,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAQ,EACR,SAAS,EACT,cAAc,EACd,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,IAAI,aAAa,EACtB,MAAM,IAAI,cAAc,EACxB,SAAS,EACT,OAAO,EACP,OAAO,EACP,cAAc,EACd,MAAM,EACN,QAAQ,EACR,MAAM,EACN,KAAK,EACL,GAAG,EACH,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,KAAK,GACN,MAAM,QAAQ,CAAA;AAEf,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,OAAO,EACL,aAAa,EACb,GAAG,IAAI,SAAS,EAChB,MAAM,IAAI,YAAY,EACtB,WAAW,IAAI,iBAAiB,EAChC,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACpH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE7E,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/utils",
3
- "version": "0.0.55",
3
+ "version": "0.0.56-dev.1",
4
4
  "sideEffects": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -33,9 +33,10 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "date-fns": "^3.6.0",
36
+ "msgpackr": "^1.11.0",
36
37
  "otel-websocket-exporter": "^0.0.29",
37
38
  "pretty-bytes": "^6.1.1",
38
- "effect-db-schema": "0.0.55"
39
+ "effect-db-schema": "0.0.56-dev.1"
39
40
  },
40
41
  "peerDependencies": {
41
42
  "@effect/experimental": "^0.21.2",
package/src/base64.ts CHANGED
@@ -69,6 +69,8 @@ const base64abc = [
69
69
  '/',
70
70
  ]
71
71
 
72
+ const textEncoder = new TextEncoder()
73
+
72
74
  /**
73
75
  * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
74
76
  * Encodes a given Uint8Array, ArrayBuffer or string into RFC4648 base64 representation
@@ -76,7 +78,7 @@ const base64abc = [
76
78
  */
77
79
  export const encode = (data: ArrayBuffer | string): string => {
78
80
  const uint8 =
79
- typeof data === 'string' ? new TextEncoder().encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data)
81
+ typeof data === 'string' ? textEncoder.encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data)
80
82
  let result = '',
81
83
  i
82
84
  const l = uint8.length
@@ -116,3 +118,6 @@ export const decode = (b64: string): Uint8Array => {
116
118
  }
117
119
  return bytes
118
120
  }
121
+
122
+ const textDecoder = new TextDecoder()
123
+ export const decodeToString = (b64: string): string => textDecoder.decode(decode(b64))
@@ -1,13 +1,12 @@
1
1
  import { Transferable } from '@effect/platform'
2
- import { Schema } from '@effect/schema'
2
+ import { ParseResult, Schema } from '@effect/schema'
3
3
  import type { ParseOptions } from '@effect/schema/AST'
4
4
  import type { ParseError } from '@effect/schema/ParseResult'
5
5
  import { Effect, Hash } from 'effect'
6
6
 
7
- import { objectToString } from '../../misc.js'
8
-
9
7
  export * from '@effect/schema/Schema'
10
8
  export * from './debug-diff.js'
9
+ export * from './msgpack.js'
11
10
 
12
11
  // NOTE this is a temporary workaround until Effect schema has a better way to hash schemas
13
12
  // https://github.com/Effect-TS/effect/issues/2719
@@ -23,29 +22,6 @@ export const hash = (schema: Schema.Schema<any>) => {
23
22
  }
24
23
  }
25
24
 
26
- const errorStructSchema = Schema.Struct({
27
- message: Schema.String,
28
- stack: Schema.optional(Schema.String),
29
- })
30
-
31
- export class AnyError extends Schema.transform(errorStructSchema, Schema.Any, {
32
- decode: (errorStruct) => {
33
- const { message, stack } = errorStruct
34
- const previousLimit = Error.stackTraceLimit
35
- Error.stackTraceLimit = 0
36
- // eslint-disable-next-line unicorn/error-message
37
- const error = new Error('')
38
- Error.stackTraceLimit = previousLimit
39
- error.message = message
40
- error.stack = stack
41
- return error
42
- },
43
- encode: (anyError) => ({
44
- message: objectToString(anyError).replace(/^Error: /, ''),
45
- stack: anyError.stack,
46
- }),
47
- }) {}
48
-
49
25
  export const encodeWithTransferables =
50
26
  <A, I, R>(schema: Schema.Schema<A, I, R>, options?: ParseOptions | undefined) =>
51
27
  (a: A, overrideOptions?: ParseOptions | undefined): Effect.Effect<[I, Transferable[]], ParseError, R> =>
@@ -58,3 +34,11 @@ export const encodeWithTransferables =
58
34
 
59
35
  return [encoded, collector.unsafeRead() as Transferable[]]
60
36
  })
37
+
38
+ export const swap = <A, I, R>(schema: Schema.Schema<A, I, R>): Schema.Schema<I, A, R> =>
39
+ Schema.transformOrFail(Schema.typeSchema(schema), Schema.encodedSchema(schema), {
40
+ decode: ParseResult.encode(schema),
41
+ encode: ParseResult.decode(schema),
42
+ })
43
+
44
+ export const Base64FromUint8Array: Schema.Schema<string, Uint8Array> = swap(Schema.Uint8ArrayFromBase64)
@@ -0,0 +1,8 @@
1
+ import { Schema } from '@effect/schema'
2
+ import * as msgpack from 'msgpackr'
3
+
4
+ export const MsgPack = <A, I>(schema: Schema.Schema<A, I>) =>
5
+ Schema.transform(Schema.Uint8ArrayFromSelf, schema, {
6
+ encode: (decoded) => msgpack.pack(decoded),
7
+ decode: (encodedBytes) => msgpack.unpack(encodedBytes),
8
+ })
@@ -1,10 +1,10 @@
1
1
  import type { ParseResult } from '@effect/schema'
2
- import type { Either, Scope } from 'effect'
3
- import { Effect, Stream } from 'effect'
2
+ import type { Scope } from 'effect'
3
+ import { Effect, Either, Queue, Stream } from 'effect'
4
4
 
5
5
  import * as Schema from './Schema/index.js'
6
6
 
7
- export type BrowserChannel<MsgIn, MsgOut> = {
7
+ export type WebChannel<MsgIn, MsgOut> = {
8
8
  send: (a: MsgOut) => Effect.Effect<void, ParseResult.ParseError>
9
9
  listen: Stream.Stream<Either.Either<MsgIn, ParseResult.ParseError>>
10
10
  }
@@ -17,7 +17,7 @@ export const broadcastChannel = <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({
17
17
  channelName: string
18
18
  listenSchema: Schema.Schema<MsgIn, MsgInEncoded>
19
19
  sendSchema: Schema.Schema<MsgOut, MsgOutEncoded>
20
- }): Effect.Effect<BrowserChannel<MsgIn, MsgOut>, never, Scope.Scope> =>
20
+ }): Effect.Effect<WebChannel<MsgIn, MsgOut>, never, Scope.Scope> =>
21
21
  Effect.gen(function* () {
22
22
  const channel = new BroadcastChannel(channelName)
23
23
 
@@ -35,7 +35,7 @@ export const broadcastChannel = <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({
35
35
  )
36
36
 
37
37
  return { send, listen }
38
- }).pipe(Effect.withSpan(`BrowserChannel:broadcastChannel(${channelName})`))
38
+ }).pipe(Effect.withSpan(`WebChannel:broadcastChannel(${channelName})`))
39
39
 
40
40
  export const windowChannel = <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({
41
41
  window,
@@ -47,7 +47,7 @@ export const windowChannel = <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({
47
47
  targetOrigin?: string
48
48
  listenSchema: Schema.Schema<MsgIn, MsgInEncoded>
49
49
  sendSchema: Schema.Schema<MsgOut, MsgOutEncoded>
50
- }): Effect.Effect<BrowserChannel<MsgIn, MsgOut>, never, Scope.Scope> =>
50
+ }): Effect.Effect<WebChannel<MsgIn, MsgOut>, never, Scope.Scope> =>
51
51
  Effect.gen(function* () {
52
52
  const send = (message: MsgOut) =>
53
53
  Effect.gen(function* () {
@@ -60,7 +60,7 @@ export const windowChannel = <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({
60
60
  )
61
61
 
62
62
  return { send, listen }
63
- }).pipe(Effect.withSpan(`BrowserChannel:windowChannel`))
63
+ }).pipe(Effect.withSpan(`WebChannel:windowChannel`))
64
64
 
65
65
  export const messagePortChannel = <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({
66
66
  port,
@@ -70,7 +70,7 @@ export const messagePortChannel = <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({
70
70
  port: MessagePort
71
71
  listenSchema: Schema.Schema<MsgIn, MsgInEncoded>
72
72
  sendSchema: Schema.Schema<MsgOut, MsgOutEncoded>
73
- }): Effect.Effect<BrowserChannel<MsgIn, MsgOut>, never, Scope.Scope> =>
73
+ }): Effect.Effect<WebChannel<MsgIn, MsgOut>, never, Scope.Scope> =>
74
74
  Effect.gen(function* () {
75
75
  const send = (message: MsgOut) =>
76
76
  Effect.gen(function* () {
@@ -87,4 +87,22 @@ export const messagePortChannel = <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({
87
87
  yield* Effect.addFinalizer(() => Effect.try(() => port.close()).pipe(Effect.ignoreLogged))
88
88
 
89
89
  return { send, listen }
90
- }).pipe(Effect.withSpan(`BrowserChannel:messagePortChannel`))
90
+ }).pipe(Effect.withSpan(`WebChannel:messagePortChannel`))
91
+
92
+ export const queueChannelProxy = <MsgIn, MsgOut>(): Effect.Effect<
93
+ { webChannel: WebChannel<MsgIn, MsgOut>; sendQueue: Queue.Queue<MsgOut>; listenQueue: Queue.Queue<MsgIn> },
94
+ never,
95
+ Scope.Scope
96
+ > =>
97
+ Effect.gen(function* () {
98
+ const sendQueue = yield* Queue.unbounded<MsgOut>().pipe(Effect.acquireRelease(Queue.shutdown))
99
+ const listenQueue = yield* Queue.unbounded<MsgIn>().pipe(Effect.acquireRelease(Queue.shutdown))
100
+
101
+ const send = (message: MsgOut) => Queue.offer(sendQueue, message)
102
+
103
+ const listen = Stream.fromQueue(listenQueue).pipe(Stream.map(Either.right))
104
+
105
+ const webChannel = { send, listen }
106
+
107
+ return { webChannel, sendQueue, listenQueue }
108
+ })
@@ -56,7 +56,7 @@ export * as Stream from './Stream.js'
56
56
 
57
57
  export * as SubscriptionRef from './SubscriptionRef.js'
58
58
 
59
- export * as BrowserChannel from './BrowserChannel.js'
59
+ export * as WebChannel from './WebChannel.js'
60
60
 
61
61
  export {
62
62
  TreeFormatter,
@@ -1 +0,0 @@
1
- {"version":3,"file":"BrowserChannel.d.ts","sourceRoot":"","sources":["../../src/effect/BrowserChannel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,MAAM,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,IAAI;IAC1C,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IAChE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;CACpE,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,8CAIxE;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAChD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACjD,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAkBU,CAAA;AAE7E,eAAO,MAAM,aAAa,GAAI,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,uDAKrE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAChD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACjD,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAaT,CAAA;AAE1D,eAAO,MAAM,kBAAkB,GAAI,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,uCAI1E;IACD,IAAI,EAAE,WAAW,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAChD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACjD,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAiBJ,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"BrowserChannel.js","sourceRoot":"","sources":["../../src/effect/BrowserChannel.ts"],"names":[],"mappings":"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"}