adnbn 0.7.1 → 0.9.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.
Files changed (135) hide show
  1. package/dist/cli/builders/locale/LocaleStructureValidator.js +7 -0
  2. package/dist/cli/builders/locale/LocaleStructureValidator.js.map +1 -1
  3. package/dist/cli/bundler/plugins/GenerateJsonPlugin.js +3 -7
  4. package/dist/cli/bundler/plugins/GenerateJsonPlugin.js.map +1 -1
  5. package/dist/cli/entrypoint/file/injectors/core.js +9 -1
  6. package/dist/cli/entrypoint/file/injectors/core.js.map +1 -1
  7. package/dist/cli/entrypoint/finder/AbstractAssetFinder.js +22 -11
  8. package/dist/cli/entrypoint/finder/AbstractAssetFinder.js.map +1 -1
  9. package/dist/cli/entrypoint/finder/AbstractEntrypointFinder.js +7 -0
  10. package/dist/cli/entrypoint/finder/AbstractEntrypointFinder.js.map +1 -1
  11. package/dist/cli/entrypoint/finder/AbstractFinder.d.ts +0 -2
  12. package/dist/cli/entrypoint/finder/AbstractFinder.js +5 -25
  13. package/dist/cli/entrypoint/finder/AbstractFinder.js.map +1 -1
  14. package/dist/cli/entrypoint/finder/AbstractViewFinder.js +3 -4
  15. package/dist/cli/entrypoint/finder/AbstractViewFinder.js.map +1 -1
  16. package/dist/cli/entrypoint/finder/AssetPluginFinder.js +14 -1
  17. package/dist/cli/entrypoint/finder/AssetPluginFinder.js.map +1 -1
  18. package/dist/cli/entrypoint/finder/LocaleFinder.d.ts +2 -0
  19. package/dist/cli/entrypoint/finder/LocaleFinder.js +27 -0
  20. package/dist/cli/entrypoint/finder/LocaleFinder.js.map +1 -1
  21. package/dist/cli/entrypoint/finder/PluginFinder.js +12 -3
  22. package/dist/cli/entrypoint/finder/PluginFinder.js.map +1 -1
  23. package/dist/cli/entrypoint/finder/ViewCspFinder.d.ts +2 -0
  24. package/dist/cli/entrypoint/finder/ViewCspFinder.js +13 -6
  25. package/dist/cli/entrypoint/finder/ViewCspFinder.js.map +1 -1
  26. package/dist/cli/entrypoint/finder/utils/filePrecedence.d.ts +35 -0
  27. package/dist/cli/entrypoint/finder/utils/filePrecedence.js +64 -0
  28. package/dist/cli/entrypoint/finder/utils/filePrecedence.js.map +1 -0
  29. package/dist/cli/entrypoint/parser/ContentParser.d.ts +2 -2
  30. package/dist/cli/entrypoint/parser/ContentParser.js.map +1 -1
  31. package/dist/cli/entrypoint/parser/RelayParser.js +2 -1
  32. package/dist/cli/entrypoint/parser/RelayParser.js.map +1 -1
  33. package/dist/cli/index.js +2 -0
  34. package/dist/cli/index.js.map +1 -1
  35. package/dist/cli/plugins/content/ContentDriver.d.ts +21 -8
  36. package/dist/cli/plugins/content/ContentDriver.js +24 -2
  37. package/dist/cli/plugins/content/ContentDriver.js.map +1 -1
  38. package/dist/cli/plugins/content/ContentManager.d.ts +8 -3
  39. package/dist/cli/plugins/content/ContentManager.js +41 -6
  40. package/dist/cli/plugins/content/ContentManager.js.map +1 -1
  41. package/dist/cli/plugins/content/Relay.d.ts +6 -8
  42. package/dist/cli/plugins/content/Relay.js +2 -14
  43. package/dist/cli/plugins/content/Relay.js.map +1 -1
  44. package/dist/cli/plugins/content/RelayDeclaration.d.ts +0 -1
  45. package/dist/cli/plugins/content/RelayDeclaration.js +0 -3
  46. package/dist/cli/plugins/content/RelayDeclaration.js.map +1 -1
  47. package/dist/cli/plugins/content/RelayDriver.d.ts +10 -0
  48. package/dist/cli/plugins/content/RelayDriver.js +39 -0
  49. package/dist/cli/plugins/content/RelayDriver.js.map +1 -0
  50. package/dist/cli/plugins/content/index.js +1 -10
  51. package/dist/cli/plugins/content/index.js.map +1 -1
  52. package/dist/cli/plugins/content/types.d.ts +3 -0
  53. package/dist/cli/plugins/locale/Locale.js +5 -1
  54. package/dist/cli/plugins/locale/Locale.js.map +1 -1
  55. package/dist/cli/plugins/locale/declaration/LocaleDeclaration.js +2 -3
  56. package/dist/cli/plugins/locale/declaration/LocaleDeclaration.js.map +1 -1
  57. package/dist/cli/plugins/locale/declaration/locale.d.ts +3 -124
  58. package/dist/cli/virtual/index.js +2 -2
  59. package/dist/cli/virtual/virtual.d.ts +52 -147
  60. package/dist/entry/relay/index.d.ts +2 -1
  61. package/dist/entry/relay/index.js.map +1 -1
  62. package/dist/locale/adapters/react/LocaleProvider.js +2 -0
  63. package/dist/locale/adapters/react/LocaleProvider.js.map +1 -1
  64. package/dist/locale/adapters/react/context.d.ts +1 -0
  65. package/dist/locale/adapters/react/context.js +3 -2
  66. package/dist/locale/adapters/react/context.js.map +1 -1
  67. package/dist/locale/helpers.js.map +1 -1
  68. package/dist/locale/providers/AbstractLocale.d.ts +2 -0
  69. package/dist/locale/providers/AbstractLocale.js +5 -0
  70. package/dist/locale/providers/AbstractLocale.js.map +1 -1
  71. package/dist/locale/providers/NativeLocale.d.ts +3 -2
  72. package/dist/locale/providers/NativeLocale.js +1 -1
  73. package/dist/locale/providers/NativeLocale.js.map +1 -1
  74. package/dist/main/relay.d.ts +7 -6
  75. package/dist/main/relay.js +12 -5
  76. package/dist/main/relay.js.map +1 -1
  77. package/dist/message/error.d.ts +6 -0
  78. package/dist/message/error.js +21 -0
  79. package/dist/message/error.js.map +1 -1
  80. package/dist/message/index.d.ts +2 -1
  81. package/dist/message/index.js +2 -0
  82. package/dist/message/index.js.map +1 -1
  83. package/dist/message/providers/Message.d.ts +3 -0
  84. package/dist/message/providers/Message.js +36 -6
  85. package/dist/message/providers/Message.js.map +1 -1
  86. package/dist/offscreen/providers/ProxyOffscreen.d.ts +2 -2
  87. package/dist/offscreen/providers/ProxyOffscreen.js.map +1 -1
  88. package/dist/relay/RelayPermission.d.ts +6 -3
  89. package/dist/relay/RelayPermission.js +28 -12
  90. package/dist/relay/RelayPermission.js.map +1 -1
  91. package/dist/relay/adapters/RelayAdapter.d.ts +8 -0
  92. package/dist/relay/adapters/RelayAdapter.js +16 -0
  93. package/dist/relay/adapters/RelayAdapter.js.map +1 -0
  94. package/dist/relay/adapters/RelayMessagingAdapter.d.ts +11 -0
  95. package/dist/relay/adapters/RelayMessagingAdapter.js +91 -0
  96. package/dist/relay/adapters/RelayMessagingAdapter.js.map +1 -0
  97. package/dist/relay/adapters/RelayScriptingAdapter.d.ts +15 -0
  98. package/dist/relay/adapters/RelayScriptingAdapter.js +170 -0
  99. package/dist/relay/adapters/RelayScriptingAdapter.js.map +1 -0
  100. package/dist/relay/discovery/RelayDiscovery.d.ts +10 -0
  101. package/dist/relay/discovery/RelayDiscovery.js +62 -0
  102. package/dist/relay/discovery/RelayDiscovery.js.map +1 -0
  103. package/dist/relay/index.d.ts +1 -4
  104. package/dist/relay/index.js +1 -3
  105. package/dist/relay/index.js.map +1 -1
  106. package/dist/relay/providers/ProxyRelay.d.ts +20 -17
  107. package/dist/relay/providers/ProxyRelay.js +79 -52
  108. package/dist/relay/providers/ProxyRelay.js.map +1 -1
  109. package/dist/relay/providers/RegisterRelay.js +1 -2
  110. package/dist/relay/providers/RegisterRelay.js.map +1 -1
  111. package/dist/relay/result.d.ts +12 -0
  112. package/dist/relay/result.js +88 -0
  113. package/dist/relay/result.js.map +1 -0
  114. package/dist/sandbox/index.d.ts +2 -2
  115. package/dist/sandbox/index.js.map +1 -1
  116. package/dist/sandbox/providers/ProxySandbox.d.ts +2 -2
  117. package/dist/sandbox/providers/ProxySandbox.js.map +1 -1
  118. package/dist/service/providers/ProxyService.d.ts +2 -2
  119. package/dist/service/providers/ProxyService.js.map +1 -1
  120. package/dist/transport/ProxyTransport.d.ts +2 -2
  121. package/dist/transport/ProxyTransport.js.map +1 -1
  122. package/dist/transport/index.d.ts +3 -2
  123. package/dist/types/config.d.ts +8 -0
  124. package/dist/types/helpers.d.ts +0 -4
  125. package/dist/types/locale.d.ts +3 -0
  126. package/dist/types/locale.js +58 -0
  127. package/dist/types/locale.js.map +1 -1
  128. package/dist/types/relay.d.ts +130 -3
  129. package/dist/types/relay.js +16 -0
  130. package/dist/types/relay.js.map +1 -1
  131. package/dist/types/rpc.d.ts +4 -0
  132. package/dist/types/rpc.js +1 -0
  133. package/dist/types/rpc.js.map +1 -0
  134. package/dist/types/transport.d.ts +3 -2
  135. package/package.json +5 -4
