adnbn 0.6.0 → 0.6.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.
@@ -30,9 +30,7 @@ class TransportDeclaration_default extends FileBuilder {
30
30
  const type = Object.entries(dictionary).map(([key, value]) => {
31
31
  return `'${key}': ${value};`;
32
32
  }).join("\n ");
33
- return this.readFile().replaceAll(":layer", this.layer).replaceAll("Layer", _.upperFirst(this.layer)).replace(`{ [name: string]: any }`, `{
34
- ${type}
35
- }`);
33
+ return this.readFile().replaceAll(":layer", this.layer).replaceAll("Layer", _.upperFirst(this.layer)).replaceAll("__TRANSPORT_DICTIONARY__", type);
36
34
  }
37
35
  dictionary(dictionary) {
38
36
  this._dictionary = dictionary;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/cli/plugins/typescript/declaration/transport/TransportDeclaration.ts"],"sourcesContent":["import _ from \"lodash\";\n\nimport FileBuilder from \"../../FileBuilder\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\n\nexport enum TransportDeclarationLayer {\n Service = \"service\",\n Offscreen = \"offscreen\",\n Relay = \"relay\",\n}\n\nexport default class<T extends Record<string, string> = Record<string, string>> extends FileBuilder {\n protected _dictionary?: T;\n\n constructor(\n config: ReadonlyConfig,\n protected readonly layer: TransportDeclarationLayer\n ) {\n super(config);\n }\n\n protected filename(): string {\n return this.layer + \".d.ts\";\n }\n\n protected file(): URL {\n return new URL(\"./transport.d.ts\", this.url());\n }\n\n protected url(): string {\n return import.meta.url;\n }\n\n protected template(): string {\n const dictionary = this._dictionary;\n\n if (!dictionary) {\n throw new Error(`Transport ${this.layer} dictionary is not set`);\n }\n\n const type = Object.entries(dictionary)\n .map(([key, value]) => {\n return `'${key}': ${value};`;\n })\n .join(\"\\n\\t\\t\");\n\n return this.readFile()\n .replaceAll(\":layer\", this.layer)\n .replaceAll(\"Layer\", _.upperFirst(this.layer))\n .replace(`{ [name: string]: any }`, `{\\n\\t\\t${type}\\n\\t}`);\n }\n\n public dictionary(dictionary: T): this {\n this._dictionary = dictionary;\n\n return this;\n }\n}\n"],"mappings":"AAAA,OAAO,OAAO;AAEd,OAAO,iBAAiB;AAIjB,IAAK,4BAAL,kBAAKA,+BAAL;AACH,EAAAA,2BAAA,aAAU;AACV,EAAAA,2BAAA,eAAY;AACZ,EAAAA,2BAAA,WAAQ;AAHA,SAAAA;AAAA,GAAA;AAMZ,MAAO,qCAAiF,YAAY;AAAA,EAGhG,YACI,QACmB,OACrB;AACE,UAAM,MAAM;AAFO;AAAA,EAGvB;AAAA,EAHuB;AAAA,EAJb;AAAA,EASA,WAAmB;AACzB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEU,OAAY;AAClB,WAAO,IAAI,IAAI,oBAAoB,KAAK,IAAI,CAAC;AAAA,EACjD;AAAA,EAEU,MAAc;AACpB,WAAO,YAAY;AAAA,EACvB;AAAA,EAEU,WAAmB;AACzB,UAAM,aAAa,KAAK;AAExB,QAAI,CAAC,YAAY;AACb,YAAM,IAAI,MAAM,aAAa,KAAK,KAAK,wBAAwB;AAAA,IACnE;AAEA,UAAM,OAAO,OAAO,QAAQ,UAAU,EACjC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACnB,aAAO,IAAI,GAAG,MAAM,KAAK;AAAA,IAC7B,CAAC,EACA,KAAK,MAAQ;AAElB,WAAO,KAAK,SAAS,EAChB,WAAW,UAAU,KAAK,KAAK,EAC/B,WAAW,SAAS,EAAE,WAAW,KAAK,KAAK,CAAC,EAC5C,QAAQ,2BAA2B;AAAA,IAAU,IAAI;AAAA,GAAO;AAAA,EACjE;AAAA,EAEO,WAAW,YAAqB;AACnC,SAAK,cAAc;AAEnB,WAAO;AAAA,EACX;AACJ;","names":["TransportDeclarationLayer"]}
1
+ {"version":3,"sources":["../../../../../../src/cli/plugins/typescript/declaration/transport/TransportDeclaration.ts"],"sourcesContent":["import _ from \"lodash\";\n\nimport FileBuilder from \"../../FileBuilder\";\n\nimport {ReadonlyConfig} from \"@typing/config\";\n\nexport enum TransportDeclarationLayer {\n Service = \"service\",\n Offscreen = \"offscreen\",\n Relay = \"relay\",\n}\n\nexport default class<T extends Record<string, string> = Record<string, string>> extends FileBuilder {\n protected _dictionary?: T;\n\n constructor(\n config: ReadonlyConfig,\n protected readonly layer: TransportDeclarationLayer\n ) {\n super(config);\n }\n\n protected filename(): string {\n return this.layer + \".d.ts\";\n }\n\n protected file(): URL {\n return new URL(\"./transport.d.ts\", this.url());\n }\n\n protected url(): string {\n return import.meta.url;\n }\n\n protected template(): string {\n const dictionary = this._dictionary;\n\n if (!dictionary) {\n throw new Error(`Transport ${this.layer} dictionary is not set`);\n }\n\n const type = Object.entries(dictionary)\n .map(([key, value]) => {\n return `'${key}': ${value};`;\n })\n .join(\"\\n\\t\\t\");\n\n return this.readFile()\n .replaceAll(\":layer\", this.layer)\n .replaceAll(\"Layer\", _.upperFirst(this.layer))\n .replaceAll(\"__TRANSPORT_DICTIONARY__\", type);\n }\n\n public dictionary(dictionary: T): this {\n this._dictionary = dictionary;\n\n return this;\n }\n}\n"],"mappings":"AAAA,OAAO,OAAO;AAEd,OAAO,iBAAiB;AAIjB,IAAK,4BAAL,kBAAKA,+BAAL;AACH,EAAAA,2BAAA,aAAU;AACV,EAAAA,2BAAA,eAAY;AACZ,EAAAA,2BAAA,WAAQ;AAHA,SAAAA;AAAA,GAAA;AAMZ,MAAO,qCAAiF,YAAY;AAAA,EAGhG,YACI,QACmB,OACrB;AACE,UAAM,MAAM;AAFO;AAAA,EAGvB;AAAA,EAHuB;AAAA,EAJb;AAAA,EASA,WAAmB;AACzB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEU,OAAY;AAClB,WAAO,IAAI,IAAI,oBAAoB,KAAK,IAAI,CAAC;AAAA,EACjD;AAAA,EAEU,MAAc;AACpB,WAAO,YAAY;AAAA,EACvB;AAAA,EAEU,WAAmB;AACzB,UAAM,aAAa,KAAK;AAExB,QAAI,CAAC,YAAY;AACb,YAAM,IAAI,MAAM,aAAa,KAAK,KAAK,wBAAwB;AAAA,IACnE;AAEA,UAAM,OAAO,OAAO,QAAQ,UAAU,EACjC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACnB,aAAO,IAAI,GAAG,MAAM,KAAK;AAAA,IAC7B,CAAC,EACA,KAAK,MAAQ;AAElB,WAAO,KAAK,SAAS,EAChB,WAAW,UAAU,KAAK,KAAK,EAC/B,WAAW,SAAS,EAAE,WAAW,KAAK,KAAK,CAAC,EAC5C,WAAW,4BAA4B,IAAI;AAAA,EACpD;AAAA,EAEO,WAAW,YAAqB;AACnC,SAAK,cAAc;AAEnB,WAAO;AAAA,EACX;AACJ;","names":["TransportDeclarationLayer"]}
@@ -1,15 +1,9 @@
1
1
  import ":package";
2
- import type {LayerProxyTarget, LayerTarget} from ":package/:layer";
3
-
4
- declare module ":package" {
5
- // prettier-ignore
6
- export interface LayerRegistry { [name: string]: any }
7
-
8
- export function getLayer<N extends keyof LayerRegistry>(name: N): LayerProxyTarget<LayerRegistry, N>;
9
- }
2
+ import ":package/:layer";
10
3
 
11
4
  declare module ":package/:layer" {
12
- import type {LayerRegistry} from ":package";
13
-
14
- export function getLayer<N extends keyof LayerRegistry>(name: N): LayerTarget<LayerRegistry, N>;
5
+ // prettier-ignore
6
+ export interface LayerRegistry {
7
+ __TRANSPORT_DICTIONARY__
8
+ }
15
9
  }
@@ -1,10 +1,10 @@
1
1
  import { type OffscreenDefinition, OffscreenReason, type OffscreenUnresolvedDefinition } from "../types/offscreen.js";
