@pc-nexus/bridge 0.0.1-next.3 → 0.5.0-next.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.
@@ -1,3 +1,4 @@
1
+ import { SUPPORTED_LOCALE_CODES } from '@pc-nexus/models';
1
2
  export { HistoryAction, NavigationTarget, ViewportSize } from '@pc-nexus/models';
2
3
 
3
4
  function attachObjectToWindow(key, value) {
@@ -63,14 +64,50 @@ if (typeof window !== "undefined") {
63
64
  }, true);
64
65
  }
65
66
 
67
+ function validateOpenOptions(options) {
68
+ if (typeof options !== "object" || options === null) {
69
+ throw new BridgeAPIError('"options" must be an object in dialog open.');
70
+ }
71
+ if (!options.resource) {
72
+ throw new BridgeAPIError('"resource" is required in dialog open options.');
73
+ }
74
+ }
75
+ function validateConfirmOptions(options) {
76
+ if (typeof options !== "object" || options === null) {
77
+ throw new BridgeAPIError('"options" must be an object in dialog confirm.');
78
+ }
79
+ if (!options.content) {
80
+ throw new BridgeAPIError('"content" is required in dialog confirm options.');
81
+ }
82
+ if (typeof options.onConfirm !== "function") {
83
+ throw new BridgeAPIError('"onConfirm" must be a function in dialog confirm options.');
84
+ }
85
+ }
66
86
  class NexusDialog {
67
87
  async open(options) {
88
+ validateOpenOptions(options);
68
89
  return await NexusBridge.call("openDialog", options);
69
90
  }
91
+ async confirm(options) {
92
+ validateConfirmOptions(options);
93
+ return await NexusBridge.call("confirm", options);
94
+ }
70
95
  }
71
96
  const dialog = new NexusDialog();
72
97
 
