@cyia/chrome-trpc 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/index.js +210 -0
- package/client/index.js.map +7 -0
- package/client/index.mjs +185 -0
- package/client/index.mjs.map +7 -0
- package/package.json +54 -0
- package/readme.md +192 -0
- package/readme.zh-hans.md +192 -0
- package/server/index.js +352 -0
- package/server/index.js.map +7 -0
- package/server/index.mjs +338 -0
- package/server/index.mjs.map +7 -0
package/client/index.js
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// packages/trpc/client/index.ts
|
|
21
|
+
var client_exports = {};
|
|
22
|
+
__export(client_exports, {
|
|
23
|
+
chromeLink: () => chromeLink
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(client_exports);
|
|
26
|
+
|
|
27
|
+
// packages/trpc/client/chromeLink.ts
|
|
28
|
+
var import_client = require("@trpc/client");
|
|
29
|
+
var import_observable = require("@trpc/server/observable");
|
|
30
|
+
var import_unstable_internals = require("@trpc/client/unstable-internals");
|
|
31
|
+
var import_unstable_core_do_not_import = require("@trpc/server/unstable-core-do-not-import");
|
|
32
|
+
|
|
33
|
+
// packages/trpc/util/json.ts
|
|
34
|
+
var import_superjson = require("superjson");
|
|
35
|
+
var import_snappyjs = require("snappyjs");
|
|
36
|
+
var import_bowser = require("bowser");
|
|
37
|
+
var DefaultSuperJSON = class {
|
|
38
|
+
superJson;
|
|
39
|
+
constructor() {
|
|
40
|
+
this.superJson = new import_superjson.SuperJSON();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
var CompressSuperJSON = class {
|
|
44
|
+
superJson;
|
|
45
|
+
constructor() {
|
|
46
|
+
this.superJson = new import_superjson.SuperJSON();
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var defaultSuperJSON = new DefaultSuperJSON();
|
|
50
|
+
var compressSuperJSON = new CompressSuperJSON();
|
|
51
|
+
function uint8ArrayToBase64(bytes) {
|
|
52
|
+
return btoa(new TextDecoder("iso-8859-1").decode(bytes));
|
|
53
|
+
}
|
|
54
|
+
function base64ToUint8Array(base64) {
|
|
55
|
+
return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
|
|
56
|
+
}
|
|
57
|
+
function jsonToUint8Array(obj) {
|
|
58
|
+
return new TextEncoder().encode(JSON.stringify(obj));
|
|
59
|
+
}
|
|
60
|
+
function uint8ArrayToJson(data) {
|
|
61
|
+
return JSON.parse(new TextDecoder().decode(data));
|
|
62
|
+
}
|
|
63
|
+
function initJsonConvert() {
|
|
64
|
+
const useStructuredClone = chrome.runtime.getManifest()["message_serialization"] === "structured_clone" && (0, import_bowser.getParser)(navigator.userAgent, navigator.userAgentData).satisfies({
|
|
65
|
+
chrome: ">=148.0.0.0"
|
|
66
|
+
});
|
|
67
|
+
const isApplicable = (v) => v instanceof Uint8Array;
|
|
68
|
+
const defaultConfig = {
|
|
69
|
+
serialize: useStructuredClone ? (v) => v : (v) => uint8ArrayToBase64(v),
|
|
70
|
+
deserialize: useStructuredClone ? (v) => v : (v) => base64ToUint8Array(v),
|
|
71
|
+
isApplicable
|
|
72
|
+
};
|
|
73
|
+
const compressConfig = {
|
|
74
|
+
serialize: useStructuredClone ? (v) => (0, import_snappyjs.compress)(v) : (v) => uint8ArrayToBase64((0, import_snappyjs.compress)(v)),
|
|
75
|
+
deserialize: useStructuredClone ? (v) => (0, import_snappyjs.uncompress)(v) : (v) => (0, import_snappyjs.uncompress)(base64ToUint8Array(v)),
|
|
76
|
+
isApplicable
|
|
77
|
+
};
|
|
78
|
+
defaultSuperJSON.superJson.registerCustom(
|
|
79
|
+
defaultConfig,
|
|
80
|
+
"0" /* unit8array */
|
|
81
|
+
);
|
|
82
|
+
compressSuperJSON.superJson.registerCustom(
|
|
83
|
+
compressConfig,
|
|
84
|
+
"0" /* unit8array */
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
function serialize(object, compress2) {
|
|
88
|
+
if (!compress2) {
|
|
89
|
+
return defaultSuperJSON.superJson.serialize(object);
|
|
90
|
+
}
|
|
91
|
+
const result = compressSuperJSON.superJson.serialize(object);
|
|
92
|
+
result.__compress = true;
|
|
93
|
+
if (result.meta?.values) {
|
|
94
|
+
if (Array.isArray(result.meta?.values)) {
|
|
95
|
+
if (result.meta.values[0][1] === "0" /* unit8array */) {
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
} else {
|
|
99
|
+
const list = Object.values(result.meta.values);
|
|
100
|
+
if (list.some((item) => Array.isArray(item[0]))) {
|
|
101
|
+
return result;
|
|
102
|
+
} else {
|
|
103
|
+
return uint8ArrayToBase64(jsonToUint8Array(result));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
function deserialize(payload) {
|
|
110
|
+
if (typeof payload === "string") {
|
|
111
|
+
payload = uint8ArrayToJson(base64ToUint8Array(payload));
|
|
112
|
+
}
|
|
113
|
+
return payload.__compress ? compressSuperJSON.superJson.deserialize(payload, { inPlace: true }) : defaultSuperJSON.superJson.deserialize(payload, { inPlace: true });
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// packages/trpc/client/chromeLink.ts
|
|
117
|
+
var ChromeClient = class {
|
|
118
|
+
#pendingRequests = /* @__PURE__ */ new Map();
|
|
119
|
+
port;
|
|
120
|
+
constructor(port) {
|
|
121
|
+
this.port = port;
|
|
122
|
+
port.onMessage.addListener((message) => {
|
|
123
|
+
if (message.result?.data) {
|
|
124
|
+
message.result.data = deserialize(message.result.data);
|
|
125
|
+
}
|
|
126
|
+
this.#handleResponse(message);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
#handleResponse(response) {
|
|
130
|
+
const request = response.id && this.#pendingRequests.get(response.id);
|
|
131
|
+
if (!request) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
request.callbacks.next(response);
|
|
135
|
+
if ("result" in response && response.result.type === "stopped") {
|
|
136
|
+
request.callbacks.complete();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
index = 0;
|
|
140
|
+
request(op, callbacks) {
|
|
141
|
+
const { type } = op;
|
|
142
|
+
const id = `${this.index++}`;
|
|
143
|
+
this.#pendingRequests.set(id, {
|
|
144
|
+
type,
|
|
145
|
+
callbacks,
|
|
146
|
+
op
|
|
147
|
+
});
|
|
148
|
+
const message = {
|
|
149
|
+
method: "request",
|
|
150
|
+
operation: {
|
|
151
|
+
...op,
|
|
152
|
+
input: serialize(op.input, !!op.context["compress"])
|
|
153
|
+
},
|
|
154
|
+
id
|
|
155
|
+
};
|
|
156
|
+
this.port.postMessage(message);
|
|
157
|
+
return () => {
|
|
158
|
+
const callbacks2 = this.#pendingRequests.get(id)?.callbacks;
|
|
159
|
+
this.#pendingRequests.delete(id);
|
|
160
|
+
callbacks2?.complete();
|
|
161
|
+
if (type === "subscription") {
|
|
162
|
+
this.port.postMessage({
|
|
163
|
+
id,
|
|
164
|
+
operation: {},
|
|
165
|
+
method: "subscription.stop"
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
function chromeLink(opts) {
|
|
172
|
+
initJsonConvert();
|
|
173
|
+
const port = opts.port;
|
|
174
|
+
return () => {
|
|
175
|
+
const client = new ChromeClient(port);
|
|
176
|
+
const transformer = (0, import_unstable_internals.getTransformer)(opts?.transformer);
|
|
177
|
+
return ({ op }) => (0, import_observable.observable)((observer) => {
|
|
178
|
+
op.input = transformer.input.serialize(op.input);
|
|
179
|
+
const unsubscribe = client.request(op, {
|
|
180
|
+
error(err) {
|
|
181
|
+
observer.error(err);
|
|
182
|
+
unsubscribe();
|
|
183
|
+
},
|
|
184
|
+
complete() {
|
|
185
|
+
observer.complete();
|
|
186
|
+
},
|
|
187
|
+
next(response) {
|
|
188
|
+
const transformed = (0, import_unstable_core_do_not_import.transformResult)(response, transformer.output);
|
|
189
|
+
if (!transformed.ok) {
|
|
190
|
+
observer.error(import_client.TRPCClientError.from(transformed.error));
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
observer.next({ result: transformed.result });
|
|
194
|
+
if (op.type !== "subscription") {
|
|
195
|
+
unsubscribe();
|
|
196
|
+
observer.complete();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
return () => {
|
|
201
|
+
unsubscribe();
|
|
202
|
+
};
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
207
|
+
0 && (module.exports = {
|
|
208
|
+
chromeLink
|
|
209
|
+
});
|
|
210
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/trpc/client/index.ts", "../../../packages/trpc/client/chromeLink.ts", "../../../packages/trpc/util/json.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './chromeLink';\n", "import { Operation, TRPCClientError, TRPCLink } from '@trpc/client';\nimport type {\n AnyRouter,\n AnyTRPCRouter,\n inferRouterContext,\n inferTRPCClientTypes,\n ProcedureType,\n} from '@trpc/server';\nimport type { TRPCResponseMessage } from '@trpc/server/rpc';\nimport { observable, Observer } from '@trpc/server/observable';\nimport {\n getTransformer,\n TransformerOptions,\n} from '@trpc/client/unstable-internals';\nimport { transformResult } from '@trpc/server/unstable-core-do-not-import';\nimport { deserialize, initJsonConvert, serialize } from '../util/json';\n\ntype ChromeCallbackResult<TRouter extends AnyRouter = AnyRouter> =\n TRPCResponseMessage<unknown, inferRouterContext<TRouter>>;\n\ntype ChromeCallbacks<TRouter extends AnyRouter = AnyRouter> = Observer<\n ChromeCallbackResult<TRouter>,\n TRPCClientError<TRouter>\n>;\n\ntype ChromeRequest = {\n type: ProcedureType;\n callbacks: ChromeCallbacks;\n op: Operation;\n};\n\nclass ChromeClient {\n #pendingRequests = new Map<string | number, ChromeRequest>();\n port;\n constructor(port: chrome.runtime.Port) {\n this.port = port;\n port.onMessage.addListener((message) => {\n if (message.result?.data) {\n message.result.data = deserialize(message.result.data);\n }\n this.#handleResponse(message);\n });\n }\n\n #handleResponse(response: TRPCResponseMessage) {\n const request = response.id && this.#pendingRequests.get(response.id);\n if (!request) {\n return;\n }\n\n request.callbacks.next(response);\n\n if ('result' in response && response.result.type === 'stopped') {\n request.callbacks.complete();\n }\n }\n index = 0;\n request(op: Operation, callbacks: ChromeCallbacks) {\n const { type } = op;\n const id = `${this.index++}`;\n\n this.#pendingRequests.set(id, {\n type,\n callbacks,\n op,\n });\n const message = {\n method: 'request',\n operation: {\n ...op,\n input: serialize(op.input, !!op.context['compress']),\n },\n id: id,\n };\n\n this.port.postMessage(message);\n return () => {\n const callbacks = this.#pendingRequests.get(id)?.callbacks;\n\n this.#pendingRequests.delete(id);\n\n callbacks?.complete();\n\n if (type === 'subscription') {\n this.port.postMessage({\n id,\n operation: {},\n method: 'subscription.stop',\n });\n }\n };\n }\n}\n\nexport type ChromeLinkOptions<TRouter extends AnyTRPCRouter> =\n TransformerOptions<inferTRPCClientTypes<TRouter>>;\nexport function chromeLink<TRouter extends AnyRouter>(\n opts: ChromeLinkOptions<TRouter> & {\n port: chrome.runtime.Port;\n },\n): TRPCLink<TRouter> {\n initJsonConvert();\n const port = opts.port;\n return () => {\n const client = new ChromeClient(port);\n const transformer = getTransformer(opts?.transformer);\n\n return ({ op }) =>\n observable((observer) => {\n op.input = transformer.input.serialize(op.input);\n\n const unsubscribe = client.request(op, {\n error(err) {\n observer.error(err as TRPCClientError<any>);\n unsubscribe();\n },\n complete() {\n observer.complete();\n },\n next(response) {\n const transformed = transformResult(response, transformer.output);\n\n if (!transformed.ok) {\n observer.error(TRPCClientError.from(transformed.error));\n return;\n }\n\n observer.next({ result: transformed.result });\n\n if (op.type !== 'subscription') {\n unsubscribe();\n observer.complete();\n }\n },\n });\n\n return () => {\n unsubscribe();\n };\n });\n };\n}\n", "import { SuperJSON, SuperJSONResult } from 'superjson';\nimport { compress, uncompress } from 'snappyjs';\nimport { getParser } from 'bowser';\n\nclass DefaultSuperJSON {\n superJson;\n constructor() {\n this.superJson = new SuperJSON();\n }\n}\n\nclass CompressSuperJSON {\n superJson;\n constructor() {\n this.superJson = new SuperJSON();\n }\n}\n\nconst defaultSuperJSON = new DefaultSuperJSON();\nconst compressSuperJSON = new CompressSuperJSON();\nenum CustomType {\n unit8array = '0',\n}\nfunction uint8ArrayToBase64(bytes: Uint8Array) {\n return btoa(new TextDecoder('iso-8859-1').decode(bytes));\n}\n\nfunction base64ToUint8Array(base64: string) {\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n}\n\nfunction jsonToUint8Array(obj: unknown): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(obj));\n}\n\nfunction uint8ArrayToJson<T = unknown>(data: Uint8Array): T {\n return JSON.parse(new TextDecoder().decode(data)) as T;\n}\n\nexport function initJsonConvert() {\n const useStructuredClone =\n chrome.runtime.getManifest()['message_serialization'] ===\n 'structured_clone' &&\n getParser(navigator.userAgent, (navigator as any).userAgentData).satisfies({\n chrome: '>=148.0.0.0',\n });\n const isApplicable = (v: unknown): v is Uint8Array => v instanceof Uint8Array;\n\n const defaultConfig = {\n serialize: useStructuredClone\n ? (v: Uint8Array) => v\n : (v: Uint8Array) => uint8ArrayToBase64(v),\n deserialize: useStructuredClone\n ? (v: any) => v\n : (v: any) => base64ToUint8Array(v),\n isApplicable,\n };\n const compressConfig = {\n serialize: useStructuredClone\n ? (v: Uint8Array) => compress(v)\n : (v: Uint8Array) => uint8ArrayToBase64(compress(v)),\n deserialize: useStructuredClone\n ? (v: any) => uncompress(v)\n : (v: any) => uncompress(base64ToUint8Array(v)),\n isApplicable,\n };\n\n defaultSuperJSON.superJson.registerCustom<Uint8Array, any>(\n defaultConfig,\n CustomType.unit8array,\n );\n compressSuperJSON.superJson.registerCustom<Uint8Array, any>(\n compressConfig,\n CustomType.unit8array,\n );\n}\nexport function serialize(\n object: Parameters<typeof defaultSuperJSON.superJson.serialize>[0],\n compress?: boolean,\n) {\n if (!compress) {\n return defaultSuperJSON.superJson.serialize(object);\n }\n const result = compressSuperJSON.superJson.serialize(object);\n (result as any).__compress = true;\n if (result.meta?.values) {\n if (Array.isArray(result.meta?.values)) {\n if (result.meta.values[0][1] === CustomType.unit8array) {\n return result;\n }\n } else {\n const list = Object.values(result.meta.values);\n if (list.some((item) => Array.isArray(item[0]))) {\n return result;\n } else {\n return uint8ArrayToBase64(jsonToUint8Array(result));\n }\n }\n }\n return result;\n}\nexport function deserialize<T = unknown>(\n payload: SuperJSONResult & { __compress?: boolean },\n): T {\n if (typeof payload === 'string') {\n payload = uint8ArrayToJson(base64ToUint8Array(payload));\n }\n\n return payload.__compress\n ? compressSuperJSON.superJson.deserialize(payload, { inPlace: true })\n : defaultSuperJSON.superJson.deserialize(payload, { inPlace: true });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["compress", "callbacks"]
|
|
7
|
+
}
|
package/client/index.mjs
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// packages/trpc/client/chromeLink.ts
|
|
2
|
+
import { TRPCClientError } from "@trpc/client";
|
|
3
|
+
import { observable } from "@trpc/server/observable";
|
|
4
|
+
import {
|
|
5
|
+
getTransformer
|
|
6
|
+
} from "@trpc/client/unstable-internals";
|
|
7
|
+
import { transformResult } from "@trpc/server/unstable-core-do-not-import";
|
|
8
|
+
|
|
9
|
+
// packages/trpc/util/json.ts
|
|
10
|
+
import { SuperJSON } from "superjson";
|
|
11
|
+
import { compress, uncompress } from "snappyjs";
|
|
12
|
+
import { getParser } from "bowser";
|
|
13
|
+
var DefaultSuperJSON = class {
|
|
14
|
+
superJson;
|
|
15
|
+
constructor() {
|
|
16
|
+
this.superJson = new SuperJSON();
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
var CompressSuperJSON = class {
|
|
20
|
+
superJson;
|
|
21
|
+
constructor() {
|
|
22
|
+
this.superJson = new SuperJSON();
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
var defaultSuperJSON = new DefaultSuperJSON();
|
|
26
|
+
var compressSuperJSON = new CompressSuperJSON();
|
|
27
|
+
function uint8ArrayToBase64(bytes) {
|
|
28
|
+
return btoa(new TextDecoder("iso-8859-1").decode(bytes));
|
|
29
|
+
}
|
|
30
|
+
function base64ToUint8Array(base64) {
|
|
31
|
+
return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
|
|
32
|
+
}
|
|
33
|
+
function jsonToUint8Array(obj) {
|
|
34
|
+
return new TextEncoder().encode(JSON.stringify(obj));
|
|
35
|
+
}
|
|
36
|
+
function uint8ArrayToJson(data) {
|
|
37
|
+
return JSON.parse(new TextDecoder().decode(data));
|
|
38
|
+
}
|
|
39
|
+
function initJsonConvert() {
|
|
40
|
+
const useStructuredClone = chrome.runtime.getManifest()["message_serialization"] === "structured_clone" && getParser(navigator.userAgent, navigator.userAgentData).satisfies({
|
|
41
|
+
chrome: ">=148.0.0.0"
|
|
42
|
+
});
|
|
43
|
+
const isApplicable = (v) => v instanceof Uint8Array;
|
|
44
|
+
const defaultConfig = {
|
|
45
|
+
serialize: useStructuredClone ? (v) => v : (v) => uint8ArrayToBase64(v),
|
|
46
|
+
deserialize: useStructuredClone ? (v) => v : (v) => base64ToUint8Array(v),
|
|
47
|
+
isApplicable
|
|
48
|
+
};
|
|
49
|
+
const compressConfig = {
|
|
50
|
+
serialize: useStructuredClone ? (v) => compress(v) : (v) => uint8ArrayToBase64(compress(v)),
|
|
51
|
+
deserialize: useStructuredClone ? (v) => uncompress(v) : (v) => uncompress(base64ToUint8Array(v)),
|
|
52
|
+
isApplicable
|
|
53
|
+
};
|
|
54
|
+
defaultSuperJSON.superJson.registerCustom(
|
|
55
|
+
defaultConfig,
|
|
56
|
+
"0" /* unit8array */
|
|
57
|
+
);
|
|
58
|
+
compressSuperJSON.superJson.registerCustom(
|
|
59
|
+
compressConfig,
|
|
60
|
+
"0" /* unit8array */
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
function serialize(object, compress2) {
|
|
64
|
+
if (!compress2) {
|
|
65
|
+
return defaultSuperJSON.superJson.serialize(object);
|
|
66
|
+
}
|
|
67
|
+
const result = compressSuperJSON.superJson.serialize(object);
|
|
68
|
+
result.__compress = true;
|
|
69
|
+
if (result.meta?.values) {
|
|
70
|
+
if (Array.isArray(result.meta?.values)) {
|
|
71
|
+
if (result.meta.values[0][1] === "0" /* unit8array */) {
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
} else {
|
|
75
|
+
const list = Object.values(result.meta.values);
|
|
76
|
+
if (list.some((item) => Array.isArray(item[0]))) {
|
|
77
|
+
return result;
|
|
78
|
+
} else {
|
|
79
|
+
return uint8ArrayToBase64(jsonToUint8Array(result));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
function deserialize(payload) {
|
|
86
|
+
if (typeof payload === "string") {
|
|
87
|
+
payload = uint8ArrayToJson(base64ToUint8Array(payload));
|
|
88
|
+
}
|
|
89
|
+
return payload.__compress ? compressSuperJSON.superJson.deserialize(payload, { inPlace: true }) : defaultSuperJSON.superJson.deserialize(payload, { inPlace: true });
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// packages/trpc/client/chromeLink.ts
|
|
93
|
+
var ChromeClient = class {
|
|
94
|
+
#pendingRequests = /* @__PURE__ */ new Map();
|
|
95
|
+
port;
|
|
96
|
+
constructor(port) {
|
|
97
|
+
this.port = port;
|
|
98
|
+
port.onMessage.addListener((message) => {
|
|
99
|
+
if (message.result?.data) {
|
|
100
|
+
message.result.data = deserialize(message.result.data);
|
|
101
|
+
}
|
|
102
|
+
this.#handleResponse(message);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
#handleResponse(response) {
|
|
106
|
+
const request = response.id && this.#pendingRequests.get(response.id);
|
|
107
|
+
if (!request) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
request.callbacks.next(response);
|
|
111
|
+
if ("result" in response && response.result.type === "stopped") {
|
|
112
|
+
request.callbacks.complete();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
index = 0;
|
|
116
|
+
request(op, callbacks) {
|
|
117
|
+
const { type } = op;
|
|
118
|
+
const id = `${this.index++}`;
|
|
119
|
+
this.#pendingRequests.set(id, {
|
|
120
|
+
type,
|
|
121
|
+
callbacks,
|
|
122
|
+
op
|
|
123
|
+
});
|
|
124
|
+
const message = {
|
|
125
|
+
method: "request",
|
|
126
|
+
operation: {
|
|
127
|
+
...op,
|
|
128
|
+
input: serialize(op.input, !!op.context["compress"])
|
|
129
|
+
},
|
|
130
|
+
id
|
|
131
|
+
};
|
|
132
|
+
this.port.postMessage(message);
|
|
133
|
+
return () => {
|
|
134
|
+
const callbacks2 = this.#pendingRequests.get(id)?.callbacks;
|
|
135
|
+
this.#pendingRequests.delete(id);
|
|
136
|
+
callbacks2?.complete();
|
|
137
|
+
if (type === "subscription") {
|
|
138
|
+
this.port.postMessage({
|
|
139
|
+
id,
|
|
140
|
+
operation: {},
|
|
141
|
+
method: "subscription.stop"
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
function chromeLink(opts) {
|
|
148
|
+
initJsonConvert();
|
|
149
|
+
const port = opts.port;
|
|
150
|
+
return () => {
|
|
151
|
+
const client = new ChromeClient(port);
|
|
152
|
+
const transformer = getTransformer(opts?.transformer);
|
|
153
|
+
return ({ op }) => observable((observer) => {
|
|
154
|
+
op.input = transformer.input.serialize(op.input);
|
|
155
|
+
const unsubscribe = client.request(op, {
|
|
156
|
+
error(err) {
|
|
157
|
+
observer.error(err);
|
|
158
|
+
unsubscribe();
|
|
159
|
+
},
|
|
160
|
+
complete() {
|
|
161
|
+
observer.complete();
|
|
162
|
+
},
|
|
163
|
+
next(response) {
|
|
164
|
+
const transformed = transformResult(response, transformer.output);
|
|
165
|
+
if (!transformed.ok) {
|
|
166
|
+
observer.error(TRPCClientError.from(transformed.error));
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
observer.next({ result: transformed.result });
|
|
170
|
+
if (op.type !== "subscription") {
|
|
171
|
+
unsubscribe();
|
|
172
|
+
observer.complete();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
return () => {
|
|
177
|
+
unsubscribe();
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
export {
|
|
183
|
+
chromeLink
|
|
184
|
+
};
|
|
185
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/trpc/client/chromeLink.ts", "../../../packages/trpc/util/json.ts"],
|
|
4
|
+
"sourcesContent": ["import { Operation, TRPCClientError, TRPCLink } from '@trpc/client';\nimport type {\n AnyRouter,\n AnyTRPCRouter,\n inferRouterContext,\n inferTRPCClientTypes,\n ProcedureType,\n} from '@trpc/server';\nimport type { TRPCResponseMessage } from '@trpc/server/rpc';\nimport { observable, Observer } from '@trpc/server/observable';\nimport {\n getTransformer,\n TransformerOptions,\n} from '@trpc/client/unstable-internals';\nimport { transformResult } from '@trpc/server/unstable-core-do-not-import';\nimport { deserialize, initJsonConvert, serialize } from '../util/json';\n\ntype ChromeCallbackResult<TRouter extends AnyRouter = AnyRouter> =\n TRPCResponseMessage<unknown, inferRouterContext<TRouter>>;\n\ntype ChromeCallbacks<TRouter extends AnyRouter = AnyRouter> = Observer<\n ChromeCallbackResult<TRouter>,\n TRPCClientError<TRouter>\n>;\n\ntype ChromeRequest = {\n type: ProcedureType;\n callbacks: ChromeCallbacks;\n op: Operation;\n};\n\nclass ChromeClient {\n #pendingRequests = new Map<string | number, ChromeRequest>();\n port;\n constructor(port: chrome.runtime.Port) {\n this.port = port;\n port.onMessage.addListener((message) => {\n if (message.result?.data) {\n message.result.data = deserialize(message.result.data);\n }\n this.#handleResponse(message);\n });\n }\n\n #handleResponse(response: TRPCResponseMessage) {\n const request = response.id && this.#pendingRequests.get(response.id);\n if (!request) {\n return;\n }\n\n request.callbacks.next(response);\n\n if ('result' in response && response.result.type === 'stopped') {\n request.callbacks.complete();\n }\n }\n index = 0;\n request(op: Operation, callbacks: ChromeCallbacks) {\n const { type } = op;\n const id = `${this.index++}`;\n\n this.#pendingRequests.set(id, {\n type,\n callbacks,\n op,\n });\n const message = {\n method: 'request',\n operation: {\n ...op,\n input: serialize(op.input, !!op.context['compress']),\n },\n id: id,\n };\n\n this.port.postMessage(message);\n return () => {\n const callbacks = this.#pendingRequests.get(id)?.callbacks;\n\n this.#pendingRequests.delete(id);\n\n callbacks?.complete();\n\n if (type === 'subscription') {\n this.port.postMessage({\n id,\n operation: {},\n method: 'subscription.stop',\n });\n }\n };\n }\n}\n\nexport type ChromeLinkOptions<TRouter extends AnyTRPCRouter> =\n TransformerOptions<inferTRPCClientTypes<TRouter>>;\nexport function chromeLink<TRouter extends AnyRouter>(\n opts: ChromeLinkOptions<TRouter> & {\n port: chrome.runtime.Port;\n },\n): TRPCLink<TRouter> {\n initJsonConvert();\n const port = opts.port;\n return () => {\n const client = new ChromeClient(port);\n const transformer = getTransformer(opts?.transformer);\n\n return ({ op }) =>\n observable((observer) => {\n op.input = transformer.input.serialize(op.input);\n\n const unsubscribe = client.request(op, {\n error(err) {\n observer.error(err as TRPCClientError<any>);\n unsubscribe();\n },\n complete() {\n observer.complete();\n },\n next(response) {\n const transformed = transformResult(response, transformer.output);\n\n if (!transformed.ok) {\n observer.error(TRPCClientError.from(transformed.error));\n return;\n }\n\n observer.next({ result: transformed.result });\n\n if (op.type !== 'subscription') {\n unsubscribe();\n observer.complete();\n }\n },\n });\n\n return () => {\n unsubscribe();\n };\n });\n };\n}\n", "import { SuperJSON, SuperJSONResult } from 'superjson';\nimport { compress, uncompress } from 'snappyjs';\nimport { getParser } from 'bowser';\n\nclass DefaultSuperJSON {\n superJson;\n constructor() {\n this.superJson = new SuperJSON();\n }\n}\n\nclass CompressSuperJSON {\n superJson;\n constructor() {\n this.superJson = new SuperJSON();\n }\n}\n\nconst defaultSuperJSON = new DefaultSuperJSON();\nconst compressSuperJSON = new CompressSuperJSON();\nenum CustomType {\n unit8array = '0',\n}\nfunction uint8ArrayToBase64(bytes: Uint8Array) {\n return btoa(new TextDecoder('iso-8859-1').decode(bytes));\n}\n\nfunction base64ToUint8Array(base64: string) {\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n}\n\nfunction jsonToUint8Array(obj: unknown): Uint8Array {\n return new TextEncoder().encode(JSON.stringify(obj));\n}\n\nfunction uint8ArrayToJson<T = unknown>(data: Uint8Array): T {\n return JSON.parse(new TextDecoder().decode(data)) as T;\n}\n\nexport function initJsonConvert() {\n const useStructuredClone =\n chrome.runtime.getManifest()['message_serialization'] ===\n 'structured_clone' &&\n getParser(navigator.userAgent, (navigator as any).userAgentData).satisfies({\n chrome: '>=148.0.0.0',\n });\n const isApplicable = (v: unknown): v is Uint8Array => v instanceof Uint8Array;\n\n const defaultConfig = {\n serialize: useStructuredClone\n ? (v: Uint8Array) => v\n : (v: Uint8Array) => uint8ArrayToBase64(v),\n deserialize: useStructuredClone\n ? (v: any) => v\n : (v: any) => base64ToUint8Array(v),\n isApplicable,\n };\n const compressConfig = {\n serialize: useStructuredClone\n ? (v: Uint8Array) => compress(v)\n : (v: Uint8Array) => uint8ArrayToBase64(compress(v)),\n deserialize: useStructuredClone\n ? (v: any) => uncompress(v)\n : (v: any) => uncompress(base64ToUint8Array(v)),\n isApplicable,\n };\n\n defaultSuperJSON.superJson.registerCustom<Uint8Array, any>(\n defaultConfig,\n CustomType.unit8array,\n );\n compressSuperJSON.superJson.registerCustom<Uint8Array, any>(\n compressConfig,\n CustomType.unit8array,\n );\n}\nexport function serialize(\n object: Parameters<typeof defaultSuperJSON.superJson.serialize>[0],\n compress?: boolean,\n) {\n if (!compress) {\n return defaultSuperJSON.superJson.serialize(object);\n }\n const result = compressSuperJSON.superJson.serialize(object);\n (result as any).__compress = true;\n if (result.meta?.values) {\n if (Array.isArray(result.meta?.values)) {\n if (result.meta.values[0][1] === CustomType.unit8array) {\n return result;\n }\n } else {\n const list = Object.values(result.meta.values);\n if (list.some((item) => Array.isArray(item[0]))) {\n return result;\n } else {\n return uint8ArrayToBase64(jsonToUint8Array(result));\n }\n }\n }\n return result;\n}\nexport function deserialize<T = unknown>(\n payload: SuperJSONResult & { __compress?: boolean },\n): T {\n if (typeof payload === 'string') {\n payload = uint8ArrayToJson(base64ToUint8Array(payload));\n }\n\n return payload.__compress\n ? compressSuperJSON.superJson.deserialize(payload, { inPlace: true })\n : defaultSuperJSON.superJson.deserialize(payload, { inPlace: true });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["compress", "callbacks"]
|
|
7
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cyia/chrome-trpc",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "tRPC integration for VS Code Extension-Webview communication",
|
|
5
|
+
"module": "esm",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"test:build": "rimraf -g ./test-dist && tsx ./script/test.esbuild.ts ",
|
|
9
|
+
"test": "rimraf -g ./test-dist && tsx ./script/test.esbuild.ts && playwright test"
|
|
10
|
+
},
|
|
11
|
+
"author": "wszgrcy",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {},
|
|
14
|
+
"homepage": "https://github.com/wszgrcy/chrome-trpc/tree/main/packages/trpc#readme",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/wszgrcy/chrome-trpc/issues"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"chrome",
|
|
20
|
+
"trpc",
|
|
21
|
+
"popup",
|
|
22
|
+
"contentScript",
|
|
23
|
+
"contentScript",
|
|
24
|
+
"background",
|
|
25
|
+
"extension",
|
|
26
|
+
"type-safe"
|
|
27
|
+
],
|
|
28
|
+
"exports": {
|
|
29
|
+
"./client": {
|
|
30
|
+
"types": "./client/index.d.ts",
|
|
31
|
+
"import": "./client/index.mjs"
|
|
32
|
+
},
|
|
33
|
+
"./server": {
|
|
34
|
+
"types": "./server/index.d.ts",
|
|
35
|
+
"import": "./server/index.mjs"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"snappyjs": "^0.7.0",
|
|
40
|
+
"bowser": "2.14.1"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/snappyjs": "^0.7.1",
|
|
44
|
+
"rxjs": "7.8.2",
|
|
45
|
+
"valibot": "1.4.2",
|
|
46
|
+
"playwright": "1.61.1",
|
|
47
|
+
"@types/node": "^24.0.0",
|
|
48
|
+
"@playwright/test": "1.61.1"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"@trpc/client": "^11.18.0",
|
|
52
|
+
"@trpc/server": "^11.18.0"
|
|
53
|
+
}
|
|
54
|
+
}
|