weboffice-js-sdk 2.0.2 → 2.0.3-beta.6

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.
@@ -0,0 +1,120 @@
1
+ /**
2
+ * 缺省页能力的对外契约类型。
3
+ *
4
+ * 关于 scene 枚举归属(已确定):
5
+ * P1~P4 实施期,两侧(shimo-js-sdk 与 lizard-service-iframe-sdk)在本地 types
6
+ * 文件里手工保持字面量一致;联调稳定后沉淀到 `shimo-js-sdk-shared` 的常量中。
7
+ */
8
+ /**
9
+ * 缺省页场景枚举,必须与 `lizard-service-iframe-sdk` 侧完全一致。
10
+ */
11
+ export type EmptyPageScene = 'file-open-failed' | 'no-permission' | 'network-error' | 'token-expired';
12
+ /**
13
+ * `file-open-failed` 下可细分的子原因,承载 HTTP 协议级差异;
14
+ * 保持 scene 枚举粒度稳定,细节通过 reason 下钻。
15
+ */
16
+ export type FileOpenFailedReason = 'file-not-found' | 'file-deleted' | 'file-load-failed' | 'unknown';
17
+ export type TokenExpiredStrategy = 'refresh-first' | 'show-immediately';
18
+ /**
19
+ * 单个按钮的自定义。点击后统一触发 `emptyPageAction` 事件,
20
+ * 宿主监听事件后自行决定后续行为(重登 / 重试 / 隐藏等)。
21
+ */
22
+ export interface EmptyPageActionOverride {
23
+ /** 按钮文案。必填。 */
24
+ label: string;
25
+ }
26
+ /**
27
+ * 单个 scene 的文案/按钮自定义。未提供的字段走内置默认(文案走默认,按钮不渲染)。
28
+ */
29
+ export interface EmptyPageContentOverride {
30
+ /** 覆盖标题。 */
31
+ title?: string;
32
+ /** 覆盖描述。 */
33
+ description?: string;
34
+ /** 主按钮。不传则不渲染主按钮。 */
35
+ primary?: EmptyPageActionOverride;
36
+ /** 次按钮。不传则不渲染次按钮。 */
37
+ secondary?: EmptyPageActionOverride;
38
+ }
39
+ /**
40
+ * 宿主通过 `connect({ emptyPage })` 传入的配置。所有字段均可选。
41
+ *
42
+ * 默认行为:
43
+ * - 图片 / 文案(title / description)均内置,宿主无需传
44
+ * - **默认不渲染任何按钮**。如需按钮,必须在 `overrides[scene].primary/secondary`
45
+ * 里显式配置 label。按钮点击统一触发 `emptyPageAction` 事件。
46
+ */
47
+ export interface EmptyPageOptions {
48
+ /**
49
+ * 总开关,默认 true。
50
+ */
51
+ enabled?: boolean;
52
+ /**
53
+ * 启用的场景白名单。未指定时全部启用。
54
+ */
55
+ scenes?: EmptyPageScene[];
56
+ /**
57
+ * token 过期场景的定制策略:
58
+ * - `refresh-first`(默认):先走一次 getCredentials 刷新,失败再展示缺省页
59
+ * - 仅在宿主传了 `getCredentials` 时生效
60
+ * - 最多重试 1 次,5s 超时按失败处理
61
+ * - `show-immediately`:立即展示,不做刷新尝试
62
+ *
63
+ * 未传 `getCredentials` 时,无论配置如何都按 `show-immediately` 执行。
64
+ */
65
+ tokenExpiredStrategy?: TokenExpiredStrategy;
66
+ /**
67
+ * 按 scene 自定义文案和按钮。未配置 scene 走默认行为(默认文案 + 无按钮)。
68
+ */
69
+ overrides?: Partial<Record<EmptyPageScene, EmptyPageContentOverride>>;
70
+ }
71
+ /**
72
+ * 归一化后的缺省页配置,透传给 iframe 使用。
73
+ * 所有基础字段都是必填且完整填充,iframe 侧不需要再补默认值。
74
+ * `overrides` 保持稀疏(仅携带宿主显式传入的字段),避免透传多余数据。
75
+ */
76
+ export interface NormalizedEmptyPageOptions {
77
+ enabled: boolean;
78
+ scenes: EmptyPageScene[];
79
+ tokenExpiredStrategy: TokenExpiredStrategy;
80
+ overrides: Partial<Record<EmptyPageScene, EmptyPageContentOverride>>;
81
+ }
82
+ /**
83
+ * `emptyPageShown` 事件 payload。
84
+ */
85
+ export interface EmptyPageShownPayload {
86
+ scene: EmptyPageScene;
87
+ /**
88
+ * scene 内的子类型(如 FileOpenFailedReason),宿主可用于定制文案或埋点。
89
+ */
90
+ reason?: FileOpenFailedReason | string;
91
+ httpStatus?: number;
92
+ retryable?: boolean;
93
+ }
94
+ /**
95
+ * `emptyPageAction` 事件 payload,按钮被点击时触发。
96
+ * 宿主根据 scene + action 决定业务行为(重登 / 重试 / 隐藏等)。
97
+ */
98
+ export interface EmptyPageActionPayload {
99
+ scene: EmptyPageScene;
100
+ action: 'primary' | 'secondary';
101
+ }
102
+ /**
103
+ * `emptyPageHidden` 事件 payload。
104
+ */
105
+ export interface EmptyPageHiddenPayload {
106
+ scene: EmptyPageScene;
107
+ }
108
+ /**
109
+ * 完整的 scene 列表,用于作为默认值与合法性校验。
110
+ */
111
+ export declare const ALL_EMPTY_PAGE_SCENES: EmptyPageScene[];
112
+ /**
113
+ * 把宿主传入的 `emptyPage` 配置归一化成完整对象。
114
+ *
115
+ * - 未传 / undefined:启用全部 scene,使用默认 tokenExpiredStrategy,不携带 overrides
116
+ * - 传 true:等价于 `{ enabled: true }`
117
+ * - 传 false:等价于 `{ enabled: false }`,其余字段仍填充默认以保证形状一致
118
+ * - 传对象:按字段覆盖,未覆盖部分使用默认
119
+ */
120
+ export declare function normalizeEmptyPageOptions(input?: boolean | EmptyPageOptions): NormalizedEmptyPageOptions;
package/package.json CHANGED
@@ -1,10 +1,50 @@
1
1
  {
2
2
  "name": "weboffice-js-sdk",
3
- "version": "2.0.2",
4
- "description": "weboffice js sdk",
5
- "main": "index.js",
6
- "types": "index.d.ts",
3
+ "version": "2.0.3-beta.6",
4
+ "description": "",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/shimo-open/shimo-js-sdk.git"
8
+ },
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "scripts": {
12
+ "preversion": "npm run docs && git add -A docs && git diff-index --quiet HEAD || git commit -m 'docs: update'",
13
+ "test": "echo \"Error: no test specified\" && exit 1",
14
+ "build": "webpack",
15
+ "lint": "eslint .",
16
+ "format": "eslint --fix .&& prettier --write .",
17
+ "prepack": "npm run lint && NODE_ENV=production npm run build && node scripts/prepack.js",
18
+ "publish:dist": "npm run prepack && npm publish ./dist",
19
+ "prepare": "husky install",
20
+ "docs": "typedoc && cp -r ./src/types/readme ./docs/details",
21
+ "prepublishOnly": "node scripts/prepublishOnly.js"
22
+ },
23
+ "author": "Chris Yip <chris@yesui.co>",
7
24
  "license": "MIT",