2
- import { TransportDictionary, TransportType } from "../types/transport.js";
3
- import { DeepAsyncProxy } from "../types/helpers.js";
2
+ import type { OffscreenName, OffscreenProxyTarget } from "../offscreen/index.js";
3
+ import type { TransportType } from "../types/transport.js";
4
4
  type OffscreenParameters = chrome.offscreen.CreateParameters;
5
5
  export { OffscreenReason, OffscreenDefinition, OffscreenUnresolvedDefinition };
6
6
  export type OffscreenAlias = string;
7
7
  export type OffscreenMap = Map<OffscreenAlias, OffscreenParameters>;
8
8
  export declare const defineOffscreen: <T extends TransportType>(options: OffscreenDefinition<T>) => OffscreenDefinition<T>;
9
9
  export declare const getOffscreens: () => OffscreenMap;
10
- export declare const getOffscreen: <N extends Extract<keyof TransportDictionary, string>>(name: N) => DeepAsyncProxy<TransportDictionary[N]>;
10
+ export declare const getOffscreen: <N extends OffscreenName>(name: N) => OffscreenProxyTarget<N>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/main/offscreen.ts"],"sourcesContent":["import ProxyOffscreen from \"@offscreen/providers/ProxyOffscreen\";\n\nimport {type OffscreenDefinition, OffscreenReason, type OffscreenUnresolvedDefinition} from \"@typing/offscreen\";\nimport {TransportDictionary, TransportType} from \"@typing/transport\";\nimport {DeepAsyncProxy} from \"@typing/helpers\";\n\ntype OffscreenParameters = chrome.offscreen.CreateParameters;\n\nexport {OffscreenReason, OffscreenDefinition, OffscreenUnresolvedDefinition};\n\nexport type OffscreenAlias = string;\n\nexport type OffscreenMap = Map<OffscreenAlias, OffscreenParameters>;\n\nexport const defineOffscreen = <T extends TransportType>(options: OffscreenDefinition<T>): OffscreenDefinition<T> => {\n return options;\n};\n\nexport const getOffscreens = (): OffscreenMap => {\n const offscreens: OffscreenMap = new Map();\n\n try {\n // @ts-expect-error: __ADNBN_OFFSCREEN_PARAMETERS__ is a virtual variable generated by the bundler `src/cli/plugins/offscreen/index.ts`\n Object.entries<OffscreenParameters>(__ADNBN_OFFSCREEN_PARAMETERS__).forEach(([key, value]) => {\n offscreens.set(key, value);\n });\n } catch (e) {\n console.error(\"Failed getting offscreens: \", e);\n }\n\n return offscreens;\n};\n\nexport const getOffscreen = <N extends Extract<keyof TransportDictionary, string>>(\n name: N\n): DeepAsyncProxy<TransportDictionary[N]> => {\n const parameters = getOffscreens().get(name);\n\n if (!parameters) {\n throw new Error(`Unable to get offscreen: ${name}`);\n }\n\n return new ProxyOffscreen(name, parameters).get();\n};\n"],"mappings":"AAAA,OAAO,oBAAoB;AAE3B,SAAkC,uBAA0D;AAYrF,MAAM,kBAAkB,CAA0B,YAA4D;AACjH,SAAO;AACX;AAEO,MAAM,gBAAgB,MAAoB;AAC7C,QAAM,aAA2B,oBAAI,IAAI;AAEzC,MAAI;AAEA,WAAO,QAA6B,8BAA8B,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC1F,iBAAW,IAAI,KAAK,KAAK;AAAA,IAC7B,CAAC;AAAA,EACL,SAAS,GAAG;AACR,YAAQ,MAAM,+BAA+B,CAAC;AAAA,EAClD;AAEA,SAAO;AACX;AAEO,MAAM,eAAe,CACxB,SACyC;AACzC,QAAM,aAAa,cAAc,EAAE,IAAI,IAAI;AAE3C,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,MAAM,4BAA4B,IAAI,EAAE;AAAA,EACtD;AAEA,SAAO,IAAI,eAAe,MAAM,UAAU,EAAE,IAAI;AACpD;","names":[]}
1
+ {"version":3,"sources":["../../src/main/offscreen.ts"],"sourcesContent":["import ProxyOffscreen from \"@offscreen/providers/ProxyOffscreen\";\n\nimport {type OffscreenDefinition, OffscreenReason, type OffscreenUnresolvedDefinition} from \"@typing/offscreen\";\nimport type {OffscreenName, OffscreenProxyTarget} from \"@offscreen/index\";\nimport type {TransportType} from \"@typing/transport\";\n\ntype OffscreenParameters = chrome.offscreen.CreateParameters;\n\nexport {OffscreenReason, OffscreenDefinition, OffscreenUnresolvedDefinition};\n\nexport type OffscreenAlias = string;\n\nexport type OffscreenMap = Map<OffscreenAlias, OffscreenParameters>;\n\nexport const defineOffscreen = <T extends TransportType>(options: OffscreenDefinition<T>): OffscreenDefinition<T> => {\n return options;\n};\n\nexport const getOffscreens = (): OffscreenMap => {\n const offscreens: OffscreenMap = new Map();\n\n try {\n // @ts-expect-error: __ADNBN_OFFSCREEN_PARAMETERS__ is a virtual variable generated by the bundler `src/cli/plugins/offscreen/index.ts`\n Object.entries<OffscreenParameters>(__ADNBN_OFFSCREEN_PARAMETERS__).forEach(([key, value]) => {\n offscreens.set(key, value);\n });\n } catch (e) {\n console.error(\"Failed getting offscreens: \", e);\n }\n\n return offscreens;\n};\n\nexport const getOffscreen = <N extends OffscreenName>(name: N): OffscreenProxyTarget<N> => {\n const parameters = getOffscreens().get(name);\n\n if (!parameters) {\n throw new Error(`Unable to get offscreen: ${name}`);\n }\n\n return new ProxyOffscreen(name, parameters).get();\n};\n"],"mappings":"AAAA,OAAO,oBAAoB;AAE3B,SAAkC,uBAA0D;AAYrF,MAAM,kBAAkB,CAA0B,YAA4D;AACjH,SAAO;AACX;AAEO,MAAM,gBAAgB,MAAoB;AAC7C,QAAM,aAA2B,oBAAI,IAAI;AAEzC,MAAI;AAEA,WAAO,QAA6B,8BAA8B,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC1F,iBAAW,IAAI,KAAK,KAAK;AAAA,IAC7B,CAAC;AAAA,EACL,SAAS,GAAG;AACR,YAAQ,MAAM,+BAA+B,CAAC;AAAA,EAClD;AAEA,SAAO;AACX;AAEO,MAAM,eAAe,CAA0B,SAAqC;AACvF,QAAM,aAAa,cAAc,EAAE,IAAI,IAAI;AAE3C,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,MAAM,4BAA4B,IAAI,EAAE;AAAA,EACtD;AAEA,SAAO,IAAI,eAAe,MAAM,UAAU,EAAE,IAAI;AACpD;","names":[]}
@@ -1,8 +1,8 @@
1
1
  import { type ProxyRelayParams } from "../relay/providers/index.js";
2
- import { DeepAsyncProxy } from "../types/helpers.js";
3
- import { TransportDictionary, TransportType } from "../types/transport.js";
2
+ import type { RelayName, RelayProxyTarget } from "../relay/index.js";
3
+ import type { TransportType } from "../types/transport.js";
4
4
  import { RelayDefinition, RelayMethod, RelayUnresolvedDefinition } from "../types/relay.js";
5
5
  export { RelayMethod };
6
6
  export type { RelayDefinition, RelayUnresolvedDefinition };
7
7
  export declare const defineRelay: <T extends TransportType>(options: RelayDefinition<T>) => RelayDefinition<T>;
