@trpc/client 10.0.0-alpha.10 → 10.0.0-alpha.11

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/index.js CHANGED
@@ -8,7 +8,6 @@ var links_httpBatchLink = require('./links/httpBatchLink.js');
8
8
  var createChain = require('./createChain-3b458753.js');
9
9
  var TRPCClientError = require('./TRPCClientError-ec6bd2ca.js');
10
10
  var rx = require('./rx.js');
11
- var operators = require('rxjs/operators');
12
11
  require('rxjs');
13
12
  require('./httpUtils-1f9e4e3c.js');
14
13
  require('@babel/runtime/helpers/defineProperty');
@@ -137,7 +136,7 @@ var TRPCClient = /*#__PURE__*/function () {
137
136
  context: context
138
137
  }
139
138
  });
140
- return chain$.pipe(operators.share());
139
+ return chain$.pipe(rx.share());
141
140
  }
142
141
  }, {
143
142
  key: "requestAsPromise",
package/dist/index.mjs CHANGED
@@ -4,8 +4,7 @@ import { httpBatchLink } from './links/httpBatchLink.mjs';
4
4
  import { c as createChain } from './createChain-b7cb1f5a.mjs';
5
5
  import { T as TRPCClientError } from './TRPCClientError-17b117e1.mjs';
6
6
  export { T as TRPCClientError } from './TRPCClientError-17b117e1.mjs';
7
- import { observableToPromise } from './rx.mjs';
8
- import { share } from 'rxjs/operators';
7
+ import { share, observableToPromise } from './rx.mjs';
9
8
  import 'rxjs';
10
9
  import './httpUtils-c09d7b79.mjs';
11
10
  import '@babel/runtime/helpers/defineProperty';
@@ -1 +1 @@
1
- {"version":3,"file":"TRPCClient.d.ts","sourceRoot":"","sources":["../../src/internals/TRPCClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TRPCClient.d.ts","sourceRoot":"","sources":["../../src/internals/TRPCClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dedupeLink.d.ts","sourceRoot":"","sources":["../../src/links/dedupeLink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAmB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEpD,wBAAgB,UAAU,CACxB,OAAO,SAAS,SAAS,GAAG,SAAS,KAClC,QAAQ,CAAC,OAAO,CAAC,CA8CrB"}
1
+ {"version":3,"file":"dedupeLink.d.ts","sourceRoot":"","sources":["../../src/links/dedupeLink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAmB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEpD,wBAAgB,UAAU,CACxB,OAAO,SAAS,SAAS,GAAG,SAAS,KAClC,QAAQ,CAAC,OAAO,CAAC,CA4CrB"}
package/dist/rx.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Observable } from 'rxjs';
1
+ import { MonoTypeOperatorFunction, Observable } from 'rxjs';
2
2
  export declare type inferObservableValue<TObservable extends Observable<any>> = TObservable extends Observable<infer TValue> ? TValue : never;
3
3
  export declare class ObservableAbortError extends Error {
4
4
  constructor(message: string);
@@ -8,4 +8,5 @@ export declare function observableToPromise<TValue>(observable: Observable<TValu
8
8
  promise: Promise<TValue>;
9
9
  abort: () => void;
10
10
  };
11
+ export declare function share<T>(): MonoTypeOperatorFunction<T>;
11
12
  //# sourceMappingURL=rx.d.ts.map
package/dist/rx.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"rx.d.ts","sourceRoot":"","sources":["../src/rx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,oBAAY,oBAAoB,CAAC,WAAW,SAAS,UAAU,CAAC,GAAG,CAAC,IAClE,WAAW,SAAS,UAAU,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhE,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAK5B;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;;iBACvD,IAAI;EAkCtB"}
1
+ {"version":3,"file":"rx.d.ts","sourceRoot":"","sources":["../src/rx.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,UAAU,EAGX,MAAM,MAAM,CAAC;AAEd,oBAAY,oBAAoB,CAAC,WAAW,SAAS,UAAU,CAAC,GAAG,CAAC,IAClE,WAAW,SAAS,UAAU,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhE,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAK5B;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;;iBACvD,IAAI;EAkCtB;AAED,wBAAgB,KAAK,CAAC,CAAC,KAAK,wBAAwB,CAAC,CAAC,CAAC,CAyBtD"}
package/dist/rx.js CHANGED
@@ -9,6 +9,7 @@ var _inherits = require('@babel/runtime/helpers/inherits');
9
9
  var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');
10
10
  var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
11
11
  var _wrapNativeSuper = require('@babel/runtime/helpers/wrapNativeSuper');
12
+ var rxjs = require('rxjs');
12
13
 
13
14
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
15
 
@@ -23,7 +24,6 @@ var _wrapNativeSuper__default = /*#__PURE__*/_interopDefaultLegacy(_wrapNativeSu
23
24
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
24
25
 
25
26
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
26
-
27
27
  var ObservableAbortError = /*#__PURE__*/function (_Error) {
28
28
  _inherits__default["default"](ObservableAbortError, _Error);
29
29
 
@@ -83,6 +83,48 @@ function observableToPromise(observable) {
83
83
  abort: abort
84
84
  };
85
85
  }
86
+ function share() {
87
+ var subscribers = new Set();
88
+ var connection = null;
89
+ return function (source) {
90
+ return new rxjs.Observable(function (subscriber) {
91
+ subscribers.add(subscriber);
92
+ subscriber.add(function () {
93
+ subscribers.delete(subscriber);
94
+
95
+ if (subscribers.size === 0) {
96
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
97
+ connection.unsubscribe();
98
+ connection = null;
99
+ }
100
+ });
101
+
102
+ if (!connection) {
103
+ connection = source.subscribe({
104
+ next: function next(value) {
105
+ return subscribers.forEach(function (s) {
106
+ return s.next(value);
107
+ });
108
+ },
109
+ error: function error(_error) {
110
+ return subscribers.forEach(function (s) {
111
+ return s.error(_error);
112
+ });
113
+ },
114
+ complete: function complete() {
115
+ return subscribers.forEach(function (s) {
116
+ return s.complete();
117
+ });
118
+ }
119
+ });
120
+ connection.add(function () {
121
+ return subscribers.clear();
122
+ });
123
+ }
124
+ });
125
+ };
126
+ }
86
127
 
87
128
  exports.ObservableAbortError = ObservableAbortError;
88
129
  exports.observableToPromise = observableToPromise;
130
+ exports.share = share;
package/dist/rx.mjs CHANGED
@@ -5,11 +5,11 @@ import _inherits from '@babel/runtime/helpers/inherits';
5
5
  import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
6
6
  import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
7
7
  import _wrapNativeSuper from '@babel/runtime/helpers/wrapNativeSuper';
8
+ import { Observable } from 'rxjs';
8
9
 
9
10
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
10
11
 
11
12
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
12
-
13
13
  var ObservableAbortError = /*#__PURE__*/function (_Error) {
14
14
  _inherits(ObservableAbortError, _Error);
15
15
 
@@ -69,5 +69,46 @@ function observableToPromise(observable) {
69
69
  abort: abort
70
70
  };
71
71
  }
72
+ function share() {
73
+ var subscribers = new Set();
74
+ var connection = null;
75
+ return function (source) {
76
+ return new Observable(function (subscriber) {
77
+ subscribers.add(subscriber);
78
+ subscriber.add(function () {
79
+ subscribers.delete(subscriber);
80
+
81
+ if (subscribers.size === 0) {
82
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
83
+ connection.unsubscribe();
84
+ connection = null;
85
+ }
86
+ });
87
+
88
+ if (!connection) {
89
+ connection = source.subscribe({
90
+ next: function next(value) {
91
+ return subscribers.forEach(function (s) {
92
+ return s.next(value);
93
+ });
94
+ },
95
+ error: function error(_error) {
96
+ return subscribers.forEach(function (s) {
97
+ return s.error(_error);
98
+ });
99
+ },
100
+ complete: function complete() {
101
+ return subscribers.forEach(function (s) {
102
+ return s.complete();
103
+ });
104
+ }
105
+ });
106
+ connection.add(function () {
107
+ return subscribers.clear();
108
+ });
109
+ }
110
+ });
111
+ };
112
+ }
72
113
 
73
- export { ObservableAbortError, observableToPromise };
114
+ export { ObservableAbortError, observableToPromise, share };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trpc/client",
3
- "version": "10.0.0-alpha.10",
3
+ "version": "10.0.0-alpha.11",
4
4
  "description": "tRPC Client lib",
5
5
  "author": "KATT",
6
6
  "license": "MIT",
@@ -66,16 +66,16 @@
66
66
  },
67
67
  "dependencies": {
68
68
  "@babel/runtime": "^7.9.0",
69
- "rxjs": "^7.0.0"
69
+ "rxjs": "^7.5.4"
70
70
  },
71
71
  "peerDependencies": {
72
- "@trpc/server": "10.0.0-alpha.10"
72
+ "@trpc/server": "10.0.0-alpha.11"
73
73
  },
74
74
  "devDependencies": {
75
- "@trpc/server": "10.0.0-alpha.10"
75
+ "@trpc/server": "10.0.0-alpha.11"
76
76
  },
77
77
  "publishConfig": {
78
78
  "access": "public"
79
79
  },
80
- "gitHead": "a1de7cd99bc36e26da285ed1cfdf8cb24dd5fd0b"
80
+ "gitHead": "a330502ab8d9aeb1f8f01d9a0711aab849d3a938"
81
81
  }
@@ -18,8 +18,7 @@ import {
18
18
  OperationLink,
19
19
  TRPCLink,
20
20
  } from '../links/types';
21
- import { inferObservableValue, observableToPromise } from '../rx';
22
- import { share } from 'rxjs/operators';
21
+ import { inferObservableValue, observableToPromise, share } from '../rx';
23
22
  import { Observer, Subscription } from 'rxjs';
24
23
  import { TRPCClientError } from '../TRPCClientError';
25
24
  import { getAbortController } from './fetchHelpers';
@@ -1,6 +1,6 @@
1
1
  import { AnyRouter } from '@trpc/server';
2
2
  import { Observable } from 'rxjs';
3
- import { share } from 'rxjs';
3
+ import { share } from '../rx';
4
4
  import { OperationResult, TRPCLink } from './types';
5
5
 
6
6
  export function dedupeLink<
@@ -33,11 +33,9 @@ export function dedupeLink<
33
33
  observer.next(v);
34
34
  },
35
35
  error(e) {
36
- reset();
37
36
  observer.error(e);
38
37
  },
39
38
  complete() {
40
- reset();
41
39
  observer.complete();
42
40
  },
43
41
  });
package/src/rx.ts CHANGED
@@ -1,4 +1,9 @@
1
- import { Observable } from 'rxjs';
1
+ import {
2
+ MonoTypeOperatorFunction,
3
+ Observable,
4
+ Subscriber,
5
+ Subscription,
6
+ } from 'rxjs';
2
7
 
3
8
  export type inferObservableValue<TObservable extends Observable<any>> =
4
9
  TObservable extends Observable<infer TValue> ? TValue : never;
@@ -48,3 +53,30 @@ export function observableToPromise<TValue>(observable: Observable<TValue>) {
48
53
  abort: abort!,
49
54
  };
50
55
  }
56
+
57
+ export function share<T>(): MonoTypeOperatorFunction<T> {
58
+ const subscribers = new Set<Subscriber<T>>();
59
+ let connection: Subscription | null = null;
60
+
61
+ return (source) =>
62
+ new Observable((subscriber) => {
63
+ subscribers.add(subscriber);
64
+ subscriber.add(() => {
65
+ subscribers.delete(subscriber);
66
+ if (subscribers.size === 0) {
67
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
68
+ connection!.unsubscribe();
69
+ connection = null;
70
+ }
71
+ });
72
+
73
+ if (!connection) {
74
+ connection = source.subscribe({
75
+ next: (value) => subscribers.forEach((s) => s.next(value)),
76
+ error: (error) => subscribers.forEach((s) => s.error(error)),
77
+ complete: () => subscribers.forEach((s) => s.complete()),
78
+ });
79
+ connection.add(() => subscribers.clear());
80
+ }
81
+ });
82
+ }