@@ -0,0 +1,88 @@
1
+ import { serializeError } from "./../message/error.js";
2
+ import { InjectScriptTargetErrorKind } from "@addon-core/inject-script";
3
+ import {
4
+ RelayFrameErrorKind
5
+ } from "./../types/relay.js";
6
+ class RelayFrameTimeoutError extends Error {
7
+ constructor(timeoutMs) {
8
+ super(`Relay frame did not respond within ${timeoutMs}ms.`);
9
+ this.timeoutMs = timeoutMs;
10
+ this.name = "RelayFrameTimeoutError";
11
+ }
12
+ timeoutMs;
13
+ }
14
+ const fulfilledRelayFrame = (target, result) => ({
15
+ target,
16
+ status: "fulfilled",
17
+ result
18
+ });
19
+ const rejectedRelayFrame = (target, error, kind) => ({
20
+ target,
21
+ status: "rejected",
22
+ error: {
23
+ kind,
24
+ ...serializeError(error)
25
+ }
26
+ });
27
+ const messageErrorKind = (error) => {
28
+ const message = error instanceof Error ? error.message : String(error);
29
+ if (/receiving end does not exist|no matching message handler|frame.*(?:removed|not found)|no frame with id|invalid frame id/i.test(
30
+ message
31
+ )) {
32
+ return RelayFrameErrorKind.TargetGone;
33
+ }
34
+ return RelayFrameErrorKind.Delivery;
35
+ };
36
+ const injectScriptErrorKind = (kind) => {
37
+ switch (kind) {
38
+ case InjectScriptTargetErrorKind.Execution:
39
+ return RelayFrameErrorKind.Execution;
40
+ case InjectScriptTargetErrorKind.Delivery:
41
+ return RelayFrameErrorKind.Delivery;
42
+ case InjectScriptTargetErrorKind.Timeout:
43
+ return RelayFrameErrorKind.Timeout;
44
+ case InjectScriptTargetErrorKind.TargetGone:
45
+ return RelayFrameErrorKind.TargetGone;
46
+ case InjectScriptTargetErrorKind.Unobservable:
47
+ return RelayFrameErrorKind.Unobservable;
48
+ default:
49
+ throw new TypeError(`Unsupported Inject Script target error kind: ${kind}`);
50
+ }
51
+ };
52
+ const withRelayTimeout = (promise, timeoutMs) => {
53
+ if (timeoutMs === void 0) {
54
+ return promise;
55
+ }
56
+ return new Promise((resolve, reject) => {
57
+ const timeout = setTimeout(() => reject(new RelayFrameTimeoutError(timeoutMs)), timeoutMs);
58
+ promise.then(
59
+ (result) => {
60
+ clearTimeout(timeout);
61
+ resolve(result);
62
+ },
63
+ (error) => {
64
+ clearTimeout(timeout);
65
+ reject(error);
66
+ }
67
+ );
68
+ });
69
+ };
70
+ const sortRelayFrameResults = (results) => {
71
+ return [...results].sort((a, b) => {
72
+ const frameDifference = (a.target.frameId ?? Number.MAX_SAFE_INTEGER) - (b.target.frameId ?? Number.MAX_SAFE_INTEGER);
73
+ if (frameDifference !== 0) {
74
+ return frameDifference;
75
+ }
76
+ return (a.target.documentId ?? "").localeCompare(b.target.documentId ?? "");
77
+ });
78
+ };
79
+ export {
80
+ RelayFrameTimeoutError,
81
+ fulfilledRelayFrame,
82
+ injectScriptErrorKind,
83
+ messageErrorKind,
84
+ rejectedRelayFrame,
85
+ sortRelayFrameResults,
86
+ withRelayTimeout
87
+ };
88
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/relay/result.ts"],"sourcesContent":["import {serializeError} from \"@message/error\";\n\nimport {InjectScriptTargetErrorKind} from \"@addon-core/inject-script\";\n\nimport {\n RelayFrameErrorKind,\n type RelayFrameResult,\n type RelayFramesResult,\n type RelayResultTarget,\n} from \"@typing/relay\";\n\nexport class RelayFrameTimeoutError extends Error {\n public constructor(public readonly timeoutMs: number) {\n super(`Relay frame did not respond within ${timeoutMs}ms.`);\n this.name = \"RelayFrameTimeoutError\";\n }\n}\n\nexport const fulfilledRelayFrame = <T>(target: RelayResultTarget, result: T): RelayFrameResult<T> => ({\n target,\n status: \"fulfilled\",\n result,\n});\n\nexport const rejectedRelayFrame = <T>(\n target: RelayResultTarget,\n error: unknown,\n kind: RelayFrameErrorKind\n): RelayFrameResult<T> => ({\n target,\n status: \"rejected\",\n error: {\n kind,\n ...serializeError(error),\n },\n});\n\nexport const messageErrorKind = (error: unknown): RelayFrameErrorKind => {\n const message = error instanceof Error ? error.message : String(error);\n\n if (\n /receiving end does not exist|no matching message handler|frame.*(?:removed|not found)|no frame with id|invalid frame id/i.test(\n message\n )\n ) {\n return RelayFrameErrorKind.TargetGone;\n }\n\n return RelayFrameErrorKind.Delivery;\n};\n\nexport const injectScriptErrorKind = (kind: `${InjectScriptTargetErrorKind}`): RelayFrameErrorKind => {\n switch (kind) {\n case InjectScriptTargetErrorKind.Execution:\n return RelayFrameErrorKind.Execution;\n case InjectScriptTargetErrorKind.Delivery:\n return RelayFrameErrorKind.Delivery;\n case InjectScriptTargetErrorKind.Timeout:\n return RelayFrameErrorKind.Timeout;\n case InjectScriptTargetErrorKind.TargetGone:\n return RelayFrameErrorKind.TargetGone;\n case InjectScriptTargetErrorKind.Unobservable:\n return RelayFrameErrorKind.Unobservable;\n default:\n throw new TypeError(`Unsupported Inject Script target error kind: ${kind}`);\n }\n};\n\nexport const withRelayTimeout = <T>(promise: Promise<T>, timeoutMs?: number): Promise<T> => {\n if (timeoutMs === undefined) {\n return promise;\n }\n\n return new Promise<T>((resolve, reject) => {\n const timeout = setTimeout(() => reject(new RelayFrameTimeoutError(timeoutMs)), timeoutMs);\n\n promise.then(\n result => {\n clearTimeout(timeout);\n resolve(result);\n },\n error => {\n clearTimeout(timeout);\n reject(error);\n }\n );\n });\n};\n\nexport const sortRelayFrameResults = <T>(results: RelayFramesResult<T>): RelayFramesResult<T> => {\n return [...results].sort((a, b) => {\n const frameDifference =\n (a.target.frameId ?? Number.MAX_SAFE_INTEGER) - (b.target.frameId ?? Number.MAX_SAFE_INTEGER);\n\n if (frameDifference !== 0) {\n return frameDifference;\n }\n\n return (a.target.documentId ?? \"\").localeCompare(b.target.documentId ?? \"\");\n });\n};\n"],"mappings":"AAAA,SAAQ,sBAAqB;AAE7B,SAAQ,mCAAkC;AAE1C;AAAA,EACI;AAAA,OAIG;AAEA,MAAM,+BAA+B,MAAM;AAAA,EACvC,YAA4B,WAAmB;AAClD,UAAM,sCAAsC,SAAS,KAAK;AAD3B;AAE/B,SAAK,OAAO;AAAA,EAChB;AAAA,EAHmC;AAIvC;AAEO,MAAM,sBAAsB,CAAI,QAA2B,YAAoC;AAAA,EAClG;AAAA,EACA,QAAQ;AAAA,EACR;AACJ;AAEO,MAAM,qBAAqB,CAC9B,QACA,OACA,UACuB;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AAAA,IACH;AAAA,IACA,GAAG,eAAe,KAAK;AAAA,EAC3B;AACJ;AAEO,MAAM,mBAAmB,CAAC,UAAwC;AACrE,QAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAErE,MACI,2HAA2H;AAAA,IACvH;AAAA,EACJ,GACF;AACE,WAAO,oBAAoB;AAAA,EAC/B;AAEA,SAAO,oBAAoB;AAC/B;AAEO,MAAM,wBAAwB,CAAC,SAAgE;AAClG,UAAQ,MAAM;AAAA,IACV,KAAK,4BAA4B;AAC7B,aAAO,oBAAoB;AAAA,IAC/B,KAAK,4BAA4B;AAC7B,aAAO,oBAAoB;AAAA,IAC/B,KAAK,4BAA4B;AAC7B,aAAO,oBAAoB;AAAA,IAC/B,KAAK,4BAA4B;AAC7B,aAAO,oBAAoB;AAAA,IAC/B,KAAK,4BAA4B;AAC7B,aAAO,oBAAoB;AAAA,IAC/B;AACI,YAAM,IAAI,UAAU,gDAAgD,IAAI,EAAE;AAAA,EAClF;AACJ;AAEO,MAAM,mBAAmB,CAAI,SAAqB,cAAmC;AACxF,MAAI,cAAc,QAAW;AACzB,WAAO;AAAA,EACX;AAEA,SAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AACvC,UAAM,UAAU,WAAW,MAAM,OAAO,IAAI,uBAAuB,SAAS,CAAC,GAAG,SAAS;AAEzF,YAAQ;AAAA,MACJ,YAAU;AACN,qBAAa,OAAO;AACpB,gBAAQ,MAAM;AAAA,MAClB;AAAA,MACA,WAAS;AACL,qBAAa,OAAO;AACpB,eAAO,KAAK;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAEO,MAAM,wBAAwB,CAAI,YAAwD;AAC7F,SAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM;AAC/B,UAAM,mBACD,EAAE,OAAO,WAAW,OAAO,qBAAqB,EAAE,OAAO,WAAW,OAAO;AAEhF,QAAI,oBAAoB,GAAG;AACvB,aAAO;AAAA,IACX;AAEA,YAAQ,EAAE,OAAO,cAAc,IAAI,cAAc,EAAE,OAAO,cAAc,EAAE;AAAA,EAC9E,CAAC;AACL;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import { ProxySandbox, RegisterSandbox } from "./providers/index.js";
2
- import type { DeepAsyncProxy } from "../types/helpers.js";
2
+ import type { RpcAsyncProxy } from "../types/rpc.js";
3
3
  export { ProxySandbox, RegisterSandbox };
4
4
  export interface SandboxRegistry {
5
5
  }
6
6
  export type SandboxName = Extract<keyof SandboxRegistry, string>;