8
- export declare const getRelay: <N extends Extract<keyof TransportDictionary, string>>(name: N, params: ProxyRelayParams) => DeepAsyncProxy<TransportDictionary[N]>;
8
+ export declare const getRelay: <N extends RelayName>(name: N, params: ProxyRelayParams) => RelayProxyTarget<N>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/main/relay.ts"],"sourcesContent":["import RelayPermission from \"@relay/RelayPermission\";\nimport {ProxyRelay, type ProxyRelayParams} from \"@relay/providers\";\n\nimport {DeepAsyncProxy} from \"@typing/helpers\";\nimport {TransportDictionary, TransportType} from \"@typing/transport\";\nimport {RelayDefinition, RelayMethod, RelayOptions, RelayOptionsMap, RelayUnresolvedDefinition} from \"@typing/relay\";\n\nexport {RelayMethod};\nexport type {RelayDefinition, RelayUnresolvedDefinition};\n\nexport const defineRelay = <T extends TransportType>(options: RelayDefinition<T>): RelayDefinition<T> => {\n return options;\n};\n\nconst getRelayOptionsMap = (): RelayOptionsMap => {\n const relays: RelayOptionsMap = new Map();\n\n try {\n // @ts-expect-error: __ADNBN_RELAY_OPTIONS__ is a virtual variable generated by the bundler `src/cli/plugins/content/index.ts`\n Object.entries<RelayOptions>(__ADNBN_RELAY_OPTIONS__).forEach(([key, value]) => relays.set(key, value));\n } catch (e) {\n console.error(\"Failed getting relays: \", e);\n }\n\n return relays;\n};\n\nexport const getRelay = <N extends Extract<keyof TransportDictionary, string>>(\n name: N,\n params: ProxyRelayParams\n): DeepAsyncProxy<TransportDictionary[N]> => {\n const relays = getRelayOptionsMap();\n\n RelayPermission.init(relays);\n\n const options = relays.get(name);\n\n if (!options) {\n throw new Error(`Failed to get relay \"${name}\"`);\n }\n\n return new ProxyRelay(name, options, params).get();\n};\n"],"mappings":"AAAA,OAAO,qBAAqB;AAC5B,SAAQ,kBAAwC;AAIhD,SAAyB,mBAA4E;AAK9F,MAAM,cAAc,CAA0B,YAAoD;AACrG,SAAO;AACX;AAEA,MAAM,qBAAqB,MAAuB;AAC9C,QAAM,SAA0B,oBAAI,IAAI;AAExC,MAAI;AAEA,WAAO,QAAsB,uBAAuB,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,OAAO,IAAI,KAAK,KAAK,CAAC;AAAA,EAC1G,SAAS,GAAG;AACR,YAAQ,MAAM,2BAA2B,CAAC;AAAA,EAC9C;AAEA,SAAO;AACX;AAEO,MAAM,WAAW,CACpB,MACA,WACyC;AACzC,QAAM,SAAS,mBAAmB;AAElC,kBAAgB,KAAK,MAAM;AAE3B,QAAM,UAAU,OAAO,IAAI,IAAI;AAE/B,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,wBAAwB,IAAI,GAAG;AAAA,EACnD;AAEA,SAAO,IAAI,WAAW,MAAM,SAAS,MAAM,EAAE,IAAI;AACrD;","names":[]}
1
+ {"version":3,"sources":["../../src/main/relay.ts"],"sourcesContent":["import RelayPermission from \"@relay/RelayPermission\";\nimport {ProxyRelay, type ProxyRelayParams} from \"@relay/providers\";\n\nimport type {RelayName, RelayProxyTarget} from \"@relay/index\";\nimport type {TransportType} from \"@typing/transport\";\nimport {RelayDefinition, RelayMethod, RelayOptions, RelayOptionsMap, RelayUnresolvedDefinition} from \"@typing/relay\";\n\nexport {RelayMethod};\nexport type {RelayDefinition, RelayUnresolvedDefinition};\n\nexport const defineRelay = <T extends TransportType>(options: RelayDefinition<T>): RelayDefinition<T> => {\n return options;\n};\n\nconst getRelayOptionsMap = (): RelayOptionsMap => {\n const relays: RelayOptionsMap = new Map();\n\n try {\n // @ts-expect-error: __ADNBN_RELAY_OPTIONS__ is a virtual variable generated by the bundler `src/cli/plugins/content/index.ts`\n Object.entries<RelayOptions>(__ADNBN_RELAY_OPTIONS__).forEach(([key, value]) => relays.set(key, value));\n } catch (e) {\n console.error(\"Failed getting relays: \", e);\n }\n\n return relays;\n};\n\nexport const getRelay = <N extends RelayName>(name: N, params: ProxyRelayParams): RelayProxyTarget<N> => {\n const relays = getRelayOptionsMap();\n\n RelayPermission.init(relays);\n\n const options = relays.get(name);\n\n if (!options) {\n throw new Error(`Failed to get relay \"${name}\"`);\n }\n\n return new ProxyRelay(name, options, params).get();\n};\n"],"mappings":"AAAA,OAAO,qBAAqB;AAC5B,SAAQ,kBAAwC;AAIhD,SAAyB,mBAA4E;AAK9F,MAAM,cAAc,CAA0B,YAAoD;AACrG,SAAO;AACX;AAEA,MAAM,qBAAqB,MAAuB;AAC9C,QAAM,SAA0B,oBAAI,IAAI;AAExC,MAAI;AAEA,WAAO,QAAsB,uBAAuB,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,OAAO,IAAI,KAAK,KAAK,CAAC;AAAA,EAC1G,SAAS,GAAG;AACR,YAAQ,MAAM,2BAA2B,CAAC;AAAA,EAC9C;AAEA,SAAO;AACX;AAEO,MAAM,WAAW,CAAsB,MAAS,WAAkD;AACrG,QAAM,SAAS,mBAAmB;AAElC,kBAAgB,KAAK,MAAM;AAE3B,QAAM,UAAU,OAAO,IAAI,IAAI;AAE/B,MAAI,CAAC,SAAS;AACV,UAAM,IAAI,MAAM,wBAAwB,IAAI,GAAG;AAAA,EACnD;AAEA,SAAO,IAAI,WAAW,MAAM,SAAS,MAAM,EAAE,IAAI;AACrD;","names":[]}
@@ -1,6 +1,6 @@
1
- import { DeepAsyncProxy } from "../types/helpers.js";
2
- import { TransportDictionary, TransportType } from "../types/transport.js";
1
+ import type { ServiceName, ServiceProxyTarget } from "../service/index.js";
2
+ import type { TransportType } from "../types/transport.js";
3
3
  import { ServiceDefinition } from "../types/service.js";
4
4
  export type { ServiceDefinition };
5
5
  export declare const defineService: <T extends TransportType>(options: ServiceDefinition<T>) => ServiceDefinition<T>;
6
- export declare const getService: <N extends Extract<keyof TransportDictionary, string>>(name: N) => DeepAsyncProxy<TransportDictionary[N]>;
6
+ export declare const getService: <N extends ServiceName>(name: N) => ServiceProxyTarget<N>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/main/service.ts"],"sourcesContent":["import {ProxyService} from \"@service/providers\";\n\nimport {DeepAsyncProxy} from \"@typing/helpers\";\nimport {TransportDictionary, TransportType} from \"@typing/transport\";\nimport {ServiceDefinition} from \"@typing/service\";\n\nexport type {ServiceDefinition};\n\nexport const defineService = <T extends TransportType>(options: ServiceDefinition<T>): ServiceDefinition<T> => {\n return options;\n};\n\nexport const getService = <N extends Extract<keyof TransportDictionary, string>>(\n name: N\n): DeepAsyncProxy<TransportDictionary[N]> => {\n return new ProxyService(name).get();\n};\n"],"mappings":"AAAA,SAAQ,oBAAmB;AAQpB,MAAM,gBAAgB,CAA0B,YAAwD;AAC3G,SAAO;AACX;AAEO,MAAM,aAAa,CACtB,SACyC;AACzC,SAAO,IAAI,aAAa,IAAI,EAAE,IAAI;AACtC;","names":[]}
1
+ {"version":3,"sources":["../../src/main/service.ts"],"sourcesContent":["import {ProxyService} from \"@service/providers\";\n\nimport type {ServiceName, ServiceProxyTarget} from \"@service/index\";\nimport type {TransportType} from \"@typing/transport\";\nimport {ServiceDefinition} from \"@typing/service\";\n\nexport type {ServiceDefinition};\n\nexport const defineService = <T extends TransportType>(options: ServiceDefinition<T>): ServiceDefinition<T> => {\n return options;\n};\n\nexport const getService = <N extends ServiceName>(name: N): ServiceProxyTarget<N> => {\n return new ProxyService(name).get();\n};\n"],"mappings":"AAAA,SAAQ,oBAAmB;AAQpB,MAAM,gBAAgB,CAA0B,YAAwD;AAC3G,SAAO;AACX;AAEO,MAAM,aAAa,CAAwB,SAAmC;AACjF,SAAO,IAAI,aAAa,IAAI,EAAE,IAAI;AACtC;","names":[]}
@@ -9,4 +9,9 @@ export default class MessageManager<T extends MessageDictionary> {
9
9
  clear(): void;
10
10
  private updateListener;
11
11
  private listener;
12
+ private success;
13
+ private failure;
14
+ private serializeError;
15
+ private stringifyError;
16
+ private error;
12
17
  }
@@ -1,6 +1,7 @@
1
1
  import { onMessage } from "@addon-core/browser";
2
2
  import {
3
- MessageGlobalKey
3
+ MessageGlobalKey,
4
+ MessageResultEnvelopeProperty
4
5
  } from "./../types/message.js";
5
6
  class MessageManager {
6
7
  handlers = /* @__PURE__ */ new Set();
@@ -44,19 +45,56 @@ class MessageManager {
44
45
  results.push(Promise.resolve(result));
45
46
  }
46
47
  } catch (err) {
47
- console.error("Message handler error:", err);
48
+ results.push(Promise.reject(err));
48
49
  }