25
+ "devDependencies": {
26
+ "@types/globalthis": "^1.0.1",
27
+ "@types/lodash.forin": "^4.4.6",
28
+ "@types/uuid": "^8.3.3",
29
+ "@typescript-eslint/eslint-plugin": "^4.33.0",
30
+ "clean-webpack-plugin": "^3.0.0",
31
+ "eslint": "^7.32.0",
32
+ "eslint-config-prettier": "^8.0.0",
33
+ "eslint-config-standard-with-typescript": "^21.0.1",
34
+ "eslint-plugin-import": "^2.22.1",
35
+ "eslint-plugin-node": "^11.1.0",
36
+ "eslint-plugin-promise": "^4.2.1",
37
+ "eslint-plugin-standard": "^5.0.0",
38
+ "husky": "^6.0.0",
39
+ "lint-staged": "^10.5.4",
40
+ "prettier": "^2.2.1",
41
+ "ts-loader": "^8.0.14",
42
+ "typedoc": "0.22.10",
43
+ "typedoc-plugin-markdown": "3.11.7",
44
+ "typescript": "^4.7.4",
45
+ "webpack": "^5.18.0",
46
+ "webpack-cli": "^4.4.0"
47
+ },
8
48
  "dependencies": {
9
49
  "base62str": "^1.0.9",
10
50
  "core-js": "^3.19.1",
@@ -16,11 +56,21 @@
16
56
  "proxy-polyfill": "^0.3.2",
17
57
  "officesdk-broadcast-channel": "^1.2.0",
18
58
  "weboffice-js-sdk-shared": "^2.0.1",
19
- "weboffice-startparams": "^3.0.1",
59
+ "weboffice-startparams": "3.0.2",
20
60
  "tiny-emitter": "^2.1.0",
21
61
  "uuid": "^8.3.2"
22
62
  },