7
- export type SandboxProxyTarget<N extends keyof SandboxRegistry> = DeepAsyncProxy<SandboxRegistry[N]>;
7
+ export type SandboxProxyTarget<N extends keyof SandboxRegistry> = RpcAsyncProxy<SandboxRegistry[N]>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/sandbox/index.ts"],"sourcesContent":["import {ProxySandbox, RegisterSandbox} from \"./providers\";\n\nimport type {DeepAsyncProxy} from \"@typing/helpers\";\n\nexport {ProxySandbox, RegisterSandbox};\n\nexport interface SandboxRegistry {}\n\nexport type SandboxName = Extract<keyof SandboxRegistry, string>;\n\nexport type SandboxProxyTarget<N extends keyof SandboxRegistry> = DeepAsyncProxy<SandboxRegistry[N]>;\n"],"mappings":"AAAA,SAAQ,cAAc,uBAAsB;","names":[]}
1
+ {"version":3,"sources":["../../src/sandbox/index.ts"],"sourcesContent":["import {ProxySandbox, RegisterSandbox} from \"./providers\";\n\nimport type {RpcAsyncProxy} from \"@typing/rpc\";\n\nexport {ProxySandbox, RegisterSandbox};\n\nexport interface SandboxRegistry {}\n\nexport type SandboxName = Extract<keyof SandboxRegistry, string>;\n\nexport type SandboxProxyTarget<N extends keyof SandboxRegistry> = RpcAsyncProxy<SandboxRegistry[N]>;\n"],"mappings":"AAAA,SAAQ,cAAc,uBAAsB;","names":[]}
@@ -1,8 +1,8 @@
1
1
  import ProxyTransport from "../../transport/ProxyTransport.js";
2
- import type { DeepAsyncProxy } from "../../types/helpers.js";
2
+ import type { RpcAsyncProxy } from "../../types/rpc.js";
3
3
  import type { SandboxParameters } from "../../types/sandbox.js";
4
4
  import type { TransportDictionary, TransportManager, TransportName } from "../../types/transport.js";
5
- export default class<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {
5
+ export default class<N extends TransportName, T = RpcAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {
6
6
  private readonly parameters;
7
7
  constructor(name: N, parameters: SandboxParameters);
8
8
  protected manager(): TransportManager;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/sandbox/providers/ProxySandbox.ts"],"sourcesContent":["import ProxyTransport from \"@transport/ProxyTransport\";\n\nimport SandboxManager from \"../SandboxManager\";\nimport SandboxMessage from \"../SandboxMessage\";\n\nimport type {DeepAsyncProxy} from \"@typing/helpers\";\nimport type {SandboxParameters} from \"@typing/sandbox\";\nimport type {TransportDictionary, TransportManager, TransportName} from \"@typing/transport\";\n\nexport default class<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {\n constructor(\n name: N,\n private readonly parameters: SandboxParameters\n ) {\n super(name);\n }\n\n protected manager(): TransportManager {\n return SandboxManager.getInstance();\n }\n\n protected apply(args: any[], path?: string): Promise<any> {\n return SandboxMessage.for(this.name, this.parameters).send({path, args});\n }\n}\n"],"mappings":"AAAA,OAAO,oBAAoB;AAE3B,OAAO,oBAAoB;AAC3B,OAAO,oBAAoB;AAM3B,MAAO,6BAA2F,eAAqB;AAAA,EACnH,YACI,MACiB,YACnB;AACE,UAAM,IAAI;AAFO;AAAA,EAGrB;AAAA,EAHqB;AAAA,EAKX,UAA4B;AAClC,WAAO,eAAe,YAAY;AAAA,EACtC;AAAA,EAEU,MAAM,MAAa,MAA6B;AACtD,WAAO,eAAe,IAAI,KAAK,MAAM,KAAK,UAAU,EAAE,KAAK,EAAC,MAAM,KAAI,CAAC;AAAA,EAC3E;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/sandbox/providers/ProxySandbox.ts"],"sourcesContent":["import ProxyTransport from \"@transport/ProxyTransport\";\n\nimport SandboxManager from \"../SandboxManager\";\nimport SandboxMessage from \"../SandboxMessage\";\n\nimport type {RpcAsyncProxy} from \"@typing/rpc\";\nimport type {SandboxParameters} from \"@typing/sandbox\";\nimport type {TransportDictionary, TransportManager, TransportName} from \"@typing/transport\";\n\nexport default class<N extends TransportName, T = RpcAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {\n constructor(\n name: N,\n private readonly parameters: SandboxParameters\n ) {\n super(name);\n }\n\n protected manager(): TransportManager {\n return SandboxManager.getInstance();\n }\n\n protected apply(args: any[], path?: string): Promise<any> {\n return SandboxMessage.for(this.name, this.parameters).send({path, args});\n }\n}\n"],"mappings":"AAAA,OAAO,oBAAoB;AAE3B,OAAO,oBAAoB;AAC3B,OAAO,oBAAoB;AAM3B,MAAO,6BAA0F,eAAqB;AAAA,EAClH,YACI,MACiB,YACnB;AACE,UAAM,IAAI;AAFO;AAAA,EAGrB;AAAA,EAHqB;AAAA,EAKX,UAA4B;AAClC,WAAO,eAAe,YAAY;AAAA,EACtC;AAAA,EAEU,MAAM,MAAa,MAA6B;AACtD,WAAO,eAAe,IAAI,KAAK,MAAM,KAAK,UAAU,EAAE,KAAK,EAAC,MAAM,KAAI,CAAC;AAAA,EAC3E;AACJ;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import ProxyTransport from "../../transport/ProxyTransport.js";
2
- import type { DeepAsyncProxy } from "../../types/helpers.js";
2
+ import type { RpcAsyncProxy } from "../../types/rpc.js";
3
3
  import type { TransportDictionary, TransportManager, TransportMessage, TransportName } from "../../types/transport.js";
4
- export default class<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {
4
+ export default class<N extends TransportName, T = RpcAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {
5
5
  protected message: TransportMessage;
6
6
  constructor(name: N);
7
7
  protected manager(): TransportManager;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/service/providers/ProxyService.ts"],"sourcesContent":["import {isBackground} from \"@addon-core/browser\";\n\nimport ProxyTransport from \"@transport/ProxyTransport\";\n\nimport ServiceManager from \"../ServiceManager\";\nimport ServiceMessage from \"../ServiceMessage\";\n\nimport type {DeepAsyncProxy} from \"@typing/helpers\";\nimport type {TransportDictionary, TransportManager, TransportMessage, TransportName} from \"@typing/transport\";\n\nexport default class<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {\n protected message: TransportMessage;\n\n constructor(name: N) {\n super(name);\n this.message = new ServiceMessage(name);\n }\n\n protected manager(): TransportManager {\n return ServiceManager.getInstance();\n }\n\n protected async apply(args: any[], path?: string): Promise<any> {\n return this.message.send({path, args});\n }\n\n public get(): T {\n if (isBackground()) {\n throw new Error(\n `You are trying to get proxy service \"${this.name}\" from background. You can get original service instead`\n );\n }\n\n return super.get();\n }\n}\n"],"mappings":"AAAA,SAAQ,oBAAmB;AAE3B,OAAO,oBAAoB;AAE3B,OAAO,oBAAoB;AAC3B,OAAO,oBAAoB;AAK3B,MAAO,6BAA2F,eAAqB;AAAA,EACzG;AAAA,EAEV,YAAY,MAAS;AACjB,UAAM,IAAI;AACV,SAAK,UAAU,IAAI,eAAe,IAAI;AAAA,EAC1C;AAAA,EAEU,UAA4B;AAClC,WAAO,eAAe,YAAY;AAAA,EACtC;AAAA,EAEA,MAAgB,MAAM,MAAa,MAA6B;AAC5D,WAAO,KAAK,QAAQ,KAAK,EAAC,MAAM,KAAI,CAAC;AAAA,EACzC;AAAA,EAEO,MAAS;AACZ,QAAI,aAAa,GAAG;AAChB,YAAM,IAAI;AAAA,QACN,wCAAwC,KAAK,IAAI;AAAA,MACrD;AAAA,IACJ;AAEA,WAAO,MAAM,IAAI;AAAA,EACrB;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/service/providers/ProxyService.ts"],"sourcesContent":["import {isBackground} from \"@addon-core/browser\";\n\nimport ProxyTransport from \"@transport/ProxyTransport\";\n\nimport ServiceManager from \"../ServiceManager\";\nimport ServiceMessage from \"../ServiceMessage\";\n\nimport type {RpcAsyncProxy} from \"@typing/rpc\";\nimport type {TransportDictionary, TransportManager, TransportMessage, TransportName} from \"@typing/transport\";\n\nexport default class<N extends TransportName, T = RpcAsyncProxy<TransportDictionary[N]>> extends ProxyTransport<N, T> {\n protected message: TransportMessage;\n\n constructor(name: N) {\n super(name);\n this.message = new ServiceMessage(name);\n }\n\n protected manager(): TransportManager {\n return ServiceManager.getInstance();\n }\n\n protected async apply(args: any[], path?: string): Promise<any> {\n return this.message.send({path, args});\n }\n\n public get(): T {\n if (isBackground()) {\n throw new Error(\n `You are trying to get proxy service \"${this.name}\" from background. You can get original service instead`\n );\n }\n\n return super.get();\n }\n}\n"],"mappings":"AAAA,SAAQ,oBAAmB;AAE3B,OAAO,oBAAoB;AAE3B,OAAO,oBAAoB;AAC3B,OAAO,oBAAoB;AAK3B,MAAO,6BAA0F,eAAqB;AAAA,EACxG;AAAA,EAEV,YAAY,MAAS;AACjB,UAAM,IAAI;AACV,SAAK,UAAU,IAAI,eAAe,IAAI;AAAA,EAC1C;AAAA,EAEU,UAA4B;AAClC,WAAO,eAAe,YAAY;AAAA,EACtC;AAAA,EAEA,MAAgB,MAAM,MAAa,MAA6B;AAC5D,WAAO,KAAK,QAAQ,KAAK,EAAC,MAAM,KAAI,CAAC;AAAA,EACzC;AAAA,EAEO,MAAS;AACZ,QAAI,aAAa,GAAG;AAChB,YAAM,IAAI;AAAA,QACN,wCAAwC,KAAK,IAAI;AAAA,MACrD;AAAA,IACJ;AAEA,WAAO,MAAM,IAAI;AAAA,EACrB;AACJ;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import BaseTransport from "./BaseTransport.js";
2
- import type { DeepAsyncProxy } from "../types/helpers.js";
2
+ import type { RpcAsyncProxy } from "../types/rpc.js";
3
3
  import type { TransportDictionary, TransportName } from "../types/transport.js";