49
50
  }
50
51
  if (results.length > 1) {
51
- throw new Error(
52
- `Message type "${message.type}" has multiple handlers returning a response. Only one response is allowed.`
52
+ sendResponse(
53
+ this.failure(
54
+ new Error(
55
+ `Message type "${message.type}" has multiple handlers returning a response. Only one response is allowed.`
56
+ )
57
+ )
53
58
  );
59
+ return true;
54
60
  }
55
61
  if (results.length === 1) {
56
- results[0].then(sendResponse);
62
+ results[0].then(
63
+ (result) => sendResponse(this.success(result)),
64
+ (error) => sendResponse(this.failure(error))
65
+ );
57
66
  return true;
58
67
  }
59
68
  }
69
+ success(payload) {
70
+ return { [MessageResultEnvelopeProperty]: true, ok: true, payload };
71
+ }
72
+ failure(error) {
73
+ return { [MessageResultEnvelopeProperty]: true, ok: false, error: this.serializeError(error) };
74
+ }
75
+ serializeError(error) {
76
+ if (error instanceof Error) {
77
+ return this.error(error.name, error.message, error.stack);
78
+ }
79
+ if (typeof error === "object" && error !== null) {
80
+ const record = error;
81
+ const name = typeof record.name === "string" ? record.name : "Error";
82
+ const message = typeof record.message === "string" ? record.message : this.stringifyError(error);
83
+ const stack = typeof record.stack === "string" ? record.stack : void 0;
84
+ return this.error(name, message, stack);
85
+ }
86
+ return this.error("Error", String(error));
87
+ }
88
+ stringifyError(error) {
89
+ try {
90
+ return JSON.stringify(error);
91
+ } catch {
92
+ return String(error);
93
+ }
94
+ }
95
+ error(name, message, stack) {
96
+ return stack ? { name, message, stack } : { name, message };
97
+ }
60
98
  }
61
99
  export {
62
100
  MessageManager as default
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/message/MessageManager.ts"],"sourcesContent":["import {onMessage} from \"@addon-core/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageGlobalKey,\n MessageHandler,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: any) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) {\n return;\n }\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n console.error(\"Message handler error:\", err);\n }\n }\n\n if (results.length > 1) {\n throw new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n );\n }\n\n if (results.length === 1) {\n results[0].then(sendResponse);\n\n return true;\n }\n }\n}\n"],"mappings":"AAAA,SAAQ,iBAAgB;AAExB;AAAA,EAGI;AAAA,OAIG;AAEP,MAAO,eAA0D;AAAA,EACrD,WAAmC,oBAAI,IAAI;AAAA,EAC3C,cAAmC;AAAA,EAE3C,OAAc,cAA8D;AAfhF;AAgBQ,WAAQ,gBAAW,sBAAX,iBAAiC,IAAI,eAAkB;AAAA,EACnE;AAAA,EAEA,cAAc;AACV,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AAAA,EAC3C;AAAA,EAEO,IAAI,SAA4B;AACnC,SAAK,SAAS,IAAI,OAAO;AACzB,SAAK,eAAe;AAAA,EACxB;AAAA,EAEO,OAAO,SAA4B;AACtC,SAAK,SAAS,OAAO,OAAO;AAC5B,SAAK,eAAe;AAAA,EACxB;AAAA,EAEO,QAAQ;AACX,SAAK,WAAW,oBAAI,IAAI;AACxB,SAAK,eAAe;AAAA,EACxB;AAAA,EAEQ,iBAAiB;AACrB,QAAI,KAAK,SAAS,OAAO,KAAK,CAAC,KAAK,aAAa;AAC7C,WAAK,cAAc,UAAU,KAAK,QAAQ;AAAA,IAC9C,WAAW,KAAK,SAAS,SAAS,KAAK,KAAK,aAAa;AACrD,WAAK,YAAY;AACjB,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;AAAA,EAEQ,SACJ,SACA,QACA,cACc;AACd,QAAI,CAAC,WAAW,OAAO,YAAY,YAAY,CAAC,QAAQ,MAAM;AAC1D;AAAA,IACJ;AAEA,UAAM,UAA0B,CAAC;AAEjC,eAAW,WAAW,KAAK,UAAU;AACjC,UAAI;AACA,cAAM,SAAS,QAAQ,IAAI,QAAQ,MAAM,QAAQ,MAAM,MAAM;AAE7D,YAAI,WAAW,QAAW;AACtB,kBAAQ,KAAK,QAAQ,QAAQ,MAAM,CAAC;AAAA,QACxC;AAAA,MACJ,SAAS,KAAK;AACV,gBAAQ,MAAM,0BAA0B,GAAG;AAAA,MAC/C;AAAA,IACJ;AAEA,QAAI,QAAQ,SAAS,GAAG;AACpB,YAAM,IAAI;AAAA,QACN,iBAAiB,QAAQ,IAAI;AAAA,MACjC;AAAA,IACJ;AAEA,QAAI,QAAQ,WAAW,GAAG;AACtB,cAAQ,CAAC,EAAE,KAAK,YAAY;AAE5B,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../src/message/MessageManager.ts"],"sourcesContent":["import {onMessage} from \"@addon-core/browser\";\n\nimport {\n MessageBody,\n MessageDictionary,\n MessageError,\n MessageGlobalKey,\n MessageHandler,\n MessageResult,\n MessageResultEnvelopeProperty,\n MessageSender,\n MessageType,\n} from \"@typing/message\";\n\nexport default class MessageManager<T extends MessageDictionary> {\n private handlers: Set<MessageHandler<T>> = new Set();\n private unsubscribe: (() => void) | null = null;\n\n public static getInstance<T extends MessageDictionary>(): MessageManager<T> {\n return (globalThis[MessageGlobalKey] ??= new MessageManager<T>());\n }\n\n constructor() {\n this.listener = this.listener.bind(this);\n }\n\n public add(handler: MessageHandler<T>) {\n this.handlers.add(handler);\n this.updateListener();\n }\n\n public remove(handler: MessageHandler<T>) {\n this.handlers.delete(handler);\n this.updateListener();\n }\n\n public clear() {\n this.handlers = new Set();\n this.updateListener();\n }\n\n private updateListener() {\n if (this.handlers.size > 0 && !this.unsubscribe) {\n this.unsubscribe = onMessage(this.listener);\n } else if (this.handlers.size === 0 && this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n\n private listener<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n sender: MessageSender,\n sendResponse: (response?: MessageResult) => void\n ): boolean | void {\n if (!message || typeof message !== \"object\" || !message.type) {\n return;\n }\n\n const results: Promise<any>[] = [];\n\n for (const handler of this.handlers) {\n try {\n const result = handler.run(message.type, message.data, sender);\n\n if (result !== undefined) {\n results.push(Promise.resolve(result));\n }\n } catch (err) {\n results.push(Promise.reject(err));\n }\n }\n\n if (results.length > 1) {\n sendResponse(\n this.failure(\n new Error(\n `Message type \"${message.type}\" has multiple handlers returning a response. Only one response is allowed.`\n )\n )\n );\n\n return true;\n }\n\n if (results.length === 1) {\n results[0].then(\n result => sendResponse(this.success(result)),\n error => sendResponse(this.failure(error))\n );\n\n return true;\n }\n }\n\n private success<TData>(payload: TData): MessageResult<TData> {\n return {[MessageResultEnvelopeProperty]: true, ok: true, payload};\n }\n\n private failure(error: unknown): MessageResult<never> {\n return {[MessageResultEnvelopeProperty]: true, ok: false, error: this.serializeError(error)};\n }\n\n private serializeError(error: unknown): MessageError {\n if (error instanceof Error) {\n return this.error(error.name, error.message, error.stack);\n }\n\n if (typeof error === \"object\" && error !== null) {\n const record = error as Record<string, unknown>;\n const name = typeof record.name === \"string\" ? record.name : \"Error\";\n const message = typeof record.message === \"string\" ? record.message : this.stringifyError(error);\n const stack = typeof record.stack === \"string\" ? record.stack : undefined;\n\n return this.error(name, message, stack);\n }\n\n return this.error(\"Error\", String(error));\n }\n\n private stringifyError(error: object): string {\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n }\n\n private error(name: string, message: string, stack?: string): MessageError {\n return stack ? {name, message, stack} : {name, message};\n }\n}\n"],"mappings":"AAAA,SAAQ,iBAAgB;AAExB;AAAA,EAII;AAAA,EAGA;AAAA,OAGG;AAEP,MAAO,eAA0D;AAAA,EACrD,WAAmC,oBAAI,IAAI;AAAA,EAC3C,cAAmC;AAAA,EAE3C,OAAc,cAA8D;AAlBhF;AAmBQ,WAAQ,gBAAW,sBAAX,iBAAiC,IAAI,eAAkB;AAAA,EACnE;AAAA,EAEA,cAAc;AACV,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AAAA,EAC3C;AAAA,EAEO,IAAI,SAA4B;AACnC,SAAK,SAAS,IAAI,OAAO;AACzB,SAAK,eAAe;AAAA,EACxB;AAAA,EAEO,OAAO,SAA4B;AACtC,SAAK,SAAS,OAAO,OAAO;AAC5B,SAAK,eAAe;AAAA,EACxB;AAAA,EAEO,QAAQ;AACX,SAAK,WAAW,oBAAI,IAAI;AACxB,SAAK,eAAe;AAAA,EACxB;AAAA,EAEQ,iBAAiB;AACrB,QAAI,KAAK,SAAS,OAAO,KAAK,CAAC,KAAK,aAAa;AAC7C,WAAK,cAAc,UAAU,KAAK,QAAQ;AAAA,IAC9C,WAAW,KAAK,SAAS,SAAS,KAAK,KAAK,aAAa;AACrD,WAAK,YAAY;AACjB,WAAK,cAAc;AAAA,IACvB;AAAA,EACJ;AAAA,EAEQ,SACJ,SACA,QACA,cACc;AACd,QAAI,CAAC,WAAW,OAAO,YAAY,YAAY,CAAC,QAAQ,MAAM;AAC1D;AAAA,IACJ;AAEA,UAAM,UAA0B,CAAC;AAEjC,eAAW,WAAW,KAAK,UAAU;AACjC,UAAI;AACA,cAAM,SAAS,QAAQ,IAAI,QAAQ,MAAM,QAAQ,MAAM,MAAM;AAE7D,YAAI,WAAW,QAAW;AACtB,kBAAQ,KAAK,QAAQ,QAAQ,MAAM,CAAC;AAAA,QACxC;AAAA,MACJ,SAAS,KAAK;AACV,gBAAQ,KAAK,QAAQ,OAAO,GAAG,CAAC;AAAA,MACpC;AAAA,IACJ;AAEA,QAAI,QAAQ,SAAS,GAAG;AACpB;AAAA,QACI,KAAK;AAAA,UACD,IAAI;AAAA,YACA,iBAAiB,QAAQ,IAAI;AAAA,UACjC;AAAA,QACJ;AAAA,MACJ;AAEA,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,WAAW,GAAG;AACtB,cAAQ,CAAC,EAAE;AAAA,QACP,YAAU,aAAa,KAAK,QAAQ,MAAM,CAAC;AAAA,QAC3C,WAAS,aAAa,KAAK,QAAQ,KAAK,CAAC;AAAA,MAC7C;AAEA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA,EAEQ,QAAe,SAAsC;AACzD,WAAO,EAAC,CAAC,6BAA6B,GAAG,MAAM,IAAI,MAAM,QAAO;AAAA,EACpE;AAAA,EAEQ,QAAQ,OAAsC;AAClD,WAAO,EAAC,CAAC,6BAA6B,GAAG,MAAM,IAAI,OAAO,OAAO,KAAK,eAAe,KAAK,EAAC;AAAA,EAC/F;AAAA,EAEQ,eAAe,OAA8B;AACjD,QAAI,iBAAiB,OAAO;AACxB,aAAO,KAAK,MAAM,MAAM,MAAM,MAAM,SAAS,MAAM,KAAK;AAAA,IAC5D;AAEA,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,YAAM,SAAS;AACf,YAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAC7D,YAAM,UAAU,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU,KAAK,eAAe,KAAK;AAC/F,YAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAEhE,aAAO,KAAK,MAAM,MAAM,SAAS,KAAK;AAAA,IAC1C;AAEA,WAAO,KAAK,MAAM,SAAS,OAAO,KAAK,CAAC;AAAA,EAC5C;AAAA,EAEQ,eAAe,OAAuB;AAC1C,QAAI;AACA,aAAO,KAAK,UAAU,KAAK;AAAA,IAC/B,QAAQ;AACJ,aAAO,OAAO,KAAK;AAAA,IACvB;AAAA,EACJ;AAAA,EAEQ,MAAM,MAAc,SAAiB,OAA8B;AACvE,WAAO,QAAQ,EAAC,MAAM,SAAS,MAAK,IAAI,EAAC,MAAM,QAAO;AAAA,EAC1D;AACJ;","names":[]}
@@ -6,5 +6,12 @@ export default class Message<T extends MessageDictionary> extends AbstractMessag
6
6
  static getInstance<T extends MessageDictionary>(): Message<MessageDictionary>;