98
+ function validatePayload(payload) {
99
+ if (!payload) {
100
+ return;
101
+ }
102
+ if (Object.values(payload).some((value) => typeof value === "function")) {
103
+ throw new BridgeAPIError("Passing functions as part of the payload in invoke is not supported.");
104
+ }
105
+ }
73
106
  async function invoke(functionKey, payload) {
107
+ if (typeof functionKey !== "string") {
108
+ throw new BridgeAPIError('"functionKey" must be a string in invoke.');
109
+ }
110
+ validatePayload(payload);
74
111
  const params = {
75
112
  function: functionKey,
76
113
  payload: payload,
@@ -82,12 +119,34 @@ async function invoke(functionKey, payload) {
82
119
 
83
120
  class NexusRouter {
84
121
  async navigate(urlOrLocation) {
85
- await NexusBridge.call("routerNavigate", { urlOrLocation });
122
+ if (typeof urlOrLocation === "string") {
123
+ await NexusBridge.call("routerNavigate", { urlOrLocation });
124
+ }
125
+ else {
126
+ if (!urlOrLocation.target) {
127
+ const errorMessage = '"target" is required in router navigate.';
128
+ throw new BridgeAPIError(errorMessage);
129
+ }
130
+ await NexusBridge.call("routerNavigate", { urlOrLocation });
131
+ }
86
132
  }
87
133
  async open(urlOrLocation) {
88
- await NexusBridge.call("routerOpen", { urlOrLocation });
134
+ if (typeof urlOrLocation === "string") {
135
+ await NexusBridge.call("routerOpen", { urlOrLocation });
136
+ }
137
+ else {
138
+ if (!urlOrLocation.target) {
139
+ const errorMessage = '"target" is required in router open.';
140
+ throw new BridgeAPIError(errorMessage);
141
+ }
142
+ await NexusBridge.call("routerOpen", { urlOrLocation });
143
+ }
89
144
  }
90
145
  async generateUrl(location) {
146
+ if (!(location === null || location === void 0 ? void 0 : location.target)) {
147
+ const errorMessage = '"target" is required in router generateUrl.';
148
+ throw new BridgeAPIError(errorMessage);
149
+ }
91
150
  return await NexusBridge.call("routerGenerateUrl", { location });
92
151
  }
93
152
  async reload() {
@@ -101,34 +160,57 @@ class NexusView {
101
160
  return await NexusBridge.call("getContext");
102
161
  }
103
162
  async setWindowTitle(title) {
163
+ if (!title) {
164
+ throw new BridgeAPIError('"title" is required in view setWindowTitle.');
165
+ }
166
+ if (typeof title !== "string") {
167
+ throw new BridgeAPIError('"title" must be a string in view setWindowTitle.');
168
+ }
104
169
  await NexusBridge.call("setWindowTitle", { title });
105
170
  }
106
171
  async reload() {
107
- await NexusBridge.call("viewReload");
172
+ const success = await NexusBridge.call("viewReload");
173
+ if (success === false) {
174
+ throw new BridgeAPIError("this resource's view is not reloadable.");
175
+ }
108
176
  }
109
177
  async close() {
110
- const isSuccess = await NexusBridge.call("viewClose");
111
- if (!isSuccess) {
178
+ const success = await NexusBridge.call("viewClose");
179
+ if (!success) {
112
180
  const errorMessage = "this resource's view is not closable.";
113
181
  throw new BridgeAPIError(errorMessage);
114
182
  }
115
183
  }
184
+ /**
185
+ * 非弹窗场景调用无效。
186
+ */
116
187
  async onClose(payload) {
117
- await NexusBridge.call("viewOnClose", { payload });
188
+ if (typeof payload !== "function") {
189
+ const errorMessage = '"payload" must be a function in view onClose.';
190
+ throw new BridgeAPIError(errorMessage);
191
+ }
192
+ const success = await NexusBridge.call("viewOnClose", { payload });
193
+ if (!success) {
194
+ throw new BridgeAPIError("`onClose` failed because this resource's view is not closable.");
195
+ }
118
196
  }
119
197
  async isDialog() {
120
198
  return await NexusBridge.call("viewIsDialog");
121
199
  }
122
200
  async createHistory() {
123
201
  const history = await NexusBridge.call("createHistory");
124
- history.listen((location, action) => {
202
+ await history.listen((location, action) => {
125
203
  history.action = action;
126
204
  history.location = location;
127
205
  });
128
206
  return history;
129
207
  }
130
208
  async submit(payload) {
131
- await NexusBridge.call("viewSubmit", payload);
209
+ const result = await NexusBridge.call("viewSubmit", payload);
210
+ if (!result) {
211
+ throw new BridgeAPIError("this resource's view is not submittable.");
212
+ }
213
+ return result;
132
214
  }
133
215
  }
134
216
  const view = new NexusView();
@@ -232,7 +314,30 @@ const containsSerialisedBlobs = (payload) => {
232
314
  return false;
233
315
  };
234
316
 
317
+ function validateOnPayload(eventName, callback) {
318
+ if (!eventName) {
319
+ throw new BridgeAPIError('"eventName" is required in events on.');
320
+ }
321
+ if (typeof eventName !== "string") {
322
+ throw new BridgeAPIError('"eventName" must be a string in events on.');
323
+ }
324
+ if (!callback) {
325
+ throw new BridgeAPIError('"callback" is required in events on.');
326
+ }
327
+ if (typeof callback !== "function") {
328
+ throw new BridgeAPIError('"callback" must be a function in events on.');
329
+ }
330
+ }
331
+ function validateEmitPayload(eventName) {
332
+ if (!eventName) {
333
+ throw new BridgeAPIError('"eventName" is required in events emit.');
334
+ }
335
+ if (typeof eventName !== "string") {
336
+ throw new BridgeAPIError('"eventName" must be a string in events emit.');
337
+ }
338
+ }
235
339
  async function on(eventName, callback) {
340
+ validateOnPayload(eventName, callback);
236
341
  const wrappedCallback = (payload) => {
237
342
  let newPayload = payload;
238
343
  if (containsSerialisedBlobs(payload)) {
@@ -243,6 +348,7 @@ async function on(eventName, callback) {
243
348
  return NexusBridge.call("on", { eventName, callback: wrappedCallback });
244
349
  }
245
350
  async function emit(eventName, payload) {
351
+ validateEmitPayload(eventName);
246
352
  let newPayload = payload;
247
353
  if (containsBlobs(payload)) {
248
354
  newPayload = await serialiseBlobsInPayload(payload);
@@ -259,14 +365,24 @@ class NexusI18n {
259
365
  i18nFolderName = "__LOCALES__";
260
366
  async getTranslations(locale) {
261
367
  if (!locale) {
262
- locale = (await view.getContext()).locale;
368
+ locale = (await view.getContext()).account.locale;
369
+ }
370
+ else {
371
+ if (!SUPPORTED_LOCALE_CODES.includes(locale)) {
372
+ throw new BridgeAPIError(`"locale" must be a valid locale code, supported codes: ${SUPPORTED_LOCALE_CODES.join(", ")}.`);
373
+ }
263
374
  }
264
375
  const translations = await this.loadTranslations(locale);
265
376
  return { locale: locale, translations };
266
377
  }
267
378
  async createTranslator(locale) {
268
379
  if (!locale) {
269
- locale = (await view.getContext()).locale;
380
+ locale = (await view.getContext()).account.locale;
381
+ }
382
+ else {
383
+ if (!SUPPORTED_LOCALE_CODES.includes(locale)) {
384
+ throw new BridgeAPIError(`"locale" must be a valid locale code, supported codes: ${SUPPORTED_LOCALE_CODES.join(", ")}.`);
385
+ }
270
386
  }
271
387
  const translations = await this.loadTranslations(locale);
272
388
  return {
@@ -277,11 +393,11 @@ class NexusI18n {
277
393
  const url = `../${this.i18nFolderName}/${locale}.json`;
278
394
  if (!this.translationsCache[locale]) {
279
395
  this.translationsCache[locale] = fetch(url)
280
- .then((res) => res.json())
281
- .catch((err) => {
396
+ .then((response) => response.json())
397
+ .catch((error) => {
282
398
  // 请求失败要清理缓存
283
399
  delete this.translationsCache[locale];
284
- throw err;
400
+ throw new BridgeAPIError(`Failed to load translations for locale ${locale}, cause: ${error}`);
285
401
  });
286
402
  }
287
403
  return this.translationsCache[locale];
@@ -290,6 +406,9 @@ class NexusI18n {
290
406
  return path.split(".").reduce((o, k) => (o != null && typeof o === "object" ? o[k] : undefined), obj);
291
407
  }
292
408
  translate(key, translations, params) {
409
+ if (!key) {
410
+ throw new BridgeAPIError('"key" is required in i18n translate.');
411
+ }
293
412
  // 获取值(扁平或嵌套)
294
413
  let value = translations[key] ?? this.getValue(translations, key);
295
414
  // key 不存在 → 返回 key
@@ -339,13 +458,28 @@ async function parseToResponseData(res) {
339
458
  return response;
340
459
  }
341
460
 
461
+ const validateFetchOptions = (init) => {
462
+ if (!init) {
463
+ return init;
464
+ }
465
+ if ("signal" in init) {
466
+ const { signal: _signal, ...rest } = init;
467
+ console.error("Signal is not supported in @pc-nexus/bridge and was removed from fetch options.");
468
+ return rest;
469
+ }
470
+ return init;
471
+ };
342
472
  async function callRequestBridge(handlerName, payload) {
343
473
  const postPayload = await buildPayloadByRequestInit(payload);
344
474
  const { status, headers, body } = await NexusBridge.call(handlerName, postPayload);
345
475
  return parseToResponseData({ status, headers, body });
346
476
  }
347
477
  async function requestApi(path, options) {
348
- return callRequestBridge("requestApi", { path, ...options });
478
+ if (typeof path !== "string") {
479
+ throw new BridgeAPIError('"path" must be a string in requestApi.');
480
+ }
481
+ const validatedOptions = validateFetchOptions(options);
482
+ return callRequestBridge("requestApi", { path, ...validatedOptions });
349
483
  }
350
484
 
351
485
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pc-nexus-bridge.mjs","sources":["../../../../web/bridge/src/window.ts","../../../../web/bridge/src/bridge.ts","../../../../web/bridge/src/error.ts","../../../../web/bridge/src/dialog.ts","../../../../web/bridge/src/invoke.ts","../../../../web/bridge/src/router.ts","../../../../web/bridge/src/view.ts","../../../../web/bridge/src/utils/blob-parser.ts","../../../../web/bridge/src/events.ts","../../../../web/bridge/src/i18n.ts","../../../../web/bridge/src/utils/request.ts","../../../../web/bridge/src/request-api.ts","../../../../web/bridge/src/pc-nexus-bridge.ts"],"sourcesContent":["export type SafeAny = any;\n\nexport function attachObjectToWindow<T>(key: string, value: T) {\n (window as SafeAny)[key] = value;\n}\n\nexport function getObjectFromWindow<T>(key: string) {\n return (window as SafeAny)[key];\n}\n","import { getObjectFromWindow } from \"./window\";\n\ninterface HostMessageEvent<T = unknown> {\n source: Window | null;\n origin: string;\n data: T;\n}\n\ninterface Cancelable {\n cancel: () => void;\n}\n\ninterface GlobalBridge {\n call<T>(name: string, payload?: object | undefined): Promise<T>;\n on<T>(name: string, handler: (event: HostMessageEvent<T>) => void): Cancelable;\n}\n\nfunction getBridge() {\n const bridge = getObjectFromWindow<GlobalBridge>(\"__pc_nexus_bridge__\");\n return bridge;\n}\n\nexport class NexusBridge {\n static getBridgeCall<T>(): (name: string, payload?: object) => Promise<T> {\n if (!getBridge()) {\n throw new Error(`\n Unable to establish a connection with the PingCode nexus bridge.\n If you are trying to run your app locally, Nexus apps only work in the context of PingCode products. Refer to https://developer.pingcode.com for how to tunnel when using a local development server.\n `);\n }\n return getBridge().call;\n }\n\n static async call<T>(name: string, payload?: any): Promise<T> {\n const result = await NexusBridge.getBridgeCall<T>()(name, payload);\n return result as T;\n }\n\n /**\n * 订阅宿主 host 发来的消息。\n * @param name 消息名称\n * @param handler 收到消息时的回调,event 包含 source、origin、data\n * @returns 返回带 cancel() 的对象,调用可取消订阅\n */\n static on<T>(name: string, handler: (event: HostMessageEvent<T>) => void): Cancelable {\n const bridge = getBridge();\n if (!bridge) {\n throw new Error(`\n Unable to establish a connection with the PingCode nexus bridge.\n If you are trying to run your app locally, Nexus apps only work in the context of PingCode products. Refer to https://developer.pingcode.com for how to tunnel when using a local development server.\n `);\n }\n return bridge.on(name, handler);\n }\n}\n","export class BridgeAPIError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"BridgeAPIError\";\n Object.setPrototypeOf(this, BridgeAPIError.prototype);\n }\n}\n\n// 自动注册:所有未 catch 的 Promise rejection 均以 \"Uncaught (in promise)\" 格式输出,无需用户配置\nif (typeof window !== \"undefined\") {\n window.addEventListener(\n \"unhandledrejection\",\n (event: PromiseRejectionEvent) => {\n const reason = event.reason;\n const error = reason instanceof Error ? reason : new Error(String(reason));\n const firstLine = `Uncaught (in promise) ${error.name}: ${error.message}`;\n const stack = error.stack?.replace(/^[^\\n]*\\n?/, \"\").trim() || \"\";\n console.error(stack ? `${firstLine}\\n${stack}` : firstLine);\n event.preventDefault();\n event.stopImmediatePropagation();\n },\n true,\n );\n}\n","import { DialogOptions, DialogRef } from \"./models\";\nimport { NexusBridge } from \"./bridge\";\n\nclass NexusDialog {\n async open<T>(options: DialogOptions): Promise<DialogRef<T>> {\n return await NexusBridge.call<DialogRef<T>>(\"openDialog\", options);\n }\n}\n\nexport const dialog = new NexusDialog();\n","import { NexusBridge } from \"./bridge\";\nimport { InvokeFunctionParams } from \"./models\";\nimport { getObjectFromWindow } from \"./window\";\n\nexport async function invoke<TPayload = any, TResult = any>(functionKey: string, payload?: TPayload): Promise<TResult> {\n const params: InvokeFunctionParams = {\n function: functionKey,\n payload: payload,\n tunnel_token: getObjectFromWindow(\"__TUNNEL_TOKEN__\"),\n } as InvokeFunctionParams;\n const result = await NexusBridge.call(\"invokeFunction\", params);\n return result as TResult;\n}\n","import { NexusBridge } from \"./bridge\";\nimport { NavigationLocation } from \"./models\";\n\nclass NexusRouter {\n async navigate(urlOrLocation: string | NavigationLocation): Promise<void> {\n await NexusBridge.call<void>(\"routerNavigate\", { urlOrLocation });\n }\n\n async open(urlOrLocation: string | NavigationLocation): Promise<void> {\n await NexusBridge.call<void>(\"routerOpen\", { urlOrLocation });\n }\n\n async generateUrl(location: NavigationLocation): Promise<string> {\n return await NexusBridge.call<string>(\"routerGenerateUrl\", { location });\n }\n\n async reload(): Promise<void> {\n await NexusBridge.call<void>(\"routerReload\", {});\n }\n}\n\nexport const router = new NexusRouter();\n","import { NexusBridge } from \"./bridge\";\nimport { ExtensionData, NexusFullContext, NexusHistory } from \"./models\";\nimport { BridgeAPIError } from \"./error\";\n\nclass NexusView {\n async getContext<T = ExtensionData>(): Promise<NexusFullContext<T>> {\n return await NexusBridge.call(\"getContext\");\n }\n\n async setWindowTitle(title: string): Promise<void> {\n await NexusBridge.call<void>(\"setWindowTitle\", { title });\n }\n\n async reload(): Promise<void> {\n await NexusBridge.call<void>(\"viewReload\");\n }\n\n async close(): Promise<void> {\n const isSuccess = await NexusBridge.call<boolean>(\"viewClose\");\n if (!isSuccess) {\n const errorMessage = \"this resource's view is not closable.\";\n throw new BridgeAPIError(errorMessage);\n }\n }\n\n async onClose(payload: () => Promise<void>): Promise<void> {\n await NexusBridge.call<void>(\"viewOnClose\", { payload });\n }\n\n async isDialog(): Promise<boolean> {\n return await NexusBridge.call<boolean>(\"viewIsDialog\");\n }\n\n async createHistory(): Promise<NexusHistory> {\n const history = await NexusBridge.call<NexusHistory>(\"createHistory\");\n history.listen((location, action) => {\n history.action = action;\n history.location = location;\n });\n return history;\n }\n\n async submit<T = any>(payload?: T): Promise<void> {\n await NexusBridge.call<void>(\"viewSubmit\", payload);\n }\n}\n\nexport const view = new NexusView();\n","const isPlainObject = (value: any) => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n if (Object.prototype.toString.call(value) !== \"[object Object]\") {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n const constructor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return (\n typeof constructor === \"function\" &&\n constructor instanceof constructor &&\n Function.prototype.call(constructor) === Function.prototype.call(value)\n );\n};\n\nconst base64ToBlob = (b64string: string, mimeType: string) => {\n if (!b64string) {\n return null;\n }\n const base64String = b64string.includes(\",\") ? b64string.split(\",\")[1] : b64string;\n const byteCharacters = atob(base64String);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n return new Blob([byteArray], { type: mimeType });\n};\n\nconst blobToBase64 = (blob: Blob) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result);\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n};\n\nexport const serialiseBlobsInPayload = async (payload: any): Promise<any> => {\n if (payload instanceof Blob) {\n const base64Data = await blobToBase64(payload);\n return {\n data: base64Data,\n type: payload.type,\n __isBlobData: true,\n };\n }\n if (Array.isArray(payload)) {\n return Promise.all(payload.map((item) => serialiseBlobsInPayload(item)));\n }\n if (payload && isPlainObject(payload)) {\n const entries = await Promise.all(Object.entries(payload).map(async ([key, value]) => [key, await serialiseBlobsInPayload(value)]));\n return Object.fromEntries(entries);\n }\n return payload;\n};\n\nexport const deserialiseBlobsInPayload = (payload: any): any => {\n if (payload && isPlainObject(payload) && \"__isBlobData\" in payload) {\n const typedData = payload;\n return base64ToBlob(typedData.data, typedData.type);\n }\n if (Array.isArray(payload)) {\n return payload.map((item) => deserialiseBlobsInPayload(item));\n }\n if (payload && isPlainObject(payload)) {\n const result = {};\n for (const [key, value] of Object.entries(payload)) {\n (result as any)[key] = deserialiseBlobsInPayload(value);\n }\n return result;\n }\n return payload;\n};\n\nexport const containsBlobs = (payload: any): boolean => {\n if (payload instanceof Blob) {\n return true;\n }\n if (Array.isArray(payload)) {\n return payload.some((item) => containsBlobs(item));\n }\n if (payload && isPlainObject(payload)) {\n return Object.values(payload).some((value) => containsBlobs(value));\n }\n return false;\n};\n\nexport const containsSerialisedBlobs = (payload: any): boolean => {\n if (payload && isPlainObject(payload) && \"__isBlobData\" in payload) {\n return true;\n }\n if (Array.isArray(payload)) {\n return payload.some((item) => containsSerialisedBlobs(item));\n }\n if (payload && isPlainObject(payload)) {\n return Object.values(payload).some((value) => containsSerialisedBlobs(value));\n }\n return false;\n};\n","import { NexusBridge } from \"./bridge\";\nimport { Subscription } from \"./models\";\nimport { containsBlobs, serialiseBlobsInPayload, containsSerialisedBlobs, deserialiseBlobsInPayload } from \"./utils\";\n\nasync function on<T = any>(eventName: string, callback: (payload?: T) => any): Promise<Subscription> {\n const wrappedCallback = (payload: T) => {\n let newPayload = payload;\n if (containsSerialisedBlobs(payload)) {\n newPayload = deserialiseBlobsInPayload(payload);\n }\n return callback(newPayload);\n };\n return NexusBridge.call(\"on\", { eventName, callback: wrappedCallback });\n}\n\nasync function emit<T = any>(eventName: string, payload: T): Promise<void> {\n let newPayload = payload;\n if (containsBlobs(payload)) {\n newPayload = await serialiseBlobsInPayload(payload);\n }\n return NexusBridge.call(\"emit\", { eventName, payload: newPayload });\n}\n\nexport const events = {\n on,\n emit,\n};\n","import { Translator, GetTranslationsResult, NexusSupportedLocaleCode, TranslationResourceContent } from \"./models\";\nimport { view } from \"./view\";\n\nclass NexusI18n {\n private translationsCache: Partial<Record<NexusSupportedLocaleCode, Promise<TranslationResourceContent>>> = {};\n\n private i18nFolderName = \"__LOCALES__\";\n\n async getTranslations(locale?: NexusSupportedLocaleCode): Promise<GetTranslationsResult> {\n if (!locale) {\n locale = (await view.getContext()).locale;\n }\n const translations = await this.loadTranslations(locale!);\n return { locale: locale!, translations };\n }\n\n async createTranslator(locale?: NexusSupportedLocaleCode): Promise<Translator> {\n if (!locale) {\n locale = (await view.getContext()).locale;\n }\n const translations = await this.loadTranslations(locale!);\n return {\n translate: (key: string, params: Record<string, any> = {}) => this.translate(key, translations, params),\n };\n }\n\n private loadTranslations(locale: NexusSupportedLocaleCode): Promise<TranslationResourceContent> {\n const url = `../${this.i18nFolderName}/${locale}.json`;\n if (!this.translationsCache[locale]) {\n this.translationsCache[locale] = fetch(url)\n .then((res) => res.json())\n .catch((err) => {\n // 请求失败要清理缓存\n delete this.translationsCache[locale];\n throw err;\n });\n }\n\n return this.translationsCache[locale]!;\n }\n\n private getValue(obj: any, path: string): any {\n return path.split(\".\").reduce((o, k) => (o != null && typeof o === \"object\" ? o[k] : undefined), obj);\n }\n\n private translate(\n key: string,\n translations: TranslationResourceContent,\n params?: Record<string, any>,\n ): TranslationResourceContent | string {\n // 获取值(扁平或嵌套)\n let value: any = translations[key] ?? this.getValue(translations, key);\n\n // key 不存在 → 返回 key\n if (value == null) return key;\n\n // 如果 value 是对象 → 直接返回\n if (typeof value === \"object\") return value;\n\n // 确保 value 是字符串\n if (typeof value !== \"string\") value = String(value);\n\n // 无参数 → 直接返回\n if (!params) return value;\n\n // 参数替换\n return value.replace(/\\{\\{\\s*(.*?)\\s*\\}\\}/g, (_: string, k: string) => {\n const paramValue = this.getValue(params, k.trim());\n return paramValue != null ? String(paramValue) : `{{${k}}}`;\n });\n }\n}\n\nexport const i18n = new NexusI18n();\n","import { RequestApiResponseData } from \"../models\";\n\nexport async function buildPayloadByRequestInit<TPayload extends RequestInit = RequestInit>(init?: TPayload) {\n const requestBody = init === null || init === void 0 ? void 0 : init.body;\n const requestMethod = init === null || init === void 0 ? void 0 : init.method;\n const requestHeaders = init === null || init === void 0 ? void 0 : init.headers;\n const req = new Request(\"\", {\n body: requestBody,\n method: requestMethod,\n headers: requestHeaders,\n });\n const headers = Object.fromEntries(req.headers.entries());\n const body = req.method !== \"GET\" ? await req.text() : undefined;\n return {\n ...init,\n body: body,\n headers,\n method: requestMethod ?? \"GET\",\n };\n}\n\nexport async function parseToResponseData(res: RequestApiResponseData): Promise<Response> {\n const response = new Response(\n res.body == null ? undefined : typeof res.body === \"object\" ? JSON.stringify(res.body) : (res.body as BodyInit),\n {\n status: res.status,\n headers: new Headers(res.headers),\n },\n );\n\n return response;\n}\n","import { NexusBridge } from \"./bridge\";\nimport { RequestApiResponseData } from \"./models\";\nimport { buildPayloadByRequestInit, parseToResponseData } from \"./utils/request\";\n\ninterface RequestApiParams extends RequestInit {\n path: string;\n}\n\nasync function callRequestBridge<TPayload extends RequestInit = RequestInit>(handlerName: string, payload: TPayload): Promise<Response> {\n const postPayload = await buildPayloadByRequestInit<TPayload>(payload);\n const { status, headers, body } = await NexusBridge.call<RequestApiResponseData>(handlerName, postPayload);\n return parseToResponseData({ status, headers, body });\n}\n\nexport async function requestApi(path: string, options?: RequestInit): Promise<Response> {\n return callRequestBridge<RequestApiParams>(\"requestApi\", { path, ...options });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pc-nexus-bridge.mjs","sources":["../../../../web/bridge/src/window.ts","../../../../web/bridge/src/bridge.ts","../../../../web/bridge/src/error.ts","../../../../web/bridge/src/dialog.ts","../../../../web/bridge/src/invoke.ts","../../../../web/bridge/src/router.ts","../../../../web/bridge/src/view.ts","../../../../web/bridge/src/utils/blob-parser.ts","../../../../web/bridge/src/events.ts","../../../../web/bridge/src/i18n.ts","../../../../web/bridge/src/utils/request.ts","../../../../web/bridge/src/request-api.ts","../../../../web/bridge/src/pc-nexus-bridge.ts"],"sourcesContent":["export type SafeAny = any;\n\nexport function attachObjectToWindow<T>(key: string, value: T) {\n (window as SafeAny)[key] = value;\n}\n\nexport function getObjectFromWindow<T>(key: string) {\n return (window as SafeAny)[key];\n}\n","import { getObjectFromWindow } from \"./window\";\n\ninterface HostMessageEvent<T = unknown> {\n source: Window | null;\n origin: string;\n data: T;\n}\n\ninterface Cancelable {\n cancel: () => void;\n}\n\ninterface GlobalBridge {\n call<T>(name: string, payload?: object | undefined): Promise<T>;\n on<T>(name: string, handler: (event: HostMessageEvent<T>) => void): Cancelable;\n}\n\nfunction getBridge() {\n const bridge = getObjectFromWindow<GlobalBridge>(\"__pc_nexus_bridge__\");\n return bridge;\n}\n\nexport class NexusBridge {\n static getBridgeCall<T>(): (name: string, payload?: object) => Promise<T> {\n if (!getBridge()) {\n throw new Error(`\n Unable to establish a connection with the PingCode nexus bridge.\n If you are trying to run your app locally, Nexus apps only work in the context of PingCode products. Refer to https://developer.pingcode.com for how to tunnel when using a local development server.\n `);\n }\n return getBridge().call;\n }\n\n static async call<T>(name: string, payload?: any): Promise<T> {\n const result = await NexusBridge.getBridgeCall<T>()(name, payload);\n return result as T;\n }\n\n /**\n * 订阅宿主 host 发来的消息。\n * @param name 消息名称\n * @param handler 收到消息时的回调,event 包含 source、origin、data\n * @returns 返回带 cancel() 的对象,调用可取消订阅\n */\n static on<T>(name: string, handler: (event: HostMessageEvent<T>) => void): Cancelable {\n const bridge = getBridge();\n if (!bridge) {\n throw new Error(`\n Unable to establish a connection with the PingCode nexus bridge.\n If you are trying to run your app locally, Nexus apps only work in the context of PingCode products. Refer to https://developer.pingcode.com for how to tunnel when using a local development server.\n `);\n }\n return bridge.on(name, handler);\n }\n}\n","export class BridgeAPIError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"BridgeAPIError\";\n Object.setPrototypeOf(this, BridgeAPIError.prototype);\n }\n}\n\n// 自动注册:所有未 catch 的 Promise rejection 均以 \"Uncaught (in promise)\" 格式输出,无需用户配置\nif (typeof window !== \"undefined\") {\n window.addEventListener(\n \"unhandledrejection\",\n (event: PromiseRejectionEvent) => {\n const reason = event.reason;\n const error = reason instanceof Error ? reason : new Error(String(reason));\n const firstLine = `Uncaught (in promise) ${error.name}: ${error.message}`;\n const stack = error.stack?.replace(/^[^\\n]*\\n?/, \"\").trim() || \"\";\n console.error(stack ? `${firstLine}\\n${stack}` : firstLine);\n event.preventDefault();\n event.stopImmediatePropagation();\n },\n true,\n );\n}\n","import { NexusBridge } from \"./bridge\";\nimport { BridgeAPIError } from \"./error\";\nimport { DialogConfirmOptions, DialogOptions, DialogRef } from \"./models\";\n\nfunction validateOpenOptions(options: DialogOptions) {\n if (typeof options !== \"object\" || options === null) {\n throw new BridgeAPIError('\"options\" must be an object in dialog open.');\n }\n if (!options.resource) {\n throw new BridgeAPIError('\"resource\" is required in dialog open options.');\n }\n}\n\nfunction validateConfirmOptions(options: DialogConfirmOptions) {\n if (typeof options !== \"object\" || options === null) {\n throw new BridgeAPIError('\"options\" must be an object in dialog confirm.');\n }\n if (!options.content) {\n throw new BridgeAPIError('\"content\" is required in dialog confirm options.');\n }\n if (typeof options.onConfirm !== \"function\") {\n throw new BridgeAPIError('\"onConfirm\" must be a function in dialog confirm options.');\n }\n}\n\nclass NexusDialog {\n async open<T>(options: DialogOptions): Promise<DialogRef<T>> {\n validateOpenOptions(options);\n return await NexusBridge.call<DialogRef<T>>(\"openDialog\", options);\n }\n\n async confirm<T>(options: DialogConfirmOptions): Promise<void> {\n validateConfirmOptions(options);\n return await NexusBridge.call<void>(\"confirm\", options);\n }\n}\n\nexport const dialog = new NexusDialog();\n","import { NexusBridge } from \"./bridge\";\nimport { BridgeAPIError } from \"./error\";\nimport { InvokeFunctionParams } from \"./models\";\nimport { getObjectFromWindow } from \"./window\";\n\nfunction validatePayload<TPayload>(payload?: TPayload) {\n if (!payload) {\n return;\n }\n if (Object.values(payload).some((value) => typeof value === \"function\")) {\n throw new BridgeAPIError(\"Passing functions as part of the payload in invoke is not supported.\");\n }\n}\n\nexport async function invoke<TPayload = any, TResult = any>(functionKey: string, payload?: TPayload): Promise<TResult> {\n if (typeof functionKey !== \"string\") {\n throw new BridgeAPIError('\"functionKey\" must be a string in invoke.');\n }\n validatePayload(payload);\n\n const params: InvokeFunctionParams = {\n function: functionKey,\n payload: payload,\n tunnel_token: getObjectFromWindow(\"__TUNNEL_TOKEN__\"),\n } as InvokeFunctionParams;\n const result = await NexusBridge.call(\"invokeFunction\", params);\n return result as TResult;\n}\n","import { NexusBridge } from \"./bridge\";\nimport { BridgeAPIError } from \"./error\";\nimport { NavigationLocation } from \"./models\";\n\nclass NexusRouter {\n async navigate(urlOrLocation: string | NavigationLocation): Promise<void> {\n if (typeof urlOrLocation === \"string\") {\n await NexusBridge.call<void>(\"routerNavigate\", { urlOrLocation });\n } else {\n if (!urlOrLocation.target) {\n const errorMessage = '\"target\" is required in router navigate.';\n throw new BridgeAPIError(errorMessage);\n }\n await NexusBridge.call<void>(\"routerNavigate\", { urlOrLocation });\n }\n }\n\n async open(urlOrLocation: string | NavigationLocation): Promise<void> {\n if (typeof urlOrLocation === \"string\") {\n await NexusBridge.call<void>(\"routerOpen\", { urlOrLocation });\n } else {\n if (!urlOrLocation.target) {\n const errorMessage = '\"target\" is required in router open.';\n throw new BridgeAPIError(errorMessage);\n }\n await NexusBridge.call<void>(\"routerOpen\", { urlOrLocation });\n }\n }\n\n async generateUrl(location: NavigationLocation): Promise<URL> {\n if (!(location === null || location === void 0 ? void 0 : location.target)) {\n const errorMessage = '\"target\" is required in router generateUrl.';\n throw new BridgeAPIError(errorMessage);\n }\n return await NexusBridge.call<URL>(\"routerGenerateUrl\", { location });\n }\n\n async reload(): Promise<void> {\n await NexusBridge.call<void>(\"routerReload\", {});\n }\n}\n\nexport const router = new NexusRouter();\n","import { NexusBridge } from \"./bridge\";\nimport { BridgeAPIError } from \"./error\";\nimport { ExtensionData, NexusFullContext, NexusHistory } from \"./models\";\n\nclass NexusView {\n async getContext<T = ExtensionData>(): Promise<NexusFullContext<T>> {\n return await NexusBridge.call(\"getContext\");\n }\n\n async setWindowTitle(title: string): Promise<void> {\n if (!title) {\n throw new BridgeAPIError('\"title\" is required in view setWindowTitle.');\n }\n if (typeof title !== \"string\") {\n throw new BridgeAPIError('\"title\" must be a string in view setWindowTitle.');\n }\n\n await NexusBridge.call<void>(\"setWindowTitle\", { title });\n }\n\n async reload(): Promise<void> {\n const success = await NexusBridge.call<boolean>(\"viewReload\");\n if (success === false) {\n throw new BridgeAPIError(\"this resource's view is not reloadable.\");\n }\n }\n\n async close(): Promise<void> {\n const success = await NexusBridge.call<boolean>(\"viewClose\");\n if (!success) {\n const errorMessage = \"this resource's view is not closable.\";\n throw new BridgeAPIError(errorMessage);\n }\n }\n\n /**\n * 非弹窗场景调用无效。\n */\n async onClose(payload: () => Promise<void>): Promise<void> {\n if (typeof payload !== \"function\") {\n const errorMessage = '\"payload\" must be a function in view onClose.';\n throw new BridgeAPIError(errorMessage);\n }\n const success = await NexusBridge.call<boolean>(\"viewOnClose\", { payload });\n if (!success) {\n throw new BridgeAPIError(\"`onClose` failed because this resource's view is not closable.\");\n }\n }\n\n async isDialog(): Promise<boolean> {\n return await NexusBridge.call<boolean>(\"viewIsDialog\");\n }\n\n async createHistory(): Promise<NexusHistory> {\n const history = await NexusBridge.call<NexusHistory>(\"createHistory\");\n await history.listen((location, action) => {\n history.action = action;\n history.location = location;\n });\n return history;\n }\n\n async submit<T = any>(payload?: T): Promise<boolean> {\n const result = await NexusBridge.call<boolean>(\"viewSubmit\", payload);\n if (!result) {\n throw new BridgeAPIError(\"this resource's view is not submittable.\");\n }\n return result;\n }\n}\n\nexport const view = new NexusView();\n","const isPlainObject = (value: any) => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n if (Object.prototype.toString.call(value) !== \"[object Object]\") {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n if (proto === null) {\n return true;\n }\n const constructor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return (\n typeof constructor === \"function\" &&\n constructor instanceof constructor &&\n Function.prototype.call(constructor) === Function.prototype.call(value)\n );\n};\n\nconst base64ToBlob = (b64string: string, mimeType: string) => {\n if (!b64string) {\n return null;\n }\n const base64String = b64string.includes(\",\") ? b64string.split(\",\")[1] : b64string;\n const byteCharacters = atob(base64String);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n return new Blob([byteArray], { type: mimeType });\n};\n\nconst blobToBase64 = (blob: Blob) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result);\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n};\n\nexport const serialiseBlobsInPayload = async (payload: any): Promise<any> => {\n if (payload instanceof Blob) {\n const base64Data = await blobToBase64(payload);\n return {\n data: base64Data,\n type: payload.type,\n __isBlobData: true,\n };\n }\n if (Array.isArray(payload)) {\n return Promise.all(payload.map((item) => serialiseBlobsInPayload(item)));\n }\n if (payload && isPlainObject(payload)) {\n const entries = await Promise.all(Object.entries(payload).map(async ([key, value]) => [key, await serialiseBlobsInPayload(value)]));\n return Object.fromEntries(entries);\n }\n return payload;\n};\n\nexport const deserialiseBlobsInPayload = (payload: any): any => {\n if (payload && isPlainObject(payload) && \"__isBlobData\" in payload) {\n const typedData = payload;\n return base64ToBlob(typedData.data, typedData.type);\n }\n if (Array.isArray(payload)) {\n return payload.map((item) => deserialiseBlobsInPayload(item));\n }\n if (payload && isPlainObject(payload)) {\n const result = {};\n for (const [key, value] of Object.entries(payload)) {\n (result as any)[key] = deserialiseBlobsInPayload(value);\n }\n return result;\n }\n return payload;\n};\n\nexport const containsBlobs = (payload: any): boolean => {\n if (payload instanceof Blob) {\n return true;\n }\n if (Array.isArray(payload)) {\n return payload.some((item) => containsBlobs(item));\n }\n if (payload && isPlainObject(payload)) {\n return Object.values(payload).some((value) => containsBlobs(value));\n }\n return false;\n};\n\nexport const containsSerialisedBlobs = (payload: any): boolean => {\n if (payload && isPlainObject(payload) && \"__isBlobData\" in payload) {\n return true;\n }\n if (Array.isArray(payload)) {\n return payload.some((item) => containsSerialisedBlobs(item));\n }\n if (payload && isPlainObject(payload)) {\n return Object.values(payload).some((value) => containsSerialisedBlobs(value));\n }\n return false;\n};\n","import { NexusBridge } from \"./bridge\";\nimport { BridgeAPIError } from \"./error\";\nimport { Subscription } from \"./models\";\nimport { containsBlobs, serialiseBlobsInPayload, containsSerialisedBlobs, deserialiseBlobsInPayload } from \"./utils\";\n\nfunction validateOnPayload<T>(eventName: string, callback: (payload?: T) => any) {\n if (!eventName) {\n throw new BridgeAPIError('\"eventName\" is required in events on.');\n }\n if (typeof eventName !== \"string\") {\n throw new BridgeAPIError('\"eventName\" must be a string in events on.');\n }\n if (!callback) {\n throw new BridgeAPIError('\"callback\" is required in events on.');\n }\n if (typeof callback !== \"function\") {\n throw new BridgeAPIError('\"callback\" must be a function in events on.');\n }\n}\n\nfunction validateEmitPayload<T>(eventName: string) {\n if (!eventName) {\n throw new BridgeAPIError('\"eventName\" is required in events emit.');\n }\n if (typeof eventName !== \"string\") {\n throw new BridgeAPIError('\"eventName\" must be a string in events emit.');\n }\n}\n\nasync function on<T = any>(eventName: string, callback: (payload?: T) => any): Promise<Subscription> {\n validateOnPayload<T>(eventName, callback);\n\n const wrappedCallback = (payload: T) => {\n let newPayload = payload;\n if (containsSerialisedBlobs(payload)) {\n newPayload = deserialiseBlobsInPayload(payload);\n }\n return callback(newPayload);\n };\n return NexusBridge.call(\"on\", { eventName, callback: wrappedCallback });\n}\n\nasync function emit<T = any>(eventName: string, payload?: T): Promise<void> {\n validateEmitPayload<T>(eventName);\n\n let newPayload = payload;\n if (containsBlobs(payload)) {\n newPayload = await serialiseBlobsInPayload(payload);\n }\n return NexusBridge.call(\"emit\", { eventName, payload: newPayload });\n}\n\nexport const events = {\n on,\n emit,\n};\n","import { Translator, GetTranslationsResult, NexusSupportedLocaleCode, TranslationResourceContent, SUPPORTED_LOCALE_CODES } from \"./models\";\nimport { view } from \"./view\";\nimport { BridgeAPIError } from \"./error\";\n\nclass NexusI18n {\n private translationsCache: Partial<Record<NexusSupportedLocaleCode, Promise<TranslationResourceContent>>> = {};\n\n private i18nFolderName = \"__LOCALES__\";\n\n async getTranslations(locale?: NexusSupportedLocaleCode): Promise<GetTranslationsResult> {\n if (!locale) {\n locale = (await view.getContext()).account.locale;\n } else {\n if (!SUPPORTED_LOCALE_CODES.includes(locale)) {\n throw new BridgeAPIError(`\"locale\" must be a valid locale code, supported codes: ${SUPPORTED_LOCALE_CODES.join(\", \")}.`);\n }\n }\n const translations = await this.loadTranslations(locale!);\n return { locale: locale!, translations };\n }\n\n async createTranslator(locale?: NexusSupportedLocaleCode): Promise<Translator> {\n if (!locale) {\n locale = (await view.getContext()).account.locale;\n } else {\n if (!SUPPORTED_LOCALE_CODES.includes(locale)) {\n throw new BridgeAPIError(`\"locale\" must be a valid locale code, supported codes: ${SUPPORTED_LOCALE_CODES.join(\", \")}.`);\n }\n }\n const translations = await this.loadTranslations(locale!);\n return {\n translate: (key: string, params: Record<string, any> = {}) => this.translate(key, translations, params),\n };\n }\n\n private loadTranslations(locale: NexusSupportedLocaleCode): Promise<TranslationResourceContent> {\n const url = `../${this.i18nFolderName}/${locale}.json`;\n if (!this.translationsCache[locale]) {\n this.translationsCache[locale] = fetch(url)\n .then((response) => response.json())\n .catch((error) => {\n // 请求失败要清理缓存\n delete this.translationsCache[locale];\n throw new BridgeAPIError(`Failed to load translations for locale ${locale}, cause: ${error}`);\n });\n }\n\n return this.translationsCache[locale]!;\n }\n\n private getValue(obj: any, path: string): any {\n return path.split(\".\").reduce((o, k) => (o != null && typeof o === \"object\" ? o[k] : undefined), obj);\n }\n\n private translate(\n key: string,\n translations: TranslationResourceContent,\n params?: Record<string, any>,\n ): TranslationResourceContent | string {\n if (!key) {\n throw new BridgeAPIError('\"key\" is required in i18n translate.');\n }\n // 获取值(扁平或嵌套)\n let value: any = translations[key] ?? this.getValue(translations, key);\n\n // key 不存在 → 返回 key\n if (value == null) return key;\n\n // 如果 value 是对象 → 直接返回\n if (typeof value === \"object\") return value;\n\n // 确保 value 是字符串\n if (typeof value !== \"string\") value = String(value);\n\n // 无参数 → 直接返回\n if (!params) return value;\n\n // 参数替换\n return value.replace(/\\{\\{\\s*(.*?)\\s*\\}\\}/g, (_: string, k: string) => {\n const paramValue = this.getValue(params, k.trim());\n return paramValue != null ? String(paramValue) : `{{${k}}}`;\n });\n }\n}\n\nexport const i18n = new NexusI18n();\n","import { RequestApiResponseData } from \"../models\";\n\nexport async function buildPayloadByRequestInit<TPayload extends RequestInit = RequestInit>(init?: TPayload) {\n const requestBody = init === null || init === void 0 ? void 0 : init.body;\n const requestMethod = init === null || init === void 0 ? void 0 : init.method;\n const requestHeaders = init === null || init === void 0 ? void 0 : init.headers;\n const req = new Request(\"\", {\n body: requestBody,\n method: requestMethod,\n headers: requestHeaders,\n });\n const headers = Object.fromEntries(req.headers.entries());\n const body = req.method !== \"GET\" ? await req.text() : undefined;\n return {\n ...init,\n body: body,\n headers,\n method: requestMethod ?? \"GET\",\n };\n}\n\nexport async function parseToResponseData(res: RequestApiResponseData): Promise<Response> {\n const response = new Response(\n res.body == null ? undefined : typeof res.body === \"object\" ? JSON.stringify(res.body) : (res.body as BodyInit),\n {\n status: res.status,\n headers: new Headers(res.headers),\n },\n );\n\n return response;\n}\n","import { NexusBridge } from \"./bridge\";\nimport { BridgeAPIError } from \"./error\";\nimport { NexusRequestInit, RequestApiResponseData } from \"./models\";\nimport { buildPayloadByRequestInit, parseToResponseData } from \"./utils/request\";\n\ninterface RequestApiParams extends NexusRequestInit {\n path: string;\n}\n\nconst validateFetchOptions = (init?: NexusRequestInit) => {\n if (!init) {\n return init;\n }\n if (\"signal\" in init) {\n const { signal: _signal, ...rest } = init;\n console.error(\"Signal is not supported in @pc-nexus/bridge and was removed from fetch options.\");\n return rest;\n }\n return init;\n};\n\nasync function callRequestBridge<TPayload extends NexusRequestInit = NexusRequestInit>(\n handlerName: string,\n payload: TPayload,\n): Promise<Response> {\n const postPayload = await buildPayloadByRequestInit<TPayload>(payload);\n const { status, headers, body } = await NexusBridge.call<RequestApiResponseData>(handlerName, postPayload);\n return parseToResponseData({ status, headers, body });\n}\n\nexport async function requestApi(path: string, options?: NexusRequestInit): Promise<Response> {\n if (typeof path !== \"string\") {\n throw new BridgeAPIError('\"path\" must be a string in requestApi.');\n }\n\n const validatedOptions = validateFetchOptions(options);\n return callRequestBridge<RequestApiParams>(\"requestApi\", { path, ...validatedOptions });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@pc-nexus/bridge",
3
- "version": "0.0.1-next.3",
3
+ "version": "0.5.0-next.0",
4
4
  "peerDependencies": {},
5
5
  "dependencies": {
6
- "@pc-nexus/models": "0.0.1-next.3",
6
+ "@pc-nexus/models": "0.5.0-next.0",
7
7
  "tslib": "^2.3.0"
8
8
  },
9
9
  "sideEffects": false,
@@ -17,5 +17,6 @@
17
17
  "types": "./types/pc-nexus-bridge.d.ts",
18
18
  "default": "./fesm2022/pc-nexus-bridge.mjs"
19
19
  }
20
- }
20
+ },
21
+ "type": "module"
21
22
  }
@@ -1,5 +1,5 @@
1
- import { DialogOptions, DialogRef, NavigationLocation, ExtensionData, NexusFullContext, NexusHistory, Subscription, NexusSupportedLocaleCode, GetTranslationsResult, Translator } from '@pc-nexus/models';
2
- export { DialogOptions, DialogRef, ExtensionData, GetTranslationsResult, HistoryAction, LocationDescriptor, NavigationLocation, NavigationTarget, NexusFullContext, NexusHistory, NexusSupportedLocaleCode, Subscription, TranslationResourceContent, Translator, UnlistenCallback, ViewportSize } from '@pc-nexus/models';
1
+ import { DialogOptions, DialogRef, DialogConfirmOptions, NavigationLocation, ExtensionData, NexusFullContext, NexusHistory, Subscription, NexusSupportedLocaleCode, GetTranslationsResult, Translator, NexusRequestInit } from '@pc-nexus/models';
2
+ export { DialogConfirmOptions, DialogOptions, DialogRef, ExtensionData, GetTranslationsResult, HistoryAction, LocationDescriptor, NavigationLocation, NavigationTarget, NexusFullContext, NexusHistory, NexusRequestInit, NexusSupportedLocaleCode, Subscription, TranslationResourceContent, Translator, UnlistenCallback, ViewportSize } from '@pc-nexus/models';
3
3
 
4
4
  interface HostMessageEvent<T = unknown> {
5
5
  source: Window | null;
@@ -27,6 +27,7 @@ declare class BridgeAPIError extends Error {
27
27
 
28
28
  declare class NexusDialog {
29
29
  open<T>(options: DialogOptions): Promise<DialogRef<T>>;
30
+ confirm<T>(options: DialogConfirmOptions): Promise<void>;
30
31
  }
31
32
  declare const dialog: NexusDialog;
32
33
 
@@ -35,7 +36,7 @@ declare function invoke<TPayload = any, TResult = any>(functionKey: string, payl
35
36
  declare class NexusRouter {
36
37
  navigate(urlOrLocation: string | NavigationLocation): Promise<void>;
37
38
  open(urlOrLocation: string | NavigationLocation): Promise<void>;
38
- generateUrl(location: NavigationLocation): Promise<string>;
39
+ generateUrl(location: NavigationLocation): Promise<URL>;
39
40
  reload(): Promise<void>;
40
41
  }
41
42
  declare const router: NexusRouter;
@@ -45,15 +46,18 @@ declare class NexusView {
45
46
  setWindowTitle(title: string): Promise<void>;
46
47
  reload(): Promise<void>;
47
48
  close(): Promise<void>;
49
+ /**
50
+ * 非弹窗场景调用无效。
51
+ */
48
52
  onClose(payload: () => Promise<void>): Promise<void>;
49
53
  isDialog(): Promise<boolean>;
50
54
  createHistory(): Promise<NexusHistory>;
51
- submit<T = any>(payload?: T): Promise<void>;
55
+ submit<T = any>(payload?: T): Promise<boolean>;
52
56
  }
53
57
  declare const view: NexusView;
54
58
 
55
59
  declare function on<T = any>(eventName: string, callback: (payload?: T) => any): Promise<Subscription>;
56
- declare function emit<T = any>(eventName: string, payload: T): Promise<void>;
60
+ declare function emit<T = any>(eventName: string, payload?: T): Promise<void>;
57
61
  declare const events: {
58
62
  on: typeof on;
59
63
  emit: typeof emit;
@@ -70,6 +74,6 @@ declare class NexusI18n {
70
74
  }
71
75
  declare const i18n: NexusI18n;
72
76
 
73
- declare function requestApi(path: string, options?: RequestInit): Promise<Response>;
77
+ declare function requestApi(path: string, options?: NexusRequestInit): Promise<Response>;
74
78
 
75
79
  export { dialog, events, i18n, invoke, requestApi, router, view, BridgeAPIError as ɵBridgeAPIError, NexusBridge as ɵNexusBridge };