@lark-apaas/client-toolkit 1.1.14 → 1.1.15-alpha.dev.2

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.
@@ -3,7 +3,7 @@ import { useCallback, useEffect, useMemo, useRef } from "react";
3
3
  import { useLocation, useNavigate } from "react-router-dom";
4
4
  import { connectToParent } from "penpal";
5
5
  import { useUpdatingRef } from "../../hooks/useUpdatingRef.js";
6
- import { postMessage } from "../../utils/postMessage.js";
6
+ import { submitPostMessage } from "../../utils/postMessage.js";
7
7
  import { getPreviewParentOrigin } from "../../utils/getParentOrigin.js";
8
8
  import { childApi } from "./utils/childApi.js";
9
9
  import "./utils/listenHot.js";
@@ -17,7 +17,7 @@ function isRouteMessageType(type) {
17
17
  return Object.values(IframeBridge_RouteMessageType).includes(type);
18
18
  }
19
19
  async function connectParent() {
20
- postMessage({
20
+ submitPostMessage({
21
21
  type: 'PreviewReady',
22
22
  data: {}
23
23
  });
@@ -61,7 +61,7 @@ function IframeBridge() {
61
61
  isActive.current = false;
62
62
  return;
63
63
  }
64
- postMessage({
64
+ submitPostMessage({
65
65
  type: 'ChildLocationChange',
66
66
  data: location
67
67
  });
@@ -1,7 +1,7 @@
1
1
  import { Fragment, jsx } from "react/jsx-runtime";
2
2
  import { useEffect } from "react";
3
3
  import { snapdom } from "@zumer/snapdom";
4
- import { postMessage } from "../../utils/postMessage.js";
4
+ import { submitPostMessage } from "../../utils/postMessage.js";
5
5
  function PageHoc(props) {
6
6
  const { children } = props;
7
7
  useEffect(()=>{
@@ -17,7 +17,7 @@ function PageHoc(props) {
17
17
  backgroundColor: '#ffffff'
18
18
  }).then(async (res)=>{
19
19
  const imgEle = await res.toPng();
20
- postMessage({
20
+ submitPostMessage({
21
21
  type: 'PageScreenshot',
22
22
  data: imgEle.src
23
23
  });
@@ -1,5 +1,5 @@
1
1
  import sockjs_client from "sockjs-client";
2
- import { postMessage } from "../../../utils/postMessage.js";
2
+ import { submitPostMessage, submitSlardarEvent } from "../../../utils/postMessage.js";
3
3
  import { getWsPath } from "../../../utils/utils.js";
4
4
  let hotInited = false;
5
5
  function handleDevServerMessage(msg) {
@@ -8,14 +8,14 @@ function handleDevServerMessage(msg) {
8
8
  hotInited = true;
9
9
  return;
10
10
  }
11
- postMessage({
11
+ submitPostMessage({
12
12
  type: 'HmrMessage',
13
13
  msg: {
14
14
  type: 'hot'
15
15
  },
16
16
  data: null
17
17
  });
18
- } else if ('errors' === msg.type) postMessage({
18
+ } else if ('errors' === msg.type) submitPostMessage({
19
19
  type: 'HmrMessage',
20
20
  msg: {
21
21
  type: 'errors',
@@ -25,8 +25,7 @@ function handleDevServerMessage(msg) {
25
25
  });
26
26
  else if ('hmr-timing' === msg.type) {
27
27
  const { duration, fileCount, fileTotalSize } = msg.data;
28
- const slardar = window['KSlardarWeb'];
29
- if (slardar && 'function' == typeof slardar) slardar('sendEvent', {
28
+ submitSlardarEvent({
30
29
  name: 'runTiming',
31
30
  metrics: {
32
31
  duration
@@ -37,20 +36,19 @@ function handleDevServerMessage(msg) {
37
36
  fileTotalSize
38
37
  }
39
38
  });
40
- else console.warn('hmr listen function not found');
41
39
  }
42
40
  }
43
41
  function connectDevServer() {
44
42
  const sockUrl = getWsPath();
45
43
  const sock = new sockjs_client(sockUrl);
46
- sock.onopen = ()=>console.log("✅ connect DevServer SockJS");
44
+ sock.onopen = ()=>console.log('✅ connect DevServer SockJS');
47
45
  sock.onmessage = (event)=>{
48
46
  try {
49
47
  const msg = JSON.parse(event.data);
50
- console.log("hmr 消息:", msg);
48
+ console.log('hmr 消息:', msg);
51
49
  handleDevServerMessage(msg);
52
50
  } catch (err) {
53
- console.error("解析 hmr 消息失败:", event.data);
51
+ console.error('解析 hmr 消息失败:', event.data);
54
52
  }
55
53
  };
56
54
  return sock;
@@ -1,5 +1,66 @@
1
+ import { submitPostMessage, submitSlardarEvent } from "../utils/postMessage.js";
1
2
  import { levelSchema } from "./log-types.js";
2
3
  import { logger } from "./logger.js";
4
+ let devServerDisconnectInfo = null;
5
+ let retryCount = 0;
6
+ function processDevServerLog(log) {
7
+ if (!log) return;
8
+ const devFlag = log.includes('[webpacak-dev-server]');
9
+ if (devFlag && log.includes('Disconnected')) {
10
+ const time = Date.now();
11
+ devServerDisconnectInfo = {
12
+ time
13
+ };
14
+ submitPostMessage({
15
+ type: 'DevServerMessage',
16
+ data: {
17
+ type: 'devServer-status',
18
+ status: 'disconnected'
19
+ }
20
+ });
21
+ submitSlardarEvent({
22
+ name: 'sandbox-devServer',
23
+ categories: {
24
+ type: 'disconnected',
25
+ time
26
+ }
27
+ });
28
+ return;
29
+ }
30
+ if (!devServerDisconnectInfo) return;
31
+ if (devFlag && log.includes('Trying to reconnect')) {
32
+ if (retryCount) submitSlardarEvent({
33
+ name: 'sandbox-devServer',
34
+ categories: {
35
+ type: 'reconnect-failed',
36
+ retryCount: retryCount + 1
37
+ }
38
+ });
39
+ retryCount++;
40
+ return;
41
+ }
42
+ const hmrFlag = log.includes('[HMR]');
43
+ if (hmrFlag || devFlag && (log.includes('Socket connected') || log.includes('App updated') || log.includes('App hot update'))) {
44
+ submitPostMessage({
45
+ type: 'DevServerMessage',
46
+ data: {
47
+ type: 'devServer-status',
48
+ status: 'connected'
49
+ }
50
+ });
51
+ const startTime = devServerDisconnectInfo.time;
52
+ const duration = Date.now() - startTime;
53
+ devServerDisconnectInfo = null;
54
+ submitSlardarEvent({
55
+ name: 'sandbox-devServer',
56
+ categories: {
57
+ type: 'devServer-reconnected',
58
+ startTime,
59
+ duration
60
+ }
61
+ });
62
+ }
63
+ }
3
64
  function interceptErrors() {
4
65
  window.addEventListener('error', (event)=>{
5
66
  logger.error(event.error);
@@ -19,12 +80,13 @@ function interceptErrors() {
19
80
  originalMethod(...args);
20
81
  const level = 'log' === method ? 'info' : method;
21
82
  const log = args[0];
83
+ if ('string' == typeof log) processDevServerLog(log);
22
84
  if ('string' == typeof log && log.startsWith('[Dataloom]') && levelSchema.safeParse(level).success) {
23
85
  logger.log({
24
86
  level: level,
25
87
  args
26
88
  });
27
- postMessage({
89
+ submitPostMessage({
28
90
  type: 'Console',
29
91
  method,
30
92
  data: args
@@ -38,7 +38,14 @@ export interface HmrMessage extends IframeMessage<Record<string, never>> {
38
38
  data?: any;
39
39
  };
40
40
  }
41
- export type OutgoingMessage = PreviewReadyMessage | HmrMessage | ConsoleMessage | ChildLocationChangeMessage | CreatePageMessage | RenderErrorMessage | RenderErrorRepairMessage | PageScreenshotMessage | UpdateRoutesMessage;
41
+ /** devServer相关消息 */
42
+ export interface DevServerMessage extends IframeMessage<{
43
+ type: 'devServer-status';
44
+ status: 'connected' | 'disconnected';
45
+ }> {
46
+ type: 'DevServerMessage';
47
+ }
48
+ export type OutgoingMessage = PreviewReadyMessage | HmrMessage | ConsoleMessage | ChildLocationChangeMessage | CreatePageMessage | RenderErrorMessage | RenderErrorRepairMessage | PageScreenshotMessage | DevServerMessage | UpdateRoutesMessage;
42
49
  export interface GetRoutesMessage extends IframeMessage<Record<string, never>> {
43
50
  type: 'GetRoutes';
44
51
  }
@@ -1,5 +1,6 @@
1
1
  import type { IncomingMessage, OutgoingMessage } from '../types/iframe-events';
2
- export declare function postMessage<T extends OutgoingMessage>(message: T, targetOrigin?: string): void;
2
+ export declare function submitPostMessage<T extends OutgoingMessage>(message: T, targetOrigin?: string): void;
3
+ export declare function submitSlardarEvent(event: any): void;
3
4
  export declare function isOutgoingMessage<T extends OutgoingMessage['type']>(msg: OutgoingMessage, type: T): msg is Extract<OutgoingMessage, {
4
5
  type: T;
5
6
  }>;
@@ -1,15 +1,20 @@
1
1
  import { getPreviewParentOrigin } from "./getParentOrigin.js";
2
- function postMessage(message, targetOrigin) {
2
+ function submitPostMessage(message, targetOrigin) {
3
3
  try {
4
4
  window.parent.postMessage(message, targetOrigin ?? getPreviewParentOrigin());
5
5
  } catch (e) {
6
6
  console.error('postMessage error', e);
7
7
  }
8
8
  }
9
+ function submitSlardarEvent(event) {
10
+ const slardar = window['KSlardarWeb'];
11
+ if (slardar && 'function' == typeof slardar) slardar('sendEvent', event);
12
+ else console.warn('hmr listen function not found');
13
+ }
9
14
  function isOutgoingMessage(msg, type) {
10
15
  return msg.type === type;
11
16
  }
12
17
  function isIncomingMessage(msg, type) {
13
18
  return msg.type === type;
14
19
  }
15
- export { isIncomingMessage, isOutgoingMessage, postMessage };
20
+ export { isIncomingMessage, isOutgoingMessage, submitPostMessage, submitSlardarEvent };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lark-apaas/client-toolkit",
3
- "version": "1.1.14",
3
+ "version": "1.1.15-alpha.dev.2",
4
4
  "types": "./lib/index.d.ts",
5
5
  "main": "./lib/index.js",
6
6
  "files": [