7
7
  protected get manager(): MessageManager<T>;
8
8
  send<K extends MessageType<T>>(type: K, data: MessageData<T, K>, options?: MessageSendOptions): Promise<MessageResponse<T, K>>;
9
+ private dispatch;
10
+ private unwrap;
11
+ private isMessageResult;
12
+ private isSerializedError;
13
+ private isRecord;
14
+ private restoreError;
15
+ private getErrorConstructor;
9
16
  watch<K extends MessageType<T>>(arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>, arg2?: MessageTargetHandler<T, K>): () => void;
10
17
  }
@@ -1,5 +1,8 @@
1
1
  import { sendMessage, sendTabMessage } from "@addon-core/browser";
2
2
  import { isBrowser } from "./../../main/env.js";
3
+ import {
4
+ MessageResultEnvelopeProperty
5
+ } from "./../../types/message.js";
3
6
  import { Browser } from "./../../types/browser.js";
4
7
  import AbstractMessage from "./AbstractMessage.js";
5
8
  import MessageManager from "../MessageManager.js";
@@ -12,19 +15,74 @@ class Message extends AbstractMessage {
12
15
  get manager() {
13
16
  return MessageManager.getInstance();
14
17
  }
15
- send(type, data, options) {
18
+ async send(type, data, options) {
16
19
  const message = this.buildMessage(type, data);
17
- if (options) {
18
- if (typeof options === "number") {
19
- return sendTabMessage(options, message);
20
- }
21
- const { tabId, ...other } = options;
22
- if (isBrowser(Browser.Firefox)) {
23
- delete other.documentId;
24
- }
25
- return sendTabMessage(tabId, message, other);
26
- }
27
- return sendMessage(message);
20
+ const response = await this.dispatch(message, options);
21
+ return this.unwrap(response);
22
+ }
23
+ dispatch(message, options) {
24
+ if (options === void 0) {
25
+ return sendMessage(message);
26
+ }
27
+ if (typeof options === "number") {
28
+ return sendTabMessage(options, message);
29
+ }
30
+ const { tabId, ...other } = options;
31
+ if (isBrowser(Browser.Firefox)) {
32
+ delete other.documentId;
33
+ }
34
+ return sendTabMessage(tabId, message, other);
35
+ }
36
+ unwrap(response) {
37
+ if (!this.isMessageResult(response)) {
38
+ return response;
39
+ }
40
+ if (response.ok) {
41
+ return response.payload;
42
+ }
43
+ throw this.restoreError(response.error);
44
+ }
45
+ isMessageResult(response) {
46
+ if (!this.isRecord(response) || response[MessageResultEnvelopeProperty] !== true || typeof response.ok !== "boolean") {
47
+ return false;
48
+ }
49
+ if (response.ok) {
50
+ return "payload" in response;
51
+ }
52
+ return this.isSerializedError(response.error);
53
+ }
54
+ isSerializedError(error) {
55
+ return this.isRecord(error) && typeof error.name === "string" && typeof error.message === "string" && (error.stack === void 0 || typeof error.stack === "string");
56
+ }
57
+ isRecord(value) {
58
+ return typeof value === "object" && value !== null;
59
+ }
60
+ restoreError(error) {
61
+ const ErrorConstructor = this.getErrorConstructor(error.name);
62
+ const restored = new ErrorConstructor(error.message);
63
+ restored.name = error.name || "Error";
64
+ if (error.stack) {
65
+ restored.stack = error.stack;
66
+ }
67
+ return restored;
68
+ }
69
+ getErrorConstructor(name) {
70
+ switch (name) {
71
+ case "EvalError":
72
+ return EvalError;
73
+ case "RangeError":
74
+ return RangeError;
75
+ case "ReferenceError":
76
+ return ReferenceError;
77
+ case "SyntaxError":
78
+ return SyntaxError;
79
+ case "TypeError":
80
+ return TypeError;
81
+ case "URIError":
82
+ return URIError;
83
+ default:
84
+ return Error;
85
+ }
28
86
  }
29
87
  watch(arg1, arg2) {
30
88
  let handler;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/message/providers/Message.ts"],"sourcesContent":["import {sendMessage, sendTabMessage} from \"@addon-core/browser\";\n\nimport {isBrowser} from \"@main/env\";\n\nimport {\n MessageData,\n MessageDictionary,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResponse,\n MessageSendOptions,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\nimport {Browser} from \"@typing/browser\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n\n if (options) {\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n if (isBrowser(Browser.Firefox)) {\n delete other.documentId;\n }\n\n return sendTabMessage(tabId, message, other);\n }\n\n return sendMessage(message);\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n"],"mappings":"AAAA,SAAQ,aAAa,sBAAqB;AAE1C,SAAQ,iBAAgB;AAaxB,SAAQ,eAAc;AAEtB,OAAO,qBAAqB;AAC5B,OAAO,oBAAoB;AAE3B,SAAQ,gBAAgB,YAAY,qBAAoB;AAExD,MAAO,gBAA2D,gBAAuC;AAAA,EACrG,OAAe,WAA8C;AAAA,EAE7D,OAAc,cAA2C;AACrD,WAAQ,KAAK,aAAL,KAAK,WAAa,IAAI,QAAW;AAAA,EAC7C;AAAA,EAEA,IAAc,UAA6B;AACvC,WAAO,eAAe,YAAe;AAAA,EACzC;AAAA,EAEO,KACH,MACA,MACA,SAC8B;AAC9B,UAAM,UAAU,KAAK,aAAa,MAAM,IAAI;AAE5C,QAAI,SAAS;AACT,UAAI,OAAO,YAAY,UAAU;AAC7B,eAAO,eAAe,SAAS,OAAO;AAAA,MAC1C;AAEA,YAAM,EAAC,OAAO,GAAG,MAAK,IAAI;AAE1B,UAAI,UAAU,QAAQ,OAAO,GAAG;AAC5B,eAAO,MAAM;AAAA,MACjB;AAEA,aAAO,eAAe,OAAO,SAAS,KAAK;AAAA,IAC/C;AAEA,WAAO,YAAY,OAAO;AAAA,EAC9B;AAAA,EAEO,MACH,MACA,MACU;AACV,QAAI;AAEJ,QAAI,OAAO,SAAS,YAAY;AAC5B,gBAAU,IAAI,eAAqB,IAAI;AAAA,IAC3C,WAAW,OAAO,SAAS,YAAY,SAAS,QAAW;AACvD,gBAAU,IAAI,WAAc,IAAI;AAAA,IACpC,WAAW,OAAO,SAAS,YAAY,MAAM;AACzC,gBAAU,IAAI,cAAiB,MAAM,IAAI;AAAA,IAC7C,OAAO;AACH,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACzD;AAEA,SAAK,QAAQ,IAAI,OAAO;AAExB,WAAO,MAAM,KAAK,QAAQ,OAAO,OAAO;AAAA,EAC5C;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/message/providers/Message.ts"],"sourcesContent":["import {sendMessage, sendTabMessage} from \"@addon-core/browser\";\n\nimport {isBrowser} from \"@main/env\";\n\nimport {\n MessageBody,\n MessageData,\n MessageDictionary,\n MessageError,\n MessageGeneralHandler,\n MessageHandler,\n MessageMapHandler,\n MessageResult,\n MessageResultEnvelopeProperty,\n MessageResponse,\n MessageSendOptions,\n MessageTargetHandler,\n MessageType,\n} from \"@typing/message\";\nimport {Browser} from \"@typing/browser\";\n\nimport AbstractMessage from \"./AbstractMessage\";\nimport MessageManager from \"../MessageManager\";\n\nimport {GeneralHandler, MapHandler, SingleHandler} from \"../handlers\";\n\nexport default class Message<T extends MessageDictionary> extends AbstractMessage<T, MessageSendOptions> {\n private static instance: Message<MessageDictionary> | null = null;\n\n public static getInstance<T extends MessageDictionary>() {\n return (this.instance ??= new Message<T>());\n }\n\n protected get manager(): MessageManager<T> {\n return MessageManager.getInstance<T>();\n }\n\n public async send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResponse<T, K>> {\n const message = this.buildMessage(type, data);\n const response = await this.dispatch(message, options);\n\n return this.unwrap(response);\n }\n\n private dispatch<K extends MessageType<T>>(\n message: MessageBody<T, K>,\n options?: MessageSendOptions\n ): Promise<MessageResult<MessageResponse<T, K>> | MessageResponse<T, K> | undefined> {\n if (options === undefined) {\n return sendMessage(message);\n }\n\n if (typeof options === \"number\") {\n return sendTabMessage(options, message);\n }\n\n const {tabId, ...other} = options;\n\n if (isBrowser(Browser.Firefox)) {\n delete other.documentId;\n }\n\n return sendTabMessage(tabId, message, other);\n }\n\n private unwrap<K extends MessageType<T>>(\n response: MessageResult<MessageResponse<T, K>> | MessageResponse<T, K> | undefined\n ): MessageResponse<T, K> {\n if (!this.isMessageResult(response)) {\n return response as MessageResponse<T, K>;\n }\n\n if (response.ok) {\n return response.payload;\n }\n\n throw this.restoreError(response.error);\n }\n\n private isMessageResult(response: unknown): response is MessageResult {\n if (\n !this.isRecord(response) ||\n response[MessageResultEnvelopeProperty] !== true ||\n typeof response.ok !== \"boolean\"\n ) {\n return false;\n }\n\n if (response.ok) {\n return \"payload\" in response;\n }\n\n return this.isSerializedError(response.error);\n }\n\n private isSerializedError(error: unknown): error is MessageError {\n return (\n this.isRecord(error) &&\n typeof error.name === \"string\" &&\n typeof error.message === \"string\" &&\n (error.stack === undefined || typeof error.stack === \"string\")\n );\n }\n\n private isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n }\n\n private restoreError(error: MessageError): Error {\n const ErrorConstructor = this.getErrorConstructor(error.name);\n const restored = new ErrorConstructor(error.message);\n\n restored.name = error.name || \"Error\";\n\n if (error.stack) {\n restored.stack = error.stack;\n }\n\n return restored;\n }\n\n private getErrorConstructor(name: string): new (message?: string) => Error {\n switch (name) {\n case \"EvalError\":\n return EvalError;\n case \"RangeError\":\n return RangeError;\n case \"ReferenceError\":\n return ReferenceError;\n case \"SyntaxError\":\n return SyntaxError;\n case \"TypeError\":\n return TypeError;\n case \"URIError\":\n return URIError;\n default:\n return Error;\n }\n }\n\n public watch<K extends MessageType<T>>(\n arg1: K | MessageMapHandler<T> | MessageGeneralHandler<T, K>,\n arg2?: MessageTargetHandler<T, K>\n ): () => void {\n let handler: MessageHandler<T>;\n\n if (typeof arg1 === \"function\") {\n handler = new GeneralHandler<T, K>(arg1);\n } else if (typeof arg1 === \"object\" && arg2 === undefined) {\n handler = new MapHandler<T>(arg1);\n } else if (typeof arg1 === \"string\" && arg2) {\n handler = new SingleHandler<T>(arg1, arg2);\n } else {\n throw new Error(\"Invalid arguments passed to watch()\");\n }\n\n this.manager.add(handler);\n\n return () => this.manager.remove(handler);\n }\n}\n"],"mappings":"AAAA,SAAQ,aAAa,sBAAqB;AAE1C,SAAQ,iBAAgB;AAExB;AAAA,EASI;AAAA,OAKG;AACP,SAAQ,eAAc;AAEtB,OAAO,qBAAqB;AAC5B,OAAO,oBAAoB;AAE3B,SAAQ,gBAAgB,YAAY,qBAAoB;AAExD,MAAO,gBAA2D,gBAAuC;AAAA,EACrG,OAAe,WAA8C;AAAA,EAE7D,OAAc,cAA2C;AACrD,WAAQ,KAAK,aAAL,KAAK,WAAa,IAAI,QAAW;AAAA,EAC7C;AAAA,EAEA,IAAc,UAA6B;AACvC,WAAO,eAAe,YAAe;AAAA,EACzC;AAAA,EAEA,MAAa,KACT,MACA,MACA,SAC8B;AAC9B,UAAM,UAAU,KAAK,aAAa,MAAM,IAAI;AAC5C,UAAM,WAAW,MAAM,KAAK,SAAS,SAAS,OAAO;AAErD,WAAO,KAAK,OAAO,QAAQ;AAAA,EAC/B;AAAA,EAEQ,SACJ,SACA,SACiF;AACjF,QAAI,YAAY,QAAW;AACvB,aAAO,YAAY,OAAO;AAAA,IAC9B;AAEA,QAAI,OAAO,YAAY,UAAU;AAC7B,aAAO,eAAe,SAAS,OAAO;AAAA,IAC1C;AAEA,UAAM,EAAC,OAAO,GAAG,MAAK,IAAI;AAE1B,QAAI,UAAU,QAAQ,OAAO,GAAG;AAC5B,aAAO,MAAM;AAAA,IACjB;AAEA,WAAO,eAAe,OAAO,SAAS,KAAK;AAAA,EAC/C;AAAA,EAEQ,OACJ,UACqB;AACrB,QAAI,CAAC,KAAK,gBAAgB,QAAQ,GAAG;AACjC,aAAO;AAAA,IACX;AAEA,QAAI,SAAS,IAAI;AACb,aAAO,SAAS;AAAA,IACpB;AAEA,UAAM,KAAK,aAAa,SAAS,KAAK;AAAA,EAC1C;AAAA,EAEQ,gBAAgB,UAA8C;AAClE,QACI,CAAC,KAAK,SAAS,QAAQ,KACvB,SAAS,6BAA6B,MAAM,QAC5C,OAAO,SAAS,OAAO,WACzB;AACE,aAAO;AAAA,IACX;AAEA,QAAI,SAAS,IAAI;AACb,aAAO,aAAa;AAAA,IACxB;AAEA,WAAO,KAAK,kBAAkB,SAAS,KAAK;AAAA,EAChD;AAAA,EAEQ,kBAAkB,OAAuC;AAC7D,WACI,KAAK,SAAS,KAAK,KACnB,OAAO,MAAM,SAAS,YACtB,OAAO,MAAM,YAAY,aACxB,MAAM,UAAU,UAAa,OAAO,MAAM,UAAU;AAAA,EAE7D;AAAA,EAEQ,SAAS,OAAkD;AAC/D,WAAO,OAAO,UAAU,YAAY,UAAU;AAAA,EAClD;AAAA,EAEQ,aAAa,OAA4B;AAC7C,UAAM,mBAAmB,KAAK,oBAAoB,MAAM,IAAI;AAC5D,UAAM,WAAW,IAAI,iBAAiB,MAAM,OAAO;AAEnD,aAAS,OAAO,MAAM,QAAQ;AAE9B,QAAI,MAAM,OAAO;AACb,eAAS,QAAQ,MAAM;AAAA,IAC3B;AAEA,WAAO;AAAA,EACX;AAAA,EAEQ,oBAAoB,MAA+C;AACvE,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IACf;AAAA,EACJ;AAAA,EAEO,MACH,MACA,MACU;AACV,QAAI;AAEJ,QAAI,OAAO,SAAS,YAAY;AAC5B,gBAAU,IAAI,eAAqB,IAAI;AAAA,IAC3C,WAAW,OAAO,SAAS,YAAY,SAAS,QAAW;AACvD,gBAAU,IAAI,WAAc,IAAI;AAAA,IACpC,WAAW,OAAO,SAAS,YAAY,MAAM;AACzC,gBAAU,IAAI,cAAiB,MAAM,IAAI;AAAA,IAC7C,OAAO;AACH,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACzD;AAEA,SAAK,QAAQ,IAAI,OAAO;AAExB,WAAO,MAAM,KAAK,QAAQ,OAAO,OAAO;AAAA,EAC5C;AACJ;","names":[]}
