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.
- package/dist/cli/builders/locale/LocaleStructureValidator.js +7 -0
- package/dist/cli/builders/locale/LocaleStructureValidator.js.map +1 -1
- package/dist/cli/bundler/plugins/GenerateJsonPlugin.js +3 -7
- package/dist/cli/bundler/plugins/GenerateJsonPlugin.js.map +1 -1
- package/dist/cli/entrypoint/file/injectors/core.js +9 -1
- package/dist/cli/entrypoint/file/injectors/core.js.map +1 -1
- package/dist/cli/entrypoint/finder/AbstractAssetFinder.js +22 -11
- package/dist/cli/entrypoint/finder/AbstractAssetFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/AbstractEntrypointFinder.js +7 -0
- package/dist/cli/entrypoint/finder/AbstractEntrypointFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/AbstractFinder.d.ts +0 -2
- package/dist/cli/entrypoint/finder/AbstractFinder.js +5 -25
- package/dist/cli/entrypoint/finder/AbstractFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/AbstractViewFinder.js +3 -4
- package/dist/cli/entrypoint/finder/AbstractViewFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/AssetPluginFinder.js +14 -1
- package/dist/cli/entrypoint/finder/AssetPluginFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/LocaleFinder.d.ts +2 -0
- package/dist/cli/entrypoint/finder/LocaleFinder.js +27 -0
- package/dist/cli/entrypoint/finder/LocaleFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/PluginFinder.js +12 -3
- package/dist/cli/entrypoint/finder/PluginFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/ViewCspFinder.d.ts +2 -0
- package/dist/cli/entrypoint/finder/ViewCspFinder.js +13 -6
- package/dist/cli/entrypoint/finder/ViewCspFinder.js.map +1 -1
- package/dist/cli/entrypoint/finder/utils/filePrecedence.d.ts +35 -0
- package/dist/cli/entrypoint/finder/utils/filePrecedence.js +64 -0
- package/dist/cli/entrypoint/finder/utils/filePrecedence.js.map +1 -0
- package/dist/cli/entrypoint/parser/ContentParser.d.ts +2 -2
- package/dist/cli/entrypoint/parser/ContentParser.js.map +1 -1
- package/dist/cli/entrypoint/parser/RelayParser.js +2 -1
- package/dist/cli/entrypoint/parser/RelayParser.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plugins/content/ContentDriver.d.ts +21 -8
- package/dist/cli/plugins/content/ContentDriver.js +24 -2
- package/dist/cli/plugins/content/ContentDriver.js.map +1 -1
- package/dist/cli/plugins/content/ContentManager.d.ts +8 -3
- package/dist/cli/plugins/content/ContentManager.js +41 -6
- package/dist/cli/plugins/content/ContentManager.js.map +1 -1
- package/dist/cli/plugins/content/Relay.d.ts +6 -8
- package/dist/cli/plugins/content/Relay.js +2 -14
- package/dist/cli/plugins/content/Relay.js.map +1 -1
- package/dist/cli/plugins/content/RelayDeclaration.d.ts +0 -1
- package/dist/cli/plugins/content/RelayDeclaration.js +0 -3
- package/dist/cli/plugins/content/RelayDeclaration.js.map +1 -1
- package/dist/cli/plugins/content/RelayDriver.d.ts +10 -0
- package/dist/cli/plugins/content/RelayDriver.js +39 -0
- package/dist/cli/plugins/content/RelayDriver.js.map +1 -0
- package/dist/cli/plugins/content/index.js +1 -10
- package/dist/cli/plugins/content/index.js.map +1 -1
- package/dist/cli/plugins/content/types.d.ts +3 -0
- package/dist/cli/plugins/locale/Locale.js +5 -1
- package/dist/cli/plugins/locale/Locale.js.map +1 -1
- package/dist/cli/plugins/locale/declaration/LocaleDeclaration.js +2 -3
- package/dist/cli/plugins/locale/declaration/LocaleDeclaration.js.map +1 -1
- package/dist/cli/plugins/locale/declaration/locale.d.ts +3 -124
- package/dist/cli/virtual/index.js +2 -2
- package/dist/cli/virtual/virtual.d.ts +52 -147
- package/dist/entry/relay/index.d.ts +2 -1
- package/dist/entry/relay/index.js.map +1 -1
- package/dist/locale/adapters/react/LocaleProvider.js +2 -0
- package/dist/locale/adapters/react/LocaleProvider.js.map +1 -1
- package/dist/locale/adapters/react/context.d.ts +1 -0
- package/dist/locale/adapters/react/context.js +3 -2
- package/dist/locale/adapters/react/context.js.map +1 -1
- package/dist/locale/helpers.js.map +1 -1
- package/dist/locale/providers/AbstractLocale.d.ts +2 -0
- package/dist/locale/providers/AbstractLocale.js +5 -0
- package/dist/locale/providers/AbstractLocale.js.map +1 -1
- package/dist/locale/providers/NativeLocale.d.ts +3 -2
- package/dist/locale/providers/NativeLocale.js +1 -1
- package/dist/locale/providers/NativeLocale.js.map +1 -1
- package/dist/main/relay.d.ts +7 -6
- package/dist/main/relay.js +12 -5
- package/dist/main/relay.js.map +1 -1
- package/dist/message/error.d.ts +6 -0
- package/dist/message/error.js +21 -0
- package/dist/message/error.js.map +1 -1
- package/dist/message/index.d.ts +2 -1
- package/dist/message/index.js +2 -0
- package/dist/message/index.js.map +1 -1
- package/dist/message/providers/Message.d.ts +3 -0
- package/dist/message/providers/Message.js +36 -6
- package/dist/message/providers/Message.js.map +1 -1
- package/dist/offscreen/providers/ProxyOffscreen.d.ts +2 -2
- package/dist/offscreen/providers/ProxyOffscreen.js.map +1 -1
- package/dist/relay/RelayPermission.d.ts +6 -3
- package/dist/relay/RelayPermission.js +28 -12
- package/dist/relay/RelayPermission.js.map +1 -1
- package/dist/relay/adapters/RelayAdapter.d.ts +8 -0
- package/dist/relay/adapters/RelayAdapter.js +16 -0
- package/dist/relay/adapters/RelayAdapter.js.map +1 -0
- package/dist/relay/adapters/RelayMessagingAdapter.d.ts +11 -0
- package/dist/relay/adapters/RelayMessagingAdapter.js +91 -0
- package/dist/relay/adapters/RelayMessagingAdapter.js.map +1 -0
- package/dist/relay/adapters/RelayScriptingAdapter.d.ts +15 -0
- package/dist/relay/adapters/RelayScriptingAdapter.js +170 -0
- package/dist/relay/adapters/RelayScriptingAdapter.js.map +1 -0
- package/dist/relay/discovery/RelayDiscovery.d.ts +10 -0
- package/dist/relay/discovery/RelayDiscovery.js +62 -0
- package/dist/relay/discovery/RelayDiscovery.js.map +1 -0
- package/dist/relay/index.d.ts +1 -4
- package/dist/relay/index.js +1 -3
- package/dist/relay/index.js.map +1 -1
- package/dist/relay/providers/ProxyRelay.d.ts +20 -17
- package/dist/relay/providers/ProxyRelay.js +79 -52
- package/dist/relay/providers/ProxyRelay.js.map +1 -1
- package/dist/relay/providers/RegisterRelay.js +1 -2
- package/dist/relay/providers/RegisterRelay.js.map +1 -1
- package/dist/relay/result.d.ts +12 -0
- package/dist/relay/result.js +88 -0
- package/dist/relay/result.js.map +1 -0
- package/dist/sandbox/index.d.ts +2 -2
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/providers/ProxySandbox.d.ts +2 -2
- package/dist/sandbox/providers/ProxySandbox.js.map +1 -1
- package/dist/service/providers/ProxyService.d.ts +2 -2
- package/dist/service/providers/ProxyService.js.map +1 -1
- package/dist/transport/ProxyTransport.d.ts +2 -2
- package/dist/transport/ProxyTransport.js.map +1 -1
- package/dist/transport/index.d.ts +3 -2
- package/dist/types/config.d.ts +8 -0
- package/dist/types/helpers.d.ts +0 -4
- package/dist/types/locale.d.ts +3 -0
- package/dist/types/locale.js +58 -0
- package/dist/types/locale.js.map +1 -1
- package/dist/types/relay.d.ts +130 -3
- package/dist/types/relay.js +16 -0
- package/dist/types/relay.js.map +1 -1
- package/dist/types/rpc.d.ts +4 -0
- package/dist/types/rpc.js +1 -0
- package/dist/types/rpc.js.map +1 -0
- package/dist/types/transport.d.ts +3 -2
- package/package.json +5 -4
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// Only placeholders belong here; real adnbn imports resolve to their source modules via tsconfig.json.
|
|
1
2
|
declare module "*?raw" {
|
|
2
3
|
const content: string;
|
|
3
4
|
export default content;
|
|
@@ -37,16 +38,20 @@ declare module "virtual:content-entrypoint" {
|
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
declare module "virtual:content-framework" {
|
|
40
|
-
|
|
41
|
+
export const Builder:
|
|
42
|
+
| typeof import("../../entry/content/adapters/vanilla/index.js").Builder
|
|
43
|
+
| typeof import("../../entry/content/adapters/react/index.js").Builder;
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
export
|
|
45
|
+
const content:
|
|
46
|
+
| typeof import("../../entry/content/adapters/vanilla/index.js").default
|
|
47
|
+
| typeof import("../../entry/content/adapters/react/index.js").default;
|
|
48
|
+
export default content;
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
declare module "virtual:offscreen-entrypoint" {
|
|
49
|
-
type OffscreenDefinition = import("../../types/offscreen.js").OffscreenDefinition<
|
|
52
|
+
type OffscreenDefinition = import("../../types/offscreen.js").OffscreenDefinition<
|
|
53
|
+
import("../../types/transport.js").TransportType
|
|
54
|
+
>;
|
|
50
55
|
|
|
51
56
|
interface ModuleType extends OffscreenDefinition {
|
|
52
57
|
default: OffscreenDefinition | OffscreenDefinition["init"] | undefined;
|
|
@@ -57,14 +62,40 @@ declare module "virtual:offscreen-entrypoint" {
|
|
|
57
62
|
}
|
|
58
63
|
|
|
59
64
|
declare module "virtual:relay-entrypoint" {
|
|
60
|
-
type RelayDefinition = import("../../types/relay.js").RelayDefinition<
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
type RelayDefinition = import("../../types/relay.js").RelayDefinition<import("../../types/transport.js").TransportType>;
|
|
66
|
+
|
|
67
|
+
export const {
|
|
68
|
+
init,
|
|
69
|
+
main,
|
|
70
|
+
name,
|
|
71
|
+
method,
|
|
72
|
+
allFrames,
|
|
73
|
+
matches,
|
|
74
|
+
excludeMatches,
|
|
75
|
+
includeGlobs,
|
|
76
|
+
excludeGlobs,
|
|
77
|
+
runAt,
|
|
78
|
+
world,
|
|
79
|
+
matchAboutBlank,
|
|
80
|
+
matchOriginAsFallback,
|
|
81
|
+
declarative,
|
|
82
|
+
marker,
|
|
83
|
+
anchor,
|
|
84
|
+
mount,
|
|
85
|
+
render,
|
|
86
|
+
container,
|
|
87
|
+
watch,
|
|
88
|
+
includeBrowser,
|
|
89
|
+
excludeBrowser,
|
|
90
|
+
includeApp,
|
|
91
|
+
excludeApp,
|
|
92
|
+
mode,
|
|
93
|
+
manifestVersion,
|
|
94
|
+
debug,
|
|
95
|
+
}: Partial<RelayDefinition>;
|
|
96
|
+
|
|
97
|
+
const definition: RelayDefinition | RelayDefinition["init"] | undefined;
|
|
98
|
+
export default definition;
|
|
68
99
|
}
|
|
69
100
|
|
|
70
101
|
declare module "virtual:sandbox-entrypoint" {
|
|
@@ -78,13 +109,6 @@ declare module "virtual:sandbox-entrypoint" {
|
|
|
78
109
|
export = module;
|
|
79
110
|
}
|
|
80
111
|
|
|
81
|
-
declare module "virtual:relay-framework" {
|
|
82
|
-
type RelayUnresolvedDefinition = import("../../types/relay.js").RelayUnresolvedDefinition<any>;
|
|
83
|
-
|
|
84
|
-
const module: (definition: RelayUnresolvedDefinition) => void;
|
|
85
|
-
export = module;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
112
|
declare module "virtual:view-entrypoint" {
|
|
89
113
|
import {ViewOptions} from "../../types/view.js";
|
|
90
114
|
|
|
@@ -99,14 +123,14 @@ declare module "virtual:view-entrypoint" {
|
|
|
99
123
|
}
|
|
100
124
|
|
|
101
125
|
declare module "virtual:view-framework" {
|
|
102
|
-
|
|
126
|
+
export const Builder:
|
|
127
|
+
| typeof import("../../entry/view/adapters/vanilla/index.js").Builder
|
|
128
|
+
| typeof import("../../entry/view/adapters/react/index.js").Builder;
|
|
103
129
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
const module: (definition: ViewDefinition) => void;
|
|
109
|
-
export = module;
|
|
130
|
+
const view:
|
|
131
|
+
| typeof import("../../entry/view/adapters/vanilla/index.js").default
|
|
132
|
+
| typeof import("../../entry/view/adapters/react/index.js").default;
|
|
133
|
+
export default view;
|
|
110
134
|
}
|
|
111
135
|
|
|
112
136
|
declare module "virtual:transport-entrypoint" {
|
|
@@ -120,125 +144,6 @@ declare module "virtual:transport-entrypoint" {
|
|
|
120
144
|
export = module;
|
|
121
145
|
}
|
|
122
146
|
|
|
123
|
-
declare module "adnbn" {
|
|
124
|
-
export type BackgroundDefinition = import("../../types/background.js").BackgroundDefinition;
|
|
125
|
-
export type CommandUnresolvedDefinition = import("../../types/command.js").CommandUnresolvedDefinition;
|
|
126
|
-
export type ContentScriptDefinition = import("../../types/content.js").ContentScriptDefinition;
|
|
127
|
-
export type ViewOptions = import("../../types/view.js").ViewOptions;
|
|
128
|
-
export type ViewDefinition<T extends ViewOptions = ViewOptions> = import("../../types/view.js").ViewDefinition<T>;
|
|
129
|
-
export type OffscreenUnresolvedDefinition<T extends import("../../types/transport.js").TransportType> =
|
|
130
|
-
import("../../types/offscreen.js").OffscreenUnresolvedDefinition<T>;
|
|
131
|
-
export type RelayUnresolvedDefinition<T extends import("../../types/transport.js").TransportType> =
|
|
132
|
-
import("../../types/relay.js").RelayUnresolvedDefinition<T>;
|
|
133
|
-
export type SandboxUnresolvedDefinition<T extends import("../../types/transport.js").TransportType> =
|
|
134
|
-
import("../../types/sandbox.js").SandboxUnresolvedDefinition<T>;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
declare module "adnbn/transport" {
|
|
138
|
-
export type TransportType = import("../../types/transport.js").TransportType;
|
|
139
|
-
export type TransportOptions = import("../../types/transport.js").TransportOptions;
|
|
140
|
-
export type TransportUnresolvedDefinition<
|
|
141
|
-
O extends import("../../types/transport.js").TransportOptions,
|
|
142
|
-
T extends import("../../types/transport.js").TransportType,
|
|
143
|
-
> = import("../../types/transport.js").TransportUnresolvedDefinition<O, T>;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
declare module "adnbn/locale" {
|
|
147
|
-
export function resolve(value: string): string;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
declare module "adnbn/entry/background" {
|
|
151
|
-
import type {BackgroundDefinition, BackgroundMainHandler} from "../../types/background.js";
|
|
152
|
-
|
|
153
|
-
export function isValidBackgroundDefinition(value: unknown): value is BackgroundDefinition;
|
|
154
|
-
|
|
155
|
-
export function isValidBackgroundMainHandler(value: unknown): value is BackgroundMainHandler;
|
|
156
|
-
|
|
157
|
-
const background: (definition: BackgroundDefinition) => void;
|
|
158
|
-
export default background;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
declare module "adnbn/entry/command" {
|
|
162
|
-
import type {CommandDefinition, CommandExecute, CommandUnresolvedDefinition} from "../../types/command.js";
|
|
163
|
-
|
|
164
|
-
export function isValidCommandDefinition(value: unknown): value is CommandDefinition;
|
|
165
|
-
|
|
166
|
-
export function isValidCommandExecuteFunction(value: unknown): value is CommandExecute;
|
|
167
|
-
|
|
168
|
-
const command: (definition: CommandUnresolvedDefinition) => void;
|
|
169
|
-
export default command;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
declare module "adnbn/entry/content" {
|
|
173
|
-
import type {ContentScriptDefinition, ContentScriptRenderValue} from "../../types/content.js";
|
|
174
|
-
|
|
175
|
-
export function isContentScriptDefinition(value: unknown): value is ContentScriptDefinition;
|
|
176
|
-
|
|
177
|
-
export function isValidContentScriptDefinitionRenderValue(value: unknown): value is ContentScriptRenderValue;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
declare module "adnbn/entry/view" {
|
|
181
|
-
import type {ViewOptions, ViewDefinition, ViewRenderValue} from "../../types/view.js";
|
|
182
|
-
|
|
183
|
-
export function isViewDefinition(value: unknown): value is ViewDefinition<ViewOptions>;
|
|
184
|
-
|
|
185
|
-
export function isValidViewDefinitionRenderValue(value: unknown): value is ViewRenderValue<ViewOptions>;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
declare module "adnbn/entry/transport" {
|
|
189
|
-
export function isValidTransportDefinition(value: unknown): value is any;
|
|
190
|
-
|
|
191
|
-
export function isValidTransportInitFunction(value: unknown): value is (...args: any[]) => any;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
declare module "adnbn/entry/offscreen" {
|
|
195
|
-
import type {OffscreenDefinition, OffscreenUnresolvedDefinition} from "../../types/offscreen.js";
|
|
196
|
-
import type {TransportType} from "../../types/transport.js";
|
|
197
|
-
import type {ViewBuilder} from "../../types/view.js";
|
|
198
|
-
|
|
199
|
-
export class Builder {
|
|
200
|
-
constructor(options: OffscreenDefinition<TransportType> | OffscreenUnresolvedDefinition<TransportType>);
|
|
201
|
-
|
|
202
|
-
view(builder: ViewBuilder): this;
|
|
203
|
-
|
|
204
|
-
build(): Promise<void>;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
declare module "adnbn/entry/relay" {
|
|
209
|
-
import type {RelayDefinition, RelayUnresolvedDefinition} from "../../types/relay.js";
|
|
210
|
-
import type {TransportType} from "../../types/transport.js";
|
|
211
|
-
import type {ContentScriptBuilder} from "../../types/content.js";
|
|
212
|
-
|
|
213
|
-
export class Builder {
|
|
214
|
-
constructor(options: RelayDefinition<TransportType> | RelayUnresolvedDefinition<TransportType>);
|
|
215
|
-
|
|
216
|
-
content(builder: ContentScriptBuilder): this;
|
|
217
|
-
|
|
218
|
-
build(): Promise<void>;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
declare module "adnbn/entry/sandbox" {
|
|
223
|
-
import type {SandboxDefinition, SandboxUnresolvedDefinition} from "../../types/sandbox.js";
|
|
224
|
-
import type {TransportType} from "../../types/transport.js";
|
|
225
|
-
import type {ViewBuilder} from "../../types/view.js";
|
|
226
|
-
|
|
227
|
-
export class Builder {
|
|
228
|
-
constructor(options: SandboxDefinition<TransportType> | SandboxUnresolvedDefinition<TransportType>);
|
|
229
|
-
|
|
230
|
-
view(builder: ViewBuilder): this;
|
|
231
|
-
|
|
232
|
-
build(): Promise<void>;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
declare module "adnbn/offscreen" {
|
|
237
|
-
export class OffscreenBackground {
|
|
238
|
-
build(): void | Promise<void>;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
|
|
242
147
|
declare module "adnbn/entry/:entry" {
|
|
243
148
|
import type {TransportUnresolvedDefinition, TransportOptions, TransportType} from "../../types/transport.js";
|
|
244
149
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Builder from "./Builder.js";
|
|
2
2
|
export { Builder };
|
|
3
|
-
|
|
3
|
+
export type { RelayUnresolvedDefinition } from "../../types/relay.js";
|
|
4
|
+
declare const _default: (definition: Partial<import("../../types/relay.js").RelayDefinition<import("../../transport/index.js").TransportType>>) => void;
|
|
4
5
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/entry/relay/index.ts"],"sourcesContent":["import Builder from \"./Builder\";\n\nexport {Builder};\n\nexport default Builder.resolver();\n"],"mappings":"AAAA,OAAO,aAAa;
|
|
1
|
+
{"version":3,"sources":["../../../src/entry/relay/index.ts"],"sourcesContent":["import Builder from \"./Builder\";\n\nexport {Builder};\nexport type {RelayUnresolvedDefinition} from \"@typing/relay\";\n\nexport default Builder.resolver();\n"],"mappings":"AAAA,OAAO,aAAa;AAKpB,IAAO,gBAAQ,QAAQ,SAAS;","names":[]}
|
|
@@ -4,6 +4,7 @@ import { getLocaleDir, isLocaleRtl } from "./../../../locale/utils.js";
|
|
|
4
4
|
import { DynamicLocale } from "./../../../locale/providers/index.js";
|
|
5
5
|
const LocaleProvider = ({ children, storage, container = "html" }) => {
|
|
6
6
|
const locale = useMemo(() => new DynamicLocale(storage), []);
|
|
7
|
+
const langs = useMemo(() => locale.languageNames(), [locale]);
|
|
7
8
|
const [lang, setLang] = useState(locale.lang());
|
|
8
9
|
const t = useCallback((key, ...args) => {
|
|
9
10
|
return locale.trans(key, ...args);
|
|
@@ -42,6 +43,7 @@ const LocaleProvider = ({ children, storage, container = "html" }) => {
|
|
|
42
43
|
choice,
|
|
43
44
|
change,
|
|
44
45
|
lang,
|
|
46
|
+
langs,
|
|
45
47
|
dir: getLocaleDir(lang),
|
|
46
48
|
isRtl: isLocaleRtl(lang)
|
|
47
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/locale/adapters/react/LocaleProvider.tsx"],"sourcesContent":["import React, {PropsWithChildren, useCallback, useEffect, useMemo, useState} from \"react\";\n\nimport {LocaleContext, LocaleContract} from \"./context\";\n\nimport {getLocaleDir, isLocaleRtl} from \"@locale/utils\";\n\nimport {DynamicLocale} from \"@locale/providers\";\n\nimport {Language} from \"@typing/locale\";\n\nexport interface LocaleProviderProps {\n storage?: string | false;\n container?: string | Element | false;\n}\n\nconst LocaleProvider = ({children, storage, container = \"html\"}: PropsWithChildren<LocaleProviderProps>) => {\n const locale = useMemo(() => new DynamicLocale(storage), []);\n\n const [lang, setLang] = useState<Language>(locale.lang());\n\n const t: LocaleContract[\"t\"] = useCallback((key, ...args): string => {\n return locale.trans(key, ...args);\n }, []);\n\n const choice: LocaleContract[\"choice\"] = useCallback((key, count, ...args): string => {\n return locale.choice(key, count, ...args);\n }, []);\n\n const change: LocaleContract[\"change\"] = useCallback((lang): void => {\n locale\n .change(lang)\n .catch(err => console.error(`[LocaleProvider] Cannot find locale file for \"${lang}\" language`, err));\n }, []);\n\n useEffect(() => {\n if (container === false) {\n return;\n }\n\n const element = typeof container === \"string\" ? document.querySelector(container) : container;\n\n if (element) {\n element.setAttribute(\"lang\", lang);\n element.setAttribute(\"dir\", getLocaleDir(lang));\n\n return () => {\n element.removeAttribute(\"lang\");\n element.removeAttribute(\"dir\");\n };\n }\n }, [lang, container]);\n\n useEffect(() => {\n locale.sync().then(lang => setLang(lang));\n }, []);\n\n useEffect(() => {\n return locale.watch(lang => setLang(lang));\n }, []);\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n choice,\n change,\n lang,\n dir: getLocaleDir(lang),\n isRtl: isLocaleRtl(lang),\n }}\n >\n {children}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleProvider;\n"],"mappings":"AAAA,OAAO,SAA2B,aAAa,WAAW,SAAS,gBAAe;AAElF,SAAQ,qBAAoC;AAE5C,SAAQ,cAAc,mBAAkB;AAExC,SAAQ,qBAAoB;AAS5B,MAAM,iBAAiB,CAAC,EAAC,UAAU,SAAS,YAAY,OAAM,MAA8C;AACxG,QAAM,SAAS,QAAQ,MAAM,IAAI,cAAc,OAAO,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"sources":["../../../../src/locale/adapters/react/LocaleProvider.tsx"],"sourcesContent":["import React, {PropsWithChildren, useCallback, useEffect, useMemo, useState} from \"react\";\n\nimport {LocaleContext, LocaleContract} from \"./context\";\n\nimport {getLocaleDir, isLocaleRtl} from \"@locale/utils\";\n\nimport {DynamicLocale} from \"@locale/providers\";\n\nimport {Language} from \"@typing/locale\";\n\nexport interface LocaleProviderProps {\n storage?: string | false;\n container?: string | Element | false;\n}\n\nconst LocaleProvider = ({children, storage, container = \"html\"}: PropsWithChildren<LocaleProviderProps>) => {\n const locale = useMemo(() => new DynamicLocale(storage), []);\n const langs = useMemo(() => locale.languageNames(), [locale]);\n\n const [lang, setLang] = useState<Language>(locale.lang());\n\n const t: LocaleContract[\"t\"] = useCallback((key, ...args): string => {\n return locale.trans(key, ...args);\n }, []);\n\n const choice: LocaleContract[\"choice\"] = useCallback((key, count, ...args): string => {\n return locale.choice(key, count, ...args);\n }, []);\n\n const change: LocaleContract[\"change\"] = useCallback((lang): void => {\n locale\n .change(lang)\n .catch(err => console.error(`[LocaleProvider] Cannot find locale file for \"${lang}\" language`, err));\n }, []);\n\n useEffect(() => {\n if (container === false) {\n return;\n }\n\n const element = typeof container === \"string\" ? document.querySelector(container) : container;\n\n if (element) {\n element.setAttribute(\"lang\", lang);\n element.setAttribute(\"dir\", getLocaleDir(lang));\n\n return () => {\n element.removeAttribute(\"lang\");\n element.removeAttribute(\"dir\");\n };\n }\n }, [lang, container]);\n\n useEffect(() => {\n locale.sync().then(lang => setLang(lang));\n }, []);\n\n useEffect(() => {\n return locale.watch(lang => setLang(lang));\n }, []);\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n choice,\n change,\n lang,\n langs,\n dir: getLocaleDir(lang),\n isRtl: isLocaleRtl(lang),\n }}\n >\n {children}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleProvider;\n"],"mappings":"AAAA,OAAO,SAA2B,aAAa,WAAW,SAAS,gBAAe;AAElF,SAAQ,qBAAoC;AAE5C,SAAQ,cAAc,mBAAkB;AAExC,SAAQ,qBAAoB;AAS5B,MAAM,iBAAiB,CAAC,EAAC,UAAU,SAAS,YAAY,OAAM,MAA8C;AACxG,QAAM,SAAS,QAAQ,MAAM,IAAI,cAAc,OAAO,GAAG,CAAC,CAAC;AAC3D,QAAM,QAAQ,QAAQ,MAAM,OAAO,cAAc,GAAG,CAAC,MAAM,CAAC;AAE5D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAmB,OAAO,KAAK,CAAC;AAExD,QAAM,IAAyB,YAAY,CAAC,QAAQ,SAAiB;AACjE,WAAO,OAAO,MAAM,KAAK,GAAG,IAAI;AAAA,EACpC,GAAG,CAAC,CAAC;AAEL,QAAM,SAAmC,YAAY,CAAC,KAAK,UAAU,SAAiB;AAClF,WAAO,OAAO,OAAO,KAAK,OAAO,GAAG,IAAI;AAAA,EAC5C,GAAG,CAAC,CAAC;AAEL,QAAM,SAAmC,YAAY,CAACA,UAAe;AACjE,WACK,OAAOA,KAAI,EACX,MAAM,SAAO,QAAQ,MAAM,iDAAiDA,KAAI,cAAc,GAAG,CAAC;AAAA,EAC3G,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACZ,QAAI,cAAc,OAAO;AACrB;AAAA,IACJ;AAEA,UAAM,UAAU,OAAO,cAAc,WAAW,SAAS,cAAc,SAAS,IAAI;AAEpF,QAAI,SAAS;AACT,cAAQ,aAAa,QAAQ,IAAI;AACjC,cAAQ,aAAa,OAAO,aAAa,IAAI,CAAC;AAE9C,aAAO,MAAM;AACT,gBAAQ,gBAAgB,MAAM;AAC9B,gBAAQ,gBAAgB,KAAK;AAAA,MACjC;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,MAAM,SAAS,CAAC;AAEpB,YAAU,MAAM;AACZ,WAAO,KAAK,EAAE,KAAK,CAAAA,UAAQ,QAAQA,KAAI,CAAC;AAAA,EAC5C,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACZ,WAAO,OAAO,MAAM,CAAAA,UAAQ,QAAQA,KAAI,CAAC;AAAA,EAC7C,GAAG,CAAC,CAAC;AAEL,SACI;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACG,OAAO;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,aAAa,IAAI;AAAA,QACtB,OAAO,YAAY,IAAI;AAAA,MAC3B;AAAA;AAAA,IAEC;AAAA,EACL;AAER;AAEA,IAAO,yBAAQ;","names":["lang"]}
|
|
@@ -2,6 +2,7 @@ import { LocaleDir, Language, LocaleNonPluralKeys, LocaleSubstitutionArgs, Local
|
|
|
2
2
|
import { LocaleNativeStructure } from "../../providers/index.js";
|
|
3
3
|
export interface LocaleContract<S extends object = LocaleNativeStructure> {
|
|
4
4
|
lang: Language;
|
|
5
|
+
langs: ReadonlyMap<Language, string>;
|
|
5
6
|
dir: LocaleDir;
|
|
6
7
|
isRtl: boolean;
|
|
7
8
|
t<K extends LocaleNonPluralKeys<S>>(key: K, ...args: LocaleSubstitutionArgs<S, K>): string;
|
|
@@ -2,12 +2,13 @@ import { createContext, useContext } from "react";
|
|
|
2
2
|
import { LocaleDir, Language } from "./../../../types/locale.js";
|
|
3
3
|
const DefaultLocale = {
|
|
4
4
|
lang: Language.English,
|
|
5
|
+
langs: /* @__PURE__ */ new Map(),
|
|
5
6
|
isRtl: false,
|
|
6
7
|
dir: LocaleDir.LeftToRight,
|
|
7
|
-
t(key) {
|
|
8
|
+
t(key, ..._args) {
|
|
8
9
|
return key;
|
|
9
10
|
},
|
|
10
|
-
choice(key) {
|
|
11
|
+
choice(key, _count, ..._args) {
|
|
11
12
|
return key;
|
|
12
13
|
},
|
|
13
14
|
change(_lang) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/locale/adapters/react/context.ts"],"sourcesContent":["import {createContext, useContext} from \"react\";\n\nimport {LocaleDir, Language, LocaleNonPluralKeys, LocaleSubstitutionArgs, LocalePluralKeys} from \"@typing/locale\";\n\nimport {LocaleNativeStructure} from \"@locale/providers\";\n\nexport interface LocaleContract<S extends object = LocaleNativeStructure> {\n lang: Language;\n\n dir: LocaleDir;\n\n isRtl: boolean;\n\n t<K extends LocaleNonPluralKeys<S>>(key: K, ...args: LocaleSubstitutionArgs<S, K>): string;\n\n choice<K extends LocalePluralKeys<S>>(key: K, count: number, ...args: LocaleSubstitutionArgs<S, K>): string;\n\n change(lang: Language): void;\n}\n\nexport const DefaultLocale: LocaleContract = {\n lang: Language.English,\n isRtl: false,\n dir: LocaleDir.LeftToRight,\n t(key
|
|
1
|
+
{"version":3,"sources":["../../../../src/locale/adapters/react/context.ts"],"sourcesContent":["import {createContext, useContext} from \"react\";\n\nimport {LocaleDir, Language, LocaleNonPluralKeys, LocaleSubstitutionArgs, LocalePluralKeys} from \"@typing/locale\";\n\nimport {LocaleNativeStructure} from \"@locale/providers\";\n\nexport interface LocaleContract<S extends object = LocaleNativeStructure> {\n lang: Language;\n\n langs: ReadonlyMap<Language, string>;\n\n dir: LocaleDir;\n\n isRtl: boolean;\n\n t<K extends LocaleNonPluralKeys<S>>(key: K, ...args: LocaleSubstitutionArgs<S, K>): string;\n\n choice<K extends LocalePluralKeys<S>>(key: K, count: number, ...args: LocaleSubstitutionArgs<S, K>): string;\n\n change(lang: Language): void;\n}\n\nexport const DefaultLocale: LocaleContract = {\n lang: Language.English,\n langs: new Map(),\n isRtl: false,\n dir: LocaleDir.LeftToRight,\n t(key, ..._args): string {\n return key;\n },\n choice(key, _count, ..._args): string {\n return key;\n },\n change(_lang: Language) {},\n};\n\nexport const LocaleContext = createContext<LocaleContract>(DefaultLocale);\n\nLocaleContext.displayName = \"LocaleContext\";\n\nexport const useLocale = () => useContext(LocaleContext);\n"],"mappings":"AAAA,SAAQ,eAAe,kBAAiB;AAExC,SAAQ,WAAW,gBAA8E;AAoB1F,MAAM,gBAAgC;AAAA,EACzC,MAAM,SAAS;AAAA,EACf,OAAO,oBAAI,IAAI;AAAA,EACf,OAAO;AAAA,EACP,KAAK,UAAU;AAAA,EACf,EAAE,QAAQ,OAAe;AACrB,WAAO;AAAA,EACX;AAAA,EACA,OAAO,KAAK,WAAW,OAAe;AAClC,WAAO;AAAA,EACX;AAAA,EACA,OAAO,OAAiB;AAAA,EAAC;AAC7B;AAEO,MAAM,gBAAgB,cAA8B,aAAa;AAExE,cAAc,cAAc;AAErB,MAAM,YAAY,MAAM,WAAW,aAAa;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/locale/helpers.ts"],"sourcesContent":["import {LocaleNativeStructure, NativeLocale} from \"@locale/providers\";\nimport {convertLocaleMessageKey, extractLocaleKey} from \"@locale/utils\";\nimport {LocaleNonPluralKeys, LocalePluralKeys, LocaleSubstitutionArgs} from \"@typing/locale\";\n\n/**\n * Translates a non-plural locale key.\n *\n * Substitutions are type-checked from the generated locale structure:\n * keys without placeholders do not accept substitutions, while keys with\n * placeholders require all declared substitution values.\n *\n * @example\n * ```ts\n * t(\"app.name\");\n * t(\"app.greeting\", {name: \"Alice\"});\n * ```\n *\n * @param key - The locale key to translate.\n * @param args\n * @returns The translated string.\n */\nexport const t = <K extends LocaleNonPluralKeys<LocaleNativeStructure>>(\n key: K,\n ...args: LocaleSubstitutionArgs<LocaleNativeStructure, K>\n): string => {\n return NativeLocale.getInstance().trans(key, ...args);\n};\n\n/**\n * Translates a plural locale key using the provided count.\n *\n * Substitutions are type-checked from the generated locale structure:\n * keys without placeholders do not accept substitutions, while keys with\n * placeholders require all declared substitution values.\n *\n * @example\n * ```ts\n * choice(\"cart.items\", count, {count});\n * ```\n *\n * @param key - The locale key to translate.\n * @param count - The count used to select the plural form.\n * @param args\n * @returns The translated string.\n */\nexport const choice = <K extends LocalePluralKeys<LocaleNativeStructure>>(\n key: K,\n count: number,\n ...args: LocaleSubstitutionArgs<LocaleNativeStructure, K>\n): string => {\n return NativeLocale.getInstance().choice(key, count, ...args);\n};\n\n/**\n * Converts a locale key to a browser message reference.\n *\n * This is useful for browser-managed extension fields that expect\n * `__MSG_name__` references instead of already translated text.\n *\n * A warning is logged when the key does not exist in the generated locale keys.\n *\n * @example\n * ```ts\n * key(\"app.name\"); // \"__MSG_app_name__\"\n * ```\n *\n * @param value - The locale key to convert.\n * @returns The browser message reference.\n */\nexport const key = (value: keyof LocaleNativeStructure & string): string => {\n const locale = NativeLocale.getInstance();\n\n if (!locale.keys().has(value)) {\n console.warn(`Locale key \"${value}\" not found in \"${locale.lang()}\" language.`);\n }\n\n return convertLocaleMessageKey(value);\n};\n\n/**\n * Resolves a string that may contain a locale marker.\n *\n * When the input contains a locale marker, the marker is extracted and translated.\n * Plain strings are returned unchanged.\n *\n * @example\n * ```ts\n * resolve(\"@app.name\");\n * resolve(\"Plain title\");\n * ```\n *\n * @param input - A plain string or a marked locale key string.\n * @returns The translated text when a marker is found, otherwise the original input.\n */\nexport const resolve = (input: string): string => {\n const localeKey = extractLocaleKey(input);\n\n if (localeKey) {\n
|
|
1
|
+
{"version":3,"sources":["../../src/locale/helpers.ts"],"sourcesContent":["import {LocaleNativeStructure, NativeLocale} from \"@locale/providers\";\nimport {convertLocaleMessageKey, extractLocaleKey} from \"@locale/utils\";\nimport {LocaleNonPluralKeys, LocalePluralKeys, LocaleSubstitutionArgs} from \"@typing/locale\";\n\n/**\n * Translates a non-plural locale key.\n *\n * Substitutions are type-checked from the generated locale structure:\n * keys without placeholders do not accept substitutions, while keys with\n * placeholders require all declared substitution values.\n *\n * @example\n * ```ts\n * t(\"app.name\");\n * t(\"app.greeting\", {name: \"Alice\"});\n * ```\n *\n * @param key - The locale key to translate.\n * @param args\n * @returns The translated string.\n */\nexport const t = <K extends LocaleNonPluralKeys<LocaleNativeStructure>>(\n key: K,\n ...args: LocaleSubstitutionArgs<LocaleNativeStructure, K>\n): string => {\n return NativeLocale.getInstance().trans(key, ...args);\n};\n\n/**\n * Translates a plural locale key using the provided count.\n *\n * Substitutions are type-checked from the generated locale structure:\n * keys without placeholders do not accept substitutions, while keys with\n * placeholders require all declared substitution values.\n *\n * @example\n * ```ts\n * choice(\"cart.items\", count, {count});\n * ```\n *\n * @param key - The locale key to translate.\n * @param count - The count used to select the plural form.\n * @param args\n * @returns The translated string.\n */\nexport const choice = <K extends LocalePluralKeys<LocaleNativeStructure>>(\n key: K,\n count: number,\n ...args: LocaleSubstitutionArgs<LocaleNativeStructure, K>\n): string => {\n return NativeLocale.getInstance().choice(key, count, ...args);\n};\n\n/**\n * Converts a locale key to a browser message reference.\n *\n * This is useful for browser-managed extension fields that expect\n * `__MSG_name__` references instead of already translated text.\n *\n * A warning is logged when the key does not exist in the generated locale keys.\n *\n * @example\n * ```ts\n * key(\"app.name\"); // \"__MSG_app_name__\"\n * ```\n *\n * @param value - The locale key to convert.\n * @returns The browser message reference.\n */\nexport const key = (value: keyof LocaleNativeStructure & string): string => {\n const locale = NativeLocale.getInstance();\n\n if (!locale.keys().has(value)) {\n console.warn(`Locale key \"${value}\" not found in \"${locale.lang()}\" language.`);\n }\n\n return convertLocaleMessageKey(value);\n};\n\n/**\n * Resolves a string that may contain a locale marker.\n *\n * When the input contains a locale marker, the marker is extracted and translated.\n * Plain strings are returned unchanged.\n *\n * @example\n * ```ts\n * resolve(\"@app.name\");\n * resolve(\"Plain title\");\n * ```\n *\n * @param input - A plain string or a marked locale key string.\n * @returns The translated text when a marker is found, otherwise the original input.\n */\nexport const resolve = (input: string): string => {\n const localeKey = extractLocaleKey(input);\n\n if (localeKey) {\n // Markers are runtime strings without substitutions; keep t() strict for typed callers.\n return (t as (key: string) => string)(localeKey);\n }\n\n return input;\n};\n"],"mappings":"AAAA,SAA+B,oBAAmB;AAClD,SAAQ,yBAAyB,wBAAuB;AAoBjD,MAAM,IAAI,CACbA,SACG,SACM;AACT,SAAO,aAAa,YAAY,EAAE,MAAMA,MAAK,GAAG,IAAI;AACxD;AAmBO,MAAM,SAAS,CAClBA,MACA,UACG,SACM;AACT,SAAO,aAAa,YAAY,EAAE,OAAOA,MAAK,OAAO,GAAG,IAAI;AAChE;AAkBO,MAAM,MAAM,CAAC,UAAwD;AACxE,QAAM,SAAS,aAAa,YAAY;AAExC,MAAI,CAAC,OAAO,KAAK,EAAE,IAAI,KAAK,GAAG;AAC3B,YAAQ,KAAK,eAAe,KAAK,mBAAmB,OAAO,KAAK,CAAC,aAAa;AAAA,EAClF;AAEA,SAAO,wBAAwB,KAAK;AACxC;AAiBO,MAAM,UAAU,CAAC,UAA0B;AAC9C,QAAM,YAAY,iBAAiB,KAAK;AAExC,MAAI,WAAW;AAEX,WAAQ,EAA8B,SAAS;AAAA,EACnD;AAEA,SAAO;AACX;","names":["key"]}
|
|
@@ -3,6 +3,8 @@ export default abstract class<S extends object = LocaleStructure> implements Loc
|
|
|
3
3
|
abstract lang(): Language;
|
|
4
4
|
abstract keys(): Set<keyof S>;
|
|
5
5
|
abstract languages(): Set<Language>;
|
|
6
|
+
/** Returns native names for this provider's languages, preserving their order. */
|
|
7
|
+
languageNames(): Map<Language, string>;
|
|
6
8
|
protected abstract value(key: keyof S & string): string | undefined;
|
|
7
9
|
trans<K extends LocaleNonPluralKeys<S>>(key: K, ...args: LocaleSubstitutionArgs<S, K>): string;
|
|
8
10
|
choice<K extends LocalePluralKeys<S>>(key: K, count: number, ...args: LocaleSubstitutionArgs<S, K>): string;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Language,
|
|
3
|
+
LanguageNames,
|
|
3
4
|
LocaleValuesSeparator
|
|
4
5
|
} from "./../../types/locale.js";
|
|
5
6
|
class AbstractLocale_default {
|
|
7
|
+
/** Returns native names for this provider's languages, preserving their order. */
|
|
8
|
+
languageNames() {
|
|
9
|
+
return new Map([...this.languages()].map((language) => [language, LanguageNames[language]]));
|
|
10
|
+
}
|
|
6
11
|
trans(key, ...args) {
|
|
7
12
|
const [substitutions] = args;
|
|
8
13
|
return this.get(key, substitutions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/locale/providers/AbstractLocale.ts"],"sourcesContent":["import {\n Language,\n LocaleNonPluralKeys,\n LocalePluralKeys,\n LocaleProvider,\n LocaleStructure,\n LocaleSubstitutionArgs,\n LocaleSubstitutionValue,\n LocaleValuesSeparator,\n} from \"@typing/locale\";\n\nexport default abstract class<S extends object = LocaleStructure> implements LocaleProvider<S> {\n public abstract lang(): Language;\n\n public abstract keys(): Set<keyof S>;\n\n public abstract languages(): Set<Language>;\n\n protected abstract value(key: keyof S & string): string | undefined;\n\n public trans<K extends LocaleNonPluralKeys<S>>(key: K, ...args: LocaleSubstitutionArgs<S, K>): string {\n const [substitutions] = args;\n\n return this.get(key, substitutions);\n }\n\n public choice<K extends LocalePluralKeys<S>>(key: K, count: number, ...args: LocaleSubstitutionArgs<S, K>): string {\n const [substitutions] = args;\n const parts = this.get(key, substitutions).split(LocaleValuesSeparator);\n\n const idx = this.getPluralIndex(count);\n\n return parts[idx] ?? parts[0] ?? (key as string);\n }\n\n public get<K extends keyof S & string>(key: K, substitutions?: Record<string, LocaleSubstitutionValue>): string {\n const template = this.value(key);\n\n if (template === undefined) {\n console.warn(`Locale key \"${key}\" not found in \"${this.lang()}\" language.`);\n\n return key as string;\n }\n\n if (substitutions) {\n return template.replace(/{{(.*?)}}/g, (_, placeholder: string) => {\n const substitution = placeholder.trim();\n\n if (substitution in substitutions) {\n return substitutions[substitution]!.toString();\n }\n\n console.warn(\n `Locale substitution \"${substitution}\" not found for key \"${key}\" in \"${this.lang()}\" language.`\n );\n\n return substitution;\n });\n }\n\n return template;\n }\n\n private getPluralIndex(count: number): number {\n switch (this.lang()) {\n case Language.Indonesian:\n case Language.Japanese:\n case Language.Kannada:\n case Language.Korean:\n case Language.Malay:\n case Language.Thai:\n case Language.Turkish:\n case Language.Vietnamese:\n return 0;\n\n case Language.Bengali:\n case Language.Bulgarian:\n case Language.Catalan:\n case Language.Danish:\n case Language.German:\n case Language.Greek:\n case Language.English:\n case Language.EnglishAustralia:\n case Language.EnglishGreatBritain:\n case Language.EnglishUSA:\n case Language.Spanish:\n case Language.SpanishLatinAmericaAndCaribbean:\n case Language.Estonian:\n case Language.Persian:\n case Language.Finnish:\n case Language.Gujarati:\n case Language.Hebrew:\n case Language.Hungarian:\n case Language.Italian:\n case Language.Malayalam:\n case Language.Marathi:\n case Language.Dutch:\n case Language.Norwegian:\n case Language.Swedish:\n case Language.Swahili:\n case Language.Tamil:\n case Language.Telugu:\n case Language.ChineseChina:\n case Language.ChineseTaiwan:\n case Language.PortugueseBrazil:\n case Language.PortuguesePortugal:\n return count == 1 ? 0 : 1;\n\n case Language.Amharic:\n case Language.Filipino:\n case Language.French:\n case Language.Hindi:\n return count == 0 || count == 1 ? 0 : 1;\n\n case Language.Croatian:\n case Language.Russian:\n case Language.Serbian:\n case Language.Ukrainian:\n return count % 10 == 1 && count % 100 != 11\n ? 0\n : count % 10 >= 2 && count % 10 <= 4 && (count % 100 < 10 || count % 100 >= 20)\n ? 1\n : 2;\n\n case Language.Czech:\n case Language.Slovak:\n return count == 1 ? 0 : count >= 2 && count <= 4 ? 1 : 2;\n\n case Language.Lithuanian:\n return count % 10 == 1 && count % 100 != 11\n ? 0\n : count % 10 >= 2 && (count % 100 < 10 || count % 100 >= 20)\n ? 1\n : 2;\n\n case Language.Slovenian:\n return count % 100 == 1 ? 0 : count % 100 == 2 ? 1 : count % 100 == 3 || count % 100 == 4 ? 2 : 3;\n\n case Language.Latvian:\n return count == 0 ? 0 : count % 10 == 1 && count % 100 != 11 ? 1 : 2;\n\n case Language.Polish:\n return count == 1\n ? 0\n : count % 10 >= 2 && count % 10 <= 4 && (count % 100 < 12 || count % 100 > 14)\n ? 1\n : 2;\n\n case Language.Romanian:\n return count == 1 ? 0 : count == 0 || (count % 100 > 0 && count % 100 < 20) ? 1 : 2;\n\n case Language.Arabic:\n return count == 0\n ? 0\n : count == 1\n ? 1\n : count == 2\n ? 2\n : count % 100 >= 3 && count % 100 <= 10\n ? 3\n : count % 100 >= 11 && count % 100 <= 99\n ? 4\n : 5;\n\n default:\n return 0;\n }\n }\n}\n"],"mappings":"AAAA;AAAA,EACI;AAAA,EAOA;AAAA,OACG;AAEP,MAAO,uBAAwF;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/locale/providers/AbstractLocale.ts"],"sourcesContent":["import {\n Language,\n LanguageNames,\n LocaleNonPluralKeys,\n LocalePluralKeys,\n LocaleProvider,\n LocaleStructure,\n LocaleSubstitutionArgs,\n LocaleSubstitutionValue,\n LocaleValuesSeparator,\n} from \"@typing/locale\";\n\nexport default abstract class<S extends object = LocaleStructure> implements LocaleProvider<S> {\n public abstract lang(): Language;\n\n public abstract keys(): Set<keyof S>;\n\n public abstract languages(): Set<Language>;\n\n /** Returns native names for this provider's languages, preserving their order. */\n public languageNames(): Map<Language, string> {\n return new Map([...this.languages()].map(language => [language, LanguageNames[language]]));\n }\n\n protected abstract value(key: keyof S & string): string | undefined;\n\n public trans<K extends LocaleNonPluralKeys<S>>(key: K, ...args: LocaleSubstitutionArgs<S, K>): string {\n const [substitutions] = args;\n\n return this.get(key, substitutions);\n }\n\n public choice<K extends LocalePluralKeys<S>>(key: K, count: number, ...args: LocaleSubstitutionArgs<S, K>): string {\n const [substitutions] = args;\n const parts = this.get(key, substitutions).split(LocaleValuesSeparator);\n\n const idx = this.getPluralIndex(count);\n\n return parts[idx] ?? parts[0] ?? (key as string);\n }\n\n public get<K extends keyof S & string>(key: K, substitutions?: Record<string, LocaleSubstitutionValue>): string {\n const template = this.value(key);\n\n if (template === undefined) {\n console.warn(`Locale key \"${key}\" not found in \"${this.lang()}\" language.`);\n\n return key as string;\n }\n\n if (substitutions) {\n return template.replace(/{{(.*?)}}/g, (_, placeholder: string) => {\n const substitution = placeholder.trim();\n\n if (substitution in substitutions) {\n return substitutions[substitution]!.toString();\n }\n\n console.warn(\n `Locale substitution \"${substitution}\" not found for key \"${key}\" in \"${this.lang()}\" language.`\n );\n\n return substitution;\n });\n }\n\n return template;\n }\n\n private getPluralIndex(count: number): number {\n switch (this.lang()) {\n case Language.Indonesian:\n case Language.Japanese:\n case Language.Kannada:\n case Language.Korean:\n case Language.Malay:\n case Language.Thai:\n case Language.Turkish:\n case Language.Vietnamese:\n return 0;\n\n case Language.Bengali:\n case Language.Bulgarian:\n case Language.Catalan:\n case Language.Danish:\n case Language.German:\n case Language.Greek:\n case Language.English:\n case Language.EnglishAustralia:\n case Language.EnglishGreatBritain:\n case Language.EnglishUSA:\n case Language.Spanish:\n case Language.SpanishLatinAmericaAndCaribbean:\n case Language.Estonian:\n case Language.Persian:\n case Language.Finnish:\n case Language.Gujarati:\n case Language.Hebrew:\n case Language.Hungarian:\n case Language.Italian:\n case Language.Malayalam:\n case Language.Marathi:\n case Language.Dutch:\n case Language.Norwegian:\n case Language.Swedish:\n case Language.Swahili:\n case Language.Tamil:\n case Language.Telugu:\n case Language.ChineseChina:\n case Language.ChineseTaiwan:\n case Language.PortugueseBrazil:\n case Language.PortuguesePortugal:\n return count == 1 ? 0 : 1;\n\n case Language.Amharic:\n case Language.Filipino:\n case Language.French:\n case Language.Hindi:\n return count == 0 || count == 1 ? 0 : 1;\n\n case Language.Croatian:\n case Language.Russian:\n case Language.Serbian:\n case Language.Ukrainian:\n return count % 10 == 1 && count % 100 != 11\n ? 0\n : count % 10 >= 2 && count % 10 <= 4 && (count % 100 < 10 || count % 100 >= 20)\n ? 1\n : 2;\n\n case Language.Czech:\n case Language.Slovak:\n return count == 1 ? 0 : count >= 2 && count <= 4 ? 1 : 2;\n\n case Language.Lithuanian:\n return count % 10 == 1 && count % 100 != 11\n ? 0\n : count % 10 >= 2 && (count % 100 < 10 || count % 100 >= 20)\n ? 1\n : 2;\n\n case Language.Slovenian:\n return count % 100 == 1 ? 0 : count % 100 == 2 ? 1 : count % 100 == 3 || count % 100 == 4 ? 2 : 3;\n\n case Language.Latvian:\n return count == 0 ? 0 : count % 10 == 1 && count % 100 != 11 ? 1 : 2;\n\n case Language.Polish:\n return count == 1\n ? 0\n : count % 10 >= 2 && count % 10 <= 4 && (count % 100 < 12 || count % 100 > 14)\n ? 1\n : 2;\n\n case Language.Romanian:\n return count == 1 ? 0 : count == 0 || (count % 100 > 0 && count % 100 < 20) ? 1 : 2;\n\n case Language.Arabic:\n return count == 0\n ? 0\n : count == 1\n ? 1\n : count == 2\n ? 2\n : count % 100 >= 3 && count % 100 <= 10\n ? 3\n : count % 100 >= 11 && count % 100 <= 99\n ? 4\n : 5;\n\n default:\n return 0;\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import AbstractLocale from "./AbstractLocale.js";
|
|
2
|
-
import { Language, LocaleProvider
|
|
3
|
-
|
|
2
|
+
import { Language, LocaleProvider } from "../../types/locale.js";
|
|
3
|
+
/** Augmented by the generated .adnbn/locale.d.ts for the current app. */
|
|
4
|
+
export interface LocaleNativeStructure {
|
|
4
5
|
}
|
|
5
6
|
export default class NativeLocale<S extends object = LocaleNativeStructure> extends AbstractLocale<S> {
|
|
6
7
|
private static instance?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/locale/providers/NativeLocale.ts"],"sourcesContent":["import {getI18nMessage} from \"@addon-core/browser\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {convertLocaleKey, resolveLanguage} from \"@locale/utils\";\n\nimport {Language, LocaleCustomKeyForLanguage, LocaleProvider
|
|
1
|
+
{"version":3,"sources":["../../../src/locale/providers/NativeLocale.ts"],"sourcesContent":["import {getI18nMessage} from \"@addon-core/browser\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {convertLocaleKey, resolveLanguage} from \"@locale/utils\";\n\nimport {Language, LocaleCustomKeyForLanguage, LocaleProvider} from \"@typing/locale\";\n\n/** Augmented by the generated .adnbn/locale.d.ts for the current app. */\nexport interface LocaleNativeStructure {}\n\nexport default class NativeLocale<S extends object = LocaleNativeStructure> extends AbstractLocale<S> {\n private static instance?: LocaleProvider<LocaleNativeStructure>;\n\n public static getInstance(): LocaleProvider<LocaleNativeStructure> {\n return (NativeLocale.instance ??= new NativeLocale());\n }\n\n private readonly language?: Language;\n\n constructor() {\n super();\n\n /**\n Locale detection note:\n Chrome does NOT expose an API to get the effective translation locale.\n getUILanguage() returns browser UI language (e.g., es-MX),\n even if extension translations fall back to default_locale (e.g., en).\n To detect the actual language used by i18n, we read a locale marker\n from messages.json via chrome.i18n.getMessage().\n */\n const markerLang = getI18nMessage(LocaleCustomKeyForLanguage);\n const resolvedLang = resolveLanguage(markerLang);\n\n if (!resolvedLang) {\n console.warn(`[NativeLocale] Unsupported language detected: \"${markerLang}\".`);\n }\n\n if (markerLang && resolvedLang && markerLang !== resolvedLang) {\n console.info(`[NativeLocale] Language normalized: using \"${resolvedLang}\" instead of \"${markerLang}\".`);\n }\n\n this.language = resolvedLang;\n }\n\n public lang(): Language {\n if (!this.language) {\n throw new Error(\"[NativeLocale] Language is not defined. Failed to determine a supported locale.\");\n }\n\n return this.language;\n }\n\n public keys(): Set<keyof S> {\n try {\n // @ts-expect-error: __ADNBN_LOCALE_KEYS__ is a virtual variable generated by the bundler `src/cli/plugins/locale/index.ts`\n return new Set<string>(__ADNBN_LOCALE_KEYS__) as Set<keyof S>;\n } catch (e) {\n console.error(\"[NativeLocale] Failed to access locale keys. Ensure the bundler plugin is active.\", e);\n\n return new Set<keyof S>();\n }\n }\n\n public languages(): Set<Language> {\n try {\n // @ts-expect-error: __ADNBN_DEFINED_LOCALES__ is a virtual variable generated by the bundler `src/cli/plugins/locale/index.ts`\n return new Set<Language>(__ADNBN_DEFINED_LOCALES__);\n } catch (e) {\n console.error(\"[NativeLocale] Failed to access defined locales. Check virtual variables configuration.\", e);\n\n return new Set<Language>();\n }\n }\n\n protected value(key: Extract<keyof S, string>): string | undefined {\n const value = getI18nMessage(convertLocaleKey(key));\n\n // Native i18n returns an empty string for missing messages too; build keys distinguish valid empty translations.\n if (value === \"\" && !this.keys().has(key)) {\n return undefined;\n }\n\n return value;\n }\n}\n"],"mappings":"AAAA,SAAQ,sBAAqB;AAE7B,OAAO,oBAAoB;AAE3B,SAAQ,kBAAkB,uBAAsB;AAEhD,SAAkB,kCAAiD;AAKnE,MAAO,qBAA6E,eAAkB;AAAA,EAClG,OAAe;AAAA,EAEf,OAAc,cAAqD;AAC/D,WAAQ,aAAa,aAAb,aAAa,WAAa,IAAI,aAAa;AAAA,EACvD;AAAA,EAEiB;AAAA,EAEjB,cAAc;AACV,UAAM;AAUN,UAAM,aAAa,eAAe,0BAA0B;AAC5D,UAAM,eAAe,gBAAgB,UAAU;AAE/C,QAAI,CAAC,cAAc;AACf,cAAQ,KAAK,kDAAkD,UAAU,IAAI;AAAA,IACjF;AAEA,QAAI,cAAc,gBAAgB,eAAe,cAAc;AAC3D,cAAQ,KAAK,8CAA8C,YAAY,iBAAiB,UAAU,IAAI;AAAA,IAC1G;AAEA,SAAK,WAAW;AAAA,EACpB;AAAA,EAEO,OAAiB;AACpB,QAAI,CAAC,KAAK,UAAU;AAChB,YAAM,IAAI,MAAM,iFAAiF;AAAA,IACrG;AAEA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,OAAqB;AACxB,QAAI;AAEA,aAAO,IAAI,IAAY,qBAAqB;AAAA,IAChD,SAAS,GAAG;AACR,cAAQ,MAAM,qFAAqF,CAAC;AAEpG,aAAO,oBAAI,IAAa;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEO,YAA2B;AAC9B,QAAI;AAEA,aAAO,IAAI,IAAc,yBAAyB;AAAA,IACtD,SAAS,GAAG;AACR,cAAQ,MAAM,2FAA2F,CAAC;AAE1G,aAAO,oBAAI,IAAc;AAAA,IAC7B;AAAA,EACJ;AAAA,EAEU,MAAM,KAAmD;AAC/D,UAAM,QAAQ,eAAe,iBAAiB,GAAG,CAAC;AAGlD,QAAI,UAAU,MAAM,CAAC,KAAK,KAAK,EAAE,IAAI,GAAG,GAAG;AACvC,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
|
package/dist/main/relay.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { RelayName, RelayProxyTarget } from "../relay/index.js";
|
|
1
|
+
import type { RelayName } from "../relay/index.js";
|
|
3
2
|
import type { TransportType } from "../types/transport.js";
|
|
4
|
-
import { RelayDefinition, RelayMethod,
|
|
5
|
-
export { RelayMethod };
|
|
6
|
-
export
|
|
3
|
+
import { RelayDefinition, RelayAllFrames, RelayFrameErrorKind, RelayMethod, type RelayBatchOptions, type RelayBatchProxyTarget, type RelayProxyTarget, type RelayScalarOptions } from "../types/relay.js";
|
|
4
|
+
export { RelayAllFrames, RelayFrameErrorKind, RelayMethod };
|
|
5
|
+
export { RelayDiscoveryError } from "../relay/discovery/RelayDiscovery.js";
|
|
6
|
+
export type { RelayAllFramesOptions, RelayAnyFramesOptions, RelayBatchOptions, RelayBatchProxyTarget, RelayBatchRpcProxy, RelayCallOptions, RelayDocumentOptions, RelayDocumentsOptions, RelayExecutionOptions, RelayEveryFrameOptions, RelayFrameError, RelayFrameOptions, RelayFrameResult, RelayFramesOptions, RelayFramesResult, RelayNonEmptyReadonlyArray, RelayProxyTarget, RelayResultTarget, RelayScalarOptions, RelayTopFrameOptions, RelayDefinition, } from "../types/relay.js";
|
|
7
7
|
export declare const defineRelay: <T extends TransportType>(options: RelayDefinition<T>) => RelayDefinition<T>;
|
|
8
|
-
export declare
|
|
8
|
+
export declare function getRelay<N extends RelayName>(name: N, params: number | RelayScalarOptions): RelayProxyTarget<N>;
|
|
9
|
+
export declare function getRelay<N extends RelayName>(name: N, params: RelayBatchOptions): RelayBatchProxyTarget<N>;
|
package/dist/main/relay.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import RelayPermission from "./../relay/RelayPermission.js";
|
|
2
2
|
import { ProxyRelay } from "./../relay/providers/index.js";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
RelayAllFrames,
|
|
5
|
+
RelayFrameErrorKind,
|
|
6
|
+
RelayMethod
|
|
7
|
+
} from "./../types/relay.js";
|
|
8
|
+
import { RelayDiscoveryError } from "./../relay/discovery/RelayDiscovery.js";
|
|
4
9
|
const defineRelay = (options) => {
|
|
5
10
|
return options;
|
|
6
11
|
};
|
|
@@ -13,16 +18,18 @@ const getRelayOptionsMap = () => {
|
|
|
13
18
|
}
|
|
14
19
|
return relays;
|
|
15
20
|
};
|
|
16
|
-
|
|
21
|
+
function getRelay(name, params) {
|
|
17
22
|
const relays = getRelayOptionsMap();
|
|
18
|
-
RelayPermission.init(relays);
|
|
19
23
|
const options = relays.get(name);
|
|
20
24
|
if (!options) {
|
|
21
25
|
throw new Error(`Failed to get relay "${name}"`);
|
|
22
26
|
}
|
|
23
|
-
return new ProxyRelay(name, options, params).get();
|
|
24
|
-
}
|
|
27
|
+
return new ProxyRelay(name, options, params, RelayPermission.getInstance(relays)).get();
|
|
28
|
+
}
|
|
25
29
|
export {
|
|
30
|
+
RelayAllFrames,
|
|
31
|
+
RelayDiscoveryError,
|
|
32
|
+
RelayFrameErrorKind,
|
|
26
33
|
RelayMethod,
|
|
27
34
|
defineRelay,
|
|
28
35
|
getRelay
|
package/dist/main/relay.js.map
CHANGED
|
@@ -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 type {RelayName
|
|
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} from \"@relay/index\";\nimport type {TransportType} from \"@typing/transport\";\nimport {\n RelayDefinition,\n RelayAllFrames,\n RelayFrameErrorKind,\n RelayMethod,\n RelayOptions,\n RelayOptionsMap,\n type RelayBatchOptions,\n type RelayBatchProxyTarget,\n type RelayProxyTarget,\n type RelayScalarOptions,\n} from \"@typing/relay\";\n\nexport {RelayAllFrames, RelayFrameErrorKind, RelayMethod};\nexport {RelayDiscoveryError} from \"@relay/discovery/RelayDiscovery\";\nexport type {\n RelayAllFramesOptions,\n RelayAnyFramesOptions,\n RelayBatchOptions,\n RelayBatchProxyTarget,\n RelayBatchRpcProxy,\n RelayCallOptions,\n RelayDocumentOptions,\n RelayDocumentsOptions,\n RelayExecutionOptions,\n RelayEveryFrameOptions,\n RelayFrameError,\n RelayFrameOptions,\n RelayFrameResult,\n RelayFramesOptions,\n RelayFramesResult,\n RelayNonEmptyReadonlyArray,\n RelayProxyTarget,\n RelayResultTarget,\n RelayScalarOptions,\n RelayTopFrameOptions,\n RelayDefinition,\n} from \"@typing/relay\";\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 function getRelay<N extends RelayName>(name: N, params: number | RelayScalarOptions): RelayProxyTarget<N>;\n\nexport function getRelay<N extends RelayName>(name: N, params: RelayBatchOptions): RelayBatchProxyTarget<N>;\n\nexport function getRelay<N extends RelayName>(\n name: N,\n params: ProxyRelayParams\n): RelayProxyTarget<N> | RelayBatchProxyTarget<N> {\n const relays = getRelayOptionsMap();\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, RelayPermission.getInstance(relays)).get() as\n | RelayProxyTarget<N>\n | RelayBatchProxyTarget<N>;\n}\n"],"mappings":"AAAA,OAAO,qBAAqB;AAC5B,SAAQ,kBAAwC;AAIhD;AAAA,EAEI;AAAA,EACA;AAAA,EACA;AAAA,OAOG;AAGP,SAAQ,2BAA0B;AAyB3B,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;AAMO,SAAS,SACZ,MACA,QAC8C;AAC9C,QAAM,SAAS,mBAAmB;AAClC,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,QAAQ,gBAAgB,YAAY,MAAM,CAAC,EAAE,IAAI;AAG1F;","names":[]}
|
package/dist/message/error.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { MessageError } from "../types/message.js";
|
|
2
|
+
export declare class UnsupportedMessageTargetError extends Error {
|
|
3
|
+
readonly cause?: unknown;
|
|
4
|
+
constructor(message: string, cause?: unknown);
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
7
|
* Convert any thrown value into a transferable {@link MessageError} envelope. Handles real
|
|
4
8
|
* `Error` instances, error-like objects, and primitives (JSON-stringifying objects when no
|
|
@@ -10,3 +14,5 @@ export declare const serializeError: (error: unknown) => MessageError;
|
|
|
10
14
|
* back to its native constructor (so `instanceof TypeError` survives the boundary).
|
|
11
15
|
*/
|
|
12
16
|
export declare const restoreError: (error?: MessageError) => Error;
|
|
17
|
+
export declare const markRemoteMessageError: <T extends Error>(error: T) => T;
|
|
18
|
+
export declare const isRemoteMessageError: (error: unknown) => error is Error;
|
package/dist/message/error.js
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
const RemoteMessageErrorMarker = /* @__PURE__ */ Symbol("RemoteMessageError");
|
|
2
|
+
class UnsupportedMessageTargetError extends Error {
|
|
3
|
+
cause;
|
|
4
|
+
constructor(message, cause) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "UnsupportedMessageTargetError";
|
|
7
|
+
if (cause !== void 0) {
|
|
8
|
+
this.cause = cause;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
1
12
|
const build = (name, message, stack) => {
|
|
2
13
|
return stack ? { name, message, stack } : { name, message };
|
|
3
14
|
};
|
|
@@ -48,7 +59,17 @@ const restoreError = (error) => {
|
|
|
48
59
|
}
|
|
49
60
|
return restored;
|
|
50
61
|
};
|
|
62
|
+
const markRemoteMessageError = (error) => {
|
|
63
|
+
Object.defineProperty(error, RemoteMessageErrorMarker, { value: true });
|
|
64
|
+
return error;
|
|
65
|
+
};
|
|
66
|
+
const isRemoteMessageError = (error) => {
|
|
67
|
+
return error instanceof Error && error[RemoteMessageErrorMarker] === true;
|
|
68
|
+
};
|
|
51
69
|
export {
|
|
70
|
+
UnsupportedMessageTargetError,
|
|
71
|
+
isRemoteMessageError,
|
|
72
|
+
markRemoteMessageError,
|
|
52
73
|
restoreError,
|
|
53
74
|
serializeError
|
|
54
75
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/message/error.ts"],"sourcesContent":["import {MessageError} from \"@typing/message\";\n\nconst build = (name: string, message: string, stack?: string): MessageError => {\n return stack ? {name, message, stack} : {name, message};\n};\n\nconst stringify = (error: object): string => {\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n};\n\nconst constructorFor = (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/**\n * Convert any thrown value into a transferable {@link MessageError} envelope. Handles real\n * `Error` instances, error-like objects, and primitives (JSON-stringifying objects when no\n * `message` is present). The standard serialize step for every cross-context transport.\n */\nexport const serializeError = (error: unknown): MessageError => {\n if (error instanceof Error) {\n return build(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 : stringify(error);\n const stack = typeof record.stack === \"string\" ? record.stack : undefined;\n\n return build(name, message, stack);\n }\n\n return build(\"Error\", String(error));\n};\n\n/**\n * Reconstruct an `Error` from a {@link MessageError} envelope, mapping the serialized `name`\n * back to its native constructor (so `instanceof TypeError` survives the boundary).\n */\nexport const restoreError = (error?: MessageError): Error => {\n const ErrorConstructor = constructorFor(error?.name ?? \"Error\");\n const restored = new ErrorConstructor(error?.message ?? \"Request failed.\");\n\n restored.name = error?.name || \"Error\";\n\n if (error?.stack) {\n restored.stack = error.stack;\n }\n\n return restored;\n};\n"],"mappings":"AAEA,MAAM,QAAQ,CAAC,MAAc,SAAiB,UAAiC;AAC3E,SAAO,QAAQ,EAAC,MAAM,SAAS,MAAK,IAAI,EAAC,MAAM,QAAO;AAC1D;AAEA,MAAM,YAAY,CAAC,UAA0B;AACzC,MAAI;AACA,WAAO,KAAK,UAAU,KAAK;AAAA,EAC/B,QAAQ;AACJ,WAAO,OAAO,KAAK;AAAA,EACvB;AACJ;AAEA,MAAM,iBAAiB,CAAC,SAAkD;AACtE,UAAQ,MAAM;AAAA,IACV,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EACf;AACJ;AAOO,MAAM,iBAAiB,CAAC,UAAiC;AAC5D,MAAI,iBAAiB,OAAO;AACxB,WAAO,MAAM,MAAM,MAAM,MAAM,SAAS,MAAM,KAAK;AAAA,EACvD;AAEA,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,UAAM,SAAS;AACf,UAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAC7D,UAAM,UAAU,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU,UAAU,KAAK;AACrF,UAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAEhE,WAAO,MAAM,MAAM,SAAS,KAAK;AAAA,EACrC;AAEA,SAAO,MAAM,SAAS,OAAO,KAAK,CAAC;AACvC;AAMO,MAAM,eAAe,CAAC,UAAgC;AACzD,QAAM,mBAAmB,gBAAe,+BAAO,SAAQ,OAAO;AAC9D,QAAM,WAAW,IAAI,kBAAiB,+BAAO,YAAW,iBAAiB;AAEzE,WAAS,QAAO,+BAAO,SAAQ;AAE/B,MAAI,+BAAO,OAAO;AACd,aAAS,QAAQ,MAAM;AAAA,EAC3B;AAEA,SAAO;AACX;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/message/error.ts"],"sourcesContent":["import {MessageError} from \"@typing/message\";\n\nconst RemoteMessageErrorMarker = Symbol(\"RemoteMessageError\");\n\nexport class UnsupportedMessageTargetError extends Error {\n public override readonly cause?: unknown;\n\n public constructor(message: string, cause?: unknown) {\n super(message);\n this.name = \"UnsupportedMessageTargetError\";\n\n if (cause !== undefined) {\n this.cause = cause;\n }\n }\n}\n\nconst build = (name: string, message: string, stack?: string): MessageError => {\n return stack ? {name, message, stack} : {name, message};\n};\n\nconst stringify = (error: object): string => {\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n};\n\nconst constructorFor = (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/**\n * Convert any thrown value into a transferable {@link MessageError} envelope. Handles real\n * `Error` instances, error-like objects, and primitives (JSON-stringifying objects when no\n * `message` is present). The standard serialize step for every cross-context transport.\n */\nexport const serializeError = (error: unknown): MessageError => {\n if (error instanceof Error) {\n return build(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 : stringify(error);\n const stack = typeof record.stack === \"string\" ? record.stack : undefined;\n\n return build(name, message, stack);\n }\n\n return build(\"Error\", String(error));\n};\n\n/**\n * Reconstruct an `Error` from a {@link MessageError} envelope, mapping the serialized `name`\n * back to its native constructor (so `instanceof TypeError` survives the boundary).\n */\nexport const restoreError = (error?: MessageError): Error => {\n const ErrorConstructor = constructorFor(error?.name ?? \"Error\");\n const restored = new ErrorConstructor(error?.message ?? \"Request failed.\");\n\n restored.name = error?.name || \"Error\";\n\n if (error?.stack) {\n restored.stack = error.stack;\n }\n\n return restored;\n};\n\nexport const markRemoteMessageError = <T extends Error>(error: T): T => {\n Object.defineProperty(error, RemoteMessageErrorMarker, {value: true});\n\n return error;\n};\n\nexport const isRemoteMessageError = (error: unknown): error is Error => {\n return (\n error instanceof Error &&\n (error as Error & {[RemoteMessageErrorMarker]?: boolean})[RemoteMessageErrorMarker] === true\n );\n};\n"],"mappings":"AAEA,MAAM,2BAA2B,uBAAO,oBAAoB;AAErD,MAAM,sCAAsC,MAAM;AAAA,EAC5B;AAAA,EAElB,YAAY,SAAiB,OAAiB;AACjD,UAAM,OAAO;AACb,SAAK,OAAO;AAEZ,QAAI,UAAU,QAAW;AACrB,WAAK,QAAQ;AAAA,IACjB;AAAA,EACJ;AACJ;AAEA,MAAM,QAAQ,CAAC,MAAc,SAAiB,UAAiC;AAC3E,SAAO,QAAQ,EAAC,MAAM,SAAS,MAAK,IAAI,EAAC,MAAM,QAAO;AAC1D;AAEA,MAAM,YAAY,CAAC,UAA0B;AACzC,MAAI;AACA,WAAO,KAAK,UAAU,KAAK;AAAA,EAC/B,QAAQ;AACJ,WAAO,OAAO,KAAK;AAAA,EACvB;AACJ;AAEA,MAAM,iBAAiB,CAAC,SAAkD;AACtE,UAAQ,MAAM;AAAA,IACV,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EACf;AACJ;AAOO,MAAM,iBAAiB,CAAC,UAAiC;AAC5D,MAAI,iBAAiB,OAAO;AACxB,WAAO,MAAM,MAAM,MAAM,MAAM,SAAS,MAAM,KAAK;AAAA,EACvD;AAEA,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,UAAM,SAAS;AACf,UAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAC7D,UAAM,UAAU,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU,UAAU,KAAK;AACrF,UAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAEhE,WAAO,MAAM,MAAM,SAAS,KAAK;AAAA,EACrC;AAEA,SAAO,MAAM,SAAS,OAAO,KAAK,CAAC;AACvC;AAMO,MAAM,eAAe,CAAC,UAAgC;AACzD,QAAM,mBAAmB,gBAAe,+BAAO,SAAQ,OAAO;AAC9D,QAAM,WAAW,IAAI,kBAAiB,+BAAO,YAAW,iBAAiB;AAEzE,WAAS,QAAO,+BAAO,SAAQ;AAE/B,MAAI,+BAAO,OAAO;AACd,aAAS,QAAQ,MAAM;AAAA,EAC3B;AAEA,SAAO;AACX;AAEO,MAAM,yBAAyB,CAAkB,UAAgB;AACpE,SAAO,eAAe,OAAO,0BAA0B,EAAC,OAAO,KAAI,CAAC;AAEpE,SAAO;AACX;AAEO,MAAM,uBAAuB,CAAC,UAAmC;AACpE,SACI,iBAAiB,SAChB,MAAyD,wBAAwB,MAAM;AAEhG;","names":[]}
|
package/dist/message/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Message } from "./providers/index.js";
|
|
2
|
+
import { UnsupportedMessageTargetError } from "./error.js";
|
|
2
3
|
import { MessageData, MessageDictionary, MessageGeneralHandler, MessageMapHandler, MessageResponse, MessageSenderAware, MessageTargetHandler, MessageType, MessageSender, MessageSendOptions } from "../types/message.js";
|
|
3
4
|
export type { MessageData, MessageDictionary, MessageGeneralHandler, MessageMapHandler, MessageResponse, MessageTargetHandler, MessageType, MessageSendOptions, MessageSenderAware, MessageSender, };
|
|
4
|
-
export { Message };
|
|
5
|
+
export { Message, UnsupportedMessageTargetError };
|
|
5
6
|
export interface MessageRegistry extends MessageDictionary {
|
|
6
7
|
}
|
|
7
8
|
export declare function sendMessage<K extends MessageType<MessageRegistry>>(type: K, data: MessageData<MessageRegistry, K>, options?: MessageSendOptions): Promise<MessageResponse<MessageRegistry, K>>;
|