4
- export default abstract class<N extends TransportName, T = DeepAsyncProxy<TransportDictionary[N]>> extends BaseTransport<N, T> {
4
+ export default abstract class<N extends TransportName, T = RpcAsyncProxy<TransportDictionary[N]>> extends BaseTransport<N, T> {
5
5
  protected abstract apply(args: any[], path?: string): any;
6
6
  protected createProxy(path?: string): T;
7
7
  get(): T;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transport/ProxyTransport.ts"],"sourcesContent":["import BaseTransport from \"./BaseTransport\";\n\nimport type {DeepAsyncProxy} from \"@typing/helpers\";\nimport type {TransportDictionary, TransportName} from \"@typing/transport\";\n\nexport default abstract class<\n N extends TransportName,\n T = DeepAsyncProxy<TransportDictionary[N]>,\n> extends BaseTransport<N, T> {\n protected abstract apply(args: any[], path?: string): any;\n\n protected createProxy(path?: string): T {\n const wrapped = () => {};\n\n const proxy = new Proxy(wrapped, {\n apply: async (_target, _thisArg, args) => this.apply(args, path),\n\n get: (_target, propertyName, receiver) => {\n if (propertyName === \"__proxy\" || typeof propertyName !== \"string\") {\n return Reflect.get(wrapped, propertyName, receiver);\n }\n\n const newPath = path == null ? propertyName : `${path}.${String(propertyName)}`;\n\n return this.createProxy(newPath);\n },\n });\n\n // @ts-expect-error — Adding a hidden property\n proxy.__proxy = true;\n\n return proxy as unknown as T;\n }\n\n public get(): T {\n return this.createProxy();\n }\n}\n"],"mappings":"AAAA,OAAO,mBAAmB;AAK1B,MAAO,+BAGG,cAAoB;AAAA,EAGhB,YAAY,MAAkB;AACpC,UAAM,UAAU,MAAM;AAAA,IAAC;AAEvB,UAAM,QAAQ,IAAI,MAAM,SAAS;AAAA,MAC7B,OAAO,OAAO,SAAS,UAAU,SAAS,KAAK,MAAM,MAAM,IAAI;AAAA,MAE/D,KAAK,CAAC,SAAS,cAAc,aAAa;AACtC,YAAI,iBAAiB,aAAa,OAAO,iBAAiB,UAAU;AAChE,iBAAO,QAAQ,IAAI,SAAS,cAAc,QAAQ;AAAA,QACtD;AAEA,cAAM,UAAU,QAAQ,OAAO,eAAe,GAAG,IAAI,IAAI,OAAO,YAAY,CAAC;AAE7E,eAAO,KAAK,YAAY,OAAO;AAAA,MACnC;AAAA,IACJ,CAAC;AAGD,UAAM,UAAU;AAEhB,WAAO;AAAA,EACX;AAAA,EAEO,MAAS;AACZ,WAAO,KAAK,YAAY;AAAA,EAC5B;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../src/transport/ProxyTransport.ts"],"sourcesContent":["import BaseTransport from \"./BaseTransport\";\n\nimport type {RpcAsyncProxy} from \"@typing/rpc\";\nimport type {TransportDictionary, TransportName} from \"@typing/transport\";\n\nexport default abstract class<N extends TransportName, T = RpcAsyncProxy<TransportDictionary[N]>> extends BaseTransport<\n N,\n T\n> {\n protected abstract apply(args: any[], path?: string): any;\n\n protected createProxy(path?: string): T {\n const wrapped = () => {};\n\n const proxy = new Proxy(wrapped, {\n apply: async (_target, _thisArg, args) => this.apply(args, path),\n\n get: (_target, propertyName, receiver) => {\n if (propertyName === \"__proxy\" || typeof propertyName !== \"string\") {\n return Reflect.get(wrapped, propertyName, receiver);\n }\n\n const newPath = path == null ? propertyName : `${path}.${String(propertyName)}`;\n\n return this.createProxy(newPath);\n },\n });\n\n // @ts-expect-error — Adding a hidden property\n proxy.__proxy = true;\n\n return proxy as unknown as T;\n }\n\n public get(): T {\n return this.createProxy();\n }\n}\n"],"mappings":"AAAA,OAAO,mBAAmB;AAK1B,MAAO,+BAAmG,cAGxG;AAAA,EAGY,YAAY,MAAkB;AACpC,UAAM,UAAU,MAAM;AAAA,IAAC;AAEvB,UAAM,QAAQ,IAAI,MAAM,SAAS;AAAA,MAC7B,OAAO,OAAO,SAAS,UAAU,SAAS,KAAK,MAAM,MAAM,IAAI;AAAA,MAE/D,KAAK,CAAC,SAAS,cAAc,aAAa;AACtC,YAAI,iBAAiB,aAAa,OAAO,iBAAiB,UAAU;AAChE,iBAAO,QAAQ,IAAI,SAAS,cAAc,QAAQ;AAAA,QACtD;AAEA,cAAM,UAAU,QAAQ,OAAO,eAAe,GAAG,IAAI,IAAI,OAAO,YAAY,CAAC;AAE7E,eAAO,KAAK,YAAY,OAAO;AAAA,MACnC;AAAA,IACJ,CAAC;AAGD,UAAM,UAAU;AAEhB,WAAO;AAAA,EACX;AAAA,EAEO,MAAS;AACZ,WAAO,KAAK,YAAY;AAAA,EAC5B;AACJ;","names":[]}
@@ -1,4 +1,5 @@
1
- import type { DeepAsyncProxy } from "../types/helpers.js";
1
+ import type { RpcAsyncProxy } from "../types/rpc.js";
2
+ export type { RpcAsyncProxy, RpcAsyncProxyObject } from "../types/rpc.js";
2
3
  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 TransportProxyTarget<T extends object, K extends keyof T> = RpcAsyncProxy<T[K]>;
4
5
  export type { TransportDefinition, TransportResolvedDefinition, TransportUnresolvedDefinition, TransportType, TransportOptions, } from "../types/transport.js";