@@ -1,5 +1,10 @@
1
1
  import { ProxyOffscreen, RegisterOffscreen } from "./providers/index.js";
2
2
  import OffscreenBackground from "./OffscreenBackground.js";
3
- import { TransportDictionary, TransportName, TransportProxyTarget as OffscreenProxyTarget, TransportTarget as OffscreenTarget } from "../types/transport.js";
4
- export { type OffscreenTarget, type OffscreenProxyTarget, ProxyOffscreen, RegisterOffscreen, OffscreenBackground };
5
- export declare const getOffscreen: <N extends TransportName>(name: N) => TransportDictionary[N];
3
+ import type { TransportProxyTarget, TransportTarget } from "../transport/index.js";
4
+ export { ProxyOffscreen, RegisterOffscreen, OffscreenBackground };
5
+ export interface OffscreenRegistry {
6
+ }
7
+ export type OffscreenName = Extract<keyof OffscreenRegistry, string>;
8
+ export type OffscreenTarget<N extends keyof OffscreenRegistry> = TransportTarget<OffscreenRegistry, N>;
9
+ export type OffscreenProxyTarget<N extends keyof OffscreenRegistry> = TransportProxyTarget<OffscreenRegistry, N>;
10
+ export declare const getOffscreen: <N extends OffscreenName>(name: N) => OffscreenTarget<N>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/offscreen/index.ts"],"sourcesContent":["import {Offscreen, ProxyOffscreen, RegisterOffscreen} from \"./providers\";\nimport OffscreenBackground from \"./OffscreenBackground\";\n\nimport {\n TransportDictionary,\n TransportName,\n TransportProxyTarget as OffscreenProxyTarget,\n TransportTarget as OffscreenTarget,\n} from \"@typing/transport\";\n\nexport {type OffscreenTarget, type OffscreenProxyTarget, ProxyOffscreen, RegisterOffscreen, OffscreenBackground};\n\nexport const getOffscreen = <N extends TransportName>(name: N): TransportDictionary[N] => {\n return new Offscreen<N>(name).get();\n};\n"],"mappings":"AAAA,SAAQ,WAAW,gBAAgB,yBAAwB;AAC3D,OAAO,yBAAyB;AAWzB,MAAM,eAAe,CAA0B,SAAoC;AACtF,SAAO,IAAI,UAAa,IAAI,EAAE,IAAI;AACtC;","names":[]}
1
+ {"version":3,"sources":["../../src/offscreen/index.ts"],"sourcesContent":["import {Offscreen, ProxyOffscreen, RegisterOffscreen} from \"./providers\";\nimport OffscreenBackground from \"./OffscreenBackground\";\n\nimport type {TransportProxyTarget, TransportTarget} from \"@transport/index\";\n\nexport {ProxyOffscreen, RegisterOffscreen, OffscreenBackground};\n\nexport interface OffscreenRegistry {}\n\nexport type OffscreenName = Extract<keyof OffscreenRegistry, string>;\n\nexport type OffscreenTarget<N extends keyof OffscreenRegistry> = TransportTarget<OffscreenRegistry, N>;\n\nexport type OffscreenProxyTarget<N extends keyof OffscreenRegistry> = TransportProxyTarget<OffscreenRegistry, N>;\n\nexport const getOffscreen = <N extends OffscreenName>(name: N): OffscreenTarget<N> => {\n return new Offscreen<N>(name).get();\n};\n"],"mappings":"AAAA,SAAQ,WAAW,gBAAgB,yBAAwB;AAC3D,OAAO,yBAAyB;AAczB,MAAM,eAAe,CAA0B,SAAgC;AAClF,SAAO,IAAI,UAAa,IAAI,EAAE,IAAI;AACtC;","names":[]}
@@ -1,4 +1,9 @@
1
1
  import { ProxyRelay, RegisterRelay, type ProxyRelayParams } from "./providers/index.js";