63
+ "files": [
64
+ "dist"
65
+ ],
23
66
  "publishConfig": {
24
67
  "registry": "https://registry.npmjs.org/"
68
+ },
69
+ "lint-staged": {
70
+ "*.{js,ts}": [
71
+ "npm run lint",
72
+ "prettier --write"
73
+ ],
74
+ "*.{css,md,json}": "prettier --write"
25
75
  }
26
76
  }
@@ -1 +0,0 @@
1
- export declare const LoadingSvg = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CjxyZWN0IHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0idXJsKCNwYXR0ZXJuMF8yNDA3NV8yMjMyNikiLz4KPGRlZnM+CjxwYXR0ZXJuIGlkPSJwYXR0ZXJuMF8yNDA3NV8yMjMyNiIgcGF0dGVybkNvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHdpZHRoPSIxIiBoZWlnaHQ9IjEiPgo8dXNlIHhsaW5rOmhyZWY9IiNpbWFnZTBfMjQwNzVfMjIzMjYiIHRyYW5zZm9ybT0ic2NhbGUoMC4wMTA0MTY3KSIvPgo8L3BhdHRlcm4+CjxpbWFnZSBpZD0iaW1hZ2UwXzI0MDc1XzIyMzI2IiB3aWR0aD0iOTYiIGhlaWdodD0iOTYiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBR0FBQUFCZ0NBWUFBQURpbUhjNEFBQUFBWE5TUjBJQXJzNGM2UUFBQ2R0SlJFRlVlRjd0WFMyWTJ6Z1FWWmtEU3dzTEM1Y1dGaFlXSGoxWWVPd08zckdEaGFVSEZ4WVdMbDFZdUhCcFlNSnkzeWdhN1dnOG94bkpkcktKc3lTT0xjM1Blek1qMlpHOGI4THQ3NndJdkRtcjlwdnljQ1BnekVGd0krQkdRQWgvM3o4ZmRpR0VUUWlCZnY3ejVkMHNBZkxuL2ZPQnk0YnZmODBrZndxSHN6allZNEFHK3B4QWVYWE1SWFFQRGljbkFFRHBNYlExV2srbHA4Y1gydWRrQlBRQ1FvMzFrbkJLWGErZWdEbkFRQ2RQU1FEbzlPcWJRc0tpR1NDQlB3eWJzTi9EVVB2eXg4OXAzejJBY0owOStzQXkycytqdDVlRVJRaEFFS2dURnNqY2FlbTdKeW9sM1pxc0ZwdVdJbUYyQWpnQUVnbTFjM2hOYS9QSDU3ZFZtMEUvbHpGRkgyUXJsV2ZwYjgyRVdRbEE1OEVJYnJqM25OWFBpc1IvZjJ3UFhBWitsMnl3OUVsa3prbkNMQVJRcDZtVE5ZZTFkbFlmeTNtUExSN2RWaHNyRUx5Wk1Cc0JYb1ZUMmxuZ28yd2dZWXFlbHI1ZW16U1prd2c0cGFQZ2dOZlpVOXJsdFdsMkFscWRIR0JjYUFrdG1BcVNQcTJPdHRyWGFOcW9lYXQ5S0tBckE2aHpITmhXb0QzdGU1M2pKQXdEVEE1SzdFYjJlOXF3WUFJWlg0M1oyYXdaQUk1WndGTm5hVnM4bG9DWDJ2V0NUOGNEUzFlOFR4QXlsQk5tK2R4amEzTUdmSU5wWHZJT0RlU2dXb0FYNUtTSXl6S0dFTDUrcXMvMWU4c0YyazUxUVViVTdCMzVodlp5dXhPQnJTUTBFWkFkU0ZZQkVTTm5pR0Z3TVRwSVBtRWd5QVFtbytINlVxQkxaSDM3Q2ZjS3N1MW9IN1c1OEFGdEpyYno2eTNseUUwQWdDOEJxZ0U4eWc1S0dndXJGb043bzE4amdnSStBbDhEV2NzQ2N0NGJVSDRDZm00UG85RGx4Yk1wbDA4YjlUWGlJQ09pYnkyMVZQS1Y0T0VOS2hjQmhZSHhGakVaNnpsV0hQTkd5SndSMzBVQ2dvcSswcUFERWlRTVVodVBqeVlCR3ZneEFMQytLMFJnbXlLeVlNcTIwQ0E3bGF6b0svTWxCM29LSlA0ZGdqR1dXOUlQMjNqOGRCRkFnU3hBNVVxcGtTUkxXZ3lhQ3VJYy9ZRUlIang1NWtiS2xOVUcrdnh1QkZ1VmdHd0lteWYzbEVwUE5Nd0IzbHd5V24zWE1JSHpOUktxQkh5SDZSb2JtMmlHZXE5ZEd2aElZcXYvMmpqZVJRQlZMb0d1amIvY0NDc0Y1NHJZcGVSSUpHaHpFSTRKL2E3aG9HWUFLSjdEcVdzZ0lPSWdQYXRvQUtpSmdBaSs5ZUFEbFZjTXUzVHdhU25LV0J2ei94RlpwTDJFaDVnQnJ1aFhDTm9NSWV6Mjl1amZFRHl2b3FrTEU4UFNOZ0lTd0Fnb3l1YmZSenBUdjJ1Si9wd0ZEOXZqK2xMK0lJdVhwMHFHL1A1eC9KQnhsQUhBZEFHeVJBU1pjMldqaHJTNDlncWpuNWNpaWsvck1RL01FUUgvUFd3UGtXVUNLQ3F4UHNIUWE0dDhtdUhmV1JaazhBbFdGRGZwK0RlV0JlTU1JRXBNQmJDa1BOVjhWTVlWdklvQ1BxTVJHS0JXTUlyWDB4SjhpbEZCQUFnSFd5RURRRURQOFNvSVNFQnErRWo0NGJscUJrUjJxZkRHNDJzSEh4TXBCNnFCRDRLZU41Mmt3RFl6b0RkajEwYkFIRGlKSldnT3diMHlMcUVmWmtDdnJZdGt3RnFpbjVlaEdnbkRKZ1MyRWo4M1I3eHlCaUNyMWhPSTRqNkRLRmdyQWRwOUZ5V0d0L2xDcHFJRkFlb3o3UVIwN1RFSUZkcWJtcGZVRHdLVzQwVnZpcTNmVEJDdlRNRDk0L1lBNllKcGt6L3hKMkFrSVcxanpJOWswL20xWmNBSUwwQ2ZZS1JoaVcxR0plZyszUU1Vei9OWjVLZGJnK052OG9TSXRZRVBXQmQ0OGFDVTFpM1FOcHNRdnR3ZG53c1ZHVkRza3NZTnU0bFo2OXJhU2xBazRYRjdpTGpVTUpKd0RDR01TeEJrQU44bDdSRk0yTHlrR2o3VjFpYndoZDNudmd5SXorU0dzSSszZE93OUF1UTdDcHZxMUtYMWp5VEU1eEhDZXhZa3ZFaGJtUUFMY0txTXRWMGJDUUIrRVp3S2RqeUFoODBROW1FL0hnTitQTzRPUE5Kalp4aHk0K3pvSlJPNDBEWFdmem9HVUd5T1U5RngxZEF3S3dkaDdCejJoUkFrZ2dvcHpoRkdMNjJNOU5vYkF4WnhJbmhoaEdjaWVKdjAvZlBkcHB3RmdVRG94SVY2enEydC9DQnBJZ2tKNElqYmJuK3NIQUpCb3pHQUNwTkFSeUgwR2oxR1Juc2o2dEw2OFlEVmNMSHd5aVVJQlVZZ090YkFySldBM3NCUlM5QlVnYjM5TDYxZkViQ054dE5nbFRPQUNaUjJGM0tkdHd4b1kyR1VBZEQ5NTY5ZDNEdlY4a2ZKV1FzSk5QcEhPeW1GYmE2eHFwUHpZZ1pBb3grL2RuR3JqclNMa1F1UnNtSk5CRmpBMXpEODlPRTRCWVcvNGlkSllMWVZmTHFia0FwdXlhSkxhNHVWUXQxSlNhSmR3bFBOQUJBY3AwMHBDMXFQMTBDQUYzd0FYc05QelFBY0I2WkU1TFdUZ0VIYWl4SEhaN1F5YnFvQ01PeWFTWmlLejQyQTN0Qk5zOFFKM1dOWGt3QXNROWJxaURnclVsNUJjNDBaOEFCVGRJSys5SU84aGdtMmxYQVJOMmpRTkpOQXJwRlRVelkxZXM3Wkh6SFJnczZEazVzQVpIdktzZ3VJbG12SkJBNis5cFlZbWdIU3NwU1BaUDR2M2dmUUNNc2sxTjUrd3Q4Y2tnVEVWUk5EQ0IvZnY5eHduRE42cCtnRzhPT1VNcjNsWlFTc2hBOS95VWNJUVFKL2RDTldFUEIwdkN1dXZoYUNHWmJmcGtLSXVPUXNnQ0JFVERJT0ZQREthelBpUFVBS1JEaG9KZ0FFWkFPczlYZTFBbmpCbWZDUWdqQ1NZTTFLS2hocDRGY3pJQktBQm5nR0E2a0FrcFNxR1RHbFJDelZWd1JmWGJ0SnBvT2NDQ2cvbFZKc3ZxeWpNQVM5OVJCQzJ1Qkd2a3Nob1JwNFBCc01VaXlmL1FTa1p4dDBWeVFmSU9oK3NkRUxrRkpSdEF4YUtxSzljbFh3aFlCU1gvQkUybG9URVpNQU1QenhhUmUzTGtramNrRUlhOFBKUW9KZUl3a1VlR25yTGQveGlGamtsWWRwK3hIZFlYcm5tQVc2Q01EeFFGc2NCOWM5MTJnN09MYWl3eHUxVTlzQitEMzJqOEJQaHNCNUQvam1JRXdkd3l5b3JGQjByMVBsTXM1RmhPWlRMYUFzLy9HNjF5ZDNCdEJTVkRNQzJubVhTdElkbWQ2SW1ScnQyQi9BcjluYTR3ZjYwK0pMRXdGSVFnMEVDcW9YcktMUEVNTGR1Mlh1b0JGMENxNW1ZN01mYWVCdEFiK3BCUEZ5NUFWWGJlZFllOVRxakthTEFqL1pia05BcTgzTkdSQ3o0UG40bUtMNHF3RnFnRzB0ZTJsMUtwY1p5YzZGR09pMXNZdUFvaFF4Y1BrUDFkUmZDMmlPRFczZjZxQVU5WnB0a2wxdVA0YmpVNG9QbldXem13QUE2OWZ6eXpvaURkeWFjeUJEV2pXZzlmRTZDZUJycXp1c2dMRDhrT1MyQmdlMVlSSUJHZ2xTOUxTZW8rUmdYNitqR0JnMWNqMzJlTExBYTVOVytTWVRnQ1RBSjMrUnQ3Uzh4WHRPa3VmSkFBNCtYeDdTWW1PdExkam5zY2NhY21ZaEFKV0E4M2hzclMzU25CdTlqWjJ0VTdLY1Joc3MvWlJnN3pINlp0bGdnVDVyQ2VMS0tBa3RobmpiV3M2Zlc3L1hEMnczYXdaSW1kQnFrTlgrbkFSWXVpM2JwZXVMRU9BaHduRWZKdnBqZ2JCRUJsZzZlNEJmTkFPb1FVOHdWWFZZcUsyendhNXcvYjF6cm8wa1dMOGl4cG1XOU05N3lMa2x3UWY5aTJaQVNjUWg3aXJrVG52VzJXQWJMeGljZEkySXZMMVUrT2NaWGwyTzJLbzJPUmtCYU1YVDloRDNJeGMvbmFZOXlPSXZuZWxhS3lCSVFwYkpkRkJVYUp2M2I5K2NGSk9US2lzeVluczQ0R3RveGRlK2t6ZWlla3NQRHpVZ0czUlk4dUVWa2FjRy9tUmpnQ2RGRWFqOEV0SUVmaS93R2hGTHlmZjRxTFU1V3daTU1mcWErdDRJT0RPYk53SnVCSndaZ1RPci94OGdaQ1haZUNqMmJRQUFBQUJKUlU1RXJrSmdnZz09Ii8+CjwvZGVmcz4KPC9zdmc+Cg==";