@@ -421,6 +421,14 @@ export interface Config {
421
421
  * Flag indicating whether to merge localizations from App and Shared directories.
422
422
  * When `true`, localization files from both directories will be combined.
423
423
  *
424
+ * Locale values are resolved from the least specific source to the most specific:
425
+ * plugins, source root, Shared, and App. Within each layer, a browser-specific
426
+ * file overrides its generic file. A value from a later source overrides the
427
+ * same key from an earlier source. When `false`, plugin locales remain available
428
+ * as a baseline and only the highest available workspace layer is selected.
429
+ * Multiple generic or browser-specific files for the same language in one layer
430
+ * are rejected as ambiguous.
431
+ *
424
432
  * @default true
425
433
  */
426
434
  mergeLocales: boolean;
@@ -6,8 +6,4 @@ export type PickNonFunctionProperties<T> = {
6
6
  export type ExcludeFunctionsFromProperties<T> = {
7
7
  [K in keyof T]: ExcludeFunction<T[K]>;
8
8
  };
9
- export type DeepAsyncProxy<T> = {
10
- [K in keyof T]: T[K] extends (...args: any[]) => any ? (...args: Parameters<T[K]>) => Promise<Awaited<ReturnType<T[K]>>> : T[K] extends object ? DeepAsyncProxyObject<T[K]> : () => Promise<Awaited<T[K]>>;
11
- };
12
- export type DeepAsyncProxyObject<T> = (() => Promise<DeepAsyncProxy<T>>) & DeepAsyncProxy<T>;
13
9
  export {};
@@ -66,6 +66,8 @@ export declare const LocaleValuesSeparator = "|";
66
66
  export declare const LocaleCustomKeyForLanguage = "locale";
67
67
  export declare const LocaleKeyMarker = "@";
68
68
  export declare const LanguageCodes: ReadonlySet<string>;
69
+ /** Native language names, independent of the selected UI language. */
70
+ export declare const LanguageNames: Readonly<Record<Language, string>>;
69
71
  export declare const LocaleFileExtensions: ReadonlySet<string>;
70
72
  export type LocaleValue = string | number | Array<string | number>;
71
73
  export type LocaleData = {
@@ -123,6 +125,7 @@ export type LocaleSubstitutionArgs<T, K extends keyof T> = string extends keyof
123
125
  export interface LocaleProvider<S> {
124
126
  lang(): Language;
125
127
  languages(): Set<Language>;
128
+ languageNames(): Map<Language, string>;
126
129
  keys(): ReadonlySet<keyof S>;
127
130
  trans<K extends LocaleNonPluralKeys<S>>(key: K, ...args: LocaleSubstitutionArgs<S, K>): string;
128
131
  choice<K extends LocalePluralKeys<S>>(key: K, count: number, ...args: LocaleSubstitutionArgs<S, K>): string;
@@ -68,10 +68,68 @@ const LocaleValuesSeparator = "|";
68
68
  const LocaleCustomKeyForLanguage = "locale";
69
69
  const LocaleKeyMarker = "@";
70
70
  const LanguageCodes = new Set(Object.values(Language));
71
+ const LanguageNames = Object.freeze({
72
+ ["ar" /* Arabic */]: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629",
73
+ ["am" /* Amharic */]: "\u12A0\u121B\u122D\u129B",
74
+ ["bg" /* Bulgarian */]: "\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438",
75
+ ["bn" /* Bengali */]: "\u09AC\u09BE\u0982\u09B2\u09BE",
76
+ ["ca" /* Catalan */]: "Catal\xE0",
77
+ ["cs" /* Czech */]: "\u010Ce\u0161tina",
78
+ ["da" /* Danish */]: "Dansk",
79
+ ["de" /* German */]: "Deutsch",
80
+ ["el" /* Greek */]: "\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC",
81
+ ["en" /* English */]: "English",
82
+ ["en_AU" /* EnglishAustralia */]: "English (Australia)",
83
+ ["en_GB" /* EnglishGreatBritain */]: "English (United Kingdom)",
84
+ ["en_US" /* EnglishUSA */]: "English (United States)",
85
+ ["es" /* Spanish */]: "Espa\xF1ol",
86
+ ["es_419" /* SpanishLatinAmericaAndCaribbean */]: "Espa\xF1ol (Latinoam\xE9rica y el Caribe)",
87
+ ["et" /* Estonian */]: "Eesti",
88
+ ["fa" /* Persian */]: "\u0641\u0627\u0631\u0633\u06CC",
89
+ ["fi" /* Finnish */]: "Suomi",
90
+ ["fil" /* Filipino */]: "Filipino",
91
+ ["fr" /* French */]: "Fran\xE7ais",
92
+ ["gu" /* Gujarati */]: "\u0A97\u0AC1\u0A9C\u0AB0\u0ABE\u0AA4\u0AC0",
93
+ ["he" /* Hebrew */]: "\u05E2\u05D1\u05E8\u05D9\u05EA",
94
+ ["hi" /* Hindi */]: "\u0939\u093F\u0928\u094D\u0926\u0940",
95
+ ["hr" /* Croatian */]: "Hrvatski",
96
+ ["hu" /* Hungarian */]: "Magyar",
97
+ ["id" /* Indonesian */]: "Bahasa Indonesia",
98
+ ["it" /* Italian */]: "Italiano",
99
+ ["ja" /* Japanese */]: "\u65E5\u672C\u8A9E",
100
+ ["kn" /* Kannada */]: "\u0C95\u0CA8\u0CCD\u0CA8\u0CA1",
101
+ ["ko" /* Korean */]: "\uD55C\uAD6D\uC5B4",
102
+ ["lt" /* Lithuanian */]: "Lietuvi\u0173",
103
+ ["lv" /* Latvian */]: "Latvie\u0161u",
104
+ ["ml" /* Malayalam */]: "\u0D2E\u0D32\u0D2F\u0D3E\u0D33\u0D02",
105
+ ["mr" /* Marathi */]: "\u092E\u0930\u093E\u0920\u0940",
106
+ ["ms" /* Malay */]: "Bahasa Melayu",
107
+ ["nl" /* Dutch */]: "Nederlands",
108
+ ["no" /* Norwegian */]: "Norsk",
109
+ ["pl" /* Polish */]: "Polski",
110
+ ["pt_BR" /* PortugueseBrazil */]: "Portugu\xEAs (Brasil)",
111
+ ["pt_PT" /* PortuguesePortugal */]: "Portugu\xEAs (Portugal)",
112
+ ["ro" /* Romanian */]: "Rom\xE2n\u0103",
113
+ ["ru" /* Russian */]: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439",
114
+ ["sk" /* Slovak */]: "Sloven\u010Dina",
115
+ ["sl" /* Slovenian */]: "Sloven\u0161\u010Dina",
116
+ ["sr" /* Serbian */]: "\u0421\u0440\u043F\u0441\u043A\u0438",
117
+ ["sv" /* Swedish */]: "Svenska",
118
+ ["sw" /* Swahili */]: "Kiswahili",
119
+ ["ta" /* Tamil */]: "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD",
120
+ ["te" /* Telugu */]: "\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41",
121
+ ["th" /* Thai */]: "\u0E44\u0E17\u0E22",
122
+ ["tr" /* Turkish */]: "T\xFCrk\xE7e",
123
+ ["uk" /* Ukrainian */]: "\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430",
124
+ ["vi" /* Vietnamese */]: "Ti\u1EBFng Vi\u1EC7t",
125
+ ["zh_CN" /* ChineseChina */]: "\u4E2D\u6587\uFF08\u7B80\u4F53\uFF09",
126
+ ["zh_TW" /* ChineseTaiwan */]: "\u4E2D\u6587\uFF08\u7E41\u9AD4\uFF09"
127
+ });
71
128
  const LocaleFileExtensions = /* @__PURE__ */ new Set(["yaml", "yml", "json"]);
72
129
  export {
73
130
  Language,
74
131
  LanguageCodes,
132
+ LanguageNames,
75
133
  LocaleCustomKeyForLanguage,
76
134
  LocaleDir,
77
135
  LocaleFileExtensions,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/locale.ts"],"sourcesContent":["export enum Language {\n Arabic = \"ar\",\n Amharic = \"am\",\n Bulgarian = \"bg\",\n Bengali = \"bn\",\n Catalan = \"ca\",\n Czech = \"cs\",\n Danish = \"da\",\n German = \"de\",\n Greek = \"el\",\n English = \"en\",\n EnglishAustralia = \"en_AU\",\n EnglishGreatBritain = \"en_GB\",\n EnglishUSA = \"en_US\",\n Spanish = \"es\",\n SpanishLatinAmericaAndCaribbean = \"es_419\",\n Estonian = \"et\",\n Persian = \"fa\",\n Finnish = \"fi\",\n Filipino = \"fil\",\n French = \"fr\",\n Gujarati = \"gu\",\n Hebrew = \"he\",\n Hindi = \"hi\",\n Croatian = \"hr\",\n Hungarian = \"hu\",\n Indonesian = \"id\",\n Italian = \"it\",\n Japanese = \"ja\",\n Kannada = \"kn\",\n Korean = \"ko\",\n Lithuanian = \"lt\",\n Latvian = \"lv\",\n Malayalam = \"ml\",\n Marathi = \"mr\",\n Malay = \"ms\",\n Dutch = \"nl\",\n Norwegian = \"no\",\n Polish = \"pl\",\n PortugueseBrazil = \"pt_BR\",\n PortuguesePortugal = \"pt_PT\",\n Romanian = \"ro\",\n Russian = \"ru\",\n Slovak = \"sk\",\n Slovenian = \"sl\",\n Serbian = \"sr\",\n Swedish = \"sv\",\n Swahili = \"sw\",\n Tamil = \"ta\",\n Telugu = \"te\",\n Thai = \"th\",\n Turkish = \"tr\",\n Ukrainian = \"uk\",\n Vietnamese = \"vi\",\n ChineseChina = \"zh_CN\",\n ChineseTaiwan = \"zh_TW\",\n}\n\nexport enum LocaleDir {\n RightToLeft = \"rtl\",\n LeftToRight = \"ltr\",\n}\n\nexport const RtlLanguages: ReadonlySet<Language> = new Set([Language.Arabic, Language.Persian, Language.Hebrew]);\n\nexport const LocaleNestedKeysSeparator = \".\";\n\nexport const LocaleKeysSeparator = \"_\";\n\nexport const LocaleValuesSeparator = \"|\";\n\nexport const LocaleCustomKeyForLanguage = \"locale\";\n\nexport const LocaleKeyMarker = \"@\";\n\nexport const LanguageCodes: ReadonlySet<string> = new Set(Object.values(Language));\n\nexport const LocaleFileExtensions: ReadonlySet<string> = new Set([\"yaml\", \"yml\", \"json\"]);\n\nexport type LocaleValue = string | number | Array<string | number>;\n\nexport type LocaleData = {\n [key: string]: LocaleValue | LocaleData;\n};\n\nexport type LocaleItems = Map<string, string>;\n\nexport type LocaleKeys = ReadonlySet<string>;\n\nexport type LocaleMessages = {\n [key: string]: {\n message: string;\n };\n};\n\nexport interface LocaleBuilder {\n lang(): Language;\n\n merge(data: LocaleData): this;\n\n build(): LocaleMessages;\n\n get(): LocaleItems;\n\n keys(): LocaleKeys;\n\n structure(): LocaleStructure;\n\n isValid(): boolean;\n\n validate(): this;\n}\n\nexport type LocaleBuilders = Map<Language, LocaleBuilder>;\n\nexport interface LocaleValidator {\n isValid(locale: LocaleBuilder): boolean;\n\n validate(locale: LocaleBuilder): this;\n}\n\nexport interface LocaleContractValidator {\n isValid(builders: LocaleBuilders): boolean;\n\n validate(builders: LocaleBuilders): this;\n}\n\nexport interface LocaleFutures {\n plural: boolean;\n substitutions: readonly string[];\n}\n\nexport interface LocaleStructure {\n [key: string]: LocaleFutures;\n}\n\nexport type LocaleNonPluralKeys<T> = {\n [K in keyof T]: T[K] extends {plural: false} ? K : never;\n}[keyof T] &\n string;\n\nexport type LocalePluralKeys<T> = {\n [K in keyof T]: T[K] extends {plural: true} ? K : never;\n}[keyof T] &\n string;\n\nexport type LocaleSubstitutionValue = string | number;\n\nexport type LocaleSubstitutionKeys<T, K extends keyof T> = T[K] extends {substitutions: readonly (infer U)[]}\n ? U & string\n : never;\n\nexport type LocaleSubstitutionsFor<T, K extends keyof T> = [LocaleSubstitutionKeys<T, K>] extends [never]\n ? never\n : Record<LocaleSubstitutionKeys<T, K>, LocaleSubstitutionValue>;\n\nexport type LocaleSubstitutionArgs<T, K extends keyof T> = string extends keyof T\n ? [substitutions?: Record<string, LocaleSubstitutionValue>]\n : [LocaleSubstitutionKeys<T, K>] extends [never]\n ? []\n : [substitutions: LocaleSubstitutionsFor<T, K>];\n\nexport interface LocaleProvider<S> {\n lang(): Language;\n\n languages(): Set<Language>;\n\n keys(): ReadonlySet<keyof S>;\n\n // non-plural keys\n trans<K extends LocaleNonPluralKeys<S>>(key: K, ...args: LocaleSubstitutionArgs<S, K>): string;\n\n // plural keys\n choice<K extends LocalePluralKeys<S>>(key: K, count: number, ...args: LocaleSubstitutionArgs<S, K>): string;\n}\n\nexport interface LocaleDynamicProvider<S> extends LocaleProvider<S> {\n change(lang: Language): Promise<Language>;\n}\n"],"mappings":"AAAO,IAAK,WAAL,kBAAKA,cAAL;AACH,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,sBAAmB;AACnB,EAAAA,UAAA,yBAAsB;AACtB,EAAAA,UAAA,gBAAa;AACb,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,qCAAkC;AAClC,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,gBAAa;AACb,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,gBAAa;AACb,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,sBAAmB;AACnB,EAAAA,UAAA,wBAAqB;AACrB,EAAAA,UAAA,cAAW;AACX,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,WAAQ;AACR,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,UAAO;AACP,EAAAA,UAAA,aAAU;AACV,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,gBAAa;AACb,EAAAA,UAAA,kBAAe;AACf,EAAAA,UAAA,mBAAgB;AAvDR,SAAAA;AAAA,GAAA;AA0DL,IAAK,YAAL,kBAAKC,eAAL;AACH,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,iBAAc;AAFN,SAAAA;AAAA,GAAA;AAKL,MAAM,eAAsC,oBAAI,IAAI,CAAC,mBAAiB,oBAAkB,iBAAe,CAAC;AAExG,MAAM,4BAA4B;AAElC,MAAM,sBAAsB;AAE5B,MAAM,wBAAwB;AAE9B,MAAM,6BAA6B;AAEnC,MAAM,kBAAkB;AAExB,MAAM,gBAAqC,IAAI,IAAI,OAAO,OAAO,QAAQ,CAAC;AAE1E,MAAM,uBAA4C,oBAAI,IAAI,CAAC,QAAQ,OAAO,MAAM,CAAC;","names":["Language","LocaleDir"]}
1
+ {"version":3,"sources":["../../src/types/locale.ts"],"sourcesContent":["export enum Language {\n Arabic = \"ar\",\n Amharic = \"am\",\n Bulgarian = \"bg\",\n Bengali = \"bn\",\n Catalan = \"ca\",\n Czech = \"cs\",\n Danish = \"da\",\n German = \"de\",\n Greek = \"el\",\n English = \"en\",\n EnglishAustralia = \"en_AU\",\n EnglishGreatBritain = \"en_GB\",\n EnglishUSA = \"en_US\",\n Spanish = \"es\",\n SpanishLatinAmericaAndCaribbean = \"es_419\",\n Estonian = \"et\",\n Persian = \"fa\",\n Finnish = \"fi\",\n Filipino = \"fil\",\n French = \"fr\",\n Gujarati = \"gu\",\n Hebrew = \"he\",\n Hindi = \"hi\",\n Croatian = \"hr\",\n Hungarian = \"hu\",\n Indonesian = \"id\",\n Italian = \"it\",\n Japanese = \"ja\",\n Kannada = \"kn\",\n Korean = \"ko\",\n Lithuanian = \"lt\",\n Latvian = \"lv\",\n Malayalam = \"ml\",\n Marathi = \"mr\",\n Malay = \"ms\",\n Dutch = \"nl\",\n Norwegian = \"no\",\n Polish = \"pl\",\n PortugueseBrazil = \"pt_BR\",\n PortuguesePortugal = \"pt_PT\",\n Romanian = \"ro\",\n Russian = \"ru\",\n Slovak = \"sk\",\n Slovenian = \"sl\",\n Serbian = \"sr\",\n Swedish = \"sv\",\n Swahili = \"sw\",\n Tamil = \"ta\",\n Telugu = \"te\",\n Thai = \"th\",\n Turkish = \"tr\",\n Ukrainian = \"uk\",\n Vietnamese = \"vi\",\n ChineseChina = \"zh_CN\",\n ChineseTaiwan = \"zh_TW\",\n}\n\nexport enum LocaleDir {\n RightToLeft = \"rtl\",\n LeftToRight = \"ltr\",\n}\n\nexport const RtlLanguages: ReadonlySet<Language> = new Set([Language.Arabic, Language.Persian, Language.Hebrew]);\n\nexport const LocaleNestedKeysSeparator = \".\";\n\nexport const LocaleKeysSeparator = \"_\";\n\nexport const LocaleValuesSeparator = \"|\";\n\nexport const LocaleCustomKeyForLanguage = \"locale\";\n\nexport const LocaleKeyMarker = \"@\";\n\nexport const LanguageCodes: ReadonlySet<string> = new Set(Object.values(Language));\n\n/** Native language names, independent of the selected UI language. */\nexport const LanguageNames: Readonly<Record<Language, string>> = Object.freeze({\n [Language.Arabic]: \"العربية\",\n [Language.Amharic]: \"አማርኛ\",\n [Language.Bulgarian]: \"Български\",\n [Language.Bengali]: \"বাংলা\",\n [Language.Catalan]: \"Català\",\n [Language.Czech]: \"Čeština\",\n [Language.Danish]: \"Dansk\",\n [Language.German]: \"Deutsch\",\n [Language.Greek]: \"Ελληνικά\",\n [Language.English]: \"English\",\n [Language.EnglishAustralia]: \"English (Australia)\",\n [Language.EnglishGreatBritain]: \"English (United Kingdom)\",\n [Language.EnglishUSA]: \"English (United States)\",\n [Language.Spanish]: \"Español\",\n [Language.SpanishLatinAmericaAndCaribbean]: \"Español (Latinoamérica y el Caribe)\",\n [Language.Estonian]: \"Eesti\",\n [Language.Persian]: \"فارسی\",\n [Language.Finnish]: \"Suomi\",\n [Language.Filipino]: \"Filipino\",\n [Language.French]: \"Français\",\n [Language.Gujarati]: \"ગુજરાતી\",\n [Language.Hebrew]: \"עברית\",\n [Language.Hindi]: \"हिन्दी\",\n [Language.Croatian]: \"Hrvatski\",\n [Language.Hungarian]: \"Magyar\",\n [Language.Indonesian]: \"Bahasa Indonesia\",\n [Language.Italian]: \"Italiano\",\n [Language.Japanese]: \"日本語\",\n [Language.Kannada]: \"ಕನ್ನಡ\",\n [Language.Korean]: \"한국어\",\n [Language.Lithuanian]: \"Lietuvių\",\n [Language.Latvian]: \"Latviešu\",\n [Language.Malayalam]: \"മലയാളം\",\n [Language.Marathi]: \"मराठी\",\n [Language.Malay]: \"Bahasa Melayu\",\n [Language.Dutch]: \"Nederlands\",\n [Language.Norwegian]: \"Norsk\",\n [Language.Polish]: \"Polski\",\n [Language.PortugueseBrazil]: \"Português (Brasil)\",\n [Language.PortuguesePortugal]: \"Português (Portugal)\",\n [Language.Romanian]: \"Română\",\n [Language.Russian]: \"Русский\",\n [Language.Slovak]: \"Slovenčina\",\n [Language.Slovenian]: \"Slovenščina\",\n [Language.Serbian]: \"Српски\",\n [Language.Swedish]: \"Svenska\",\n [Language.Swahili]: \"Kiswahili\",\n [Language.Tamil]: \"தமிழ்\",\n [Language.Telugu]: \"తెలుగు\",\n [Language.Thai]: \"ไทย\",\n [Language.Turkish]: \"Türkçe\",\n [Language.Ukrainian]: \"Українська\",\n [Language.Vietnamese]: \"Tiếng Việt\",\n [Language.ChineseChina]: \"中文(简体)\",\n [Language.ChineseTaiwan]: \"中文(繁體)\",\n});\n\nexport const LocaleFileExtensions: ReadonlySet<string> = new Set([\"yaml\", \"yml\", \"json\"]);\n\nexport type LocaleValue = string | number | Array<string | number>;\n\nexport type LocaleData = {\n [key: string]: LocaleValue | LocaleData;\n};\n\nexport type LocaleItems = Map<string, string>;\n\nexport type LocaleKeys = ReadonlySet<string>;\n\nexport type LocaleMessages = {\n [key: string]: {\n message: string;\n };\n};\n\nexport interface LocaleBuilder {\n lang(): Language;\n\n merge(data: LocaleData): this;\n\n build(): LocaleMessages;\n\n get(): LocaleItems;\n\n keys(): LocaleKeys;\n\n structure(): LocaleStructure;\n\n isValid(): boolean;\n\n validate(): this;\n}\n\nexport type LocaleBuilders = Map<Language, LocaleBuilder>;\n\nexport interface LocaleValidator {\n isValid(locale: LocaleBuilder): boolean;\n\n validate(locale: LocaleBuilder): this;\n}\n\nexport interface LocaleContractValidator {\n isValid(builders: LocaleBuilders): boolean;\n\n validate(builders: LocaleBuilders): this;\n}\n\nexport interface LocaleFutures {\n plural: boolean;\n substitutions: readonly string[];\n}\n\nexport interface LocaleStructure {\n [key: string]: LocaleFutures;\n}\n\nexport type LocaleNonPluralKeys<T> = {\n [K in keyof T]: T[K] extends {plural: false} ? K : never;\n}[keyof T] &\n string;\n\nexport type LocalePluralKeys<T> = {\n [K in keyof T]: T[K] extends {plural: true} ? K : never;\n}[keyof T] &\n string;\n\nexport type LocaleSubstitutionValue = string | number;\n\nexport type LocaleSubstitutionKeys<T, K extends keyof T> = T[K] extends {substitutions: readonly (infer U)[]}\n ? U & string\n : never;\n\nexport type LocaleSubstitutionsFor<T, K extends keyof T> = [LocaleSubstitutionKeys<T, K>] extends [never]\n ? never\n : Record<LocaleSubstitutionKeys<T, K>, LocaleSubstitutionValue>;\n\nexport type LocaleSubstitutionArgs<T, K extends keyof T> = string extends keyof T\n ? [substitutions?: Record<string, LocaleSubstitutionValue>]\n : [LocaleSubstitutionKeys<T, K>] extends [never]\n ? []\n : [substitutions: LocaleSubstitutionsFor<T, K>];\n\nexport interface LocaleProvider<S> {\n lang(): Language;\n\n languages(): Set<Language>;\n\n languageNames(): Map<Language, string>;\n\n keys(): ReadonlySet<keyof S>;\n\n // non-plural keys\n trans<K extends LocaleNonPluralKeys<S>>(key: K, ...args: LocaleSubstitutionArgs<S, K>): string;\n\n // plural keys\n choice<K extends LocalePluralKeys<S>>(key: K, count: number, ...args: LocaleSubstitutionArgs<S, K>): string;\n}\n\nexport interface LocaleDynamicProvider<S> extends LocaleProvider<S> {\n change(lang: Language): Promise<Language>;\n}\n"],"mappings":"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","names":["Language","LocaleDir"]}
@@ -1,20 +1,147 @@
1
1
  import { EntrypointOptions } from "./entrypoint.js";
2
2
  import { ContentScriptConfig, ContentScriptContext, ContentScriptDefinition } from "./content.js";
3
- import { TransportConfig, TransportDefinition, TransportType } from "./transport.js";
3
+ import { TransportConfig, TransportDefinition, TransportType, type TransportProxyTarget } from "./transport.js";
4
4
  import { Awaiter } from "./helpers.js";
5
+ import type { MessageError } from "./message.js";
6
+ import type { RelayRegistry } from "../relay/index.js";
5
7
  export declare const RelayGlobalKey = "adnbnRelay";
6
8
  export declare enum RelayMethod {
7
9
  Scripting = "scripting",
8
10
  Messaging = "messaging"
9
11
  }
10
- export interface RelayConfig extends TransportConfig, ContentScriptConfig {
12
+ export declare enum RelayAllFrames {
13
+ /**
14
+ * Executes the method in every frame reached by the selected transport and returns one outcome:
15
+ * Scripting prefers a fulfilled result, while Messaging returns the first response.
16
+ *
17
+ * Warning: mutating methods can execute in multiple frames even though only one outcome is returned.
18
+ */
19
+ Any = "any",
20
+ /** Executes the method in every discovered frame and returns an outcome for each frame. */
21
+ All = "all"
22
+ }
23
+ export declare enum RelayFrameErrorKind {
24
+ Remote = "remote",
25
+ Execution = "execution",
26
+ Delivery = "delivery",
27
+ Timeout = "timeout",
28
+ TargetGone = "target-gone",
29
+ Unobservable = "unobservable"
30
+ }
31
+ export type RelayNonEmptyReadonlyArray<T> = readonly [T, ...T[]];
32
+ export interface RelayExecutionOptions {
33
+ /** Maximum execution time per addressed Messaging frame or for the Inject Script operation. */
34
+ timeoutMs?: number;
35
+ }
36
+ interface RelayTargetBase extends RelayExecutionOptions {
37
+ tabId: number;
38
+ }
39
+ export interface RelayTopFrameOptions extends RelayTargetBase {
40
+ allFrames?: false;
41
+ frameId?: never;
42
+ frameIds?: never;
43
+ documentId?: never;
44
+ documentIds?: never;
45
+ }
46
+ export interface RelayFrameOptions extends RelayTargetBase {
47
+ frameId: number;
48
+ allFrames?: never;
49
+ frameIds?: never;
50
+ documentId?: never;
51
+ documentIds?: never;
52
+ }
53
+ export interface RelayFramesOptions extends RelayTargetBase {
54
+ frameIds: RelayNonEmptyReadonlyArray<number>;
55
+ allFrames?: never;
56
+ frameId?: never;
57
+ documentId?: never;
58
+ documentIds?: never;
59
+ }
60
+ export interface RelayDocumentOptions extends RelayTargetBase {
61
+ documentId: string;
62
+ allFrames?: never;
63
+ frameId?: never;
64
+ frameIds?: never;
65
+ documentIds?: never;
66
+ }
67
+ export interface RelayDocumentsOptions extends RelayTargetBase {
68
+ documentIds: RelayNonEmptyReadonlyArray<string>;
69
+ allFrames?: never;
70
+ frameId?: never;
71
+ frameIds?: never;
72
+ documentId?: never;
73
+ }
74
+ /**
75
+ * Broadcasts the call to all frames without requiring an exhaustive frame list and returns one outcome.
76
+ * `true` is an alias for `RelayAllFrames.Any`.
77
+ *
78
+ * Warning: mutating methods can execute in multiple frames even though only one outcome is returned.
79
+ */
80
+ export interface RelayAnyFramesOptions extends RelayTargetBase {
81
+ allFrames: true | RelayAllFrames.Any;
82
+ frameId?: never;
83
+ frameIds?: never;
84
+ documentId?: never;
85
+ documentIds?: never;
86
+ }
87
+ export interface RelayEveryFrameOptions extends RelayTargetBase {
88
+ allFrames: RelayAllFrames.All;
89
+ frameId?: never;
90
+ frameIds?: never;
91
+ documentId?: never;
92
+ documentIds?: never;
93
+ }
94
+ export type RelayAllFramesOptions = RelayAnyFramesOptions | RelayEveryFrameOptions;
95
+ export type RelayScalarOptions = RelayTopFrameOptions | RelayFrameOptions | RelayDocumentOptions;
96
+ export type RelayBatchOptions = RelayFramesOptions | RelayDocumentsOptions | RelayAllFramesOptions;
97
+ export type RelayCallOptions = RelayScalarOptions | RelayBatchOptions;
98
+ export type RelayAddressTarget = {
99
+ tabId: number;
100
+ frameId: number;
101
+ documentId?: string;
102
+ allFrames?: never;
103
+ } | {
104
+ tabId: number;
105
+ frameId?: never;
106
+ documentId: string;
107
+ allFrames?: never;
108
+ };
109
+ export type RelayOperationTarget = {
110
+ tabId: number;
111
+ allFrames: RelayAllFrames;
112
+ frameId?: never;
113
+ documentId?: never;
114
+ };
115
+ export type RelayResultTarget = RelayAddressTarget | RelayOperationTarget;
116
+ export interface RelayFrameError extends MessageError {
117
+ kind: RelayFrameErrorKind;
118
+ }
119
+ export type RelayFrameResult<T> = {
120
+ target: RelayResultTarget;
121
+ status: "fulfilled";
122
+ result: T;
123
+ } | {
124
+ target: RelayResultTarget;
125
+ status: "rejected";
126
+ error: RelayFrameError;
127
+ };
128
+ export type RelayFramesResult<T> = readonly RelayFrameResult<T>[];
129
+ export type RelayBatchRpcProxy<T> = {
130
+ [K in keyof T]: T[K] extends (...args: any[]) => any ? (...args: Parameters<T[K]>) => Promise<RelayFramesResult<Awaited<ReturnType<T[K]>>>> : T[K] extends object ? RelayBatchRpcProxyObject<T[K]> : () => Promise<RelayFramesResult<Awaited<T[K]>>>;
131
+ };
132
+ export type RelayBatchRpcProxyObject<T> = (() => Promise<RelayFramesResult<Awaited<T>>>) & RelayBatchRpcProxy<T>;
133
+ export type RelayProxyTarget<N extends keyof RelayRegistry> = TransportProxyTarget<RelayRegistry, N>;
134
+ export type RelayBatchProxyTarget<N extends keyof RelayRegistry> = RelayBatchRpcProxy<RelayRegistry[N]>;
135
+ export interface RelayConfig extends TransportConfig, Omit<ContentScriptConfig, "allFrames"> {
136
+ allFrames?: boolean | RelayAllFrames;
11
137
  method?: RelayMethod;
12
138
  }
13
139
  export type RelayOptions = RelayConfig & EntrypointOptions;
14
140
  export type RelayOptionsMap = Map<string, RelayOptions>;
15
141
  export type RelayEntrypointOptions = Partial<RelayOptions>;
16
142
  export type RelayMainHandler<T extends TransportType> = (relay: T, context: ContentScriptContext, options: RelayEntrypointOptions) => Awaiter<void>;
17
- export interface RelayDefinition<T extends TransportType> extends Omit<TransportDefinition<RelayOptions, T>, "main">, Omit<ContentScriptDefinition, "main">, RelayEntrypointOptions {
143
+ export interface RelayDefinition<T extends TransportType> extends Omit<TransportDefinition<RelayOptions, T>, "main">, Omit<ContentScriptDefinition, "main" | "allFrames">, RelayEntrypointOptions {
18
144
  main?: RelayMainHandler<T>;
19
145
  }
20
146
  export type RelayUnresolvedDefinition<T extends TransportType> = Partial<RelayDefinition<T>>;
147
+ export {};
@@ -4,7 +4,23 @@ var RelayMethod = /* @__PURE__ */ ((RelayMethod2) => {
4
4
  RelayMethod2["Messaging"] = "messaging";
5
5
  return RelayMethod2;
6
6
  })(RelayMethod || {});
7
+ var RelayAllFrames = /* @__PURE__ */ ((RelayAllFrames2) => {
8
+ RelayAllFrames2["Any"] = "any";
9
+ RelayAllFrames2["All"] = "all";
10
+ return RelayAllFrames2;
11
+ })(RelayAllFrames || {});
12
+ var RelayFrameErrorKind = /* @__PURE__ */ ((RelayFrameErrorKind2) => {
13
+ RelayFrameErrorKind2["Remote"] = "remote";
14
+ RelayFrameErrorKind2["Execution"] = "execution";
15
+ RelayFrameErrorKind2["Delivery"] = "delivery";
16
+ RelayFrameErrorKind2["Timeout"] = "timeout";
17
+ RelayFrameErrorKind2["TargetGone"] = "target-gone";
18
+ RelayFrameErrorKind2["Unobservable"] = "unobservable";
19
+ return RelayFrameErrorKind2;
20
+ })(RelayFrameErrorKind || {});
7
21
  export {
22
+ RelayAllFrames,
23
+ RelayFrameErrorKind,
8
24
  RelayGlobalKey,
9
25
  RelayMethod
10
26
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/relay.ts"],"sourcesContent":["import {EntrypointOptions} from \"@typing/entrypoint\";\nimport {ContentScriptConfig, ContentScriptContext, ContentScriptDefinition} from \"@typing/content\";\nimport {TransportConfig, TransportDefinition, TransportType} from \"@typing/transport\";\nimport {Awaiter} from \"@typing/helpers\";\n\nexport const RelayGlobalKey = \"adnbnRelay\";\n\nexport enum RelayMethod {\n Scripting = \"scripting\",\n Messaging = \"messaging\",\n}\n\nexport interface RelayConfig extends TransportConfig, ContentScriptConfig {\n method?: RelayMethod;\n}\n\nexport type RelayOptions = RelayConfig & EntrypointOptions;\n\nexport type RelayOptionsMap = Map<string, RelayOptions>;\n\nexport type RelayEntrypointOptions = Partial<RelayOptions>;\n\nexport type RelayMainHandler<T extends TransportType> = (\n relay: T,\n context: ContentScriptContext,\n options: RelayEntrypointOptions\n) => Awaiter<void>;\n\nexport interface RelayDefinition<T extends TransportType>\n extends\n Omit<TransportDefinition<RelayOptions, T>, \"main\">,\n Omit<ContentScriptDefinition, \"main\">,\n RelayEntrypointOptions {\n main?: RelayMainHandler<T>;\n}\n\nexport type RelayUnresolvedDefinition<T extends TransportType> = Partial<RelayDefinition<T>>;\n"],"mappings":"AAKO,MAAM,iBAAiB;AAEvB,IAAK,cAAL,kBAAKA,iBAAL;AACH,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,eAAY;AAFJ,SAAAA;AAAA,GAAA;","names":["RelayMethod"]}
1
+ {"version":3,"sources":["../../src/types/relay.ts"],"sourcesContent":["import {EntrypointOptions} from \"@typing/entrypoint\";\nimport {ContentScriptConfig, ContentScriptContext, ContentScriptDefinition} from \"@typing/content\";\nimport {TransportConfig, TransportDefinition, TransportType, type TransportProxyTarget} from \"@typing/transport\";\nimport {Awaiter} from \"@typing/helpers\";\nimport type {MessageError} from \"@typing/message\";\nimport type {RelayRegistry} from \"@relay/index\";\n\nexport const RelayGlobalKey = \"adnbnRelay\";\n\nexport enum RelayMethod {\n Scripting = \"scripting\",\n Messaging = \"messaging\",\n}\n\nexport enum RelayAllFrames {\n /**\n * Executes the method in every frame reached by the selected transport and returns one outcome:\n * Scripting prefers a fulfilled result, while Messaging returns the first response.\n *\n * Warning: mutating methods can execute in multiple frames even though only one outcome is returned.\n */\n Any = \"any\",\n\n /** Executes the method in every discovered frame and returns an outcome for each frame. */\n All = \"all\",\n}\n\nexport enum RelayFrameErrorKind {\n Remote = \"remote\",\n Execution = \"execution\",\n Delivery = \"delivery\",\n Timeout = \"timeout\",\n TargetGone = \"target-gone\",\n Unobservable = \"unobservable\",\n}\n\nexport type RelayNonEmptyReadonlyArray<T> = readonly [T, ...T[]];\n\nexport interface RelayExecutionOptions {\n /** Maximum execution time per addressed Messaging frame or for the Inject Script operation. */\n timeoutMs?: number;\n}\n\ninterface RelayTargetBase extends RelayExecutionOptions {\n tabId: number;\n}\n\nexport interface RelayTopFrameOptions extends RelayTargetBase {\n allFrames?: false;\n frameId?: never;\n frameIds?: never;\n documentId?: never;\n documentIds?: never;\n}\n\nexport interface RelayFrameOptions extends RelayTargetBase {\n frameId: number;\n allFrames?: never;\n frameIds?: never;\n documentId?: never;\n documentIds?: never;\n}\n\nexport interface RelayFramesOptions extends RelayTargetBase {\n frameIds: RelayNonEmptyReadonlyArray<number>;\n allFrames?: never;\n frameId?: never;\n documentId?: never;\n documentIds?: never;\n}\n\nexport interface RelayDocumentOptions extends RelayTargetBase {\n documentId: string;\n allFrames?: never;\n frameId?: never;\n frameIds?: never;\n documentIds?: never;\n}\n\nexport interface RelayDocumentsOptions extends RelayTargetBase {\n documentIds: RelayNonEmptyReadonlyArray<string>;\n allFrames?: never;\n frameId?: never;\n frameIds?: never;\n documentId?: never;\n}\n\n/**\n * Broadcasts the call to all frames without requiring an exhaustive frame list and returns one outcome.\n * `true` is an alias for `RelayAllFrames.Any`.\n *\n * Warning: mutating methods can execute in multiple frames even though only one outcome is returned.\n */\nexport interface RelayAnyFramesOptions extends RelayTargetBase {\n allFrames: true | RelayAllFrames.Any;\n frameId?: never;\n frameIds?: never;\n documentId?: never;\n documentIds?: never;\n}\n\nexport interface RelayEveryFrameOptions extends RelayTargetBase {\n allFrames: RelayAllFrames.All;\n frameId?: never;\n frameIds?: never;\n documentId?: never;\n documentIds?: never;\n}\n\nexport type RelayAllFramesOptions = RelayAnyFramesOptions | RelayEveryFrameOptions;\n\nexport type RelayScalarOptions = RelayTopFrameOptions | RelayFrameOptions | RelayDocumentOptions;\n\nexport type RelayBatchOptions = RelayFramesOptions | RelayDocumentsOptions | RelayAllFramesOptions;\n\nexport type RelayCallOptions = RelayScalarOptions | RelayBatchOptions;\n\nexport type RelayAddressTarget =\n | {\n tabId: number;\n frameId: number;\n documentId?: string;\n allFrames?: never;\n }\n | {\n tabId: number;\n frameId?: never;\n documentId: string;\n allFrames?: never;\n };\n\nexport type RelayOperationTarget = {\n tabId: number;\n allFrames: RelayAllFrames;\n frameId?: never;\n documentId?: never;\n};\n\nexport type RelayResultTarget = RelayAddressTarget | RelayOperationTarget;\n\nexport interface RelayFrameError extends MessageError {\n kind: RelayFrameErrorKind;\n}\n\nexport type RelayFrameResult<T> =\n | {\n target: RelayResultTarget;\n status: \"fulfilled\";\n result: T;\n }\n | {\n target: RelayResultTarget;\n status: \"rejected\";\n error: RelayFrameError;\n };\n\nexport type RelayFramesResult<T> = readonly RelayFrameResult<T>[];\n\nexport type RelayBatchRpcProxy<T> = {\n [K in keyof T]: T[K] extends (...args: any[]) => any\n ? (...args: Parameters<T[K]>) => Promise<RelayFramesResult<Awaited<ReturnType<T[K]>>>>\n : T[K] extends object\n ? RelayBatchRpcProxyObject<T[K]>\n : () => Promise<RelayFramesResult<Awaited<T[K]>>>;\n};\n\nexport type RelayBatchRpcProxyObject<T> = (() => Promise<RelayFramesResult<Awaited<T>>>) & RelayBatchRpcProxy<T>;\n\nexport type RelayProxyTarget<N extends keyof RelayRegistry> = TransportProxyTarget<RelayRegistry, N>;\n\nexport type RelayBatchProxyTarget<N extends keyof RelayRegistry> = RelayBatchRpcProxy<RelayRegistry[N]>;\n\nexport interface RelayConfig extends TransportConfig, Omit<ContentScriptConfig, \"allFrames\"> {\n allFrames?: boolean | RelayAllFrames;\n method?: RelayMethod;\n}\n\nexport type RelayOptions = RelayConfig & EntrypointOptions;\n\nexport type RelayOptionsMap = Map<string, RelayOptions>;\n\nexport type RelayEntrypointOptions = Partial<RelayOptions>;\n\nexport type RelayMainHandler<T extends TransportType> = (\n relay: T,\n context: ContentScriptContext,\n options: RelayEntrypointOptions\n) => Awaiter<void>;\n\nexport interface RelayDefinition<T extends TransportType>\n extends\n Omit<TransportDefinition<RelayOptions, T>, \"main\">,\n Omit<ContentScriptDefinition, \"main\" | \"allFrames\">,\n RelayEntrypointOptions {\n main?: RelayMainHandler<T>;\n}\n\nexport type RelayUnresolvedDefinition<T extends TransportType> = Partial<RelayDefinition<T>>;\n"],"mappings":"AAOO,MAAM,iBAAiB;AAEvB,IAAK,cAAL,kBAAKA,iBAAL;AACH,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,eAAY;AAFJ,SAAAA;AAAA,GAAA;AAKL,IAAK,iBAAL,kBAAKC,oBAAL;AAOH,EAAAA,gBAAA,SAAM;AAGN,EAAAA,gBAAA,SAAM;AAVE,SAAAA;AAAA,GAAA;AAaL,IAAK,sBAAL,kBAAKC,yBAAL;AACH,EAAAA,qBAAA,YAAS;AACT,EAAAA,qBAAA,eAAY;AACZ,EAAAA,qBAAA,cAAW;AACX,EAAAA,qBAAA,aAAU;AACV,EAAAA,qBAAA,gBAAa;AACb,EAAAA,qBAAA,kBAAe;AANP,SAAAA;AAAA,GAAA;","names":["RelayMethod","RelayAllFrames","RelayFrameErrorKind"]}
@@ -0,0 +1,4 @@
1
+ export type RpcAsyncProxy<T> = {
2
+ [K in keyof T]: T[K] extends (...args: any[]) => any ? (...args: Parameters<T[K]>) => Promise<Awaited<ReturnType<T[K]>>> : T[K] extends object ? RpcAsyncProxyObject<T[K]> : () => Promise<Awaited<T[K]>>;
3
+ };
4
+ export type RpcAsyncProxyObject<T> = (() => Promise<RpcAsyncProxy<T>>) & RpcAsyncProxy<T>;
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,7 +1,8 @@
1
1
  import { Required } from "utility-types";
2
2
  import { EntrypointOptions } from "./entrypoint.js";
3
- import { Awaiter, DeepAsyncProxy } from "./helpers.js";
3
+ import { Awaiter } from "./helpers.js";
4
4
  import { MessageSender, MessageSendOptions } from "./message.js";
5
+ import { RpcAsyncProxy } from "./rpc.js";
5
6
  export type TransportType = ((...args: any[]) => Promise<any>) | {
6
7
  [key: string]: any | TransportType;
7
8
  };
@@ -10,7 +11,7 @@ export interface TransportDictionary {
10
11
  }
11
12
  export type TransportName = Extract<keyof TransportDictionary, string>;
12
13
  export type TransportTarget<T extends TransportDictionary, K extends keyof T> = T[K];
13
- export type TransportProxyTarget<T extends TransportDictionary, K extends keyof T> = DeepAsyncProxy<T[K]>;
14
+ export type TransportProxyTarget<T extends TransportDictionary, K extends keyof T> = RpcAsyncProxy<T[K]>;
14
15
  export interface TransportManager {
15
16
  add<K extends TransportName>(name: K, instance: TransportDictionary[K]): this;
16
17
  get<K extends TransportName>(name: K): TransportDictionary[K] | undefined;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "adnbn",
3
3
  "type": "module",
4
- "version": "0.7.1",
4
+ "version": "0.9.0",
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)",
@@ -107,7 +107,8 @@
107
107
  "prepublishOnly": "npm run build",
108
108
  "build": "tsup && tsc -p tsconfig.build.json && node ./scripts/copy-dts.js && tsc-alias -p tsconfig.build.json -f -fe .js",
109
109
  "format": "prettier --write .",
110
- "typecheck": "tsc -p tsconfig.json --noEmit",
110
+ "typecheck": "tsc -p tsconfig.json --noEmit && npm run typecheck:tests",
111
+ "typecheck:tests": "tsc -p tsconfig.tests.json --noEmit",
111
112
  "check:node-version": "node ./scripts/check-node-version.js",
112
113
  "test": "npm run build && jest",
113
114
  "test:ci": "npm run test -- --ci --passWithNoTests --coverage",
@@ -126,8 +127,8 @@
126
127
  "release:preview": "release-it --no-github.release --no-npm.publish --no-git.tag --ci"
127
128
  },
128
129
  "dependencies": {
129
- "@addon-core/browser": "^0.7.1",
130
- "@addon-core/inject-script": "^0.3.1",
130
+ "@addon-core/browser": "^0.7.2",
131
+ "@addon-core/inject-script": "^0.5.0",
131
132
  "@addon-core/storage": "^0.7.0",
132
133
  "@rsdoctor/rspack-plugin": "^1.5.1",
133
134
  "@rspack/cli": "^1.7.5",