2
- import type { TransportDictionary, TransportName, TransportProxyTarget as RelayProxyTarget, TransportTarget as RelayTarget } from "../types/transport.js";
3
- export { type RelayTarget, type RelayProxyTarget, type ProxyRelayParams, ProxyRelay, RegisterRelay };
4
- export declare const getRelay: <N extends TransportName>(name: N) => TransportDictionary[N];
2
+ import type { TransportProxyTarget, TransportTarget } from "../transport/index.js";
3
+ export { type ProxyRelayParams, ProxyRelay, RegisterRelay };
4
+ export interface RelayRegistry {
5
+ }
6
+ export type RelayName = Extract<keyof RelayRegistry, string>;
7
+ export type RelayTarget<N extends keyof RelayRegistry> = TransportTarget<RelayRegistry, N>;
8
+ export type RelayProxyTarget<N extends keyof RelayRegistry> = TransportProxyTarget<RelayRegistry, N>;
9
+ export declare const getRelay: <N extends RelayName>(name: N) => RelayTarget<N>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/relay/index.ts"],"sourcesContent":["import {ProxyRelay, RegisterRelay, Relay, type ProxyRelayParams} from \"./providers\";\n\nimport type {\n TransportDictionary,\n TransportName,\n TransportProxyTarget as RelayProxyTarget,\n TransportTarget as RelayTarget,\n} from \"@typing/transport\";\n\nexport {type RelayTarget, type RelayProxyTarget, type ProxyRelayParams, ProxyRelay, RegisterRelay};\n\nexport const getRelay = <N extends TransportName>(name: N): TransportDictionary[N] => {\n return new Relay<N>(name).get();\n};\n"],"mappings":"AAAA,SAAQ,YAAY,eAAe,aAAmC;AAW/D,MAAM,WAAW,CAA0B,SAAoC;AAClF,SAAO,IAAI,MAAS,IAAI,EAAE,IAAI;AAClC;","names":[]}
1
+ {"version":3,"sources":["../../src/relay/index.ts"],"sourcesContent":["import {ProxyRelay, RegisterRelay, Relay, type ProxyRelayParams} from \"./providers\";\n\nimport type {TransportProxyTarget, TransportTarget} from \"@transport/index\";\n\nexport {type ProxyRelayParams, ProxyRelay, RegisterRelay};\n\nexport interface RelayRegistry {}\n\nexport type RelayName = Extract<keyof RelayRegistry, string>;\n\nexport type RelayTarget<N extends keyof RelayRegistry> = TransportTarget<RelayRegistry, N>;\n\nexport type RelayProxyTarget<N extends keyof RelayRegistry> = TransportProxyTarget<RelayRegistry, N>;\n\nexport const getRelay = <N extends RelayName>(name: N): RelayTarget<N> => {\n return new Relay<N>(name).get();\n};\n"],"mappings":"AAAA,SAAQ,YAAY,eAAe,aAAmC;AAc/D,MAAM,WAAW,CAAsB,SAA4B;AACtE,SAAO,IAAI,MAAS,IAAI,EAAE,IAAI;AAClC;","names":[]}
@@ -1,4 +1,9 @@
1
1
  import { ProxyService, RegisterService } from "./providers/index.js";
2
- import type { TransportDictionary, TransportName, TransportProxyTarget as ServiceProxyTarget, TransportTarget as ServiceTarget } from "../types/transport.js";
3
- export { type ServiceTarget, type ServiceProxyTarget, ProxyService, RegisterService };
4
- export declare const getService: <N extends TransportName>(name: N) => TransportDictionary[N];
2
+ import type { TransportProxyTarget, TransportTarget } from "../transport/index.js";
3
+ export { ProxyService, RegisterService };
4
+ export interface ServiceRegistry {
5
+ }
6
+ export type ServiceName = Extract<keyof ServiceRegistry, string>;
7
+ export type ServiceTarget<N extends keyof ServiceRegistry> = TransportTarget<ServiceRegistry, N>;
8
+ export type ServiceProxyTarget<N extends keyof ServiceRegistry> = TransportProxyTarget<ServiceRegistry, N>;
9
+ export declare const getService: <N extends ServiceName>(name: N) => ServiceTarget<N>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/service/index.ts"],"sourcesContent":["import {ProxyService, RegisterService, Service} from \"./providers\";\n\nimport type {\n TransportDictionary,\n TransportName,\n TransportProxyTarget as ServiceProxyTarget,\n TransportTarget as ServiceTarget,\n} from \"@typing/transport\";\n\nexport {type ServiceTarget, type ServiceProxyTarget, ProxyService, RegisterService};\n\nexport const getService = <N extends TransportName>(name: N): TransportDictionary[N] => {\n return new Service<N>(name).get();\n};\n"],"mappings":"AAAA,SAAQ,cAAc,iBAAiB,eAAc;AAW9C,MAAM,aAAa,CAA0B,SAAoC;AACpF,SAAO,IAAI,QAAW,IAAI,EAAE,IAAI;AACpC;","names":[]}
1
+ {"version":3,"sources":["../../src/service/index.ts"],"sourcesContent":["import {ProxyService, RegisterService, Service} from \"./providers\";\n\nimport type {TransportProxyTarget, TransportTarget} from \"@transport/index\";\n\nexport {ProxyService, RegisterService};\n\nexport interface ServiceRegistry {}\n\nexport type ServiceName = Extract<keyof ServiceRegistry, string>;\n\nexport type ServiceTarget<N extends keyof ServiceRegistry> = TransportTarget<ServiceRegistry, N>;\n\nexport type ServiceProxyTarget<N extends keyof ServiceRegistry> = TransportProxyTarget<ServiceRegistry, N>;\n\nexport const getService = <N extends ServiceName>(name: N): ServiceTarget<N> => {\n return new Service<N>(name).get();\n};\n"],"mappings":"AAAA,SAAQ,cAAc,iBAAiB,eAAc;AAc9C,MAAM,aAAa,CAAwB,SAA8B;AAC5E,SAAO,IAAI,QAAW,IAAI,EAAE,IAAI;AACpC;","names":[]}
@@ -1 +1,4 @@
1
- export type { TransportDefinition, TransportResolvedDefinition, TransportUnresolvedDefinition, TransportName, TransportType, TransportOptions, } from "../types/transport.js";
1
+ import type { DeepAsyncProxy } from "../types/helpers.js";
2
+ export type TransportTarget<T extends object, K extends keyof T> = T[K];
3
+ export type TransportProxyTarget<T extends object, K extends keyof T> = DeepAsyncProxy<T[K]>;
4
+ export type { TransportDefinition, TransportResolvedDefinition, TransportUnresolvedDefinition, TransportType, TransportOptions, } from "../types/transport.js";
@@ -1,6 +1,7 @@
1
1
  export declare const MessageGlobalKey = "adnbnMessage";
2
2
  export declare const MessageTypeSeparator = ":";
3
3
  export declare const MessageSenderProperty = "$sender";
4
+ export declare const MessageResultEnvelopeProperty = "__adnbnEnvelope";
4
5
  export type MessageSender = chrome.runtime.MessageSender;
5
6
  export type MessageSendOptions = number | {
6
7
  tabId: number;
@@ -13,6 +14,20 @@ export interface MessageDictionary {
13
14
  export interface MessageSenderAware {
14
15
  readonly [MessageSenderProperty]?: MessageSender;
15
16
  }
17
+ export interface MessageError {
18
+ name: string;
19
+ message: string;
20
+ stack?: string;
21
+ }
22
+ export type MessageResult<T = any> = {
23
+ readonly [MessageResultEnvelopeProperty]: true;
24
+ ok: true;
25
+ payload: T;
26
+ } | {
27
+ readonly [MessageResultEnvelopeProperty]: true;
28
+ ok: false;
29
+ error: MessageError;
30
+ };
16
31
  export type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;
17
32
  export type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];
18
33
  export type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;
@@ -1,8 +1,10 @@
1
1
  const MessageGlobalKey = "adnbnMessage";
2
2
  const MessageTypeSeparator = ":";
3
3
  const MessageSenderProperty = "$sender";
4
+ const MessageResultEnvelopeProperty = "__adnbnEnvelope";
4
5
  export {
5
6
  MessageGlobalKey,
7
+ MessageResultEnvelopeProperty,
6
8
  MessageSenderProperty,
7
9
  MessageTypeSeparator
8
10
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/message.ts"],"sourcesContent":["export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport const MessageSenderProperty = \"$sender\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n readonly [MessageSenderProperty]?: MessageSender;\n}\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined | null;\n}\n"],"mappings":"AAAO,MAAM,mBAAmB;AAEzB,MAAM,uBAAuB;AAE7B,MAAM,wBAAwB;","names":[]}
1
+ {"version":3,"sources":["../../src/types/message.ts"],"sourcesContent":["export const MessageGlobalKey = \"adnbnMessage\";\n\nexport const MessageTypeSeparator = \":\";\n\nexport const MessageSenderProperty = \"$sender\";\n\nexport const MessageResultEnvelopeProperty = \"__adnbnEnvelope\";\n\nexport type MessageSender = chrome.runtime.MessageSender;\n\nexport type MessageSendOptions = number | {tabId: number; frameId?: number; documentId?: string};\n\nexport interface MessageDictionary {\n [key: string]: (data: any) => any;\n}\n\nexport interface MessageSenderAware {\n readonly [MessageSenderProperty]?: MessageSender;\n}\n\nexport interface MessageError {\n name: string;\n message: string;\n stack?: string;\n}\n\nexport type MessageResult<T = any> =\n | {readonly [MessageResultEnvelopeProperty]: true; ok: true; payload: T}\n | {readonly [MessageResultEnvelopeProperty]: true; ok: false; error: MessageError};\n\nexport type MessageType<T extends MessageDictionary> = Extract<keyof T, string>;\nexport type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0];\nexport type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>;\n\nexport type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n data: MessageData<T, K>,\n sender: MessageSender\n) => MessageResponse<T, K>;\nexport type MessageMapHandler<T extends MessageDictionary> = {[K in MessageType<T>]?: MessageTargetHandler<T, K>};\nexport type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (\n type: K,\n data: MessageData<T, K>,\n sender: MessageSender\n) => any;\n\nexport interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> {\n id: string;\n type: K;\n data: MessageData<T, K>;\n timestamp: number;\n}\n\nexport interface MessageProvider<T extends MessageDictionary, TOptions = void> {\n send<K extends MessageType<T>>(\n type: K,\n data: MessageData<T, K>,\n options?: TOptions\n ): Promise<MessageResponse<T, K>>;\n\n watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void;\n\n watch(map: MessageMapHandler<T>): () => void;\n\n watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void;\n}\n\nexport interface MessageHandler<T extends MessageDictionary> {\n run(\n type: MessageType<T>,\n data: MessageData<T, MessageType<T>>,\n sender: MessageSender\n ): MessageResponse<T, MessageType<T>> | undefined | null;\n}\n"],"mappings":"AAAO,MAAM,mBAAmB;AAEzB,MAAM,uBAAuB;AAE7B,MAAM,wBAAwB;AAE9B,MAAM,gCAAgC;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "adnbn",
3
3
  "type": "module",
4
- "version": "0.6.0",
4
+ "version": "0.6.1",
5
5
  "description": "Addon Bone - Cross-browser web extension framework with shared code base",
6
6
  "homepage": "https://addonbone.com",
7
7
  "author": "Anjey Tsibylskij (https://github.com/atldays)",